Conversation
…08.6) A spec is a contract between author and implementer. Once implementation begins, the spec is locked. Forward-looking changes ship as vN+1, not as edits to the locked spec. The principle is the spec-level analog of the gate-lock pattern that mode discipline applies inside a single execution turn (canon/principles/ contract-governs-handoff-drift.md). At turn scale: when the operator says 'go', the scope is locked for the duration of the execution mode. At spec scale: when implementation begins, the contract is locked for the duration of that version. Establishes E0008.6 (Spec-Lifecycle Discipline) as a sub-epoch of E0008. Sits adjacent to E0008.4 (governance-change-discipline) — both are governance disciplines for documents that bind implementer behavior — and operationalizes the contract-stability theme that contract-governs-handoff- drift opened in E0008.3. The deciding-argument graduation case was H-T3 of klappy/ptxprint-mcp's canon/encodings/telemetry-feature-planning-ledger.md (2026-04-30): operator was asked whether to amend the implemented v1.2 spec to add two new tools or to ship a new v1.3 spec. Answer: 'Specs shouldn't be changed after implementation. V1.3 is the right call.' A retroactive realization in the same session: an earlier in-session commit had edited v1.2 spec to add references to the not-yet-built telemetry tools — a principle violation. The operator confirmed the revert. The principle was already governing the next decision before it was named. Files changed (2): canon/principles/specs-lock-at-implementation.md (new, 162 lines) Tier 2, neutral, working. Defines the lock point (code committed, autonomous run kicked off, spec handed to a human implementer, or spec shipped in a release artifact). Catalogs three pressures that quietly violate the principle and the failure modes they produce. Documents the practical pattern (vN+1 with supersedes: frontmatter and 'What changed' preamble) plus four edge cases. Closes with a companion-pattern table placing the principle in the family of contract-stability patterns operating at different time horizons. canon/CHANGELOG.md Bump canon version 0.36.1 → 0.37.0 (minor: new substantive content). New entry follows the governance-change-discipline format: impact framing first, sub-epoch annotation, deciding-argument case cited, added-canon section listing the new principle file with its scope and structure. Per canon/constraints/governance-change-discipline.md, this change carries the four required structural markers: canon version bump (0.36.1 → 0.37.0), changelog entry (above), release-notes-style impact framing (in the changelog entry), and epoch annotation (E0008.6). Status: working, not stable. Tier-2 graduation requires multiple deciding-argument recurrences; this principle has one (the graduation case) plus one retroactive application (the H-T4 revert). Future cases will further harden it.
Canon Quality —
|
klappy
left a comment
There was a problem hiding this comment.
✅ Independent fresh-context validation — recommend merge
Note on review event type: posted as
COMMENTrather thanAPPROVEbecause GitHub blocks self-approval and the PAT shares the author's identity. The substance is an approval; the event type is a procedural workaround. Substantive validation summary follows.
Reviewer: Claude (Opus 4.7) operating as a fresh-context validator session, separate from the klappy/ptxprint-mcp authoring conversation. Per klappy://canon/principles/verification-requires-fresh-context and klappy://canon/constraints/release-validation-gate.
Release-Validation-Gate (tier 1)
| Rule | Status | Evidence |
|---|---|---|
| R1 — No merge with active reviews | ✅ | Cursor Bugbot completed/success, zero findings, zero review comments. Reference integrity audit completed/success. Canon Quality (oddkit_audit) ✅ — 39 files, no dead refs. |
| R2 — Independent validation if load-bearing | N/A | Doc-only. No workers/src/orchestrate.ts, bm25.ts, governance-fetch additions, envelope changes, or oddkit_* action changes. Not load-bearing surface. (This session is a fresh-context review anyway.) |
| R3 — Canon wins over session artifacts | ✅ | No session artifact recommends skipping anything. |
Governance-Change-Discipline (four markers)
- ✅ Canon version bump 0.36.1 → 0.37.0 (correct minor — additive new principle)
- ✅ Changelog entry at top of
canon/CHANGELOG.md, format matches 0.36.1 / 0.36.0 - ✅ Impact-framed release notes in first paragraph
- ✅ Epoch bump to E0008.6 (Spec-Lifecycle Discipline)
Writing canon (the principle file)
- ✅ Summary blockquote present
- ✅
## Summary —section present - ✅ Descriptive headers pass scan test (
When Does a Spec Lock?,Why Specs Drift Quietly,Edge Cases,Failure Modes,Companion Patterns at Other Scales,Origin) - ✅ Frontmatter complete: tier 2, status active, stability working (correctly conservative), full
derives_from/complements/governs - ✅ Origin traces deciding-argument case (H-T3) plus retroactive H-T4 application
Oddkit gauntlet
oddkit_challenge(canon-tier-2 mode): Non-blocking. Surfaces "single deciding-argument case → no counter-examples → prior-art check missing." Correctly absorbed by thestability: workingflag and the Origin paragraph: "Future deciding-argument cases will further harden it." The principle ships honest about its provenance.oddkit_gate: ReturnedNOT_READYforplanning → execution— but the merge isexecution → completion, which the gate doesn't yet recognize (P11 roadmap item). Structural prereqs it could check (decisions_locked,irreversibility_assessed) are met. Not a PR defect.oddkit_validate:NEEDS_ARTIFACTS(visual proof) — per canon, expected for text commits, not a failure state.
Non-blocking observations
- Cross-repo
derives_fromcitation. Frontmatter citesklappy/ptxprint-mcp/canon/encodings/telemetry-feature-planning-ledger.md (H-T3 resolution)—oddkit_getcannot resolve that URI from klappy.dev canon. Documentation pointer, not a load-bearing dependency. Future reader auditing provenance will need to clone the other repo. - Author-flagged open item: Epoch slot for
E0008.6(vs fold-into-E0008.5 vs jump-to-E0009). Operator's call; single-string update if changed. PR is mergeable either way.
Verdict
Recommend merge. All three release-validation-gate rules satisfied, all four governance-change-discipline markers present, writing canon clean, Bugbot green with no findings. The only outstanding item is the epoch-slot knob — your call, not a blocker.
Summary
New tier-2 principle articulated by you on 2026-04-30 during the
klappy/ptxprint-mcptelemetry-feature planning conversation:The principle is the spec-level analog of the gate-lock pattern that mode discipline applies inside a single execution turn (
canon/principles/contract-governs-handoff-drift.md). At turn scale: when you say "go," the scope is locked. At spec scale: when implementation begins, the contract is locked.Files (2)
canon/principles/specs-lock-at-implementation.md(new, 162 lines)Tier 2, neutral, working. Structure mirrors
verification-requires-fresh-context.mdandcontract-governs-handoff-drift.md:supersedes:patterncanon/CHANGELOG.mdCanon version bumped 0.36.1 → 0.37.0 (minor: new substantive content). New entry follows the format established by 0.36.0/0.36.1: impact framing first, sub-epoch annotation, deciding-argument case cited,
### Added — Canonsection.Governance discipline compliance (per
canon/constraints/governance-change-discipline.md)canon/CHANGELOG.mdOne thing to verify
Epoch numbering —
E0008.6. I picked this as the next sub-epoch after E0008.5 (Search-Corpus Boundary, 2026-04-29). The principle is conceptually adjacent to E0008.4 (governance-change-discipline) — both are governance disciplines for documents that bind implementer behavior — and operationalizes the contract-stability theme that contract-governs-handoff-drift opened in E0008.3.If you have a different sense of where it slots (e.g., should fold into E0008.5, or should jump to E0009 because it's a new theme), the changelog entry and the principle's frontmatter both need the same single-string update.
Audit trail (cumulative across both repos this session)
Note
Low Risk
Documentation-only change (new principle + changelog entry) with no code or runtime behavior modifications.
Overview
Adds a new tier-2 canon principle,
Specs Lock at Implementation, defining that once implementation begins the spec becomes a locked contract and all forward-looking changes must ship asvN+1(with guidance on lock signals, common drift pressures, edge cases like errata, and recommended supersedes/versioning patterns).Bumps canon pack version to
0.37.0and records the new sub-epochE0008.6incanon/CHANGELOG.md, including the deciding-argument case that motivated the rule.Reviewed by Cursor Bugbot for commit 572b8a4. Bugbot is set up for automated code reviews on this repo. Configure here.