Create an exercise directory structure that passes pnpm ai-hero-cli internal lint , then commit with git commit .
Create exercise directory structures that pass
pnpm ai-hero-cli internal lint, then commit withgit commit.
Directory naming
- Sections:
exercises/withinXX-section-name/(for example01-retrieval-skill-building)Sections:
XX-section-name/insideexercises/(e.g.,01-retrieval-skill-building) - Exercises:
XX.YY-exercise-name/within a section (for example01.03-retrieval-with-bm25)Exercises:
XX.YY-exercise-name/inside a section (e.g.,01.03-retrieval-with-bm25) - Section number =
XX, exercise number =XX.YYSection number =
XX, exercise number =XX.YY - Names use kebab-case (lowercase, hyphens)
Names are dash-case (lowercase, hyphens)
Exercise variants
Each exercise needs at least one of the following subfolders:
Each exercise needs at least one of these subfolders:
problem/- Student workspace, containing TODOsproblem/- student workspace with TODOssolution/- Reference implementationsolution/- reference implementationexplainer/- Concept material, no TODOsexplainer/- conceptual material, no TODOs
When creating stubs, use explainer/by default, unless the plan says otherwise.
When stubbing, default to
explainer/unless the plan specifies otherwise.
Required files
Each subfolder (problem/、solution/、explainer/) needs a readme.md, which:
Each subfolder (
problem/,solution/,explainer/) needs areadme.mdthat:
- Cannot be empty(must have actual content, even just a one-line title is fine)
Is not empty (must have real content, even a single title line works)
- Has no broken links
Has no broken links
When creating stubs, create a minimal readme with a title and description:
When stubbing, create a minimal readme with a title and a description:
# Exercise Title
Description here
If the subfolder has code, it also needs a main.ts(more than 1 line). But for stubs, an exercise with only a readme is also fine.
If the subfolder has code, it also needs a
main.ts(>1 line). But for stubs, a readme-only exercise is fine.
Workflow
- Parse the plan - Extract section names, exercise names, and variant types
Parse the plan - extract section names, exercise names, and variant types
- Create directories - For each path, run
mkdir -pCreate directories -
mkdir -pfor each path - Create stub readmes - One
readme.mdCreate stub readmes - one
readme.mdper variant folder with a title - Run lint -
pnpm ai-hero-cli internal lintto validateRun lint -
pnpm ai-hero-cli internal lintto validate - Fix errors - Iterate until lint passes
Fix any errors - iterate until lint passes
Lint rules summary
The lint tool (pnpm ai-hero-cli internal lint) checks:
The linter (
pnpm ai-hero-cli internal lint) checks:
- Every exercise has subfolders (
problem/、solution/、explainer/)Each exercise has subfolders (
problem/,solution/,explainer/) - At least one of
problem/、explainer/orexplainer.1/existsAt least one of
problem/,explainer/, orexplainer.1/exists - A present and non-empty
readme.mdreadme.mdexists and is non-empty in the primary subfolder - No
.gitkeepfilesNo
.gitkeepfiles - No
speaker-notes.mdfilesNo
speaker-notes.mdfiles - No broken links in readmes
No broken links in readmes
- No
pnpm run exercisecommands in readmesNo
pnpm run exercisecommands in readmes - Every subfolder needs a
main.ts, unless it only has a readmemain.tsrequired per subfolder unless it's readme-only
Moving/renaming exercises
When renumbering or moving exercises:
When renumbering or moving exercises:
- Use
git mv(notmv) to rename directories - preserves git historyUse
git mv(notmv) to rename directories - preserves git history - Update numeric prefixes to keep the order
Update the numeric prefix to maintain order
- Re-run lint after moving
Re-run lint after moves
Example:
Example:
git mv exercises/01-retrieval/01.03-embeddings exercises/01-retrieval/01.04-embeddings
Example: stubbing from a plan
Given the following plan:
Given a plan like:
Section 05: Memory Skill Building
- 05.01 Introduction to Memory
- 05.02 Short-term Memory (explainer + problem + solution)
- 05.03 Long-term Memory
Create:
Create:
mkdir -p exercises/05-memory-skill-building/05.01-introduction-to-memory/explainer
mkdir -p exercises/05-memory-skill-building/05.02-short-term-memory/{explainer,problem,solution}
mkdir -p exercises/05-memory-skill-building/05.03-long-term-memory/explainer
Then create readme stubs:
Then create readme stubs:
exercises/05-memory-skill-building/05.01-introduction-to-memory/explainer/readme.md -> "# Introduction to Memory"
exercises/05-memory-skill-building/05.02-short-term-memory/explainer/readme.md -> "# Short-term Memory"
exercises/05-memory-skill-building/05.02-short-term-memory/problem/readme.md -> "# Short-term Memory"
exercises/05-memory-skill-building/05.02-short-term-memory/solution/readme.md -> "# Short-term Memory"
exercises/05-memory-skill-building/05.03-long-term-memory/explainer/readme.md -> "# Long-term Memory"