SummaryWhat the Next Session Does
Two PRs against klappy/klappy.dev, in this order:
PR A: Epoch 9 declaration + frontmatter retag. Mechanical canon work. New appendix doc, four-marker governance discipline applied in full (canon version bump, changelog entry, release notes, epoch appendix), frontmatter retag from E0008.5 to E0009 on the agentic-substrate canon catalog landed during the past week. Plus canon/bootstrap/model-operating-contract from E0008.3 to E0009 (frontmatter-only; content update is deferred to a separate session).
PR B: "We Were the Wire" essay import + expansion + writing governance pass. New file at writings/we-were-the-wire.md. Spine imported from klappy/agent-messaging-service/ESSAY.md (~2,300 words, currently the only canonical version of the essay). Expansion (~1,500 words) added before the "What Happens Next" close, covering the broader themes Epoch 9 addresses: the wire problem is not just agent-to-agent (audits, validators, session-routing, ingestion, memory all had the same shape), the substrate stack as the answer, autonomous-trigger as the dispatch path that ends operator-as-relay, the R2-drop-a-file-get-knowledge worked example, Oddie as the first L4 persona earning the substrate. Writing canon checklist applied; voice locked to Klappy first-person (not Oddie). The essay closes back into the original's "the interesting part is everything you can do once the wire is just there."
PR A merges first because PR B references epoch: E0009 in frontmatter, which only resolves once PR A lands. Both PRs are file-delete reversible.
ContextWhy This Now
The week of 2026-05-07 through 2026-05-12 produced an unusually dense canon catalog all pointed at the same shift: the operator is no longer the wire. The load-bearing docs already exist in canon — agents-need-their-own-wire (Tier-1 principle), substrate-stack (six-layer architectural map), persona-shaped-agent-runtime (substrate-vs-runtime distinction), spawned-agent-session-runtime-contract (five orthogonal dimensions), spawned-agent-session-substrate-options (multi-vendor catalog), dispatch-paths (assistant-orchestrated vs autonomous-trigger binary, landed 2026-05-12), trigger-source-taxonomy (nine canonical trigger types, landed 2026-05-12), mode-transitions-require-encoded-handoff, sessions-mirror-modes, creators-get-paid, magical-first-run, symmetric-participation, plus the supporting voice and methodology canon. The frontmatter validator (PR #196) is live and hard-blocks any malformed frontmatter.
The live work that earns the epoch is klappy/agent-messaging-service PR #77 (open as of 2026-05-12T02:24Z): audit-gate runtime migration from Anthropic Managed Agents onto Cloudflare's Agents Week primitives (Durable Object + Agents SDK + Project Think). That migration is the first production wiring of persona-shaped-agent-runtime. The trio in this handoff plants the flag the migration marches under.
The narrative case for the shift exists today only inside the AMS repo at ESSAY.md ("We Were the Wire"). It has not yet been brought into klappy.dev/writings/. The argument has grown teeth since the essay was written; the import is also an opportunity to expand it to match the canon catalog that has densified around it.
Scope
In Scope
docs/appendices/epoch-9.md— new file, modeled ondocs/appendices/epoch-8-3.mdshapecanon/CHANGELOG.md— new version entry (likely0.38.0; verify by tail of file)docs/oddkit/release-notes/2026-05-12-epoch-9-substrate-becomes-the-wire.md— new file (slug negotiable; see open questions)- Frontmatter
epoch:retag on the agentic-substrate canon docs (full candidate list below; per-doc verification required before mutation) canon/bootstrap/model-operating-contract.mdfrontmatter epoch bump (E0008.3 → E0009; content untouched)writings/we-were-the-wire.md— new file, spine imported from AMSESSAY.md, expansion added- Writing governance pass on the new essay against
writing-canon+ai-voice-cliches+guide-posture
Out of Scope
- AMS-side
ESSAY.mdmodification — keeps original; forward-pointer to klappy.dev expanded version is a separate AMS PR - Bootstrap content update for E0009 disciplines (dispatch-path discipline, autonomous-trigger error-routing) — separate session
ams.convention.v1(L3 identity-and-convention) — entirely separate work track- AMS PR #77 review — independent and ongoing
- Frontmatter retag of E0008.4 / E0008.6 docs that are NOT substrate-shaped (e.g., software-virtues canon, specs-lock-at-implementation)
Sequence
PR A first; PR B opens only after PR A merges. Reason: PR B's essay frontmatter declares epoch: E0009, which is a meaningful tag only after PR A makes E0009 a named epoch in canon. Opening B before A would leave a forward reference to an unresolved epoch.
Approximate effort: PR A is ~4–6 hours of mechanical canon work (writing the appendix, the release notes, the changelog entry, plus the per-doc frontmatter retag). PR B is ~6–10 hours dominated by the essay expansion and the writing governance pass.
PR AFull Specification
Artifacts Created
1. docs/appendices/epoch-9.md — modeled on docs/appendices/epoch-8-3.md.
Required frontmatter shape (per existing appendix convention):
uri: klappy://docs/appendices/epoch-9title: "Epoch 9 — Substrate Becomes the Wire"(working title; alternative: "The Operator Is No Longer the Wire". Pick during execution.)audience: docsexposure: navtier: 2voice: neutralstability: stabletags: ["odd", "epochs", "substrate", "agentic", "vodka-architecture", "epoch-9", "operator-as-wire", "persona-shaped-runtime"]epoch: E0009date: 2026-05-12forcing_fault: "The operator was the wire. The substrate's intelligence ended at the human's clipboard. Every cross-agent hop, every audit, every validation, every session transition routed through human attention. The system bottleneck was not tokens — it was the human in the loop being the integration layer. Audits were regex against prose. Validation was same-session self-review. Cross-agent coordination was copy-paste. Knowledge ingestion was manual transcription. Memory was operator-remembers. The intelligence stack was real but the wire between intelligences was a human relay."new_invariant: "Operator-as-wire is past tense. Audits are spawned agent sessions on substrate. Validation has its own substrate and its own context break. Personas are deployable peers with accounts and streams, not voices in chat windows. Cross-agent coordination is direct over the wire (AMS), not relayed. Knowledge ingestion is autonomous-trigger pipelines (R2 → ESE → KB) with no assistant in the loop. The operator's attention is reserved for direction-setting and pivot decisions; the substrate handles transport, dispatch, audit, validation, and ingestion."core_shift: "From assistant-mediated workflow with operator as integration layer → substrate-mediated workflow with operator as director. The wire moves from human shoulders to infrastructure. The dispatch-paths binary (assistant-orchestrated vs autonomous-trigger) makes the choice mechanical; the substrate-stack makes the layers orthogonal; the persona-shaped runtime makes Oddie deployable as a real peer on the wire."derives_from: "docs/appendices/epoch-8-6.md (if it exists; otherwise epoch-8-3.md), canon/principles/agents-need-their-own-wire.md, canon/architecture/substrate-stack.md, canon/methods/persona-shaped-agent-runtime.md, canon/methods/spawned-agent-session-runtime-contract.md, canon/methods/dispatch-paths.md, canon/methods/trigger-source-taxonomy.md, canon/constraints/audit-gates-are-spawned-agent-sessions.md, klappy/agent-messaging-service:ESSAY.md, klappy/agent-messaging-service:#77"documents_introduced: ["docs/appendices/epoch-9.md", "writings/we-were-the-wire.md"]
Body shape (modeled on epoch-8-3.md):
- Title + blockquote summary (one paragraph synthesizing the three frontmatter axes)
## Forcing Fault(the operator-as-wire failure mode, with the receipts the past week's canon produced)## New Invariant(what is now true that was not before)## Core Shift(the qualitative jump from E0008.x's "validation as observable mode" / "specs lock at implementation" to E0009's "substrate becomes the wire")## Layered Receipts — What Each L1–L6 Owes the Epoch(table: layer, what done looks like at this layer, which canon already covers it, what remains)## Documents Introduced(this appendix + the essay)## What Comes Next(audit-gate migration AMS #77 lands as the first production runtime, Oddie deploys as a real L4 peer,ams.convention.v1ships, TinCan magical first-run earns L5)## See Also(cross-references to load-bearing canon)
2. canon/CHANGELOG.md — version bump entry.
Append at the top (under the # 📜 Canon Changelog header):
## 0.38.0 — 2026-05-12
**Substrate Becomes the Wire (E0009)**
A new epoch. Epoch 8 made validation observable, time observable, encoding-types governed, and specs locked at implementation. Epoch 9 ends operator-as-wire as the default integration pattern. The substrate stack is named end-to-end (`canon/architecture/substrate-stack`); persona-shaped runtimes are specified (`canon/methods/persona-shaped-agent-runtime`); dispatch paths are bounded into a binary (`canon/methods/dispatch-paths`); trigger sources are taxonomized (`canon/methods/trigger-source-taxonomy`); and the first production-grade exercise of the runtime — the audit-gate migration onto Cloudflare's Agents Week primitives — is open as `klappy/agent-messaging-service` #77.
The narrative form of the epoch's central argument — "We Were the Wire" — is imported into `writings/` as a public-facing essay, expanded to cover the substrate stack and the layered receipts each tier of the stack owes the epoch.
Behavior change: from this version forward, when canon describes a workflow that includes a human in an integration role, it is describing a design smell unless the role is explicitly direction-setting or pivot-decisioning. The operator is a director, not a relay. Validators are spawned agent sessions. Audits are spawned agent sessions. Ingestion is autonomous-trigger pipelines. The wire is no longer a person.
- Adds: `docs/appendices/epoch-9.md`, `writings/we-were-the-wire.md`, `docs/oddkit/release-notes/2026-05-12-epoch-9-substrate-becomes-the-wire.md`
- Retags: ~18 agentic-substrate canon docs from `epoch: E0008.5` to `epoch: E0009`; bootstrap from `E0008.3` to `E0009` (frontmatter-only)
- Related: `klappy/agent-messaging-service` #77 (audit-gate runtime migration — the first production runtime exercise)
Verify the next-version number by reading the current tail of canon/CHANGELOG.md before writing — the planning session observed 0.37.0 was the latest, so 0.38.0 is the expected next minor. If the tail has moved, adjust.
3. docs/oddkit/release-notes/2026-05-12-epoch-9-substrate-becomes-the-wire.md — new file, modeled on docs/oddkit/release-notes/2026-04-20-post-4-7-adaptation.md.
Required frontmatter shape:
uri: klappy://docs/oddkit/release-notes/2026-05-12-epoch-9-substrate-becomes-the-wiretitle: "Release Notes — Epoch 9: Substrate Becomes the Wire (2026-05-12)"audience: docs,exposure: nav,tier: 2,voice: neutral,stability: stabletags: ["docs", "oddkit", "release-notes", "epoch-9", "substrate", "agents-need-their-own-wire", "behavior-change"]epoch: E0009,date: 2026-05-12derives_from: "canon/constraints/governance-change-discipline.md, docs/appendices/epoch-9.md, writings/we-were-the-wire.md, canon/principles/agents-need-their-own-wire.md"governs: "Operator and agent behavior after PR A merges — the substrate stack is the default integration pattern, operator-as-wire is named as a design smell, autonomous-trigger is the canonical path for everything except synchronous user-facing assistance."related_pr: "<URL of PR A once opened>"
Body shape (per post-4-7-adaptation precedent — frame impact by usage, not by file inventory):
- Title + blockquote summary
## Summary — Behavior Change Is the Deliverable## What Changes for Operators## What Changes for Agents## What Does Not Change## How to Recognize Operator-as-Wire (and Replace It)## Receipts Per Layer(what each L1–L6 owes; reuse the table from the appendix)## Related
4. Frontmatter retag — per-doc verification then mutation.
Candidate list (verify each frontmatter before mutating):
canon/architecture/substrate-stack.md E0008.5 → E0009
canon/methods/persona-shaped-agent-runtime.md E0008.5 → E0009
canon/methods/spawned-agent-session-runtime-contract.md E0008.5 → E0009
canon/methods/spawned-agent-session-substrate-options.md E0008.5 → E0009
canon/methods/dispatch-paths.md E0008.5 → E0009
canon/methods/trigger-source-taxonomy.md E0008.5 → E0009
canon/principles/agents-need-their-own-wire.md E0008.5 → E0009
canon/principles/symmetric-participation.md E0008.5 → E0009
canon/principles/sessions-mirror-modes.md E0008.5 → E0009
canon/principles/creators-get-paid.md E0008.5 → E0009
canon/principles/magical-first-run.md E0008.5 → E0009
canon/principles/methodology-personification.md E0008.5 → E0009
canon/principles/voice-as-cognitive-load-shedding.md E0008.5 → E0009
canon/constraints/mode-transitions-require-encoded-handoff.md E0008.5 → E0009
canon/constraints/critic-cannot-be-resolver.md E0008.5 → E0009
canon/observations/clone-klappy-to-oddie-recognition.md E0008.5 → E0009
canon/definitions/epistemic-modes.md E0008.5 → E0009
docs/appendices/mode-separated-conversations.md E0008.5 → E0009
canon/bootstrap/model-operating-contract.md E0008.3 → E0009
Per-doc verification procedure (mandatory — meaning-must-not-depend-on-path):
For each candidate, read the doc's current frontmatter and governs field. Confirm that the doc is in fact substrate / agentic-runtime / persona-shaped work that earned its tag from the Epoch 9 push, not from incidental dating. If any doc reads as orthogonal (e.g., it was tagged E0008.5 because of when it was written but governs unrelated subject matter), exclude it from the retag and note the exclusion in the PR description. Do not retag based on date alone.
Not bumping (verified out of scope): software-virtues package (E0008.4 — virtues-revisited, tension-matrix, tension-survey, software-virtues-vocabulary, etc.), canon/principles/specs-lock-at-implementation and related E0008.6 docs (specs lock is its own E0008.6 sub-epoch, not part of the substrate push).
PR A — Definition of Done
- All four
governance-change-disciplinemarkers present (canon version bump, changelog entry, release notes file, epoch appendix doc) - All retag candidates verified per-doc (not blanket-applied)
- Frontmatter validator CI (
#196) passes on the PR - All
klappy://URIs in the new docs resolve (runoddkit_auditlocally or via the canon-quality workflow) - Cursor Bugbot reaches
completed(not justin_progress) perrelease-validation-gatediscipline - PR description references this handoff URI and the original ESSAY.md source
PR A — Reversibility
- New files: deletable
- Frontmatter mutations: reversible via revert-the-commit
- Canon version bump: revertible via subsequent patch version with a "revert" entry
- Release notes file: deletable
- No code shipped, no production behavior altered, no tools changed
PR BFull Specification
Artifact Created
writings/we-were-the-wire.md — new file. Spine imported from klappy/agent-messaging-service/ESSAY.md (read at: https://api.github.com/repos/klappy/agent-messaging-service/contents/ESSAY.md, ~11,641 chars / ~2,300 words). Expansion added before the original's "What Happens Next" closing section.
Frontmatter
uri: klappy://writings/we-were-the-wire
title: "We Were the Wire"
subtitle: "An Essay on Why Agents Need Their Own Messaging Protocol — and How the Substrate Stack Ends Operator-as-Wire"
author: Klappy
type: essay
public: true
audience: public
exposure: public
tier: 3
voice: first_person
stability: stable
tags: ["writings", "essay", "agents", "substrate", "wire", "AMS", "tokens-not-messages", "dial-tone", "TCP-IP", "agents-need-their-own-wire", "substrate-stack", "persona-shaped-runtime", "dispatch-paths", "autonomous-trigger", "epoch-9"]
epoch: E0009
date: 2026-05-12
hook: "At a hackathon two months ago, my collaborator and I sat in the back row and watched our agents need to talk to each other. We copied messages between Signal and two chat windows. For forty minutes, two reasoning systems with arbitrary bandwidth were bottlenecked through two humans operating a clipboard. We were the wire."
description: "The hackathon scene that named the problem; the dial-tone argument that frames the answer; the substrate stack that earns it. Operator-as-wire is the default failure mode for every agent integration today — not just agent-to-agent messaging, but audits, validation, session-routing, ingestion, and memory. AMS gives the wire its own substrate; the stack above it gives every other layer its own shape. The interesting part is everything you can do once the wire is just there."
slug: we-were-the-wire
og_title: "We Were the Wire"
og_description: "Two agents needed to talk. We copied messages between Signal and two chat windows for forty minutes. The hackathon scene that named the problem; the stack that earned the answer."
og_type: article
twitter_card: summary_large_image
twitter_title: "We Were the Wire"
twitter_description: "Two agents needed to talk. We copied messages between Signal and two chat windows for forty minutes. The hackathon scene that named the problem; the stack that earned the answer."
derives_from: "klappy/agent-messaging-service:ESSAY.md (original spine, ~2300 words), canon/principles/agents-need-their-own-wire.md (canon principle form), canon/architecture/substrate-stack.md, canon/methods/persona-shaped-agent-runtime.md, canon/methods/dispatch-paths.md, canon/methods/trigger-source-taxonomy.md, canon/methods/spawned-agent-session-runtime-contract.md"
complements: "writings/agentic-software-development.md, writings/the-dream-house-and-pre-optimization.md"
status: active
---
Body Structure
Spine sections (imported verbatim or near-verbatim from AMS ESSAY.md; ~2,300 words preserved):
# We Were the Wire(title + tagline)## The Hackathon— the back-row scene, the copy-paste, "we were the wire"## What Is Actually Missing— human-built tools fail for agents## Tokens, Not Messages— streaming, fan-out## The Stack That Does Not Yet Exist— verticals reinvent the wire badly; the TCP/IP comparison## What We Are Building— AMS as four primitives: account, conversation, stream, token## The Inverted Inbox— own your writes, not your reads
Expansion sections (NEW, ~1,500 words added between section 7 and the original's "What Happens Next"):
-
## The Wire Problem Was Never Just Agent-to-Agent— extend the hackathon insight beyond two-agents. The same shape appears at every integration boundary:- Audits that lint prose with regex are humans-as-wire by another name
- Validation that happens in the same session as creation is the creator-as-wire (the lenses used to build are the lenses used to evaluate)
- Knowledge ingestion that requires manual transcription is the operator-as-wire between sensor and KB
- Session-routing between Claude / Cursor / ChatGPT / Lovable is the operator-as-wire between models
- Memory that depends on the operator remembering what got encoded is the operator-as-wire between sessions
- In every case, the symptom looks different but the underlying shape is the same: a finite human attention is the integration layer.
-
## The Stack That Answers the Wire Problem— name the six layers:- L1 Wire (AMS): tokens between accounts, no opinion
- L2 Wrapper/Adapter (MCP edge, channel adapters, AI-tool adapters): translation between L1 and a specific runtime or channel, no application opinion
- L3 Identity & Convention (
ams.convention.v1): metadata for legible peer identity - L4 Role/Agent (Oddie, future personas): canon-driven behavior, persona-shaped runtime
- L5 Application (TinCan): magical first-run in under a minute
- L6 Economy (Stripe rails, penny economy): creators get paid, substrate never extracts
- Each layer is replaceable in principle; each layer holds one concern; cross-layer features are suspicious by default.
-
## The Dispatch Path Question That Settles Everything Else— the binary that organizes the runtime:- Assistant-orchestrated: a human reads the result through a chat assistant. Clarifying questions can be surfaced inline. Errors get explained in chat. The assistant is the consumer of record.
- Autonomous-trigger: an external event wakes the runtime. There is no chat, no inline operator, no inline assistant. Clarifying questions are incoherent — there is no listener. Errors must emit to a configured channel.
- One decision rule: when the runtime returns, who reads the result first?
- Almost every workflow that historically had a human in the wire was, in fact, an autonomous-trigger shape mistaken for an assistant-orchestrated one. Naming the binary makes the wiring honest.
-
## Worked Example — Drop a File, Get Knowledge— the R2/object-store + ESE pipeline:- File lands in R2. Notification through Queues. Queue consumer wakes a Durable-Object-hosted ingestion persona. Persona runs Epistemic Surface Extraction (OCR / ASR / frame extraction / structural parsing). Artifacts encoded as Dolcheo+. Pipeline routes them into the knowledge base.
- Operator drops a file in a bucket; artifacts appear in the KB. No assistant in the loop.
- The shape is reusable: substitute "file" with "transcript," "calendar event," "PR webhook," "Slack message." The wake mechanism changes; the runtime contract does not.
-
## What Audits Look Like When the Wire Is Substrate— validator-on-substrate:- The audit gate that lints a PR used to be a regex script. The regex could not read prose; it pattern-matched and missed the things prose actually said.
- The audit gate is now a spawned Oddie session. Fresh context, canon-driven behavior, structured deliverable. Same canon governs the auditor that governs the work.
- The receipt that proves this is the day the substrate-hosted audit catches a defect a same-session smoke would have missed. That catch is in the audit ledger. The operator-as-wire is past tense.
-
## Oddie Gets an Account— methodology-as-deployable-peer:- Oddie has been a voice profile inside chat sessions. In Epoch 9, Oddie gets an AMS account and a stream. A real peer on the wire, not a voice in a window.
- Same canon, different surface. Oddie validating a PR (autonomous-trigger, GitHub webhook), Oddie guiding a TinCan room (autonomous-trigger, AMS frame), Oddie running an audit on a schedule (autonomous-trigger, alarm) — all the same persona, mechanically applied.
Closing section (imported verbatim from original):
## What Happens Next— original close, plus a one-paragraph epilogue tying the closing line ("the interesting part is everything you can do once the wire is just there") to the stack now standing above the wire. The hackathon was forty minutes. The stack is six layers. The interesting part is open.
Length Target
~3,500–4,000 words total. Hard cap 4,000. Do not pad the original spine — it earns its weight. The expansion is additive, not interpolated into the existing argument.
Voice — Mandatory Rules
- Klappy first-person throughout. The essay uses "we" for the hackathon scene (Klappy + Ian), "I" for retrospective framing, never "Oddie" or any third-person omniscient register.
- Oddie voice does NOT apply. Per
canon/voice/oddie-the-river-guideactivation rules: Oddie is default-on in oddkit-driven sessions and ODD-mode sessions; default-off in published essays. Public essays stay in the author's voice. This is an explicit not-Oddie surface. - AI-voice-clichés constraint applies. No "delve," "in today's fast-paced world," no false-balance "however / on the other hand" cadence, no hollow "ultimately," no "tapestry." The essay is direct, dry, and named.
- Guide-posture applies even in first-person. The reader is the hero coming to understand the wire problem. The author is the guide who lived through it. The essay does not lecture; it shows.
- Voice-as-cognitive-load-shedding applies. Calm, brief, dense. Long sentences earn their length by carrying information.
Writing Canon Checklist (per canon/meta/writing-canon)
- Title alone actionable (
We Were the Wire— yes, names a stance) - Title + blockquote actionable (hook + 1-line summary together convey the argument)
- Title + blockquote + frontmatter metadata actionable (tags + description give scope)
## Summarysection actionable on its own (one paragraph synthesizing the essay's spine)- Full doc actionable (the full argument, the worked examples, the closing)
- Descriptive headers as nav (every
##is a content header, not "Introduction" / "Conclusion")
PR B — Definition of Done
- File created at
writings/we-were-the-wire.md - Frontmatter validates against the schema CI (#196)
- Word count between 3,500 and 4,000
- All
klappy://URIs resolve viaoddkit_auditor equivalent - Voice canon checks pass — no Oddie register leakage, no AI tells
- Writing canon checklist all five depths actionable
- Spine sections preserved (compare diff against original ESSAY.md — additions only; original prose untouched except for minor punctuation alignment with
klappy.devstyle) - Cursor Bugbot reaches
completed - PR description references
epoch: E0009(resolves only after PR A merges) - AMS-side
ESSAY.mdis not modified by this PR
PR B — Reversibility
- New file: deletable
- No retroactive changes to AMS-side
ESSAY.md - Spine is imported, not replaced — original always available at AMS
Pre-Resolved Decisions (Falsifiable)
These are decisions I made during planning to keep the next session in execution mode rather than re-planning. Each is named so it can be overridden if the executing session sees a reason.
-
Two PRs, not one. Cleaner review surface. PR A is mechanical canon; PR B is writing work. Independent merge timing. Override if: the executing session prefers atomic landing and is willing to manage the larger diff.
-
Bootstrap doc gets a frontmatter bump only. Content update for E0009-specific disciplines (dispatch-path discipline, autonomous-trigger error-routing) is deferred. Override if: the executing session decides the bootstrap update is mechanical enough to fold in without expanding scope.
-
Essay voice = Klappy first-person, not Oddie. Per
oddie-the-river-guideactivation defaults: public essays stay in author voice. Override if: the operator explicitly requests Oddie register for the public essay (would be unusual). -
AMS-side
ESSAY.mdstays unchanged in this trio. Forward-pointer to klappy.dev expanded version is a separate AMS PR. Override if: the executing session has authority to also open the AMS PR and prefers atomic narrative-import. -
Essay length target 3,500–4,000 words. Original is ~2,300; expansion adds ~1,500. Hard cap 4,000. Override if: the expansion runs short or long for organic reasons — the cap is a guideline, not a constraint.
-
Borrow-evaluation-before-implementation is NOT APPLICABLE here. Reason: this trio has no upstream substrate to evaluate (the essay is the operator's own work; frontmatter retags are mechanical; the appendix is a new canon doc with no implementation analog). The 6B table would be ceremony. Surface this explicitly in the PR description so the constraint check is auditable.
Open Questions for the Executing Session
These genuinely require judgment at execution time and should not be pre-resolved by the planner.
-
Per-doc retag verification. Read each of the ~18 candidate doc frontmatters before mutating. Does each one's
governsfield describe substrate / agentic-runtime / persona-shaped work? If any one reads as orthogonal subject matter that just happened to be taggedE0008.5by date, exclude it and note the exclusion in the PR description. -
Canon version next number. The planning session observed
0.37.0as the latest incanon/CHANGELOG.md. If the tail has moved since (other work may have shipped), adjust to the next minor. -
Appendix title. "Substrate Becomes the Wire" vs "The Operator Is No Longer the Wire" vs other framing. Either works; pick during execution. The frontmatter
forcing_faultandnew_invariantcarry the substance regardless. -
Should PR A also bump
docs/appendices/mode-separated-conversations.mdfrom E0008.5 → E0009? It's borderline: the doc is the consumer-facing appendix formode-discipline-and-bottleneck-respect, which is foundational to E0009 but not itself an Epoch 9 invention. Judgment call. Lean yes (it's the consumer reference for the mode discipline the runtime contract mechanizes), but the executing session may differ. -
Should
canon/definitions/epistemic-modes.mdretag? It's the deepest dependency of the agentic substrate work, but it was a foundational E0008.5 doc that the substrate canon was built on, not produced by the substrate push. Judgment call. Lean yes (the retag reflects which epoch it now governs), but acceptable to leave at E0008.5 if the executing session sees a reason.
Risks and Mitigations
-
Risk: A retag candidate is orthogonal to substrate work and gets retagged anyway.
Mitigation: Mandatory per-doc verification step — read each frontmattergovernsfield before mutating. The executing session does NOT batch-replace by sed. -
Risk: Essay loses crispness through expansion.
Mitigation: Hard cap 4,000 words. Spine sections preserved verbatim. Expansion is additive, slotted between section 7 and the close, not interpolated into the original argument. -
Risk: Voice drift toward Oddie or AI cliché in the expansion.
Mitigation: Writing governance pass is part of PR B's DoD. The diff is read againstai-voice-clichesandoddie-the-river-guideactivation rules before opening. -
Risk: Forward-reference from PR B to PR A's E0009 declaration breaks if A doesn't merge first.
Mitigation: Serial sequencing — PR B opens only after PR A merges. The planning session verified PR A has no blockers (no other open klappy.dev PRs, frontmatter validator is green on current main, no merge conflicts expected). -
Risk: Multi-parallel-agent collision on the same canon files.
Mitigation: The planning session observed (2026-05-12T02:24Z): zero open klappy.dev PRs, zero open klappy/oddkit PRs, one open klappy/agent-messaging-service PR (#77, independent). Window is open. The executing session re-checks open PRs before opening its own. -
Risk:
release-validation-gateambiguity for canon-only PRs.
Mitigation: The constraint as written targetsklappy/oddkit(code that ships to consumers). For canon-only PRs inklappy.dev, the analog is: frontmatter validator must pass, Bugbot must complete, references must resolve. No managed-agent validator dispatch is required for canon-only changes. If the executing session believes a managed-agent validator IS warranted (e.g., the essay's argument is load-bearing enough), they may dispatch one — but it is not a strict prerequisite.
Receipts to Verify Before Each Merge
Before merging PR A
-
docs/appendices/epoch-9.mdexists; frontmatter validates; all five Writing Canon depths actionable -
canon/CHANGELOG.mdentry appended at version0.38.0(or current next-minor); date2026-05-12 -
docs/oddkit/release-notes/2026-05-12-epoch-9-substrate-becomes-the-wire.mdexists; framed by usage impact; resolves all referenced canon - All retag candidates verified per-doc (no orthogonal docs retagged); any excluded ones named in PR description
- Bootstrap doc frontmatter bumped (content unchanged)
- Frontmatter validator CI green
- All
klappy://URIs in new docs resolve viaoddkit_audit - Cursor Bugbot reaches
completed(notin_progress) - PR description references this handoff URI and the sibling session ledger
Before merging PR B
- PR A has merged;
epoch: E0009resolves onmain -
writings/we-were-the-wire.mdexists; frontmatter validates; word count 3,500–4,000 - All five Writing Canon depths actionable
- Spine sections preserved (diff vs AMS
ESSAY.mdshows additions only, not edits) - Voice canon pass: no Oddie register leakage; no AI clichés
- All
klappy://URIs resolve - Frontmatter validator CI green
- Cursor Bugbot reaches
completed - PR description references this handoff URI, PR A's merge commit, and the AMS
ESSAY.mdsource - AMS
ESSAY.mdconfirmed unchanged
Borrow-Evaluation Skip Justification
Per canon/constraints/borrow-evaluation-before-implementation: this trio does not require a 6B Evaluation table. Reason: there is no upstream substrate to evaluate. The deliverables are (a) a new canon appendix authored from scratch using the established docs/appendices/epoch-N.md shape, (b) a frontmatter retag, mechanical, (c) an essay imported from the operator's own AMS repo and expanded with operator-authored content. None of these are implementation tasks against an SDK, reference impl, or widely-adopted library that the project might otherwise rebuild. The 6B discipline applies to "should I build this or borrow it" decisions; this trio has no such decision to make. Surface this in each PR description so the constraint check is auditable.
Context Health for the Executing Session
This handoff is designed to be the only document the executing session needs to read to begin work. It is self-sufficient. Optional supporting context:
- The sibling session ledger (
odd/ledger/2026-05-12-epoch-9-planning.md) carries the audit trail of how this plan was produced — useful for understanding the gauntlet outputs and the challenge catches, not required for execution. - The AMS
ESSAY.mdis the source material for PR B. The executing session reads it directly fromklappy/agent-messaging-service/ESSAY.md(raw URL or GitHub API). - Recent klappy.dev canon (substrate-stack, dispatch-paths, trigger-source-taxonomy, persona-shaped-agent-runtime, agents-need-their-own-wire) ground the appendix and essay expansion. The executing session reads only the sections it needs while drafting.
The planning session's mode rhythm: exploration → planning → handoff-ready (gate PASS at 2026-05-12T02:42Z). The executing session opens in planning mode briefly to confirm scope against current main, then gates to execution.
See Also
klappy://canon/constraints/governance-change-discipline— the four-marker discipline this trio satisfiesklappy://canon/principles/verification-requires-fresh-context— why this handoff exists at allklappy://canon/constraints/mode-transitions-require-encoded-handoff— why this handoff is a durable canon artifactklappy://canon/principles/agents-need-their-own-wire— the canon principle whose essay form lands in PR Bklappy://canon/architecture/substrate-stack— the six-layer map referenced throughoutklappy://canon/methods/dispatch-paths— the binary that organizes the runtimeklappy://canon/methods/trigger-source-taxonomy— the nine canonical trigger typesklappy://canon/meta/writing-canon— the five-depth actionability ruleklappy://canon/voice/oddie-the-river-guide— the activation rules that keep this essay in Klappy voiceklappy://docs/appendices/epoch-8-3— the appendix shape PR A models onklappy://docs/oddkit/release-notes/2026-04-20-post-4-7-adaptation— the release notes shape PR A models onklappy/agent-messaging-service:ESSAY.md— the spine PR B importsklappy/agent-messaging-service:#77— the live work that earns this epoch