docs/adr/README.md

Architecture decision records

ADRs preserve why a decision was ratified. accepted means ratified, not necessarily implemented or still current. Superseded records remain in place; later ADRs link back to the decision they amend or replace. Read the current architecture for the implemented system; the archive below identifies decisions whose former implementation or scope is historical.

Conventions

  • Put current setup, commands, configuration, and implementation state in the owning app or package README. ADRs keep the decision, evidence, alternatives, and consequences.
  • Link amendments and superseding decisions in the status paragraph. Historical implementation details stay explicitly historical rather than claiming to describe the running system.
  • When a decision retires guidance that agents or users read, add the retired phrasing to retired-claims.json. pnpm docs:check then fails wherever live code, skills or guides still repeat it.
  • Link ADRs by stable filename, not by number alone. Accepted ADRs are never renumbered, except once to end the four historical collisions below.
  • Allocate the next unused number after checking fetched main. pnpm docs:check and pnpm check:landing reject duplicate numbers.

Renumbered records

Until 2026-10-17 numbers 0098, 0189, 0191 and 0207 each named two records. VUH-2396 moved one of each pair to a new number: a proposed record gave way to an accepted one, otherwise the later one moved, and the less-cited one when both landed in the same commit. Links and citations written before then may use the former number; this table resolves them.

Former number and fileNow
0098 0098-the-room-can-type-to-a-playthrough.mdADR 0275: The room can type to a playthrough
0189 0189-agent-sessions-read-from-their-transcripts.mdADR 0276: Agent sessions read from their transcripts
0191 0191-a-reply-to-his-post-goes-to-whoever-owns-the-work.mdADR 0277: A reply to his post goes to whoever owns the work
0207 0207-workers-publish-through-one-clankie-app.mdADR 0278: Workers publish through one Clankie app

The other record of each pair keeps its number: ADR 0098 (user-session shares), ADR 0189 (Linear echoes), ADR 0191 (work tracking) and ADR 0207 (native delivery).

Diagrams

ADR 0210 records the separation of native goals, explicit session assignments and current activity.

Diagrams are Mermaid in the Markdown that owns the subject, so they render on GitHub and in Linear and change in the same commit as the code. The architecture keeps the system map, the message-to-turn flow and the fleet flow; subsystem diagrams live in their package or app README. The former tldraw sources and JPG exports were removed on 2026-10-06; git history keeps them.

ADR 0215 records exclusive body-resource leases for parallel conversations belonging to one Clankie.

ADR 0216 moves agent roles and project policy into owner settings, with lossless persona migration and per-agent membership rules.

ADR 0217 supersedes ADR 0216's fleet tool gate: admitted fleet members reach verified connected accounts through clankie_tools and clankie_call, with an owner kill switch.

ADR 0218 lets native harness seats drive a selected conversation, preserving room grants and delivery receipts across handover, and routes worker reports to their persisted lead.

ADR 0220 adds one presence operator operation, a desktop tool for his own expressions, and hero pixel art in branding/pet/; the desktop pet itself lives in the private app.

ADR 0221 prioritizes real E2E, integration and golden coverage for new work; existing unit-test pruning remains a separate reviewed effort.

ADR 0214's VUH-1678 amendment supersedes ADR 0218's Linear routing extension: verified rule-passing webhooks wake one ordinary configured chat, global-default by default, and retire the separate Linear inbox protocol. Clankie can set the non-secret target and rules.

Archived decisions

Archived means superseded or retired for the scope named below. These records retain their stable paths and historical rationale; archiving does not delete an ADR or change the surviving constraints explicitly noted in its status. The links in this table follow each record's current-status paragraph and the superseding decisions.

StatusRecordArchived scope / current decision
ArchivedADR 0025: ClankVox is an in-repo voice sidecar behind versioned bridge IPCSole-owner media and native package placement. ADR 0128: Vox is the sole Discord media owner; ADR 0100: Vox is an owned native media package.
ArchivedADR 0039: GBA emulator embodiment and the deterministic core boundaryLocal GBA body retired. ADR 0145: The world is the only body.
ArchivedADR 0040: Real headless mGBA core behind the emulator seamLocal mGBA core retired. ADR 0145: The world is the only body.
ArchivedADR 0044: The runner owns Mineflayer while Paper owns Minecraft successRunner-owned Minecraft body removed; current offline Minecraft uses an MCP motor. ADR 0219: Minecraft is an MCP-connected body.
ArchivedADR 0053: An external harness possesses Clankie under a leasePossession replaced by independent player identity. ADR 0129: Each player owns a body; ADR 0145: The world is the only body.
ArchivedADR 0064: The possessor voice seamPossessor voice scope retired; neutral Clankie play voice survives. ADR 0129: Each player owns a body.
Archived0075. Rewinding is a play choiceLocal rewind retired. ADR 0145: The world is the only body.
ArchivedADR 0090: Emerald plays from the screenLocal screen-only Emerald implementation retired. ADR 0145: The world is the only body.
ArchivedADR 0125: The menu bar is a private local voice roomMenu-bar voice room retired. 0203 — Clankie keeps what better models cannot absorb.
ArchivedADR 0130: Goals and self-wakes share the operator threadService goals retired; self-wakes and the global switch survive. ADR 0264: Projects on Auto replace goals.
ArchivedADR 0132: A goal keeps a decision journalRetired with service goals. ADR 0264: Projects on Auto replace goals.
Archived0180. Swarm owns cross-session coordinationSwarm coordination retired. ADR 0213: Clankie retires Swarm.
Archived0182. Swarm peers are messageable personasSwarm peer personas retired. ADR 0213: Clankie retires Swarm.
ArchivedADR 0194: Interactive Swarm workers receive leased channel eventsSwarm channel delivery retired. ADR 0213: Clankie retires Swarm.
ArchivedADR 0198: One coordinator reaches every fleetSwarm coordinator retired. ADR 0213: Clankie retires Swarm.
ArchivedADR 0205: The fleet carries its open Swarm tasksSwarm task projection retired. ADR 0213: Clankie retires Swarm.

Archived scopes within continuing records

These ADRs retain a live boundary or an unimplemented proposal. Only the named scope is archived; readers should follow the successor for its implementation.

RecordArchived scopeContinuing boundary / successor
ADR 0045: Official-bot group voice uses the maintained Discord media stackArchived: Node voice/Opus media owner and split-stack rollout.Consent, attribution, floor, and positive DAVE evidence remain; media ownership follows ADR 0128: Vox is the sole Discord media owner.
ADR 0059: Lease expiry pauses the body; only revocation is finalArchived: Possession and cross-process body lock.Internal action/lease recovery is retained in its applicable scope; independent body ownership follows ADR 0129: Each player owns a body.
ADR 0129: Each player owns a bodyArchived: Local emulator body.Independent player identity remains; the Pokémon body follows ADR 0145: The world is the only body.
ADR 0170: A session that stops is unboundArchived: Ambient selection and automatic replacement of a lost session.Explicit binding and its current CLI contract follow 0181. Clankie is independent of his connections.
ADR 0276: Agent sessions read from their transcripts, on any hostArchived: Headless resumed turns and Swarm identity proposals.Transcript reading remains; native interactive work follows 0203 — Clankie keeps what better models cannot absorb.
ADR 0208: Agents carry a role; the world reads itArchived: Identity-role storage.Roles move into project policy under ADR 0216: Projects own agent roles and tool policy.
ADR 0216: Projects own agent roles and tool policyArchived: Fleet tool gate tied to project membership.Project roles, caps, hiring, and tracker binding remain; connected tool access follows ADR 0217: Fleet membership gets connected tools.