Sales Reporting — The Five Joint Documents

Findings Register

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

Joint Findings Register — Round 3 Draft

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

1. Reading rules

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:

2. Severity amendment and the accepted-week precision record

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.

3. Ranked register

3.1 P1 — release-blocking or capability-blocking

ID / slugFalsifiable failure and supported-path scenarioPrimary code evidence; source reviews; controlImpactConf.ReachabilityEffective containment nowSev.RBChange conditionPhaseResolution
F-001 eval-projectionHard 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-MEFalse external acceptanceHCurrent-practice16a manual precision read only; no repeatable controlP1YPromote 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.0A(R2)
F-002 eval-lineage, gate-pre-editorial, artifact-lineageWeek-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-MEFalse external acceptance and wrong metric receiptHCurrent-practice16a manually SHA-chained from delivered JSON; accept-command siblings remainP1YPromote if a released artifact is shown gated/evaluated against different bytes without manual containment; demote when manifest chain is mandatory.0A(R2)
F-003 render-forkFresh, 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-MEWrong report reaches review or deliveryHCurrentHuman knowledge that offline is non-authoritativeP1YDemote after all callers use one assemble/enrich core and unavailable sections are explicit; promote on proven delivery from the hollow path.3A(R4)
F-004 weekly-schema-boundaryWeekly 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-25Structurally incomplete accepted outputHCurrentManual file selection and downstream incidental failuresP1YDemote after versioned schema parse at every boundary plus negative fixtures.0A
F-005 editorial-silent-delete, allowlist-from-untrustedEditorial 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-120Silent delivered-content loss or unsupported proseHCurrent-practiceManual editorial/read-through; error sidecar covers call failure, not item deletionP1YPromote on accepted material deletion/admission with no human detection; demote after typed authority + quarantine + gate counts.4A(R4)
F-006 fail-open-exitEditorial 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:140Green automation over degraded outputHCurrentHuman notices stderr/sidecarP1YDemote when degraded modes have typed status, nonzero exit, and cannot be accepted.0/4A
F-010 gate-expectationsAcceptance 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-MEGate silently enforces a different contractHCurrent-practiceOperator templates and review notesP1YDemote when a versioned expectation set is hashed into the release manifest and receipt.0A
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-MEUnmarked mixed-engine reportHExplicit supported flagWarning text; human must understand contradictionP1YPromote on a released mixed-version artifact with material divergence; demote after checkpoint lineage or flag removal.0A(R4)
F-012 cross-tenant-env-defaultWeekly 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-112Cross-tenant confidentiality/integrity breachHConditional: multi-project rendererOther projects currently deferred; explicit env can containP1Multi-projectPromote 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/2A
F-017 tombstones-droppedGraph @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:138Stale personal evidence and unfulfillable suppressionHCurrent enrolled syncNone in code; no tombstone fixtureP1Ingest/acceptPromote on a consumed live tombstone that remains in an accepted dossier or deletion request; demote after census + suppression/reevaluation path.1A(R2)
F-018 no-410-recoveryExpired 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:137Permanently stale source scopeHCurrent if token expiresCoverage gate may block final report, but recovery is manualP1Ingest/acceptPromote if a stale folder is hidden green or manually bypassed; demote after explicit recovery fixture and status receipt.1A(R2)
F-019 data-lifecycleRaw 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-105Governance breach across durable corpusHCurrent stored dataOffline/local access and manual deletion onlyP1Hosted exposurePromote for hosted exposure or failed subject deletion; demote only after end-to-end deletion receipts and retention enforcement.1A
F-020 external-payload-schemaGraph/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-25Catastrophically incomplete green reportHCurrentCoverage/count checks catch some, not per-shape corruptionP1YPromote on actual malformed-success release; demote after schemas, fixtures and visible failure status.1A (Codex underweighted item)
F-021 partial-source-greenOptional 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:140Wrong selection and missing lossesHCurrent transient-failure pathSome coverage fields exist but are not release-authoritativeP1YPromote on released partial run; demote after typed coverage is required at rank, report and manifest gates.1A
F-022 d1-interactive-transactionsCore 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:23Hosted runtime failure or lost atomicityHConditional: D1 deploymentLocal libSQL worksP1D1 deployPromote if deployed/fallback loses atomicity; demote after D1-compatible batch/CAS integration tests.1A
F-023 d1-parameter-guardThe 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-MEData-size-dependent runtime failureHCurrent growth path / D1Small current setsP1D1 deployDemote after query construction is chunked and production repository tests assert statement bounds.1A (Codex underweighted item)
F-024 ledger-nonatomicFact 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:23Durable dossier corruptionHCurrent; concurrency partly constrainedFile-backed report writers usually serialized; crash window remainsP1Durable writesPromote if supported concurrent writers, destructive loss, or green acceptance after failure is proven; demote after DB invariant + atomic batch + repair audit.1A(R2)
F-025 person-claim-nonatomicPerson-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:23Identity history/current-state corruptionHCurrent writesWriter lease narrows concurrency, not crash windowP1Person-node P6Demote after atomic lifecycle invariant and protected-copy reconciliation.1/P6A
F-027 metric-import-partialMulti-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-MEPartially replaced authoritative historyHCurrent import pathOperator can restore manually if noticedP1Metric importPromote on unrecoverable published history; demote after generation-level transaction/staging + receipt.1A (Codex underweighted item)
F-028 metric-finalize-emptyFinalize 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:23Missing authoritative metrics after “success”HCurrent malformed/empty candidate pathCaller assumptionsP1Metric acceptanceDemote after non-empty invariant and rollback test.1A
F-029 writer-lock-opt-inSafety 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-MERecurrence of concurrent-write corruptionHCurrent script pathsHuman sequencing; local lease on some rootsP1Durable writesPromote on another corruption incident; demote when the DB adapter makes write safety unavoidable.1A
F-032 migration-driftpnpm 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:148Deployment/data integrity failureHCurrent developmentManual migration awarenessP1YDemote after deterministic drift check is in pnpm check and current drift is reconciled.0/1A
F-034 nextlink-host-pinningPersisted/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:14Credential disclosure and mailbox accessHConditional malformed server/stateMicrosoft response trust; local DB access controlsP1Graph syncPromote on attacker-reachable cursor mutation; demote after scheme/host/tenant validation fixtures.1A
F-041 agentic-evidence-piiAgentic 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:92Uncontrolled sensitive duplicationHAgentic pathLocal filesystem scope onlyP1Agentic enablementPromote for shared/hosted logs or breach; demote after schema, minimum evidence receipts, redaction and lifecycle.1/4A (Codex underweighted item)
F-047 crm-status-authorityStatus 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,25Losses/buyers silently vanish or reclassifyHCurrentAccepted-week manual buyer checksP1YPromote on a released misclassification with no human containment; demote after one typed parser/membership authority and real-shape fixture matrix.2CH (Claude P0)
F-048 prose-protocolLoss/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-25Wrong selection/loss routingHCurrentReal-week human reviewP1YPromote on accepted material reroute; demote after discriminated signal transport and deletion of prose parsers.2A
F-057 source-id-authoritySource 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:101Durable citation fallback can point at wrong evidence; cache identity/replay is position-sensitiveM/H splitConditional ledger fallback; cache payload currentNormal ledger path remaps to immutable message ref; quote text is storedP2Durable fallback/cache replayPromote 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.2A(R4)
F-058 gate-name-matchingReadiness/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:65Enforcement silently checks wrong personHCurrent-practiceManual precision audit and curated unique namesP1YPromote on a green wrong-person accepted gate; demote after typed party IDs in expectations, view and receipt.2/P6A(R4)
F-059 email-collision-splitNew 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:102Persistent identity fragmentation or wrong auto-merge pressureHCurrent duplicate CRM shapeP6 migration has review queues; no current same-project gateP1Person-node P6Demote after collision fixtures, visible decision state, and existing-data audit.2/P6A(R0/R2; Codex underweighted item)
F-066 llm-message-call-unverifiedMessage/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:119Fabricated engagement stateHCurrent extractionMajority vote and timestamp lookup onlyP1LLM scoringDemote after every atom resolves immutable source and typed semantics before scoring.4/P6A(R0; Codex underweighted item)
F-067 subject-unboundNarrative 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-119Wrong-person durable narrativeHCurrentEvidence-scope checks and human reviewP1Narration/P6Promote on accepted cross-subject output; demote after exact typed envelope equality and negative fixtures.4/P6A(R0; Codex underweighted item)
F-068 quote-semanticsNormalized 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:119False cited fact with opposite meaning/authorHCurrentDownstream/manual plausibility reviewP1LLM/durable factsPromote on material accepted inversion; demote after clause/negation/author policy and adversarial fixtures.4A
F-069 delimiter-injectable, injection-tests-tautologicalRaw 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-LLMEvidence steers scope/policyHCurrent prompt pathPrompt prose and post-validation, itself incompleteP1LLM pathsPromote on demonstrated validator escape reaching durable output; demote after one framing contract and behavioral injection suite.4A
F-070 llm-silent-disappearanceMalformed/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:140Missing facts and false completenessHCurrentSome buyer quarantine paths; not comprehensiveP1YPromote on accepted material omission; demote when all rejection paths emit bounded retry/quarantine receipts required by gate.4A
F-072 no-cost-ceilingFull-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:121Runaway spend and unbounded overnight workHCurrent full-corpus runHuman launch discipline and concurrency capsP1Full-corpus LLMDemote after mandatory run budget, reservation/accounting, terminal budget status and tests.4A
F-073 agentic-scopeAgentic 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:102Cross-person confidentiality and dossier contaminationHAgentic pathOperator/agent prompt; path not canonical weekly verticalP1Agentic enablementPromote to P0 if enabled for unattended durable production writes; demote after subject-scoped receipt capability and denial fixtures.4CH (Claude P0)

