Residuals from the guide-pins-v2 pass (implemented #8 + #11; matrix: docs/research/guide-pins-v2-property-matrix.md). Each rides the next guide pass; per the fix-and-test-travel-together rule, none of the proposed texts below is applied yet.
F6 — Route closure: a baked-in subject re-enters the Ledger through alternate routes
Across six clean-room regenerations the tool-exposure subject re-entered the Ledger three ways: a sanitized design-argued row (regen-A1), a plain design-argued row (regen-B2), and — after the degenerate-case clause sealed that route — a design-structural row (regen-A3, file-verified: "the toolset passed to the model per turn MUST be bounded" reads as a guarantee and passes the structural litmus). Each patch sealed one door; the subject found another. Root cause: routes test properties of a subject (argued? structural?) but never the precondition that a decision exists.
Proposed rule (§5.5, above the routes):
No route admits a non-decision. Every route admits decisions, and a decision requires at least two legitimate options. When every alternative to the taught side is a course-warned anti-pattern or its degenerate case, there is no decision to surface — the subject enters the Ledger through no route, design-structural included, even where its guarantee would pass the structural litmus: the guarantee lives in a business rule and its AC; the warned side lives in the Trade-off/CTX narrative.
F7 — Course-declared constants should land in CTX provenance
The adopted spec (regen-B3) carries no mention of the course's store-name constants (CONVERSATIONAL_MEMORY, SEMANTIC_MEMORY, …). Adjudicated: not a fidelity regression (no contract, AC, or eval-rubric dependency — the eval rubric has no naming criterion; the decision surface is intact), but a mining-completeness miss: the guide's audit says mined course facts land somewhere. The principled line: constants that participate in contracts (e.g. the PERSON/PLACE/SYSTEM enum) stay binding; non-contract constants land as a CTX provenance line ("the course's notebooks name these stores …") so a learner can map spec concepts back to the lessons.
Proposed: a Pass-A clause + §14 audit: course-declared identifiers/constants that don't participate in contracts are recorded in CTX as provenance, never as binding values.
F8 — Fixture-corpus churn across regenerations
Each regeneration authors a fresh synthetic fixture corpus (by design; no course data may be copied). Consequence: fixture identities churn per regeneration, adding noise to cross-generation comparisons. No rule proposed yet — logged for a future think (e.g., a fixture-stability preference when regenerating an existing course's spec).
F12 — Gate-semantics reform (headline item; absorbs F10/F11)
The gate's express lane currently says "build the course-default takeaway as-is" — but on substitution rows the default is not the course's choice (SQLite vs Oracle; omit vs Tavily), so the lane's own name softly commits the misattribution the labeling rule exists to prevent. The adopted spec's §0 carries this wording (known, accepted for this window). Two further leaks: bare "(default)" markers inside Options cells (unsanctioned third label; present in the previous spec too), and no rule for how a build agent earns a "(Recommended)" flag.
Agreed design (owner-specified):
- Express lane renamed "recommended baseline build", described in the gate question itself: "Most decisions on this path are the course's own defaults; the few that deviate do so only because the course's choice needs an API key, a large download, or admin setup — each deviation is flagged and explained before the build starts."
- Exactly two gate labels. "(course default)" = provenance, unchanged. "(recommended — reason)" = advice, from two sources with fixed precedence: the build agent's learner-contextual recommendation (including environment detection, e.g. a sandbox-provisioned key) overrides the generator's baked zero-setup conditional ("recommended for zero-setup: the course's choice needs an API key"). A recommendation must state its reason; with no learner signal, surface the generator's conditional as-is. Never relabel the baseline value "(Recommended)" merely because it is the baseline. Bare "(default)" is banned from Options cells and the gate.
- Baseline-build walkthrough: after the learner picks the baseline build, the required resolved-decision checklist flags each row deviating from the course's own choice, with its reason (informational — no re-asking; the silent-default and partial-present traps stay closed), and the learner may bail into customize.
- The Ledger's Default field survives untouched as machinery (one buildable target per row; determinism doctrine) — only its gate presentation changes; the word "default" never surfaces as a label.
Requires its own regeneration/convergence validation (it edits the §6.0 gate template that specs emit verbatim).
Process note (F9, feeds the planned /evolve-guide skill, not a guide change): scoring claims must carry verified-vs-reported labels; N=1 regen to iterate, N=2 only to confirm a pass; fix and test travel together.
🤖 Generated with Claude Code
Residuals from the guide-pins-v2 pass (implemented #8 + #11; matrix:
docs/research/guide-pins-v2-property-matrix.md). Each rides the next guide pass; per the fix-and-test-travel-together rule, none of the proposed texts below is applied yet.F6 — Route closure: a baked-in subject re-enters the Ledger through alternate routes
Across six clean-room regenerations the tool-exposure subject re-entered the Ledger three ways: a sanitized
design-arguedrow (regen-A1), a plaindesign-arguedrow (regen-B2), and — after the degenerate-case clause sealed that route — adesign-structuralrow (regen-A3, file-verified: "the toolset passed to the model per turn MUST be bounded" reads as a guarantee and passes the structural litmus). Each patch sealed one door; the subject found another. Root cause: routes test properties of a subject (argued? structural?) but never the precondition that a decision exists.Proposed rule (§5.5, above the routes):
F7 — Course-declared constants should land in CTX provenance
The adopted spec (regen-B3) carries no mention of the course's store-name constants (
CONVERSATIONAL_MEMORY,SEMANTIC_MEMORY, …). Adjudicated: not a fidelity regression (no contract, AC, or eval-rubric dependency — the eval rubric has no naming criterion; the decision surface is intact), but a mining-completeness miss: the guide's audit says mined course facts land somewhere. The principled line: constants that participate in contracts (e.g. the PERSON/PLACE/SYSTEM enum) stay binding; non-contract constants land as a CTX provenance line ("the course's notebooks name these stores …") so a learner can map spec concepts back to the lessons.Proposed: a Pass-A clause + §14 audit: course-declared identifiers/constants that don't participate in contracts are recorded in CTX as provenance, never as binding values.
F8 — Fixture-corpus churn across regenerations
Each regeneration authors a fresh synthetic fixture corpus (by design; no course data may be copied). Consequence: fixture identities churn per regeneration, adding noise to cross-generation comparisons. No rule proposed yet — logged for a future think (e.g., a fixture-stability preference when regenerating an existing course's spec).
F12 — Gate-semantics reform (headline item; absorbs F10/F11)
The gate's express lane currently says "build the course-default takeaway as-is" — but on substitution rows the default is not the course's choice (SQLite vs Oracle; omit vs Tavily), so the lane's own name softly commits the misattribution the labeling rule exists to prevent. The adopted spec's §0 carries this wording (known, accepted for this window). Two further leaks: bare "(default)" markers inside Options cells (unsanctioned third label; present in the previous spec too), and no rule for how a build agent earns a "(Recommended)" flag.
Agreed design (owner-specified):
Requires its own regeneration/convergence validation (it edits the §6.0 gate template that specs emit verbatim).
Process note (F9, feeds the planned /evolve-guide skill, not a guide change): scoring claims must carry verified-vs-reported labels; N=1 regen to iterate, N=2 only to confirm a pass; fix and test travel together.
🤖 Generated with Claude Code