Problem
The §6 Boundaries "Ask First" tier is the spec's only mid-build guard: a standing list of changes the build agent must get human sign-off for during implementation (as opposed to the §0 gate, which asks each Decision Ledger question once at build start). The guide currently mandates only that the tier exists and "carries the course's spoken trade-offs" — it never says which trade-offs. So each regeneration composes the list from judgment, and its contents drift run to run.
Observed instance (agent-memory course): spec v1 and v2 both carried the entry "Moving an operation across the deterministic/agent-triggered line — ask first" (a Lesson-3 spoken trade-off). The v3 regeneration (1fa71b1, generated from guide fdf3b6f) kept five other Ask-First entries but dropped this one. The decision itself is still covered at build start (Ledger row D8) and its invariant is AC-tested — but the silent direction of drift (making an agent-triggered operation run deterministically every turn, e.g. always-summarize) violates no invariant and fails no AC, so the dropped entry was the only guard for it.
This is the same failure class already fixed for mined parameters and contradiction-carry (PR #7): whatever the guide doesn't pin, regeneration reproduces only by luck.
Proposed fix (two edits, course-agnostic)
1. §6 Boundaries template comment — add:
Ask First is derived, not composed. Its entries come mechanically from Pass B's mined spoken trade-offs: every trade-off the course argued aloud whose wrong side either (a) forces rework (re-embedding, re-ingesting, re-indexing, re-tuning) or (b) changes a behavior guarantee without failing any acceptance criterion MUST appear as an Ask-First entry, cross-referenced to its Ledger row when it has one. Write the section by walking the mined trade-off list, not from memory of what such sections usually contain — a mined trade-off absent from Ask First is a defect, not a style choice. (Criterion (b) is the load-bearing one: it captures exactly the silent changes — e.g. making an optional operation run automatically — that no test catches and only a human sign-off can.)
2. §14 checklist — extend the Boundaries bullet:
Deliberately not patching now
Decision: ship spec v3 as-is; this rides the next guide pass + regeneration (v4), not a hand-patch to any spec.md — spec files are generated artifacts, and the guide is the lever.
Related residuals from the v1/v2/v3 comparison (candidates for the same pass)
- A store schema/index existence AC (v2's one unique win; v1 and v3 lack it).
- Make the §4 app-config-wins rule explicitly govern
contradicted-row defaults (v3 defaulted distance to Cosine where v1/v2 chose Euclidean, the final app's config).
- The choice of lightweight substitute realization is still free variance across regenerations (v2: SQLite+Chroma; v3: SQLite-only).
🤖 Generated with Claude Code
Problem
The §6 Boundaries "Ask First" tier is the spec's only mid-build guard: a standing list of changes the build agent must get human sign-off for during implementation (as opposed to the §0 gate, which asks each Decision Ledger question once at build start). The guide currently mandates only that the tier exists and "carries the course's spoken trade-offs" — it never says which trade-offs. So each regeneration composes the list from judgment, and its contents drift run to run.
Observed instance (agent-memory course): spec v1 and v2 both carried the entry "Moving an operation across the deterministic/agent-triggered line — ask first" (a Lesson-3 spoken trade-off). The v3 regeneration (
1fa71b1, generated from guidefdf3b6f) kept five other Ask-First entries but dropped this one. The decision itself is still covered at build start (Ledger row D8) and its invariant is AC-tested — but the silent direction of drift (making an agent-triggered operation run deterministically every turn, e.g. always-summarize) violates no invariant and fails no AC, so the dropped entry was the only guard for it.This is the same failure class already fixed for mined parameters and contradiction-carry (PR #7): whatever the guide doesn't pin, regeneration reproduces only by luck.
Proposed fix (two edits, course-agnostic)
1. §6 Boundaries template comment — add:
2. §14 checklist — extend the Boundaries bullet:
Deliberately not patching now
Decision: ship spec v3 as-is; this rides the next guide pass + regeneration (v4), not a hand-patch to any spec.md — spec files are generated artifacts, and the guide is the lever.
Related residuals from the v1/v2/v3 comparison (candidates for the same pass)
contradicted-row defaults (v3 defaulted distance to Cosine where v1/v2 chose Euclidean, the final app's config).🤖 Generated with Claude Code