canon(E0008.3): validation mode + context break (creator cannot be own critic)#105
Merged
Merged
Conversation
Adds validation as a first-class epistemic mode, peer to exploration, planning, and execution. Prior canon described validation extensively (oddkit_validate tool, qa-validation case study, many process refs) but never named it as a distinct mode with its own truth conditions and non-collapse obligations. The three-mode framing implicitly treated validation as a phase of execution, which produced the 'validating mid-build' failure pattern — noticing concerns during execution and surfacing them as inline pivots instead of carrying them to a dedicated post-execution review. This is the second half of the mode-collapse pattern documented in canon/constraints/mode-discipline-and-bottleneck-respect. The first half is planning-into-execution (inline clarifying questions). The second half is validation-into-execution (inline concerns). Both externalize cost to the operator's attention. Both feel like care to the agent performing them. Both are the same throughput violation. New canon: - canon/definitions/validation-as-epistemic-mode.md (tier:1) Full contract for validation as a fourth mode. Names purpose, characteristics, truth condition, obligations, primary risk, valid/invalid moves. Defines the exec→val→(accept|iterate|pivot) rhythm. Extends the non-collapse rule to cover all six pairings. Revisions: - canon/definitions/epistemic-modes.md — blockquote and section heading updated from three to four modes; validation added as mode #4; non-collapse rule extended to name validation-specific collapses. - canon/constraints/mode-discipline-and-bottleneck-respect.md — 'Three Modes' section becomes 'Four Modes'; non-collapse contract extended with 'execution pretending to validate', 'validation pretending to plan', 'validation pretending to execute'; the rhythm named explicitly. - canon/bootstrap/model-operating-contract.md — summary and Mode Discipline section updated to four modes; validation-mode invalid moves listed; exec→val→iter rhythm named. - docs/appendices/mode-separated-conversations.md — adds Validation Conversations section mirroring Planning and Execution sections. - docs/examples/project-instructions-template.md — public template updated to four modes with validation-mode invalid moves list. Sequencing: this PR layers on top of klappy.dev#104 (merged), which introduced the mode-discipline canon and model-operating-contract bootstrap in their original three-mode framing. Landing validation as a separate PR keeps the delta reviewable and preserves the commit history of the original #104 work. Origin: this work came out of a post-canary review session. The gauntlet-then-fix rhythm (execution produces → validation reviews → iteration pivots) worked cleanly in practice while the canon had no name for the middle step. Naming validation as its own mode closes the gap between how the system actually works and how it is documented.
Addresses validation findings from gauntlet on the #105 PR docs: F1: validation-as-epistemic-mode.md did not cite prior art. Added a 'Prior Art' section acknowledging PDCA, software QA practice, and agile retrospectives as precedent. Distinguishes what ODD inherits (the idea that review is distinct from doing) from what is specific (integration with the epistemic-mode framework, Theory of Constraints framing, oddkit_validate enforcement). Names a retraction condition so the principle is falsifiable, per canon/principles/challenge prerequisite that a principle without retraction condition is a preference, not a principle. F2: epistemic-modes.md had stability: stable but this PR changed the core framing from three modes to four. Stable canon should not receive structural framing changes. Downgraded to semi_stable to match the new validation-as-epistemic-mode doc and signal that the four-mode framing is still in its first epoch of use.
klappy
added a commit
that referenced
this pull request
Apr 19, 2026
…canon→knowledge_base, baseline→bundled External-facing rename: terminology that users and future maintainers will actually read. Decision to rename made after canary validation revealed that 'canon' and 'baseline' are ODD-specific jargon that leaks into every caller's mental model. Zero reported external users today, so the migration cost is zero. Naming principles applied: - Name by function, not form. 'knowledge_base_url' names what the URL refers to (a knowledge base); 'canon_url' presumed a specific governance framework. - Use plain English that external users already know. 'Knowledge base' is universal vocabulary; 'canon' is a Klappy/ODD term. Tier renames in response envelope: - canon → knowledge_base (served from user's KB) - baseline → bundled (served from Worker's bundled snapshot) - minimal → minimal (unchanged; already plain English) 'Canon' as a content genre/concept stays throughout the prose — it's still what the docs ARE (stable, curated, human-governed truth). 'Knowledge base' is where they LIVE (a URL you point at). Different concepts, different words. Companion changes landing separately: - klappy/oddkit#108 (telemetry_policy canary completeness + same rename) - #105 (no changes needed — doesn't reference canon_url) - canon/principles/consistency-same-pattern-every-time.md — one stray reference to update in a follow-up sweep commit TruthKit alignment: this rename makes 'bring your own knowledge base' the supported story. A TruthKit consumer sets knowledge_base_url and the response envelope's governance_source tells them whether they're reading their canon, the bundled fallback, or the minimal last resort.
Adds docs/appendices/epoch-8-3.md and updates frontmatter on three canon docs to stamp the epoch number. E0008.3 framing: validation was always happening, always implicitly, always collapsed into execution. Naming validation as a first-class mode is not a new capability — it is observability applied to process itself, the natural next extension of E0008's observability arc. The epoch story: - E0008 — eyes on usage (telemetry) - E0008.1 — eyes on infrastructure (tracing, cache tiers) - E0008.2 — eyes on time (server_time in every response) - E0008.3 — eyes on process (validation as its own mode) Each sub-epoch promotes an implicit thing into an observable thing. E0008.3 promotes the review step that was always buried inside execution into a first-class mode with its own truth conditions and non-collapse obligations. The hand-off paragraph at the end of the epoch doc explicitly names E0009 as the next move: once validation is observable, self-correction mechanisms become the natural next step. E0009 cannot begin until validation is mode-distinct — otherwise self-correction would collapse back into execution, producing the same mid-build micro-pivot pattern E0008.3 exists to prevent. Naming → seeing → correcting. Ordering matters. Frontmatter stamps: - canon/validation-as-epistemic-mode.md: epoch E0008 → E0008.3 - canon/constraints/mode-discipline-and-bottleneck-respect.md: E0008 → E0008.3 - canon/definitions/epistemic-modes.md: (was missing) + epoch: E0008.3, date: 2026-04-18 Compatibility note in the epoch doc: all E0008 through E0008.2 artifacts remain valid. Canon now references four modes; the fourth mode was always implicit, canon now names it.
…tic integration + session ledger Integrates `canon/principles/verification-requires-fresh-context` into the validation-as-fourth-mode work across six canon/doc files, reframing E0008.3 as a pair of shifts — naming plus separation — rather than naming alone. Naming without a context break is cosmetic; the authoring agent in the authoring session cannot validate its own work honestly regardless of how carefully the work is labeled. Structural change: validation is defined as a mode + a handoff. Valid handoff forms: temporal (rest), architectural (fresh session), social (peer review), tooled (separate reviewer agent/bot). Same model family and same governance are acceptable; same session is not. Files updated: - canon/definitions/validation-as-epistemic-mode.md — new Context Break Requirement section, updated blockquote and Summary, extended Invalid Moves and non-collapse rules to name self-review collapse, Failure Signals add the same-session-no-break failure, four-mode rhythm diagram now shows `→ [context break] →`, Related Canon expanded to include the fresh-context principle as load-bearing companion. - canon/constraints/mode-discipline-and-bottleneck-respect.md — Non-Collapse Contract adds 'Self-review masquerading as validation' as the most structural collapse form; derives_from picks up the fresh-context principle. - docs/appendices/epoch-8-3.md — reframed as two shifts (naming + separation) in the epoch blockquote, frontmatter forcing_fault / new_invariant / core_shift, Summary, What E0008.3 Introduces, and the E0009 handoff paragraph (self-correction requires not just observable validation but structurally-separable validation). - docs/appendices/mode-separated-conversations.md — Validation Conversations section gains 'conducted with fresh context' as a characteristic and 'same session no context break' as an invalid move; frontmatter stamped with epoch E0008.3 and date. - canon/bootstrap/model-operating-contract.md — context-break requirement added as its own paragraph in Mode Discipline; rhythm diagram shows the break; epoch bumped E0008 → E0008.3; verification-requires-fresh-context and validation-as-epistemic-mode added to derives_from. - docs/examples/project-instructions-template.md — same context-break paragraph and rhythm update; Validation invalid moves extended; epoch bumped E0008 → E0008.3; derives_from extended. Plus one durable session artifact: - odd/ledger/2026-04-18-e0008-3-validation-and-teams-over-swarms.md — full DOLCHE ledger for the session: canary forcing fault, rename decision, E0008.3 framing, teams-over-swarms principle discovery, operator's solo-to-team transition, plus explicit handoffs to the teams-over-swarms PR and the solo-to-team transition canon record that will follow. The ledger makes retrievable what happened and why, so future sessions can recover context without re-deriving. Canon is the durable form of decisions; this ledger is the durable form of session-scoped context that complements the canon docs. The E0009 hand-off is now explicit: self-correction cannot begin until validation is both mode-distinct AND context-separable. Mode-distinct alone would produce self-correction loops inside the authoring context — which is to say, not correction at all. Naming → seeing → separating → correcting. E0008.3 delivers the first three. E0009 is what becomes possible on the other side.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
Validation as the fourth epistemic mode (E0008.3), with a structural context-break requirement between creator and critic.
The mode was always implicit — canon described it, the
oddkit_validatetool enforced its shape, case studies documented QA flows — but canon did not name validation as a distinct mode alongside exploration/planning/execution, and did not name the creator-cannot-be-own-critic requirement as a non-negotiable obligation of the mode.This PR closes both gaps.
Two shifts, one epoch
E0008.3 is not just naming. It is naming + separation.
Without the break, the mode label is cosmetic. The fresh-context principle (
canon/principles/verification-requires-fresh-context, E0007) is now a load-bearing companion to validation-as-mode, elevated from "good practice" to "structural obligation."The epoch arc
Each sub-epoch of E0008 promotes one implicit thing into one named, observable thing. E0008.3 promotes the review step that was always buried inside execution — and the context-break requirement that was always implicit in the fresh-context principle.
Hand-off to E0009
Naming enables seeing. Separation enables honesty. Honesty enables correcting. E0009 (self-correction) cannot begin until validation is both mode-distinct AND context-separable. Mode-distinct alone would produce self-correction loops inside the authoring context — which is to say, not correction at all. TruthKit's future harness architecture is implicated here: validation is a routing concern, not a step.
Changes
New canon (tier 1):
canon/definitions/validation-as-epistemic-mode.md— full contract including the Context Break Requirement section, four-mode rhythm with[context break]in the diagram, non-collapse rules covering self-review collapse, failure signals.Revised canon + docs (all stamped E0008.3):
canon/definitions/epistemic-modes.md— three-mode → four-mode framing, non-collapse extendedcanon/constraints/mode-discipline-and-bottleneck-respect.md— self-review masquerading as validation named as the most structural collapse formcanon/bootstrap/model-operating-contract.md— Mode Discipline gains context-break paragraph; rhythm diagram updated; derives_from adds the fresh-context principledocs/appendices/epoch-8-3.md— reframed as naming + separation; forcing_fault extended to name the bugbot episode; E0009 handoff strengthens separation as prerequisitedocs/appendices/mode-separated-conversations.md— Validation Conversations adds fresh-context characteristic and same-session-no-break invalid movedocs/examples/project-instructions-template.md— public template mirrors bootstrap changesDurable session record:
odd/ledger/2026-04-18-e0008-3-validation-and-teams-over-swarms.md— full DOLCHE ledger covering the multi-day session: canary forcing fault, knowledge_base rename, E0008.3 discovery, creator-cannot-be-own-critic integration, teams-over-swarms principle discovery, and the operator's solo-to-team transition. Serves as retrievable session context that complements the canon decisions.The forcing fault
The telemetry_policy canary refactor (
klappy/oddkit#106) shipped to production with three contract-conformance gaps. Parser tests were green. The tool was "done." Validation against stated claims had never happened — and even when the authoring agent attempted validation, it missed bugs that bugbot (fresh context, same model family, same governance) caught in seconds. The fix was not better tests. The fix was recognizing that validation is not part of execution, has different truth conditions, requires its own mode, AND requires a context break. Both conditions held before the canary shipped complete.Follow-ups this PR anticipates (not included)
canon/principles/teams-over-swarms.md— architectural preference principle grounded in the African proverb, 1 Corinthians 12, and the operator's testimony (oddkit alone, TruthKit together). Dedicated follow-up PR to keep the scope focused.Sequencing
Independent of
klappy/oddkit#108(canary completion + rename). Either merge order works. No code changes here — canon and docs only.Related
klappy/klappy.dev#101— merged; knowledge_base_url contractklappy/klappy.dev#106— merged; forward-facing doc sweepklappy/oddkit#108— open; canary completeness + rename + smoke test (24/24 green on preview)