diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 5670c954d9..55bf665e37 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -19,7 +19,7 @@ {"_type":"issue","id":"polylogue-6k0na","title":"fix(storage): attest authorized source mutations across durable train continuity","description":"The durable source train continuity gate records exact content evidence at schema release. A backup-gated source liveness operation can legitimately mutate source.db after that release, but the next migration or daemon startup rejects the archive because source-028.json still carries the pre-mutation content hash. This blocks the production source-remediation phase after a valid apply and creates pressure to bypass the durable change-train gate. The fix must preserve fail-closed behavior while giving named source mutation routes a receipt-bound way to refresh continuity evidence.","design":"Add a typed, receipt-backed continuity refresh for authorized source-tier maintenance. It must require the released source train, stopped daemon, the archive ownership lease, a verified backup covering the pre-apply state, the exact mutation receipt and operation identity, unchanged archive identity and schema version, quick_check, and a post-mutation source evidence capture. Persist the refresh in the durable train manifest as an auditable successor to the released content evidence. Reject arbitrary file or SQL changes, stale receipts, wrong archive identity, version changes, missing backup attestation, and refreshes for non-source or non-released trains. Wire the blob-reference-liveness apply route through this seam and add real file-backed red tests for an unreceipted mutation and a successful authorized refresh. Do not weaken source identity, schema, or backup checks.","acceptance_criteria":"1. A valid backup-gated source liveness apply emits a typed mutation receipt that can refresh the released source train continuity evidence. 2. Startup and the next durable migration accept the refreshed train only when archive identity, schema version, quick_check, backup binding, operation identity, and post-mutation evidence match. 3. Missing, stale, malformed, wrong-archive, wrong-tier, or unreceipted mutations remain fail-closed. 4. No direct train-manifest editing or generic bypass flag is added. 5. Real file-backed tests cover successful refresh and each safety rejection. 6. Focused durable-train and blob-liveness tests plus devtools verify --quick pass. 7. Production source mutation remains under the phase-2 source-remediation receipt and is not closed by synthetic tests.","status":"closed","priority":0,"issue_type":"bug","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T23:49:12Z","created_by":"Sinity","updated_at":"2026-08-10T15:48:13Z","started_at":"2026-08-10T14:46:18Z","closed_at":"2026-08-10T15:48:13Z","close_reason":"Implementation ACs satisfied by merged PR #3924 at e33fbcac2: source-tier continuity refresh now has typed backup/receipt binding and wrong-tier rejection, with 97 focused tests and quick-gate evidence. The live source mutation itself remains open under the phase-2 source-remediation operation.","dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-i3i5k","title":"reindex: prove post-promotion convergence and public query tour","description":"Phase 6 postflight aggregation for the production reindex. Consume the accepted promotion and restart receipt, then prove the real daemon converges against the promoted generation, health remains within the declared envelope, the canonical public CLI/API/MCP query tour preserves provenance and lineage state, and the retained rollback generation remains available. This is an evidence-only phase and does not authorize a second promotion or synthesize a terminal proof.","design":"Require the exact promotion/restart receipt, deployed package identity, active generation identity, and post-restart daemon ownership. Run the named convergence and health checks against the promoted archive, then the canonical public query tour through CLI, API, and MCP read paths. Bind every result to current source, semantics, generation, and process fingerprints. Record typed residuals for health debt, convergence debt, query-contract degradation, or rollback-retention loss. The terminal proof must depend on this phase, not infer postflight from the promotion receipt.","acceptance_criteria":"1. Promotion/restart receipt is valid and names the active generation and deployed package. 2. Real daemon restart is followed by bounded convergence with no unexplained debt or typed residuals accepted by the campaign ledger. 3. Health and ownership receipts bind the live process, archive tiers, schemas, and generation. 4. Canonical CLI, API, and MCP query tour passes against the promoted generation and preserves provenance, authority, uncertainty, lineage, and action/result state. 5. Previous generation remains rollback-available and its retention receipt is current. 6. A self-hashed postflight receipt is consumed directly by polylogue-reindex-final-proof; no terminal proof is emitted here.","status":"open","priority":0,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T16:52:48Z","created_by":"Sinity","updated_at":"2026-08-06T16:52:48Z","labels":["area:maintenance","lane:reindex"],"dependencies":[{"issue_id":"polylogue-i3i5k","depends_on_id":"polylogue-reindex-promotion-restart","type":"blocks","created_at":"2026-08-06T18:53:03Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-uecir","title":"acceptance: complete Antigravity source remediation before candidate freeze","description":"PR #3859 Codex review comment 3728626200 identified a phase-ordering hole: the 44 real Antigravity conversation reingest and 116 metadata-stub purge are source-side work required before the frozen source snapshot, but the current graph leaves polylogue-msia runnable only after promotion. That permits candidate construction from the old 328 MB-missing source state.\n\nThis Bead is the phase-2 live operation receipt. It does not implement the RPC parser or phantom purge actuator, which already have merged implementation Beads, and it does not perform production mutation without the operator boundary.\n","design":"Before candidate construction, require the selected deployed package and Antigravity language-server RPC availability, perform the real conversations/*.pb reingest through the ordinary source acquisition route, then run the existing backup-gated phantom purge actuator against the 116 metadata stubs. Bind the exact backup, package, source snapshot, before/after raw and session censuses, message-count distribution, zero metadata-only sessions, retained AGENT_SIDECAR_META provenance, RPC evidence, and quick_check results into an immutable receipt. If RPC is unavailable, emit typed not_applicable only with the exact unsupported-origin evidence and keep candidate acceptance blocked unless the operator explicitly accepts the exclusion. No direct SQL deletes.\n","acceptance_criteria":"1. The source phase cannot freeze or build a candidate while the Antigravity source-side receipt is missing.\n2. RPC availability is checked before any apply and absence is typed, never silently skipped.\n3. The real conversations/*.pb route produces the expected real-session/message cohort or a typed blocked outcome.\n4. The existing backup-gated phantom purge removes the metadata-only stubs while retaining AGENT_SIDECAR_META provenance.\n5. Before/after source and index-independent counts, origin distribution, package SHA, backup identity, and quick_check are recorded.\n6. The receipt is consumed by polylogue-reindex-source-remediation and polylogue-live-operation-receipts.\n7. No production mutation is performed by implementation lanes; the operator applies the named command in the maintenance window.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T15:35:00Z","created_by":"Sinity","updated_at":"2026-08-06T15:35:00Z","labels":["area:maintenance","area:verification","lane:reindex"],"dependency_count":0,"dependent_count":2,"comment_count":0} -{"_type":"issue","id":"polylogue-inygw","title":"ci: make PR scope validation base-authoritative","description":"The merged PR-scope carrier still has review findings that can let the judged checkout influence the validator or silently skip validation: Circle runs the launcher from the PR checkout before the base validator is selected (3726551763), edits to the PR body do not trigger the quick gate and can leave a stale green result (3726551752), missing PR discovery returns success (3726990948), and any branch named master is skipped before checking whether it is a fork PR (3726990964). The validator also rejects a valid self-contained PR with no Bead assignment (3726328441). The existing structured resolver-keyword guard must remain (3726551758).\n\nThis is process infrastructure, not a prose lint exercise. The carrier must remain the structured source of truth.\n","design":"Make the Circle entrypoint use a trusted base-revision launcher or a repository-controlled immutable validator before loading PR-controlled code. Make carrier/body changes invalidate the exact quick-gate receipt through the head and carrier digest binding, and fail closed when no unique open PR can be resolved. Skip master only when the build is confirmed to be a non-PR default-branch build. Permit an explicit structured self-contained scope mode with an empty assigned-Bead set and an empty digest, while preserving all existing structured safety guards and resolver-keyword protection.\n\nDo not parse close reasons, PR prose, or comments to infer completion. Add tests for fork master builds, missing PR discovery, carrier edit after a passing check, self-contained scope, and a PR-controlled launcher mutation.\n","acceptance_criteria":"1. A PR cannot replace the validator or launcher used to judge its own scope.\n2. Carrier edits cannot retain a fresh green receipt for an older body/digest.\n3. Missing or ambiguous PR discovery fails closed.\n4. Fork PRs on a branch named master are validated, while a confirmed non-PR default-branch build is skipped.\n5. Self-contained PRs can use an explicit structured empty-Bead scope without weakening validation.\n6. Existing structured resolver-keyword protection remains active.\n7. Controlled mutations make each failure mode red.\n8. Focused PR-scope tests and devtools verify --quick pass.","notes":"2026-08-11: polylogue-9pf58 owns the evidence-backed automated dependency-PR subcase requested after Dependabot PRs #3935-#3939 all failed Circle quick-gate without Bead carriers. It will preserve ordinary carrier enforcement and test authoritative bot identity plus dependency-only changed-file admission. The remaining base-authoritative launcher/body-discovery ACs stay on this bead.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T15:27:53Z","created_by":"Sinity","updated_at":"2026-08-10T22:13:16Z","labels":["area:devtools","area:verification"],"dependencies":[{"issue_id":"polylogue-inygw","depends_on_id":"polylogue-9pf58","type":"relates-to","created_at":"2026-08-10T22:53:35Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} +{"_type":"issue","id":"polylogue-inygw","title":"ci: make PR scope validation base-authoritative","description":"The merged PR-scope carrier still has review findings that can let the judged checkout influence the validator or silently skip validation: Circle runs the launcher from the PR checkout before the base validator is selected (3726551763), edits to the PR body do not trigger the quick gate and can leave a stale green result (3726551752), missing PR discovery returns success (3726990948), and any branch named master is skipped before checking whether it is a fork PR (3726990964). The validator also rejects a valid self-contained PR with no Bead assignment (3726328441). The existing structured resolver-keyword guard must remain (3726551758).\n\nThis is process infrastructure, not a prose lint exercise. The carrier must remain the structured source of truth.\n","design":"Make the Circle entrypoint use a trusted base-revision launcher or a repository-controlled immutable validator before loading PR-controlled code. Make carrier/body changes invalidate the exact quick-gate receipt through the head and carrier digest binding, and fail closed when no unique open PR can be resolved. Skip master only when the build is confirmed to be a non-PR default-branch build. Permit an explicit structured self-contained scope mode with an empty assigned-Bead set and an empty digest, while preserving all existing structured safety guards and resolver-keyword protection.\n\nDo not parse close reasons, PR prose, or comments to infer completion. Add tests for fork master builds, missing PR discovery, carrier edit after a passing check, self-contained scope, and a PR-controlled launcher mutation.\n","acceptance_criteria":"1. A PR cannot replace the validator or launcher used to judge its own scope.\n2. Carrier edits cannot retain a fresh green receipt for an older body/digest.\n3. Missing or ambiguous PR discovery fails closed.\n4. Fork PRs on a branch named master are validated, while a confirmed non-PR default-branch build is skipped.\n5. Self-contained PRs can use an explicit structured empty-Bead scope without weakening validation.\n6. Existing structured resolver-keyword protection remains active.\n7. Controlled mutations make each failure mode red.\n8. Focused PR-scope tests and devtools verify --quick pass.","notes":"2026-08-11: polylogue-9pf58 owns the evidence-backed automated dependency-PR subcase requested after Dependabot PRs #3935-#3939 all failed Circle quick-gate without Bead carriers. It will preserve ordinary carrier enforcement and test authoritative bot identity plus dependency-only changed-file admission. The remaining base-authoritative launcher/body-discovery ACs stay on this bead.\n2026-08-11: child polylogue-inygw.1 is satisfied by merged PR #3943 and closure bookkeeping PR #3944. Remaining parent scope is base-authoritative launcher selection, carrier/body invalidation, fail-closed PR discovery, fork-master handling, and explicit self-contained scope.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T15:27:53Z","created_by":"Sinity","updated_at":"2026-08-11T02:29:09Z","labels":["area:devtools","area:verification"],"dependencies":[{"issue_id":"polylogue-inygw","depends_on_id":"polylogue-9pf58","type":"relates-to","created_at":"2026-08-10T22:53:35Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-dcrmm","title":"fix: preserve durable identity across later schema trains","description":"Codex review of merged PR #3834 found that a durable change-train admission path accepts any structurally valid SQLite database when actual user_version is newer than the train target, without preserving archive/file identity or proving that the historical train schema is represented (3724461144). The same review found unbounded lifecycle-failure sampling during migration ownership (3724461151) and repeated full database evidence capture for every historical manifest (3724461154).\n\nThe existing implementation Bead and live migration Bead remain historically honest. This successor owns the missing forward-version identity, bounded probe, and evidence-cache behavior.\n","design":"When a durable tier is ahead of a historical train target, require an immutable archive/file identity binding and prove the requested historical schema remains represented before accepting the later version. Do not accept integrity_check alone. Bound lifecycle probes at the SQL selection boundary so sample_limit bounds scans and correlated evidence lookups, and cache or share durable evidence across historical manifests in one startup admission pass. Keep the exact current target and historical train semantics explicit in receipts. Add real file-backed mutation tests for a valid unrelated later-version database, a large failure population, and multiple historical manifests.\n","acceptance_criteria":"1. A valid later-version database from another archive is rejected despite passing integrity_check.\n2. A same-archive later-version database is accepted only with historical-schema and identity evidence.\n3. Lifecycle probes perform bounded SQL work proportional to sample_limit.\n4. Multiple historical manifests do not recapture the complete durable database once per manifest.\n5. Red tests fail if identity, bounded selection, or evidence reuse is removed.\n6. Focused durable-train tests and devtools verify --quick pass.\n7. Live migration remains under polylogue-9qnzy and polylogue-a7gmk.","notes":"Codex closed-PR audit 2026-08-06: PR #3834 findings 3724461144, 3724461151, and 3724461154 are the authoritative residual scope. Require same-archive identity and historical-schema evidence for later versions, SQL-bounded lifecycle sampling, and one durable-evidence capture reused across historical manifests. No integrity_check-only acceptance.\nClosure evidence: merged PR 3875 at merge commit aa976bb841ec602824d316c065520bf186bf3e1a, implementation head 06e9cdbe6d09582b936839954ea660f43511186b. Focused suite passed 99 tests and quick verification passed all 24 steps. Live migration remains under polylogue-9qnzy and polylogue-a7gmk.","status":"closed","priority":0,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T15:27:50Z","created_by":"Sinity","updated_at":"2026-08-07T23:12:25Z","started_at":"2026-08-07T09:48:30Z","closed_at":"2026-08-07T23:11:38Z","close_reason":"Merged PR #3875 () satisfies the implementation scope: later-version identity and historical-schema admission, SQL-bounded lifecycle sampling, shared durable evidence, authenticated fresh-bootstrap recovery, and the focused red regressions. Verified with 99 focused tests and all 24 quick-gate steps. Live durable migration remains under polylogue-9qnzy and polylogue-a7gmk; this closure does not claim a production migration.","labels":["area:storage","area:verification","lane:reindex"],"dependency_count":0,"dependent_count":2,"comment_count":0} {"_type":"issue","id":"polylogue-q4qpl","title":"fix: bind rebuild receipts to immutable source evidence","description":"Codex review of merged PR #3803 left four reindex-safety gaps in the schema-inference and rebuild receipt contract: parser-affecting source metadata is omitted from the immutable snapshot (3724479717), large external ground-truth trees are fully rehashed at every checkpoint (3724479723), internal blob bytes are trusted from recorded hashes without a second integrity snapshot (3724479730), and a receipt validation failure after pointer promotion can leave an active generation paired with a ready transaction (3724479731). The CLI relative receipt path finding 3724479738 is included because it can make a valid daemon rebuild consume the wrong evidence.\n\nThis Bead owns implementation and tests only. It does not authorize production migration or promotion.\n","design":"Expand the source snapshot with every replay-affecting raw field, including capture mode, revision kind, logical source key, predecessor and authority fields, and any semantic fingerprint already consumed by replay. Compute one identity-bound external inventory token for a rebuild pass and reuse it for repeated validation transitions, while detecting source changes before a new pass or terminal acceptance. Add a non-mutating internal blob snapshot or equivalent verified capability bound to the exact referenced blob universe, and require it before candidate readiness.\n\nReorder the terminal rebuild transition so every fallible receipt and corpus validation completes before the pointer flip. After promotion, record the promoted transaction state and receipt through a non-failing durable transition; if post-promotion evidence collection itself fails, emit an explicit post-promotion-attestation failure rather than leaving a ready transaction that looks resumable. Resolve CLI receipt paths to absolute paths before daemon transport. Preserve all existing fail-closed behavior and do not add an unbounded rehash to every page.\n","acceptance_criteria":"1. Parser-affecting source metadata changes invalidate a saved rebuild receipt and transaction.\n2. Repeated validation in one pass reuses an identity-bound external inventory token without weakening change detection.\n3. Referenced internal blob bytes are verified against a bound snapshot before candidate readiness.\n4. A failure after promotion cannot leave a ready transaction paired with a different active generation.\n5. Relative daemon receipt paths are resolved at the CLI boundary.\n6. Red tests prove each finding is load-bearing and fail if the old behavior is restored.\n7. Focused maintenance/CLI tests and devtools verify --quick pass.\n8. Production migration and candidate promotion remain out of scope.\n9. A successful metadata-triggered rehash returns and stores the refreshed inventory detector token in every rebuild provenance context that performs later checkpoint validation; a regression proves the next checkpoint performs no second inventory scan.\n10. Offline/operator-created rebuild transactions reconcile an active generation after post-promotion attestation failure before any retry or replacement; a production-route regression proves no ready transaction remains paired with an active generation after both checkpoint writes fail.","notes":"Open-PR audit correction 2026-08-06: Codex findings 3731416371 and 3731416449 identified stale detector bindings after a successful metadata-triggered rehash. Commit 13a52ab4c refreshes per-origin detector bindings in the returned inventory token and adds a regression proving the next validation performs zero additional inventory scans. Focused schema-inference suite: 24 passed; devtools verify --quick: 24 steps passed. No production or candidate operation.\nOpen-PR delta audit 2026-08-06: Codex finding 3731481388 remains actionable because RebuildProvenanceContext.validate() consumes the returned blob snapshot but does not assign the refreshed external_ground_truth_inventory_token back to self.external_inventory_token. Finding 3731481390 remains actionable because offline rebuild_index_from_source_sync operation-ID recovery lacks the daemon active-generation reconciliation path. These are implementation residuals; live-operation receipts remain under polylogue-live-operation-receipts.\nCoordinator correction 2026-08-06: current master still lacks both actionable implementation residuals recorded above. Keep this Bead open until the inventory-token assignment and offline active-generation reconciliation are merged and their named regressions pass.","status":"closed","priority":0,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T15:27:46Z","created_by":"Sinity","updated_at":"2026-08-10T15:48:13Z","started_at":"2026-08-10T14:46:18Z","closed_at":"2026-08-10T15:48:13Z","close_reason":"Implementation ACs satisfied by merged PR #3923 at b941e330b1522063a40ac8d96b3e78f8129c3e5e: provenance residual regressions cover offline post-promotion reconciliation after both checkpoint writes fail, with focused maintenance/CLI tests and quick gate evidence. Production migration and promotion remain explicitly out of scope.","labels":["area:maintenance","area:verification","lane:reindex"],"dependencies":[{"issue_id":"polylogue-q4qpl","depends_on_id":"polylogue-dudtn","type":"blocks","created_at":"2026-08-06T17:27:45Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-ohkfy","title":"test: make incident ledger current-set authoritative","description":"The incident ledger merged in PR #3839 validates its own checked-in graph fixture but does not prove that the current Beads forcing set equals the ledger forcing set. It also lacks typed dependency-kind validation, source resolution for fixtures and receipts, bead-linked receipt ownership, and an unconditional devtools gate. These are review findings 3726231031, 3726231040, 3726292151, 3726231046, 3726292133, 3726292138, and 3726292144.\n\nMake the existing incident coverage validator consume a structured current-Beads export or digest supplied by the verification control plane. Keep natural language out of the gate. Preserve the committed ledger as a reviewed artifact, but fail closed when a current direct forcing dependency or P0 live acceptance Bead is absent, when dependency kinds are unknown, or when catalog references do not resolve. This is implementation and verification scope only. Do not close the campaign ledger Bead until the dynamic equality proof is green.\n","design":"Extend the existing versioned JSON ledger schema with an explicit closed dependency-kind vocabulary, typed route and receipt ownership fields, and source references that resolve to committed fixtures or named live-proof receipt producers. Add a loader path that receives the current Beads forcing-set export from the devtools command rather than parsing prose or importing a stale graph fixture. The current forcing set is the transitive dependency closure relevant to 818fy, including open, in-progress, and closed implementation nodes with named residual successors. Compare it to the ledger row set and require exact equality after the declared implementation-to-successor normalization.\n\nWire one unconditional check into the reindex verification command. It must run even when no optional campaign environment is present and must fail with a structured report naming missing, extra, stale, and unresolved entries. Add red tests that delete one current forcing row, add one new P0 blocker, change a dependency kind, remove a fixture source, and detach a receipt from its owning Bead. Do not infer correctness from close-reason text.\n","acceptance_criteria":"1. Current Beads forcing-set equality is checked against the ledger on every relevant devtools verification run.\n2. Dependency kinds are a closed typed vocabulary and unknown kinds fail validation.\n3. Every fixture, check, snapshot, receipt producer, and successor reference resolves.\n4. Every live receipt is associated with its owning Bead and cannot satisfy another row by name alone.\n5. The check is unconditional for the reindex gate and emits machine-readable missing/extra/stale diagnostics.\n6. Controlled red mutations make the validator fail for one missing row, one extra blocker, one unknown dependency kind, one missing source, and one unowned receipt.\n7. Existing ledger tests pass and devtools verify --quick passes.","status":"open","priority":0,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T15:25:08Z","created_by":"Sinity","updated_at":"2026-08-10T20:48:06Z","started_at":"2026-08-07T09:48:30Z","labels":["area:verification","lane:reindex"],"comments":[{"id":"3c69ecef-ef87-5e2b-9839-d45a0d887b17","issue_id":"polylogue-ohkfy","author":"Sinity","text":"Scope for the fresh implementation lane: extend the structured incident ledger validator so current Beads forcing-set equality is supplied by devtools input and reports machine-readable missing, extra, and stale IDs; validate a closed dependency-kind vocabulary; resolve every fixture, check, snapshot, receipt producer, and successor source; bind each live receipt to its owning Bead; and wire the check unconditionally into the reindex verification path. Add red mutation tests for one missing current row, one extra P0 blocker, one unknown dependency kind, one missing source, and one receipt with the wrong owner. No production/archive mutation, no Beads claim/close/status change, and no campaign closure. Verification target is the focused real-route suite plus exact static checks and devtools verify --quick.","created_at":"2026-08-10T16:01:18Z"}],"dependency_count":0,"dependent_count":1,"comment_count":1} @@ -182,7 +182,7 @@ {"_type":"issue","id":"polylogue-tf2.1","title":"Rerun forensics on current archive; price origin_reported providers","description":"Rerun scripts/agent_forensics.py against the current archive (v23+); price origin_reported providers via the vendored LiteLLM catalog (match last path segment); all-provider headline or explicitly-labeled per-provenance figures that cannot be misread; record deltas vs 06-27; verify chart SVGs render. Cache-inclusion must be disambiguated (Codex input INCLUDES cached ~96%; see bd memories). Also blocked on logical-session token attribution — the headline must not be double-counted.","notes":"Correction to close_reason monetary values: stored/provider-priced subset was $239,453.14; catalog API-equivalent was $318,650.88; origin_reported catalog estimate was $79,197.74. The original close_reason text lost dollar-prefixed digits due shell expansion, not measurement drift.","status":"closed","priority":0,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:33Z","created_by":"Sinity","updated_at":"2026-07-31T22:35:43Z","started_at":"2026-07-03T09:28:10Z","closed_at":"2026-07-03T09:59:02Z","close_reason":"Completed with blocker caveat preserved: scripts/agent_forensics.py now prices origin_reported rows through the shared vendored LiteLLM pricing catalog while preserving stored provenance; report separates stored/provider-priced cost from catalog API-equivalent estimates and carries logical-session/cache caveats instead of claiming final billing reconciliation. Regenerated current artifact at .agent/demos/agent-forensics against /home/sinity/.local/share/polylogue schema v23: 16,498 physical sessions, 4,142,175 messages, 356.5B tokens, ,453.14 stored/provider-priced subset, ,650.88 catalog API-equivalent, and ,197.74 origin_reported catalog estimate. SVG parse check passed for 9 charts; devtools test tests/unit/scripts/test_agent_forensics.py passed; devtools verify --quick passed run 20260703T095718Z-quick-753466-96559776; devloop-review clean. Remaining final-reconciliation blocker stays open as polylogue-4ts.2.","labels":["area:usage","campaign"],"dependencies":[{"issue_id":"polylogue-tf2.1","depends_on_id":"polylogue-4ts.2","type":"blocks","created_at":"2026-07-03T06:32:45Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tf2.1","depends_on_id":"polylogue-sru.7","type":"blocks","created_at":"2026-07-03T06:31:33Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tf2.1","depends_on_id":"polylogue-tf2","type":"parent-child","created_at":"2026-07-03T06:31:33Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":2,"dependent_count":2,"comment_count":0} {"_type":"issue","id":"polylogue-tf2","title":"Campaign: agent-forensics regeneration + all-provider repricing","description":"Regenerate the agent-forensics packet on the current archive with an honest all-provider headline. The 2026-06-27 report (546.6B tokens, $89,368 API-list equivalent, 216x cache amplification) is the most stranger-legible artifact on any shelf, but its numbers are pre-dedup stale and the headline prices only the priced-provenance subset (Claude Code cost_usd rows); Codex/ChatGPT/Gemini are origin_reported token counts with no dollar value (operator estimate ~$150K all-provider). Sequenced after claim-vs-evidence per operator direction 2026-07-02.","design":"Current slice design: turn the existing agent-forensics/cost headline into a product-backed all-provider repricing artifact. First inspect devtools/scripts and polylogue analyze surfaces for agent_forensics/cost code. Use active archive usage headline (detail=headline) for authoritative physical_session and logical_session_model_high_water token totals. Keep priced-provenance dollars and origin-reported token estimates separate: do not multiply every token by one blended price without a labeled lane. Add or reuse a shared pricing/projection helper so the demo artifact is regenerated from Polylogue product code, not ad hoc SQL. Acceptance for this slice: the generated agent-forensics artifact names archive root/schema, includes physical vs logical token grain, separates priced subset from origin-reported estimate lanes, gives reproduction commands, and has focused tests for any new repricing helper/surface.","acceptance_criteria":"Terminal state: regenerated forensics packet on the current archive with an honest all-provider headline (priced subset AND origin-reported estimate lanes separated), agent_forensics.py folded into polylogue analyze (tf2.2), artifact on the demo shelf with reproduction commands, cold-reader gate passed. Epic closes only when that artifact is recorded.","status":"closed","priority":0,"issue_type":"epic","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:32Z","created_by":"Sinity","updated_at":"2026-07-31T22:35:43Z","started_at":"2026-07-03T18:47:23Z","closed_at":"2026-07-03T19:06:44Z","close_reason":"Completed: provider usage headline now exposes product-backed pricing lanes in polylogue analyze usage --detail headline, separating stored/provider-priced cost from catalog API-equivalent estimates for origin_reported rows. Regenerated the current .agent/demos/agent-forensics artifact against /home/sinity/.local/share/polylogue schema v23: physical-session tokens 395,320,980,423; logical high-water tokens 288,741,229,728; stored/provider-priced USD 243,392.189328; catalog API-equivalent USD 337,565.031618; priced lane 13,889 rows / 12,331 sessions / 12,650 matched rows; origin_reported lane 2,308 rows / 2,270 sessions / 2,302 matched rows. Verification: live polylogue --plain analyze usage --detail headline --format json --limit 0 wrote /realm/tmp/polylogue-usage-headline-pricing-current.json; devtools test tests/unit/storage/test_provider_usage_report.py tests/unit/cli/test_diagnostics.py passed 23 tests; devtools verify --quick passed run 20260703T190553Z-quick-2226137-d91d4e8f; devtools workspace demo-shelf --json reported ok. Non-claim preserved: this is not final billing reconciliation and physical/logical token grains stay explicitly separated.","labels":["area:usage","campaign","size:M","spine"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-sru","title":"Campaign: claim-vs-evidence report to finding-grade","description":"Terminal state: an externally publishable finding ('how often do coding agents proceed past failed tool calls, by model/tool') with stated sample frame, calibrated markers, benign/consequential split, seeded stranger-runnable reproduction, and a passed cold-reader gate. Slice closure is NOT campaign closure; this epic stays top-of-frame until its terminal state is recorded.\\n\\nState as of 2026-07-03 after calibrated active-archive regeneration: archive root /home/sinity/.local/share/polylogue, index schema v23, 41,886 structured failures total, 5,000 origin-stratified failures inspected (3,746 claude-code-session, 1,247 codex-session, 7 claude-ai-export), 100 unpaired structured failures. Marker vocabulary was tightened to avoid broad issue/fix/block/gitignored false positives. Immediate next-turn totals: acknowledged=420, silent_proceed=1,205, ambiguous=3,375 (2,624 wordless tool continuations; 751 prose without marker). Lower-bound silent rate is 24.1%; among classified immediate next turns, silent rate is 74.2%. Next-3 sensitivity window, stopping before the next user message, finds 302 acknowledgments that appear only after the next turn; window3 silent lower bound is 37.0%. Calibration: 50 hand-labeled immediate-next-turn rows, acknowledged-marker precision=1.0, recall=0.8421052631578947, invalid rows=0. Artifact: .agent/demos/claim-vs-evidence/claim-vs-evidence.report.json.","notes":"2026-07-03 update: methodology package is now cold-read gated. .agent/demos/claim-vs-evidence contains aggregate live evidence, public-summary.json, PUBLIC_REPRODUCTION.md, COLD_READER_GATE.md, and COLD_READ_RESULT.md. Seeded reproduction is meaningful, not empty: 4 structured failures, 2 acknowledged follow-ups, 2 silent-proceed follow-ups, 0 unpaired. Cold-reader subagent PASS recovered claim/non-claim, sample frame, rates, calibration, caveats, and reproduction commands from the artifact directory only. Remaining campaign child: polylogue-sru.1 productizes action-unit outcome/followup_class capability.","status":"closed","priority":0,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:26Z","created_by":"Sinity","updated_at":"2026-07-31T22:35:43Z","closed_at":"2026-07-03T09:28:09Z","close_reason":"Completed: all seven campaign children are closed. The claim-vs-evidence finding now has bounded sample-frame reporting, calibrated marker precision/recall, handler-class and next-3 sensitivity splits, meaningful seeded reproduction, cold-reader PASS, and productized action-unit followup_class/followup_message_ref query capability. Current artifact lives under .agent/demos/claim-vs-evidence and was regenerated against /home/sinity/.local/share/polylogue schema v23.","labels":["area:substrate","campaign"],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-inygw.1","title":"Merge gate: honor typed automated dependency scope","description":"The CI PR-scope checker accepts authoritative Dependabot dependency-only pull requests without a Bead carrier, but the local merge-gate receipt path still requires the ordinary carrier and blocks those PRs. Share the typed predicate so the merge boundary enforces the same policy as CI.","design":"Expose the existing authoritative Dependabot identity plus allowlisted changed-file predicate from devtools.pr_scope and invoke it from merge_gate.cmd_record. Keep ordinary product PRs on the structured carrier path; do not infer scope from prose or bot-authored text.","acceptance_criteria":"1. An authoritative dependabot[bot] PR changing only .github/workflows/codeql.yml, pyproject.toml, or uv.lock can record a merge-gate receipt without a Bead carrier. 2. Spoofed actors and extra files still require the normal carrier. 3. Focused merge-gate and pr-scope tests cover both paths. 4. devtools verify --quick passes.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-11T01:21:17Z","created_by":"Sinity","updated_at":"2026-08-11T01:21:17Z","labels":["area:devtools","area:verification"],"dependencies":[{"issue_id":"polylogue-inygw.1","depends_on_id":"polylogue-inygw","type":"parent-child","created_at":"2026-08-11T01:21:17Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-inygw.1","title":"Merge gate: honor typed automated dependency scope","description":"The CI PR-scope checker accepts authoritative Dependabot dependency-only pull requests without a Bead carrier, but the local merge-gate receipt path still requires the ordinary carrier and blocks those PRs. Share the typed predicate so the merge boundary enforces the same policy as CI.","design":"Expose the existing authoritative Dependabot identity plus allowlisted changed-file predicate from devtools.pr_scope and invoke it from merge_gate.cmd_record. Keep ordinary product PRs on the structured carrier path; do not infer scope from prose or bot-authored text.","acceptance_criteria":"1. An authoritative dependabot[bot] PR changing only .github/workflows/codeql.yml, pyproject.toml, or uv.lock can record a merge-gate receipt without a Bead carrier. 2. Spoofed actors and extra files still require the normal carrier. 3. Focused merge-gate and pr-scope tests cover both paths. 4. devtools verify --quick passes.","status":"closed","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-11T01:21:17Z","created_by":"Sinity","updated_at":"2026-08-11T02:20:27Z","closed_at":"2026-08-11T02:20:27Z","close_reason":"Satisfied by merged PR #3943 at 75f4a1a1c. The typed authoritative Dependabot dependency-only predicate is shared by CI scope validation and merge-gate record/check; ordinary carriers remain required for non-exempt PRs, spoofed bot identities and extra files are rejected, and focused pr-scope/merge-gate tests plus devtools verify --quick passed. The parent polylogue-inygw remains open for its separate base-authoritative launcher, carrier invalidation, PR discovery, fork-master, and self-contained-scope ACs.","labels":["area:devtools","area:verification"],"dependencies":[{"issue_id":"polylogue-inygw.1","depends_on_id":"polylogue-inygw","type":"parent-child","created_at":"2026-08-11T01:21:17Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-6qjc.2","title":"live: deploy judgment scheduler receipts and verify queue health","description":"Deploy the merged judgment scheduler receipt and queue-health capability through the selected release authority, then verify the live daemon and public surfaces report the typed receipt fields without a local package override.","design":"This is the explicit live successor for polylogue-6qjc.1. It remains blocked on the implementation merge and must be completed only after the release-authority reconciliation and source/candidate campaign gates are satisfied.","acceptance_criteria":"1. Select one exact master SHA, Beads digest, Sinnix pin, deployed package SHA, archive identity, and expected schema pair before mutation. 2. Perform the guarded non-draft deployment through the managed Sinnix route; no dirty checkout or local Polylogue override may be operational authority. 3. Verify the running daemon writes a typed judgment_scheduler_receipts row and that API, daemon status, CLI, and JSON surfaces expose status, retryability, retry route, batch limit, counters, and persistence-degraded/recovered flags. 4. Record a machine-readable deployment and live-health receipt binding release SHA, package SHA, archive identity, before/after process generation, and verification result. 5. On failure, preserve the prior generation and leave the operation retryable; do not claim reindex readiness.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T17:40:30Z","created_by":"Sinity","updated_at":"2026-08-10T17:40:30Z","labels":["area:operations","area:orchestration","horizon:mid"],"dependencies":[{"issue_id":"polylogue-6qjc.2","depends_on_id":"polylogue-6qjc","type":"parent-child","created_at":"2026-08-10T17:40:30Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-6qjc.2","depends_on_id":"polylogue-6qjc.1","type":"blocks","created_at":"2026-08-10T17:40:30Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-shkht","title":"repair: bind D4 demo packet to fresh seeded receipt","description":"The closed PF-D4 demo packet was later found to present current query spelling and provenance that described an older historical run. Land the fresh private synthetic seeded receipt, exact command/output provenance, receipt hashes, current findings, and readable shelf manifest without changing production archive behavior.","acceptance_criteria":"1. The D4 packet declares a current private synthetic seeded run at the exact code SHA and labels the older receipt historical-only. 2. Every current query and explain command is represented in the packet, run log, findings, evidence, hashes, and readable manifest. 3. The validator rejects receipt artifact, command, digest, provenance, and historical/current relabeling mutations. 4. The focused demo-packet suite has 29 passing tests and devtools verify --quick passes all 24 steps. 5. No production archive data or CLI behavior changes.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T23:35:44Z","created_by":"Sinity","updated_at":"2026-08-09T23:35:44Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-8iuna","title":"daemon: make raw parse recovery probe fail closed and index-aware","description":"The raw parse recovery convergence probe must be a trustworthy readiness signal rather than a best-effort diagnostic. Preserve active-index selection, distinguish a clean no-backlog result from probe failure, and keep the route on the daemon-owned production seam.","acceptance_criteria":"1. Probe failures are typed and fail closed; an exception cannot be reported as a clean empty backlog.\\n2. Probe queries follow the active index generation and do not silently inspect a stale index.\\n3. A clean no-backlog route reports an explicit empty result without false debt.\\n4. Focused daemon recovery tests and devtools verify --quick pass.\\n5. This task covers implementation and proof only; live archive recovery remains separately gated.","notes":"Unique WIP lane completed on feature/fix/raw-recovery-probe-authority. The implementation does not authorize live recovery or close any live-operation receipt.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T22:47:39Z","created_by":"Sinity","updated_at":"2026-08-09T22:47:39Z","dependency_count":0,"dependent_count":0,"comment_count":0} @@ -693,6 +693,7 @@ {"_type":"issue","id":"polylogue-sru.2","title":"Characterize ambiguous bucket: wordless continuation vs prose-without-markers","description":"Split next-turn-is-tool-call (wordless continuation) from prose-lacking-ack-markers; state counts for both. Opus-4-7 74% ambiguous vs deepseek 17% is likely turn-structure variance, not behavior — this split disambiguates.","design":"Implementation home: the claim-vs-evidence classifier in devtools (devtools/ module behind `devtools workspace claim-vs-evidence`; tests tests/unit/devtools/test_claim_vs_evidence.py). Wordless-continuation detection: for each failure's paired next assistant message, check whether its blocks contain tool_use and no text block with \u003eN chars before the first tool_use — that is 'wordless continuation'; prose without matched ack markers stays 'ambiguous-prose'. Emit both as classification_reason variants (field already exists) and add the two counts to the report summary + by_model/by_tool cuts. Regen: `devtools workspace claim-vs-evidence --limit 5000 --out-dir .agent/demos/claim-vs-evidence --json`. Acceptance: report shows ambiguous split into wordless_continuation vs prose_no_marker with counts; per-model ambiguous variance (opus-4-7 74% vs deepseek 17%) re-examined after the split.","notes":"2026-07-03 Codex WIP: unit implementation for ambiguous split passes focused tests, but live regeneration with --limit 5000 became too slow and had to be killed twice. First attempt used correlated subqueries for next-message block shape; second used set-based CTE; third used chunked second query after sampled rows, but the full command still exceeded 90s on active archive and ignored SIGINT while inside SQLite. Do not close or commit this slice until the live regeneration path is profiled/fixed. Dirty files currently show the WIP implementation: devtools/claim_vs_evidence.py and tests/unit/devtools/test_claim_vs_evidence.py. Last passing focused proof: python -m py_compile + ruff check + devtools test tests/unit/devtools/test_claim_vs_evidence.py -\u003e 3 passed.","status":"closed","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:28Z","created_by":"Sinity","updated_at":"2026-07-31T22:35:43Z","started_at":"2026-07-03T07:09:21Z","closed_at":"2026-07-03T07:45:10Z","close_reason":"Completed: claim-vs-evidence now splits ambiguous follow-ups into wordless tool continuations and prose-without-marker buckets, reports the counts in JSON/README summaries, and regenerates the current demo on the active archive. Focused tests pass; live regen/check completed.","labels":["area:substrate","campaign"],"dependencies":[{"issue_id":"polylogue-sru.2","depends_on_id":"polylogue-sru","type":"parent-child","created_at":"2026-07-03T06:31:27Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-sru.3","title":"Benign-recovery vs consequential-silence split by handler kind","description":"Read failures are ~94% silent but 'tried another path' is usually benign; Bash/test failures are the consequential class. Scope the headline to consequential handler kinds or add an explicit split — credibility depends on not inflating with trivial recoveries.","design":"Handler kind is already available on the paired failure row (actions lane exposes handler/tool). Define the consequential set explicitly in code (Bash/test/build/write-class handlers) and the benign-recovery set (Read/Glob/Grep-class 'tried another path'), emit split headline rows: silent-proceed among consequential vs among all. Keep the mapping a named constant with a rationale comment so reviewers can argue with it. Report both; never let the headline mix classes silently. Same regen/tests as the other methodology children.","status":"closed","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:28Z","created_by":"Sinity","updated_at":"2026-07-31T22:35:43Z","started_at":"2026-07-03T07:55:37Z","closed_at":"2026-07-03T07:58:08Z","close_reason":"Completed: claim-vs-evidence now reports a first-class handler-class split separating consequential shell/edit/write-class tool failures from benign read/search/path-discovery failures and other tools. The regenerated active-archive artifact shows consequential=4,177 failures with 921 silent-proceed (22.0% lower bound), benign_recovery=633 with 166 silent-proceed (26.2%), and other=190 with 92 silent-proceed (48.4%). Focused tests and demo shelf checks passed.","labels":["area:substrate","campaign"],"dependencies":[{"issue_id":"polylogue-sru.3","depends_on_id":"polylogue-sru","type":"parent-child","created_at":"2026-07-03T06:31:28Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-sru.1","title":"Expose action-unit outcome fields + followup_class as product capability","description":"Capabilities-may-not-be-silos gate for the campaign: the facts the report needs must become composable query capability. After this, the whole report is `actions where is_error:true | group by session.origin, followup_class | count` and every future cut (model/tool/repo/time) is free.","design":"1) is_error/exit_code are normalized at parse time (sources/parsers/base_models.py:74-75) but ActionQueryRowPayload (surfaces/payloads.py:~1298) carries neither — add as filterable/groupable action-unit fields. 2) Add derived followup_class (acknowledged|silent_proceed|wordless_continuation|ambiguous) + followup_message_ref computed in the source-derived lowering (no cache tables). 3) Reduce devtools workspace claim-vs-evidence to a render preset over these query strings, or retire it. Touchpoint chain: stage parser -\u003e AST to_payload -\u003e executor -\u003e metadata.py aggregate_group_fields -\u003e shell_completion_values.py -\u003e devtools render openapi + cli-output-schemas + cli-reference. Line refs pre-07-03; re-locate.","acceptance_criteria":"Fixture session with known unacknowledged failure fires via pure query strings; report README numbers reproducible from the printed queries.","notes":"Completed: action-unit outcome follow-up classification is now shared query capability. is_error/exit_code were already wired; this slice added source-derived followup_class and followup_message_ref over existing actions/messages/blocks, exposed followup_class as filterable/groupable action metadata, added action row payload fields, routed root CLI terminal-unit aggregate expressions before session-selector compilation, and moved the report classifier from scripts into polylogue.archive.actions.followup. Reproduction/query forms are now printed in .agent/demos/claim-vs-evidence/PUBLIC_REPRODUCTION.md: actions where is_error:true | group by followup_class | count; actions where followup_class:silent_proceed. Verification: focused DSL/report/CLI tests passed; active demo packet regenerated over archive root /home/sinity/.local/share/polylogue schema v23 with 41,886 structured failures and 5,000 inspected; devtools verify --quick passed run 20260703T092510Z-quick-718233-46e8b587.","status":"closed","priority":1,"issue_type":"feature","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:27Z","created_by":"Sinity","updated_at":"2026-07-03T09:25:36Z","started_at":"2026-07-03T09:05:37Z","closed_at":"2026-07-03T09:25:36Z","close_reason":"Completed","labels":["area:query","area:substrate","campaign"],"dependencies":[{"issue_id":"polylogue-sru.1","depends_on_id":"polylogue-sru","type":"parent-child","created_at":"2026-07-03T06:31:26Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-x3qti","title":"Ingest Meta Muse Code sessions (new agent lane, zero coverage)","description":"Muse Code (Meta's terminal agent, wired into sinnix 2026-08-09/11 as muse-code/muse-contrib + hermes-muse) has zero polylogue support — no parser, no origin spec, no watch coverage. Evidence plane is blind to the lane. Session data: ~/.local/share/muse/sessions/YYYY/MM/DD/\u003csession-uuid\u003e/session.jsonl (JSONL event streams; rich vocabulary observed in the muse binary: session.started, run_started, turn_input_user, assistant_message_committed, tool_result, run_model_configured, token usage events, subagent.control.*, workflow_child_*), plus session-index.db (SQLite), tui-history.jsonl, and traces. Needs: parser + origin spec + assembly (mirror the codex/claude-code pattern), fixtures from real sessions (several exist from 2026-08-11 testing incl. gateway-routed runs), and polylogued watch root for the sessions tree.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-08-11T02:09:34Z","created_by":"Sinity","updated_at":"2026-08-11T02:09:34Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-cybpg","title":"docs: publish recovered architecture and readiness packets","description":"Publish the recovered architecture, decision, and Bead-readiness packets into the current documentation surface so their evidence and sequencing are discoverable from master.","design":"Carry the three recovered documents onto current master, index each through devtools/docs_surface.py and docs/README.md, and preserve their references to live Beads without claiming the underlying implementation work is complete.","acceptance_criteria":"1. The readiness, content-identity/lineage, and decision-adjudication packets exist on current master. 2. Each packet is indexed in devtools/docs_surface.py and docs/README.md. 3. render all --check, devtools verify --quick, and focused documentation checks pass. 4. The packet text does not claim its referenced implementation Beads are closed.","status":"closed","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-10T08:05:41Z","created_by":"Sinity","updated_at":"2026-08-10T09:49:53Z","closed_at":"2026-08-10T09:49:53Z","close_reason":"Satisfied by merged PR #3914 (c75a5e2c4). The three recovered architecture/readiness packets are on master, indexed in docs surfaces, and the exact-head focused documentation check plus quick verification passed; packet text preserves referenced implementation work as open.","labels":["area:docs","area:planning","lane:reindex"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-k617z","title":"Reuse compatible Voyage 4 vectors across model changes","description":"Voyage documents that voyage-4, voyage-4-lite, and voyage-4-large share an embedding space, but Polylogue's current per-message input hash and recipe identity include the literal model name. Changing the active model therefore requeues existing messages even when stored vectors are provider-compatible. Add an explicit Voyage 4 compatibility-family identity or equivalent fallback so a model switch can reuse existing vectors while new material uses the selected model, with real archive tests covering query and document vectors across the switch.","acceptance_criteria":"A configured switch within the Voyage 4 shared family does not requeue unchanged existing messages; existing voyage-4 vectors remain searchable with voyage-4-lite or voyage-4-large queries; new messages use the configured model; non-compatible model or dimension changes retain reindex behavior.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T11:19:13Z","created_by":"Sinity","updated_at":"2026-08-06T11:19:13Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-6olqi","title":"Drop dead otlp_spans table (source.db, durable tier): zero writer since #3665, zero reader","design":"Found while executing polylogue-yp5p (2026-08-03): otlp_spans in source.db (durable tier) has zero writer since PR #3665 removed the OTLP receiver, and zero reader anywhere. docs/schema.md already flags it as 'pending an explicit migration decision'. Unlike the derived-tier tables dropped in yp5p, this is a DURABLE tier table -- dropping it needs this repo's copy-forward/consent gate for destructive durable-tier changes (explicit backup-manifest verification), not a benign-DDL/SEMANTIC_REPARSE derived-tier delta. Verify still dead against current source before acting, then add a numbered additive... actually destructive migration under polylogue/storage/sqlite/migrations/source/ following the durable-tier schema regime.","acceptance_criteria":"1. Outcome: The production path no longer exhibits the defect or missing capability named “Drop dead otlp_spans table (source.db, durable tier): zero writer since #3665, zero reader”; the result is observable through the public or operator-facing route.\n2. Route authority: named acceptance/polylogue-6olqi production route coverage is required.\n3. Production route: Exercise the implementation through these named production surfaces: `docs/schema.md`, `copy-forward/consent`, `benign-DDL/SEMANTIC_REPARSE`.\n4. Evidence: Found while executing polylogue-yp5p (2026-08-03): otlp_spans in source.db (durable tier) has zero writer since PR #3665 removed the OTLP receiver, and zero reader anywhere. docs/schema.md already flags it as 'pending an explicit migration decision'. Unlike the derived-tier tables dropped in yp5p, this is a DURABLE tier table -- dropping it needs this repo's copy-forward/consent gate for destructive durable-tier changes (explicit backup-manifest verification), not a benign-DDL/SEMANTIC_REPARSE derived-tier delta.\n5. Evidence: source.db, durable tier): zero writer since #3665, zero reader\n6. Evidence: Found while executing polylogue-yp5p (2026-08-03): otlp_spans in source.db (durable tier) has zero writer since\n7. Verification: Add a focused red-before/green-after regression carrying `polylogue-6olqi` or the incident name and executing the owning production route.\n8. Verification: Run `devtools verify --quick` on the final head and record the exact head SHA in the closure evidence.\n9. Verification: Run `devtools verify` on the final head so the testmon-affected regression set executes; `devtools verify --quick` alone is insufficient.\n10. Verification: Run `devtools verify` on the final head so the testmon-affected regression set executes; `devtools verify --quick` alone is insufficient.\n11. Anti-vacuity: A controlled mutation that removes the central guard or restores the pre-fix behavior makes the focused regression fail.\n12. Anti-vacuity: The test asserts durable/public behavior, not merely that a helper was called or returned a mocked value.\n13. Safety: No production mutation is performed by the implementation lane.\n14. Safety: Any later apply is dry-run-first, backup-gated, exact-plan-bound, idempotent or resumable, and emits an immutable receipt.\n15. Managed verification route: focused=devtools test; default=devtools verify\n16. Closure disposition: whole-or-explicit-partial\n17. Partial closure successor: required when the closure disposition is whole-or-explicit-partial.\n18. Closure: Close `polylogue-6olqi` only when the criteria above are evidenced on the final head. Any residual operation, provider/origin, live population, or generalized bug class is transferred to a named successor with a dependency edge before closure.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T22:10:04Z","created_by":"Sinity","updated_at":"2026-08-03T22:10:04Z","metadata":{"acceptance_contract_v1":{"anti_vacuity":["A controlled mutation that removes the central guard or restores the pre-fix behavior makes the focused regression fail.","The test asserts durable/public behavior, not merely that a helper was called or returned a mocked value."],"bead_id":"polylogue-6olqi","closure":{"disposition":"whole-or-explicit-partial","rule":"Close `polylogue-6olqi` only when the criteria above are evidenced on the final head. Any residual operation, provider/origin, live population, or generalized bug class is transferred to a named successor with a dependency edge before closure.","successor_required_for_partial":true},"confidence":"medium","contract_type":"implementation","dependency_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","evidence":["Found while executing polylogue-yp5p (2026-08-03): otlp_spans in source.db (durable tier) has zero writer since PR #3665 removed the OTLP receiver, and zero reader anywhere. docs/schema.md already flags it as 'pending an explicit migration decision'. Unlike the derived-tier tables dropped in yp5p, this is a DURABLE tier table -- dropping it needs this repo's copy-forward/consent gate for destructive durable-tier changes (explicit backup-manifest verification), not a benign-DDL/SEMANTIC_REPARSE derived-tier delta.","source.db, durable tier): zero writer since #3665, zero reader","Found while executing polylogue-yp5p (2026-08-03): otlp_spans in source.db (durable tier) has zero writer since"],"evidence_spans":[{"range":{"end":518,"start":0},"snapshot":"Found while executing polylogue-yp5p (2026-08-03): otlp_spans in source.db (durable tier) has zero writer since PR #3665 removed the OTLP receiver, and zero reader anywhere. docs/schema.md already flags it as 'pending an explicit migration decision'. Unlike the derived-tier tables dropped in yp5p, this is a DURABLE tier table -- dropping it needs this repo's copy-forward/consent gate for destructive durable-tier changes (explicit backup-manifest verification), not a benign-DDL/SEMANTIC_REPARSE derived-tier delta. Verify still dead against current source before acting, then add a numbered additive... actually destructive migration under polylogue/storage/sqlite/migrations/source/ following the durable-tier schema regime.","snapshot_digest":"8357f2458742ce6998717bc4fa722cc286188da02f92c0fca2bb2459da9277df","source_field":"design","text_digest":"2153af71e3a85b223e55e58e727b91eb36d407454101f47bdb8c99463ecae184"},{"range":{"end":90,"start":28},"snapshot":"Drop dead otlp_spans table (source.db, durable tier): zero writer since #3665, zero reader","snapshot_digest":"57b9d190ad0de91b524e588b28532cba4817d0c8651c86d02d8c153d53c3ee82","source_field":"title","text_digest":"ab386a2f500d2623623e6ce934bbffb2d91ec8b1464eafa278212d168d5b562e"},{"range":{"end":111,"start":0},"snapshot":"Found while executing polylogue-yp5p (2026-08-03): otlp_spans in source.db (durable tier) has zero writer since PR #3665 removed the OTLP receiver, and zero reader anywhere. docs/schema.md already flags it as 'pending an explicit migration decision'. Unlike the derived-tier tables dropped in yp5p, this is a DURABLE tier table -- dropping it needs this repo's copy-forward/consent gate for destructive durable-tier changes (explicit backup-manifest verification), not a benign-DDL/SEMANTIC_REPARSE derived-tier delta. Verify still dead against current source before acting, then add a numbered additive... actually destructive migration under polylogue/storage/sqlite/migrations/source/ following the durable-tier schema regime.","snapshot_digest":"8357f2458742ce6998717bc4fa722cc286188da02f92c0fca2bb2459da9277df","source_field":"design","text_digest":"4012b5c56b0fe3243ebc96b439b5b511bb0108571e309b581f996d16cbd7d73d"}],"generated_at":"2026-08-07T00:00:00Z","outcome":"The production path no longer exhibits the defect or missing capability named “Drop dead otlp_spans table (source.db, durable tier): zero writer since #3665, zero reader”; the result is observable through the public or operator-facing route.","retained_scope":[],"risk":"durable-mutation","route_spec":{"class":"ImplementationRoute","dispatch":"production","identifier":"acceptance/polylogue-6olqi","mode":"named"},"routes":["Exercise the implementation through these named production surfaces: `docs/schema.md`, `copy-forward/consent`, `benign-DDL/SEMANTIC_REPARSE`."],"safety":["No production mutation is performed by the implementation lane.","Any later apply is dry-run-first, backup-gated, exact-plan-bound, idempotent or resumable, and emits an immutable receipt."],"schema_version":1,"source_digest":"480916faa61aba0de90a12db3f8dd498d3904ce514f71f44e962f733bfe1f39f","verification":["Add a focused red-before/green-after regression carrying `polylogue-6olqi` or the incident name and executing the owning production route.","Run `devtools verify --quick` on the final head and record the exact head SHA in the closure evidence.","Run `devtools verify` on the final head so the testmon-affected regression set executes; `devtools verify --quick` alone is insufficient.","Run `devtools verify` on the final head so the testmon-affected regression set executes; `devtools verify --quick` alone is insufficient."],"verification_route":{"default":"devtools verify","focused":"devtools test","manager":"devtools"}}},"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -1274,6 +1275,7 @@ {"_type":"issue","id":"polylogue-rii.1","title":"Agent work-event write-leg -\u003e session_events -\u003e materialized read-models","description":"record_work_event/emit_decision write surface routed through the existing idempotent ingest seam (no parallel writer); flows into the run-projection read models. Today agents can only record_correction/blackboard_post/tag — there is no 'I ran this tool / spawned this subagent / decided X' write. GH issue thread (body + comments) is input, not authority; this bead's scope statement wins where they conflict.","design":"Route through the existing idempotent ingest seam (write_raw_and_parsed / the daemon ingest path) — no parallel writer (gh#2459 body is code-grounded here). Surface: MCP tools record_work_event/emit_decision (mutation role) accepting typed events (tool run, subagent spawn, decision, artifact change) with evidence/session refs; land in session_events; run-projection read models pick them up through the normal materializer. MCP registration trap: EXPECTED_TOOL_NAMES + TOOL_CONTRACT + role gating + render openapi/cli-output-schemas regen (see bd memories). Acceptance: an agent posts a work event mid-session; it is queryable via observed-events within one convergence cycle; re-posting is idempotent.","acceptance_criteria":"- MCP tools record_work_event / emit_decision are registered with the mutation role: EXPECTED_TOOL_NAMES + TOOL_CONTRACT updated, role gating enforced, and `devtools render openapi \u0026\u0026 devtools render cli-output-schemas` regenerated with `devtools render all --check` clean.\n- Typed events (tool run, subagent spawn, decision, artifact change) with evidence/session refs route through the existing idempotent ingest seam (write_raw_and_parsed / the daemon ingest path) into session_events — no parallel writer (grep confirms reuse).\n- Behavior test: an agent posts a work event mid-session and it is queryable via observed-events (session_work_events / DSL) within one convergence cycle; re-posting the same event is idempotent (no duplicate row). `devtools test \u003cmcp work-event test\u003e` green.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=A-implementation-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/handoffs/polylogue-gpt-pro-2026-07-07/prework-v2/task_packets/071_polylogue_rii_1.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\nRECONCILED 2026-07-13 with 37t.2 inline protocol: the agent work-event write-leg and the marker channel are ONE channel with two encodings (structured MCP writes; prose markers extracted at enrichment). Unify vocabularies — work-event kinds and marker kinds must share the registry (a ::phase marker IS a work event). Do not build parallel event taxonomies.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:43Z","created_by":"Sinity","updated_at":"2026-07-31T22:35:43Z","external_ref":"gh-2459","labels":["area:substrate","delivery:D-agent-context-coordination","horizon:frontier","lane:agent-coordination"],"dependencies":[{"issue_id":"polylogue-rii.1","depends_on_id":"polylogue-rii","type":"parent-child","created_at":"2026-07-03T06:31:43Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-fs1.3","title":"Per-source coverage/fidelity declaration for Hermes imports","description":"Every Hermes acquisition tier and schema version needs a machine-readable fidelity declaration that distinguishes what is exact, absent, redacted, degraded, or inferred. The declaration is the guard against a parser test going green while silently dropping forensic history or cost/addressing provenance.","design":"Extend the OriginSpec/fidelity surface with: producer/schema version; installation/profile namespace; acquisition method (sqlite_backup, stable export, JSON fallback, runtime spans); exact retained-blob-to-normalized reproducibility verdict; counts and coverage for active, rewound, compacted, and observed messages; addressing/material-origin semantics; actual/estimated cost with status/source/pricing/billing provenance; lifecycle/relationship coverage; runtime-span coverage and explicit missingness. The snapshot and span lanes may enrich one logical session revision only with per-field provenance; they may not double-count or silently prefer a lower-fidelity tier.","acceptance_criteria":"explain-import on Hermes v16, a later schema, JSON fallback, and a spans-plus-snapshot merge names every capability as exact, absent, redacted, degraded, or inferred; exact-blob reproducibility is stated and verified; the same logical session from two tiers remains one revision with field-level provenance; message-state/addressing and cost-provenance counts reconcile to fixtures; deliberately dropping observed mapping, cost provenance, snapshot proof, or an unpaired span changes the declared fidelity and surfaces a downstream forensics caveat. OriginSpec fixtures and mutation-style negative tests pass.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=K-interop-origin-export; lane=origin-interop-export; readiness=D-horizon-ready; proof=OriginSpec detector/parser/fixture/fidelity suite and content-hash export/import roundtrip. Original readiness=E-spec-needed.\n2026-07-12 fanout lane finding: blocked as scoped — explain-import cannot inspect SQLite Hermes state DBs and its payload lacks a fidelity-declaration field; both surfaces (import_explain.py + payload schema) must be in scope to implement. Evidence: 37bdfa04c; import_explain.py decodes JSON/JSONL only.","status":"closed","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:40Z","created_by":"Sinity","updated_at":"2026-07-31T22:35:43Z","closed_at":"2026-07-12T23:15:18Z","close_reason":"PR #2789 merged: Hermes per-source coverage/fidelity declaration shipped (import_explain.py, hermes_state.py, generated CLI-output schema regenerated)","labels":["area:ingest","area:substrate","delivery:K-interop-origin-export","delivery:ac-patched","horizon:frontier","lane:origin-interop-export"],"dependencies":[{"issue_id":"polylogue-fs1.3","depends_on_id":"polylogue-fs1","type":"parent-child","created_at":"2026-07-03T06:31:40Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":3,"comment_count":0} {"_type":"issue","id":"polylogue-tf2.2","title":"Fold agent_forensics.py into polylogue analyze","description":"~70% already materialized (cost_rollups, archive_coverage, total_credit_cost, portfolio, cost_outlook). Real gaps: reasoning-token lane on SessionProfile; usage_timeline archive insight (tokens/cost per month per model) registered in insights/registry.py; optional markdown forensics renderer. Drop the script's hand-rolled _CREDIT_RATES; delete the script. Sequenced AFTER the campaign regen (the campaign uses the script one last time). GH issue thread (body + comments) is input, not authority; this bead's scope statement wins where they conflict.","status":"closed","priority":2,"issue_type":"feature","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:34Z","created_by":"Sinity","updated_at":"2026-07-03T11:54:39Z","started_at":"2026-07-03T11:31:18Z","closed_at":"2026-07-03T11:54:39Z","close_reason":"Completed: usage forensics is no longer a standalone script surface. Added registered usage_timeline archive insight with CLI/API/MCP registry coverage, reused the shared subscription-pricing catalog for credit estimates, deleted scripts/agent_forensics.py and its private-helper tests, and rewrote README/docs around polylogue analyze insights coverage/cost-rollups/usage-timeline plus devtools workspace claim-vs-evidence. Verification: focused claim-vs-evidence/insights tests passed, render all --check passed, devtools verify --quick passed, and live active-archive usage-timeline smoke returned valid JSON. Follow-up polylogue-5nn tracks the observed 18s whole-archive aggregation latency for unfiltered month-origin-model usage-timeline.","external_ref":"gh-2480","labels":["area:usage","campaign"],"dependencies":[{"issue_id":"polylogue-tf2.2","depends_on_id":"polylogue-tf2","type":"parent-child","created_at":"2026-07-03T06:31:34Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tf2.2","depends_on_id":"polylogue-tf2.1","type":"blocks","created_at":"2026-07-03T06:31:34Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-77481","title":"Verify hermes + grok lanes actually flow into the live archive","description":"Parsers and origin specs for Hermes (hermes_state/hermes_spans/hermes_verification, ATIF/ATOF nemo-relay fixtures) and Grok (parsers/grok.py) exist, but it is unverified whether polylogued's default watch roots cover ~/.hermes (incl. per-profile trees ~/.hermes/profiles/{research,orchestrate,mirror,muse,local} and observability/nemo-relay output) and ~/.grok/sessions on sinnix-prime, and whether recent real sessions from those lanes are present in the archive. Audit: enumerate watch roots in the running daemon, query archive for hermes/grok sessions from the last 30 days, compare against on-disk session files, close any watch-root or profile-subtree gaps. Context: sinnix added hermes-muse + hermes-local profiles 2026-08-11; multi-profile session dirs may not all be watched.","acceptance_criteria":"1. Enumerate the running daemon watch roots and the on-disk Hermes/Grok profile trees on the target host. 2. Compare recent on-disk session artifacts with archive rows by origin and report missing or extra coverage. 3. If a watch-root gap exists, add the minimal configuration or create a named follow-up Bead; do not claim coverage without evidence. 4. Verify with a focused synthetic or live-safe route and record the commands, sample window, and counts in the close evidence.","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-11T02:09:34Z","created_by":"Sinity","updated_at":"2026-08-11T02:22:19Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-12mbj","title":"Cross-harness agent-memory evidence concept: acquisition + modeling design (operator directive: no per-harness one-offs)","description":"Design-scoped (reindex-gate-hunt task #4 split B / #9; NOT reindex-train cargo — pure new acquisition, nothing to reparse). OPERATOR DIRECTIVE 2026-08-03: agent memory must be harmonized across harnesses, not modeled as a Codex one-off.\n\nMeasured baseline (hunter-schema survey, 2026-08-03): polylogue acquires ZERO persistent memory surfaces from ANY harness today — no WatchSource/OriginSpec rule/parser touches Claude Code per-project memory/*.md dirs, repo CLAUDE.md/AGENTS.md/GEMINI.md instruction files, or an Antigravity equivalent; claude-code-todos covers only plan snapshots. This evidence class is fully outside scope, not degraded.\n\nConstraints from the existing vocabulary contention: ze5 (assertions table already conflates 4 ontological classes — hard dependency: do not add a class before it resolves) and jwqj (producer/consumer asymmetries: CAVEAT unproducible, LESSON readerless, several kinds dead). Prior art: docs/design/project-memory.md (unimplemented; zero project_memory table hits). The Codex goals/memories wiring bead (this batch) is the first concrete instance and carries a binding no-bespoke-table constraint so this design can adopt it.\n","acceptance_criteria":"Design doc (or bead design field) answering: which harness memory surfaces are session-scoped evidence vs install-scoped state; one typed cross-origin concept both plug into; acquisition plan (WatchSource/OriginSpec) per harness starting from the measured zero-acquisition baseline; explicit resolution of overlap with the assertions vocabulary AFTER ze5 lands (no fifth ontological class before ze5 resolves the fourth). Codex wiring bead adopted as first instance without schema unwind.","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T12:19:53Z","created_by":"Sinity","updated_at":"2026-08-03T12:19:53Z","dependencies":[{"issue_id":"polylogue-12mbj","depends_on_id":"polylogue-ze5","type":"blocks","created_at":"2026-08-03T14:19:52Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-n2blt","title":"threads_fts: 10 zero-message aistudio-drive stub rows enter threads outside the materializer path","description":"D-class (reindex-gate-hunt task #17, adjudicated 2026-08-03; zero user-visible search impact today — search_text is empty either way). Evidence: threads_fts stuck at exactly 10 missing rows since 2026-07-31 (fts_freshness_state: threads_fts stale, \"exact invariant failed\", 15,415 vs 15,405) while messages_fts drained tens of thousands in the same window. All 10 share one shape: origin aistudio-drive, session_count=1, total_messages=0, materialized_at='' (column default — never touched by the thread materializer), length(search_text)=0; ids are Drive-doc-name stubs (e.g. aistudio-drive:Vault___LTAR-..., LazyVim__Con-...). So a writer inserts threads rows for zero-message Drive-doc stubs outside the materializer/trigger path — the invariant to own: thread rows enter ONLY via the materializer. 10/15,425 = 0.06 percent, static; a rebuild heals the rows but not the bypassing writer.\n","acceptance_criteria":"The writer inserting threads rows without running the materializer is identified. Decision recorded: either those Drive-doc stubs get a real materializer pass (search_text populated or legitimately empty with materialized_at set and FTS trigger fired) or they stop being inserted as threads at all. threads_fts exact-invariant freshness check returns clean afterward.","status":"open","priority":3,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T12:19:53Z","created_by":"Sinity","updated_at":"2026-08-03T12:19:53Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-qgyuj","title":"Decide messages-level token-column semantics: structurally zero for 6/9 origins (53.6% of messages)","description":"P/POST-REINDEX-OK (reindex-gate-hunt task #15, adjudicated 2026-08-03). Live measurement: 53.6 percent of all messages carry input_tokens=0 AND output_tokens=0 structurally — 6 of 9 origins never populate message-grain token counts because their providers report usage at session/turn grain only. A zero that means \"not reported at this grain\" is indistinguishable from a measured zero (false-zero shape). Design question (nullable column vs document-as-coarse-only), no concrete fix pre-selected; no reindex-timing efficiency argument (either fix shape is a benign or read-side change). Feeds the same absence-semantics doctrine as the public-claims gate (unsupported renders unknown, not zero).\n","acceptance_criteria":"A recorded decision: either messages.input_tokens/output_tokens become nullable (NULL = provider reports usage at a coarser grain) with writers/readers updated, or the columns are documented as coarse-grain-only with the false-zero shape declared intentional in schema docs. Whichever way, cost/usage readers stop treating structural zeros as measured zeros.","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T12:19:53Z","created_by":"Sinity","updated_at":"2026-08-03T12:19:53Z","dependency_count":0,"dependent_count":0,"comment_count":0} diff --git a/tests/fixtures/reindex_incident_coverage/campaign_graph.json b/tests/fixtures/reindex_incident_coverage/campaign_graph.json index a6e213bc86..e3373e31a6 100644 --- a/tests/fixtures/reindex_incident_coverage/campaign_graph.json +++ b/tests/fixtures/reindex_incident_coverage/campaign_graph.json @@ -1,7 +1,7 @@ { "schema_version": 1, - "source_commit": "6e59f24c3db90caaa448345e48abb4e6650f9a4d", - "source_snapshot_sha256": "c9b9c6cf660c383c29511d091d26d1fff61b26a8ad9365d621cc94ffd03b0d6e", + "source_commit": "d96a64c6316b57dcf692e2a124b7e6c012f45077", + "source_snapshot_sha256": "c4f2c69cffd9dbdae6d4798a35aab7bab8a2af3be506a9dd874cd44207a30f76", "source_path": ".beads/issues.jsonl", "target_bead_id": "polylogue-818fy", "forcing_dependencies": [