From 0cb81f7a8b7dd95d99fe900f554754140e0f3cad Mon Sep 17 00:00:00 2001 From: Sinity Date: Mon, 10 Aug 2026 16:20:17 +0200 Subject: [PATCH 1/3] chore(beads): close merged verification work --- .beads/issues.jsonl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 05eb1bf9a7..1c8e51415d 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -1,12 +1,12 @@ {"_type":"issue","id":"polylogue-jdesf","title":"verification: enforce hermetic test-path boundaries","description":"Complete the hermeticity half of the production-reachability oracle. Tests that certify production behavior must not read ambient user or live archive paths unless they declare and enter an explicit production-safe fixture boundary.","design":"Add a structured fixture-boundary declaration and verifier in devtools, integrate it with the production reachability seam checks, and cover ambient ~/.codex, ~/.claude, configured archive-root, and explicit temporary fixture paths. Keep tests deterministic and fail closed on undeclared escapes.","acceptance_criteria":"1. A production-reachability seam can declare its fixture boundary and the verifier rejects undeclared reads of ambient user/session/archive paths. 2. Explicit workspace_env or temporary fixture paths remain allowed and are checked against the declared boundary. 3. Mutation coverage proves removing the guard or widening the boundary makes the test fail. 4. Focused tests and devtools verify --quick pass. 5. No live archive or production mutation is used.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T07:49:21Z","created_by":"Sinity","updated_at":"2026-08-10T07:49:21Z","labels":["area:devtools","area:testing","horizon:frontier","lane:reindex"],"dependencies":[{"issue_id":"polylogue-jdesf","depends_on_id":"polylogue-4v2d3","type":"discovered-from","created_at":"2026-08-10T07:49:21Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-1mfxh","title":"raw-authority: persist paginated artifact census receipts","description":"Add a durable source-tier raw-authority artifact census and receipt route. It must use the canonical byte-duplicate authority planner, exclude parser-failed rows from the authoritative candidate universe, support resumable bounded pages, validate backup evidence before checkpointing, and persist apply receipts in source.db.","acceptance_criteria":"1. Census candidates are derived through the canonical duplicate-supersession planner and include only the declared accepted parser universe; parser-failed rows and alternate authority logic cannot enter the applied population. 2. Bounded apply supports an exclusive continuation cursor and durable receipt/checkpoint so successive pages cannot repeat or skip rows. 3. Backup manifest and source ownership are validated before checkpoint or mutation, and any invalid or changed evidence refuses without mutation. 4. Each apply page persists an immutable source-tier receipt bound to census, cursor, plan digest, before/after inventory, and command identity. 5. Real temporary-archive tests exercise two pages, stale/invalid backup refusal, parser-failure exclusion, receipt persistence, and red mutations; quick verification passes. 6. No live production apply is claimed by implementation closure.","status":"closed","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:51:50Z","created_by":"Sinity","updated_at":"2026-08-10T07:17:24Z","closed_at":"2026-08-10T07:17:24Z","close_reason":"Satisfied by merged PR #3911 (9f8a0a4e2). Paginated raw-authority census receipts use the canonical planner, parser-failure exclusion, resumable cursor/checkpoint, backup/ownership validation, immutable receipt binding, and red-mutation coverage. Verification: focused census suite and quick gate passed on exact head e2e80dfb; no live production apply claimed.","dependencies":[{"issue_id":"polylogue-1mfxh","depends_on_id":"polylogue-fbkr","type":"discovered-from","created_at":"2026-08-10T00:52:00Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-mupq0","title":"reindex: bind message-owner backfill to durable candidate authority","description":"Make message-owner scope backfill a shared, daemon-safe prerequisite for candidate creation and promotion. The route must reject unscoped assertions, bind receipts to current durable state and candidate ownership, and recover safely after a durable commit before receipt publication.","acceptance_criteria":"1. Direct rebuild and daemon bulk-rebuild paths invoke the same message-owner gate before candidate creation, after archive ownership acquisition, and before promotion. 2. The receipt binds exact durable assertion fingerprints, candidate generation/ownership, and source/index authority; missing, drifted, duplicated, or mismatched state refuses without candidate mutation. 3. A prepared marker supports restart-safe completion after commit-before-receipt interruption and rejects altered post-commit state. 4. Real SQLite route tests and mutation twins cover bypass, durable drift, candidate-owner mismatch, and recovery. 5. Implementation closure does not claim a live candidate or promotion; those remain under the reindex phase receipts.","status":"closed","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:43:21Z","created_by":"Sinity","updated_at":"2026-08-10T07:17:24Z","closed_at":"2026-08-10T07:17:24Z","close_reason":"Satisfied by merged PR #3909 (f33e859f9). Direct and daemon rebuild routes share the owner gate; durable assertion/source/index/candidate-owner bindings and prepared-marker recovery are implemented. Verification: 54 focused route tests passed on exact rebased head 68d54b736; merge-gate passed; implementation closure does not claim live candidate or promotion.","dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-d96ta","title":"testmon: run and publish a bounded fresh seed receipt","description":"Execute a fresh seed-testmon run after the concurrency cap, retain the complete selection denominator and resource receipt, and decide whether the result is a complete red baseline, release-eligible baseline, or typed incomplete/resource-timeout outcome.","acceptance_criteria":"1. The fresh seed runs on a clean selected code tree and records the complete expected node universe, selection digest, harness and dependency identity, and actual worker/resource evidence. 2. The run reaches a typed terminal outcome or records an explicit timeout/incomplete receipt; no partial selection can be promoted. 3. The resulting receipt is independently replayable and accepted only by the typed testmon promotion gate. 4. The exact command, resource envelope, result, and residual failure attribution are published for the release ledger.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:40:19Z","created_by":"Sinity","updated_at":"2026-08-10T00:40:19Z","dependencies":[{"issue_id":"polylogue-d96ta","depends_on_id":"polylogue-817er","type":"discovered-from","created_at":"2026-08-10T00:40:29Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-817er","title":"testmon: complete bounded fresh seed and release-baseline admission","description":"Finish the testmon seed-harness residual after bounding seed-only concurrency. Prove a fresh seed can complete within the declared resource envelope, retain a complete denominator and provenance, and distinguish a complete red baseline from release eligibility.","acceptance_criteria":"1. A fresh-worktree seed selects the complete expected node universe with a declared denominator and does not silently shrink selection. 2. Seed-testmon uses the bounded worker policy and records actual process/resource/timeout evidence; ordinary adaptive test lanes remain unchanged. 3. A completed seed receipt is bound to exact code tree, dependency/testmon graph, harness version, selection digest, and outcome; incomplete or stale receipts cannot promote. 4. Red baseline, green release baseline, incomplete run, and resource-timeout outcomes are distinct typed states. 5. Focused harness mutation tests and devtools verify --quick pass; a fresh seed attempt is run before closure and its exact result is recorded.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:39:28Z","created_by":"Sinity","updated_at":"2026-08-10T00:39:28Z","dependencies":[{"issue_id":"polylogue-817er","depends_on_id":"polylogue-mq4vx","type":"discovered-from","created_at":"2026-08-10T00:39:37Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-d96ta","title":"testmon: run and publish a bounded fresh seed receipt","description":"Execute a fresh seed-testmon run after the concurrency cap, retain the complete selection denominator and resource receipt, and decide whether the result is a complete red baseline, release-eligible baseline, or typed incomplete/resource-timeout outcome.","acceptance_criteria":"1. The fresh seed runs on a clean selected code tree and records the complete expected node universe, selection digest, harness and dependency identity, and actual worker/resource evidence. 2. The run reaches a typed terminal outcome or records an explicit timeout/incomplete receipt; no partial selection can be promoted. 3. The resulting receipt is independently replayable and accepted only by the typed testmon promotion gate. 4. The exact command, resource envelope, result, and residual failure attribution are published for the release ledger.","status":"closed","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:40:19Z","created_by":"Sinity","updated_at":"2026-08-10T14:19:00Z","closed_at":"2026-08-10T14:19:00Z","close_reason":"Satisfied by merged PR #3920 at 8a388e420: bounded fresh-seed receipt is bound to exact tree/dependencies/harness/node universe and records resource-timeout with release_baseline_allowed=false; this is an honest non-green baseline, not release authorization.","dependencies":[{"issue_id":"polylogue-d96ta","depends_on_id":"polylogue-817er","type":"discovered-from","created_at":"2026-08-10T00:40:29Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-817er","title":"testmon: complete bounded fresh seed and release-baseline admission","description":"Finish the testmon seed-harness residual after bounding seed-only concurrency. Prove a fresh seed can complete within the declared resource envelope, retain a complete denominator and provenance, and distinguish a complete red baseline from release eligibility.","acceptance_criteria":"1. A fresh-worktree seed selects the complete expected node universe with a declared denominator and does not silently shrink selection. 2. Seed-testmon uses the bounded worker policy and records actual process/resource/timeout evidence; ordinary adaptive test lanes remain unchanged. 3. A completed seed receipt is bound to exact code tree, dependency/testmon graph, harness version, selection digest, and outcome; incomplete or stale receipts cannot promote. 4. Red baseline, green release baseline, incomplete run, and resource-timeout outcomes are distinct typed states. 5. Focused harness mutation tests and devtools verify --quick pass; a fresh seed attempt is run before closure and its exact result is recorded.","status":"closed","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:39:28Z","created_by":"Sinity","updated_at":"2026-08-10T14:19:00Z","closed_at":"2026-08-10T14:19:00Z","close_reason":"Satisfied by merged PR #3920 at 8a388e420: testmon seed/release-baseline state now has typed terminal outcomes, fail-closed admission, focused harness coverage, and quick-gate evidence.","dependencies":[{"issue_id":"polylogue-817er","depends_on_id":"polylogue-mq4vx","type":"discovered-from","created_at":"2026-08-10T00:39:37Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-ox2iz","title":"reindex: execute and classify the canary changelog report","description":"Execute the repaired daemon-owned canary differ route against the selected deployed package and inactive generation, classify every observed row difference against the declared schema/parser deltas, and attach the reviewed report to the candidate-build phase.","acceptance_criteria":"1. A fresh canary run uses a frozen source snapshot, selected deployed package SHA, inactive no-promote generation, and exact comparator version. 2. The sampled corpus includes each origin, zoo/pathology fixtures, and a declared denominator; selection cannot be shrunk after observation. 3. Every sessions/messages/blocks/session_links/derived difference is classified as expected with a cited delta or unexpected with a named Bead, with zero unclassified rows. 4. The report includes receipts, digests, command identity, and reviewer disposition and is consumed by candidate-build preflight. 5. A red mutation removing a diff or changing the authority binding fails the report gate; no pointer promotion occurs.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:37:28Z","created_by":"Sinity","updated_at":"2026-08-10T00:37:28Z","dependencies":[{"issue_id":"polylogue-ox2iz","depends_on_id":"polylogue-0x7nh","type":"discovered-from","created_at":"2026-08-10T00:37:38Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-c0z2a","title":"raw-authority: complete recovery convergence and daemon-owned live execution","description":"Own the residual left by the raw-authority recovery actuator implementation: prove the selected recovery route is daemon-owned or explicitly authorized by a typed maintenance coordinator, complete live ledger convergence, and close the remaining raw-authority population without claiming production success from synthetic receipts.","acceptance_criteria":"1. The remaining raw-authority ledger and live population are derived from source.db and a current authoritative census, not from the recovery receipt or a self-authored registry. 2. Every safe executable population has a daemon-owned or explicitly typed maintenance-coordinator route with writer ownership, durable receipt, restart recovery, and failure-atomic evidence. 3. Judgment-required, unsupported, deferred, and terminal populations remain distinct and cannot be reported as converged. 4. A real production-shaped apply or typed no-op receipt proves the route, with backup/source/index authority and postflight equality; no synthetic receipt closes live work. 5. Focused mutation twins and devtools verify --quick pass, and any remaining live apply is explicitly recorded before closure.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:31:32Z","created_by":"Sinity","updated_at":"2026-08-10T00:31:32Z","dependencies":[{"issue_id":"polylogue-c0z2a","depends_on_id":"polylogue-fbkr","type":"discovered-from","created_at":"2026-08-10T00:31:44Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-r4jiu","title":"verification: complete source-index coverage ground-truth integration","description":"The parser-census readiness guard is now fail-closed, but source-index coverage still needs its own ground-truth universe wired through the verification registry. Complete the residual from polylogue-in24n without allowing the census ledger to define the population being audited.","acceptance_criteria":"1. The source-index coverage universe is derived from raw logical heads in source.db, not from the census ledger under audit.\\n2. Every raw logical head absent from the index is either indexed or has an explicit typed parse failure, unsupported/non-session disposition, quarantine blocker, or other accepted terminal state.\\n3. A red mutation that removes a raw head from the derived census while leaving source.db unchanged makes the check fail.\\n4. Focused registry tests and devtools verify --quick pass.","notes":"Residual successor created while publishing the parser-census readiness guard. The guard is merged only as a partial prerequisite; do not close this successor until the verification oracle itself uses the raw logical-head universe and its anti-vacuity mutation is green.","status":"open","priority":0,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T22:42:50Z","created_by":"Sinity","updated_at":"2026-08-09T22:42:50Z","dependencies":[{"issue_id":"polylogue-r4jiu","depends_on_id":"polylogue-in24n","type":"discovered-from","created_at":"2026-08-09T22:42:58Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-dyica.1","title":"reindex: persist typed raw-failure evidence and CAS retry authority","description":"Implement the typed raw-failure and Codex CAS-frontier residual from the stopped-daemon census. Preserve Claude partial JSONL, unknown decode, unknown export without session, and Codex CAS frontier evidence through live ingest, revision governance, repair selection, and status.","acceptance_criteria":"1. LiveBatchProcessor and mark_raw_parse_failed persist typed raw_artifacts for Claude partial JSONL, unknown JSON decode, unknown export without session, and Codex CAS frontier outcomes. 2. CAS/frontier failures use typed retryable authority and preserve current legacy selectors. 3. Production-route tests prove durable evidence, lifecycle/status projection, and repair candidate gating, with red twins. 4. devtools verify passes on the exact head. 5. Any remaining live population or migration/apply work is carried by an open named successor before this child is closed.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T14:44:19Z","created_by":"Sinity","updated_at":"2026-08-09T14:44:19Z","labels":["area:reindex","area:sources","delivery:reindex"],"dependencies":[{"issue_id":"polylogue-dyica.1","depends_on_id":"polylogue-dyica","type":"parent-child","created_at":"2026-08-09T14:44:19Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-r4jiu","title":"verification: complete source-index coverage ground-truth integration","description":"The parser-census readiness guard is now fail-closed, but source-index coverage still needs its own ground-truth universe wired through the verification registry. Complete the residual from polylogue-in24n without allowing the census ledger to define the population being audited.","acceptance_criteria":"1. The source-index coverage universe is derived from raw logical heads in source.db, not from the census ledger under audit.\\n2. Every raw logical head absent from the index is either indexed or has an explicit typed parse failure, unsupported/non-session disposition, quarantine blocker, or other accepted terminal state.\\n3. A red mutation that removes a raw head from the derived census while leaving source.db unchanged makes the check fail.\\n4. Focused registry tests and devtools verify --quick pass.","notes":"Residual successor created while publishing the parser-census readiness guard. The guard is merged only as a partial prerequisite; do not close this successor until the verification oracle itself uses the raw logical-head universe and its anti-vacuity mutation is green.","status":"closed","priority":0,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T22:42:50Z","created_by":"Sinity","updated_at":"2026-08-10T14:14:47Z","closed_at":"2026-08-10T14:14:47Z","close_reason":"Satisfied by merged PR #3919 at a9744ae1b: source-index coverage now derives its universe from raw logical heads, the census-deletion red twin stays red, focused registry verification passed, and the quick gate passed.","dependencies":[{"issue_id":"polylogue-r4jiu","depends_on_id":"polylogue-in24n","type":"discovered-from","created_at":"2026-08-09T22:42:58Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-dyica.1","title":"reindex: persist typed raw-failure evidence and CAS retry authority","description":"Implement the typed raw-failure and Codex CAS-frontier residual from the stopped-daemon census. Preserve Claude partial JSONL, unknown decode, unknown export without session, and Codex CAS frontier evidence through live ingest, revision governance, repair selection, and status.","acceptance_criteria":"1. LiveBatchProcessor and mark_raw_parse_failed persist typed raw_artifacts for Claude partial JSONL, unknown JSON decode, unknown export without session, and Codex CAS frontier outcomes. 2. CAS/frontier failures use typed retryable authority and preserve current legacy selectors. 3. Production-route tests prove durable evidence, lifecycle/status projection, and repair candidate gating, with red twins. 4. devtools verify passes on the exact head. 5. Any remaining live population or migration/apply work is carried by an open named successor before this child is closed.","status":"closed","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T14:44:19Z","created_by":"Sinity","updated_at":"2026-08-10T14:14:47Z","closed_at":"2026-08-10T14:14:47Z","close_reason":"Implementation slice satisfied by PR #3918 once merged: typed CAS frontier evidence is routed into repair selection with durable focused regression and quick-gate evidence; remaining live population/apply work remains under parent dyica/source-remediation.","labels":["area:reindex","area:sources","delivery:reindex"],"dependencies":[{"issue_id":"polylogue-dyica.1","depends_on_id":"polylogue-dyica","type":"parent-child","created_at":"2026-08-09T14:44:19Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-g8v5z","title":"decision: bind incident concepts to executable registry checks","description":"Resolve the identity boundary between the executable ARCHIVE_VERIFICATION_CHECKS registry and the conceptual registry_checks catalog in docs/plans/reindex-incident-coverage.json. Current evidence shows 27 executable check names and 25 conceptual ledger IDs with no overlap, no invariant-identity field, and five archive-registry incident bindings absent from the ledger. The reindex registry subset cannot honestly cross-check incident bindings until this mapping contract is explicit.","design":"Choose and record one typed mapping authority: either add explicit executable_check_names to each ledger check catalog entry, add a registry-owned incident binding projection consumed by the ledger, or narrow the subset with a named disposition. Preserve conceptual ledger IDs for campaign coverage and executable registry names for predicates. Do not rename either vocabulary implicitly or match by prose/source strings.","acceptance_criteria":"1. The mapping authority and vocabulary ownership are recorded in a structured schema or typed registry field. 2. Every conceptual incident registry check maps to one or more executable ARCHIVE_VERIFICATION_CHECKS or has a typed non-executable disposition. 3. Every executable incident binding used by candidate or daemon gates maps back to a ledger concept with no orphan or duplicate mapping. 4. Red-twin, candidate-runner, daemon-schedule, waiver, and live-receipt metadata remain owned by ArchiveVerificationCheckSpec. 5. Focused mutation tests fail on one missing mapping, one extra mapping, and one duplicate mapping. 6. The reindex registry subset can then cross-check incident bindings without importing Beads or parsing prose.","status":"open","priority":0,"issue_type":"decision","owner":"ezo.dev@gmail.com","created_at":"2026-08-07T23:51:28Z","created_by":"Sinity","updated_at":"2026-08-07T23:51:28Z","dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-eqq02","title":"devtools: guard required reindex proof edges","description":"Add an executable graph guard for the reindex proof-edge matrix. The policy must reject removal of any required live-proof blocking edge and must bind the edge matrix to the phase graph used by preflight and terminal proof.","design":"Define the required edge matrix as structured policy data or a typed fixture consumed by devtools lab policy bead-graph. Add a negative mutation test that removes one edge and fails, plus a positive check for the current graph. Keep this guard separate from the live production proof receipts.","acceptance_criteria":"1. The twelve required live-proof blocking edges are represented by structured policy data. 2. The positive graph check passes on the current Beads snapshot. 3. Removing any required edge fails the policy or fixture check. 4. The guard is consumed by reindex preflight and terminal proof readiness. 5. Focused tests and devtools verify --quick pass.","notes":"Created from Codex P1 review finding 3734483475 on PR #3872. Existing phase edges remain present, but their required-edge guard was not executable.\nClosure evidence: merged PR 3881 at merge commit a85bb6eb5ac74bfddd458c12e29642b2695fe775. The guard passed 43 focused graph tests and all 24 quick verification steps. Live receipts remain separate.","status":"closed","priority":0,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-08-07T08:44:35Z","created_by":"Sinity","updated_at":"2026-08-07T23:12:28Z","started_at":"2026-08-07T09:48:30Z","closed_at":"2026-08-07T23:11:42Z","close_reason":"Merged PR #3881 () adds the typed twelve-edge required-proof matrix, fail-closed missing-edge checks, preflight and terminal-proof bindings, and mutation coverage. Verified with 43 focused graph tests and all 24 quick-gate steps. Live receipts remain open under their own Beads.","labels":["area:devtools","lane:reindex"],"dependencies":[{"issue_id":"polylogue-eqq02","depends_on_id":"polylogue-reindex-proof-edge-correction","type":"discovered-from","created_at":"2026-08-07T10:44:34Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":2,"comment_count":0} {"_type":"issue","id":"polylogue-s8gcr","title":"maintenance: harden cursor reconciliation proof gates","description":"Close the implementation residuals identified by Codex review of the cursor-authority reconciliation route. The implementation must preserve the typed incomparable population while producing a deterministic not_applicable plan when the selected cursor-ahead row has disappeared, and apply must revalidate the current full-evidence blob inventory rather than trusting stale receipt booleans.","design":"Add a real-route regression for the zero-ahead plus preserved incomparable population. Extend backup validation to inspect the current blob inventory and compare every required blob path and digest before apply. Preserve the existing single-path authorization and no-direct-repair rules.","acceptance_criteria":"1. A disappeared selected row with the known incomparable population emits typed not_applicable without mutation. 2. Apply rejects a deleted, added, or changed backup blob after receipt creation. 3. The exact current blob inventory is compared before mutation and recorded in the reconciliation receipt. 4. Existing focused cursor reconciliation tests and devtools verify --quick pass. 5. The live cursor-authority receipt remains separate and open until a production apply is independently executed.","notes":"Created from Codex P1 review findings 3734483480 and 3734483485 on PR #3872. This is implementation hardening, not a production receipt.","status":"closed","priority":0,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-08-07T08:44:35Z","created_by":"Sinity","updated_at":"2026-08-08T00:04:16Z","started_at":"2026-08-07T09:39:38Z","closed_at":"2026-08-08T00:04:16Z","close_reason":"Merged PR #3873 at f2adcd44569a. The cursor reconciliation planner now emits typed not_applicable for a disappeared selected row while preserving incomparable authority data, and apply revalidates the complete current backup blob inventory. Focused maintenance, watcher, retention, and CLI route checks passed; devtools verify --quick passed all 24 steps. This is implementation hardening only. The production cursor-authority receipt remains open.","labels":["area:maintenance","lane:reindex"],"dependencies":[{"issue_id":"polylogue-s8gcr","depends_on_id":"polylogue-cursor-authority-reconcile-implementation","type":"discovered-from","created_at":"2026-08-07T10:44:34Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -711,7 +711,7 @@ {"_type":"issue","id":"polylogue-nzk3i","title":"ast-grep advisory rule pack: verdict predicates as diffable rule files","description":"Encode recurring flaw-class predicates as ast-grep YAML rules under devtools/rules/: hand-written CHECK(col IN (...)) string literals in archive_tiers not produced by check()/literal_check() (3szyi's detector), datetime.now/time.time outside tests (static mirror of the runtime clock guard), except-pass and lossy-default shapes in provider dispatch. Run as an ADVISORY lane in verify first; promote individual rules to blocking only after measured false-positive rates. Rules-as-files makes audit predicates reviewable, diffable objects — and each rule is a red instrument in ey4ro's terms (fails before the fix, guards siblings after).","acceptance_criteria":"1. devtools/rules/ exists with \u003e=3 working rules and a runner wired into verify as advisory. 2. Each rule documents its flaw class + seed bead. 3. At least one rule's FP rate is measured and recorded before any promotion to blocking.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:12:27Z","created_by":"Sinity","updated_at":"2026-08-03T07:12:27Z","labels":["area:devtools"],"dependencies":[{"issue_id":"polylogue-nzk3i","depends_on_id":"polylogue-3szyi","type":"relates-to","created_at":"2026-08-03T09:12:27Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-nzk3i","depends_on_id":"polylogue-ey4ro","type":"relates-to","created_at":"2026-08-03T09:12:27Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-3godk","title":"Scheduled full-suite coverage refresh feeding dead-code/audit joins","description":"The dead-code intersection (h75b) and audit coverage-joins are only as honest as .cache/coverage/coverage.json freshness — the lab join used a 2026-07-09 snapshot. Add a cadence: post-merge-train (or weekly scheduled) full-suite coverage run archiving dated snapshots, with the consuming lanes refusing (or loudly warning) when the snapshot exceeds an age budget. Stale dynamic data silently degrades the intersection back to static-only quality; make that failure impossible rather than remembered.","acceptance_criteria":"1. A dated coverage snapshot exists under .cache/coverage/ (or .local/) with a documented refresh trigger. 2. h75b's lane checks snapshot age and says so in output. 3. One refresh has actually run on current master.","status":"open","priority":2,"issue_type":"chore","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:11:59Z","created_by":"Sinity","updated_at":"2026-08-03T07:11:59Z","labels":["area:test"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-mo10b","title":"Fix extract_facts.py module-level-call gap, promote to devtools audit extract","description":"The lab's L0 fact extractor (experiments/audit-tooling/extract_facts.py) never collects module-level calls (registrations, decorator applications at import time) — traced via jedi as a major contributor to the 66.3% false-positive floor measured for static-only dead-code detection (coverage join over 1,545 candidates). Fix the gap, then promote the extractor to a devtools command (devtools audit extract) emitting versioned DuckDB under .cache/audit/ with a committed schema note: defs/classes (qualified name, span, decorators, complexity), import edges, call references, git churn. Every audit lens reads this instead of re-walking the AST.","acceptance_criteria":"1. Module-level calls appear in the call table (regression case: a Click-registered command gains a caller edge). 2. devtools audit extract produces the DuckDB and is listed in the devtools catalog. 3. Re-measured dead-code FP floor drops materially from 66.3% on the same candidate set.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:11:58Z","created_by":"Sinity","updated_at":"2026-08-03T07:11:58Z","labels":["area:devtools"],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-29hwx","title":"Land the proven audit toolchain: audit dependency group + flake tools","description":"The audit-tooling lab (branch feature/chore/audit-tooling-lab, experiments/audit-tooling/REPORT.md) proved the roster against this codebase. Adopt permanently: pyproject audit dependency group (grimp, import-linter, vulture, radon, jedi, duckdb, networkx, libcst) and flake devshell additions (ast-grep, scc, codeql with unfree allowance). Exclusions with reasons in the REPORT (semgrep dep-conflict, pydeps redundant vs grimp, tree-sitter cp314t ABI). One PR; the lab branch stays as evidence.","acceptance_criteria":"1. uv sync --group audit works in a fresh checkout. 2. ast-grep/scc/codeql available in devshell. 3. REPORT.md adoption notes updated to point at the landed stanza.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:11:57Z","created_by":"Sinity","updated_at":"2026-08-03T07:11:57Z","labels":["area:devtools"],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-29hwx","title":"Land the proven audit toolchain: audit dependency group + flake tools","description":"The audit-tooling lab (branch feature/chore/audit-tooling-lab, experiments/audit-tooling/REPORT.md) proved the roster against this codebase. Adopt permanently: pyproject audit dependency group (grimp, import-linter, vulture, radon, jedi, duckdb, networkx, libcst) and flake devshell additions (ast-grep, scc, codeql with unfree allowance). Exclusions with reasons in the REPORT (semgrep dep-conflict, pydeps redundant vs grimp, tree-sitter cp314t ABI). One PR; the lab branch stays as evidence.","acceptance_criteria":"1. uv sync --group audit works in a fresh checkout. 2. ast-grep/scc/codeql available in devshell. 3. REPORT.md adoption notes updated to point at the landed stanza.","status":"closed","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:11:57Z","created_by":"Sinity","updated_at":"2026-08-10T13:05:26Z","closed_at":"2026-08-10T13:05:26Z","close_reason":"Merged in PR #3917 at 09c07b8ab. Acceptance evidence: audit dependency group and lockfile landed; flake devshell declares ast-grep, scc, and codeql; REPORT.md records the landed stanza and explicit invocations. ast-grep and the scc/codeql derivations are present in the Nix store; live devshell command execution was not repeated while the host heavy-work lease was held.","labels":["area:devtools"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-60gzo","title":"doctrine: two verification planes, one predicate library - dissolve archive-poking lab commands","description":"Operator ruling direction 2026-08-03: live-archive 'labs' are a deadly complexity buildup. Systematic answer: ONE predicate library (the t0m73 registry), TWO planes. Plane 1 (CI, hermetic): predicates x synthetic corpora via the convergence-property loop - ALL code-correctness verification lives here; fully replaces live-archive runs for correctness questions (incl. differential lanes as metamorphic properties). Plane 2 (production monitoring): the SAME predicates x the live archive, run ONLY by the daemon (health tiers) and promotion/readiness gates - this is monitoring of a production system, not a dev tool; it answers 'is MY archive healthy', which no synthetic test can (the archive contains outputs of dead code vintages). THE RULE: a permanent named check is a registry predicate (runs in both planes automatically) or it does not exist; one-off investigations are session scripts that die with their campaign; no operator-invoked archive-poking lab commands survive. Execution: inventory devtools lab's verification-lab entries (37 CommandSpecs), classify each as registry-predicate (migrate), static source lint (stays in devtools verify), or session-script relic (delete); the lab category shrinks to static lints only. Honest residual: campaign-style enumerations (wwph1) legitimately poke the live archive read-only - they are bounded campaigns with ledgers, not permanent surface.","design":"DESIGN — THE DOCTRINE, CONCRETELY (2026-08-03):\n\nONE PREDICATE LIBRARY = SHARED CODE, NOT SHARED PROSE: the library already exists in embryo — ARCHIVE_VERIFICATION_CHECKS in polylogue/maintenance/archive_verification.py: a tuple of ArchiveVerificationCheckSpec, each a pure read-only function (archive_root, sample_limit) -\u003e ArchiveVerificationCheck, designed to tolerate a concurrent rebuild, with typed error/skip outcomes (_error_check/_skip_check — a check that cannot run is a finding, not a pass). t0m73's I2/I3/I4/I5/I8 are already in it. \"One library\" means: every permanent named invariant is a spec in this tuple (or a sibling registry module for non-archive predicates), imported by BOTH planes; neither plane ever re-implements a predicate.\n\nPLANE 1 — CI × SYNTHETIC (all code-correctness verification): pytest wrappers iterate the registry over fixture archives (seeded corpus + a violation zoo). Contract per predicate: (a) a green binding — the check passes on a healthy fixture; (b) a RED TWIN — a fixture engineered to violate exactly this invariant, on which the check must fail (anti-vacuity; this is also ey4ro's instrument kind \"registry-check-fixture\"). Differential/metamorphic lanes (two code paths must agree) are Plane-1 properties over synthetic corpora, not live-archive commands. Runs under devtools verify/testmon like any test.\n\nPLANE 2 — DAEMON × LIVE (production monitoring, not a dev tool): the SAME registry executed only by (a) the daemon's health tiers on schedule and (b) promotion/readiness gates — specifically the rebuild-index promote step runs the registry against the candidate generation before flipping .index-active-pointer, and the 818fy runbook cites the registry receipt. Answers \"is MY archive healthy\" (the archive contains outputs of dead code vintages — no synthetic test can answer this). Never operator-invoked ad hoc except via `polylogue status`-class read surfaces that render the daemon's latest receipt.\n\nTHE RULE: a permanent named check is a registry predicate (and thereby runs in both planes automatically) or it does not exist. One-off investigations are session scripts under .agent/scratch/ that die with their campaign (wwph1's ledger scripts are the sanctioned example — bounded campaigns with ledgers, read-only).\n\nEXECUTION — DISSOLVE THE LAB: inventory the `lab` category of devtools/command_catalog.py (147 CommandSpecs total repo-wide; the lab subset includes graph, lanes, 8 policy lints, provider completeness, 5 probes, projections, smoke, 9 schema ops, seed-receipt-compare, snapshot...). Classify each lab entry into exactly one bucket:\n 1. REGISTRY-PREDICATE: it verifies a live-archive invariant → migrate its predicate into ARCHIVE_VERIFICATION_CHECKS (+ Plane-1 binding + red twin), then delete the command.\n 2. STATIC SOURCE LINT: no archive needed (policy checks like schema-versioning, bead-graph) → stays, runs under devtools verify; not a \"lab\" concern — recategorize.\n 3. SESSION-SCRIPT RELIC: one-off investigation fossil → delete outright (no deprecation theater).\n 4. GENUINE OPERATOR WORKFLOW (schema generate/commit/promote): not verification at all → keep, but out of the verification-lab framing.\nEnd state: the lab category contains no operator-invoked live-archive verification commands; correctness questions route to Plane 1, health questions to Plane 2.\n","acceptance_criteria":"1. A committed classification table covering every devtools lab CommandSpec that touches a live archive, each assigned exactly one bucket: registry-predicate (migrate) | static-source-lint (recategorize into devtools verify) | session-script relic (delete) | genuine operator workflow (keep, out of verification framing).\n2. Every migrated predicate exists as an ArchiveVerificationCheckSpec in the shared registry with BOTH plane bindings: a Plane-1 pytest fixture binding plus a red-twin violation fixture proving non-vacuity, and Plane-2 execution wiring (daemon health tier and/or rebuild-index promotion gate), verified by `devtools test -k archive_verification`.\n3. After the sweep, the lab category contains zero operator-invoked live-archive verification commands; `devtools render devtools-reference` regenerated clean.\n4. The doctrine text (two planes, one predicate library, the permanent-check rule, the wwph1 bounded-campaign exemption) is recorded in the owning doc (docs/devtools.md or docs/architecture-spine.md decision log), citing this bead.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:09:12Z","created_by":"Sinity","updated_at":"2026-08-03T10:48:46Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-2xxj2","title":"Triage grimp-found reverse-layering edges vs devtools verify layering green","description":"The audit-tooling lab (branch feature/chore/audit-tooling-lab, experiments/audit-tooling/REPORT.md, 2026-08-03) found via grimp + import-linter, cross-confirmed, 6 direct plus several transitive import edges from storage/pipeline/sources into api/daemon/mcp -- the direction CLAUDE.md declares zero-exception clean and devtools verify layering gates with no baseline. Yet the layering gate is green on master. One of these is wrong: either the bespoke check's import extraction misses edge shapes grimp sees (function-local imports, TYPE_CHECKING, re-exports, lazy imports), or grimp counts edges the doctrine intentionally permits, or there are real violations sneaking past the gate (vwdj-class: lint narrower than doctrine). Triage each of the 6 direct edges named in the lab REPORT: real violation (fix or baseline consciously) vs checker gap (extend verify_layering extraction) vs grimp semantics artifact (document why benign). The transitive edges follow from whichever direct verdicts stand.","acceptance_criteria":"1. Each of the 6 direct edges has a verdict with file:line evidence. 2. If any checker gap is confirmed, verify_layering's extraction is extended (or a follow-up bead filed) so the gate actually enforces the doctrine it claims. 3. CLAUDE.md's zero-exception claim is either restored to true or corrected.","notes":"Follow-through once triaged (B7): run grimp inside verify_layering as a permanent cross-check — two independent import graphs must agree on the clean direction, disagreement fails loudly. Keeps the bespoke writer-doctrine half untouched.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T06:33:01Z","created_by":"Sinity","updated_at":"2026-08-03T07:42:06Z","labels":["area:substrate"],"dependencies":[{"issue_id":"polylogue-2xxj2","depends_on_id":"polylogue-9e5","type":"discovered-from","created_at":"2026-08-03T08:33:00Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-5tkbt","title":"storage: 9 logical sources unindexed with NO typed state at all (not quarantined, no parse_error) - the untyped-leak class exists beyond quarantine","description":"Invariant I1 (2026-08-03 live run): of 7,200 unindexed logical sources, 7,191 are quarantined (tracked via lkrc/hjpx) but 9 have revision_authority NOT IN ('quarantined') AND parse_error IS NULL - no typed state anywhere explains why they are not materialized. Small count, but proves items can leave every mechanism's candidacy without ANY durable explanation - the exact failure hjpx's execute-or-typed-terminal rule is meant to forbid, occurring outside the quarantine machinery. AC: identify the 9 (query in .agent/scratch/archive-invariants-2026-08-03.py I1), classify how each escaped, close the leak path, and leave I1 green.","status":"open","priority":2,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T05:35:28Z","created_by":"Sinity","updated_at":"2026-08-03T05:35:28Z","dependency_count":0,"dependent_count":0,"comment_count":0} From 13786aec2634f6a5a6b8fb6ea321c7fc95f41fec Mon Sep 17 00:00:00 2001 From: Sinity Date: Mon, 10 Aug 2026 16:29:46 +0200 Subject: [PATCH 2/3] chore(beads): record raw-failure merge identity --- .beads/issues.jsonl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 1c8e51415d..5625fe1bb7 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -6,7 +6,7 @@ {"_type":"issue","id":"polylogue-ox2iz","title":"reindex: execute and classify the canary changelog report","description":"Execute the repaired daemon-owned canary differ route against the selected deployed package and inactive generation, classify every observed row difference against the declared schema/parser deltas, and attach the reviewed report to the candidate-build phase.","acceptance_criteria":"1. A fresh canary run uses a frozen source snapshot, selected deployed package SHA, inactive no-promote generation, and exact comparator version. 2. The sampled corpus includes each origin, zoo/pathology fixtures, and a declared denominator; selection cannot be shrunk after observation. 3. Every sessions/messages/blocks/session_links/derived difference is classified as expected with a cited delta or unexpected with a named Bead, with zero unclassified rows. 4. The report includes receipts, digests, command identity, and reviewer disposition and is consumed by candidate-build preflight. 5. A red mutation removing a diff or changing the authority binding fails the report gate; no pointer promotion occurs.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:37:28Z","created_by":"Sinity","updated_at":"2026-08-10T00:37:28Z","dependencies":[{"issue_id":"polylogue-ox2iz","depends_on_id":"polylogue-0x7nh","type":"discovered-from","created_at":"2026-08-10T00:37:38Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-c0z2a","title":"raw-authority: complete recovery convergence and daemon-owned live execution","description":"Own the residual left by the raw-authority recovery actuator implementation: prove the selected recovery route is daemon-owned or explicitly authorized by a typed maintenance coordinator, complete live ledger convergence, and close the remaining raw-authority population without claiming production success from synthetic receipts.","acceptance_criteria":"1. The remaining raw-authority ledger and live population are derived from source.db and a current authoritative census, not from the recovery receipt or a self-authored registry. 2. Every safe executable population has a daemon-owned or explicitly typed maintenance-coordinator route with writer ownership, durable receipt, restart recovery, and failure-atomic evidence. 3. Judgment-required, unsupported, deferred, and terminal populations remain distinct and cannot be reported as converged. 4. A real production-shaped apply or typed no-op receipt proves the route, with backup/source/index authority and postflight equality; no synthetic receipt closes live work. 5. Focused mutation twins and devtools verify --quick pass, and any remaining live apply is explicitly recorded before closure.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T00:31:32Z","created_by":"Sinity","updated_at":"2026-08-10T00:31:32Z","dependencies":[{"issue_id":"polylogue-c0z2a","depends_on_id":"polylogue-fbkr","type":"discovered-from","created_at":"2026-08-10T00:31:44Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-r4jiu","title":"verification: complete source-index coverage ground-truth integration","description":"The parser-census readiness guard is now fail-closed, but source-index coverage still needs its own ground-truth universe wired through the verification registry. Complete the residual from polylogue-in24n without allowing the census ledger to define the population being audited.","acceptance_criteria":"1. The source-index coverage universe is derived from raw logical heads in source.db, not from the census ledger under audit.\\n2. Every raw logical head absent from the index is either indexed or has an explicit typed parse failure, unsupported/non-session disposition, quarantine blocker, or other accepted terminal state.\\n3. A red mutation that removes a raw head from the derived census while leaving source.db unchanged makes the check fail.\\n4. Focused registry tests and devtools verify --quick pass.","notes":"Residual successor created while publishing the parser-census readiness guard. The guard is merged only as a partial prerequisite; do not close this successor until the verification oracle itself uses the raw logical-head universe and its anti-vacuity mutation is green.","status":"closed","priority":0,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T22:42:50Z","created_by":"Sinity","updated_at":"2026-08-10T14:14:47Z","closed_at":"2026-08-10T14:14:47Z","close_reason":"Satisfied by merged PR #3919 at a9744ae1b: source-index coverage now derives its universe from raw logical heads, the census-deletion red twin stays red, focused registry verification passed, and the quick gate passed.","dependencies":[{"issue_id":"polylogue-r4jiu","depends_on_id":"polylogue-in24n","type":"discovered-from","created_at":"2026-08-09T22:42:58Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-dyica.1","title":"reindex: persist typed raw-failure evidence and CAS retry authority","description":"Implement the typed raw-failure and Codex CAS-frontier residual from the stopped-daemon census. Preserve Claude partial JSONL, unknown decode, unknown export without session, and Codex CAS frontier evidence through live ingest, revision governance, repair selection, and status.","acceptance_criteria":"1. LiveBatchProcessor and mark_raw_parse_failed persist typed raw_artifacts for Claude partial JSONL, unknown JSON decode, unknown export without session, and Codex CAS frontier outcomes. 2. CAS/frontier failures use typed retryable authority and preserve current legacy selectors. 3. Production-route tests prove durable evidence, lifecycle/status projection, and repair candidate gating, with red twins. 4. devtools verify passes on the exact head. 5. Any remaining live population or migration/apply work is carried by an open named successor before this child is closed.","status":"closed","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T14:44:19Z","created_by":"Sinity","updated_at":"2026-08-10T14:14:47Z","closed_at":"2026-08-10T14:14:47Z","close_reason":"Implementation slice satisfied by PR #3918 once merged: typed CAS frontier evidence is routed into repair selection with durable focused regression and quick-gate evidence; remaining live population/apply work remains under parent dyica/source-remediation.","labels":["area:reindex","area:sources","delivery:reindex"],"dependencies":[{"issue_id":"polylogue-dyica.1","depends_on_id":"polylogue-dyica","type":"parent-child","created_at":"2026-08-09T14:44:19Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-dyica.1","title":"reindex: persist typed raw-failure evidence and CAS retry authority","description":"Implement the typed raw-failure and Codex CAS-frontier residual from the stopped-daemon census. Preserve Claude partial JSONL, unknown decode, unknown export without session, and Codex CAS frontier evidence through live ingest, revision governance, repair selection, and status.","acceptance_criteria":"1. LiveBatchProcessor and mark_raw_parse_failed persist typed raw_artifacts for Claude partial JSONL, unknown JSON decode, unknown export without session, and Codex CAS frontier outcomes. 2. CAS/frontier failures use typed retryable authority and preserve current legacy selectors. 3. Production-route tests prove durable evidence, lifecycle/status projection, and repair candidate gating, with red twins. 4. devtools verify passes on the exact head. 5. Any remaining live population or migration/apply work is carried by an open named successor before this child is closed.","notes":"Implementation merged as PR #3918 at ccb73aa3e0f8b6667e6b0ac4bbaa670028d2d6f3. Typed CAS recovery eligibility now excludes validation-failed raws and admits previously parsed but unmaterialized CAS-authority raws; remaining live remediation stays with parent dyica/source-remediation.","status":"closed","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T14:44:19Z","created_by":"Sinity","updated_at":"2026-08-10T14:29:46Z","closed_at":"2026-08-10T14:14:47Z","close_reason":"Implementation slice satisfied by PR #3918 once merged: typed CAS frontier evidence is routed into repair selection with durable focused regression and quick-gate evidence; remaining live population/apply work remains under parent dyica/source-remediation.","labels":["area:reindex","area:sources","delivery:reindex"],"dependencies":[{"issue_id":"polylogue-dyica.1","depends_on_id":"polylogue-dyica","type":"parent-child","created_at":"2026-08-09T14:44:19Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-g8v5z","title":"decision: bind incident concepts to executable registry checks","description":"Resolve the identity boundary between the executable ARCHIVE_VERIFICATION_CHECKS registry and the conceptual registry_checks catalog in docs/plans/reindex-incident-coverage.json. Current evidence shows 27 executable check names and 25 conceptual ledger IDs with no overlap, no invariant-identity field, and five archive-registry incident bindings absent from the ledger. The reindex registry subset cannot honestly cross-check incident bindings until this mapping contract is explicit.","design":"Choose and record one typed mapping authority: either add explicit executable_check_names to each ledger check catalog entry, add a registry-owned incident binding projection consumed by the ledger, or narrow the subset with a named disposition. Preserve conceptual ledger IDs for campaign coverage and executable registry names for predicates. Do not rename either vocabulary implicitly or match by prose/source strings.","acceptance_criteria":"1. The mapping authority and vocabulary ownership are recorded in a structured schema or typed registry field. 2. Every conceptual incident registry check maps to one or more executable ARCHIVE_VERIFICATION_CHECKS or has a typed non-executable disposition. 3. Every executable incident binding used by candidate or daemon gates maps back to a ledger concept with no orphan or duplicate mapping. 4. Red-twin, candidate-runner, daemon-schedule, waiver, and live-receipt metadata remain owned by ArchiveVerificationCheckSpec. 5. Focused mutation tests fail on one missing mapping, one extra mapping, and one duplicate mapping. 6. The reindex registry subset can then cross-check incident bindings without importing Beads or parsing prose.","status":"open","priority":0,"issue_type":"decision","owner":"ezo.dev@gmail.com","created_at":"2026-08-07T23:51:28Z","created_by":"Sinity","updated_at":"2026-08-07T23:51:28Z","dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-eqq02","title":"devtools: guard required reindex proof edges","description":"Add an executable graph guard for the reindex proof-edge matrix. The policy must reject removal of any required live-proof blocking edge and must bind the edge matrix to the phase graph used by preflight and terminal proof.","design":"Define the required edge matrix as structured policy data or a typed fixture consumed by devtools lab policy bead-graph. Add a negative mutation test that removes one edge and fails, plus a positive check for the current graph. Keep this guard separate from the live production proof receipts.","acceptance_criteria":"1. The twelve required live-proof blocking edges are represented by structured policy data. 2. The positive graph check passes on the current Beads snapshot. 3. Removing any required edge fails the policy or fixture check. 4. The guard is consumed by reindex preflight and terminal proof readiness. 5. Focused tests and devtools verify --quick pass.","notes":"Created from Codex P1 review finding 3734483475 on PR #3872. Existing phase edges remain present, but their required-edge guard was not executable.\nClosure evidence: merged PR 3881 at merge commit a85bb6eb5ac74bfddd458c12e29642b2695fe775. The guard passed 43 focused graph tests and all 24 quick verification steps. Live receipts remain separate.","status":"closed","priority":0,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-08-07T08:44:35Z","created_by":"Sinity","updated_at":"2026-08-07T23:12:28Z","started_at":"2026-08-07T09:48:30Z","closed_at":"2026-08-07T23:11:42Z","close_reason":"Merged PR #3881 () adds the typed twelve-edge required-proof matrix, fail-closed missing-edge checks, preflight and terminal-proof bindings, and mutation coverage. Verified with 43 focused graph tests and all 24 quick-gate steps. Live receipts remain open under their own Beads.","labels":["area:devtools","lane:reindex"],"dependencies":[{"issue_id":"polylogue-eqq02","depends_on_id":"polylogue-reindex-proof-edge-correction","type":"discovered-from","created_at":"2026-08-07T10:44:34Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":2,"comment_count":0} {"_type":"issue","id":"polylogue-s8gcr","title":"maintenance: harden cursor reconciliation proof gates","description":"Close the implementation residuals identified by Codex review of the cursor-authority reconciliation route. The implementation must preserve the typed incomparable population while producing a deterministic not_applicable plan when the selected cursor-ahead row has disappeared, and apply must revalidate the current full-evidence blob inventory rather than trusting stale receipt booleans.","design":"Add a real-route regression for the zero-ahead plus preserved incomparable population. Extend backup validation to inspect the current blob inventory and compare every required blob path and digest before apply. Preserve the existing single-path authorization and no-direct-repair rules.","acceptance_criteria":"1. A disappeared selected row with the known incomparable population emits typed not_applicable without mutation. 2. Apply rejects a deleted, added, or changed backup blob after receipt creation. 3. The exact current blob inventory is compared before mutation and recorded in the reconciliation receipt. 4. Existing focused cursor reconciliation tests and devtools verify --quick pass. 5. The live cursor-authority receipt remains separate and open until a production apply is independently executed.","notes":"Created from Codex P1 review findings 3734483480 and 3734483485 on PR #3872. This is implementation hardening, not a production receipt.","status":"closed","priority":0,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-08-07T08:44:35Z","created_by":"Sinity","updated_at":"2026-08-08T00:04:16Z","started_at":"2026-08-07T09:39:38Z","closed_at":"2026-08-08T00:04:16Z","close_reason":"Merged PR #3873 at f2adcd44569a. The cursor reconciliation planner now emits typed not_applicable for a disappeared selected row while preserving incomparable authority data, and apply revalidates the complete current backup blob inventory. Focused maintenance, watcher, retention, and CLI route checks passed; devtools verify --quick passed all 24 steps. This is implementation hardening only. The production cursor-authority receipt remains open.","labels":["area:maintenance","lane:reindex"],"dependencies":[{"issue_id":"polylogue-s8gcr","depends_on_id":"polylogue-cursor-authority-reconcile-implementation","type":"discovered-from","created_at":"2026-08-07T10:44:34Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} From 8867a00896777c2bf183d6e5f0e9dc11dcc7f561 Mon Sep 17 00:00:00 2001 From: Sinity Date: Mon, 10 Aug 2026 16:39:49 +0200 Subject: [PATCH 3/3] chore(beads): reopen incomplete audit toolchain --- .beads/issues.jsonl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 5625fe1bb7..083bba93ad 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -711,7 +711,7 @@ {"_type":"issue","id":"polylogue-nzk3i","title":"ast-grep advisory rule pack: verdict predicates as diffable rule files","description":"Encode recurring flaw-class predicates as ast-grep YAML rules under devtools/rules/: hand-written CHECK(col IN (...)) string literals in archive_tiers not produced by check()/literal_check() (3szyi's detector), datetime.now/time.time outside tests (static mirror of the runtime clock guard), except-pass and lossy-default shapes in provider dispatch. Run as an ADVISORY lane in verify first; promote individual rules to blocking only after measured false-positive rates. Rules-as-files makes audit predicates reviewable, diffable objects — and each rule is a red instrument in ey4ro's terms (fails before the fix, guards siblings after).","acceptance_criteria":"1. devtools/rules/ exists with \u003e=3 working rules and a runner wired into verify as advisory. 2. Each rule documents its flaw class + seed bead. 3. At least one rule's FP rate is measured and recorded before any promotion to blocking.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:12:27Z","created_by":"Sinity","updated_at":"2026-08-03T07:12:27Z","labels":["area:devtools"],"dependencies":[{"issue_id":"polylogue-nzk3i","depends_on_id":"polylogue-3szyi","type":"relates-to","created_at":"2026-08-03T09:12:27Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-nzk3i","depends_on_id":"polylogue-ey4ro","type":"relates-to","created_at":"2026-08-03T09:12:27Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-3godk","title":"Scheduled full-suite coverage refresh feeding dead-code/audit joins","description":"The dead-code intersection (h75b) and audit coverage-joins are only as honest as .cache/coverage/coverage.json freshness — the lab join used a 2026-07-09 snapshot. Add a cadence: post-merge-train (or weekly scheduled) full-suite coverage run archiving dated snapshots, with the consuming lanes refusing (or loudly warning) when the snapshot exceeds an age budget. Stale dynamic data silently degrades the intersection back to static-only quality; make that failure impossible rather than remembered.","acceptance_criteria":"1. A dated coverage snapshot exists under .cache/coverage/ (or .local/) with a documented refresh trigger. 2. h75b's lane checks snapshot age and says so in output. 3. One refresh has actually run on current master.","status":"open","priority":2,"issue_type":"chore","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:11:59Z","created_by":"Sinity","updated_at":"2026-08-03T07:11:59Z","labels":["area:test"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-mo10b","title":"Fix extract_facts.py module-level-call gap, promote to devtools audit extract","description":"The lab's L0 fact extractor (experiments/audit-tooling/extract_facts.py) never collects module-level calls (registrations, decorator applications at import time) — traced via jedi as a major contributor to the 66.3% false-positive floor measured for static-only dead-code detection (coverage join over 1,545 candidates). Fix the gap, then promote the extractor to a devtools command (devtools audit extract) emitting versioned DuckDB under .cache/audit/ with a committed schema note: defs/classes (qualified name, span, decorators, complexity), import edges, call references, git churn. Every audit lens reads this instead of re-walking the AST.","acceptance_criteria":"1. Module-level calls appear in the call table (regression case: a Click-registered command gains a caller edge). 2. devtools audit extract produces the DuckDB and is listed in the devtools catalog. 3. Re-measured dead-code FP floor drops materially from 66.3% on the same candidate set.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:11:58Z","created_by":"Sinity","updated_at":"2026-08-03T07:11:58Z","labels":["area:devtools"],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-29hwx","title":"Land the proven audit toolchain: audit dependency group + flake tools","description":"The audit-tooling lab (branch feature/chore/audit-tooling-lab, experiments/audit-tooling/REPORT.md) proved the roster against this codebase. Adopt permanently: pyproject audit dependency group (grimp, import-linter, vulture, radon, jedi, duckdb, networkx, libcst) and flake devshell additions (ast-grep, scc, codeql with unfree allowance). Exclusions with reasons in the REPORT (semgrep dep-conflict, pydeps redundant vs grimp, tree-sitter cp314t ABI). One PR; the lab branch stays as evidence.","acceptance_criteria":"1. uv sync --group audit works in a fresh checkout. 2. ast-grep/scc/codeql available in devshell. 3. REPORT.md adoption notes updated to point at the landed stanza.","status":"closed","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:11:57Z","created_by":"Sinity","updated_at":"2026-08-10T13:05:26Z","closed_at":"2026-08-10T13:05:26Z","close_reason":"Merged in PR #3917 at 09c07b8ab. Acceptance evidence: audit dependency group and lockfile landed; flake devshell declares ast-grep, scc, and codeql; REPORT.md records the landed stanza and explicit invocations. ast-grep and the scc/codeql derivations are present in the Nix store; live devshell command execution was not repeated while the host heavy-work lease was held.","labels":["area:devtools"],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-29hwx","title":"Land the proven audit toolchain: audit dependency group + flake tools","description":"The audit-tooling lab (branch feature/chore/audit-tooling-lab, experiments/audit-tooling/REPORT.md) proved the roster against this codebase. Adopt permanently: pyproject audit dependency group (grimp, import-linter, vulture, radon, jedi, duckdb, networkx, libcst) and flake devshell additions (ast-grep, scc, codeql with unfree allowance). Exclusions with reasons in the REPORT (semgrep dep-conflict, pydeps redundant vs grimp, tree-sitter cp314t ABI). One PR; the lab branch stays as evidence.","acceptance_criteria":"1. uv sync --group audit works in a fresh checkout. 2. ast-grep/scc/codeql available in devshell. 3. REPORT.md adoption notes updated to point at the landed stanza.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:11:57Z","created_by":"Sinity","updated_at":"2026-08-10T14:39:49Z","labels":["area:devtools"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-60gzo","title":"doctrine: two verification planes, one predicate library - dissolve archive-poking lab commands","description":"Operator ruling direction 2026-08-03: live-archive 'labs' are a deadly complexity buildup. Systematic answer: ONE predicate library (the t0m73 registry), TWO planes. Plane 1 (CI, hermetic): predicates x synthetic corpora via the convergence-property loop - ALL code-correctness verification lives here; fully replaces live-archive runs for correctness questions (incl. differential lanes as metamorphic properties). Plane 2 (production monitoring): the SAME predicates x the live archive, run ONLY by the daemon (health tiers) and promotion/readiness gates - this is monitoring of a production system, not a dev tool; it answers 'is MY archive healthy', which no synthetic test can (the archive contains outputs of dead code vintages). THE RULE: a permanent named check is a registry predicate (runs in both planes automatically) or it does not exist; one-off investigations are session scripts that die with their campaign; no operator-invoked archive-poking lab commands survive. Execution: inventory devtools lab's verification-lab entries (37 CommandSpecs), classify each as registry-predicate (migrate), static source lint (stays in devtools verify), or session-script relic (delete); the lab category shrinks to static lints only. Honest residual: campaign-style enumerations (wwph1) legitimately poke the live archive read-only - they are bounded campaigns with ledgers, not permanent surface.","design":"DESIGN — THE DOCTRINE, CONCRETELY (2026-08-03):\n\nONE PREDICATE LIBRARY = SHARED CODE, NOT SHARED PROSE: the library already exists in embryo — ARCHIVE_VERIFICATION_CHECKS in polylogue/maintenance/archive_verification.py: a tuple of ArchiveVerificationCheckSpec, each a pure read-only function (archive_root, sample_limit) -\u003e ArchiveVerificationCheck, designed to tolerate a concurrent rebuild, with typed error/skip outcomes (_error_check/_skip_check — a check that cannot run is a finding, not a pass). t0m73's I2/I3/I4/I5/I8 are already in it. \"One library\" means: every permanent named invariant is a spec in this tuple (or a sibling registry module for non-archive predicates), imported by BOTH planes; neither plane ever re-implements a predicate.\n\nPLANE 1 — CI × SYNTHETIC (all code-correctness verification): pytest wrappers iterate the registry over fixture archives (seeded corpus + a violation zoo). Contract per predicate: (a) a green binding — the check passes on a healthy fixture; (b) a RED TWIN — a fixture engineered to violate exactly this invariant, on which the check must fail (anti-vacuity; this is also ey4ro's instrument kind \"registry-check-fixture\"). Differential/metamorphic lanes (two code paths must agree) are Plane-1 properties over synthetic corpora, not live-archive commands. Runs under devtools verify/testmon like any test.\n\nPLANE 2 — DAEMON × LIVE (production monitoring, not a dev tool): the SAME registry executed only by (a) the daemon's health tiers on schedule and (b) promotion/readiness gates — specifically the rebuild-index promote step runs the registry against the candidate generation before flipping .index-active-pointer, and the 818fy runbook cites the registry receipt. Answers \"is MY archive healthy\" (the archive contains outputs of dead code vintages — no synthetic test can answer this). Never operator-invoked ad hoc except via `polylogue status`-class read surfaces that render the daemon's latest receipt.\n\nTHE RULE: a permanent named check is a registry predicate (and thereby runs in both planes automatically) or it does not exist. One-off investigations are session scripts under .agent/scratch/ that die with their campaign (wwph1's ledger scripts are the sanctioned example — bounded campaigns with ledgers, read-only).\n\nEXECUTION — DISSOLVE THE LAB: inventory the `lab` category of devtools/command_catalog.py (147 CommandSpecs total repo-wide; the lab subset includes graph, lanes, 8 policy lints, provider completeness, 5 probes, projections, smoke, 9 schema ops, seed-receipt-compare, snapshot...). Classify each lab entry into exactly one bucket:\n 1. REGISTRY-PREDICATE: it verifies a live-archive invariant → migrate its predicate into ARCHIVE_VERIFICATION_CHECKS (+ Plane-1 binding + red twin), then delete the command.\n 2. STATIC SOURCE LINT: no archive needed (policy checks like schema-versioning, bead-graph) → stays, runs under devtools verify; not a \"lab\" concern — recategorize.\n 3. SESSION-SCRIPT RELIC: one-off investigation fossil → delete outright (no deprecation theater).\n 4. GENUINE OPERATOR WORKFLOW (schema generate/commit/promote): not verification at all → keep, but out of the verification-lab framing.\nEnd state: the lab category contains no operator-invoked live-archive verification commands; correctness questions route to Plane 1, health questions to Plane 2.\n","acceptance_criteria":"1. A committed classification table covering every devtools lab CommandSpec that touches a live archive, each assigned exactly one bucket: registry-predicate (migrate) | static-source-lint (recategorize into devtools verify) | session-script relic (delete) | genuine operator workflow (keep, out of verification framing).\n2. Every migrated predicate exists as an ArchiveVerificationCheckSpec in the shared registry with BOTH plane bindings: a Plane-1 pytest fixture binding plus a red-twin violation fixture proving non-vacuity, and Plane-2 execution wiring (daemon health tier and/or rebuild-index promotion gate), verified by `devtools test -k archive_verification`.\n3. After the sweep, the lab category contains zero operator-invoked live-archive verification commands; `devtools render devtools-reference` regenerated clean.\n4. The doctrine text (two planes, one predicate library, the permanent-check rule, the wwph1 bounded-campaign exemption) is recorded in the owning doc (docs/devtools.md or docs/architecture-spine.md decision log), citing this bead.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T07:09:12Z","created_by":"Sinity","updated_at":"2026-08-03T10:48:46Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-2xxj2","title":"Triage grimp-found reverse-layering edges vs devtools verify layering green","description":"The audit-tooling lab (branch feature/chore/audit-tooling-lab, experiments/audit-tooling/REPORT.md, 2026-08-03) found via grimp + import-linter, cross-confirmed, 6 direct plus several transitive import edges from storage/pipeline/sources into api/daemon/mcp -- the direction CLAUDE.md declares zero-exception clean and devtools verify layering gates with no baseline. Yet the layering gate is green on master. One of these is wrong: either the bespoke check's import extraction misses edge shapes grimp sees (function-local imports, TYPE_CHECKING, re-exports, lazy imports), or grimp counts edges the doctrine intentionally permits, or there are real violations sneaking past the gate (vwdj-class: lint narrower than doctrine). Triage each of the 6 direct edges named in the lab REPORT: real violation (fix or baseline consciously) vs checker gap (extend verify_layering extraction) vs grimp semantics artifact (document why benign). The transitive edges follow from whichever direct verdicts stand.","acceptance_criteria":"1. Each of the 6 direct edges has a verdict with file:line evidence. 2. If any checker gap is confirmed, verify_layering's extraction is extended (or a follow-up bead filed) so the gate actually enforces the doctrine it claims. 3. CLAUDE.md's zero-exception claim is either restored to true or corrected.","notes":"Follow-through once triaged (B7): run grimp inside verify_layering as a permanent cross-check — two independent import graphs must agree on the clean direction, disagreement fails loudly. Keeps the bespoke writer-doctrine half untouched.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T06:33:01Z","created_by":"Sinity","updated_at":"2026-08-03T07:42:06Z","labels":["area:substrate"],"dependencies":[{"issue_id":"polylogue-2xxj2","depends_on_id":"polylogue-9e5","type":"discovered-from","created_at":"2026-08-03T08:33:00Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-5tkbt","title":"storage: 9 logical sources unindexed with NO typed state at all (not quarantined, no parse_error) - the untyped-leak class exists beyond quarantine","description":"Invariant I1 (2026-08-03 live run): of 7,200 unindexed logical sources, 7,191 are quarantined (tracked via lkrc/hjpx) but 9 have revision_authority NOT IN ('quarantined') AND parse_error IS NULL - no typed state anywhere explains why they are not materialized. Small count, but proves items can leave every mechanism's candidacy without ANY durable explanation - the exact failure hjpx's execute-or-typed-terminal rule is meant to forbid, occurring outside the quarantine machinery. AC: identify the 9 (query in .agent/scratch/archive-invariants-2026-08-03.py I1), classify how each escaped, close the leak path, and leave I1 green.","status":"open","priority":2,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T05:35:28Z","created_by":"Sinity","updated_at":"2026-08-03T05:35:28Z","dependency_count":0,"dependent_count":0,"comment_count":0}