78 rows — one falsifiable failure mode per row. The row-level truth behind every tag in the explorer.
source: 2026-07-16c-joint-findings-register.md
Date: 2026-07-16 Authors: Claude and Codex working record; this Round-3 draft is Codex-authored for Claude's attack in Round 4 Scope: union of tmp/codex-notes/2026-07-16d-codex-adversarial-review.md and tmp/review/2026-07-16c-adversarial-architecture-review.md, as resolved or held in rounds 0–2 Review mode: documentation only; no source changes, generation, render, editorial, eval, acceptance, migration, or live-source runs were performed in this session
This is a register of failure modes, not reviewer votes. One row is one falsifiable invariant even where many code sites participate. Test findings map to the invariant they fail to enforce unless the test mechanism is itself the independent failure. Parent objectives do not inflate severity by counting their children.
Severity and releaseability are separate. The charter contains the controlling rule. This draft contains no P0 finding. That does not make the repository releasable: a high-confidence P1 can block a capability or release.
Abbreviations:
X-P1-01 means Codex review finding P1-01. CA–CG mean Claude appendices A–G.H/M are high/medium evidence confidence. Current-practice includes recorded operating practice in STATE.md and acceptance records, not merely an automated CLI.RB is the separate release-blocker field: Y, N, or a named capability.A = agreed or unchallenged; CH = held severity/calibration (the row or §7 names the holder); EA = escalate to Adam. A CH row still records agreement that the failure exists.EP-WP = engineering protocol lines 7–15; EP-CS = lines 17–25; EP-TEST = 49–70; EP-OPS = 81–95; EP-DG = 98–105; EP-AUTH = 107–112; EP-LLM = 114–121; EP-SF = 132–150; EP-SUP = 28–47.Claude's reachability amendment is ACCEPTED. Recorded operating practice evidenced by living docs and acceptance records is a current reachability path. STATE.md:71-85 calls 16a accepted and records gate/eval claims; the lane-B record identifies the exact delivered JSON, view and HTML hashes and regenerates the system snapshot from that JSON (tmp/codex-notes/2026-07-16a-laneB-dual-gate-16a.md:9-25,198-220).
The amendment does not mechanically produce P0. For 16a, the manual precision review, delivered-artifact gate and SHA chain are effective artifact-specific containment. They do not repair the systemic command path or the reader-view projection gap. The register therefore splits them:
Claude explicitly allowed the outcome “P1 + release-blocking with the recorded-practice fact”; no Adam escalation is needed on those two rows unless Round 4 rejects the split.
| ID / slug | Falsifiable failure and supported-path scenario | Primary code evidence; source reviews; control | Impact | Conf. | Reachability | Effective containment now | Sev. | RB | Change condition | Phase | Resolution |
|---|---|---|---|---|---|---|---|---|---|---|---|
F-001 eval-projection | Hard eval scores lineSummary, not the final reader projection. A required term can exist in receipts/internal fields, pass green, and be absent from delivered HTML. | src/backtest/weekly-harness.ts:237-292; src/report/weekly-html-view.ts:455-474; CE-P0-2, CG-3.2; EP-TEST/EP-ME | False external acceptance | H | Current-practice | 16a manual precision read only; no repeatable control | P1 | Y | Promote only if an accepted delivered artifact is proven materially wrong because of this gap and no human gate caught it; demote after final-view equality is hard-gated. | 0 | A(R2) |
F-002 eval-lineage, gate-pre-editorial, artifact-lineage | Week-keyed snapshot and accept-command fresh render are not content-bound to the post-editorial artifact. A green command can certify a sibling revision or predecessor. | scripts/accept-weekly-report.ts:174-267; scripts/weekly-report.ts:327-332; src/backtest/weekly-harness.ts:659-671; CA-P0-1, CE-P0-2, CG-1.8/3.2; EP-OPS/EP-ME | False external acceptance and wrong metric receipt | H | Current-practice | 16a manually SHA-chained from delivered JSON; accept-command siblings remain | P1 | Y | Promote if a released artifact is shown gated/evaluated against different bytes without manual containment; demote when manifest chain is mandatory. | 0 | A(R2) |
F-003 render-fork | Fresh, offline, editorial and accept paths assemble different documents; offline omits seven enrichments and uniquely adds james_mentions. Iteration can bless a hollow or behaviorally different preview. | scripts/weekly-report.ts:187-332; scripts/rebuild-weekly-from-cache.ts:77-105; src/report/weekly-report.ts:3124-3135; CA-P0-1/P1-9, CE-P0-1, CG-3.1; EP-CS/EP-ME | Wrong report reaches review or delivery | H | Current | Human knowledge that offline is non-authoritative | P1 | Y | Demote after all callers use one assemble/enrich core and unavailable sections are explicit; promote on proven delivery from the hollow path. | 3 | A(R4) |
F-004 weekly-schema-boundary | Weekly JSON crosses disk/process boundaries through JSON.parse(...) as ...; truncated, stale, or wrong-revision JSON can enter editorial or acceptance as valid state. | scripts/weekly-editorial.ts:78-80; scripts/accept-weekly-report.ts:179; scripts/rebuild-weekly-from-cache.ts:69; X-P1-12, CA-P1-4, CE-P2-17; EP-CS:24-25 | Structurally incomplete accepted output | H | Current | Manual file selection and downstream incidental failures | P1 | Y | Demote after versioned schema parse at every boundary plus negative fixtures. | 0 | A |
F-005 editorial-silent-delete, allowlist-from-untrusted | Editorial validation builds grounding authority partly from untrusted prose and filters rejected items through catch-all handling. A validator defect or hostile token can silently remove or admit executive content. | src/report/weekly-editorial.ts:301-319,686-716,809-843; scripts/weekly-editorial.ts:39-75; CA-P0-2/P1-6, CC-P1-2/P1-6; EP-LLM:116-120 | Silent delivered-content loss or unsupported prose | H | Current-practice | Manual editorial/read-through; error sidecar covers call failure, not item deletion | P1 | Y | Promote on accepted material deletion/admission with no human detection; demote after typed authority + quarantine + gate counts. | 4 | A(R4) |
F-006 fail-open-exit | Editorial failure and non-strict audits can emit degraded artifacts and exit 0. Automation can treat an explicitly degraded terminal product as success. | scripts/weekly-editorial.ts:67-75,167; scripts/source-availability-audit.ts:1082-1083; CE-P1-12; EP-SF:140 | Green automation over degraded output | H | Current | Human notices stderr/sidecar | P1 | Y | Demote when degraded modes have typed status, nonzero exit, and cannot be accepted. | 0/4 | A |
F-010 gate-expectations | Acceptance expectations are ephemeral, hand-typed flags with parser drift. Omitting a required buyer weakens the gate without appearing in the eval receipt. | scripts/accept-weekly-report.ts:50-140; scripts/report-readiness.ts:27-121; CE-P1-4; EP-ME | Gate silently enforces a different contract | H | Current-practice | Operator templates and review notes | P1 | Y | Demote when a versioned expectation set is hashed into the release manifest and receipt. | 0 | A |
F-011 allow-drift-splice | --allow-drift keeps old buyer checkpoints that carry no code/config signature, then combines them with current-code selection and narration. | scripts/weekly-resume.ts:35-61; scripts/report.ts:249-315; src/runtime/weekly-buyer-checkpoints.ts:7-16,79-86; CE-P0-3, CF-P1-5; EP-SF/EP-ME | Unmarked mixed-engine report | H | Explicit supported flag | Warning text; human must understand contradiction | P1 | Y | Promote on a released mixed-version artifact with material divergence; demote after checkpoint lineage or flag removal. | 0 | A(R4) |
F-012 cross-tenant-env-default | Weekly renderer defaults to .env instead of the selected project's configured env. Enabling another project can read Pitau credentials/data into the wrong report. | scripts/weekly-report.ts:151; src/runtime/report-cli.ts:152-153; src/config/projects.ts:37,68,94; CE-P1-9; EP-AUTH:109-112 | Cross-tenant confidentiality/integrity breach | H | Conditional: multi-project renderer | Other projects currently deferred; explicit env can contain | P1 | Multi-project | Promote to P0 when another tenant is enabled on this path without a guard; demote after typed project/env binding and cross-tenant negative test. | 0/2 | A |
F-017 tombstones-dropped | Graph @removed is counted then discarded while the cursor advances; stale deleted/moved-out evidence remains readable and the authoritative removal signal is consumed. | src/ingest/graph-delta-sync.ts:124-130,196-215; src/db/graph-source-repository.ts:157-215; X-P1-01, CD-P1-3, CF-P0-3; EP-DG/EP-SF:138 | Stale personal evidence and unfulfillable suppression | H | Current enrolled sync | None in code; no tombstone fixture | P1 | Ingest/accept | Promote on a consumed live tombstone that remains in an accepted dossier or deletion request; demote after census + suppression/reevaluation path. | 1 | A(R2) |
F-018 no-410-recovery | Expired Graph delta token has a classifier but no checkpointed date-bounded resync; a folder wedges indefinitely. | src/clients/graph.ts:378-380; src/ingest/graph-delta-sync.ts:119-120; X-P1-02, CD-P1-2, CF-P0-3; EP-TEST:57/EP-SF:137 | Permanently stale source scope | H | Current if token expires | Coverage gate may block final report, but recovery is manual | P1 | Ingest/accept | Promote if a stale folder is hidden green or manually bypassed; demote after explicit recovery fixture and status receipt. | 1 | A(R2) |
F-019 data-lifecycle | Raw bodies, dossiers, caches, reports and logs lack one correction/deletion/retention path; future fixes cannot reliably remove existing sensitive derived state. | src/storage/source-objects.ts:15-82; src/db/schema.ts:626-693; X-P1-14, CD-P2-7; EP-DG:98-105 | Governance breach across durable corpus | H | Current stored data | Offline/local access and manual deletion only | P1 | Hosted exposure | Promote for hosted exposure or failed subject deletion; demote only after end-to-end deletion receipts and retention enforcement. | 1 | A |
F-020 external-payload-schema | Graph/OnePage status-200 payloads are generic casts; OnePage malformed wrappers become {}/[]. An API shape change can become an apparently empty book and a valid-looking report. | src/utils/fetch.ts:3-6; src/clients/graph.ts:364-374; src/clients/onepage.ts:187-199,260-262; X-P1-05, CE-P2-16; EP-CS:24-25 | Catastrophically incomplete green report | H | Current | Coverage/count checks catch some, not per-shape corruption | P1 | Y | Promote on actual malformed-success release; demote after schemas, fixtures and visible failure status. | 1 | A (Codex underweighted item) |
F-021 partial-source-green | Optional OnePage/activity/relationship/store failures become empty data, demote buyers, or omit losses without entering the selection audit; report can stay green but partial. | src/pipeline/activity-signal.ts:276-304,381-383; src/pipeline/live.ts:438-463; src/pipeline/living-relationship-graph.ts:129-143; X-P1-13, CB-P1-1/P1-2; EP-SF:140 | Wrong selection and missing losses | H | Current transient-failure path | Some coverage fields exist but are not release-authoritative | P1 | Y | Promote on released partial run; demote after typed coverage is required at rank, report and manifest gates. | 1 | A |
F-022 d1-interactive-transactions | Core repositories rely on interactive transactions the declared D1 target lacks. The local correctness model cannot be deployed as designed. | src/db/dossier-record-repository.ts:207,339,539; src/db/person-node-repository.ts:512,705; src/db/graph-source-repository.ts:223-227; X-P1-03, CD-P1-1; EP-CS:23 | Hosted runtime failure or lost atomicity | H | Conditional: D1 deployment | Local libSQL works | P1 | D1 deploy | Promote if deployed/fallback loses atomicity; demote after D1-compatible batch/CAS integration tests. | 1 | A |
F-023 d1-parameter-guard | The 100-parameter guard is tested only on synthetic shapes and has no production callers; repository IN queries are unbounded. | src/db/d1-guards.ts:1-35; src/db/dossier-record-repository.ts:782-820; src/db/person-node-repository.ts:1004,1068; X-P1-04/P2-06; EP-ME | Data-size-dependent runtime failure | H | Current growth path / D1 | Small current sets | P1 | D1 deploy | Demote after query construction is chunked and production repository tests assert statement bounds. | 1 | A (Codex underweighted item) |
F-024 ledger-nonatomic | Fact supersession is read/update/insert without a DB current-row invariant. Crash can leave no successor; concurrency can leave two current facts. | src/engine/dossier.ts:119-150; src/db/fact-ledger-repository.ts:26-65; src/db/schema.ts:626-656; X-P1-10, CD-P0-1, CF-P1-6; EP-DG:101/EP-CS:23 | Durable dossier corruption | H | Current; concurrency partly constrained | File-backed report writers usually serialized; crash window remains | P1 | Durable writes | Promote if supported concurrent writers, destructive loss, or green acceptance after failure is proven; demote after DB invariant + atomic batch + repair audit. | 1 | A(R2) |
F-025 person-claim-nonatomic | Person-claim supersession repeats autocommit update-then-insert; a crash can retire the only current claim. | src/db/person-node-repository.ts:781-854,921-986; CD-P1-8; EP-DG/EP-CS:23 | Identity history/current-state corruption | H | Current writes | Writer lease narrows concurrency, not crash window | P1 | Person-node P6 | Demote after atomic lifecycle invariant and protected-copy reconciliation. | 1/P6 | A |
F-027 metric-import-partial | Multi-week workbook import finalizes weeks sequentially; later failure leaves earlier authoritative weeks replaced. | src/metrics/pitau-workbook-importer.ts:301-353; src/db/weekly-metric-repository.ts:181-284; X-P1-18; EP-CS:23/EP-ME | Partially replaced authoritative history | H | Current import path | Operator can restore manually if noticed | P1 | Metric import | Promote on unrecoverable published history; demote after generation-level transaction/staging + receipt. | 1 | A (Codex underweighted item) |
F-028 metric-finalize-empty | Finalize can supersede the current metric snapshot while accepting no replacement, silently leaving the week without current authority. | src/db/weekly-metric-repository.ts:181-238,259; CD-P1-6; EP-CS:23 | Missing authoritative metrics after “success” | H | Current malformed/empty candidate path | Caller assumptions | P1 | Metric acceptance | Demote after non-empty invariant and rollback test. | 1 | A |
F-029 writer-lock-opt-in | Safety depends on each script importing a wrapper; destructive ledger cleanup bypasses lock/snapshot, and acceptance writes metrics after lease release. | scripts/cleanup-legacy-ledger.ts:1-12; scripts/accept-weekly-report.ts:273-304; scripts/script-database.ts:22-34; CD-P1-4, CE-P1-5/P1-6; EP-ME | Recurrence of concurrent-write corruption | H | Current script paths | Human sequencing; local lease on some roots | P1 | Durable writes | Promote on another corruption incident; demote when the DB adapter makes write safety unavoidable. | 1 | A |
F-032 migration-drift | pnpm check omits schema/migration drift despite live drift evidence and a mandatory protocol gate. Code can pass while deploy schema cannot be reproduced. | package.json:10-18; migration metadata; X-P2-07 (durable half), CD-P1-5, CF-P0-4; EP-OPS:83-88/EP-ME:148 | Deployment/data integrity failure | H | Current development | Manual migration awareness | P1 | Y | Demote after deterministic drift check is in pnpm check and current drift is reconciled. | 0/1 | A |
F-034 nextlink-host-pinning | Persisted/fetched nextLink or cursor URL is followed with bearer credentials without Graph host pinning; corrupted state or response can redirect the token. | src/ingest/graph-source-units.ts:51-64; src/clients/graph.ts:311-317,364-374; src/ingest/graph-delta-sync.ts:105-120; CD-P2-2; EP-AUTH/EP-CS:14 | Credential disclosure and mailbox access | H | Conditional malformed server/state | Microsoft response trust; local DB access controls | P1 | Graph sync | Promote on attacker-reachable cursor mutation; demote after scheme/host/tenant validation fixtures. | 1 | A |
F-041 agentic-evidence-pii | Agentic evidence logs persist raw source text/PII via an unchecked cast, without an allowed redaction/lifecycle policy. | src/agentic/claude-narrative.ts:226-254; src/agentic/evidence-log.ts:1-67; X-P1-15, CC-P1-8; EP-DG/EP-OPS:92 | Uncontrolled sensitive duplication | H | Agentic path | Local filesystem scope only | P1 | Agentic enablement | Promote for shared/hosted logs or breach; demote after schema, minimum evidence receipts, redaction and lifecycle. | 1/4 | A (Codex underweighted item) |
F-047 crm-status-authority | Status vocabulary is centralized but callers use substring, exact-after-different-normalization, and prose/stage-number matching. One label change can route the same buyer differently across selection and commercial state. | src/pipeline/buyer-selection.ts:276-293,527-537; src/pipeline/commercial-routing.ts:101-113; src/pipeline/valence.ts:52-74; CB-P1-6, CG-1.3; EP-CS:10-11,25 | Losses/buyers silently vanish or reclassify | H | Current | Accepted-week manual buyer checks | P1 | Y | Promote on a released misclassification with no human containment; demote after one typed parser/membership authority and real-shape fixture matrix. | 2 | CH (Claude P0) |
F-048 prose-protocol | Loss/movement semantics are serialized to prose and re-parsed by multiple regex consumers; words such as “call”, “note”, or “lost” can change lanes, and duplicated patterns drift. | src/pipeline/crm-semantic-signals.ts:81-119; src/pipeline/buyer-selection.ts:539-574,744-843; src/pipeline/live.ts:1902-1911; CB-P0-2/P0-3; EP-CS:10-25 | Wrong selection/loss routing | H | Current | Real-week human review | P1 | Y | Promote on accepted material reroute; demote after discriminated signal transport and deletion of prose parsers. | 2 | A |
F-057 source-id-authority | Source IDs use incompatible prefix grammars; prompt-local graph-NNN is remapped before fact-ledger writes on the normal path, but positional IDs remain in stable-dossier cache payloads and a fallback can persist an extraction ID whose referent changes with corpus order. | src/pipeline/report-data.ts:91-147; src/pipeline/dossier-facts.ts:34-103,136-145,180-191; src/pipeline/live.ts:2243-2270,2309-2334; tests/dossier-facts.test.ts:112-182; Codex opinion §1.6, CG-1.2; EP-LLM:119/EP-DG:101 | Durable citation fallback can point at wrong evidence; cache identity/replay is position-sensitive | M/H split | Conditional ledger fallback; cache payload current | Normal ledger path remaps to immutable message ref; quote text is stored | P2 | Durable fallback/cache replay | Promote to P1 when fallback persistence is observed/reachable from supported input, or cache-payload positional IDs are shown to cause a stale-hit/replay divergence; demote after immutable EvidenceReceipt rejects positional IDs from both ledger and cache contracts. | 2 | A(R4) |
F-058 gate-name-matching | Readiness/eval identify buyers through normalized display names while stable IDs are available. A rename/collision can make a required/forbidden assertion bind the wrong card or none. | src/backtest/report-readiness-gate.ts:128-163,449-489; name-match helpers/tests; CG-1.1, CF-P1-1; EP-TEST:65 | Enforcement silently checks wrong person | H | Current-practice | Manual precision audit and curated unique names | P1 | Y | Promote on a green wrong-person accepted gate; demote after typed party IDs in expectations, view and receipt. | 2/P6 | A(R4) |
F-059 email-collision-split | New person is created before email bind; same-project conflict is ignored by cross-project-only candidate query, leaving duplicate contacts split without a visible collision decision. | src/db/buyer-identity-repository.ts:77-128,191-205; src/db/schema.ts:31-55; X-P1-11; EP-TEST:65/EP-DG:102 | Persistent identity fragmentation or wrong auto-merge pressure | H | Current duplicate CRM shape | P6 migration has review queues; no current same-project gate | P1 | Person-node P6 | Demote after collision fixtures, visible decision state, and existing-data audit. | 2/P6 | A(R0/R2; Codex underweighted item) |
F-066 llm-message-call-unverified | Message/call atoms bypass source existence, direction, automation, ownership and semantic verification, yet directly affect engagement scoring. | src/engine/extract.ts:185-193,316-359; src/engine/score.ts:69-81,256-270; X-P1-06; EP-LLM:119 | Fabricated engagement state | H | Current extraction | Majority vote and timestamp lookup only | P1 | LLM scoring | Demote after every atom resolves immutable source and typed semantics before scoring. | 4/P6 | A(R0; Codex underweighted item) |
F-067 subject-unbound | Narrative schema accepts arbitrary project/subject/profile-unit and validation does not compare them with the request; a stale cross-request response can attach to the current buyer. | src/engine/narrative.ts:95-100,409-475; src/pipeline/live.ts:1139-1142; X-P1-07; EP-LLM:117-119 | Wrong-person durable narrative | H | Current | Evidence-scope checks and human review | P1 | Narration/P6 | Promote on accepted cross-subject output; demote after exact typed envelope equality and negative fixtures. | 4/P6 | A(R0; Codex underweighted item) |
F-068 quote-semantics | Normalized verification permits min-length-one substring matches, meaning inversion and attribution from quoted reply text; tests explicitly bless “ready” inside “not ready”. | src/utils/quote-verification.ts:14-81; tests/quote-verification.test.ts:115-120; X-P1-08, CC-P1-5, CD-P2-8, CF-P0-1; EP-TEST:53-54/EP-LLM:119 | False cited fact with opposite meaning/author | H | Current | Downstream/manual plausibility review | P1 | LLM/durable facts | Promote on material accepted inversion; demote after clause/negation/author policy and adversarial fixtures. | 4 | A |
F-069 delimiter-injectable, injection-tests-tautological | Raw hostile evidence can spoof prompt delimiters; backend hardening differs; existing tests assert warning strings rather than making a fake model obey injection and proving validators reject it. | src/engine/extract.ts:236-249; src/engine/narrative.ts:477-519; src/llm/claude-cli-client.ts:117; CF-P0-2, CC-P1-1/P2-2/P2-5, X-P1-09; EP-TEST:63-64/EP-LLM | Evidence steers scope/policy | H | Current prompt path | Prompt prose and post-validation, itself incomplete | P1 | LLM paths | Promote on demonstrated validator escape reaching durable output; demote after one framing contract and behavioral injection suite. | 4 | A |
F-070 llm-silent-disappearance | Malformed/unverifiable outputs are silently filtered, defaulted or discarded at multiple layers, including V1→V2 cited facts; green output hides missing model content. | src/engine/narrative.ts:443-475; src/engine/disposition.ts fallback sites; schema preprocess; CC-P1-6/P1-9, CA-P0-2; EP-LLM:120/EP-SF:140 | Missing facts and false completeness | H | Current | Some buyer quarantine paths; not comprehensive | P1 | Y | Promote on accepted material omission; demote when all rejection paths emit bounded retry/quarantine receipts required by gate. | 4 | A |
F-072 no-cost-ceiling | Full-corpus LLM work has call-level limits but no per-run token/cost ceiling; EXTRACTION_RUNS is unvalidated and selection limits can be advisory. | src/engine/extract.ts:20,146-165; src/engine/narrative.ts:282-339; src/pipeline/live.ts:1415-1423; src/runtime/report-cli.ts:103-125; X-P1-16, CC-P1-7/P2-3; EP-LLM:121 | Runaway spend and unbounded overnight work | H | Current full-corpus run | Human launch discipline and concurrency caps | P1 | Full-corpus LLM | Demote after mandatory run budget, reservation/accounting, terminal budget status and tests. | 4 | A |
F-073 agentic-scope | Agentic Graph search accepts an arbitrary address across all Pitau mailboxes; hostile evidence can expand the evidence set and route third-party correspondence into another buyer dossier. | src/agentic/tools.ts:221-265; src/agentic/claude-narrative.ts:60-89,139-150; src/pipeline/live.ts:960-980; CC-P0-1, CG-3.3; EP-LLM:117-119/EP-DG:102 | Cross-person confidentiality and dossier contamination | H | Agentic path | Operator/agent prompt; path not canonical weekly vertical | P1 | Agentic enablement | Promote to P0 if enabled for unattended durable production writes; demote after subject-scoped receipt capability and denial fixtures. | 4 | CH (Claude P0) |
| ID / slug | Falsifiable failure and scenario | Primary evidence; source reviews; control | Impact | Conf. | Reachability / containment | Sev. | RB | Change condition | Phase | Resolution |
|---|---|---|---|---|---|---|---|---|---|---|
F-007 artifact-naming | Four naming/revision/archive schemes rely on manual allocation and can overwrite or mis-associate sidecars. | scripts/weekly-report.ts:122; scripts/accept-weekly-report.ts:111; scripts/rebuild-weekly-from-cache.ts:85-88,421-434; CE-P1-11, CG-1.8; EP-ME/EP-SUP | Wrong revision called current | H | Current; human file trail contains | P1 | Y via F-002 | Demote after manifest identity makes filenames non-authoritative and writers refuse collisions. | 0 | A |
F-008 telemetry-slot | Every run rewrites latest.json; renderer links telemetry only if latest happens to match, otherwise silently omits run audit. Concurrent runs clobber identity. | src/runtime/weekly-run-telemetry.ts:208,263; scripts/weekly-report.ts:206-212,344-361; CE-P1-7, CG-1.9; EP-OPS:92/EP-SF | False/incomplete run history | H | Current; operator notes partly contain | P1 | N | Demote after run-ID-addressed immutable records and required artifact link. | 0 | A |
F-009 render-mutates-input | Renderer rewrites source profile JSON to inject run audit and multi-file “atomic” writer renames files sequentially; rerender can mutate historical input or leave mixed-generation pairs. | scripts/weekly-report.ts:356-361; src/runtime/atomic-write.ts:23-25; CE-P1-10/P2-14; EP-CS:23/EP-OPS | Historical evidence changes or artifact set tears | H | Current; git/hash diffs sometimes expose | P1 | Y via F-002 | Demote after immutable inputs and manifest commit protocol. | 0/3 | A |
F-013 cli-drift | 21 hand-written parsers disagree on --, positionals, numeric clamping and defaults; operator intent can be silently changed. | parser sites summarized at CE-P1-13; src/runtime/report-cli.ts:65-196; EP-CS/EP-ME | Wrong run configuration | H | Current; recorded commands partly contain | P1 | Capability-specific | Demote after one typed CLI/config schema and parser conformance tests. | 0/2 | A |
F-014 acceptance-write-outside-lock | Acceptance persists authoritative metrics after its migration wrapper has released the lease; a concurrent weekly run can write the same DB. | scripts/accept-weekly-report.ts:273-304; scripts/script-database.ts:22-34; CE-P1-6; EP-CS:23/EP-ME | Metric/state race | H | Current; human sequencing | P1 | Metric acceptance | Demote when all writes acquire adapter-level fenced lease through final commit. | 1 | A |
F-015 run-failure-observability | Pre-telemetry failures leave no durable trace, killed runs remain running, identical heartbeats have no stall watchdog, and failure telemetry can mask original errors. | scripts/report.ts:63-116,399-401; src/runtime/weekly-run-telemetry.ts:585-602; CE-P1-8; EP-SF:140 | Hung/traceless operations | H | Current; human status checks | P1 | N | Demote after terminal signal handling, phase deadlines and append-only failure receipt. | 1 | A |
F-026 identity-create-nonatomic | New person and bindings are multiple writes; failure can leave orphan person/engagement rows. | src/db/buyer-identity-repository.ts:77-128; X-P2-01; EP-CS:23/EP-DG | Orphan identity state | H | Current; retry may reuse some state | P1 | Person-node P6 | Demote after atomic idempotent creation and orphan census/repair. | 1/P6 | A |
F-030 sqlite-pragmas-swallowed | WAL/busy-timeout initialization failures are caught and ignored, so the concurrency safety mode can silently be absent. | src/db/client.ts pragma initialization; X-P2-05, CD direct answer 9; EP-SF/EP-ME | Local corruption risk | H | Current local; snapshots/lease contain | P1 | Local writes | Promote on recurrence linked to missing pragma; demote after fail-closed verification. | 1 | A |
F-031 mutable-source-evidence | Cited source_evidence is updated in place while durable facts point to it; citation meaning can drift after acceptance. | src/db/source-evidence-repository.ts:24-58; src/db/schema.ts:641-644; CD-P1-7; EP-DG:101 | Historical citations cease to be reproducible | H | Current writes; quote copies partly contain | P1 | Durable dossier | Demote after content-hash versions and drift audit/backfill. | 1/2 | A |
F-033 sync-unit-contract | Sync units omit mandatory run ID/idempotency/retry/checkpoint fields in parts of ingestion, so retries/status cannot prove completeness. | src/ingest/graph-delta-sync.ts:39-62; src/ingest/graph-source-fetcher.ts:266-298; src/db/graph-source-repository.ts:148-155,402-411; X-P1-17, CD-P2-5; EP-SF:136 | Duplicate or invisible partial sync | H | Current; Graph lease/cursor supplies partial structure | P1 | Ingest | Demote after one typed unit receipt and restart/idempotency tests. | 1 | A |
F-036 retry-drift | OnePage read paths use conflicting retry policies; one retries auth failures eight times and ignores Retry-After, while Graph honors Retry-After without a cap. | src/pipeline/activity-signal.ts:61-72; src/pipeline/live.ts:1425-1476; Graph retry path; CB-P1-5, CD-P2-6; EP-TEST:61/EP-SF:139 | Rate-limit amplification and long false-empty runs | H | Current; limited concurrency elsewhere | P1 | N | Demote after one bounded typed retry policy and deterministic clock tests. | 1/2 | A |
F-039 operator-pii-output | Coverage/diagnostic output can print mailbox addresses, buyer-named folders, names or raw source content; redaction is caller-dependent and key-name-blocklist based. | src/ingest/coverage.ts:88; scripts/ingest.ts:227; src/utils/redact.ts:36,79-85; X-P2-09, CD-P2-9, CF-P1-3; EP-OPS:92/EP-ME:149 | PII in logs/terminals | H | Current diagnostics; local/operator scope | P1 | Shared logs | Promote for shared/CI output; demote after value/policy-based formatter gate over actual scripts. | 1 | A |
F-042 agentic-stream-integrity | Agentic stream is unbounded and concurrent request handling can interleave/corrupt its audit evidence stream. | agentic MCP request/stream implementation; X-P2-04, CC-P1-8; EP-SF/EP-DG | Unreliable audit/provenance | H | Agentic path; operator scope | P1 | Agentic enablement | Demote after bounded per-session stream, isolated writer and concurrency tests. | 1/4 | A |
F-044 stable-cache-identity | Stable-dossier fingerprint omits prompt text/config fields and relies on manually bumped versions; hidden MIN_EVIDENCE_CHARS can change semantics while cache remains “same”. Tests mutate only a small subset. | src/pipeline/dossier-cache.ts:31-93; src/pipeline/report-data.ts:249; CB-P1-12, CD-P2-3, CF-P1-4; EP-CS/EP-TEST | Stale narration/scoring reused as current | H | Current cache path; manual version discipline | P1 | Cache-backed report | Promote on accepted stale replay; demote after exhaustive typed material-input contract and mutation table. | 2 | A |
F-049 raw-record-regex-classifier | Whole activity records, subjects, names and source prefixes are flattened/regexed to infer warmth, evidence kind, identity and exclusions. Innocent words or renamed fields silently change semantics. | src/pipeline/activity-signal.ts:122-164; src/pipeline/store-corpus.ts:79-82; src/pipeline/dossier-facts.ts:148-168; CB-P1-2/P1-11/P1-14/P2-9-11; EP-CS:24-25 | Evidence/buyer silently omitted or misclassified | H | Current; manual buyer review | P1 | Capability-specific | Demote after typed source adapters and explicit predicates with real-shape counterexamples. | 2 | A |
F-050 error-string-control | Error message regex/equality decides retry, quarantine or whole-run stop. Rewording an error changes product control flow. | src/pipeline/live.ts:1448-1450,2177-2205; CB-P1-8; EP-CS:10-25 | Wrong stop/quarantine behavior | H | Current failures; tests may cover phrases only | P1 | N | Demote after typed error taxonomy crossing module boundaries. | 2 | A |
F-051 regex-minted-facts | Optional anchor groups and broad health/plan regexes mint must_report facts; validator reuses the same false-positive terms and enforces them. | src/pipeline/weekly-facts.ts:52-55,114-136,265-270,447-465; CB-P1-10; EP-CS/EP-LLM | False mandatory fact in narrative | H | Current matching text; human review | P1 | LLM report | Promote on accepted materially false fact; demote after typed event/source rules and negative fixture corpus. | 2/4 | A |
F-053 activity-semantics-drift | Connected-call patterns disagree and every meeting is warm even when cancelled/no-show; false warmth can produce a stale-CRM accusation. | src/pipeline/genuine-response.ts:14-15,121; src/pipeline/crm-semantic-signals.ts:97-98,332-341,520-533; CB-P0-3/P1-9; EP-CS | False CRM-health claim | H | Current; manual review | P1 | CRM health | Demote after shared typed activity outcome authority and cancellation fixtures. | 2 | A |
F-054 week-dual-semantics | UTC selection and NZ business-week windows share weak types and differ at end boundaries; Sunday events can make metrics and buyer lists disagree. | src/pipeline/week.ts:66-77; src/pipeline/buyer-selection.ts:516-525; date-key call sites; CG-1.4, CB-P2-4; EP-CS:10-25 | Weekly reproducibility/correctness skew | H | Current edge dates; manual reconciliation | P1 | N | Demote after distinct branded windows, one conversion boundary and timezone edge fixtures. | 2 | A |
F-055 money-prose | Multiple money/stage formatters and parse-back regexes mean a display tweak can break grounding/redaction or leak values into value-free sections. | compact-currency implementations; src/report/weekly-report.ts:2796,2951; CA-P1-2/P1-5/P2-8/P2-9, CG-1.5/1.7; EP-CS | Wrong totals or commercial-value leakage | H | Current; editorial typed-value patch partially contains | P1 | Report correctness | Demote after typed Money/Stage authority and formatter/parser deletion. | 2 | A |
F-056 unit-regexes | Unit labels have multiple regex grammars; suffixed/tower-specific units can render or match inconsistently. | unit parsers/matchers including src/report/weekly-report.ts:2892,3017-3020; CG-1.6; EP-CS | Wrong product identity in report | H | Current uncommon labels; human review | P1 | N | Demote after typed project/tower/unit key and round-trip fixtures. | 2 | A |
F-063 selection-temporal-coupling | Selector runs four times over progressively mutated accumulators; correctness depends on statement order with no stage type/invariant. | src/pipeline/live.ts:259-547; CB-P0-4; EP-CS:21-23 | Loss/watch routing silently skipped after reorder | H | Current maintenance risk; existing order works | P1 | N | Promote on observed production misorder; demote after explicit pure stage pipeline and parity fixtures. | 2/5 | CH (Claude P0 structural) |
F-064 derived-prose-as-quote | Machine-derived loss summaries are stored in the same quote shape as verbatim evidence, with synthetic IDs and borrowed timestamps. | src/pipeline/live.ts:1331-1338; src/pipeline/reconciliation-evidence.ts:78-87; CB-P1-13; EP-LLM:119 | Apparent citation has no source span | H | Current at-risk evidence; synthetic ID visible internally | P1 | CRM health/dossier | Demote after typed derived assertion distinct from EvidenceReceipt. | 2 | A |
| ID / slug | Falsifiable defect and scenario | Primary evidence; source reviews; control | Conf. / containment | Sev. | RB | Promotion or closure condition | Phase | Resolution |
|---|---|---|---|---|---|---|---|---|
F-016 presentation-fail-open | Coverage sentence, narrative lead and engagement band fall back through prose/defaults; missing structured state can degrade silently in the view. | src/report/weekly-report.ts:2498; src/report/weekly-html-view.ts:1051-1053; CA-P1-11/P2-3/P2-11; EP-CS | H; reader may notice | P2 | N | Promote on material delivered omission; close with explicit unavailable/degraded states. | 3 | A |
F-035 pagination-bounds | Graph/OnePage pagination has no cycle/page budget; malformed repeated nextLink/full page can loop forever. | src/clients/onepage.ts:118-145; src/clients/graph.ts:364-374; X-P2-03, CD-P3; EP-SF:134/EP-TEST:61 | H; remote correctness trusted | P2 | N | Promote on observed loop/resource exhaustion; close with host-pinned seen-set/page/time budget tests. | 1 | A (Codex underweighted item) |
F-037 db-hot-path-bounds | Whole-table loads, JS filters and O(n²) resolution walks grow without budgets. | src/db/person-node-repository.ts:399-415; src/db/onepage-snapshot-repository.ts:168-194; src/db/dossier-record-repository.ts:661-675; CD-P2-4; EP-SF/EP-CS | M/H; current scale contains | P2 | N | Promote at measured SLA/resource breach; close with indexes, bounded queries and benchmarks. | 1/5 | A |
F-038 diag-migrates-db | Read-oriented diagnostic scripts call migrations against the production-local DB and cannot inspect during a writer lease. | scripts/diag-messages.ts:7,35; scripts/diag-selection.ts:25,49; scripts/diag-validity.ts:9,42; CE-P2-18; EP-CS:23 | H; lock/snapshot contains data risk | P2 | N | Close with read-only DB mode and explicit migration-only roots. | 1 | A |
F-040 secret-scan-narrow | Secret scan recognizes five assignment names and PEM headers; new provider tokens or unlabeled secrets pass. | scripts/check-no-secrets.ts:7; X-P2-08, CE-P2-19; EP-ME:145 | H; git review adds weak containment | P2 | N | Promote on leaked secret; close with entropy/provider patterns and fixture suite. | 1 | A |
F-043 graph-mutation-guard | Graph client contains live subscription mutation methods with no mechanical read-only reachability policy; OnePage test checks method names, not actual request methods. | src/clients/graph.ts:277-300; src/ingest/graph-gate.ts:152-198; tests/onepage-client.test.ts:162-169; CD-P2-1, CF-P1-2; EP-WP:12/EP-TEST:59 | H; current app permission/use narrows path | P2 | Graph production | Promote on reachable unauthorized mutation; close with capability split and recording-fetch enumeration. | 1 | A |
F-045 aux-write-fail-open | Stable dossier/projection/telemetry/checkpoint/cache parse writes can fail or corrupt and be swallowed, converting durable-state loss into a cache miss or missing audit. | src/pipeline/live.ts:1143-1173,1353-1387,2060-2083,2147-2164; X-P2-02, CB-P2-8; EP-SF:140 | H; primary report may still exist | P2 | N | Promote when correctness depends on omitted state; close with typed criticality and visible status. | 1/2 | A |
F-046 persistence-edge-races | Candidate registration, first lease insert and nullable legacy uniqueness use check-then-insert or weak schema invariants; concurrency produces noisy failures/duplicate null rows. | src/metrics/weekly-metric-repository.ts:74-118; src/db/graph-source-repository.ts:113-124; src/db/schema.ts:670-693; CD-P3; EP-CS:23 | H; mostly repairable and uncommon | P2 | N | Promote on durable ambiguity; close with atomic upsert/partial indexes and concurrent tests. | 1 | A |
F-052 tag-taxonomy | Business tags are duplicated as drifting regex/string lists across at least five files; one CRM rename partially disables watch/rescue/loss behavior. | src/pipeline/buyer-selection.ts:428,439; src/pipeline/high-potential-watch.ts:236,452; src/pipeline/crm-semantic-signals.ts:90-91,219; CB-P1-7; EP-CS:22-25 | H; current vocabulary stable/manual review | P2 | N | Promote on live label change or released omission; close with typed project-owned tag authority. | 2 | A |
F-060 unbranded-identifiers | Contact, party, source, run and week IDs are plain strings; compiler cannot prevent cross-ID assignment. | src/report/profile-model.ts:42,59,89,138,144,243; src/engine/narrative.ts:60; src/schemas/db-model.ts:32,67-80; CG-1.11; EP-CS:10-11 | H; runtime validation at some seams | P2 | N | Promote when an actual cross-ID flow is traced; close incrementally with branded IDs at boundaries. | 2/5 | A |
F-061 internal-domain-drift | Internal/staff domain lists are duplicated and divergent; the same address can be buyer in one classifier and seller/internal in another. | src/pipeline/live.ts:129; src/pipeline/buyer-selection.ts:71-76; CA-P1-8, CB-P1-11; EP-CS:22-25 | H; current known domains | P2 | Multi-project | Promote on misclassification; close with project-owned typed domain policy. | 2 | A |
F-062 selection-bounds-ranking | Single-buyer mode scans the full book, watch uses unbounded Promise.all, committed/consideration can exceed limit, and raw currency dominates rank scalar. | src/pipeline/live.ts:302,1711; src/pipeline/buyer-selection.ts:230-240,706-735; CB-P1-3/P1-4/P2-3/P2-6; EP-SF | H; current book scale/concurrency caps elsewhere | P2 | N | Promote on rate-limit/cost incident; close with explicit budgets and deterministic ranking types. | 2/4 | A |
F-065 presentation-policy-duplication | View/report code redefines loss vocabulary, deal stages, metric keys, tier membership and counts rather than consuming one authority. | src/report/weekly-html-view.ts:622-624,994; src/report/render-weekly-html.ts:459-467; CA-P1-1/P1-2/P2-2/P2-9, CG-1.7/1.10; EP-CS:10 | H; current fixtures | P2 | N | Promote on cross-layer disagreement; close with application document fields and no presentation policy imports. | 2/3 | A |
F-071 dead-validators | Date/staleness validation checks canonicalizer-produced values and disposition rules are prompt-only or reimplemented inconsistently; rules appear enforced but are not. | src/engine/narrative.ts:464,707-720,823-844; src/engine/disposition.ts:137-201; CC-P1-3/P1-4; EP-LLM:119-120 | H; manual review | P2 | N | Promote on material accepted violation; close with input-vs-output validation and one typed disposition authority. | 4 | A |
F-074 narration-vertical-drift | narrative.ts has hand-synced schemas/traversals/fallbacks and agentic vs normal narration have split persistence/retirement ownership. | src/engine/narrative.ts (~1004 LOC); CC-P2-1, CG-3.3; EP-CS/EP-SUP | H; canonical weekly path limits agentic reach | P2 | N | Promote on divergent durable output; close after boundary hardening and one application use case. | 4/5 | A |
F-075 layer-inversion, model-in-presentation | Canonical report models live in report/; a real runtime pipeline ↔ report cycle and broad imports leave no package owning domain concepts. New rules accumulate in presentation/orchestration. | src/pipeline/live.ts:20-28; src/report/profile-model.ts:1-27; dependency inventory CG-2; EP-WP:10/EP-CS:23 | H; structural reach, no standalone incident | P2 | N | Promote only when a material failure is traced specifically to the cycle; close with application ports, domain concepts and dependency lint. | 2/5 | CH (Claude P0 structural) |
F-076 god-module | weekly-report.ts, live.ts, repositories, render/view and tests exceed the 500-LOC rule; no LOC/SRP gate exists, and renderer embeds untyped client JS/CSS. | file sizes and responsibility maps X-P2-10, CA-P0-3/P2-5/P2-6, CB-P0-1, CC-P2-1; EP-CS:17-23 | H; maintenance/reviewability impact | P2 | N | Promote only with a concrete reachable failure; close after typed seams exist, decomposition, LOC/dependency check. | 5 | CH (Claude P0 structural) |
F-077 supersession-hygiene | Dead dated scripts, compatibility fields, duplicated empty defaults and half-removed view fields lack owners/expiry and remain plausible authorities. | scripts/backtest-15june.ts; compatibility fields in src/report/weekly-report.ts; CA-P1-7/P2-7/P2-10/P2-12, CE-P2-20; EP-SUP | H; manual invocation/config confusion | P2 | N | Promote on use in accepted flow; close with caller inventory and same-slice deletion/owned exception. | 5 | A |
F-078 false-assurance-tests | Prompt-string tests, tautological render comparison, contradictory name matching, helper-only guards, thin delta orchestration and fake-only output stacks can stay green while the production invariant is false. | tests/quote-verification.test.ts:115-120; tests/weekly-report.test.ts:3443; CF-P0-1..4/P1-1..8/P2-1..4; X cross-cutting test defects; EP-TEST/EP-ME | H; manual lane reviews compensate unevenly | P2 | Y through mapped F-IDs | Individual mapped failures carry promotion; close only when phase gates exercise production boundaries and recorded-output replay. | 0–5 | A |
Every F-ID inherits all five fields from its packet below. A row-specific change condition in §3 overrides the packet where more precise. “Historical” means inspect and repair/quarantine existing state; it never means fabricate authority that no longer exists.
| Packet / F-IDs | Interim containment | Forward prevention | Historical repair/backfill | Deterministic verification |
|---|---|---|---|---|
| R0-A: artifact truth F-001–F-004, F-007–F-010, F-016 | No --skip-render; offline is non-production; gate delivered set; regenerate eval from delivered JSON and record SHAs; post-editorial artifact requires Adam approval. | Versioned canonical application document, final-view projection and immutable ReportReleaseManifest; one artifact-set commit. | Inventory 14d/15a/15b/16a hashes, commands, editorial state, eval source and metric receipt; mark gaps, do not infer. | Mismatch any hash/signature/section/projection and acceptance must fail; final DOM terms equal hard-eval terms; all caller parity fixtures. |
| R0-B: operator contract F-011–F-015 | Ban drift resume for release; persist exact command/flags; explicit env for project; one writer/operator. | Typed CLI/config, signed checkpoints, run-ID telemetry, deadlines/terminal receipts, adapter-level lease. | Identify mixed checkpoints, missing telemetry and metric receipts; quarantine ambiguous runs. | Parser conformance table; cross-tenant env negative test; checkpoint code/config mismatch; signal/stall tests; concurrent acceptance write test. |
| R0-C: editorial trust F-005–F-006 | Treat editorial as manual, visible stage; rejected/missing items block automated green. | Typed allowlist from canonical entities/metrics; bounded retry/quarantine; nonzero degraded exit. | Preserve prior editorial inputs/outputs/errors; label silent-deletion uncertainty, no synthetic reconstruction. | Fake editor emits unsupported/hostile/partly invalid output; every item is accepted or quarantined with counts, never disappears. |
| R1-A: source deletion/completeness F-017–F-021 | Block acceptance on unknown/failed source coverage; stop cursor surgery; preserve raw recovery evidence. | Tombstone state + reevaluation, 410 bounded resync, lifecycle engine, payload schemas and typed coverage. | Census tombstone opportunities/expired cursors, blobs without rows, rows without blobs, incomplete runs; repair or quarantine with receipts. | Tombstone and 410 state-machine fixtures; malformed 200 responses; injected per-contact/store failure must produce red/partial manifest. |
| R1-B: atomic durable state F-022–F-031, F-046 | Single local writer; protected snapshots before approved repair; no hosted D1 claim until adapter tests. | D1-compatible batch/CAS, partial unique current-row indexes, immutable source revisions, generation-level metric finalize. | Current-row duplicate/missing-successor/orphan/citation-drift/metric-generation audits; idempotent protected-copy repair. | Crash-at-each-boundary and two-writer tests; D1 parameter integration; quick/integrity check; exact before/after counts and back-pointers. |
| R1-C: operations/security F-032–F-043 | Explicit host/env, bounded manual pages/retries, no shared diagnostic output, no mutation tools in report credentials. | Drift gate, sync receipt, host pinning, budgets, read-only diag adapter, value-based redaction, capability-split Graph client. | Inspect drift, stale units, suspicious cursor hosts, shared logs and agentic logs; rotate credentials if exposure evidence exists. | pnpm check drift; cursor redirect denial; page-cycle/time budget; retry virtual-clock tests; recording-fetch method matrix; actual-script redaction fixtures. |
| R1-D: cache/auxiliary durability F-044–F-045 | Invalidate caches on uncertainty; surface auxiliary-write failures in run verdict. | Typed exhaustive fingerprint inputs and criticality classes for every write. | Cache/material-input audit and missing projection/telemetry census; invalidate ambiguous records. | Table mutation for every fingerprint field; corrupt cache and failed write must emit explicit miss/failure reason. |
| R2-A: typed commercial signals F-047–F-053 | Freeze current vocabularies and record exact config/hash; human review affected loss/watch/CRM-health sections. | StatusAuthority, typed activity outcomes, typed tags/events/errors/fact candidates; delete prose consumers. | Recompute affected classifications from immutable receipts; diff and review every changed buyer/fact. | Real-shape matrix: annotated statuses, “lost keys”, cancelled meeting, family visit, error reword, tag rename. |
| R2-B: typed time/value/evidence F-054–F-065 | Record timezone, source IDs, person IDs, money/unit config in run notes; no positional fallback durable writes. | Branded week/money/unit/receipt/party IDs; typed derived assertions; application-owned fields consumed by presentation. | Citation referent audit, same-email/orphan audit, week-boundary replay, money/unit/report diff. | Constructor round trips; source reorder stability; cross-ID compile/runtime negatives; Sunday NZ boundary; duplicate-email P6 fixtures. |
| R4-A: LLM boundary F-066–F-074 | No unattended agentic durable writes; manual read-through; visible quarantine; fixed per-run launch budget. | One hostile-evidence framing; exact request envelope; atom/source/ownership validators; cost reservation; one narration use case. | Audit durable facts for unresolved source IDs/subjects/quote hazards and agentic evidence scope; retract/quarantine with lineage. | Recorded outputs + fake model obeying injection; cross-project/subject/stale envelope; negation/reply author; budget exhaustion; zero silent drop. |
| R5-A: structure and assurance F-075–F-078 | No new imports into cycles, no new oversized modules, no new compatibility fields without owner/expiry. | Domain concepts + application ports + presentation DTOs; dependency/LOC/supersession lint; decompose after behavior is characterized. | Caller/dead-path inventory and explicit deletion map; do not golden-master known-wrong behavior. | Architecture lint, LOC allowlist shrinking per slice, source-ID/source-review coverage check, four-tier harness and production-boundary negative tests. |
All slugs currently used in the current/future architecture drafts resolve here. Multiple slugs may intentionally map to one invariant; artifact-lineage maps to two because identity and filename convention are distinct failures.
flowchart LR
A[Acceptance and report] --> F001[F-001 eval-projection]
A --> F002[F-002 eval-lineage / gate-pre-editorial]
A --> F003[F-003 render-fork]
A --> F005[F-005 editorial-silent-delete / allowlist-from-untrusted]
A --> F007[F-007 artifact-naming]
A --> F008[F-008 telemetry-slot]
A --> F009[F-009 render-mutates-input]
A --> F010[F-010 gate-expectations]
A --> F011[F-011 allow-drift-splice]
D[Durable state and sync] --> F017[F-017 tombstones-dropped]
D --> F018[F-018 no-410-recovery]
D --> F024[F-024 ledger-nonatomic]
D --> F059[F-059 email-collision-split]
T[Typed authorities] --> F047[F-047 status-two-semantics]
T --> F048[F-048 prose-protocol]
T --> F054[F-054 week-dual-semantics]
T --> F055[F-055 money-prose]
T --> F056[F-056 unit-regexes]
T --> F057[F-057 source-id-grammars]
T --> F058[F-058 gate-name-matching]
L[LLM boundary] --> F066[F-066 msg-call-atoms-unverified]
L --> F067[F-067 subject-unbound]
L --> F069[F-069 delimiter-injectable / injection-tests-tautological]
L --> F070[F-070 LLM silent disappearance]
L --> F072[F-072 no-cost-ceiling]
L --> F073[F-073 agentic-scope]
L --> F041[F-041 agentic-pii]
S[Structure] --> F075[F-075 layer-inversion / model-in-presentation]
S --> F076[F-076 god-module]
| Architecture slug | F-ID |
|---|---|
#eval-projection | F-001 |
#eval-lineage, #gate-pre-editorial | F-002 |
#artifact-lineage | F-002, F-007 |
#render-fork | F-003 |
#editorial-silent-delete, #allowlist-from-untrusted | F-005 |
#gate-name-matching | F-058 |
#render-mutates-input | F-009 |
#allow-drift-splice | F-011 |
#telemetry-slot | F-008 |
#tombstones-dropped | F-017 |
#no-410-recovery | F-018 |
#ledger-nonatomic | F-024 |
#email-collision-split | F-059 |
#status-two-semantics | F-047 |
#prose-protocol | F-048 |
#source-id-grammars | F-057 |
#week-dual-semantics | F-054 |
#money-prose | F-055 |
#unit-regexes | F-056 |
#msg-call-atoms-unverified | F-066 |
#subject-unbound | F-067 |
#dead-validators | F-071 |
#delimiter-injectable, #injection-tests-tautological | F-069, F-078 |
#agentic-scope | F-073 |
#agentic-pii | F-041 |
#no-cost-ceiling | F-072 |
#layer-inversion, #model-in-presentation | F-075 |
#god-module | F-076 |
This appendix proves union coverage without duplicating findings as votes.
| Source IDs | Register IDs |
|---|---|
| X-P1-01, X-P1-02 | F-017, F-018 |
| X-P1-03, X-P1-04, X-P2-06 | F-022, F-023 |
| X-P1-05 | F-020 |
| X-P1-06–X-P1-09 | F-066–F-069 |
| X-P1-10, X-P2-01 | F-024, F-026 |
| X-P1-11 | F-059 |
| X-P1-12, X-P1-13 | F-004, F-021 |
| X-P1-14, X-P1-15 | F-019, F-041 |
| X-P1-16, X-P1-17, X-P1-18 | F-072, F-033, F-027 |
| X-P2-02–X-P2-05 | F-045, F-035, F-042, F-030 |
| X-P2-07–X-P2-10 | F-032/F-078, F-040, F-039, F-076/F-078 |
The eight items Claude underweighted in synthesis are explicitly present: F-020, F-066, F-067, F-023, F-059, F-041, F-027 and F-035.
| Source IDs | Register IDs |
|---|---|
| CA-P0-1 | F-002, F-003; CA-P0-2 → F-005/F-070; CA-P0-3 → F-076 |
| CA-P1-1..11 | F-065, F-055, F-058, F-004, F-055, F-005, F-077, F-061, F-003, F-004/F-065, F-016 |
| CA-P2-1..12 | F-048/F-016, F-065, F-016, F-062, F-076, F-076, F-003, F-055, F-065, F-077, F-016, F-007 |
| CB-P0-1..4 | F-076, F-048, F-048/F-053, F-063 |
| CB-P1-1..14 | F-021, F-021/F-049, F-062, F-062, F-036, F-047, F-052, F-050, F-053, F-051, F-058/F-057/F-061, F-044, F-064, F-049 |
| CB-P2-1..12 | F-062, F-035/F-016, F-062, F-054, F-077, F-062/F-072, F-021, F-045, F-049/F-068, F-058, F-020/F-047, F-048 |
| CC-P0-1 | F-073; CC-P1-1..9 → F-069, F-005, F-071, F-071, F-068, F-070, F-072, F-041/F-042, F-070 |
| CC-P2-1..5 | F-074/F-076, F-069, F-072, F-072, F-069 |
| CD-P0-1 | F-024; CD-P1-1..8 → F-022, F-018, F-017, F-029, F-032, F-028, F-031, F-025 |
| CD-P2-1..9 | F-043, F-034, F-044, F-037, F-033, F-036, F-019, F-068, F-039 |
| CD-P3 items | F-046, F-035, F-045 |
| CE-P0-1..3 | F-003, F-002, F-011 |
| CE-P1-4..13 | F-010, F-029, F-014/F-030, F-008, F-015, F-012, F-009, F-007, F-006, F-013 |
| CE-P2-14..20 | F-009, F-011, F-020, F-004, F-038, F-040, F-077 |
| CF-P0-1..4 | F-068, F-069/F-078, F-017/F-018/F-078, F-032/F-078 |
| CF-P1-1..8 | F-058/F-078, F-043/F-078, F-039/F-078, F-044/F-078, F-011/F-078, F-024/F-078, F-003/F-078, F-078 |
| CF-P2-1..4 | F-069/F-078, F-017/F-018/F-078, F-047/F-078, F-047/F-078 |
| CG-1.1..1.11 | F-058, F-057, F-047, F-054, F-055, F-056, F-065, F-002/F-007, F-008, F-065, F-060 |
| CG-2, CG-3.1..3.4, CG-4 | F-075, F-003, F-001/F-002, F-073/F-074, no defect (deliberate layering), F-076 |
The controlling specification: severity rules, phases, gates, and the release-blocker doctrine.
source: 2026-07-16d-remediation-charter.md
Date: 2026-07-16 Status: joint architecture draft; Codex-authored in Round 3 for Claude's Round-4 attack and Adam's decisions Authority: the joint findings register, rounds 0–2, the engineering protocol, and the active person-node plan Execution state: nothing in this charter has been implemented or run
The program outcome is not “fewer regexes” or “smaller files.” It is a weekly-report system in which:
This is a strangler program, not a rewrite. It does not authorize any code change, generation, migration, render, editorial, eval, acceptance, live OnePage/Graph access, person-node P6 run, or branch creation. Those require a later approved execution plan and the existing Adam gates.
Severity is not the release verdict. For every finding record impact, evidence confidence, reachability
through a currently supported path, and effective containment. P0 requires all four: (1) catastrophic integrity,
security, privacy, or external-acceptance impact; (2) high-confidence evidence of the complete failure path;
(3) reachability now through ordinary supported operation, the documented release command, **or the recorded
operating practice of the project as evidenced in its living docs and acceptance records**, without a speculative
future deployment or an explicit emergency bypass; and (4) no effective containment before harm. If confidence or
reachability is conditional, or containment materially limits the blast radius, cap at P1. P1 is a material
correctness, governance, security, or reliability failure and may be release-blocking for the affected capability
even when it is repairable, operator-gated, partially contained, or awaiting one reachability fact. P2 is a local,
structural, test-quality, or maintainability defect with no proven current material failure. Vote count, reviewer
count, LOC, and rhetorical force never affect severity. Every disputed P0/P1 records both its containment and the
concrete fact that would promote or demote it.
Response to Claude's amendment: ACCEPTED. Living documentation and acceptance records are operational evidence, not hearsay. Excluding them would allow a routinely used manual release path to evade reachability.
Application to 16a and the lineage dispute: recorded practice satisfies the reachability conjunct. It does not satisfy the “no effective containment” conjunct. Lane B recorded delivered-artifact hashes, regenerated its snapshot from 16a JSON, reviewed the final rows, and ran the manual gate on the editorial set. That is real, artifact-specific containment. The systemic command remains unable to reproduce the guarantee unattended, and its broader eval projection remains unsafe. F-001 and F-002 are therefore P1 and release-blocking. This is not a compromise average; it is the result of applying all four conjuncts.
A finding blocks a release/capability when it violates a hard artifact-identity, reader-view acceptance, source-completeness, trust-boundary, durable-state, migration, tenant-isolation, or governance invariant in that capability. A P0 label is not required. Conversely, a pile of P2s does not create a release block by vote count.
No forced consensus is permitted. Register rows marked Codex-held survive unchanged into the next round. If round 6 ends without convergence, the exact alternatives and operational consequence go to Adam; neither agent rewrites the other's position as agreement.
The canonical artifact is deliberately two-level:
WeeklyReportDocument serialized as canonical JSON. It contains deterministic business/publication meaning, typed coverage and explicit unavailable/abstained states.ReportReleaseManifest. Filenames are labels, not identity.Editorial is a declared transformation. If it is not requested, the manifest records not_requested and base view may become final. If requested, pre-editorial HTML is an intermediate and cannot be the accepted report. Editorial failure is failed or quarantined, never an implicit pass-through green.
sequenceDiagram
autonumber
participant S as Source coverage receipt
participant P as Profile input
participant D as Canonical WeeklyReportDocument
participant B as Base publication view
participant E as Editorial stage
participant F as Final publication view
participant H as Delivered HTML bytes
participant X as Reader-view eval projection
participant M as ReportReleaseManifest
participant A as Immutable acceptance record
S->>M: project/scope/cursor/status hash
P->>M: profile hash + run identity
P->>D: pure assemble + enrich
D->>M: schema/version/content hash
D->>B: deterministic view projection
B->>M: base-view hash
B->>E: declared requested/not_requested stage
E->>M: input/output/model/validator hashes + disposition
E->>F: accepted editorial output or explicit no-editorial path
F->>H: deterministic render
F->>X: exact reader-visible semantic projection
F->>M: final-view hash
H->>M: HTML byte hash
X->>M: eval-projection hash
M->>A: verify entire chain, then gate exact F and H
Note over M,A: Any missing/mismatched hash, coverage failure,<br/>unknown editorial state or broader eval projection fails closed.
ReportReleaseManifest minimum contract| Area | Required fields/invariants |
|---|---|
| Identity | manifest ID/version; typed project ID; typed business-week window and timezone; run ID; predecessor/supersession ID |
| Build provenance | code SHA plus dirty-tree/content-patch status; config hash; schema/migration signature; canonicalizer/view/renderer/editorial/validator/gate/eval versions |
| Source authority | enrolled source-unit IDs, cursors/checkpoints, completeness/failed/quarantined counts, immutable coverage-receipt hash |
| Chain nodes | profile input, canonical document, base view, editorial input/output/status, final view, HTML, eval projection; content hash and schema version for each |
| LLM state | model/backend, prompt/contract version, recorded output hash, budget receipt, accepted/retried/quarantined counts; no raw PII in the manifest |
| Acceptance | persisted expectation-set hash, hard-gate result hashes, metric snapshot/receipt hash, operator/manual approval where required |
| Immutability | append-only release/acceptance records; a correction creates a successor and preserves predecessor lineage |
Acceptance must mechanically prove all of these:
--skip-render is legal only as “verify an existing complete chain,” never “trust a week-keyed sibling.”Raw HTML byte identity is used to establish artifact identity, not as the behavioral golden master. A harmless renderer change may change bytes while preserving canonical JSON and reader semantics; it must create a new manifest, not falsify behavioral equivalence.
WeeklySalesReport does not move wholesale into domain. It is split three ways:
src/domain/: pure concepts/policies—branded IDs, CRM status, week windows, Money, Unit, EvidenceReceipt, coverage/lifecycle and person-node contracts. No I/O, environment, DB, LLM, report or application imports.src/application/: use cases and port interfaces—selection, evidence assembly, canonical WeeklyReportDocument, release manifest, acceptance and reconciliation. Imports domain; never concrete adapters or presentation internals.src/presentation/: view DTOs and renderers. It consumes the canonical application document and domain value objects; it does not own identity, selection, persistence or acceptance policy.flowchart TB
D[domain<br/>pure IDs, values, policies]
A[application<br/>use cases + ports + canonical report document]
AD[adapters<br/>clients / ingest / db / storage / llm]
PR[presentation<br/>view DTOs + renderers]
CR[composition roots<br/>scripts / Workers]
D --> A
D --> AD
D --> PR
AD -->|implements application ports| A
A --> PR
CR --> AD
CR --> A
CR --> PR
Mechanical dependency rules enter with the first vertical and use an explicit shrinking allowlist:
pipeline/engine/db -> report/presentation edge; andThe harness has four non-substitutable tiers:
| Tier | Comparator | Gate authority |
|---|---|---|
| 1. Deterministic core | Canonical JSON under fixed clock/IDs/order plus content hashes. Raw HTML bytes are allowed only as short-lived renderer characterization and final artifact identity. | Hard |
| 2. Fact lifecycle | Canonical multiset, keyed by typed subject, fact type, immutable receipt, durability and time semantics; compare multiplicity, ownership, supersession, quarantine, exclusions and coverage. | Hard |
| 3. Delivered view | Semantic projection/DOM of exactly what the reader sees, including section presence and James-required terms. | Hard for acceptance |
| 4. Stochastic quality | Recorded model-output replay through deterministic validators; LLM judge may rank irreducible phrasing/salience diffs for human review. | Advisory only |
An LLM judge can never override schema, identity, source, quote, ownership, coverage, lifecycle, artifact-lineage or hard James gates. Known-wrong current behavior enters the baseline only as a named expected delta with owner and removal gate. It is not immortalized because it was current.
Gates below are exit criteria, not a final cleanup phase. A phase does not exit on “code merged”; it exits when its mechanical gates and historical state disposition are green. Focused Phase-1 safety tests do not wait for a perfect universal harness.
flowchart LR
P0[Phase 0<br/>artifact truth + rulers]
P1[Phase 1<br/>stop durable damage]
P2[Phase 2<br/>typed authorities]
P3[Phase 3<br/>one report core]
P4[Phase 4<br/>LLM trust boundary]
P5[Phase 5<br/>decompose + enforce]
P0 --> P1 --> P2 --> P3 --> P4 --> P5
P0 -. manifest seam starts artifact/run authority .-> P2
P2 -. typed report document enables .-> P3
P2 -. identity/source contracts enable .-> P4
Scope: F-001–F-016, F-032's check gate, and the harness/manifest seam needed by every later phase.
Work objective: make “the report,” “the evaluated content,” “the gate,” “the run” and “the expectation set” refer to immutable typed identities; characterize all current entrypoints before switching any.
Mechanical exit criteria:
ReportReleaseManifest binds the complete chain in §3 and acceptance refuses every missing/mismatched node;unavailable(reason); parity fixtures cover all seven formerly dropped sections and james_mentions;--skip-render, drift resume, sibling week slots, stale defaults and wrong-project env all fail their negative tests; exact checkpoint/config signatures are persisted;latest.json authority;pnpm check includes schema/migration drift, architecture baseline, source-review/register coverage and the Phase-0 harness; andverified, projection-weak, sibling-receipt, unknown, or superseded; no gap is guessed green.Phase-0 non-goal: move all types or split god modules. Characterization precedes restructuring.
Scope: F-017–F-046.
Work objective: source deletion/completeness, D1-compatible atomic state, client schemas, bounded sync/security, retention and repair. Highest-risk boundaries may land as independent verticals after the Phase-0 IDs/harness seam.
Mechanical exit criteria:
@removed and 410 fixtures traverse the full state machine: checkpoint, tombstone/recovery, raw-evidence suppression, dossier reevaluation, coverage receipt and safe cursor advance;{}, [] or empty-body success;Scope: F-047–F-065 plus artifact/run/receipt types begun in Phase 0 and person-node integration gates below.
Vertical order:
EvidenceReceipt;Every vertical follows the same exit gate:
Phase exit: no current supported caller derives status, week, source, identity, money, unit, loss/movement, tag or error authority from display prose/prefix/regex when a typed field exists. Temporary compatibility reads have owner, F-ID and expiration; they are not write authority.
Scope: F-003, F-009, F-016, F-065, F-077 and the report-facing parts of F-001/F-002.
Work objective: one canonical assemble/enrich application service and one final-view pipeline. Fresh, offline, accept and editorial become thin composition roots; offline renders the same document or explicit unavailable state.
Mechanical exit criteria:
STATE.md exception; andScope: F-005/F-006 and F-066–F-074.
Work objective: one hostile-evidence framing contract; exact request envelope; typed atom/source/ownership/ durability verification; visible bounded retry/quarantine; cost accounting; subject-scoped agent tools.
Mechanical exit criteria:
Scope: F-075–F-078 and residual structural work from prior phases.
Work objective: split only along already-proven domain/application/adapter/presentation seams. This is last so a large file move cannot hide behavioral change behind an untrustworthy baseline.
Mechanical exit criteria:
pnpm check; migration allowlist reaches zero or every remainder has Adam, owner, F-ID and expiry;live.ts, weekly-report.ts, repositories, view/renderer and giant tests are split by use case/invariant, not by arbitrary line ranges;The active plan is tmp/codex-notes/2026-07-16e-person-node-plan.md. This charter does not redirect P0–P5 or lift its P6 generation hold (:39-50,151-179). It adds two already-agreed acceptance blockers while the compatibility authority is still removable:
project_id, subject party_id and profile-unit contract must exactly equal the request. Negative fixtures: cross-project response, cross-subject response and stale response for another party.P6 may not exit until all existing plan gates and these additional gates are true:
quick_check=ok, exact before/after counts and complete-scope abstention;resolved_party_id strings or RelatedIDs as authority;The last clause prevents P6 from laundering the known acceptance defect while also avoiding an unapproved rewrite of the active lane.
Use one integrated vertical slice at a time. Broad parallel branches over live.ts, weekly-report.ts, identity and acceptance are forbidden. Short-lived branches are merge hygiene, not safety.
For each slice:
Rollback is the prior commit plus additive-compatible data semantics—not an indefinitely live second production path. No phase waits for a months-long branch to merge before learning whether its core invariant is enforceable.
Forward-only fixes are incomplete. Existing facts, identity, evidence, metrics, caches, artifacts and logs may already embody the failure. Every repair must be idempotent, reversible where possible, run first on a protected copy, emit a receipt, preserve superseded provenance and abstain when authority is missing.
| State family | Required census | Allowed disposition | Prevent-recurrence gate |
|---|---|---|---|
| Accepted artifacts/runs | Hash/command/editorial/eval/metric/expectation lineage for 14d–16a | verified; projection-weak; sibling-receipt; unknown; superseded; later reaccepted | manifest-chain rejection tests |
| Graph evidence | consumed tombstones/expired cursors where reconstructable; row/blob/cursor coverage | suppress + reevaluate; bounded resync; quarantine; authoritative abstention | tombstone/410 end-to-end fixtures |
| Fact/person lifecycles | duplicate current, missing successor/back-pointer, orphan person, merge cycle, same-email collision | atomic repair with supersession lineage; review candidate; abstain | DB unique/CAS/crash tests |
| Source citations | mutable revisions, positional/fallback IDs, unresolved receipt/quote/owner | bind immutable revision; retract/quarantine; never guess referent | receipt constructor + reorder/drift test |
| Metrics | partial import generations, empty finalization, sibling acceptance receipts | restore/re-finalize from authoritative input with generation receipt; quarantine | atomic generation/failure injection |
| Caches/projections | incomplete fingerprints, corrupt payloads, ambiguous name-only caches | invalidate; deterministic upgrade; selective approved regeneration; legacy-only | exhaustive fingerprint/stable replay |
| PII/logs/artifacts | raw agentic evidence, bodies beyond policy, names/emails/subjects/quotes in outputs | redact/delete per policy; document non-deletable audit residue; rotate secrets if exposed | actual-writer redaction + lifecycle tests |
No “repair” may invent a deleted Graph event, person merge, citation referent, buyer fact or metric value from probability. Unknown becomes an explicit quarantine/abstention record.
Until Phase 0 exits:
Every release-blocking register row with phase ≥ 1 must name its interim containment in the register; an RB=Y row whose containment column is empty or none is a charter defect and blocks ratification.
--skip-render for acceptance;lineSummary alone;This policy contains risk; it does not make F-001/F-002 resolved.
ReportReleaseManifest, including editorial as a declared stage. Both architects agree; product authority remains Adam's.Codex agrees with Claude's recommendation: keep with caveat now, mandatory reacceptance at Phase-0 exit.
The remediation program is complete only when:
ReportReleaseManifest makes an acceptance/delivery identity mismatch unrepresentable;How the system actually works today, as jointly established.
source: 2026-07-16a-current-state-architecture.md
Status: DRAFT pending Round-1 rebuttals and the joint findings register. Defect annotations use stable slugs (#slug); the register (Round 3) maps slugs → F-IDs, after which this document is re-annotated. Evidence for every annotated defect lives in the two reviews and the joint register; this document locates them on the architecture, it does not re-argue them.
flowchart TB
subgraph Sources["External sources (read-only)"]
OP[OnePage CRM API]
GR[Microsoft Graph API<br/>3 Pitau mailboxes]
end
subgraph Local["Local runtime (D1/R2 stand-ins)"]
DB[(SQLite via libSQL<br/>.data/pitau-ingest.db)]
OBJ[(Object store<br/>.data/objects)]
end
subgraph Ingest["Ingest (scripts/ingest.ts)"]
DELTA[Graph delta sync<br/>#tombstones-dropped #no-410-recovery]
COV[Coverage gate]
end
subgraph Pipeline["Pipeline (src/pipeline — live.ts 2,237 LOC #god-module)"]
SEL[Buyer selection<br/>4-pass, order-coupled #prose-protocol]
EVID[Evidence assembly<br/>positional graph-NNN prompt IDs]
NARR[Narration per buyer<br/>LLM + stable-dossier cache]
WATCH[Watch / movement / loss<br/>#status-two-semantics]
end
subgraph Engine["Engine (src/engine)"]
EXTRACT[Extraction<br/>#msg-call-atoms-unverified]
NARRV[Narrative validation<br/>#subject-unbound #dead-validators]
DISP[Disposition v7<br/>rules 10-16 unenforced]
end
subgraph Persist["Persistence (src/db)"]
LEDGER[(fact_ledger<br/>#ledger-nonatomic)]
NODES[(person nodes/claims<br/>#email-collision-split)]
METRICS[(weekly metric store)]
EDGES[(relationship_edges)]
end
subgraph Report["Report (src/report — weekly-report.ts 3,169 LOC #god-module #model-in-presentation)"]
ASSEMBLE[assembleWeeklySalesReport]
VIEW[weekly-html-view]
RENDER[render-weekly-html]
EDIT[Editorial LLM + validator<br/>#editorial-silent-delete #allowlist-from-untrusted]
end
subgraph Eval["Backtest / acceptance (src/backtest, scripts)"]
SNAP[system-week.json<br/>week-keyed, overwritten #eval-lineage]
GATE[Readiness gate<br/>name-string identity #gate-name-matching]
JEVAL[James hard eval<br/>scores lineSummary projection #eval-projection]
end
OP --> Pipeline
GR --> DELTA --> DB
DELTA --> OBJ
COV --> Pipeline
DB --> EVID
OBJ --> EVID
Pipeline --> Engine
Engine --> Persist
Pipeline --> Report
Report --> Eval
Report -. "runtime import cycle #layer-inversion" .-> Pipeline
Load-bearing observation: the canonical data model (BuyerProfileReport, WeeklySalesReport) lives inside Report, so every other container imports from the presentation package (#model-in-presentation, #layer-inversion). There is no domain layer; the two god modules are where every concept without an owner ends up.
flowchart LR
config --> pipeline
schemas --> pipeline
pipeline <-->|"runtime cycle:<br/>live.ts imports report schema,<br/>profile-model imports 9 pipeline schemas"| report
engine -->|runtime| pipeline
engine -.->|type-only| report
db -->|runtime| pipeline
report -->|runtime| runtime_pkg[runtime]
backtest -->|runtime| report
metrics --> report
knowledge --> pipeline
agentic --> pipeline
Per Codex's Round-earlier correction: type-only edges (dashed) are ownership problems, not runtime cycles; the solid pipeline ↔ report cycle is real at runtime (live.ts:20-28 ↔ profile-model.ts:1-27).
sequenceDiagram
autonumber
participant A as Operator (Adam)
participant I as ingest
participant R as report.ts (selection+narration)
participant W as weekly-report.ts (fresh render)
participant O as rebuild-from-cache (offline render)
participant E as weekly-editorial.ts
participant G as weekly:gate
participant AC as weekly:accept
participant S as system-week.json (shared slot)
A->>I: pnpm ingest (writer lock ✔)
I->>I: delta sync — tombstones counted+dropped #tombstones-dropped
A->>R: pnpm report (4-pass selection, LLM narration, cache)
R-->>R: checkpoints carry no code signature #allow-drift-splice
A->>W: fresh render
W->>S: OVERWRITE system-week.json (every render) #eval-lineage
W->>W: attaches 7 enrichments, mutates input profile #render-mutates-input
A->>O: (iteration) offline render
O->>O: bare assembler — census/channel-mix absent,<br/>discovery/coming-due/lead-history EMPTY #render-fork
A->>E: editorial (reads weekly JSON, bare cast)
E->>E: invalid items silently filtered #editorial-silent-delete
E-->>A: NEW artifact set (post-editorial HTML)
A->>G: manual gate practice: runs on the editorial set ✔<br/>(operator discipline, not enforced)
A->>AC: accept (optionally --skip-render)
AC->>AC: accept's INTERNAL gate+eval run on its own<br/>fresh PRE-editorial render #gate-pre-editorial
AC->>S: reads BY WEEK KEY — may be a different revision #eval-lineage
AC->>AC: James eval scores lineSummary concatenation,<br/>not the rendered view #eval-projection
sequenceDiagram
autonumber
participant Op as Operator
participant RevA as Revision A (HTML under acceptance)
participant RevB as Revision B (latest render)
participant Slot as system-week.json
participant Gate as Readiness gate
participant Eval as James hard eval
Note over RevB,Slot: Any later render of the same week<br/>overwrites the shared slot
RevB->>Slot: write (week-keyed, no fingerprint)
Op->>Gate: accept --skip-render (HTML = Revision A)
Gate->>RevA: assertions on A's pre-editorial HTML ✔
Op->>Eval: hard eval
Eval->>Slot: load by week key → gets B's projection
Eval-->>Op: GREEN — recall proven on content A's reader never sees
Note over Op: Acceptance certifies a document nobody delivered.<br/>#eval-lineage #eval-projection #gate-pre-editorial
Note over Op: 16a-specific record (Round 2 §3): lane B manually regenerated<br/>the snapshot FROM 16a.json with SHAs recorded, so 16a's provenance<br/>is manually chained; the projection gap and the accept-command's<br/>sibling-render artifacts remain its real residual weaknesses.
| Concept | Typed authority today? | Where identity actually lives | Slug |
|---|---|---|---|
| Person | Partial (person-node work in flight) | 4+ name matchers; gate uses display-name strings | #gate-name-matching |
| CRM status | Vocabulary yes; matching NO | substring in 5 modules, exact-match in 1 | #status-two-semantics |
| Source/receipt ID | No | 3 grammars + positional prompt IDs (remapped on the normal path; fallback representable) | #source-id-grammars |
| Week | Type exists, semantics don't | UTC and NZ windows share one type; 20+ .slice(0,10) | #week-dual-semantics |
| Money | No | 4 formatters, format-then-parse round trips, regex redaction | #money-prose |
| Unit label | No | 5 regexes, 2 grammars | #unit-regexes |
| Artifact/revision | No | filename conventions, hand-allocated rev letters, week-keyed eval slot | #artifact-lineage |
| Run | Partial (telemetry) | linkage by "latest.json happens to match" | #telemetry-slot |
| Loss/movement semantics | No | prose reasons re-parsed by regex downstream | #prose-protocol |
| Metric | YES (registry + lifecycle) | — healthy exemplar | — |
flowchart LR
EV[Hostile evidence<br/>email + CRM text] --> P1[Extraction prompt<br/>raw <source> framing #delimiter-injectable]
EV --> P2[Narration prompt]
EV --> P3[Editorial prompt]
P1 --> V1[validate: discovery quotes ✔<br/>messages/calls NOT verified #msg-call-atoms-unverified]
P2 --> V2[validate: quotes ✔ (min-len 1)<br/>subject binding ✘ #subject-unbound<br/>dates: dead validator]
P3 --> V3[validate: allowlist from untrusted text<br/>failures silently filtered #editorial-silent-delete]
V1 --> SCORE[Engagement scoring]
V2 --> LEDGER2[(fact ledger)]
V3 --> HTML[Delivered HTML]
AG[Agentic session] -->|graph_search_messages:<br/>ANY address, all mailboxes #agentic-scope| EV
AG -->|evidence log: bare cast, raw PII #agentic-pii| LEDGER2
No per-run cost ceiling exists on any path (#no-cost-ceiling). Injection defenses are asserted by prompt-string containment tests only (#injection-tests-tautological); the CLI backend carries a defense sentence the API backend lacks.
The agreed destination the remediation builds toward.
source: 2026-07-16b-future-state-architecture.md
Status: DRAFT pending Round-1 rebuttals. Each element is annotated with the defect slugs it retires (register maps slugs → F-IDs in Round 3/4). Design incorporates Codex's corrections from the delta discussion: no wholesale DTO moves, typed authorities land one vertical at a time behind dual-run seams, dependency direction is lint-enforced from the first vertical.
flowchart TB
subgraph Domain["src/domain — pure types + policies (NO I/O, NO LLM)"]
IDS[Branded IDs<br/>PartyId ContactId SourceRef RunId WeekKey]
STATUS[StatusAuthority<br/>parse → typed stage+name, ONE membership semantics]
WEEK[UtcWeekWindow / BusinessWeekWindow<br/>distinct types]
MONEY[Money + Unit types<br/>single formatter each]
RECEIPT[EvidenceReceipt<br/>minted from immutable upstream refs only]
ARTIFACT[ArtifactLineage<br/>content-hash chain types]
IDENTITY[Person-node contract<br/>(in flight — the template)]
end
subgraph App["src/application — use cases + PORT interfaces"]
SELECT[Selection]
EVID[Evidence assembly]
BUNDLE[Canonical report document assembly<br/>ONE assemble+enrich core — versioned canonical JSON]
MANIFEST[ReportReleaseManifest<br/>content-hash chain owner]
ACCEPT[Acceptance<br/>verifies chain, gates the DELIVERED artifact]
PORTS[(Port interfaces:<br/>CrmPort MailPort StorePort LlmPort)]
end
subgraph Adapters["adapters (clients/db/storage/llm/ingest, migrated incrementally)"]
OPA[OnePage adapter<br/>response schemas, GET-only proven]
GRA[Graph adapter<br/>tombstones + 410 recovery, host-pinned]
DBA[DB adapter<br/>batch-atomic, D1-compatible]
LLMA[LLM adapter<br/>cost ceilings, one framing]
end
subgraph Present["src/presentation — view DTOs + rendering"]
VIEWS[View builders]
HTML[Renderers]
end
Domain --> App
Domain --> Adapters
Domain --> Present
Adapters -->|implement| PORTS
App --> Present
ROOTS[Composition roots<br/>scripts / Worker entrypoints] --> Adapters
ROOTS --> App
Dependency rules (lint-enforced from the first vertical, per the Round-1 amended set): domain imports no internal package; application imports domain only (never concrete adapters, never presentation internals); adapters import domain + application port types to implement them, never presentation or scripts; presentation consumes the application's canonical report document and imports domain — never concrete adapters or pipeline policy; only composition roots may import both adapters and application/presentation; no new pipeline/engine/db → report/presentation edge; every temporary exception names owner, replacement F-ID, and expiry phase. Retires: #layer-inversion #model-in-presentation #god-module (structurally).
WeeklySalesReport splits three ways (AGREED R2): domain gains its concepts (status, money, unit, week, receipts, identity); the canonical report document (versioned, canonical JSON) lives at application level because acceptance/eval need it; presentation keeps only view DTOs.
sequenceDiagram
autonumber
participant R as ReportBundle core
participant M as Run manifest (content hashes)
participant E as Editorial stage (declared)
participant H as Delivered HTML
participant G as Acceptance gate
participant J as James hard eval
R->>M: profile#hash, bundle#hash, view#hash
R->>E: bundle (typed enrichment coverage —<br/>"unavailable" is REPRESENTED, never empty-rendered)
E->>M: editorial#hash (fail-closed: rejected items → quarantine records)
E->>H: delivered HTML
H->>M: html#hash, evalsnapshot#hash
G->>M: verify FULL chain — refuse on any mismatch
G->>H: gate assertions on the DELIVERED artifact
J->>H: recall/point terms scored against the RENDERED view projection
Note over M: --skip-render legal only when every hash matches.<br/>Retires #eval-lineage #eval-projection #gate-pre-editorial<br/>#render-fork #render-mutates-input #artifact-lineage
One assemble+enrich core; fresh/offline/accept become thin CLIs over it. The offline path renders the same document or explicitly marks sections unavailable(reason) — never silently empty.
flowchart LR
EV[Hostile evidence] --> FRAME[ONE evidence framing<br/>escaped delimiters, both backends]
FRAME --> GEN[Generation<br/>per-run cost ceiling]
GEN --> VAL{Validators — fail closed}
VAL -->|identity: response subject/project MUST match request| OK1
VAL -->|source: every atom's source_id exists in scope<br/>messages+calls included| OK2
VAL -->|quote: length floor + negation guard +<br/>symmetric normalization| OK3
VAL -->|coverage: week-fact dispositions complete| OK4
OK1 & OK2 & OK3 & OK4 --> OUT[Accepted output]
VAL -->|any failure| Q[(Quarantine records —<br/>visible in gate + telemetry)]
JUDGE[LLM judge] -.->|advisory triage ONLY —<br/>cannot override any validator| OUT
AGENT[Agentic tools] -->|scope bound to subject's<br/>evidence set only| EV
Retires: #msg-call-atoms-unverified #subject-unbound #editorial-silent-delete #allowlist-from-untrusted (allowlist derives from typed entities: node catalogue + typed metric values) #agentic-scope #agentic-pii (evidence log schema-validated, PII-redacted at write) #no-cost-ceiling #delimiter-injectable #injection-tests-tautological (fixtures drive a fake model that OBEYS injections; validators must quarantine).
flowchart LR
M[Evidence mention] --> NODE{Node assignment at extraction}
NODE -->|exact CRM identity| CRM[CRM-bound node<br/>onepage_contact_id]
NODE -->|roster evidence bar| STAFF[Staff node<br/>sg-p id / payroll id]
NODE -->|named, no binding| PROV[Provisional node<br/>naming receipts]
NODE -->|role-only| ANON[Anonymous node]
CRM & STAFF & PROV & ANON --> REFS[party_refs in ALL downstream surfaces<br/>narration segments, edges, activity, watch, gate]
REFS --> MERGE[Merge lineage<br/>email = strongest signal<br/>SAME-project collisions raise candidates too]
subgraph Absorbed["Absorbed from this session (cheap now)"]
A1[#subject-unbound → narrative response binds to requested party_id]
A2[#email-collision-split → same-project email conflict = review candidate, never silent]
A3[#gate-name-matching → gate flags take contact IDs]
end
fact_ledger. Retires #ledger-nonatomic.source_evidence becomes revisioned (content-hash versions) so cited text is immutable; re-verification job flags citation drift. Retires the mutable-evidence hole.@removed → explicit tombstone records → evidence suppression + dossier re-evaluation trigger. 410 → checkpointed failure → date-bounded resync with immutable-ID dedupe. Retires #tombstones-dropped #no-410-recovery.[].| Tier | Compares | Authority |
|---|---|---|
| 1 | Canonical deterministic JSON (fixed clock, canonical ordering) — NOT raw HTML bytes | Hard gate |
| 2 | Fact multiset keyed by (subject party, fact type, immutable receipt, durability, time semantics) + supersession links + quarantine/exclusion records | Hard gate |
| 3 | Rendered-view semantic projection (what the reader sees) | Hard gate for acceptance |
| 4 | LLM judge on irreducibly qualitative deltas (re-narration phrasing) | Advisory only |
Known-wrong current behavior enters the baseline as reviewed expected-deltas, never silently immortalized.
One vertical at a time, each: introduce typed authority → dual-run old+new on frozen inputs → diff via the harness → switch the single caller → delete the old path in the same increment → extend dependency lint. Order (from the merged phase plan, agenda item 2): artifact/run lineage → integrity stoppage (ledger, tombstones, 410, payload validation) → status + week → receipt/source → identity absorption → money/unit → render-core strangling → LLM boundary hardening → god-module decomposition last, when it is mostly mechanical.
The audit trail: who argued what, who conceded, and why.
source: 2026-07-16e-discussion-log.md
Date: 2026-07-16 Status: Round 5 merge record; bilateral architecture work complete; Round 6 unused Scope: audit trail for rounds 0–5 and the five joint deliverables under tmp/review/joint/ Execution record: documentation-only session; no source change, migration, generation, render, editorial, eval, acceptance, or live-source run was performed
| Deliverable | Status |
|---|---|
2026-07-16a-current-state-architecture.md | ACCEPTED(R4); Round-2 factual corrections retained |
2026-07-16b-future-state-architecture.md | ACCEPTED(R4); application-port and three-way report-contract amendments retained |
2026-07-16c-joint-findings-register.md | ACCEPTED(R4), with the two Round-5 precision/consistency edits recorded below |
2026-07-16d-remediation-charter.md | ACCEPTED(R4), with the Round-5 containment sentence and consistency edit recorded below |
2026-07-16e-discussion-log.md | COMPLETE(R5) |
flowchart LR
R0[Round 0<br/>Claude critique] --> R1[Round 1<br/>Codex rebuttal + positions]
R1 --> R2[Round 2<br/>Claude concessions + revisions]
R2 --> R3[Round 3<br/>Register + charter drafts]
R3 --> R4[Round 4<br/>Claude adversarial acceptance]
R4 --> R5[Round 5<br/>Merge + audit log]
R5 -. no bilateral issue requires it .-> R6[Round 6<br/>UNUSED]
Claude verified and conceded three high-impact misses from its own review: unverified LLM message/call atoms, unbound narrative subject, and same-project email collision splitting. It charged Codex with four material coverage gaps: acceptance/eval lineage, editorial trust boundary, orchestration, and structural/ranking analysis. It also challenged Codex's no-P0/not-releasable wording, transient red snapshot, duplicate register items, and review method.
Final result: the three unique Codex findings are agreed F-066, F-067 and F-059; all four coverage gaps are accepted with the Round-2 method refinement; the calibration issue is resolved by the two-axis rule; transient lint state was removed as a repository finding; tombstone/lifecycle remain separate F-IDs under one parent; the duplicate D1 guard evidence is merged.
Codex conceded the lineage-flow miss, editorial under-read/“274 read” overclaim, gross orchestration gap, weak architecture triage, context-free transient-red framing, duplicate D1 guard row, and coverage-language weakness. It held against Claude's absolute “file-unit review cannot see flows” and “zero scripts findings” claims, showing actual flow traces and one scripts finding. It resolved the no-P0/not-releasable tension by separating incident severity from release policy.
Codex proposed: the register schema; phases 0–5; four-tier harness; domain/application-port/adapter/presentation ownership; P6 envelope and email-collision gates; integrated vertical delivery; the two-level canonical artifact; and historical repair as a first-class objective.
Final result: the absolute method claims were narrowed; every architecture proposal was accepted in Round 2 with the exact amendments preserved in the final charter.
Claude conceded four critique/process defects: Round-0 non-self-containment, the “zero orchestration findings” absolute, method monocausality, and premature agreement labels. It accepted the register schema, phase plan, harness, ownership model, P6 gates, delivery strategy, canonical artifact, repair objective, tombstone/lifecycle split and D1 merge.
Claude amended severity reachability to include recorded operating practice and corrected 16a's provenance record: lane B regenerated the eval snapshot from delivered 16a JSON and recorded hashes, while the view-projection gap and accept-command sibling artifacts remained.
Final result: Codex accepted the reachability amendment in Round 3. F-001 and F-002 split reader-projection failure from artifact-lineage failure; both are P1 and release-blocking because practice proves reachability while manual precision/SHA work is artifact-specific containment. The 16a caveat is carried to Adam.
Codex produced the 78-row union register and remediation charter. The register separates impact, confidence, reachability, containment, severity and release block; maps all source-review headings and architecture slugs; and assigns every F-ID interim, forward, historical and deterministic verification work. The charter records the accepted severity rule, two-level ReportReleaseManifest, phases 0–5 with mechanical exits, four-tier harness, dependency law, P6 gates, integrated delivery and historical repair.
Final result: accepted in Round 4 subject to two small edits. No architectural redesign was requested.
Claude spot-checked structure, 33 slugs, union coverage, sampled severity fields, baseline discipline and the full charter. It found two defects only:
Claude re-derived F-003, F-005, F-011 and F-058 as P1 + release-blocking under the joint rule; F-057 as P2 with the expanded promote condition; these became A(R4). F-047 remains disputed: Claude says three weeks of manual-review misses make manual checks ineffective containment and therefore holds P0; Codex holds P1 because the failure remains repairable and the actual variant/release path has not been demonstrated. Phase 2 and release policy are identical under either label.
Final result: both Round-4 defects accepted; no Round 6 needed.
Applied exactly the commissioned substantive changes:
src/pipeline/live.ts:2243-2270,2309-2334, the normal-path cache payload, normal ledger remap and focused persistence test; promotion now includes cache positional IDs causing stale-hit/replay divergence.RB=Y row a ratification-blocking charter defect.A(R4).Round-5 note on changes beyond the two substantive edits: three derivative consistency edits were necessary and are flagged here. The register's CH definition was made holder-neutral, its open-items paragraph was updated to remove resolved holds, and charter §11 decision 4 was updated to remove resolved rows. No severity, phase, release block, remediation direction, architecture or Adam decision changed beyond the Round-4 commission. F-063, F-073, F-075 and F-076 retain their previously recorded held labels because Round 4 did not name them among the five status flips.
Neither architect contests Round-4 §§1–2. Round 6 is not invoked. All non-product bilateral items are settled or explicitly preserved as held calibration with identical operational treatment.
| Item | Raised / challenged | Final resolution | Final state |
|---|---|---|---|
| LLM message/call atoms bypass verification | Codex P1-06; Claude R0 verification | Confirmed and sharpened; F-066 P1; P6/Phase-4 gate | CONCEDED by Claude; AGREED |
| Narrative not bound to requested subject | Codex P1-07; Claude R0 verification | Confirmed; F-067 P1; exact envelope gate | CONCEDED by Claude; AGREED |
| Same-project email collision splits identity | Codex P1-11; Claude R0 verification | Confirmed; F-059 P1; visible collision decision added to P6 | CONCEDED by Claude; AGREED |
| Acceptance/eval lineage omitted by Codex | Claude R0 G-1 | Codex conceded miss; F-001/F-002 split; P1 + release-blocking | CONCEDED by Codex; AGREED |
| “File-unit review structurally cannot see flows” | Claude R0 method claim; Codex R1 trace | Too absolute: Codex traced chosen flows but lacked an end-to-end inventory | HELD by Codex, then narrowed and AGREED(R2) |
| Editorial subsystem coverage | Claude R0 G-2 | Codex conceded under-read and verification overclaim; F-005/F-070 | CONCEDED by Codex; AGREED |
| “Zero scripts orchestration findings” | Claude R0 G-3 | P1-12 disproved zero; gross orchestration gap conceded | CONCEDED by both on their overstatements; AGREED refinement |
| Structural/ranking gap | Claude R0 G-4 | Codex conceded flat P1 list under-served triage | CONCEDED by Codex; AGREED |
| No-P0 vs not-releasable tension | Claude R0 §3 | Severity and releaseability separated; wording ambiguity conceded | CONCEDED wording by Codex; rule AGREED |
| Severity rule reachability amendment | Claude R2 | Recorded practice added to reachability; all four P0 conjuncts retained | ACCEPTED by Codex; AGREED(R3) |
| F-001/F-002 severity and 16a precision | R1–R4 | P1 + RB=Y; practice reachable, manual 16a work contains artifact-specific risk | AGREED(R4) |
| Transient red snapshot | Claude R0 §3 | Removed as a repository finding; missing drift/check gates retained | CONCEDED by Codex; AGREED |
| Tombstone vs lifecycle grouping | Claude R0 §4; Codex R1 | Separate F-017/F-019 under one governance parent; no double-count | HELD by Codex with evidence; ACCEPTED by Claude R2 |
| Duplicate D1 guard row | Claude R0 §4 | Production bypass and guard-test evidence merged in F-023 | CONCEDED by Codex; AGREED |
| Caller trace / containment / promote-condition norms | Claude R0 §5 | Adopted; Codex added enumerated/sampled/read/traced vocabulary | ACCEPTED both directions; AGREED |
| Round-0 self-containment | Codex R1 | Claude acknowledged missing seven-item agenda | CONCEDED by Claude |
| Agreement laundering in prewritten future draft | Codex R1 | Claude relabeled elements by actual agreement round | CONCEDED by Claude; corrected |
| Register schema | Codex R1 Agenda 1 | One invariant/F-ID; full evidence/severity/RB/remediation/state fields | ACCEPTED by Claude R2; AGREED |
| Phase plan 0–5 | Codex R1 Agenda 2 | Artifact truth → durable safety → typed authority → render → LLM → decomposition; gates are phase exits | ACCEPTED by Claude R2; AGREED |
| Verification harness | Codex R1 Agenda 3 | Canonical JSON, fact multiset, delivered view, advisory LLM judge | ACCEPTED by Claude R2; AGREED |
| Domain/application/presentation shape | Codex R1 Agenda 4 | Application owns ports/canonical report document; adapters implement; three-way report split | ACCEPTED by Claude R2; AGREED |
| Person-node P6 integration | Codex R1 Agenda 5 | Exact envelope + same-email collision negative gates; hard hold preserved | ACCEPTED by Claude R2; AGREED |
| Delivery strategy | Codex R1 Agenda 6 | Integrated verticals, pure dual-run only, one caller switch, same-slice deletion | ACCEPTED by Claude R2; AGREED |
| Canonical artifact | Codex R1 Agenda 7 | Application canonical JSON + exact final HTML under immutable manifest | ACCEPTED by Claude R2; Adam ratification pending |
| Historical repair objective | Codex R1 addition | Prevention plus census/repair/quarantine/abstention receipts | ACCEPTED by Claude R2; AGREED |
| Division of labor | Claude R0; Codex amendment R1 | Five deliverables; R4 attack; R5 merge; R6 only if required | ACCEPTED both; COMPLETE |
| F-003 render fork severity | Register R3; Claude R4 re-derivation | P1, RB=Y, promote condition retained | AGREED(R4) |
| F-005 editorial severity | Register R3; Claude R4 re-derivation | P1, RB=Y, promote condition retained | AGREED(R4) |
| F-011 allow-drift severity | Register R3; Claude R4 re-derivation | P1, RB=Y, explicit-flag containment retained | AGREED(R4) |
| F-057 positional IDs | Codex Phase-2 correction; Claude R4 attack | Normal ledger remap + current cache payload + conditional fallback; P2 with two promote paths | AGREED(R4) |
| F-058 gate-name severity | Register R3; Claude R4 re-derivation | P1, RB=Y, promote condition retained | AGREED(R4) |
| F-047 CRM status severity | Claude P0 vs Codex P1 | Failure, Phase 2 and RB=Y agreed; effectiveness of manual containment disputed | CLAUDE-HELD P0 / CODEX-HELD P1; Adam only if label required |
| F-063 selection temporal coupling | Register R3 | P1 structural/maintenance risk; phase unchanged | HELD label retained; no operational divergence |
| F-073 agentic scope | Register R3 | P1 and agentic capability block; promote on unattended durable enablement | HELD label retained; no operational divergence |
| F-075 layer inversion | Register R3 | P2 structural; target dependency law agreed | HELD label retained; no operational divergence |
| F-076 god modules/LOC | Register R3 | P2 structural; Phase-5 enforcement agreed | HELD label retained; no operational divergence |
| F-057 cache evidence omission | Claude R4 §1.1 | Added exact cache-payload evidence and stale-hit/replay promotion | CONCEDED by Codex; corrected R5 |
| Later-phase RB containment mapping | Claude R4 §1.2 | Charter §10 now makes missing containment ratification-blocking | CONCEDED by Codex; corrected R5 |
No bilateral architecture item is ESCALATE TO ADAM because the architects could not reason further. The Adam list below contains product authority and governance choices that only Adam can make, plus an optional canonical severity label whose operational treatment is already agreed.
Counts include explicit factual/method/calibration corrections, not ordinary acceptance of a good proposal and not Round-4 label convergence that Claude explicitly said was the joint rule re-deriving its own result.
| Direction | Count | Counted concessions |
|---|---|---|
| Claude to Codex | 7 | R0: missed F-066, F-067, F-059 (3). R2: Round-0 self-containment, “zero orchestration” absolute, method monocause, agreement laundering (4). |
| Codex to Claude | 11 | R1: F-066 sharpening, lineage miss, editorial coverage/274 overclaim, gross orchestration gap, structural triage gap, severity wording ambiguity, transient-red framing, duplicate D1 guard, coverage-language weakness (9). R5: F-057 cache evidence omission and missing mechanical containment mapping (2). |
Not counted as concessions:
The session therefore satisfies Adam's requirement for concessions in both directions without manufacturing false symmetry or using concession count as severity evidence.
ReportReleaseManifest, with editorial as a declared stage.Separate standing constraint, not counted as a fifth architecture decision: person-node P6 remains on HARD HOLD. This session does not approve its generation plan, migration, render, eval or supersession of 16a.
The five requested documents exist. Round 4 accepted the architecture, register and charter subject to edits now applied. No architect contests Round-4 §§1–2. Round 6 is unnecessary. Per Adam's hard constraints, this working session stops here without implementation.