3.2 P1 — material but not a universal release blocker

ID / slugFalsifiable failure and scenarioPrimary evidence; source reviews; controlImpactConf.Reachability / containmentSev.RBChange conditionPhaseResolution
F-007 artifact-namingFour 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-SUPWrong revision called currentHCurrent; human file trail containsP1Y via F-002Demote after manifest identity makes filenames non-authoritative and writers refuse collisions.0A
F-008 telemetry-slotEvery 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-SFFalse/incomplete run historyHCurrent; operator notes partly containP1NDemote after run-ID-addressed immutable records and required artifact link.0A
F-009 render-mutates-inputRenderer 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-OPSHistorical evidence changes or artifact set tearsHCurrent; git/hash diffs sometimes exposeP1Y via F-002Demote after immutable inputs and manifest commit protocol.0/3A
F-013 cli-drift21 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-MEWrong run configurationHCurrent; recorded commands partly containP1Capability-specificDemote after one typed CLI/config schema and parser conformance tests.0/2A
F-014 acceptance-write-outside-lockAcceptance 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-MEMetric/state raceHCurrent; human sequencingP1Metric acceptanceDemote when all writes acquire adapter-level fenced lease through final commit.1A
F-015 run-failure-observabilityPre-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:140Hung/traceless operationsHCurrent; human status checksP1NDemote after terminal signal handling, phase deadlines and append-only failure receipt.1A
F-026 identity-create-nonatomicNew 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-DGOrphan identity stateHCurrent; retry may reuse some stateP1Person-node P6Demote after atomic idempotent creation and orphan census/repair.1/P6A
F-030 sqlite-pragmas-swallowedWAL/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-MELocal corruption riskHCurrent local; snapshots/lease containP1Local writesPromote on recurrence linked to missing pragma; demote after fail-closed verification.1A
F-031 mutable-source-evidenceCited 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:101Historical citations cease to be reproducibleHCurrent writes; quote copies partly containP1Durable dossierDemote after content-hash versions and drift audit/backfill.1/2A
F-033 sync-unit-contractSync 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:136Duplicate or invisible partial syncHCurrent; Graph lease/cursor supplies partial structureP1IngestDemote after one typed unit receipt and restart/idempotency tests.1A
F-036 retry-driftOnePage 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:139Rate-limit amplification and long false-empty runsHCurrent; limited concurrency elsewhereP1NDemote after one bounded typed retry policy and deterministic clock tests.1/2A
F-039 operator-pii-outputCoverage/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:149PII in logs/terminalsHCurrent diagnostics; local/operator scopeP1Shared logsPromote for shared/CI output; demote after value/policy-based formatter gate over actual scripts.1A
F-042 agentic-stream-integrityAgentic 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-DGUnreliable audit/provenanceHAgentic path; operator scopeP1Agentic enablementDemote after bounded per-session stream, isolated writer and concurrency tests.1/4A
F-044 stable-cache-identityStable-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-TESTStale narration/scoring reused as currentHCurrent cache path; manual version disciplineP1Cache-backed reportPromote on accepted stale replay; demote after exhaustive typed material-input contract and mutation table.2A
F-049 raw-record-regex-classifierWhole 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-25Evidence/buyer silently omitted or misclassifiedHCurrent; manual buyer reviewP1Capability-specificDemote after typed source adapters and explicit predicates with real-shape counterexamples.2A
F-050 error-string-controlError 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-25Wrong stop/quarantine behaviorHCurrent failures; tests may cover phrases onlyP1NDemote after typed error taxonomy crossing module boundaries.2A
F-051 regex-minted-factsOptional 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-LLMFalse mandatory fact in narrativeHCurrent matching text; human reviewP1LLM reportPromote on accepted materially false fact; demote after typed event/source rules and negative fixture corpus.2/4A
F-053 activity-semantics-driftConnected-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-CSFalse CRM-health claimHCurrent; manual reviewP1CRM healthDemote after shared typed activity outcome authority and cancellation fixtures.2A
F-054 week-dual-semanticsUTC 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-25Weekly reproducibility/correctness skewHCurrent edge dates; manual reconciliationP1NDemote after distinct branded windows, one conversion boundary and timezone edge fixtures.2A
F-055 money-proseMultiple 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-CSWrong totals or commercial-value leakageHCurrent; editorial typed-value patch partially containsP1Report correctnessDemote after typed Money/Stage authority and formatter/parser deletion.2A
F-056 unit-regexesUnit 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-CSWrong product identity in reportHCurrent uncommon labels; human reviewP1NDemote after typed project/tower/unit key and round-trip fixtures.2A
F-063 selection-temporal-couplingSelector 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-23Loss/watch routing silently skipped after reorderHCurrent maintenance risk; existing order worksP1NPromote on observed production misorder; demote after explicit pure stage pipeline and parity fixtures.2/5CH (Claude P0 structural)
F-064 derived-prose-as-quoteMachine-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:119Apparent citation has no source spanHCurrent at-risk evidence; synthetic ID visible internallyP1CRM health/dossierDemote after typed derived assertion distinct from EvidenceReceipt.2A

