scaffold-exercises

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Scaffold Exercises

搭建习题框架

Create exercise directory structures that pass
pnpm ai-hero-cli internal lint
, then commit with
git commit
.
创建可通过
pnpm ai-hero-cli internal lint
检查的习题目录结构,随后使用
git commit
提交。

Directory naming

目录命名规则

  • Sections:
    XX-section-name/
    inside
    exercises/
    (e.g.,
    01-retrieval-skill-building
    )
  • Exercises:
    XX.YY-exercise-name/
    inside a section (e.g.,
    01.03-retrieval-with-bm25
    )
  • Section number =
    XX
    , exercise number =
    XX.YY
  • Names are dash-case (lowercase, hyphens)
  • 章节:在
    exercises/
    目录下创建
    XX-section-name/
    格式的文件夹(例如:
    01-retrieval-skill-building
  • 习题:在章节文件夹内创建
    XX.YY-exercise-name/
    格式的文件夹(例如:
    01.03-retrieval-with-bm25
  • 章节编号为
    XX
    ,习题编号为
    XX.YY
  • 名称采用短横线命名法(小写字母,用短横线分隔)

Exercise variants

习题变体类型

Each exercise needs at least one of these subfolders:
  • problem/
    - student workspace with TODOs
  • solution/
    - reference implementation
  • explainer/
    - conceptual material, no TODOs
When stubbing, default to
explainer/
unless the plan specifies otherwise.
每个习题至少需要包含以下子文件夹中的一个:
  • problem/
    - 包含待完成任务(TODOs)的学生工作区
  • solution/
    - 参考实现代码
  • explainer/
    - 概念性内容,无待完成任务
在创建 stub 时,默认使用
explainer/
文件夹,除非规划中有特别说明。

Required files

必填文件

Each subfolder (
problem/
,
solution/
,
explainer/
) needs a
readme.md
that:
  • Is not empty (must have real content, even a single title line works)
  • Has no broken links
When stubbing, create a minimal readme with a title and a description:
md
undefined
每个子文件夹(
problem/
solution/
explainer/
)都需要包含一个
readme.md
文件,该文件需满足:
  • 不能为空(必须包含实际内容,哪怕只有一行标题也可以)
  • 无无效链接
创建 stub 时,生成包含标题和描述的最简版 readme:
md
undefined

Exercise Title

习题标题

Description here

If the subfolder has code, it also needs a `main.ts` (>1 line). But for stubs, a readme-only exercise is fine.
描述内容

如果子文件夹包含代码,还需要一个行数大于1的`main.ts`文件。但对于 stub 来说,仅包含 readme 的习题也是符合要求的。

Workflow

工作流程

  1. Parse the plan - extract section names, exercise names, and variant types
  2. Create directories -
    mkdir -p
    for each path
  3. Create stub readmes - one
    readme.md
    per variant folder with a title
  4. Run lint -
    pnpm ai-hero-cli internal lint
    to validate
  5. Fix any errors - iterate until lint passes
  1. 解析规划 - 提取章节名称、习题名称和变体类型
  2. 创建目录 - 使用
    mkdir -p
    命令创建每个路径对应的文件夹
  3. 创建 stub 版 readme - 为每个变体文件夹创建一个带标题的
    readme.md
    文件
  4. 运行代码检查 - 执行
    pnpm ai-hero-cli internal lint
    进行验证
  5. 修复错误 - 反复检查直到代码检查通过

Lint rules summary

代码检查规则摘要

The linter (
pnpm ai-hero-cli internal lint
) checks:
  • Each exercise has subfolders (
    problem/
    ,
    solution/
    ,
    explainer/
    )
  • At least one of
    problem/
    ,
    explainer/
    , or
    explainer.1/
    exists
  • readme.md
    exists and is non-empty in the primary subfolder
  • No
    .gitkeep
    files
  • No
    speaker-notes.md
    files
  • No broken links in readmes
  • No
    pnpm run exercise
    commands in readmes
  • main.ts
    required per subfolder unless it's readme-only
代码检查工具(
pnpm ai-hero-cli internal lint
)会检查以下内容:
  • 每个习题都包含子文件夹(
    problem/
    solution/
    explainer/
  • 至少存在
    problem/
    explainer/
    explainer.1/
    中的一个
  • 主文件夹中存在非空的
    readme.md
    文件
  • .gitkeep
    文件
  • speaker-notes.md
    文件
  • readme 中无无效链接
  • readme 中无
    pnpm run exercise
    命令
  • 除非是仅含 readme 的习题,否则每个子文件夹都需要
    main.ts
    文件

Moving/renaming exercises

移动/重命名习题

When renumbering or moving exercises:
  1. Use
    git mv
    (not
    mv
    ) to rename directories - preserves git history
  2. Update the numeric prefix to maintain order
  3. Re-run lint after moves
Example:
bash
git mv exercises/01-retrieval/01.03-embeddings exercises/01-retrieval/01.04-embeddings
当需要重新编号或移动习题时:
  1. 使用
    git mv
    命令(而非
    mv
    )重命名目录 - 这样可以保留 git 历史记录
  2. 更新数字前缀以维持顺序
  3. 移动完成后重新运行代码检查
示例:
bash
git mv exercises/01-retrieval/01.03-embeddings exercises/01-retrieval/01.04-embeddings

Example: stubbing from a plan

示例:根据规划创建 stub

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:
bash
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:
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"
给定如下规划:
Section 05: Memory Skill Building
- 05.01 Introduction to Memory
- 05.02 Short-term Memory (explainer + problem + solution)
- 05.03 Long-term Memory
创建对应的目录:
bash
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
然后创建 stub 版 readme:
exercises/05-memory-skill-building/05.01-introduction-to-memory/explainer/readme.md -> "# 内存基础介绍"
exercises/05-memory-skill-building/05.02-short-term-memory/explainer/readme.md -> "# 短期内存"
exercises/05-memory-skill-building/05.02-short-term-memory/problem/readme.md -> "# 短期内存"
exercises/05-memory-skill-building/05.02-short-term-memory/solution/readme.md -> "# 短期内存"
exercises/05-memory-skill-building/05.03-long-term-memory/explainer/readme.md -> "# 长期内存"