Decision Register — settled rulings, read at start
Decision Register
Section titled “Decision Register”Durable, read-at-start store for settled architectural decisions — the normative rulings a future session must honour without re-deriving or re-litigating them.
This page is an index, not the store. Each decision is its own file under
reference/decisions/ (one file per DR, linked from the tables below); the tables below are generated from
those files by bun run decisions:index. Read the index to know what was
settled and when to go deeper; open the decision file only when you actually
need the reasoning.
It is distinct from its neighbours:
| Store | Holds | Read at start via |
|---|---|---|
| Decision Register (this) | normative rulings IN FORCE until superseded | start-session β |
| retros | observations / friction / unresolved questions (time-stamped) | start-session β retro read-back |
| MemPalace | semantic recall of prior context | SessionStart recall hook (γ) |
ordna (tasks/id-N.md) | task / work state | start-session β reconciliation |
| specs (RESEARCH/PRODUCT/TECH) | forward design (plan surface: Intent workspace spec-note, DR-089) | per-task |
How this register works
Section titled “How this register works”What earns an entry
Section titled “What earns an entry”Both tests must pass. An entry that fails either one is a tax on every future session, because this page is loaded at every session start.
- Normative and re-litigable — would a future session re-flag, re-implement, or re-litigate this if it weren’t written down?
- ADR-shaped — hard to reverse, surprising, and carrying a real trade-off.
What does not belong here, and where it goes instead:
| Not a decision | Belongs in |
|---|---|
| How-to / implementation detail | a runbook, a CLAUDE.md, or a code comment |
| ”Landed at commit X”, “shipped in PR #N” | the task file or the retro |
| A rule already enforced by a lint, test or CI gate | wherever that gate lives |
| An observation, finding or friction note | the retro |
| Substance that already lives in a doc read at start | that doc — cite it, don’t restate it |
A retro workflow_improvement is an observation, not a ratified ruling —
promote it to a decision only when it is actually adopted as binding.
- One file per decision,
reference/decisions/dr-<nnn>-<slug>.md. The record is the file; this page only points at it. - ID =
DR-NNN, monotonic, with an optional letter suffix for a decision that splits (DR-086a/DR-086b). - One to three sentences for the ruling itself. Link the spec or commit for depth rather than inlining it.
- New decisions use the full ADR template — Context, Decision, Alternatives
Considered, Consequences — per the docs-site
documentation-and-adrsskill. Entries migrated from the pre-id-368 register carry their original text.
Status model
Section titled “Status model”proposed → accepted → (superseded | retired)
accepted— in force. start-session surfaces these.superseded— replaced by a later decision, named insuperseded_by. Both sides of the chain are declared and CI checks they agree.retired— no longer in force and not replaced. Requiresretired_reason;substance_moved_tonames where the content went when it moved rather than died.
A closed decision is a file with a status, never an absence. Deleting entries is what produced the four defects this structure exists to prevent (id-368): citations that resolved to nothing, a number silently re-issued for an unrelated ruling, orphaned suffixes, and a hand-maintained “retired ids” list that was 0-for-6. Keeping the file makes every citation resolve and makes the id un-reusable — a re-issue collides on the filename.
Maintenance
Section titled “Maintenance”bun run decisions:indexregenerates the tables below.__tests__/decision-register-integrity.test.tsfails CI when the index is stale, an id is duplicated or unclaimed, a filename disagrees with its frontmatter, a supersession chain is one-sided, or anyDR-NNNcited anywhere in this repo resolves to no file.- Write routing. Workers return DR-intents, never writing in-branch; the
Orchestrator / handoff applies them on
main. An out-of-scope finding may be disposed as a decision via thetriage-findingskill (the 5th disposition beside subtask / roadmap / backlog / no-action).
In force (96)
Section titled “In force (96)”| DR | Decided | Status | Decision |
|---|---|---|---|
| DR-153 | 2026-08-14 | accepted | The per-document residual grain retires: a source document with no published knowledge derived from it gets no concept file. DR-141’s coverage guarantee is honoured at the knowledge grain, and corpus gap visibility moves to a platform coverage surface over the provenance register (at most a single gaps index in the bundle) |
| DR-152 | 2026-08-14 | accepted | The ingestion pipeline is rebuilt on upstream cocoindex primitives at the root-level pipeline/ (DR-142’s ratified destination), replacing scripts/cocoindex_pipeline rather than repairing it — ratified contracts port as acceptance tests, the mock-tier apparatus does not port (LiteLLM provider selection replaces it), and the id-464 burn sequence is held and disposed by the rebase |
| DR-151 | 2026-08-13 | accepted | The admitter identity ships as a documented extension key (admitted_by) valued in the spec’s §7 actor convention, not under §5.1 author — a standard slot carries only the fact the spec defines for it, and producer-specific facts enter as documented extension keys in the same actor convention |
| DR-150 | 2026-08-12 | accepted | The effective LLM identity (resolved base URL + model) is a required argument of every memoized extractor so it participates in the memo key — a tier or model switch can never serve another identity’s memoized output; the signature change is the owner-approved one-time whole-corpus re-extraction burn |
| DR-149 | 2026-08-12 | accepted | The closed 12-value entity_type vocabulary opens on the guided-open contract (prefer the twelve, mint only when nothing fits); type labels gain the DR-147 stability discipline — a re-run may add labels but never re-label an existing entity’s type, re-label attempts surface to the user as suggestions; entity_type_override is bound by the same ruling; the DB CHECK becomes a shape check |
| DR-148 | 2026-08-11 | accepted | Mentions from keep-and-watch and live-connected sources are engine-owned declarative rows; mentions from ingest-once sources cross a promotion boundary so the extracted knowledge outlives the source; external-referenced sources produce no mentions from bytes |
| DR-147 | 2026-08-11 | accepted | The entity_mentions surrogate id keys on the resolved canonical so identity and natural key agree, and the resolved canonical is a function of the accumulated decision record — pair cache, pins and prior canonicals seeded via is_existing_canonical — so re-runs cannot rename existing groups |
| DR-146 | 2026-08-11 | accepted | The producer stops declaring bundle files as cocoindex target states and git_sync writes them instead, because the engine writes after the flow body returns and silently overwrites anything git_sync put on disk; write_bundle becomes pure content computation, and the engine store must be wiped when this lands |
| DR-145 | 2026-08-10 | accepted | source_documents.publication_status is ratified as a document-level REVIEW gate retained for clients who may want one, and admission_status becomes the home for withdrawing a document from retrieval; neither changes DR-025’s two gates, and R2’s queue-over-units-of-knowledge argument is unaffected |
| DR-144 | 2026-08-10 | accepted | ruamel.yaml becomes a pinned producer dependency in id-428, overturning frontmatter.py’s contemporaneous no-pyyaml choice at the requirement level; PyYAML was never a candidate because safe_dump cannot meet id-440’s byte-faithful round-trip, and the migration must re-prove id-440’s AC-1 and AC-2 rather than assume them |
| DR-143 | 2026-08-10 | accepted | The producer’s two pattern-matched source_documents reads gain a publication_status filter, matching every q_a_pairs read and TECH §2.1’s ratified corpus definition; widening the corpus to admit unpublished rows is rejected because it would oblige the residual grain to draft concepts for records DR-025’s knowledge-admission gate has deliberately withheld |
| DR-142 | 2026-08-10 | accepted | cocoindex leaves scripts/ for a singular root-level pipeline/ holding the whole runtime bundle plus its Python tests, package name unchanged; services/ is declined because DR-117’s moves-as-one-unit premise is false at the directory boundary, and deploy/ stays a root sibling |
| DR-141 | 2026-08-09 | accepted | Concepts are generated per unit of knowledge with a residual grain guaranteeing coverage, not per key of a closed type vocabulary; the validator-enforced type taxonomy is withdrawn as a superset because it inverts what OKF is for |
| DR-140 | 2026-08-09 | accepted | Stage-5 resolves before declaring rather than mutating declared rows, relationship endpoints derive from resolved mentions behind an admission gate, and the deterministic naming layer stops being the mechanism that decides two names are one thing |
| DR-139 | 2026-08-09 | accepted | DR-123 covered task directives; this extends it to invariants, and adds the converse — pre-launch, the cost of preserving something wrong because it has consumers exceeds the cost of changing it, schema included |
| DR-138 | 2026-08-09 | accepted | A Zod enum is added where a value crosses a trust boundary; for a column every call site writes as its own literal, the TypeScript union is the whole guard, and a paired validator is dead code that reads as protection |
| DR-137 | 2026-08-09 | accepted | A handler returning NextResponse |
| DR-136 | 2026-08-09 | accepted | A knip unused-export finding is resolved by wiring, un-exporting or deleting the symbol; @public asserts deliberate library surface and may only be applied where that assertion is true, which a server-only module can never satisfy |
| DR-135 | 2026-08-09 | accepted | An entity_mentions row whose surface form does not occur in its document’s content_text carries no context_snippet, therefore no evidence the document was read, therefore no citable provenance — so the pipeline refuses the row rather than writing it empty |
| DR-134 | 2026-08-08 | accepted | The RSS feed routes move under the intelligence namespace and gain workspace-scoped feed tokens carried in the URL; session auth would make the feature unusable by its only consumers, and header auth is bypassable because these are the only two API routes emitting a shared-CDN s-maxage directive |
| DR-133 | 2026-08-08 | accepted | An integration fixture staged under a per-test prefix must carry bytes distinct from every walked-baseline document AND from every other per-test fixture (S543 amendment): content-hash-first identity makes a byte-identical re-stage resolve onto the baseline row, and because that resolve rewrites logical_path but never filename, a prefix-keyed poll can then never find it |
| DR-132 | 2026-08-06 | accepted | Reference items are external references — citable evidence, never authoritative alone. They need no knowledge-admission gate (superseded_by is the whole lifecycle), and they are not a form-matching corpus, which retires id-131 BI-29’s reference_items lane as an unwanted clause |
| DR-131 | 2026-08-06 | accepted | Extends DR-096’s local-stack substrate from the E2E lanes to both integration lanes, and adds a suite-boundary interlock refusing any non-loopback host — after an unattended CI job fired the authoritative knowledge-admission gate against shared staging and left 88 mock pairs in 57% of q_a_pairs; whether the promotion RPC should be scoped is left open |
| DR-130 | 2026-08-05 | accepted | Owner-ratified target shape: nothing is driven by a platform-global subject vocabulary; the 7×34 domains/subtopics retire as a platform-core concept, taxonomy_snapshot.json retires entirely (superseding DR-121’s move), and any future client subject vocabulary returns as an R6 client-overlay CV |
| DR-129 | 2026-08-04 | accepted | Public-facing ast-dataflow documentation is authored fresh in the tool repo from measured shipped behaviour; docs-site ledger artefacts stay private and never migrate as files. Anything crossing the private→public boundary needs a token scrub plus owner PR review. |
| DR-128 | 2026-08-04 | accepted | The tool lives at ai-solution-hub/ast-dataflow (public); canonical installs it as a bun git dependency pinned to a SHA and registers the MCP server in .mcp.json — executing DR-100’s extraction rider. npm publish is deferred, not rejected. Pin 06b8685 brings in the per-surface path policy (MCP allowlist [repoRoot] default; CLI unconfined). |
| DR-127 | 2026-08-04 | accepted | /review becomes a single queue faceted publication | governance | freshness, each owner-kind-polymorphic where its axis is, absorbing /api/governance/review and /promotion-gate; the quality score retires and its level-triggered backstop moves to the freshness axis |
| DR-126 | 2026-08-04 | accepted | Guides are concept-clusters whose skeleton (sections, names, order, nesting, is_required) is human-authored in the Platform DB and whose membership is producer-derived; guides/guide_sections stay DB tables because the bundle is a product of the curation loop and never an input to it |
| DR-125 | 2026-08-04 | accepted | Every promoted q_a_pair must carry a scope_tag, which makes the (primary_domain, primary_subtopic) topic-concept grain a transitional fallback whose requirement expires at first bundle publication — not a permanent part of the concept model |
| DR-124 | 2026-08-03 | accepted | Closes id-364 F1: reference items and source documents are separate first-class entities and the discriminator is lifecycle, not identity — source documents are walked and reference items are not, so a reference item carries no walk cadence and needs no synthetic register row |
| DR-123 | 2026-08-03 | accepted | DR-104 covered code and DR-106 covered stale docs; neither covered task files, which is precisely where the premises under investigation get written down — a task’s goal text, ACs, owner-directives and invariants record that someone decided, not that they re-derived, and this applies to pre-130 and post-130 ids alike |
| DR-122 | 2026-08-03 | accepted | A room keyword that scores on detect_room’s substring pass is a latent orphan-plus-duplicate under DR-113, so keywords are compounded until they score ~0 at P3 while keeping their P0 reach; and the projection that proves it must import the real detect_room rather than re-implement it |
| DR-120 | 2026-08-03 | accepted | The cocoindex nightly becomes the source of truth for the stage → walk → Vitest sequence and the on-prem live-verify.sh operator hook is DELETED, not reconciled — it had been unrunnable for months, so there was no working second copy to extract shared steps into |
| DR-119 | 2026-08-02 | accepted | The cocoindex image moves to a checked-in Dockerfile with a CI-generated linux-x86_64 lock installed —no-deps; the nightly stops building its own image and pulls the published one — retiring a Cloud-Run-era builder for a workload with no Google Cloud |
| DR-118 | 2026-08-02 | accepted | The cross-tree fixture register settles at docs/reference/testing/corpus-manifest.json — DR-117 files fixture TREES by owning domain, but a register spanning every tree has no owning domain, so it files as what it is: a testing standard |
| DR-117 | 2026-08-01 | accepted | The form-extraction templates settle at scripts/cocoindex_pipeline/fixtures/form-templates/, a sibling of platform-corpus/ — fixture trees are filed by the domain that owns them, never by the kind of artefact they are |
| DR-116 | 2026-08-01 | accepted | Room keys must be directory names matched at any depth, never path positions, so a room survives the in-flight domain migration; and a room projection must re-implement detect_room from source rather than model it |
| DR-115 | 2026-08-01 | accepted | The docs-site *.html mine exclusion carves out authored decision boards; rehoming a gitignored working artefact must be followed by a re-mine before its old drawers are pruned |
| DR-114 | 2026-08-01 | accepted | Rooms may be declared priority with path carve-outs; that makes DR-112’s T3 stale-family tier expressible, so DR-113’s withdrawal is amended and Q4’s file move is withdrawn |
| DR-113 | 2026-08-01 | accepted | DR-112’s T3 tier cannot be expressed as path-keyword room routing; the DR-106 stale families are discriminated at recall time from source_file, and a file’s room can only be changed by delete-then-re-mine |
| DR-112 | 2026-07-31 | accepted | Four tiers drive mine/don’t-mine, room routing and cadence; 839 paths are deleted before re-mining; the knowledge-graph verdict is deferred to a post-prune re-census rather than ruled now |
| DR-111 | 2026-07-31 | accepted | Own SessionEnd hook replaces the plugin’s per-turn whole-slug mine; parent transcripts get exchange AND general, subagents exchange only; auto_save off takes the CHECKPOINT diary writes with it |
| DR-110 | 2026-07-31 | accepted | hnsw:sync_threshold is pinned to 1000 (tolerance 2000) in collection_metadata; repair —mode from-sqlite resets it to 2 (tolerance 4) and silently re-arms the vector-search outage |
| DR-109 | 2026-07-31 | accepted | pipeline_runs counter columns are not decided in isolation; the deferred ledger-api spec is revived as v1.1 and settles the rollup shape with the per-stage detail surface |
| DR-108 | 2026-07-31 | accepted | Re-ingest history lives on a separate append-only register-history table, generalising the DR-076 verification_history shape; source_documents.parent_id chaining is not adopted |
| DR-107 | 2026-07-31 | accepted | An unauthenticated endpoint that returns an exception message substitutes the live values of known-sensitive env vars; pattern-matching credential shapes is a backstop, never the control |
| DR-106 | 2026-07-31 | accepted | DR-104 says ratified docs outrank code; this names the doc families that are NOT ratified authority, and the two citation failures that follow from assuming they are |
| DR-105 | 2026-07-30 | accepted | The admin-merge pin is one jsonb marker on entity_mentions, matched on effective entity type, honoured by every walk-side consumer |
| DR-104 | 2026-07-30 | accepted | In rebase-class work, the ratified reference set is the authority; existing code is evidence of what exists, never of what is correct |
| DR-103 | 2026-07-30 | accepted | Any script that deletes or rewrites database rows refuses to run unless its target is positively confirmed against an explicitly-supplied expected identifier; absence of a guard input is a refusal, never a pass, and denylist-only guards (refuse prod) are insufficient on their own |
| DR-102 | 2026-07-29 | accepted | Cross-surface wiring verdicts join through a versioned evidence-sidecar contract (v1) rather than in-process integration, and declared-as-data schema declarations (TableSchema et al.) can only ever be indirect evidence — declared-but-never-written columns verdict undecidable, never wired |
| DR-101 | 2026-07-27 | accepted | ledgers/initiatives/ |
| DR-100 | 2026-07-27 | accepted | ast-dataflow’s warm path is a long-lived MCP server process holding the ts-morph Project; the LMDB facts-cache design is rejected by measurement, and .mcp.json registration waits for the extraction phase |
| DR-099 | 2026-07-27 | accepted | Every processing_queue consumer passes an explicit type scope to claim_next_job (include list for special-purpose workers, exclude list for the general cron consumer); an unscoped global claim is a defect, not a default |
| DR-098 | 2026-07-27 | accepted | MemPalace auto-mine daemon runs supervised (launchd KeepAlive + hooks.daemon:true); the chromadb 1.5.9 corrupt-HNSW-segment risk is accepted as a full-stack reader outage, mitigated by from-sqlite rebuild (archives secondary) |
| DR-096 | 2026-07-26 | accepted | The E2E substrate is the vendor-standard local stack (supabase start + db reset) on the CI runner; hosted branches are preview/staging surfaces, not test substrates |
| DR-095 | 2026-07-26 | accepted | Long-lived Supabase project config is declared in [remotes.<env>] blocks that mirror live values; config push only at refs with a matching block |
| DR-093 | 2026-07-26 | accepted | Pre-launch data posture: remediation ships correct structure and deletes bad rows; it does not backfill |
| DR-091 | 2026-07-26 | accepted | Anon table grants are retracted on public + api, and every SELECT policy must name its roles explicitly — unlike DR-035’s functions, nothing enforces it |
| DR-089 | 2026-07-22 | accepted | Under Intent, the plan/decomposition surface is the workspace spec-note; the {N.4} PLAN.md artefact is retired |
| DR-087 | 2026-07-17 | accepted | The private docs-site IS citable for authorised consumers; provenance is admitted via an additive docs-site anchor scheme (amends DR-086b) |
| DR-086b | 2026-07-18 | accepted | Repo-visibility + citation-base ruling: canonical is PUBLIC and is the citation base; all bundle repos and the docs-site are PRIVATE |
| DR-085 | 2026-07-17 | accepted | Supabase branches never inherit parent API config; every branch-provisioning path mirrors it explicitly |
| DR-082 | 2026-07-17 | accepted | OKF ontology IRI namespace authority is https://w3id.org/canonical/ontology |
| DR-079 | 2026-07-16 | accepted | OKF bundle doctrine: four bundle classes, two production paths, per-class gates |
| DR-078 | 2026-07-16 | accepted | substrate_doc is kept, optional, and must resolve from the docs-site root |
| DR-076 | 2026-07-16 | accepted | q_a_pair verify audit rides a generalised polymorphic verification_history |
| DR-071 | 2026-07-15 | accepted | Memtrace complements the stack; GitNexus remains the impact/rename authority |
| DR-063 | 2026-07-13 | accepted | Extend UI adoption posture: broad component adoption, but our shadcn/lucide primitives stay the app default; ID-147 owns the first registry install |
| DR-062 | 2026-07-12 | accepted | Compose-existing-backend-only is not binding; a Checker must not FAIL a subtask solely for adding backend the behaviour requires |
| DR-061 | 2026-07-12 | accepted | Procurement databases are per-client single-tenant; there is no cross-tenant scope |
| DR-060 | 2026-07-12 | accepted | Producer memo delta-determinism contract (enrich_concept); config re-draft is a manual, logged operator act, not automatic |
| DR-056 | 2026-07-12 | accepted | Procurement form-first reconciles with the id-71 application-umbrella ontology |
| DR-054 | 2026-07-11 | accepted | Client-CV-overlay contract: reserved additive JSON, fail-loud composition |
| DR-052 | 2026-07-10 | accepted | hybrid_search’s positional-param set is capped at the Task-144 shape (12 args) |
| DR-050 | 2026-07-10 | accepted | owner_kind is the grain discriminator; content_type is never overloaded as a grain key |
| DR-047 | 2026-07-10 | accepted | Pipeline memo deserialization failures degrade to re-extraction, never item failure |
| DR-046 | 2026-07-09 | accepted | Pipeline private ingress: Cloudflare Tunnel default; ingress is control-plane only |
| DR-044 | 2026-07-09 | accepted | AI-tooling posture is a per-client choice behind a thin swappable interface |
| DR-043 | 2026-07-09 | accepted | ”Zero-egress” means no client data at rest in shared infra + no non-essential egress |
| DR-041 | 2026-07-09 | accepted | Platform navigation is the three-zone IA: Applications | Knowledge | Governance |
| DR-038 | 2026-07-08 | accepted | Activity-carried ids, not per-app-type workspaces, for application-type build-out |
| DR-036 | 2026-07-05 | accepted | record_embeddings is the single embeddings home; no permanent inline-vector exceptions |
| DR-035 | 2026-07-05 | accepted | Zero-anon-EXECUTE holds for BOTH schemas, enforced by a born-locked ddl_command_end event trigger |
| DR-034 | 2026-07-05 | accepted | The content_items-era coverage feature is RETIRED, not re-pointed |
| DR-032 | 2026-07-04 | accepted | Every api-surface change ships its companion exposure migration in the SAME batch |
| DR-027 | 2026-07-03 | accepted | Ontology CV medium: effective ontology ships in the bundle; base source-of-truth in the platform repo |
| DR-026 | 2026-07-03 | accepted | The promotion boundary replaces the record-curation RETAIN store |
| DR-025 | 2026-07-03 | accepted | The corpus reframe: sources are evidence; authority is earned at promotion |
| DR-023 | 2026-07-03 | accepted | Corpus durable home: the source-binding model |
| DR-019 | 2026-07-02 | accepted | OKF conformance posture: documented deliberate superset of upstream OKF — v0.2 target since the S545 amendment; supersets largely dissolved by the S546 wave |
| DR-018 | 2026-07-02 | accepted | OKF producer trigger: chained off a successful walk, not scheduled, not operator-only |
| DR-016 | 2026-07-02 | accepted | OKF bundle medium: client-owned git repo stands; human edits are producer overrides |
| DR-014 | 2026-07-01 | accepted | Forms are manual-upload; the corpus forms-route is retired (okf-v3 §8.2) |
| DR-010 | 2026-06-30 | accepted | MemPalace is a recall feed, not the decision register |
| DR-009 | 2026-06-30 | accepted | MemPalace is single-writer; recall is read-only |
Superseded and retired (61)
Section titled “Superseded and retired (61)”Kept as files, never deleted: a citation to a closed decision must still resolve to something true, and the file’s existence is what stops the number being re-issued.
| DR | Decided | Status | Decision | Replaced by |
|---|---|---|---|---|
| DR-121 | 2026-08-03 | superseded | taxonomy_snapshot.json moves to scripts/cocoindex_pipeline/data/ before id-416 narrows the build context — a file production reads at import time is not a test fixture, and the Dockerfile move would otherwise ship an image whose pipeline cannot start | DR-130 |
| DR-097 | 2026-07-17 | superseded | Native Supabase branch replay was rejected on evidence; the custom psql replay stands (originally issued as DR-087, whose number was re-used) | DR-096 |
| DR-094 | 2026-07-26 | retired | Retired — Proving a data-shape invariant requires rows written under the new code | — |
| DR-092 | 2026-07-26 | retired | Retired — extracted_from_corpus provenance reads the extraction, not a derived path | — |
| DR-090 | 2026-07-22 | retired | Retired DR-090 — Generic code-review-and-quality and code-simplification skills are retired. | — |
| DR-088 | 2026-07-22 | retired | Retired DR-088 — Test standards live in-repo at docs/reference/testing/ — the sole home. | — |
| DR-086a | 2026-07-18 | retired | The cocoindex qa_sidecar route is fully retired (walk-side AND app-side write half) | — |
| DR-086 | 2026-07-17 | retired | Retired DR-086 — Collision pointer — two decisions shared this number. Resolve to DR-086a or DR-086b. | — |
| DR-084 | 2026-07-17 | retired | Knip baseline file is counts-only; per-raise attribution lives in the raising commit’s message | — |
| DR-083 | 2026-07-17 | retired | Retired DR-083 — DR-040 scope clarification: vanilla-TS MCP apps ratify marked+DOMPurify. | — |
| DR-081b | 2026-07-17 | retired | Retired DR-081b — Migration-stamp discipline on the shared staging DB: allocate against the REMOTE applied set, verify by object existence, non-round stamps. | — |
| DR-081a | 2026-07-17 | retired | Retired — A19 confidence reserved-value policy: producer emits strong|partial only (DR-079 addendum) | — |
| DR-081 | 2026-07-17 | retired | Retired DR-081 — Collision pointer — two decisions shared this number. Resolve to DR-081a or DR-081b. | — |
| DR-080 | 2026-07-16 | retired | Retired DR-080 — Staging gate-runs may deploy from a feature-track ref; never merge a track into staging ahead of main. | — |
| DR-077 | 2026-07-16 | retired | Retired DR-077 — create-initiative is minimal CLI + server, no UI create surface. | — |
| DR-075 | 2026-07-15 | retired | Retired — Procurement procurement/[id]/* re-keys to form-first; templates list/create retire; detail + field CRUD re-path to [id]/fields/* | — |
| DR-074 | 2026-07-15 | retired | Projects are multi-task containers; the 1:1 S472 project→task records collapse | — |
| DR-073 | 2026-07-15 | retired | Retired DR-073 — Initiatives ledger writes are server-side; repurpose the roadmap arm. | — |
| DR-072 | 2026-07-15 | retired | Retired DR-072 — claude-reflect is NOT integrated into the dev-workflow. | — |
| DR-070 | 2026-07-15 | retired | Closed-task guard: every cited id is status-checked; reopens are explicit | — |
| DR-069 | 2026-07-15 | retired | Retired DR-069 — Sandbox friction: durable fixes in settings.json; prompt carryover retired. | — |
| DR-068 | 2026-07-13 | retired | Retired DR-068 — Multi-document Procurement item page: custom domain frame + Extend viewer shells. | — |
| DR-067 | 2026-07-13 | retired | Retired DR-067 — Procurement workflow-state stepper (BI-13) is a custom Warm Meridian component. | — |
| DR-066 | 2026-07-13 | retired | Retired DR-066 — Extend DOCX/Excel Editor + E-Signature are Procurement v1; E-Signature must be forked. | — |
| DR-065 | 2026-07-13 | retired | Retired DR-065 — Extend Schema Builder doesn’t fit the requirement catalogue → custom editor. | — |
| DR-064 | 2026-07-13 | retired | Retired DR-064 — Bounding-box geometry UNBLOCKED: fill-slots persist commonforms coords (v1). | — |
| DR-059 | 2026-07-12 | retired | Legacy .doc/.xls form ingest: convert-on-upload | — |
| DR-058 | 2026-07-12 | retired | OOXML form-field extraction: recover-and-generalise the id-52 deterministic readers; no ML detector | — |
| DR-057 | 2026-07-12 | retired | PDF form-field detection adopts commonforms directly (licence ratified Apache-2.0) | — |
| DR-055 | 2026-07-12 | retired | Retired — Deployed-producer bundle hosting: persistent-volume clone + repo-scoped deploy key, push as a separate lane | — |
| DR-053 | 2026-07-11 | retired | Retired DR-053 — pyright stays a manual, local-only diagnostic for the Python pipeline. | — |
| DR-051 | 2026-07-10 | retired | Retired — Per-grain “content date” anchors for corpus search date filtering | — |
| DR-049 | 2026-07-10 | retired | Every staging DB refresh / branch-recreate re-runs the DR-035 ACL sweep as a mandatory step | — |
| DR-048 | 2026-07-10 | superseded | Retired DR-048 — MemPalace auto-mine daemon stays disabled until the chromadb HNSW segfault is fixed. | DR-098 |
| DR-045 | 2026-07-09 | superseded | Agent topology: data-plane per-client, control-plane central telemetry-only | DR-043 |
| DR-042 | 2026-07-09 | superseded | Compute posture: pipeline on-prem, app on Vercel; on-prem = residence + processing | DR-043 |
| DR-040 | 2026-07-08 | retired | Retired — Markdown rendering pivots to Streamdown; new surfaces first | — |
| DR-039 | 2026-07-08 | retired | Retired DR-039 — No git stash inside the shared multi-worktree dispatch topology. | — |
| DR-037 | 2026-07-07 | retired | Retired DR-037 — okf-record-model-v3.md citations are pre-ratification provenance pointers, not recoverable artefacts. | — |
| DR-033 | 2026-07-04 | retired | Retired DR-033 — Non-dry-run gitnexus mutations are banned from agent worktrees. | — |
| DR-031 | 2026-07-04 | retired | Retired DR-031 — Parallel worktree isolation needs a TOP-LEVEL sibling worktree, not a nested one. | — |
| DR-030 | 2026-07-04 | superseded | api.* views MUST be regenerated on any base-column rename | DR-032 |
| DR-029 | 2026-07-04 | retired | Retired DR-029 — Won-bid KB integration: HYBRID RETIRE; re-entry is concept-shaped. | — |
| DR-028 | 2026-07-03 | retired | Retired DR-028 — Doc-sync cadence runs on GLM-5.2 via OpenRouter. | — |
| DR-024 | 2026-07-03 | superseded | Retired DR-024 — Record identity + curation durability gate first bundle publication. | DR-026 |
| DR-022 | 2026-07-02 | retired | Retired — Generated-file guard is two-sided: Read-tool deny + sandbox allowRead | — |
| DR-021 | 2026-07-02 | retired | Retired — Finding disposition: an active ID-N owns its in-scope findings | — |
| DR-020 | 2026-07-02 | retired | Retired DR-020 — Corpus admission: privileged upload through a two-tier gate (Option 2). | — |
| DR-017 | 2026-07-02 | retired | goose client topology: per-client container on the client’s own VPS at rollout | — |
| DR-015 | 2026-07-02 | retired | Retired DR-015 — Pipeline ingress: public + bearer is interim; private ingress gates multi-client GA. | — |
| DR-013 | 2026-07-01 | retired | Retired DR-013 — id-135 surfaces are net-new-by-design, not id-111/id-117 component reuse (closes DR-004). | — |
| DR-012 | 2026-07-01 | retired | Retired DR-012 — id-135’s source-document route re-point belongs to id-131 (BND-1 Path β). | — |
| DR-011 | 2026-07-01 | retired | Retired DR-011 — MemPalace lock-free reads use mode=ro&immutable=1, not plain mode=ro. | — |
| DR-008 | 2026-06-30 | retired | Retired DR-008 — Skills triage from the Pocock backport. | — |
| DR-007 | 2026-06-30 | retired | Retired DR-007 — Retire the static gitnexus wiki gist; the cocoindex wiki is an optional aid only. | — |
| DR-006 | 2026-06-30 | retired | Retired DR-006 — state-of-the-product.md is not wired load-side. | — |
| DR-005 | 2026-06-30 | retired | Retired DR-005 — The friction-register does not duplicate the retro read-back. | — |
| DR-004 | 2026-06-30 | retired | Retired DR-004 — Reuse-framing (Area F): no skill or agent edits. | — |
| DR-003 | 2026-06-30 | superseded | Retired DR-003 — MemPalace recall uses lock-free read-only WAL sqlite, not a live MCP query. | DR-009 |
| DR-002 | 2026-06-30 | retired | Reconciliation treats done-status as a don’t-re-flag signal only | — |
| DR-001 | 2026-06-30 | retired | Retired DR-001 — Adopt a decision register. | — |