3.3 P2 — structural, local, test-quality, or conditionally reachable

ID / slugFalsifiable defect and scenarioPrimary evidence; source reviews; controlConf. / containmentSev.RBPromotion or closure conditionPhaseResolution
F-016 presentation-fail-openCoverage 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-CSH; reader may noticeP2NPromote on material delivered omission; close with explicit unavailable/degraded states.3A
F-035 pagination-boundsGraph/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:61H; remote correctness trustedP2NPromote on observed loop/resource exhaustion; close with host-pinned seen-set/page/time budget tests.1A (Codex underweighted item)
F-037 db-hot-path-boundsWhole-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-CSM/H; current scale containsP2NPromote at measured SLA/resource breach; close with indexes, bounded queries and benchmarks.1/5A
F-038 diag-migrates-dbRead-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:23H; lock/snapshot contains data riskP2NClose with read-only DB mode and explicit migration-only roots.1A
F-040 secret-scan-narrowSecret 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:145H; git review adds weak containmentP2NPromote on leaked secret; close with entropy/provider patterns and fixture suite.1A
F-043 graph-mutation-guardGraph 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:59H; current app permission/use narrows pathP2Graph productionPromote on reachable unauthorized mutation; close with capability split and recording-fetch enumeration.1A
F-045 aux-write-fail-openStable 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:140H; primary report may still existP2NPromote when correctness depends on omitted state; close with typed criticality and visible status.1/2A
F-046 persistence-edge-racesCandidate 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:23H; mostly repairable and uncommonP2NPromote on durable ambiguity; close with atomic upsert/partial indexes and concurrent tests.1A
F-052 tag-taxonomyBusiness 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-25H; current vocabulary stable/manual reviewP2NPromote on live label change or released omission; close with typed project-owned tag authority.2A
F-060 unbranded-identifiersContact, 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-11H; runtime validation at some seamsP2NPromote when an actual cross-ID flow is traced; close incrementally with branded IDs at boundaries.2/5A
F-061 internal-domain-driftInternal/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-25H; current known domainsP2Multi-projectPromote on misclassification; close with project-owned typed domain policy.2A
F-062 selection-bounds-rankingSingle-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-SFH; current book scale/concurrency caps elsewhereP2NPromote on rate-limit/cost incident; close with explicit budgets and deterministic ranking types.2/4A
F-065 presentation-policy-duplicationView/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:10H; current fixturesP2NPromote on cross-layer disagreement; close with application document fields and no presentation policy imports.2/3A
F-071 dead-validatorsDate/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-120H; manual reviewP2NPromote on material accepted violation; close with input-vs-output validation and one typed disposition authority.4A
F-074 narration-vertical-driftnarrative.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-SUPH; canonical weekly path limits agentic reachP2NPromote on divergent durable output; close after boundary hardening and one application use case.4/5A
F-075 layer-inversion, model-in-presentationCanonical 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:23H; structural reach, no standalone incidentP2NPromote only when a material failure is traced specifically to the cycle; close with application ports, domain concepts and dependency lint.2/5CH (Claude P0 structural)
F-076 god-moduleweekly-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-23H; maintenance/reviewability impactP2NPromote only with a concrete reachable failure; close after typed seams exist, decomposition, LOC/dependency check.5CH (Claude P0 structural)
F-077 supersession-hygieneDead 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-SUPH; manual invocation/config confusionP2NPromote on use in accepted flow; close with caller inventory and same-slice deletion/owned exception.5A
F-078 false-assurance-testsPrompt-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-MEH; manual lane reviews compensate unevenlyP2Y through mapped F-IDsIndividual mapped failures carry promotion; close only when phase gates exercise production boundaries and recorded-output replay.0–5A

