De-slop: remove every em-dash + banned words across all modules + capstone (#94)
Sync course wiki / sync-wiki (push) Successful in 4s

Co-authored-by: claude <claude@jpaul.io>
Co-committed-by: claude <claude@jpaul.io>
This commit was merged in pull request #94.
This commit is contained in:
2026-06-22 23:21:22 -04:00
committed by Claude (agent)
parent 513d7e7ac8
commit c098933f25
99 changed files with 1324 additions and 1315 deletions
+10 -10
View File
@@ -1,4 +1,4 @@
# Capstone The Full Loop
# Capstone: The Full Loop
> **One feature, taken end to end, with every module doing its job in sequence.** This is the finale:
> not new material, but proof that the twenty-seven pieces you learned separately are actually one
@@ -127,13 +127,13 @@ swappable part; the workflow is the durable skill*), and you just lived it inste
## Hands-on lab
**Lab language:** shell + Python, on the `tasks-app` repo. You'll direct Claude Code (`claude` sub
**Lab language:** shell + Python, on the `tasks-app` repo. You'll direct Claude Code (`claude`; sub
your own agent) to do the git and the edits (M4); you make the calls and verify each result.
**You'll need:** the `tasks-app` repo in the prerequisite state above, Claude Code (or your own
agent), your forge account, and a working Docker install.
### Part A Issue and branch (M9, M6, M11)
### Part A: Issue and branch (M9, M6, M11)
1. File the issue on your forge. Title: *"Task due dates + `overdue` command + `/overdue` endpoint."*
In the body, write the acceptance criteria as you'd hand them to a contributor you don't trust to
@@ -157,7 +157,7 @@ agent), your forge account, and a working Docker install.
git branch # the new branch exists and is checked out
```
### Part B Implement with the AI (M4, M5)
### Part B: Implement with the AI (M4, M5)
3. Give Claude Code the issue, not a vague wish:
@@ -179,9 +179,9 @@ agent), your forge account, and a working Docker install.
```
> *Verify-before-publish: refresh the example due dates so the "future" one is still in the future
> at publish time a hardcoded near-future date silently inverts this assertion once it passes.*
> at publish time; a hardcoded near-future date silently inverts this assertion once it passes.*
### Part C Tests (M13)
### Part C: Tests (M13)
5. Have the AI extend `test_tasks.py`, then **read the test names** and confirm the boundaries are
actually covered. If "due today" and "no due date" aren't each their own test, tell the AI to add
@@ -198,7 +198,7 @@ agent), your forge account, and a working Docker install.
git status # nothing stray left uncommitted
```
### Part D PR, CI, security, review (M10, M11, M14, M15, M19)
### Part D: PR, CI, security, review (M10, M11, M14, M15, M19)
6. Tell the AI to push the branch and open the PR, with `Closes #47` in the description. Then verify
on the forge that the PR exists, targets `main`, and carries the closing keyword:
@@ -220,7 +220,7 @@ agent), your forge account, and a working Docker install.
AI fix it on the branch, let CI re-run, and review again. Catching this *here*, before merge, is the
entire point of the gate.
### Part E Merge and deploy (M11, M16, M18, M17)
### Part E: Merge and deploy (M11, M16, M18, M17)
9. With CI green and the diff honest, squash-merge. Issue #47 closes itself.
@@ -235,7 +235,7 @@ agent), your forge account, and a working Docker install.
reproducible artifact (M16), configured from the environment (M17), behind a self-rolling-back
health check (M18).
### Part F Rehearse recovery (M12)
### Part F: Rehearse recovery (M12)
11. **Have the AI sync local `main` first.** The squash-merge in step 9 happened on the forge, so the
new commit lives only on the remote and your local `main` is one behind. Tell the AI to pull
@@ -264,7 +264,7 @@ agent), your forge account, and a working Docker install.
---
## Stretch variant run the same feature the Unit 5 way (optional)
## Stretch variant: run the same feature the Unit 5 way (optional)
The main loop kept you in the driver's seat, directing each step. Now run the **identical** feature
with autonomous agents *inside* the pipeline and watch how much of the loop keeps running when you