fix(voice/consistency): vary stock formulas, vendor-balance orient.py, unify the loop

- Vary 11 instances of two boilerplate openers ("A generic X course…" /
  "Strip away X…") across 10 modules so they read as distinct, concrete prose;
  kept the few deliberate, voice-distinct uses; locked exemplars untouched.
- M23 orient.py: detect a vendor-balanced set of AI-instruction filenames
  (AGENTS.md/CLAUDE.md/GEMINI.md/.cursorrules/.cursor/rules/copilot-instructions)
  instead of singling out one vendor. Still runs.
- Render the collaboration loop consistently as seven stations
  (issue->branch->implementation->PR->review->merge->closed) in M25/M26 to match
  M11 and the syllabus.

Closes #48
Closes #49
Closes #51

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 17:45:20 -04:00
parent f7011d4211
commit 7e8046a57f
12 changed files with 35 additions and 33 deletions
@@ -44,8 +44,8 @@ By the end of this module you can:
### A runner is just a computer that does what the YAML says
Strip away the branding and a runner is one thing: **a process, on some machine, that checks out
your code and executes the steps in your pipeline.** When your Module 14 workflow says "set up
A runner is **a process, on some machine, that checks out your code and executes the steps in your
pipeline** — nothing more exotic than that. When your Module 14 workflow says "set up
Python, install pytest, run the tests," *something physical* has to do that — pull the repo onto a
disk, run `pip install`, run `pytest`, report pass or fail back to the forge. That something is the
runner.