4. Remediation packets

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-IDsInterim containmentForward preventionHistorical repair/backfillDeterministic verification
R0-A: artifact truth F-001–F-004, F-007–F-010, F-016No --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-015Ban 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-006Treat 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-021Block 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-046Single 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-043Explicit 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-045Invalidate 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-053Freeze 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-065Record 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-074No 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-078No 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.

5. Diagram slug mapping

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 slugF-ID
#eval-projectionF-001
#eval-lineage, #gate-pre-editorialF-002
#artifact-lineageF-002, F-007
#render-forkF-003
#editorial-silent-delete, #allowlist-from-untrustedF-005
#gate-name-matchingF-058
#render-mutates-inputF-009
#allow-drift-spliceF-011
#telemetry-slotF-008
#tombstones-droppedF-017
#no-410-recoveryF-018
#ledger-nonatomicF-024
#email-collision-splitF-059
#status-two-semanticsF-047
#prose-protocolF-048
#source-id-grammarsF-057
#week-dual-semanticsF-054
#money-proseF-055
#unit-regexesF-056
#msg-call-atoms-unverifiedF-066
#subject-unboundF-067
#dead-validatorsF-071
#delimiter-injectable, #injection-tests-tautologicalF-069, F-078
#agentic-scopeF-073
#agentic-piiF-041
#no-cost-ceilingF-072
#layer-inversion, #model-in-presentationF-075
#god-moduleF-076

6. Source-review coverage map

This appendix proves union coverage without duplicating findings as votes.

Codex review

Source IDsRegister IDs
X-P1-01, X-P1-02F-017, F-018
X-P1-03, X-P1-04, X-P2-06F-022, F-023
X-P1-05F-020
X-P1-06–X-P1-09F-066–F-069
X-P1-10, X-P2-01F-024, F-026
X-P1-11F-059
X-P1-12, X-P1-13F-004, F-021
X-P1-14, X-P1-15F-019, F-041
X-P1-16, X-P1-17, X-P1-18F-072, F-033, F-027
X-P2-02–X-P2-05F-045, F-035, F-042, F-030
X-P2-07–X-P2-10F-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.

Claude appendices

Source IDsRegister IDs
CA-P0-1F-002, F-003; CA-P0-2 → F-005/F-070; CA-P0-3 → F-076
CA-P1-1..11F-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..12F-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..4F-076, F-048, F-048/F-053, F-063
CB-P1-1..14F-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..12F-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-1F-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..5F-074/F-076, F-069, F-072, F-072, F-069
CD-P0-1F-024; CD-P1-1..8 → F-022, F-018, F-017, F-029, F-032, F-028, F-031, F-025
CD-P2-1..9F-043, F-034, F-044, F-037, F-033, F-036, F-019, F-068, F-039
CD-P3 itemsF-046, F-035, F-045
CE-P0-1..3F-003, F-002, F-011
CE-P1-4..13F-010, F-029, F-014/F-030, F-008, F-015, F-012, F-009, F-007, F-006, F-013
CE-P2-14..20F-009, F-011, F-020, F-004, F-038, F-040, F-077
CF-P0-1..4F-068, F-069/F-078, F-017/F-018/F-078, F-032/F-078
CF-P1-1..8F-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..4F-069/F-078, F-017/F-018/F-078, F-047/F-078, F-047/F-078
CG-1.1..1.11F-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-4F-075, F-003, F-001/F-002, F-073/F-074, no defect (deliberate layering), F-076

7. Register-level decisions still open

  1. Held calibration: F-047 remains Claude-held at P0 versus Codex P1 because Claude rejects manual buyer checks as effective containment. F-063, F-073, F-075 and F-076 retain their previously recorded held labels; release blocks and phases remain as stated, so no safety action depends on winning those label arguments.
  2. Positional evidence precision — AGREED(R4): F-057 records normal-path ledger remapping, current positional cache payloads and fallback reachability separately at P2 with explicit promote conditions.
  3. Adam decisions about the canonical artifact and 16a status live in the charter; this register does not silently resolve product authority.

Remediation Charter

The controlling specification: severity rules, phases, gates, and the release-blocker doctrine.

source: 2026-07-16d-remediation-charter.md

Remediation Charter — Round 3 Draft

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

1. Mandate, outcome and non-goals

The program outcome is not “fewer regexes” or “smaller files.” It is a weekly-report system in which:

  1. the exact delivered report is content-bound to the inputs, code/config/schema, coverage, editorial state, eval projection, gates and acceptance record that certify it;
  2. core concepts have one typed authority and can no longer be redefined through prose, filename, prefix, env, display-name or call-order conventions;
  3. external and LLM inputs fail closed into visible bounded states rather than valid-looking emptiness;
  4. durable facts, identity, evidence and metrics have D1-compatible atomic lifecycle invariants;
  5. forward prevention is paired with a receipt-producing audit and repair/quarantine of state already made stale, split, ambiguous or unverifiable; and
  6. structural decomposition is performed only after trustworthy behavioral rulers and typed seams exist.

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.

2. Severity, releaseability and disagreement discipline

2.1 Controlling rule — AGREED(R2), Claude amendment ACCEPTED(R3)

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.

2.2 Release policy

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.

3. Canonical artifact and release manifest — AGREED(R2), Adam ratification required

The canonical artifact is deliberately two-level:

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.

3.1 ReportReleaseManifest minimum contract

AreaRequired fields/invariants
Identitymanifest ID/version; typed project ID; typed business-week window and timezone; run ID; predecessor/supersession ID
Build provenancecode SHA plus dirty-tree/content-patch status; config hash; schema/migration signature; canonicalizer/view/renderer/editorial/validator/gate/eval versions
Source authorityenrolled source-unit IDs, cursors/checkpoints, completeness/failed/quarantined counts, immutable coverage-receipt hash
Chain nodesprofile input, canonical document, base view, editorial input/output/status, final view, HTML, eval projection; content hash and schema version for each
LLM statemodel/backend, prompt/contract version, recorded output hash, budget receipt, accepted/retried/quarantined counts; no raw PII in the manifest
Acceptancepersisted expectation-set hash, hard-gate result hashes, metric snapshot/receipt hash, operator/manual approval where required
Immutabilityappend-only release/acceptance records; a correction creates a successor and preserves predecessor lineage

