feat(course): build out all 27 modules, capstone, scaffold, and conventions

Scaffold the course repo and author the full curriculum in dependency-chain
order, following the settled build decisions in handoff.md.

- Scaffold: course README, vendor-neutral AGENTS.md (dogfoods Module 5),
  _TEMPLATE.md (the fixed 9-section module shape), root .gitignore, ship config.
- Modules 1-2: reference exemplars (locked for tone/depth/lab style).
- Modules 3-27: full lessons + runnable labs, each following the template,
  respecting the chain, vendor/model-agnostic, with "feel the pain" labs.
- Module 8 hosting comparison web-researched and date-stamped (as of 2026-06-22),
  not written from memory; expansion-zone modules carry Verify-before-publish.
- Capstone: the full loop end to end on the running tasks-app example.

Lab code syntax-checked (Python/shell/YAML); every module has the 7 core
template sections.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TfzV5QvtPDz8LJS3Pu5VLT
This commit is contained in:
2026-06-22 12:18:30 -04:00
parent 4bd586bbd0
commit fbec36cb67
117 changed files with 15131 additions and 1 deletions
@@ -0,0 +1,15 @@
# Agent A prompt — the `clear` command
Paste this into the AI session you've pointed at the `tasks-app-clear` worktree folder.
---
Add a `clear` command to this task app that removes **all** tasks.
- Put the deletion logic on `TaskList` in `tasks.py` (a `clear()` method that empties the list),
and wire a `clear` command into the dispatch in `cli.py` that calls it and saves.
- Running `python cli.py clear` should empty the list and print a short confirmation like
`cleared all tasks`.
- After `clear`, `python cli.py list` should print `(no tasks yet)`.
Make the change, then stop — I'll review the diff and commit it myself.
@@ -0,0 +1,14 @@
# Agent B prompt — the `count` command
Paste this into the AI session you've pointed at the `tasks-app-count` worktree folder.
---
Add a `count` command to this task app that prints how many tasks are still pending.
- Reuse the existing `pending()` method on `TaskList` in `tasks.py`; don't reimplement it.
- Wire a `count` command into the dispatch in `cli.py`.
- Running `python cli.py count` should print something like `2 pending` (the number of tasks not
marked done).
Make the change, then stop — I'll review the diff and commit it myself.
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
#
# Module 7 lab — tear down the two worktrees created by setup-worktrees.sh.
# Run from INSIDE your tasks-app repo:
#
# bash modules/07-worktrees-running-agents-in-parallel/lab/cleanup-worktrees.sh
#
# `git worktree remove` deletes the folder AND clears Git's record of it; `prune` mops up any
# worktrees whose folders were deleted by hand (which leaves a stale record otherwise).
#
# NOTE: --force discards UNCOMMITTED work in a worktree. Commit (or merge) before cleaning up.
# This script assumes you already merged feature/clear and feature/count back into main.
#
set -euo pipefail
ROOT="$(git rev-parse --show-toplevel)"
PARENT="$(cd "$ROOT/.." && pwd)"
git worktree remove "$PARENT/tasks-app-clear" --force 2>/dev/null || true
git worktree remove "$PARENT/tasks-app-count" --force 2>/dev/null || true
git worktree prune
echo
echo "Cleanup done. Remaining worktrees:"
git worktree list
echo
echo "If you merged both branches you can also delete them:"
echo " git branch -d feature/clear feature/count"
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
#
# Module 7 lab — create two linked worktrees off the tasks-app repo, each on its own branch.
# Run this from INSIDE your tasks-app repo (the one you git-init'd in Module 2):
#
# bash modules/07-worktrees-running-agents-in-parallel/lab/setup-worktrees.sh
#
# It places the new worktree folders next to the repo, so you end up with:
#
# <parent>/tasks-app (your existing repo, on its current branch)
# <parent>/tasks-app-clear (new worktree on branch feature/clear)
# <parent>/tasks-app-count (new worktree on branch feature/count)
#
set -euo pipefail
# The directory that contains the repo, so the new worktrees become siblings of it.
ROOT="$(git rev-parse --show-toplevel)"
PARENT="$(cd "$ROOT/.." && pwd)"
git worktree add "$PARENT/tasks-app-clear" -b feature/clear
git worktree add "$PARENT/tasks-app-count" -b feature/count
echo
echo "Worktrees created. One repo, three checked-out branches:"
git worktree list