|
| 1 | +# Assessment: Quilt-Based Content Dependency System |
| 2 | + |
| 3 | +## Context |
| 4 | + |
| 5 | +The goal is to create a `quilt.json` specification that enables educational content sharing and dependency management. This allows courses to depend on and reuse content from other courses without duplication, while maintaining clear interfaces for content consumption. |
| 6 | + |
| 7 | +## Use Case Example |
| 8 | + |
| 9 | +A Doomsday algorithm course needs modular arithmetic (mod 7) content. Instead of duplicating this content, it should be able to: |
| 10 | +- Declare a dependency on a `math` quilt |
| 11 | +- Specify it only needs the `mod7` subset |
| 12 | +- Let the math course determine how to best serve that need |
| 13 | + |
| 14 | +## Core Architecture |
| 15 | + |
| 16 | +### ContentSource Interface Analysis |
| 17 | + |
| 18 | +From `@packages/db/src/core/interfaces/contentSource.ts`, the key interface is: |
| 19 | + |
| 20 | +```typescript |
| 21 | +export interface StudyContentSource { |
| 22 | + getPendingReviews(): Promise<(StudySessionReviewItem & ScheduledCard)[]>; |
| 23 | + getNewCards(n?: number): Promise<StudySessionNewItem[]>; |
| 24 | +} |
| 25 | +``` |
| 26 | + |
| 27 | +### Proposed Quilt Structure |
| 28 | + |
| 29 | +```json |
| 30 | +{ |
| 31 | + "serviceDef": { |
| 32 | + "name": "ContentSource", |
| 33 | + "version": "1.0", |
| 34 | + "adapter": "StaticDataLayerProvider" |
| 35 | + }, |
| 36 | + "metadata": { |
| 37 | + "id": "math-core-v1", |
| 38 | + "name": "Core Mathematics", |
| 39 | + "version": "1.0.0", |
| 40 | + "description": "Foundational math concepts", |
| 41 | + "author": "...", |
| 42 | + "license": "..." |
| 43 | + }, |
| 44 | + "provides": { |
| 45 | + "skills": [ |
| 46 | + { |
| 47 | + "id": "modular-arithmetic", |
| 48 | + "name": "Modular Arithmetic", |
| 49 | + "subsets": ["mod7", "mod12", "general-modular"] |
| 50 | + }, |
| 51 | + { |
| 52 | + "id": "basic-algebra", |
| 53 | + "name": "Basic Algebra", |
| 54 | + "subsets": ["linear-equations", "quadratic-equations"] |
| 55 | + } |
| 56 | + ] |
| 57 | + }, |
| 58 | + "dependencies": { |
| 59 | + "requires": [ |
| 60 | + { |
| 61 | + "quilt": "arithmetic-basics", |
| 62 | + "version": "^1.0.0", |
| 63 | + "skills": ["addition", "subtraction", "multiplication"] |
| 64 | + } |
| 65 | + ], |
| 66 | + "suggests": [ |
| 67 | + { |
| 68 | + "quilt": "number-theory", |
| 69 | + "version": "^2.0.0", |
| 70 | + "skills": ["prime-factorization"], |
| 71 | + "reason": "Enhanced explanations for modular arithmetic" |
| 72 | + } |
| 73 | + ] |
| 74 | + }, |
| 75 | + "content": { |
| 76 | + "source": { |
| 77 | + "type": "static", |
| 78 | + "path": "./courses/math-core" |
| 79 | + }, |
| 80 | + "index": { |
| 81 | + "skills": { |
| 82 | + "modular-arithmetic": { |
| 83 | + "cards": ["mod-intro-001", "mod7-examples-001", "mod7-practice-001"], |
| 84 | + "prerequisites": ["multiplication", "division-remainder"], |
| 85 | + "difficulty": "intermediate" |
| 86 | + } |
| 87 | + } |
| 88 | + } |
| 89 | + } |
| 90 | +} |
| 91 | +``` |
| 92 | + |
| 93 | +## Key Components |
| 94 | + |
| 95 | +### 1. Service Definition |
| 96 | +- **Interface compatibility**: Which ContentSource version this quilt implements |
| 97 | +- **Adapter specification**: How the quilt's data gets consumed (StaticDataLayerProvider, CouchDataLayerProvider, etc.) |
| 98 | + |
| 99 | +### 2. Skill Taxonomy |
| 100 | +- **Provides**: What educational skills/concepts this quilt offers |
| 101 | +- **Subsets**: Granular divisions of skills for precise dependency management |
| 102 | +- **Prerequisites**: Skills needed before accessing this content |
| 103 | + |
| 104 | +### 3. Dependency Management |
| 105 | +- **Requires**: Hard dependencies on other quilts |
| 106 | +- **Suggests**: Soft dependencies that enhance the experience |
| 107 | +- **Version constraints**: Semantic versioning for compatibility |
| 108 | + |
| 109 | +### 4. Content Mapping |
| 110 | +- **Source location**: Where the actual content lives |
| 111 | +- **Skill indexing**: Maps skills to specific cards/content |
| 112 | +- **Metadata**: Difficulty, prerequisites, learning objectives |
| 113 | + |
| 114 | +## Implementation Considerations |
| 115 | + |
| 116 | +### Content Discovery |
| 117 | +```typescript |
| 118 | +interface QuiltRegistry { |
| 119 | + findQuiltsBySkill(skill: string): Promise<QuiltDescriptor[]>; |
| 120 | + resolveQuilt(id: string, version: string): Promise<QuiltInstance>; |
| 121 | + validateDependencies(quilt: QuiltDescriptor): Promise<ValidationResult>; |
| 122 | +} |
| 123 | +``` |
| 124 | + |
| 125 | +### Dependency Resolution |
| 126 | +```typescript |
| 127 | +interface DependencyResolver { |
| 128 | + resolveSkillChain(requiredSkills: string[]): Promise<ContentPlan>; |
| 129 | + buildStudySession(plan: ContentPlan, user: UserDBInterface): Promise<StudyContentSource>; |
| 130 | +} |
| 131 | +``` |
| 132 | + |
| 133 | +### Content Filtering |
| 134 | +```typescript |
| 135 | +interface ContentFilter { |
| 136 | + filterBySkills(source: StudyContentSource, skills: string[]): StudyContentSource; |
| 137 | + filterByDifficulty(source: StudyContentSource, level: DifficultyLevel): StudyContentSource; |
| 138 | + filterByPrerequisites(source: StudyContentSource, userSkills: string[]): StudyContentSource; |
| 139 | +} |
| 140 | +``` |
| 141 | + |
| 142 | +## Benefits |
| 143 | + |
| 144 | +### 1. Content Reusability |
| 145 | +- Courses can share foundational content without duplication |
| 146 | +- Specialized courses can focus on their unique value-add |
| 147 | +- Consistent presentation of core concepts across the ecosystem |
| 148 | + |
| 149 | +### 2. Modular Architecture |
| 150 | +- Clean separation of concerns |
| 151 | +- Easier maintenance and updates |
| 152 | +- Scalable content ecosystem |
| 153 | + |
| 154 | +### 3. Adaptive Learning |
| 155 | +- Precise skill targeting |
| 156 | +- Prerequisite enforcement |
| 157 | +- Intelligent content recommendations |
| 158 | + |
| 159 | +### 4. Ecosystem Growth |
| 160 | +- Lower barrier to creating specialized courses |
| 161 | +- Encourages contribution to shared knowledge bases |
| 162 | +- Natural evolution toward comprehensive curriculum coverage |
| 163 | + |
| 164 | +## Challenges |
| 165 | + |
| 166 | +### 1. Skill Taxonomy Standardization |
| 167 | +- Need agreed-upon skill identifiers |
| 168 | +- Difficulty levels must be consistent |
| 169 | +- Prerequisite relationships need validation |
| 170 | + |
| 171 | +### 2. Content Quality Assurance |
| 172 | +- Ensure dependencies provide quality content |
| 173 | +- Version compatibility across skill updates |
| 174 | +- Consistent learning experience across quilts |
| 175 | + |
| 176 | +### 3. Performance Implications |
| 177 | +- Dependency resolution complexity |
| 178 | +- Content loading from multiple sources |
| 179 | +- Caching strategies for composed content |
| 180 | + |
| 181 | +## Recommendation |
| 182 | + |
| 183 | +This quilt-based approach addresses a real architectural need in educational content systems. It enables: |
| 184 | + |
| 185 | +1. **Composable curricula** where courses can be built from reusable skill-based components |
| 186 | +2. **Efficient content creation** by leveraging existing, well-tested educational content |
| 187 | +3. **Consistent learning experiences** through standardized skill taxonomies |
| 188 | +4. **Scalable content ecosystems** that grow organically |
| 189 | + |
| 190 | +The proposed structure balances flexibility with standardization, providing clear interfaces while allowing for diverse content sources and presentation styles. |
| 191 | + |
| 192 | +### Next Steps |
| 193 | + |
| 194 | +1. **Define core skill taxonomy** for foundational subjects |
| 195 | +2. **Implement dependency resolver** in the CLI |
| 196 | +3. **Create quilt registry** for content discovery |
| 197 | +4. **Build content filtering system** for subset selection |
| 198 | +5. **Develop migration tools** to convert existing courses to quilts |
| 199 | + |
| 200 | +This approach transforms Vue Skuilder from a course platform into a composable educational content ecosystem. |
0 commit comments