3.2 Acceptance invariants

Acceptance must mechanically prove all of these:

  1. every manifest node exists, schema-validates and matches its hash/signature;
  2. the final view is the only source of the hard eval projection and that projection contains no non-visible terms;
  3. the readiness gate consumes the same final view/HTML whose hash is recorded;
  4. the editorial state is explicit and every rejected item has a visible quarantine disposition;
  5. source coverage is complete for the declared scope; unknown/failed scopes cannot claim green;
  6. the expectation set is persisted, versioned and hashed—not reconstructed from shell history;
  7. the authoritative metric receipt is created from the same manifest chain inside the protected write scope; and
  8. --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.

4. Target ownership and dependency law — AGREED(R2)

WeeklySalesReport does not move wholesale into domain. It is split three ways:

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:

  1. domain imports no internal package;
  2. application imports domain/shared schemas only—never concrete clients/db/storage/LLM/presentation;
  3. adapters never import presentation/scripts and implement application-owned ports;
  4. presentation never imports concrete adapters or pipeline policy;
  5. only composition roots may import both adapters and application/presentation;
  6. no new pipeline/engine/db -> report/presentation edge; and
  7. every temporary exception names owner, F-ID, replacement slice and expiry phase.

5. Verification constitution — AGREED(R2)

The harness has four non-substitutable tiers:

TierComparatorGate authority
1. Deterministic coreCanonical 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 lifecycleCanonical multiset, keyed by typed subject, fact type, immutable receipt, durability and time semantics; compare multiplicity, ownership, supersession, quarantine, exclusions and coverage.Hard
3. Delivered viewSemantic projection/DOM of exactly what the reader sees, including section presence and James-required terms.Hard for acceptance
4. Stochastic qualityRecorded 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.

6. Phase plan 0–5

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

Phase 0 — Containment, artifact truth and trustworthy rulers

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:

  1. versioned schemas reject malformed profile, weekly, view, editorial, eval, expectation and manifest artifacts;
  2. a ReportReleaseManifest binds the complete chain in §3 and acceptance refuses every missing/mismatched node;
  3. hard eval derives only from the final reader view and a negative fixture proves an internal-only term cannot pass;
  4. gate and eval receipts name the exact final-view and HTML hashes;
  5. fresh/offline/editorial/accept callers, on frozen inputs, either produce the same canonical document or represent typed unavailable(reason); parity fixtures cover all seven formerly dropped sections and james_mentions;
  6. --skip-render, drift resume, sibling week slots, stale defaults and wrong-project env all fail their negative tests; exact checkpoint/config signatures are persisted;
  7. expectation sets, telemetry and metrics are run-ID-addressed and immutable; no latest.json authority;
  8. pnpm check includes schema/migration drift, architecture baseline, source-review/register coverage and the Phase-0 harness; and
  9. a historical lineage inventory gives every accepted 14d/15a/15b/16a artifact one of verified, 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.

Phase 1 — Stop durable damage and false emptiness

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:

  1. @removed and 410 fixtures traverse the full state machine: checkpoint, tombstone/recovery, raw-evidence suppression, dossier reevaluation, coverage receipt and safe cursor advance;
  2. malformed status-200 Graph/OnePage payloads and per-contact/store failures produce typed red/partial state—never {}, [] or empty-body success;
  3. every sync unit has run ID, idempotency key, retry count and checkpoint; page/retry/time/host budgets are tested;
  4. fact, person-claim, identity and metric lifecycles are batch/CAS atomic under D1 constraints and database indexes enforce the one-current/non-empty successor invariants;
  5. production repository integration proves D1 parameter bounds; helper-only tests do not count;
  6. every write path obtains the fenced lease inside the adapter; crash/signal tests cannot bypass it by script import;
  7. source evidence is content-versioned, citations are immutable, and citation-drift audit is deterministic;
  8. retention/correction/deletion propagates across DB, object store, caches, reports and logs with an auditable receipt;
  9. Graph read capability is host-pinned and mutation capability is mechanically absent from report/sync composition;
  10. actual smoke/diag formatters pass value/policy redaction; shared output contains no names, emails, subjects or raw quotes; and
  11. protected-copy census/repair reports exact duplicate-current, missing-successor, orphan, collision, stale-source, partial-metric and lifecycle counts; every row is repaired, quarantined or explicitly abstained.

Phase 2 — Introduce typed authorities one vertical at a time

Scope: F-047–F-065 plus artifact/run/receipt types begun in Phase 0 and person-node integration gates below.

Vertical order:

  1. artifact/run and immutable EvidenceReceipt;
  2. CRM status/activity outcome/tag/error authorities;
  3. UTC vs business-week authority;
  4. person-node publication/gate integration, including same-email collision policy;
  5. Money/stage and Unit/product authority; and
  6. typed movement/loss/fact-candidate transport replacing prose protocols.

Every vertical follows the same exit gate:

  1. introduce the constructor/schema/value object and negative fixtures;
  2. dual-run only its pure/deterministic calculation on frozen inputs—never duplicate live Graph/OnePage/LLM effects;
  3. compare canonical JSON, fact multiset and reader-view projection; review every expected delta;
  4. switch exactly one composition-root caller;
  5. delete the old string authority, parser and its tests in the same increment;
  6. extend dependency/forbidden-import lint before the next vertical; and
  7. audit/recompute historical rows affected by the retired authority, with receipt-backed repair or abstention.

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.

Phase 3 — Strangle report assembly/render forks

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:

  1. all entrypoints call the same application service and cannot reimplement enrichment/wiring;
  2. one frozen fixture produces canonical JSON identity across entrypoints; intentional option deltas are typed fields;
  3. deterministic render is pure: it never mutates inputs and artifact-set publication cannot tear;
  4. final-view semantic projection equals DOM/readable content, including section presence and James terms;
  5. editorial state is in the manifest and pre-editorial output cannot be accepted when editorial is requested;
  6. old assemble/render paths, empty placeholders, stale defaults and compatibility fields are deleted in the caller switch or carry a named, expiring STATE.md exception; and
  7. exact HTML hash proves delivered artifact identity; semantic tiers—not permanent HTML snapshots—prove behavior.

