chore(beads): add schema gate authority - #3857
Conversation
Record the schema-currency hardening implementation as polylogue-dudtn and make it a blocking prerequisite of polylogue-9qnzy. This keeps the live deployment bead separate from the code and test slice.
|
Important Review skippedReview was skipped as selected files did not have any reviewable changes. 💤 Files selected but had no reviewable changes (1)
⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c9d12abcf6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -144,7 +145,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-z7sv3","title":"Make PR scope CI authority immutable at the base revision","description":"The first structured PR-scope carrier landed a green CI gate, but the validator still executes from the PR checkout and CircleCI can lack CIRCLE_PULL_REQUEST. Harden the process boundary so a pull request cannot weaken the validator it is being judged by.","design":"Modify devtools/pr_scope.py to resolve repository and PR metadata through GitHub REST, validate exact checkout/head identity, fetch the base revision validator, and run it in an isolated subprocess. Extend CircleCI quick-gate to call check-ci with CIRCLE_SHA1 and repo metadata. Make merge receipts bind scope_digest, beads_digest, and assigned IDs, and pass --match-head-commit to gh pr merge. Add unit coverage for no-PR-URL resolution, base-validator authority, schema rejection, receipt drift, and stale-head refusal. Remove the natural-language PR state guard and update lane/CI documentation.","acceptance_criteria":"1. CircleCI validates the exact checkout head and resolves the unique open PR when CIRCLE_PULL_REQUEST is absent. 2. When the base revision already contains pr_scope.py, CI executes that base validator rather than the PR-modified validator. 3. The carrier schema rejects unknown fields and merge receipts bind scope digest, Bead digest, and assigned Bead IDs. 4. The prose-parsing PR state guard is removed or replaced by structured validation. 5. Focused tests and devtools verify --quick pass.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T06:44:24Z","created_by":"Sinity","updated_at":"2026-08-06T06:44:34Z","dependency_count":0,"dependent_count":1,"comment_count":0} | |||
| {"_type":"issue","id":"polylogue-z7sv3","title":"Make PR scope CI authority immutable at the base revision","description":"The first structured PR-scope carrier landed a green CI gate, but the validator still executes from the PR checkout and CircleCI can lack CIRCLE_PULL_REQUEST. Harden the process boundary so a pull request cannot weaken the validator it is being judged by.","design":"Modify devtools/pr_scope.py to resolve repository and PR metadata through GitHub REST, validate exact checkout/head identity, fetch the base revision validator, and run it in an isolated subprocess. Extend CircleCI quick-gate to call check-ci with CIRCLE_SHA1 and repo metadata. Make merge receipts bind scope_digest, beads_digest, and assigned IDs, and pass --match-head-commit to gh pr merge. Add unit coverage for no-PR-URL resolution, base-validator authority, schema rejection, receipt drift, and stale-head refusal. Remove the natural-language PR state guard and update lane/CI documentation.","acceptance_criteria":"1. CircleCI validates the exact checkout head and resolves the unique open PR when CIRCLE_PULL_REQUEST is absent. 2. When the base revision already contains pr_scope.py, CI executes that base validator rather than the PR-modified validator. 3. The carrier schema rejects unknown fields and merge receipts bind scope digest, Bead digest, and assigned Bead IDs. 4. The prose-parsing PR state guard is removed or replaced by structured validation. 5. Focused tests and devtools verify --quick pass.","status":"closed","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T06:44:24Z","created_by":"Sinity","updated_at":"2026-08-06T08:02:57Z","closed_at":"2026-08-06T08:02:57Z","close_reason":"Merged in PR #3848 as 685f2ca8. The base-revision validator, exact-head and repository binding, draft/no-open-PR handling, structured carrier schema, graph-linked residual validation, merge receipt binding, CircleCI check-ci integration, CI diagnostics, focused tests, quick verification, and coordinator publication-order rule are present. The merge-train full-suite ledger remains open separately; this Bead does not claim archive or campaign convergence.","dependency_count":0,"dependent_count":1,"comment_count":0} | |||
There was a problem hiding this comment.
Keep the z7sv3 closure with its implementation change
Remove this unrelated state transition from the schema-gate authority commit: it closes polylogue-z7sv3 for work merged in PR #3848, while this commit is scoped only to polylogue-dudtn and its edge to polylogue-9qnzy. Publishing the closure here creates exactly the divergent bookkeeping history the repository requires avoiding by folding bd close into the branch carrying the corresponding code change.
AGENTS.md reference: AGENTS.md:L306-L309
Useful? React with 👍 / 👎.
| @@ -16,7 +17,7 @@ | |||
| {"_type":"issue","id":"polylogue-claude-vintage-live-proof","title":"acceptance: prove measured Claude vintage reclassification","description":"Residual live or proof scope of polylogue-0qfy. The implementation mechanism may remain closed, but the reindex cannot claim convergence until this evidence exists.","design":"Run through the real production seam against a frozen source or candidate generation. Bind the result to an immutable receipt and state explicitly what was not exercised.","acceptance_criteria":"A sanitized measured-cohort old/new pair and read-only cohort-reclassification receipt prove the actual classifier branch and canonical identity decision.","notes":"Parent implementation bead: polylogue-0qfy. This child exists because the audit found the implementation closure did not prove the live effect.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T05:00:11Z","created_by":"Sinity","updated_at":"2026-08-06T05:00:11Z","dependencies":[{"issue_id":"polylogue-claude-vintage-live-proof","depends_on_id":"polylogue-0qfy","type":"blocks","created_at":"2026-08-06T07:39:43Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0} | |||
| {"_type":"issue","id":"polylogue-codex-804-live-proof","title":"acceptance: prove incident-scale Codex materialization and recovery","description":"Residual live or proof scope of polylogue-5iz4. The implementation mechanism may remain closed, but the reindex cannot claim convergence until this evidence exists.","design":"Run through the real production seam against a frozen source or candidate generation. Bind the result to an immutable receipt and state explicitly what was not exercised.","acceptance_criteria":"A real or faithfully sanitized 804-revision, approximately 90 MiB wire shape exercises recovery-copy ordering, crash/restart, source-authority terminal state, and candidate materialization with resource receipts.","notes":"Parent implementation bead: polylogue-5iz4. This child exists because the audit found the implementation closure did not prove the live effect.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T05:00:11Z","created_by":"Sinity","updated_at":"2026-08-06T05:00:11Z","dependencies":[{"issue_id":"polylogue-codex-804-live-proof","depends_on_id":"polylogue-5iz4","type":"blocks","created_at":"2026-08-06T07:39:33Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0} | |||
| {"_type":"issue","id":"polylogue-topology-live-proof","title":"acceptance: prove live topology status and safe public composition","description":"Residual live or proof scope of polylogue-4ts.10. The implementation mechanism may remain closed, but the reindex cannot claim convergence until this evidence exists.","design":"Run through the real production seam against a frozen source or candidate generation. Bind the result to an immutable receipt and state explicitly what was not exercised.","acceptance_criteria":"Candidate and live census show zero empty link status or method values, typed unresolved or cycle-broken edges, and visibly safe reader behavior for unresolved parents.","notes":"Parent implementation bead: polylogue-4ts.10. This child exists because the audit found the implementation closure did not prove the live effect.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T05:00:11Z","created_by":"Sinity","updated_at":"2026-08-06T05:00:11Z","dependencies":[{"issue_id":"polylogue-topology-live-proof","depends_on_id":"polylogue-4ts.10","type":"blocks","created_at":"2026-08-06T07:39:23Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0} | |||
| {"_type":"issue","id":"polylogue-live-operation-receipts","title":"acceptance: collect live operation receipts for reindex readiness","description":"Aggregate the named operational and live-proof children that convert implementation mechanisms into evidence about the actual archive. This remains open until each applicable child has an immutable receipt or an explicit typed non-applicability decision.","design":"Keep mechanism beads historically honest. Each child proves one live effect or operation and is independently rerunnable and idempotent.","acceptance_criteria":"Every required live-proof child has a receipt bound to the exact source snapshot, candidate or active generation, and semantic fingerprint. Residues are typed rather than silently omitted. The aggregate report is consumed by the terminal reindex proof.","status":"open","priority":0,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T05:00:10Z","created_by":"Sinity","updated_at":"2026-08-06T05:00:10Z","dependencies":[{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-active-leaf-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-byte-supersession-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-chatgpt-content-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-claude-streaming-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-claude-vintage-live-proof","type":"blocks","created_at":"2026-08-06T07:02:57Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-codex-804-live-proof","type":"blocks","created_at":"2026-08-06T07:02:57Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-excluded-cursor-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-hook-authority-conflict-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-hook-reconciliation-apply-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-raw-dedupe-apply-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-stalled-cursor-live-proof","type":"blocks","created_at":"2026-08-06T07:02:57Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-topology-live-proof","type":"blocks","created_at":"2026-08-06T07:02:57Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":12,"dependent_count":1,"comment_count":0} | |||
| {"_type":"issue","id":"polylogue-live-operation-receipts","title":"acceptance: collect live operation receipts for reindex readiness","description":"Aggregate the named operational and live-proof children that convert implementation mechanisms into evidence about the actual archive. This remains open until each applicable child has an immutable receipt or an explicit typed non-applicability decision.","design":"Keep mechanism beads historically honest. Each child proves one live effect or operation and is independently rerunnable and idempotent.","acceptance_criteria":"Every required live-proof child has a receipt bound to the exact source snapshot, candidate or active generation, and semantic fingerprint. Residues are typed rather than silently omitted. The aggregate report is consumed by the terminal reindex proof.","status":"open","priority":0,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T05:00:10Z","created_by":"Sinity","updated_at":"2026-08-06T05:00:10Z","dependencies":[{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-active-leaf-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-byte-supersession-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-chatgpt-content-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-claude-streaming-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-claude-vintage-live-proof","type":"blocks","created_at":"2026-08-06T07:02:57Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-codex-804-live-proof","type":"blocks","created_at":"2026-08-06T07:02:57Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-csx21","type":"blocks","created_at":"2026-08-06T10:55:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-excluded-cursor-live-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-hook-authority-conflict-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-hook-reconciliation-apply-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-raw-dedupe-apply-proof","type":"blocks","created_at":"2026-08-06T07:02:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-stalled-cursor-live-proof","type":"blocks","created_at":"2026-08-06T07:02:57Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-live-operation-receipts","depends_on_id":"polylogue-topology-live-proof","type":"blocks","created_at":"2026-08-06T07:02:57Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":13,"dependent_count":1,"comment_count":0} | |||
There was a problem hiding this comment.
Remove the unrelated csx21 campaign blocker
This line silently adds open task polylogue-csx21 as a blocking prerequisite of polylogue-live-operation-receipts, and the paired count change on the csx21 record confirms that it is a real graph mutation rather than export churn. When readiness is computed from blocks edges, this changes the live-reindex campaign gate even though the commit's declared scope contains only polylogue-dudtn and polylogue-9qnzy; retain this edge for the campaign-graph change that owns it rather than publishing it here.
Useful? React with 👍 / 👎.
| @@ -49,7 +50,7 @@ | |||
| {"_type":"issue","id":"polylogue-a7gmk","title":"Final pre-reindex sinnix deploy sync: package + durable migrations, immediately before running rebuild-index","description":"The last step before the production reindex itself (polylogue-818fy). Resolves\npolylogue-9qnzy's schema-currency gap for the FINAL merged state (9qnzy's own\nfix addresses the gap as of when it's worked; every PR that merges afterward\n(lb39z remainder, w6hql, ds4b4, schema-commit, etc.) re-drifts the deployed\npackage from origin/master, so this bead is the final sync immediately before\ntriggering the reindex, not a duplicate of 9qnzy).\n\nAC:\n1. `git fetch --all` in sinnix; confirm the polylogue flake input / package\n pin points at the latest merged origin/master commit.\n2. Apply any durable-tier migrations to /realm/db/polylogue's source.db/user.db\n that the target package version requires, under a verified backup manifest\n (`polylogue backup --profile full_evidence --verify` first, per the durable-\n tier migration policy in CLAUDE.md).\n3. `nix develop --command switch` (or `boot` + reboot) in sinnix to deploy the\n matching package.\n4. Confirm the deployed package's declared SOURCE_SCHEMA_VERSION matches the\n live source.db `PRAGMA user_version` and `journalctl --user -u polylogued`\n shows no source/user-tier schema CRITICAL alerts. INDEX_SCHEMA_VERSION is\n EXPECTED to still exceed the live index.db version at this point: that\n residual mismatch is exactly what polylogue-818fy resolves, so neither the\n mismatch nor its health alert is a blocker for triggering the reindex\n (CodeRabbit PR #3597 review caught the original circular phrasing).\n5. Run `devtools verify --all` on the final merged master as a due-diligence\n check before triggering the reindex.\n\nRef polylogue-9qnzy. Part of the pre-reindex readiness chain (polylogue-818fy).","design":"DESIGN + SCOPE CLARIFICATION (2026-08-03):\n\nWHAT THIS BEAD ACTUALLY IS: ~1 hour of mechanical ops (the 5 AC steps in the description). It carries 44 blocker edges not because it consumes those beads' outputs but as an ORDERING constraint: it must run last so the deployed package contains every pre-reindex code change. The two kinds of edge should not be conflated when reading `bd blocked`:\n- REAL input dependencies: beads whose deliverable lands IN the shipped package or the durable schema (code fixes, migrations, committed schema packages e.g. tnqqt). These genuinely gate the deploy.\n- ORDERING-ONLY edges: pure-ops/audit/doctrine beads (e.g. f1vg audit runs, verification-instrument and design beads) that don't change what `nix build` produces. If the coordinator ever wants a truthful critical path, these can be re-pointed at 818fy itself rather than at this bead — but per the fsgdd operator correction (all known gates get fixed regardless), re-wiring is optional bookkeeping, not required work. Precedent: a7gmk was already un-gated from mkk0 on exactly this reasoning (commit 60c1c016f, \"wrong mechanism\").\n\nRUNBOOK (concrete commands; steps 2-3 have live precedent from the 9qnzy migration run this morning):\n1. Merge freeze; `git fetch --all`; record target commit sha on origin/master.\n2. `polylogue backup --profile full_evidence --verify` → fresh manifest (durable-tier policy; do NOT reuse a stale manifest across intervening writes).\n3. `polylogue ops maintenance migrate-tier source --backup-manifest \u003cmanifest\u003e` (exact surface the operator used for 15→20 on 2026-08-03); repeat for user tier only if USER_SCHEMA_VERSION moved (currently v10 = current). Confirm `PRAGMA user_version` == the target commit's SOURCE_SCHEMA_VERSION and `PRAGMA integrity_check` ok.\n4. sinnix: bump the polylogue flake input to the target sha; `cd /realm/project/sinnix \u0026\u0026 nix develop --command switch`; restart/verify polylogued.\n5. Post-deploy check (AC4): deployed package constants match live durable tiers; `polylogue status` flags only the index tier; index mismatch + its health alert are EXPECTED here (818fy resolves them — per the CodeRabbit-corrected phrasing in the description).\n6. `devtools verify --all` on the target commit (~3 min per project memory, not \u003e1h).\n7. Hand off to 818fy: trigger `polylogue ops maintenance rebuild-index` (NOT `ops reset --index`, which refuses on an active generation).\n\nRELATION TO 9qnzy: 9qnzy = get out of the current CRITICAL state now (its durable-migration half is already done; its deploy half may be executed early). This bead = the FINAL re-sync immediately before the reindex trigger; every post-9qnzy merge re-drifts the package, which is why this exists separately. If the interval between 9qnzy's deploy and the reindex is short, this bead degenerates to re-running steps 1-6 — cheap by design.\n","acceptance_criteria":"The description's AC 1-5 remain authoritative. Additions from the 2026-08-03 scoping pass:\n6. The bead's own execution is the 7-step runbook in the design (fetch/freeze, fresh verified backup, migrate-tier to the target commit's SOURCE_SCHEMA_VERSION, sinnix flake-input bump + switch, post-deploy status check, devtools verify --all, hand off to 818fy's rebuild-index trigger) — roughly one hour of mechanical ops, no code changes under this bead id.\n7. Blocker hygiene: before execution, confirm remaining blocker edges are real input dependencies (code/migrations/committed packages that must be in the shipped build) — ordering-only edges from pure-ops/audit/doctrine beads may be re-pointed at 818fy instead, each removal with a one-line evidence note (precedent: mkk0 un-gate, commit 60c1c016f). Optional per the fsgdd operator correction.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T01:22:37Z","created_by":"Sinity","updated_at":"2026-08-03T10:47:56Z","dependencies":[{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-052vs","type":"blocks","created_at":"2026-08-03T07:31:55Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-1xc.8","type":"blocks","created_at":"2026-08-03T05:35:48Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-2qx.3","type":"blocks","created_at":"2026-08-03T03:26:14Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-2tfug","type":"blocks","created_at":"2026-08-03T05:35:47Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-5q2u","type":"blocks","created_at":"2026-08-03T05:35:47Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-6bebe","type":"blocks","created_at":"2026-08-03T05:35:48Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-6krh","type":"blocks","created_at":"2026-08-03T04:02:34Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-8ac0","type":"blocks","created_at":"2026-08-03T03:26:17Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-9kc0","type":"blocks","created_at":"2026-08-03T04:02:33Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-9qnzy","type":"blocks","created_at":"2026-08-03T03:26:11Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-aex0","type":"blocks","created_at":"2026-08-03T04:02:33Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-b5l.1","type":"blocks","created_at":"2026-08-03T04:04:37Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-c831","type":"blocks","created_at":"2026-08-03T03:26:17Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-cc4k","type":"blocks","created_at":"2026-08-03T05:39:44Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-cijx.2","type":"blocks","created_at":"2026-08-03T04:02:33Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-ds4b4","type":"blocks","created_at":"2026-08-03T03:26:15Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-e98k","type":"blocks","created_at":"2026-08-03T03:26:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-es7b","type":"blocks","created_at":"2026-08-03T05:39:44Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-f1vg","type":"blocks","created_at":"2026-08-03T03:26:13Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-f47j","type":"blocks","created_at":"2026-08-03T05:35:44Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-gxig","type":"blocks","created_at":"2026-08-03T05:35:45Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-gysk3","type":"blocks","created_at":"2026-08-03T03:26:16Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-h57ic","type":"blocks","created_at":"2026-08-03T05:47:16Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-h7y0j","type":"blocks","created_at":"2026-08-03T03:26:17Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-hjwr","type":"blocks","created_at":"2026-08-03T05:35:46Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-i3zo","type":"blocks","created_at":"2026-08-03T05:35:46Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-iuyr","type":"blocks","created_at":"2026-08-03T05:39:43Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-k8wv","type":"blocks","created_at":"2026-08-03T03:26:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-kmqwm","type":"blocks","created_at":"2026-08-03T05:35:45Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-ksgg","type":"blocks","created_at":"2026-08-03T03:26:16Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-lb39z","type":"blocks","created_at":"2026-08-03T03:26:11Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-lkrc","type":"blocks","created_at":"2026-08-03T03:26:12Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-lyv4","type":"blocks","created_at":"2026-08-03T05:39:43Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-qhk8z","type":"blocks","created_at":"2026-08-03T03:26:16Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-swqu","type":"blocks","created_at":"2026-08-03T03:26:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-tnqqt","type":"blocks","created_at":"2026-08-03T03:26:14Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-tu1f","type":"blocks","created_at":"2026-08-03T05:35:45Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-tw4ar","type":"blocks","created_at":"2026-08-03T03:26:15Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-vp2ky","type":"blocks","created_at":"2026-08-03T05:39:44Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-w6hql","type":"blocks","created_at":"2026-08-03T03:26:15Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-yla8","type":"blocks","created_at":"2026-08-03T03:26:13Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-z22ml","type":"blocks","created_at":"2026-08-03T05:35:47Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-a7gmk","depends_on_id":"polylogue-zoek0","type":"blocks","created_at":"2026-08-03T05:47:05Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":43,"dependent_count":1,"comment_count":0} | |||
| {"_type":"issue","id":"polylogue-tnqqt","title":"Run real schema-inference commit for all 9 providers on the pristine blobstore, review for sensitive content, commit","description":"Once polylogue-2qx.3 wires the real persist path, run schema inference for real\n(not the currently-broken generate --full-corpus, which silently no-ops because\ngenerate_provider_schema() never calls persist_generated_provider_bundle()).\n\nAC:\n1. Run devtools lab schema commit (or whatever surface 2qx.3 wires the persist\n path onto) for all 9 origins (claude-code-session, claude-ai-export,\n chatgpt-export, codex-session, gemini-cli-session, hermes-session,\n antigravity-session, aistudio-drive, grok-export), against the pristine\n post-raw-authority-cleanup blobstore (i.e. after lb39z/hjpx/lkrc/yla8 land),\n not the currently-stale committed schema packages.\n2. Diff the newly generated schema packages against the previously committed\n ones -- confirm the diff is non-empty and structurally sane (this session's\n own audit found every prior \"zero diff\" was a false negative caused by the\n 2qx.3 wiring gap, so a genuine non-trivial diff here is itself a sanity\n check that the fix worked).\n3. Review every one of the 9 generated schema packages for sensitive or\n embarrassing content before committing -- polylogue is a PUBLIC GitHub repo.\n One package was spot-checked this session (gzip'd JSON Schema: only\n $defs/type/title/anyOf/default fields, no embedded real content values),\n which de-risks but does not clear the other 8; check specifically for any\n example/sample/representative_paths-style fields that might carry real\n conversation excerpts.\n4. Commit the reviewed schema packages via a normal PR.\n\nRef polylogue-2qx.3, part of the pre-reindex readiness chain (polylogue-818fy).","design":"DESIGN (2026-08-03; builds on notes — pristine-blobstore ruling + 10:15 correction still stand, read them first):\n\nWHAT \"COMMIT\" CONCRETELY MEANS (the 2qx.3 gap is closed — this is now real): `devtools lab schema commit` → polylogue/schemas/operator/commit.py:commit_provider_schema(SchemaCommitRequest). It wraps generate_all_schemas (schemas/generation/workflow.py) — the ONLY path that calls persist_generated_provider_bundle — and writes polylogue/schemas/providers/\u003cprovider\u003e/versions/... through SchemaRegistry.replace_provider_packages, which enforces monotonic-merge protection. It emits a before/after report per version: new | changed | unchanged, plus lost/narrowed leaf-type detection via polylogue/schemas/type_narrowing (added_paths/narrowed_paths). Distinct from promote_schema_cluster (single-cluster promotion) — do not use that surface for this run.\n\nPER-PROVIDER EXECUTION: one commit invocation per origin, all 9 (claude-code-session, claude-ai-export, chatgpt-export, codex-session, gemini-cli-session, hermes-session, antigravity-session, aistudio-drive, grok-export). Provider packages are independent directory trees, so runs are isolated by construction.\n\nFAILURE HANDLING (one provider failing must not sink the batch):\n- A generation/commit ERROR for provider X: record it, continue with the other 8, file a follow-up bead for X. The PR ships the successful subset; the AC matrix marks X deferred, not silently absent.\n- A NARROWING report for provider X (lost/narrowed leaf types vs committed packages): STOP for that provider — narrowing means either a sampling-frame regression or genuinely retired wire shapes; needs operator review before commit, per replace_provider_packages' own monotonicity contract. Never override the monotonic-merge protection to force a commit.\n- A ZERO-DIFF result for any provider is itself suspect (description item 2: every prior zero-diff was the 2qx.3 wiring gap) — treat as a failure to investigate, not a pass.\n\nSENSITIVE-CONTENT REVIEW PROTOCOL (repo is PUBLIC; description item 3): for each of the 9 generated bundles, before `git add`: decompress and grep the JSON Schema for value-bearing keys (examples, default, const, enum, representative_paths, sample) and eyeball any hits — structural keys ($defs/type/title/anyOf) are fine. One package was spot-checked clean earlier; the other 8 are unreviewed. Privacy config: privacy_config_from_payload (schemas/operator/inference.py) is already threaded through the commit path — confirm its redaction settings are active for the run.\n\nSAMPLING FRAME: use the logical-heads-only sampling mode (registry-phase1 lane, per notes) so superseded revisions don't skew value distributions; blob_hash dedup in sampling_db.py already skips byte-identical re-acquisitions. Precondition remains r9xsj's gate (pristine blobstore) plus omsw/3m3de/8ac0 for misclassified-raw contamination — scale of contamination was corrected DOWN in the 10:15 note; the misclassification concern is unchanged.\n\nDELIVERABLE: one PR with the 9 (or N\u003c9 + deferrals) reviewed schema packages + the per-provider commit report table (new/changed/unchanged/narrowed counts) in the PR body.\n","acceptance_criteria":"Sharpens the description's AC 1-4 (which remain authoritative) with per-provider failure semantics:\n1. `devtools lab schema commit` (commit_provider_schema path — the real persisting entry point, 2qx.3 closed) run per origin for all 9, against the post-cleanup blobstore (r9xsj gate PASS receipt in hand), logical-heads-only sampling mode active.\n2. Per-provider isolation: one provider's generation/commit error defers that provider (follow-up bead filed, AC matrix marks it deferred) without blocking the other 8; a NARROWING report for any provider halts that provider's commit pending operator review — the monotonic-merge protection is never overridden.\n3. Every provider's diff vs committed packages is non-empty and structurally sane; any zero-diff is investigated as a failure, not accepted as a pass.\n4. All committed bundles pass the sensitive-content review protocol (grep decompressed schemas for examples/default/const/enum/representative-style value-bearing fields; repo is PUBLIC) with the review noted per package in the PR body.\n5. One PR ships the reviewed packages + a per-provider commit report table (new/changed/unchanged/narrowed counts).","notes":"Footprint: polylogue/schemas/operator/commit.py, polylogue/schemas/generation/workflow.py (real persist path from polylogue-2qx.3), generated provider bundles under polylogue/schemas/providers/.\n2026-08-03 OPERATOR RULING: a pristine blobstore is a HARD prerequisite for the inference run - the sampling frame reads every raw_sessions row (70+ GB) and the current corpus is contamination- and duplication-heavy, so the inferred distribution would be out-of-distribution garbage. Prerequisite set now wired as blockers: omsw + 3m3de + mvcbi (misclassified-raw admission, fix lanes dispatched 2026-08-03), 8ac0, plus the raw-authority drain program (lkrc/lb39z) for the quarantine mass and supersession/retention release. Additionally a logical-heads-only sampling mode is being added (registry-phase1 lane) so value-distribution synthesis can ignore superseded revisions even before full corpus cleanup. Note: byte-identical dupes are already skipped by the sampler's blob-hash dedup (13-38% per origin); the remaining skew is near-dup revision chains + misclassified raws.\n2026-08-03 ~10:15 CORRECTION to the earlier pristine-blobstore ruling on this bead: the '70+ GB out-of-distribution contamination' framing overstated the quarantine mass by ~4x (see corrected lkrc note - true never-indexed content is ~5.3 GiB, not ~30 GiB; 77% of the apparent gap is byte-identical re-acquisitions the sampler's own blob_hash dedup already skips, per sampling_db.py:279-305 - so THAT specific contamination risk was already smaller than stated). Genuine remaining prerequisites for real schema inference, unchanged: omsw/mvcbi/3m3de (misclassified raws still contaminate regardless of scale) + 8ac0. Do NOT frame future work here as 'ingest/reconcile 7,200 sources' - the correct target is the ~2,895-head / ~5.3 GiB genuinely-novel slice plus formal dedup-supersession of the duplicate mass (tracked on lkrc).","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T01:22:19Z","created_by":"Sinity","updated_at":"2026-08-03T10:47:56Z","dependencies":[{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-2qx.3","type":"blocks","created_at":"2026-08-03T03:26:09Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-3m3de","type":"blocks","created_at":"2026-08-03T08:57:03Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-4987i","type":"blocks","created_at":"2026-08-03T16:43:25Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-8ac0","type":"blocks","created_at":"2026-08-03T08:57:03Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-f47j","type":"blocks","created_at":"2026-08-03T05:35:50Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-iuyr","type":"blocks","created_at":"2026-08-03T05:39:54Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-kmqwm","type":"blocks","created_at":"2026-08-03T05:35:50Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-mvcbi","type":"blocks","created_at":"2026-08-03T08:57:03Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-o8c3m","type":"blocks","created_at":"2026-08-03T16:19:56Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-omsw","type":"blocks","created_at":"2026-08-03T08:57:03Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-r9xsj","type":"blocks","created_at":"2026-08-03T10:23:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-tnqqt","depends_on_id":"polylogue-tu1f","type":"blocks","created_at":"2026-08-03T05:35:50Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":12,"dependent_count":2,"comment_count":0} | |||
| {"_type":"issue","id":"polylogue-818fy","title":"Run the production reindex (polylogue ops reset --index / rebuild-index \u0026\u0026 polylogued run)","description":"The actual production reindex operation against the live archive (/realm/db/polylogue), the culmination of this session's whole raw-authority/schema-inference/blobstore-cleanup readiness effort.\n\nCorrect command per this session's own audits (NOT the originally-planned 'polylogue ops reset --index'): the live archive is a managed active generation (.index-active-pointer present), so `reset --index` will hard-refuse. Use `polylogue ops maintenance rebuild-index` instead, then `polylogued run`.\n\nOperator directive 2026-08-03: polylogue-f1vg (corpus acceptance gate) explicitly BLOCKS this bead -- do not run the reindex until f1vg passes clean (or every remaining absence/fidelity gap it reports is explicitly accepted by the operator as known/tracked).\n\nAlso gated on the P0 raw-authority cluster (9qnzy schema-currency gap, lb39z/hjpx/lkrc/yla8 raw-authority convergence, 2qx.3 schema-inference persist-path fix) resolving first, per this session's own pre-reindex audit wave.","design":"DESIGN — THE RUNBOOK (2026-08-03; command per the mechanism note: blue/green rebuild-index, NOT ops reset --index which hard-refuses on the active generation):\n\nGATE CLOSURE: transitive blocker closure grew 80 -\u003e 81 today (polylogue-2qx, the OriginSpec epic, confirmed a real gate). Direct-blocker forcing-class map lives on fsgdd (K/S/O/V/P/D); the ordering rule that matters here: K-class stamp-poisoners land before xselt writes stamps; S-class durable-tier fixes land before or with the run.\n\nSEQUENCE:\n1. PRE-FLIGHT GATES (all must hold): r9xsj gate receipt PASS (zero quarantine / zero open blockers / fidelity census — its AC lists the exact queries); f1vg corpus acceptance PASS or every residual operator-accepted in writing (hard blocker per operator directive); tnqqt schema packages committed; xselt stamp columns landed so the rebuild bootstraps fingerprints (this is what makes 818fy the LAST full rebuild — kea7p takes over after); t0m73 registry productized enough to serve as the post-rebuild acceptance instrument; 0x7nh canary differ available.\n2. DEPLOY SYNC: a7gmk runbook (fresh verified backup -\u003e migrate-tier source to the target commit's SOURCE_SCHEMA_VERSION -\u003e sinnix flake bump + switch -\u003e only index-tier mismatch remains -\u003e devtools verify --all green).\n3. CANARY (0x7nh): rebuild N sessions per origin with --no-promote; run the changelog differ old-vs-new; operator reviews the diff before full run.\n4. FULL REBUILD: `polylogue ops maintenance rebuild-index` (daemon-owned writer, blue/green: builds a fresh generation beside the active one; bounded passes via raw_batch_size/pass_byte_budget_mb/pass_deadline_seconds flags in cli/commands/maintenance/_rebuild_index.py). Monitor via daemon health + pass receipts; e98k (mmap-vs-cgroup) must be resolved or explicitly waived first (OOM risk for the rebuild process itself).\n5. PROMOTION GATE: before flipping .index-active-pointer, run the archive-verification registry (ARCHIVE_VERIFICATION_CHECKS) + xselt's stamp-coverage check against the CANDIDATE generation; refuse promotion on failure.\n6. POST-RUN: `polylogued run` resumes convergence (embeddings catch-up, insights); qsagp/5xxmc post-reindex catch-up viability already closed. Re-run f1vg audit + r9xsj receipt against the new generation; expected deltas: b508 phantom sidecars gone (~4,945 claude-code rows drop), gt1z sessions.reported_cost_usd populated (v49 delta), msia purge+reingest reflected, hermes staleness (76 sessions) resolved.\n7. RECEIPTS: record before/after tier versions, session/message counts per origin, duration, and the promotion-gate registry receipt on this bead.\n\nROLLBACK: blue/green means the old generation stays until promotion; abort = do not flip the pointer. After promotion, rollback = re-point at the retained old generation before GC reclaims it (confirm retention window before starting).\n","acceptance_criteria":"1. Every pre-flight gate holds with receipts: r9xsj PASS receipt, f1vg PASS or operator-accepted residuals in writing, tnqqt packages committed, xselt stamp columns landed, a7gmk deploy-sync complete (only index-tier mismatch remains), e98k resolved or waived.\n2. Canary first: 0x7nh differ run over N-per-origin --no-promote rebuild, diff reviewed by operator before the full run.\n3. Full rebuild executes via `polylogue ops maintenance rebuild-index` (never ops reset --index); promotion happens only after the archive-verification registry + stamp-coverage check pass against the candidate generation.\n4. Post-run: live index.db PRAGMA user_version == current INDEX_SCHEMA_VERSION (57+); daemon health shows no schema CRITICAL on any tier; f1vg + r9xsj re-run PASS against the new generation.\n5. Expected-delta checks recorded on this bead: b508 phantom count -\u003e 0, gt1z reported_cost_usd populated, msia origin shape real, hermes 76-session staleness gone, 100% sessions carry fingerprint stamps (one parser_fingerprint per origin), v50 thinking/reasoning recovery verified per polylogue-m73wk (per-origin sum(thinking_count) \u003e 0 for claude-code/codex populations known to carry it), material_origin human_authored counts per origin \u003e= pre-rebuild counts (no gzgyl-class regression), the 41 s8s54 raws rebuild as chatgpt-export identity.\n6. Before/after receipts (tier versions, per-origin session/message counts, duration, promotion-gate output) recorded here; closure blocker count at run time noted (81 as of 2026-08-03 morning; +3 gate-hunt additions slshy/gzgyl/s8s54 same day).","notes":"2026-08-03 mechanism note (Fable, operator question 'why wipe the index?'): the upsert primitive already exists (ingest hash-skip, _core.py:671) and polylogue-kea7p designs the differential reindex (fingerprint/hash/backfill tiers, in-place by default, blue-green as measured escalation). For THIS reindex, blue-green remains the right call: past sessions carry no semantics fingerprints, and 9 of the 11 pending deltas (v46-56) are SEMANTIC_REPARSE without clone-safe DDL declarations, so there is no in-place DDL path. Run 818fy as planned; kea7p makes it the last full rebuild.\n2026-08-03 reindex-gate-hunt closeout (team-lead): the unknown-hunting campaign fsgdd/wwph1 anticipated ran today (4 lens-hunters + adjudicator + Fable lead; full report /realm/data/derived/reports/reindex-gate-hunt-2026-08-03.html). Net additions to this runbook: 3 new direct blockers — polylogue-slshy (K: positional provider_message_id root cause, also blocks xselt), polylogue-gzgyl (P-regression: PR #2502 material_origin, ~22.4K rows), polylogue-s8s54 (S: mvq8 AC2 retroactive origin repair, actuator exists). AC #5 amended with three new expected-delta checks (thinking-count via m73wk, human_authored non-regression, s8s54 identity). Batch-riders (no edge, land in the same semantic window): iltbx (hash-payload widening — efficiency-critical: lowering_fingerprint covers ids.py, landing later costs a dedicated full differential reparse), 22ldr (gemini outcome mapping), 58jjk (codex goals/memories wiring, targeted-reprocess shape). Sequencing question closed: attachment blob backfill (pfdf/ck5v/5gjre) is order-independent w.r.t. this run (pfdf actuator = targeted idempotent UPDATE keyed by attachment content-identity, generation-agnostic; adjudicated task #2). Named-absence evidence for the f1vg pass appended to f1vg directly (6 aistudio-drive raws).\nPRE-REINDEX BASELINE FROZEN 2026-08-03: .agent/scratch/reindex-baseline-2026-08-03.md (invariant suite 7F/3P with counts; per-origin raw census; blob accounting; provenance classes; ground-truth denominators; session_events sizing). Phase F diffs against THIS. Two blockers found during the census: mhx95 (daemon frozen since 07-31 — P0) and 0v4tn (blob_refs GC oracle broken).\nReindex-gate audit (2026-08-03, fork of ~90 open design/architecture beads read individually, not by title): the 7 blocked-by edges just added above are the ones that would force redoing this reindex if decided/landed AFTER it runs, because they change content_hash-relevant computation (session_events/title are direct hash inputs) or the session-composition/identity semantics the hash is computed over:\n\n- a7xr.25: session_events double-stores tool-call/reasoning content already in blocks (7.4M rows) -- decision direction is to stop storing redundant events or derive them; either way changes session_events, a direct content_hash component.\n- 6e7m: title derivation has 78-way prompt-echo collisions -- title is in the content_hash payload; any resolution-logic change shifts hashes.\n- 4ts: session lineage truth (shared-prefix composition across fork/resume/subagent/compaction) -- literally decides what content a materialized session contains; 26.5% of human/assistant blocks still cross-session-duplicated per its own re-measurement this session.\n- nas1: resume topology vs. context-assisted continuation -- touches the same session_links write path as 4ts, grouped as one lineage-gating cluster.\n- 2qx: OriginSpec (source admission/material_origin/authorship rules) -- own description cites live classification correctness gaps in material_origin, a message-hash input.\n- qj5x: decision to remove Origin.BEADS_ISSUE -- ~924 beads-issue-projected sessions would need reparsing if decided after; narrower blast radius than the others, could be a targeted follow-up rather than blocking, but should be decided before or shortly after 818fy, not indefinitely deferred.\n- a7xr.23: content-defined chunking vs durable cursors for append/prefix ingest -- upstream of parsing, decides what raw bytes get admitted/chunked.\n\nLower-confidence, NOT wired as blocking (flagged for a closer look, not confident enough to gate): a7xr.24 (ColumnSpec/DDL/mapper reconciliation -- one field, stop_reason/is_active_leaf, is restated in 5 places; if those currently disagree and get reconciled, stored values could shift), 83u (attachment/blob integrity -- depends on whether the fix changes attachment metadata recorded at parse time vs. only backfilling storage post-hoc).\n\nExplicitly NOT gating (operationally relevant to running the reindex smoothly, but doesn't change output): 5vft (rebuild-index --only-missing/reset --index operational bugs -- check before invoking, not before deciding scope), b5l.1 (raw-replay --only-missing resumability, efficiency not correctness), kea7p (differential reindex strategy -- its own conclusion is that 818fy's full rebuild is the necessary fingerprint bootstrap, it explains why 818fy must run as designed rather than gating it).\n\nEverything else in the audited ~90 (read/query/render surfaces, daemon/infra/perf, durable-tier process beads, user.db/overlay-only beads, security/mutation-authority, cost/analytics/embeddings/interop, vocabulary/enum hygiene, agent-UX/config/tooling) checked and confirmed no parse/hash/identity/schema surface -- not wired as blocking.\n2026-08-04: polylogue-gvzkr filed (schema field/table purge audit, all 5 tiers). NOT a hash/correctness gate — dropping unused columns from DDL doesn't change content_hash (computed over the parsed semantic payload, not DB column existence) — so this is an EFFICIENCY batch-rider like iltbx/22ldr/58jjk, not a blocker: if the derived-tier (index.db/embeddings.db) disposition table is ready before this rebuild's DDL is finalized, land the pruned schema directly and skip a second full rebuild later to drop the same columns; if not ready in time, proceed without it — nothing forces waiting. Durable-tier (source.db/user.db) purges are unrelated to this bead's timing entirely (separate consent-gated migration, doesn't block 818fy either direction).\nGENERALIZED PRINCIPLE (operator observation, 2026-08-04): the ride-the-rebuild table above (a7xr.25, iltbx, 22ldr, 58jjk, and now gvzkr's derived-tier phase) is one recurring test, not four coincidentally similar decisions: ANY derived-tier structural/computational change is FREE if its DDL/logic decision lands before this rebuild's walk starts (the walk touches every session regardless), and EXPENSIVE if decided after (either a second full rebuild, or a bespoke backfill pass reimplementing the same walk). Apply this as a one-line check to any new finding surfaced before 818fy runs: 'does this change what a derived-tier row looks like, and is it cheap to decide now?' — if yes to both, it's a batch-rider for this table, not a separate future task. Note the principle's shelf life: kea7p (differential reindex) exists specifically to make future rebuilds cheap/incremental, which retires the 'free only during the one big walk' urgency this principle depends on — post-kea7p, this stops being a load-bearing distinction.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-03T00:34:02Z","created_by":"Sinity","updated_at":"2026-08-03T22:33:36Z","dependencies":[{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-0qfy","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-0x7nh","type":"blocks","created_at":"2026-08-03T08:24:56Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-2hwl","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-2qrx","type":"blocks","created_at":"2026-08-03T06:40:17Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-2qx","type":"blocks","created_at":"2026-08-03T22:36:23Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-4987i","type":"blocks","created_at":"2026-08-03T16:43:25Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-4ts","type":"blocks","created_at":"2026-08-03T22:36:23Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-4ts.10","type":"blocks","created_at":"2026-08-03T07:31:55Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-5iz4","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-5xxmc","type":"blocks","created_at":"2026-08-03T07:31:55Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-6753s","type":"blocks","created_at":"2026-08-03T10:21:51Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-6e7m","type":"blocks","created_at":"2026-08-03T22:36:22Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-7zp4","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-a7gmk","type":"blocks","created_at":"2026-08-03T03:26:19Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-a7xr.23","type":"blocks","created_at":"2026-08-03T22:36:23Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-a7xr.25","type":"blocks","created_at":"2026-08-03T22:36:22Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-ey4ro","type":"blocks","created_at":"2026-08-03T08:50:29Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-f1vg","type":"blocks","created_at":"2026-08-03T02:34:02Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-foee","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-fsgdd","type":"blocks","created_at":"2026-08-03T08:24:57Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-gzgyl","type":"blocks","created_at":"2026-08-03T14:18:20Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-ih67","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-ix5r","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-mvcbi","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-nas1","type":"blocks","created_at":"2026-08-03T22:36:23Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-omsw","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-qj5x","type":"blocks","created_at":"2026-08-03T22:36:23Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-qsagp","type":"blocks","created_at":"2026-08-03T07:31:55Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-r9xsj","type":"blocks","created_at":"2026-08-03T10:23:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-reindex-final-proof","type":"blocks","created_at":"2026-08-06T07:02:24Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-rrxe4","type":"blocks","created_at":"2026-08-04T06:14:13Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-rrxe4.1","type":"blocks","created_at":"2026-08-04T06:21:49Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-s8s54","type":"blocks","created_at":"2026-08-03T14:18:21Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-slshy","type":"blocks","created_at":"2026-08-03T14:17:57Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-sp72","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-t0m73","type":"blocks","created_at":"2026-08-03T07:35:29Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-uqwd","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-wwph1","type":"blocks","created_at":"2026-08-03T08:24:56Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-xofj","type":"blocks","created_at":"2026-08-03T06:40:18Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-818fy","depends_on_id":"polylogue-xselt","type":"blocks","created_at":"2026-08-03T08:24:56Z","created_by":"Sinity","metadata":"{}"}],"comments":[{"id":"017c6135-491d-58af-ae25-bc99a8fbafe9","issue_id":"polylogue-818fy","author":"Sinity","text":"Gate-set expansion (2026-08-03, dependency-curation pass): added 13 blocks deps under the invalidation rule \"doing X after the reindex forces a second replay or a sketchy retrofit\".\n\nAcquisition-completeness class (replay only sees source.db; these mean raws are missing/incomplete at replay time): 2qrx (211 stalled append cursors, 414MB unacquired; its own text: rebuild recovers none of it), ix5r (1,446 excluded cursors dark until revival mechanism exists), 5iz4 (90.8MB codex whale parse-crashes on every attempt; rebuild does NOT fix).\n\nParse/identity semantics class (baked into index.db at replay; fixing later reclassifies nothing without another reparse): 0qfy + uqwd (export-vintage instability drives false conflict verdicts in revision-authority membership), 7zp4 (content hash skips NFC for tool_input/session-event payloads: hash derivation change re-keys everything), xofj (six unmodelled chatgpt content types, ~11k blocks lose semantic type), 2hwl (chunk-merge drops titles + multi-flags active leaf), foee + ih67 (codex title/topology resolution: without them all 3,101 codex sessions bake UUID titles again), mvcbi (drive detector admits empty envelopes), sp72 (drive re-acquisition bypasses revision governance, raws quarantined at replay), omsw (tool-result/workflow-journal artifacts minted as phantom sessions; admission fix must precede replay or they re-materialize).\n\nDeliberately NOT gated (proposals, operator to decide): bo9n (6.8M-row session_events aggregation decision) and ei0d (1.28GiB write-only payload_json) are schema-shape decisions that would shrink the fresh index but are design-decision-gated; 3szyi (CHECK-constraint generation) rides any index bump; 4ts (lineage epic) is too large to gate wholesale.","created_at":"2026-08-03T04:41:23Z"}],"dependency_count":40,"dependent_count":17,"comment_count":1} | |||
| {"_type":"issue","id":"polylogue-9qnzy","title":"Live archive source.db/index.db schema lags checked-out code by 3-5 migrations, daemon health CRITICAL","description":"Discovered during a pre-reindex raw-authority-backlog audit (2026-08-02), read-only against the live archive at /realm/db/polylogue.\n\nEvidence:\n- `PRAGMA user_version` on live source.db = 15. Checked-out worktree HEAD (d84834968, includes merged PRs #3574/#3577/#3586/#3588/#3589/#3590) declares SOURCE_SCHEMA_VERSION = 20 (polylogue/storage/sqlite/archive_tiers/source.py:12). That is 5 pending additive migrations (016-020), most requiring a verified backup manifest per `migrate_archive_tier` (only 017 is marked `-- migration-safety: additive-no-backup`).\n- The **currently deployed** nix package (`python3.14t-polylogue-0.3.0`, live systemd unit `polylogued.service`, PID 1919586) itself expects source.db v18 / index.db v56, i.e. already 3 source + 10 index versions ahead of the live archive. `journalctl --user -u polylogued` shows a CRITICAL `daemon.health: schema_version` alert firing every 5 minutes continuously since at least 21:27Z today: `archive tier layout is not ready: tier user_version mismatch: source.db:15!=18, index.db:46!=56`.\n- Migration 016 (`raw_capture_observations`, absent from the live source.db) is written **unconditionally** by the ordinary capture-ingest write path (`polylogue/storage/sqlite/queries/raw_writes.py:97-104`, guarded only on `capture_mode is not None`, which is the common case) — a live ingest run under current/deployed code hitting this path with schema still at v15 would raise `sqlite3.OperationalError: no such table: raw_capture_observations`. No such error has appeared in the journal yet (likely because no capture-mode-bearing write has been exercised since the last restart), but it is a live landmine, not a hypothetical.\n- Separately: the operator's stated reindex command `polylogue ops reset --index \u0026\u0026 polylogued run` will **refuse outright** right now — `_archive_index_targets()` in `polylogue/cli/commands/reset.py:110-114` raises `ClickException(\"reset --index is unsafe for a managed active generation; use \\`polylogue ops maintenance rebuild-index\\`\")` whenever `.index-active-pointer` exists, and it does exist in the live archive root. The blue/green `polylogue ops maintenance rebuild-index` path must be used instead; the plan as literally stated cannot execute.\n\nNone of this is caused by or related to the raw-authority quarantine/convergence redesign (lb39z/w6hql/ds4b4) — it is an independent deployment/migration-currency gap between the live daemon's installed package, the live archive's on-disk schema, and origin/master's checked-out HEAD. Recommend: run the durable-tier migration path (`polylogue maintenance migrate-tier` or equivalent, with a verified backup manifest) for source.db up to whatever version the intended runtime code declares, and confirm the deployed nix package version matches origin/master before doing a full reindex, or the reindex will run under a runtime code / on-disk schema mismatch of unknown severity beyond the one path already identified above.","design":"DESIGN / REMEDIATION SEQUENCE (2026-08-03, supersedes the description's numbers — much has moved since filing):\n\nCURRENT STATE (verified live this session, read-only):\n- source.db user_version=20 (operator ran `polylogue ops maintenance migrate-tier source --backup-manifest \u003c2026-08-02 full_evidence manifest\u003e` this morning, applying 016-020; see comment). Master now declares SOURCE_SCHEMA_VERSION=24 (archive_tiers/source.py:24) — migrations 021-024 (widen-origin-check, hook_payload blob refs, byte-dup supersession receipts, verdict cache) landed AFTER that migration run and are pending.\n- user.db v10 = current. No user-tier work.\n- index.db user_version=46 vs master INDEX_SCHEMA_VERSION=57 (archive_tiers/index.py, last assignment wins). This gap is NOT a migration — index is a derived tier; it closes only via the 818fy blue/green rebuild (`polylogue ops maintenance rebuild-index`, daemon-owned). The description's note stands: `ops reset --index` hard-refuses while `.index-active-pointer` exists.\n- Deployed nix package still bakes SOURCE=18/INDEX=56 — stale vs master 24/57. Daemon CRITICAL health alert now reports index-tier mismatch only (source no longer flagged after the migration).\n\nCONCLUSION — THIS BEAD NEEDS NO POLYLOGUE CODE CHANGES. It is an ops/deploy sequence:\n1. Pick the target master commit (merge-freeze checkpoint for the pre-reindex batch).\n2. Fresh verified backup: `polylogue backup --profile full_evidence --verify` (durable-tier migration policy; 021 is the only non-trivial one — it widens a CHECK, precedent says table rebuild, backup manifest mandatory).\n3. `polylogue ops maintenance migrate-tier source --backup-manifest \u003cmanifest\u003e` → source.db 20→24. Confirm `PRAGMA user_version`=24 + `PRAGMA integrity_check` ok.\n4. sinnix: update the polylogue flake input pin to the target commit; `cd /realm/project/sinnix \u0026\u0026 nix develop --command switch`; restart polylogued.\n5. Confirm: `polylogue status` schema health flags AT MOST the index tier; `journalctl --user -u polylogued` shows no source/user-tier CRITICAL.\n6. Index gap: resolved by 818fy's own `polylogue ops maintenance rebuild-index` run — explicitly NOT this bead's scope.\n\nSteps 4-5 overlap a7gmk (final deploy sync). Division of labor: this bead = get the live system OUT of the CRITICAL/landmine state now (migrations current + a non-stale daemon); a7gmk = the final re-sync immediately before triggering the reindex (every PR merged after this bead's deploy re-drifts the package).\n\nSCOPE-REDUCTION FINDING (verified against each bead's own notes): the four P0s blocked on this bead — lb39z, hjpx, lkrc, yla8 — are NOT waiting on more code for their merged halves. lb39z items 1-4 of 5 merged (PRs #3574/#3577/#3588); hjpx AC1-5 satisfied (per its 2026-08-01 reconciliation note), gated on yla8's live closure gate; what remains for all four is LIVE EXECUTION (dry-run censuses, operator-authorized actuator applies, the yla8 audit) which requires the deployed daemon/CLI to run current code against a schema-current archive — i.e. exactly this bead's deploy step. The blocked-on-9qnzy edges are deploy-dependencies, not missing-feature dependencies. Fixing this bead likely converts those four from \"blocked\" to \"ready for their live/ops halves\" without further merges (except lb39z item 5, which still needs its own dedicated code session).\n","acceptance_criteria":"1. Live source.db `PRAGMA user_version` equals the deployed package's SOURCE_SCHEMA_VERSION (currently 24 on master; verify: sqlite3 'file:/realm/db/polylogue/source.db?mode=ro' 'PRAGMA user_version'), with `PRAGMA integrity_check` ok, migrations applied via `polylogue ops maintenance migrate-tier source --backup-manifest \u003cfresh verified full_evidence manifest\u003e`.\n2. user.db remains current (v10) or is migrated the same way if USER_SCHEMA_VERSION moves.\n3. The deployed sinnix polylogue package is built from a master commit whose SOURCE_SCHEMA_VERSION matches the live source.db; daemon restarted.\n4. `polylogue status` / `journalctl --user -u polylogued` show NO source/user-tier schema CRITICAL alerts; an index-tier mismatch (46 vs current) is the only permitted residual — it is 818fy's scope (`polylogue ops maintenance rebuild-index`, never `ops reset --index`), not this bead's.\n5. No polylogue code changes shipped under this bead id — it is an ops/deploy sequence; any code gap discovered during execution files its own bead.","notes":"Re-verified live 2026-08-03: source.db is now v24 (migrations 016-024 all present, tables raw_membership_writeback_receipts/raw_append_chain_backfill_receipts/raw_byte_duplicate_supersession_receipts/raw_authority_verdicts_cache all exist) -- the source-tier gap this bead originally flagged (was v15) is fully resolved, presumably via normal incremental additive-migration convergence since filing. index.db remains behind (v46 vs checked-out code's v60, now wider after this session's own semantic-reparse bumps for 4987i/omsw/taj0o) -- but per operator correction 2026-08-03: this is not a separate blocker requiring investigation, it IS the exact condition that running the reindex (polylogue-818fy) resolves by construction. Removing this bead's blocked-by edge on polylogue-lb39z (fully done, source-tier concern resolved, nothing else in lb39z's scope depends on index-tier currency). Leaving edges on hjpx/yla8/lkrc for now pending their own reconsideration (operator architectural redirect re: permanent repair machinery, 2026-08-03).","status":"open","priority":0,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-08-02T21:48:47Z","created_by":"Sinity","updated_at":"2026-08-03T21:26:05Z","dependencies":[{"issue_id":"polylogue-9qnzy","depends_on_id":"polylogue-gbs02","type":"relates-to","created_at":"2026-08-03T18:23:53Z","created_by":"Sinity","metadata":"{}"}],"comments":[{"id":"9f82e33d-4236-5f68-bbef-168438aa51bd","issue_id":"polylogue-9qnzy","author":"Sinity","text":"2026-08-03: operator ran the durable-tier migration live (polylogue ops maintenance migrate-tier source --backup-manifest \u003c2026-08-02 full_evidence manifest\u003e). source.db migrated 15 -\u003e 20 (applied 016-020), confirmed via PRAGMA user_version=20 and integrity_check ok. user.db was already current at v10, needed no migration. Daemon restarted; polylogue status now reports the schema-mismatch health check as \"schema version mismatch on tier(s): index\" only -- source is no longer flagged. Remaining gap: (1) index.db (v46 vs deployed package's expected v56) -- this is the derived tier the reindex itself (polylogue-818fy) resolves, not a separate migration; (2) the deployed nix package itself still lags origin/master (was v18/56 at last check, master has advanced well past that) -- that's polylogue-a7gmk's scope (sinnix deploy sync), not yet done. This bead's durable-tier-migration half is done; keep open (or narrow scope) pending a7gmk.\n","created_at":"2026-08-03T03:08:22Z"}],"dependency_count":0,"dependent_count":5,"comment_count":1} | |||
| {"_type":"issue","id":"polylogue-9qnzy","title":"Live archive source.db/index.db schema lags checked-out code by 3-5 migrations, daemon health CRITICAL","description":"Discovered during a pre-reindex raw-authority-backlog audit (2026-08-02), read-only against the live archive at /realm/db/polylogue.\n\nEvidence:\n- `PRAGMA user_version` on live source.db = 15. Checked-out worktree HEAD (d84834968, includes merged PRs #3574/#3577/#3586/#3588/#3589/#3590) declares SOURCE_SCHEMA_VERSION = 20 (polylogue/storage/sqlite/archive_tiers/source.py:12). That is 5 pending additive migrations (016-020), most requiring a verified backup manifest per `migrate_archive_tier` (only 017 is marked `-- migration-safety: additive-no-backup`).\n- The **currently deployed** nix package (`python3.14t-polylogue-0.3.0`, live systemd unit `polylogued.service`, PID 1919586) itself expects source.db v18 / index.db v56, i.e. already 3 source + 10 index versions ahead of the live archive. `journalctl --user -u polylogued` shows a CRITICAL `daemon.health: schema_version` alert firing every 5 minutes continuously since at least 21:27Z today: `archive tier layout is not ready: tier user_version mismatch: source.db:15!=18, index.db:46!=56`.\n- Migration 016 (`raw_capture_observations`, absent from the live source.db) is written **unconditionally** by the ordinary capture-ingest write path (`polylogue/storage/sqlite/queries/raw_writes.py:97-104`, guarded only on `capture_mode is not None`, which is the common case) — a live ingest run under current/deployed code hitting this path with schema still at v15 would raise `sqlite3.OperationalError: no such table: raw_capture_observations`. No such error has appeared in the journal yet (likely because no capture-mode-bearing write has been exercised since the last restart), but it is a live landmine, not a hypothetical.\n- Separately: the operator's stated reindex command `polylogue ops reset --index \u0026\u0026 polylogued run` will **refuse outright** right now — `_archive_index_targets()` in `polylogue/cli/commands/reset.py:110-114` raises `ClickException(\"reset --index is unsafe for a managed active generation; use \\`polylogue ops maintenance rebuild-index\\`\")` whenever `.index-active-pointer` exists, and it does exist in the live archive root. The blue/green `polylogue ops maintenance rebuild-index` path must be used instead; the plan as literally stated cannot execute.\n\nNone of this is caused by or related to the raw-authority quarantine/convergence redesign (lb39z/w6hql/ds4b4) — it is an independent deployment/migration-currency gap between the live daemon's installed package, the live archive's on-disk schema, and origin/master's checked-out HEAD. Recommend: run the durable-tier migration path (`polylogue maintenance migrate-tier` or equivalent, with a verified backup manifest) for source.db up to whatever version the intended runtime code declares, and confirm the deployed nix package version matches origin/master before doing a full reindex, or the reindex will run under a runtime code / on-disk schema mismatch of unknown severity beyond the one path already identified above.","design":"DESIGN / REMEDIATION SEQUENCE (2026-08-03, supersedes the description's numbers — much has moved since filing):\n\nCURRENT STATE (verified live this session, read-only):\n- source.db user_version=20 (operator ran `polylogue ops maintenance migrate-tier source --backup-manifest \u003c2026-08-02 full_evidence manifest\u003e` this morning, applying 016-020; see comment). Master now declares SOURCE_SCHEMA_VERSION=24 (archive_tiers/source.py:24) — migrations 021-024 (widen-origin-check, hook_payload blob refs, byte-dup supersession receipts, verdict cache) landed AFTER that migration run and are pending.\n- user.db v10 = current. No user-tier work.\n- index.db user_version=46 vs master INDEX_SCHEMA_VERSION=57 (archive_tiers/index.py, last assignment wins). This gap is NOT a migration — index is a derived tier; it closes only via the 818fy blue/green rebuild (`polylogue ops maintenance rebuild-index`, daemon-owned). The description's note stands: `ops reset --index` hard-refuses while `.index-active-pointer` exists.\n- Deployed nix package still bakes SOURCE=18/INDEX=56 — stale vs master 24/57. Daemon CRITICAL health alert now reports index-tier mismatch only (source no longer flagged after the migration).\n\nCONCLUSION — THIS BEAD NEEDS NO POLYLOGUE CODE CHANGES. It is an ops/deploy sequence:\n1. Pick the target master commit (merge-freeze checkpoint for the pre-reindex batch).\n2. Fresh verified backup: `polylogue backup --profile full_evidence --verify` (durable-tier migration policy; 021 is the only non-trivial one — it widens a CHECK, precedent says table rebuild, backup manifest mandatory).\n3. `polylogue ops maintenance migrate-tier source --backup-manifest \u003cmanifest\u003e` → source.db 20→24. Confirm `PRAGMA user_version`=24 + `PRAGMA integrity_check` ok.\n4. sinnix: update the polylogue flake input pin to the target commit; `cd /realm/project/sinnix \u0026\u0026 nix develop --command switch`; restart polylogued.\n5. Confirm: `polylogue status` schema health flags AT MOST the index tier; `journalctl --user -u polylogued` shows no source/user-tier CRITICAL.\n6. Index gap: resolved by 818fy's own `polylogue ops maintenance rebuild-index` run — explicitly NOT this bead's scope.\n\nSteps 4-5 overlap a7gmk (final deploy sync). Division of labor: this bead = get the live system OUT of the CRITICAL/landmine state now (migrations current + a non-stale daemon); a7gmk = the final re-sync immediately before triggering the reindex (every PR merged after this bead's deploy re-drifts the package).\n\nSCOPE-REDUCTION FINDING (verified against each bead's own notes): the four P0s blocked on this bead — lb39z, hjpx, lkrc, yla8 — are NOT waiting on more code for their merged halves. lb39z items 1-4 of 5 merged (PRs #3574/#3577/#3588); hjpx AC1-5 satisfied (per its 2026-08-01 reconciliation note), gated on yla8's live closure gate; what remains for all four is LIVE EXECUTION (dry-run censuses, operator-authorized actuator applies, the yla8 audit) which requires the deployed daemon/CLI to run current code against a schema-current archive — i.e. exactly this bead's deploy step. The blocked-on-9qnzy edges are deploy-dependencies, not missing-feature dependencies. Fixing this bead likely converts those four from \"blocked\" to \"ready for their live/ops halves\" without further merges (except lb39z item 5, which still needs its own dedicated code session).\n","acceptance_criteria":"1. Live source.db `PRAGMA user_version` equals the deployed package's SOURCE_SCHEMA_VERSION (currently 24 on master; verify: sqlite3 'file:/realm/db/polylogue/source.db?mode=ro' 'PRAGMA user_version'), with `PRAGMA integrity_check` ok, migrations applied via `polylogue ops maintenance migrate-tier source --backup-manifest \u003cfresh verified full_evidence manifest\u003e`.\n2. user.db remains current (v10) or is migrated the same way if USER_SCHEMA_VERSION moves.\n3. The deployed sinnix polylogue package is built from a master commit whose SOURCE_SCHEMA_VERSION matches the live source.db; daemon restarted.\n4. `polylogue status` / `journalctl --user -u polylogued` show NO source/user-tier schema CRITICAL alerts; an index-tier mismatch (46 vs current) is the only permitted residual — it is 818fy's scope (`polylogue ops maintenance rebuild-index`, never `ops reset --index`), not this bead's.\n5. No polylogue code changes shipped under this bead id — it is an ops/deploy sequence; any code gap discovered during execution files its own bead.","notes":"Re-verified live 2026-08-03: source.db is now v24 (migrations 016-024 all present, tables raw_membership_writeback_receipts/raw_append_chain_backfill_receipts/raw_byte_duplicate_supersession_receipts/raw_authority_verdicts_cache all exist) -- the source-tier gap this bead originally flagged (was v15) is fully resolved, presumably via normal incremental additive-migration convergence since filing. index.db remains behind (v46 vs checked-out code's v60, now wider after this session's own semantic-reparse bumps for 4987i/omsw/taj0o) -- but per operator correction 2026-08-03: this is not a separate blocker requiring investigation, it IS the exact condition that running the reindex (polylogue-818fy) resolves by construction. Removing this bead's blocked-by edge on polylogue-lb39z (fully done, source-tier concern resolved, nothing else in lb39z's scope depends on index-tier currency). Leaving edges on hjpx/yla8/lkrc for now pending their own reconsideration (operator architectural redirect re: permanent repair machinery, 2026-08-03).\nLIVE RECHECK 2026-08-06: direct read-only probes found source.db user_version=28, index.db=46, user.db=10. Running service is installed polylogue-0.3.0 with source expectation 24 and index expectation 57. origin/master at 685f2ca8 expects source 29 and index 66. The daemon journal reports schema_version critical and parks convergence, plus FTS missing rows and raw failures. The live source v28 is ahead of the installed package but behind origin/master v29; the deployed package is behind both. Do not migrate, reset, rebuild, or promote until a provenance and deployment-currency gate identifies the exact target package and verifies the source v28 to v29 transition. Current status API also timed out; no production mutation was performed in this probe.\nPROVENANCE CORRECTION 2026-08-06: repository history identifies source v28 as the additive raw_hook_events_source_hash index train from c9d127d1b / PR #3811, with 028.train.json and 028_raw_hook_events_source_hash_index.sql. The live source v28 is therefore a known valid schema predecessor, not an unidentified anomaly. The remaining deployment gap is exact target selection: installed package source24/index57, origin/master source29/index66, live source28/index46. Terra/Sol must bind the migration and package target to one immutable master revision before any apply.\nINDEPENDENT REVIEW 2026-08-06: Terra gate PR #3851 is intentionally held. The shared guard currently covers source/user only and needs audit-tier coverage, a post-OwnedArchiveLocation recheck, daemon bulk entry protection, empty-source bypass removal, explicit --preflight --daemon rejection, structured daemon-visible mismatch responses, and fixtures initialized with all durable tiers. Six deterministic tests fail before intended ownership assertions with user.db None!=10. A dedicated RW hardening lane is implementing these defects. No production writes or merges have occurred for this gate.","status":"open","priority":0,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-08-02T21:48:47Z","created_by":"Sinity","updated_at":"2026-08-06T09:13:37Z","dependencies":[{"issue_id":"polylogue-9qnzy","depends_on_id":"polylogue-dudtn","type":"blocks","created_at":"2026-08-06T11:50:02Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9qnzy","depends_on_id":"polylogue-gbs02","type":"relates-to","created_at":"2026-08-03T18:23:53Z","created_by":"Sinity","metadata":"{}"}],"comments":[{"id":"9f82e33d-4236-5f68-bbef-168438aa51bd","issue_id":"polylogue-9qnzy","author":"Sinity","text":"2026-08-03: operator ran the durable-tier migration live (polylogue ops maintenance migrate-tier source --backup-manifest \u003c2026-08-02 full_evidence manifest\u003e). source.db migrated 15 -\u003e 20 (applied 016-020), confirmed via PRAGMA user_version=20 and integrity_check ok. user.db was already current at v10, needed no migration. Daemon restarted; polylogue status now reports the schema-mismatch health check as \"schema version mismatch on tier(s): index\" only -- source is no longer flagged. Remaining gap: (1) index.db (v46 vs deployed package's expected v56) -- this is the derived tier the reindex itself (polylogue-818fy) resolves, not a separate migration; (2) the deployed nix package itself still lags origin/master (was v18/56 at last check, master has advanced well past that) -- that's polylogue-a7gmk's scope (sinnix deploy sync), not yet done. This bead's durable-tier-migration half is done; keep open (or narrow scope) pending a7gmk.\n","created_at":"2026-08-03T03:08:22Z"}],"dependency_count":1,"dependent_count":5,"comment_count":1} | |||
There was a problem hiding this comment.
Record the dependency with its actual UTC creation time
Correct the new edge's created_at: it is recorded as 2026-08-06T11:50:02Z, almost two hours after this commit was created at 09:57:20Z. The other newly exported edge is likewise future-dated, and devtools/beads_state_report.py explicitly reconstructs backlog readiness and graph history from edge timestamps, so this makes the durable tracker report a dependency assertion that had not yet happened.
Useful? React with 👍 / 👎.
| @@ -1,3 +1,4 @@ | |||
| {"_type":"issue","id":"polylogue-dudtn","title":"Implement durable schema-currency gate hardening","description":"Implementation slice extracted from polylogue-9qnzy after review found the original gate incomplete. This Bead owns the code and regression tests; polylogue-9qnzy remains the live deployment and migration operation.\\n\\nProblem: rebuild-index could bypass durable schema currency through audit drift, ownership races, daemon bulk setup, the empty-source CLI path, and an unstructured daemon error.\\n\\nScope: guard every canonical durable migration tier, recheck after ownership acquisition, guard daemon bulk bookkeeping, remove empty-source bypass, reject daemon preflight, preserve a structured conflict diagnostic, and document migration of audit.db.\\n\\nAcceptance criteria:\\n1. The predicate derives from DURABLE_MIGRATION_TIERS and covers source, user, and audit.\\n2. Local rebuild checks before receipt/ownership/candidate creation and again after ownership acquisition.\\n3. Daemon bulk entry checks before transaction bookkeeping.\\n4. CLI empty-source execution and --preflight --daemon cannot bypass the guard.\\n5. Daemon HTTP returns a structured 409 rebuild-schema-currency diagnostic.\\n6. File-backed regression tests exercise every guard and the quick gate passes.\\n7. No production database mutation is performed by this implementation Bead; live migration and deployment remain polylogue-9qnzy/a7gmk scope.","design":"Use one canonical durable-tier set from the migration runner. Keep derived index mismatch outside this gate because rebuild-index owns replacement of the derived tier. Bind the implementation to a PR scope carrier and leave live operation as a separate receipt.","acceptance_criteria":"1. All canonical durable migration tiers are checked.\\n2. Early and post-ownership local guards are tested.\\n3. Daemon bulk is guarded before bookkeeping.\\n4. Empty-source and daemon preflight CLI paths are guarded.\\n5. HTTP returns the structured conflict diagnostic.\\n6. Focused regressions and devtools verify --quick pass.\\n7. Live migrations are explicitly out of scope and remain open under polylogue-9qnzy.","notes":"Created 2026-08-06 to provide truthful implementation authority for PR #3856 after Terra/Sol review of polylogue-9qnzy noted that its AC5 explicitly excluded code changes.","status":"open","priority":0,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T09:50:03Z","created_by":"Sinity","updated_at":"2026-08-06T09:50:03Z","dependency_count":0,"dependent_count":1,"comment_count":0} | |||
There was a problem hiding this comment.
Store actual line breaks in the new Bead fields
Replace the literal \n sequences in description and acceptance_criteria with real newline characters before exporting. After JSON decoding, these fields currently contain backslash-plus-n text rather than line breaks, so bd show and other consumers render the problem statement and numbered acceptance criteria as a single line containing escape tokens, degrading the durable task definition that the implementation PR is supposed to use.
Useful? React with 👍 / 👎.
Problem: the schema-gate tracker publication needs a durable record of the corrected full-head carrier and implementation handoff.\n\nWhat changed: append the PR and implementation evidence to polylogue-dudtn while keeping live migration under polylogue-9qnzy and polylogue-a7gmk.\n\nRef polylogue-dudtn.
Problem: the CI run for the tracker publication started before the corrected carrier body was visible.\n\nWhat changed: record the publication commit and exact carrier synchronization in polylogue-dudtn so the next run has one durable evidence chain.\n\nRef polylogue-dudtn.
Problem: Circle validates the PR body at push time, so post-push carrier edits leave one stale run.\n\nWhat changed: record the sequencing correction in the durable implementation Bead before the next publication push.\n\nRef polylogue-dudtn.
Problem: push-triggered validation must observe the exact published carrier.\n\nWhat changed: preserve the final sequencing receipt with the schema gate implementation authority.\n\nRef polylogue-dudtn.
## Summary Publish the durable Bead record that gives the schema-currency implementation its own execution authority. The code and tests remain in PR #3856; this PR carries only the tracker graph update. ## Problem Polylogue-9qnzy is the live migration and deployment sequence and explicitly excludes code changes. Without a separate implementation Bead, PR #3856 could not carry a truthful scope record or bind its implementation to the graph. ## Solution Add polylogue-dudtn with the reviewed schema-currency implementation scope and make it a blocking prerequisite of polylogue-9qnzy. The Bead records the seven implementation acceptance criteria and leaves live migration, deployment, and operation receipts in their existing Beads. ## Verification The exported `.beads/issues.jsonl` contains the new Bead and the durable blocking edge. The versioned PR-scope carrier below validates against the exact head and committed Bead snapshot. No product code or production data changes are included. Ref polylogue-dudtn. Context: polylogue-9qnzy. <!-- polylogue-pr-scope:v1 { "assigned_beads": [ "polylogue-dudtn" ], "beads_digest": "927c820cb198b222d1d5fb169c7027d81567e9223f2563d6facb4a93913daa95", "dispositions": [ { "bead_id": "polylogue-dudtn", "disposition": "partial", "evidence": [ { "kind": "commit", "ref": "c9d12abcf" }, { "kind": "receipt", "ref": "tracker publication only; implementation is carried by PR #3856" } ], "successors": [ "polylogue-9qnzy" ] } ], "head_sha": "66b1bf3d7cecbbf04b5b886a41a3d82d8c7c436c", "scope_digest": "3213a7c3f8ddcc65fac807b2723cf8749f9331c8efdc6bdf197ad07e24e7ecd7", "version": 1 } -->
Summary
Publish the durable Bead record that gives the schema-currency implementation its own execution authority. The code and tests remain in PR #3856; this PR carries only the tracker graph update.
Problem
Polylogue-9qnzy is the live migration and deployment sequence and explicitly excludes code changes. Without a separate implementation Bead, PR #3856 could not carry a truthful scope record or bind its implementation to the graph.
Solution
Add polylogue-dudtn with the reviewed schema-currency implementation scope and make it a blocking prerequisite of polylogue-9qnzy. The Bead records the seven implementation acceptance criteria and leaves live migration, deployment, and operation receipts in their existing Beads.
Verification
The exported
.beads/issues.jsonlcontains the new Bead and the durable blocking edge. The versioned PR-scope carrier below validates against the exact head and committed Bead snapshot. No product code or production data changes are included.Ref polylogue-dudtn. Context: polylogue-9qnzy.