Phase 4 — Harden the LLM boundary

Scope: 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:

  1. every LLM response exactly matches requested typed ProjectId, PartyId, profile unit and allowed node catalogue;
  2. every atom resolves an in-scope immutable receipt and verifies quote span, direction/outcome, author/ownership and allowed durability before scoring or persistence;
  3. negation, reply-author, banner/entity, minimum-length and non-contiguous-splice fixtures have explicit policies;
  4. fake models that obey hostile instructions at every prompt site are rejected/quarantined by app validators; prompt sentence containment is not accepted as evidence;
  5. every invalid item is accepted, retried, quarantined or dead-lettered with visible counts; none silently vanishes;
  6. per-run call/token/cost/concurrency budgets reserve and account usage; exhaustion is a typed terminal status;
  7. agent tools receive a subject-scoped evidence capability, cannot search arbitrary addresses/mailboxes, and write a schema-valid minimum/redacted evidence receipt; and
  8. recorded real-shape outputs replay deterministically; an LLM judge is advisory and cannot waive a hard control.

Phase 5 — Decompose god modules and lock the structure

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:

  1. dependency law in §4 is enforced in pnpm check; migration allowlist reaches zero or every remainder has Adam, owner, F-ID and expiry;
  2. source files comply with the 500-LOC rule except declarative/generated/static-fixture exceptions listed in a reviewed allowlist with a shrink target;
  3. live.ts, weekly-report.ts, repositories, view/renderer and giant tests are split by use case/invariant, not by arbitrary line ranges;
  4. embedded untyped renderer JS/CSS and duplicated escapers/formatters become separately linted/tested presentation assets or deliberately bounded templates;
  5. all superseded flags, scripts, fields, parsers and paths are deleted or have the sole documented fallback allowed by the supersession protocol; and
  6. the four-tier harness, production repository/client boundary tests and historical repair receipts remain green after each deletion.

7. Person-node P6 integration gates — AGREED(R2), execution still on HARD HOLD

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:

  1. Narrative envelope binding: before person refs, facts or prose can attach, generated 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.
  2. Same-project email collision: exact email is a strong candidate signal, not unconditional cardinality proof. A same-project uniqueness conflict must create a visible collision decision. Auto-merge is permitted only when the approved policy proves cardinality and no contradictory stable external binding. Negative fixtures: duplicate CRM records for one human/address and two genuine household contacts sharing one address.

P6 may not exit until all existing plan gates and these additional gates are true:

The last clause prevents P6 from laundering the known acceptance defect while also avoiding an unapproved rewrite of the active lane.

8. Delivery strategy and branch discipline — AGREED(R2)

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:

  1. freeze redacted inputs, fixed clock/IDs and recorded model outputs;
  2. add the typed authority/new pure path behind one compatibility seam;
  3. dual-run only pure deterministic work;
  4. compare all applicable harness tiers and review named expected deltas;
  5. switch exactly one composition-root caller;
  6. delete the old path/authority/tests in the same increment;
  7. add dependency/size/negative gates before the next slice; and
  8. run the associated historical census/repair or record authoritative abstention.

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.

9. Containment and historical repair objective — AGREED(R2)

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 familyRequired censusAllowed dispositionPrevent-recurrence gate
Accepted artifacts/runsHash/command/editorial/eval/metric/expectation lineage for 14d–16averified; projection-weak; sibling-receipt; unknown; superseded; later reacceptedmanifest-chain rejection tests
Graph evidenceconsumed tombstones/expired cursors where reconstructable; row/blob/cursor coveragesuppress + reevaluate; bounded resync; quarantine; authoritative abstentiontombstone/410 end-to-end fixtures
Fact/person lifecyclesduplicate current, missing successor/back-pointer, orphan person, merge cycle, same-email collisionatomic repair with supersession lineage; review candidate; abstainDB unique/CAS/crash tests
Source citationsmutable revisions, positional/fallback IDs, unresolved receipt/quote/ownerbind immutable revision; retract/quarantine; never guess referentreceipt constructor + reorder/drift test
Metricspartial import generations, empty finalization, sibling acceptance receiptsrestore/re-finalize from authoritative input with generation receipt; quarantineatomic generation/failure injection
Caches/projectionsincomplete fingerprints, corrupt payloads, ambiguous name-only cachesinvalidate; deterministic upgrade; selective approved regeneration; legacy-onlyexhaustive fingerprint/stable replay
PII/logs/artifactsraw agentic evidence, bodies beyond policy, names/emails/subjects/quotes in outputsredact/delete per policy; document non-deletable audit residue; rotate secrets if exposedactual-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.

10. Interim operating policy before Phase 0 — requires Adam ratification

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.

  1. do not use --skip-render for acceptance;
  2. never call offline output a production preview;
  3. run the readiness gate on the exact delivered editorial artifact set;
  4. regenerate eval snapshots from the delivered JSON and record JSON/view/HTML/snapshot/code/fixture hashes;
  5. manually compare hard James terms against the delivered view, not lineSummary alone;
  6. treat post-editorial HTML as manually approved by Adam, not as inheriting automated green;
  7. persist the full expectation flags/values and command beside the verdict;
  8. ensure the authoritative metric receipt is explicitly identified as delivered-chain or sibling-render; do not blur them; and
  9. do not run person-node P6 generation or any long content run without its existing explicit approval.

This policy contains risk; it does not make F-001/F-002 resolved.

11. Decisions required from Adam

  1. Ratify the two-level canonical artifact. Approve canonical application JSON plus exact final delivered HTML under ReportReleaseManifest, including editorial as a declared stage. Both architects agree; product authority remains Adam's.
  2. Choose 16a disposition. Either:
  3. keep 16a accepted now with the exact caveat “manually provenance-chained and precision-reviewed; automated eval projection is broader than the delivered view; accept-command metric/sibling artifacts are outside the delivered chain,” then require automatic reacceptance at Phase-0 exit; or
  4. suspend accepted status until manifest-based reacceptance.

Codex agrees with Claude's recommendation: keep with caveat now, mandatory reacceptance at Phase-0 exit.

  1. Ratify the interim operating policy in §10. Without it, weekly cadence has no agreed containment before Phase 0.
  2. Severity labels only if operationally necessary. F-047 remains Claude-held at P0 versus Codex P1 because Claude rejects the manual buyer checks as effective containment. F-063, F-073, F-075 and F-076 retain their previously recorded held labels. Their remediation/release gates do not depend on the label; Adam need decide only if governance reporting requires one canonical label.
  3. P6 approval remains separate. This charter adds gates but does not approve the generation plan, migration, render, eval or supersession of 16a.

12. Definition of program completion

The remediation program is complete only when:

Current-State Architecture

How the system actually works today, as jointly established.

source: 2026-07-16a-current-state-architecture.md

Current-State Architecture (AS-IS) — DRAFT (Round 2, Claude)

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.

1. Container view (C4 level 2, AS-IS)

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.

2. Package dependency view (runtime vs type-only edges distinguished)

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-28profile-model.ts:1-27).

3. Sequence: weekly pipeline end-to-end (AS-IS)

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

4. Sequence: the false-acceptance path (AS-IS, the release blocker)

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.

5. Concept-ownership table (AS-IS)

ConceptTyped authority today?Where identity actually livesSlug
PersonPartial (person-node work in flight)4+ name matchers; gate uses display-name strings#gate-name-matching
CRM statusVocabulary yes; matching NOsubstring in 5 modules, exact-match in 1#status-two-semantics
Source/receipt IDNo3 grammars + positional prompt IDs (remapped on the normal path; fallback representable)#source-id-grammars
WeekType exists, semantics don'tUTC and NZ windows share one type; 20+ .slice(0,10)#week-dual-semantics
MoneyNo4 formatters, format-then-parse round trips, regex redaction#money-prose
Unit labelNo5 regexes, 2 grammars#unit-regexes
Artifact/revisionNofilename conventions, hand-allocated rev letters, week-keyed eval slot#artifact-lineage
RunPartial (telemetry)linkage by "latest.json happens to match"#telemetry-slot
Loss/movement semanticsNoprose reasons re-parsed by regex downstream#prose-protocol
MetricYES (registry + lifecycle)— healthy exemplar

6. LLM trust boundary (AS-IS)

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.

7. What is healthy (kept in future state)

Future-State Architecture

The agreed destination the remediation builds toward.

source: 2026-07-16b-future-state-architecture.md

Future-State Architecture (TO-BE) — DRAFT (Round 2, Claude)

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.

1. Target layering (C4 level 2, TO-BE)

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.

2. Artifact lineage & acceptance (TO-BE)

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.

3. LLM trust boundary (TO-BE)

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).

4. Identity spine (TO-BE — the in-flight person-node work, extended)

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

5. Persistence integrity (TO-BE)

6. Verification harness (TO-BE) — AGREED (Round 2), per Codex's Round-1 four-tier text

TierComparesAuthority
1Canonical deterministic JSON (fixed clock, canonical ordering) — NOT raw HTML bytesHard gate
2Fact multiset keyed by (subject party, fact type, immutable receipt, durability, time semantics) + supersession links + quarantine/exclusion recordsHard gate
3Rendered-view semantic projection (what the reader sees)Hard gate for acceptance
4LLM judge on irreducibly qualitative deltas (re-narration phrasing)Advisory only

Known-wrong current behavior enters the baseline as reviewed expected-deltas, never silently immortalized.

7. Migration path (how AS-IS becomes TO-BE without a big bang)

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.

Discussion Log

The audit trail: who argued what, who conceded, and why.

source: 2026-07-16e-discussion-log.md

Joint Architecture Working Session — Discussion Log

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

1. Final deliverables

DeliverableStatus
2026-07-16a-current-state-architecture.mdACCEPTED(R4); Round-2 factual corrections retained
2026-07-16b-future-state-architecture.mdACCEPTED(R4); application-port and three-way report-contract amendments retained
2026-07-16c-joint-findings-register.mdACCEPTED(R4), with the two Round-5 precision/consistency edits recorded below
2026-07-16d-remediation-charter.mdACCEPTED(R4), with the Round-5 containment sentence and consistency edit recorded below
2026-07-16e-discussion-log.mdCOMPLETE(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]

2. Round index

Round 0 — Claude critique of Codex review

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.

Round 1 — Codex rebuttal and opening architecture positions

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.

Round 2 — Claude rebuttals, concessions, and diagram revisions

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.

Round 3 — Codex register and charter drafts

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.

Round 4 — Claude attack on register and charter

Claude spot-checked structure, 33 slugs, union coverage, sampled severity fields, baseline discipline and the full charter. It found two defects only:

  1. F-057 omitted the agreed normal-path stable-cache positional-ID payload evidence and the corresponding promotion condition.
  2. Charter §10 did not mechanically require interim containment on later-phase release blockers.

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.

Round 5 — Codex merge pass

Applied exactly the commissioned substantive changes:

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.

Round 6 — unused

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.

3. Item-by-item final resolution ledger

ItemRaised / challengedFinal resolutionFinal state
LLM message/call atoms bypass verificationCodex P1-06; Claude R0 verificationConfirmed and sharpened; F-066 P1; P6/Phase-4 gateCONCEDED by Claude; AGREED
Narrative not bound to requested subjectCodex P1-07; Claude R0 verificationConfirmed; F-067 P1; exact envelope gateCONCEDED by Claude; AGREED
Same-project email collision splits identityCodex P1-11; Claude R0 verificationConfirmed; F-059 P1; visible collision decision added to P6CONCEDED by Claude; AGREED
Acceptance/eval lineage omitted by CodexClaude R0 G-1Codex conceded miss; F-001/F-002 split; P1 + release-blockingCONCEDED by Codex; AGREED
“File-unit review structurally cannot see flows”Claude R0 method claim; Codex R1 traceToo absolute: Codex traced chosen flows but lacked an end-to-end inventoryHELD by Codex, then narrowed and AGREED(R2)
Editorial subsystem coverageClaude R0 G-2Codex conceded under-read and verification overclaim; F-005/F-070CONCEDED by Codex; AGREED
“Zero scripts orchestration findings”Claude R0 G-3P1-12 disproved zero; gross orchestration gap concededCONCEDED by both on their overstatements; AGREED refinement
Structural/ranking gapClaude R0 G-4Codex conceded flat P1 list under-served triageCONCEDED by Codex; AGREED
No-P0 vs not-releasable tensionClaude R0 §3Severity and releaseability separated; wording ambiguity concededCONCEDED wording by Codex; rule AGREED
Severity rule reachability amendmentClaude R2Recorded practice added to reachability; all four P0 conjuncts retainedACCEPTED by Codex; AGREED(R3)
F-001/F-002 severity and 16a precisionR1–R4P1 + RB=Y; practice reachable, manual 16a work contains artifact-specific riskAGREED(R4)
Transient red snapshotClaude R0 §3Removed as a repository finding; missing drift/check gates retainedCONCEDED by Codex; AGREED
Tombstone vs lifecycle groupingClaude R0 §4; Codex R1Separate F-017/F-019 under one governance parent; no double-countHELD by Codex with evidence; ACCEPTED by Claude R2
Duplicate D1 guard rowClaude R0 §4Production bypass and guard-test evidence merged in F-023CONCEDED by Codex; AGREED
Caller trace / containment / promote-condition normsClaude R0 §5Adopted; Codex added enumerated/sampled/read/traced vocabularyACCEPTED both directions; AGREED
Round-0 self-containmentCodex R1Claude acknowledged missing seven-item agendaCONCEDED by Claude
Agreement laundering in prewritten future draftCodex R1Claude relabeled elements by actual agreement roundCONCEDED by Claude; corrected
Register schemaCodex R1 Agenda 1One invariant/F-ID; full evidence/severity/RB/remediation/state fieldsACCEPTED by Claude R2; AGREED
Phase plan 0–5Codex R1 Agenda 2Artifact truth → durable safety → typed authority → render → LLM → decomposition; gates are phase exitsACCEPTED by Claude R2; AGREED
Verification harnessCodex R1 Agenda 3Canonical JSON, fact multiset, delivered view, advisory LLM judgeACCEPTED by Claude R2; AGREED
Domain/application/presentation shapeCodex R1 Agenda 4Application owns ports/canonical report document; adapters implement; three-way report splitACCEPTED by Claude R2; AGREED
Person-node P6 integrationCodex R1 Agenda 5Exact envelope + same-email collision negative gates; hard hold preservedACCEPTED by Claude R2; AGREED
Delivery strategyCodex R1 Agenda 6Integrated verticals, pure dual-run only, one caller switch, same-slice deletionACCEPTED by Claude R2; AGREED
Canonical artifactCodex R1 Agenda 7Application canonical JSON + exact final HTML under immutable manifestACCEPTED by Claude R2; Adam ratification pending
Historical repair objectiveCodex R1 additionPrevention plus census/repair/quarantine/abstention receiptsACCEPTED by Claude R2; AGREED
Division of laborClaude R0; Codex amendment R1Five deliverables; R4 attack; R5 merge; R6 only if requiredACCEPTED both; COMPLETE
F-003 render fork severityRegister R3; Claude R4 re-derivationP1, RB=Y, promote condition retainedAGREED(R4)
F-005 editorial severityRegister R3; Claude R4 re-derivationP1, RB=Y, promote condition retainedAGREED(R4)
F-011 allow-drift severityRegister R3; Claude R4 re-derivationP1, RB=Y, explicit-flag containment retainedAGREED(R4)
F-057 positional IDsCodex Phase-2 correction; Claude R4 attackNormal ledger remap + current cache payload + conditional fallback; P2 with two promote pathsAGREED(R4)
F-058 gate-name severityRegister R3; Claude R4 re-derivationP1, RB=Y, promote condition retainedAGREED(R4)
F-047 CRM status severityClaude P0 vs Codex P1Failure, Phase 2 and RB=Y agreed; effectiveness of manual containment disputedCLAUDE-HELD P0 / CODEX-HELD P1; Adam only if label required
F-063 selection temporal couplingRegister R3P1 structural/maintenance risk; phase unchangedHELD label retained; no operational divergence
F-073 agentic scopeRegister R3P1 and agentic capability block; promote on unattended durable enablementHELD label retained; no operational divergence
F-075 layer inversionRegister R3P2 structural; target dependency law agreedHELD label retained; no operational divergence
F-076 god modules/LOCRegister R3P2 structural; Phase-5 enforcement agreedHELD label retained; no operational divergence
F-057 cache evidence omissionClaude R4 §1.1Added exact cache-payload evidence and stale-hit/replay promotionCONCEDED by Codex; corrected R5
Later-phase RB containment mappingClaude R4 §1.2Charter §10 now makes missing containment ratification-blockingCONCEDED 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.

4. Concession accounting

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.

DirectionCountCounted concessions
Claude to Codex7R0: missed F-066, F-067, F-059 (3). R2: Round-0 self-containment, “zero orchestration” absolute, method monocause, agreement laundering (4).
Codex to Claude11R1: 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.

5. Decisions required from Adam — carried forward

  1. Canonical artifact ratification. Approve the two-level authority: versioned application canonical JSON and exact final delivered HTML bytes under immutable ReportReleaseManifest, with editorial as a declared stage.
  2. 16a status. Choose keep-with-caveat now plus mandatory Phase-0 reacceptance, or suspend accepted status until manifest reacceptance. Joint recommendation: keep with the exact caveat now; mandatory reacceptance at Phase-0 exit.
  3. Interim policy. Ratify charter §10: no skip-render acceptance; offline not production preview; gate delivered set; eval from delivered JSON with hashes; hard terms checked in delivered view; post-editorial manual approval; persisted expectations; explicit sibling metric receipt; existing P6 hard hold.
  4. Canonical severity only if governance needs it. F-047 remains Claude P0 / Codex P1. F-063, F-073, F-075 and F-076 retain their recorded held labels. All phases, release blocks and remediation are already fixed; Adam need decide labels only if one canonical governance report requires them.

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.

6. Stop condition

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.

← BACK TO THE READING ROOM
↻ Last updated 2026-07-18 14:09 GMT+8