diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index c539fc18ca..9883890419 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -37,7 +37,7 @@ {"_type":"issue","id":"polylogue-06zm","title":"Backfill job ledger must survive private-profile re-seed","description":"Live incident 2026-07-12: earlyoom killed the agent-private Chrome during memory pressure; the profile restart RE-SEEDED the private profile, erasing the extension IndexedDB backfill job ledgers (#2771 durable-jobs design assumed profile persistence). Authenticated jobs had to be restarted from scratch. The durable job ledger (checkpoints, leases, request budgets, incident records) needs a home that survives profile re-seed: mirror to the loopback receiver/ops.db as source of truth with IndexedDB as cache, or persist the profile dir across re-seeds.","status":"open","priority":1,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-07-12T20:47:43Z","created_by":"Sinity","updated_at":"2026-07-12T20:47:43Z","labels":["area:capture","delivery:B-storage-rebuild-bytes"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-jlme.4","title":"Preserve backfill ledgers across controlled browser recovery","description":"During the 2026-07-12 live backfill, earlyoom killed the private-visible Chrome. MV3 IndexedDB would normally survive a browser restart, but the control-plane private-start helper automatically re-seeded the profile from live Chrome and erased the extension-origin IndexedDB, including the cancelled incident ledger and running checkpoints. Browser recovery must not silently turn a durable backfill ledger into an empty database.","design":"Coordinate with the Sinnix browser control plane so restart and re-seed are separate explicit operations: an existing private profile restart must preserve extension origins by default, while profile replacement requires a stated destructive action and backup/restore of extension-owned backfill state. Add a compact export/checkpoint path (receiver-side or profile backup) sufficient to restore job/control/queue/revision/ACK ledgers without persisting provider credentials. On startup, detect unexpected instance/database loss and surface recovery evidence rather than reporting No jobs yet.","acceptance_criteria":"1. Kill and restart the private browser process without re-seeding; the same running job ID, cursor, queue, revisions, and last ACK recover and continue without duplicate receiver writes. 2. A deliberate profile re-seed either restores the checkpointed ledger or blocks with an explicit destructive warning; it never silently reports an empty job set. 3. No cookies, provider auth headers, account IDs, or page credentials enter the checkpoint. 4. A control-plane smoke exercises restart versus re-seed semantics and a packaged extension smoke proves recovered alarm execution.","notes":"2026-07-13 implementation: extension PR in progress. Scope/AC: real IndexedDB restart retains job/cursor/queue/revision/ACK and recovered alarms; a credential-free checkpoint detects profile loss as browser_profile_recovery_required rather than empty state. Linked polylogue-jlme.4.1 owns required Sinnix restart-vs-destructive-reseed helper semantics.","status":"in_progress","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-12T20:47:00Z","created_by":"Sinity","updated_at":"2026-07-13T01:13:35Z","started_at":"2026-07-13T01:13:35Z","labels":["area:ingest","area:web","delivery:G-live-performance","lane:capture-reliability","spine"],"dependencies":[{"issue_id":"polylogue-jlme.4","depends_on_id":"polylogue-jlme","type":"parent-child","created_at":"2026-07-12T22:46:59Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-jlme.4","depends_on_id":"polylogue-jlme.2","type":"discovered-from","created_at":"2026-07-12T22:47:01Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-jlme.3","title":"Fail visibly on stale browser-capture receiver contracts","description":"Live deployment on 2026-07-12 paired the merged extension with a stale local receiver ACK schema. The receiver accepted and durably wrote every payload (HTTP 202) but omitted content_hash, so the coordinator classified receiver_ack_hash_mismatch as receiver_down and repeatedly retried. The extension must distinguish an unavailable receiver from a reachable but incompatible receiver contract before it burns retries or creates misleading health state.","design":"Add a receiver capability/schema preflight for backfill starts and re-check after service-worker restart. Require the durable ACK fields used by the coordinator, including receiver_request_id and exact-byte content_hash. Missing/incompatible fields pause the provider job with receiver_contract_incompatible and an operator-facing upgrade action; do not consume the ordinary receiver-down retry budget or repost the same accepted capture. Compatible receivers retain exact-byte hash verification and drain persisted envelopes idempotently.","acceptance_criteria":"1. A real-route fixture with HTTP 202 but no content_hash pauses once as receiver_contract_incompatible and makes no repeated provider/receiver calls before operator action. 2. Popup status names the receiver contract problem and upgrade/restart action distinctly from receiver_down. 3. After a compatible receiver is available, explicit resume drains the persisted envelope and records an exact-byte ACK without refetching provider content. 4. Packaged service-worker proof covers the preflight and stale-ACK path.","notes":"2026-07-13 implementation: extension PR in progress. Scope/AC: durable receiver preflight; HTTP 202 without receiver_request_id/content_hash pauses once as receiver_contract_incompatible with no retry consumption or repost; compatible explicit resume drains persisted envelope exactly once. Popup and packaged-worker proof included.","status":"in_progress","priority":1,"issue_type":"bug","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-12T20:46:42Z","created_by":"Sinity","updated_at":"2026-07-13T01:12:58Z","started_at":"2026-07-13T01:12:58Z","labels":["area:ingest","area:web","delivery:G-live-performance","lane:capture-reliability","spine"],"dependencies":[{"issue_id":"polylogue-jlme.3","depends_on_id":"polylogue-jlme","type":"parent-child","created_at":"2026-07-12T22:46:41Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-jlme.3","depends_on_id":"polylogue-jlme.2","type":"discovered-from","created_at":"2026-07-12T22:46:43Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-hg8n","title":"Outside adoption v1: first external user of Polylogue","description":"Nothing currently owns the goal the legibility work serves: one real external person installs Polylogue, runs the first proof, and gets value. Children/related: y8s5 distribution, 67ac measured-result receipts, extension store packaging, install matrix, the README tour. Exit: a cold outsider completes install -\u003e demo receipts -\u003e one query against their own data, evidenced by their session or report, without operator assistance.","design":"Run outside adoption as a two-part path. Install: publish and verify PyPI, Homebrew, and Nix entry points in clean environments. Activation: a cold outsider runs a flagship audit or continuity demo, then applies the same flow to one query over their own archive. D1/D3/D9 are the named show-someone artifacts; polylogue-3tl.16 renders public claims as a view over findings and evidence rather than creating a second ledger. Preserve the session or report as the adoption receipt and feed observed friction back to the owning distribution/demo/documentation Beads.\n\n## Authoritative corrective contract (2026-07-13)\n\nActivation proves both product wedges before the terminal cold-user run. Audit uses the claims view\nplus a minimal verified cold-reader evidence export. Continuity uses D3 prior observed recovery\ncandidates first; D8 actual resume follows once compatibility is mature. New platform work declares\nconsumer_proof, while receipts from already-observed operator flows remain valid internal proof.","acceptance_criteria":"1. Clean-environment receipts exist for the supported PyPI, Homebrew, and Nix install paths. 2. One person outside the project completes install, a flagship demo, and one query over their own data without operator assistance. 3. Their session or report records completion, elapsed effort, and every blocking or confusing step. 4. Public claims shown during the flow resolve through polylogue-3tl.16 to explicit evidence status. 5. Remaining friction is recorded on an owning Bead rather than left only in the adoption report.\n\n## Corrective acceptance criteria (2026-07-13)\n\nBefore the cold-user receipt, the audit slice exports a claim/evidence artifact that a no-context\nreader can verify, and D3 runs on an independent archive with measured precision and honest recovery-\ncandidate naming. The external user installs unaided, completes D3 first, runs one own-data query,\nand can inspect claim support through the verified export. D8 remains the stronger subsequent proof,\nnot a prerequisite for first activation.","notes":"UNBLOCKED 2026-07-13 (rewrite: the first session write did not persist): PyPI 0.2.0 is live, the Homebrew tap is live, and the Nix flake exists, so the install half is done. Activation content is named: flagship demos rxdo.10.1-.3, with polylogue-3tl.16 as a claims-ledger view over findings. Remaining epic scope: choose the first external-user candidate and run the full loop. The external review's two-wedge framing is audit ('what supports this claim?') plus continuity ('have I resolved this before?'); new platform investment should strengthen one of those wedges.","status":"open","priority":1,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-12T20:34:06Z","created_by":"Sinity","updated_at":"2026-07-13T05:46:01Z","metadata":{"consumer_proof":"external-audit,external-continuity"},"labels":["area:legibility","delivery:L-external-legibility","horizon:frontier","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-3tl.16","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-67ac","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-bby.15","type":"related","created_at":"2026-07-13T07:48:48Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-rxdo.10","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-rxdo.10.2","type":"related","created_at":"2026-07-13T07:48:40Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-y8s5","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-hg8n","title":"Outside adoption v1: first external user of Polylogue","description":"Nothing currently owns the goal the legibility work serves: one real external person installs Polylogue, runs the first proof, and gets value. Children/related: y8s5 distribution, 67ac measured-result receipts, extension store packaging, install matrix, the README tour. Exit: a cold outsider completes install -\u003e demo receipts -\u003e one query against their own data, evidenced by their session or report, without operator assistance.","design":"Run outside adoption as a two-part path. Install: publish and verify PyPI, Homebrew, and Nix entry points in clean environments. Activation: a cold outsider runs a flagship audit or continuity demo, then applies the same flow to one query over their own archive. AI-D1/AI-D3/AI-D9 are the named show-someone artifacts; polylogue-3tl.16 renders public claims as a view over findings and evidence rather than creating a second ledger. Preserve the session or report as the adoption receipt and feed observed friction back to the owning distribution/demo/documentation Beads.\n\n## Authoritative corrective contract (2026-07-13)\n\nActivation proves both product wedges before the terminal cold-user run. Audit uses the claims view\nplus a minimal verified cold-reader evidence export. Continuity uses AI-D3 prior observed recovery\ncandidates first; PF-D8 actual resume follows once compatibility is mature. New platform work declares\nconsumer_proof, while receipts from already-observed operator flows remain valid internal proof.","acceptance_criteria":"1. Clean-environment receipts exist for the supported PyPI, Homebrew, and Nix install paths. 2. One person outside the project completes install, a flagship demo, and one query over their own data without operator assistance. 3. Their session or report records completion, elapsed effort, and every blocking or confusing step. 4. Public claims shown during the flow resolve through polylogue-3tl.16 to explicit evidence status. 5. Remaining friction is recorded on an owning Bead rather than left only in the adoption report.\n\n## Corrective acceptance criteria (2026-07-13)\n\nBefore the cold-user receipt, the audit slice exports a claim/evidence artifact that a no-context\nreader can verify, and AI-D3 runs on an independent archive with measured precision and honest recovery-\ncandidate naming. The external user installs unaided, completes AI-D3 first, runs one own-data query,\nand can inspect claim support through the verified export. PF-D8 remains the stronger subsequent proof,\nnot a prerequisite for first activation.","notes":"UNBLOCKED 2026-07-13 (rewrite: the first session write did not persist): PyPI 0.2.0 is live, the Homebrew tap is live, and the Nix flake exists, so the install half is done. Activation content is named: flagship demos rxdo.10.1-.3, with polylogue-3tl.16 as a claims-ledger view over findings. Remaining epic scope: choose the first external-user candidate and run the full loop. The external review's two-wedge framing is audit ('what supports this claim?') plus continuity ('have I resolved this before?'); new platform investment should strengthen one of those wedges.","status":"open","priority":1,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-12T20:34:06Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","metadata":{"consumer_proof":"external-audit,external-continuity"},"labels":["area:legibility","delivery:L-external-legibility","horizon:frontier","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-3tl.16","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-67ac","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-bby.15","type":"related","created_at":"2026-07-13T07:48:48Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-rxdo.10","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-rxdo.10.2","type":"related","created_at":"2026-07-13T07:48:40Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hg8n","depends_on_id":"polylogue-y8s5","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-bj5h","title":"Selection -\u003e assertion write flow with exact-message evidence ref","description":"Selection-triggered pill (Medium/Hypothesis pattern) -\u003e minimal editor: kind note/claim/correction, body prefilled, evidence ref auto-attached to exact message. Lands as candidate assertion; judgment gate unchanged. Depends on agent-write role path (27p).","status":"open","priority":1,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-12T20:23:52Z","created_by":"Sinity","updated_at":"2026-07-12T20:23:52Z","labels":["area:capture","delivery:L-external-legibility"],"dependencies":[{"issue_id":"polylogue-bj5h","depends_on_id":"polylogue-yyvg","type":"parent-child","created_at":"2026-07-12T22:24:01Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-wvji","title":"In-page Layer 2: corner chip + slide-over deep-dive","description":"Fixed corner chip (Alt+P, zero layout shift) -\u003e 360px slide-over: capture state, session cost, top-K relevant judged assertions, canonical archive link. Boundary rule: per-message state blends (Layer 1); cross-conversation intelligence floats (this).","status":"open","priority":1,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-12T20:23:51Z","created_by":"Sinity","updated_at":"2026-07-12T20:23:51Z","labels":["area:capture","delivery:L-external-legibility"],"dependencies":[{"issue_id":"polylogue-wvji","depends_on_id":"polylogue-yyvg","type":"parent-child","created_at":"2026-07-12T22:24:00Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-ys30","title":"In-page Layer 1: blended per-message capture dot + save action","description":"Shadow-DOM content script extends each host's existing per-message action row: capture-status dot + save-to-Polylogue action, matched to ~30px ghost icon size/style. Reads as native, zero layout shift. ChatGPT + Claude.ai first.","status":"open","priority":1,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-12T20:23:49Z","created_by":"Sinity","updated_at":"2026-07-12T20:23:49Z","labels":["area:capture","delivery:L-external-legibility"],"dependencies":[{"issue_id":"polylogue-ys30","depends_on_id":"polylogue-yyvg","type":"parent-child","created_at":"2026-07-12T22:23:59Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -82,7 +82,7 @@ {"_type":"issue","id":"polylogue-y8s5","title":"Cut first tagged release (v0.1.0) to unblock PyPI/Homebrew/GHCR smoke lanes","description":"polylogue-3tl.7 audit: release.yml (PyPI), homebrew-bump.yml, and the tag-push half of container.yml (GHCR) are all fully built and gated on a version tag that has never been pushed -- git tag -l and gh release list are both empty, pyproject.toml is still 0.1.0. This is the actual blocking dependency for 3/4 of 3tl.7s install matrix, not something to discover silently mid-implementation of that bead. This is a release-cut DECISION, not purely mechanical -- flag for operator confirmation before executing.","design":"Once approved: tag and push a v0.1.0 (or appropriate initial version) release, letting the already-built release.yml/homebrew-bump.yml/container.yml workflows fire for the first time; verify each lane actually succeeds end to end.","acceptance_criteria":"A real tagged release exists; PyPI/Homebrew/GHCR-tagged artifacts are published and smoke-tested at least once.","notes":"PR #2779 merged: guarded recovery/publish/smoke routes shipped — built-wheel + pipx, generated Homebrew formula install/test, published slim/distroless GHCR runtime checks, installed-wheel CI compares VERSION_INFO.commit to the exact 40-char checkout revision. DEFERRED (not closing): actual PyPI/Homebrew/GHCR artifact publication + smoke test still requires operator-owned PyPI Trusted Publishing setup, Homebrew tap token/PR merge, and a real GHCR dispatch run — none of that has executed yet.\nPYPI PUBLICATION DONE 2026-07-13: polylogue 0.2.0 live at https://pypi.org/project/polylogue/0.2.0/ (built from tag v0.2.0, twine upload with operator token; clean-venv smoke: 'polylogue, version 0.2.0+2f220e9b' — full revision per 6rvt). Token in ~/.pypirc (NOT reboot-durable; agenix follow-up if CI publishing wanted). REMAINING: GHCR push + Homebrew tap (no Homebrew registration exists — path is a Sinity/homebrew-polylogue tap repo with a formula; distribution lane owns formula work).\nHOMEBREW TAP LIVE 2026-07-13: https://github.com/Sinity/homebrew-polylogue — formula pins PyPI 0.2.0 sdist (sha256 e16cd4c9...), venv install, polylogue+polylogued symlinked. Install: brew tap sinity/polylogue \u0026\u0026 brew install polylogue. Untested on real macOS (no Mac available) — first macOS user report or a macos GitHub-Actions runner (post-billing-unlock, ref polylogue-of39) should validate; README says so honestly. Distribution status now: PyPI live, Homebrew tap live, Nix flake in-repo, GHCR container remaining (Containerfile exists; local podman push possible without Actions).","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T19:47:03Z","created_by":"Sinity","updated_at":"2026-07-13T00:44:42Z","labels":["area:release","discovered-from:polylogue-3tl.7"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-v7e0","title":"Blob GC lease-safety mechanism is dead code: no ingest caller populates blob-lease payload keys","description":"polylogue-9e5.4 race audit (docs/audits/2026-07-09-race-window-audit.md, table rows 1a/1b/2) found that GC safety invariant #2 (\"never delete a blob with an active lease\", polylogue/storage/blob_gc.py:11) never actually engages in production. commit_archive_write_effects (polylogue/archive/write_effects.py:72) only acquires a lease when has_lease = bool(blob_hashes and operation_id) is True, which requires the caller's payload to include _blob_hashes/_operation_id. A repo-wide grep confirms zero production callers set either key: the sole real caller, _commit_sync_ingest_side_effects (polylogue/pipeline/services/ingest_batch/_core.py:1015-1030), builds a payload with only _connection/changed_session_ids/repair_message_fts. acquire_blob_leases/release_operation_leases (polylogue/storage/blob_gc.py) are otherwise referenced only from blob_gc.py itself and from tests/unit/storage/test_blob_gc_lease_recovery.py, which exercises commit_archive_write_effects directly with a synthetic payload -- it proves the mechanism works IF invoked, not that anything invokes it. WriteOperation.BLOB_STORE is declared (write_gateway.py:30) and never constructed anywhere.","design":"Repro sketch (two-connection, no fix applied): (1) connection A writes a blob file to polylogue's content-addressed blob store (BlobStore.write_from_bytes) and, following the real ingest path, calls ArchiveWriteGateway(db_path).commit_write_sync(WriteOperation.INGEST, {\"_connection\": conn, \"changed_session_ids\": (...), \"repair_message_fts\": True}) -- note: no _blob_hashes/_operation_id, matching production. (2) Because has_lease is False, no row is ever inserted into pending_blob_refs for that blob_hash. (3) connection B (a concurrent polylogue maintenance blob-gc --yes run, cli/commands/maintenance.py:1790) calls run_blob_gc_report; once the blob file is older than MIN_AGE_S=60s (and past the previous gc_generations completion timestamp), _has_active_lease(conn, blob_hash) returns False (pending_blob_refs is empty) and _still_referenced also returns False if step (1)'s row insert into raw_sessions/blob_refs has not yet committed (e.g. a slow multi-GiB streaming parse per CLAUDE.md). GC deletes the blob file. (4) connection A's ingest later commits the row referencing the now-deleted blob_hash -- a dangling reference with no on-disk bytes. Fix direction (not implemented here): wire _blob_hashes/_operation_id through from the real ingest-batch payload (or remove the dead lease code + docs/internals.md \"GC concurrency model\" claim and rely solely on a documented, sized MIN_AGE_S heuristic).","acceptance_criteria":"Either (a) wire real blob_hashes/operation_id through from the ingest-batch payload so acquire_blob_leases/release_operation_leases actually run around every ingest that writes new blobs, closing GC invariant #2, or (b) remove the dead lease code path and pending_blob_refs table and update docs/internals.md's GC concurrency model section to document MIN_AGE_S as the sole defense with an explicit safety-margin justification. Verify: a regression test proves a lease row exists in pending_blob_refs during a real (non-synthetic) ingest-batch write, or the removal is confirmed by grep showing no remaining references.","status":"closed","priority":1,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T07:16:32Z","created_by":"Sinity","updated_at":"2026-07-09T10:04:55Z","closed_at":"2026-07-09T10:04:55Z","close_reason":"Chose path (b) -- removed the dead lease mechanism entirely rather than wiring it up. Investigated path (a) first: blob hashes ARE trivially available at the ingest-batch commit call site, but tracing actual timing semantics showed a lease acquired there (right before conn.commit()) would cover only the last few milliseconds before the row becomes visible anyway -- NOT the real exposure window (blob-write-to-disk -\u003e row-commit), which for a long streaming parse could span the whole batch. A correct per-write-time lease would need acquiring at each write_from_bytes call site across acquisition_records.py/source_acquisition_components.py/write.py, spanning daemon batching/quiet-window deferral -- genuine architectural surgery, not a plumbing fix. Given the actual exposure is narrow (needs a \u003e60s single ingest AND a manually-triggered concurrent blob-gc), removed the mechanism and documented MIN_AGE_S honestly as the sole defense with an explicit safety-margin justification.\n\nRemoved: acquire_blob_leases/release_operation_leases/sweep_orphaned_blob_leases/_has_active_lease/ORPHAN_LEASE_MAX_AGE_S (blob_gc.py), the has_lease branch in commit_archive_write_effects (write_effects.py), WriteOperation.BLOB_STORE (write_gateway.py), the daemon-startup lease sweep (daemon/cli.py), Prometheus blob-lease gauges (daemon/metrics.py), the blob_lease_state workload-probe section, and the pending-lease classifier in blob_integrity.py. Dropped pending_blob_refs via additive migration source schema v2-\u003ev3 (003_drop_pending_blob_refs.sql).\n\nDESTRUCTIVE DURABLE-TIER CHANGE -- per this repos own schema-regime policy, presented this specific migration to the operator for explicit consent before merging (distinct from the auto-merge authorization used for every other PR this session). Independently re-verified the safety claim myself: repo-wide grep confirms zero writers of _blob_hashes/_operation_id/pending_blob_refs existed anywhere in the write path BEFORE this change (the table was provably always empty in every real deployment), so the drop causes no actual data loss. Operator reviewed and explicitly approved the merge.\n\nAlso caught and fixed one overclaim in the agents own doc rewrite: it had written \"consented via polylogue-v7e0s own acceptance criteria\" as if a bead AC constitutes operator consent -- corrected to state the concrete safety fact (zero writers) instead, since a bead written by an agent during audit dispatch is not the same as genuine informed operator sign-off.\n\nVerification: mypy --strict clean on all 12 touched production files; devtools test across 5 affected test files (test_blob_gc_generation_gate, test_blob_repair, test_blob_store_contracts, test_blob_integrity, test_durable_migrations) -- 43 passed, including a new migration test proving the drop removes a POPULATED table (real proof, not a no-op-against-empty-fixture); devtools render all --check clean; devtools lab policy schema-versioning clean (0 invalid durable migration resources); devtools lab policy docs-drift clean; confirmed no new polylogue/ module added (no topology regen needed).","labels":["area:audit","area:storage"],"dependencies":[{"issue_id":"polylogue-v7e0","depends_on_id":"polylogue-9e5.4","type":"discovered-from","created_at":"2026-07-09T09:16:38Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-g8km","title":"Register the delegation query unit and bounded evidence card","description":"Expose the corrected delegation-attempt relation through the shared DSL and read surfaces. This bead owns queryability and a bounded evidence card only. The prior yield/success aggregate was construct-invalid because a non-error dispatch result does not establish child completion, utility, or parent use; it is removed from scope.","design":"Follow the existing action query-unit path through query metadata, repository rows, CLI, MCP, Python, rendered schemas, and contracts. Default rows contain stable refs, typed attempt/mapping/outcome fields, hashes, short previews, evidence basis, and truncation markers. An explicit delegation-card projection retrieves the complete instruction, bounded parent context before dispatch, requested/observed routing, child result or excerpt, bounded parent follow-up, annotations, structural outcomes, and evidence refs. It must not dump arbitrary tool payloads in ordinary list queries.","acceptance_criteria":"Delegations can be filtered, grouped, counted, and read through CLI, MCP, and Python with parity. The seeded demo dispatch resolves parent, child, instruction preview/hash, evidence basis, and mapping state correctly. The card exposes complete instruction and bounded context/result/follow-up with truncation markers and refs. Edge-only and unresolved attempts remain queryable without fabricated instruction or success. No yield/success/used-result measure ships in this bead. Rendered schemas/contracts and focused end-to-end tests are current.","notes":"2026-07-10 construct-validity audit: current generic action/block terminal rows omit tool_input, and current runs output can substitute the owning session title for session_runs.title even when the run title holds the dispatch instruction. The bounded delegation card must retrieve the exact instruction from attempt evidence and name run_title versus session_title explicitly; ordinary list rows remain preview/hash only.\n2026-07-12 takeover: implementing the registered delegations query unit and bounded evidence-card projection on top of the corrected action-spined relation from PR #2739. Scope excludes success/yield/used-result measures and keeps ordinary rows preview/hash-only.\n2026-07-12 implementation evidence:\\n- AC: CLI, MCP, and Python all route the registered delegation query unit through the shared query envelope; filtering/group/count/read parity is covered.\\n- AC: the seeded demo resolves demo-lineage-parent -\u003e demo-lineage-subagent with exact instruction preview/SHA-256, resolved mapping, and action+session-link evidence basis.\\n- AC: delegation-card returns complete instruction; separately named session/run titles; bounded parent context, dispatch result, actual child excerpt, parent follow-up, per-window truncation/count markers, annotations, and typed evidence refs.\\n- AC: edge-only/unresolved cases remain queryable without fabricated instruction; empty/invalid task payloads do not synthesize hashes. No yield/success/used-result measure ships.\\n- Verification: focused delegation query/card surface batch 48 passed, 415 deselected (52.47s); broader touched-route batch 454 passed with one deterministic inherited raw-artifact contract failure tracked as polylogue-2kvn; devtools verify --quick run 20260712T105010Z-quick-1298874-28cfd287 passed all 15 gates; independent adversarial review CLEAN with production-route seeded-demo and selector reruns.\\n- Fresh-worktree testmon seed attempted as required but the baseline suite was terminated by its 600s no-progress supervisor at 98% after broad unrelated failures; no valid affected selection was produced.","status":"closed","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T04:12:30Z","created_by":"Sinity","updated_at":"2026-07-12T11:17:00Z","started_at":"2026-07-12T10:08:10Z","closed_at":"2026-07-12T11:17:00Z","close_reason":"Implemented and independently verified in PR #2759: registered delegation query parity across Python, CLI, and MCP; bounded evidence card; honest unresolved/edge-only semantics; generated contracts; no yield/success/used-result measure. Focused production routes 48 passed, PR surface batch 437 passed with inherited polylogue-2kvn failure, and all 15 quick gates passed.","labels":["area:analytics","area:delegations","area:query-dsl","delivery:C-read-evidence-contract","horizon:frontier","lane:read-contracts"],"dependencies":[{"issue_id":"polylogue-g8km","depends_on_id":"polylogue-1vpm.1","type":"discovered-from","created_at":"2026-07-09T06:12:30Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-g8km","depends_on_id":"polylogue-y964","type":"blocks","created_at":"2026-07-10T10:10:33Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0} -{"_type":"issue","id":"polylogue-70qb","title":"Bare 'find sessions where \u003cpredicate\u003e' ignores the boolean predicate, returns unfiltered list","description":"Discovered 2026-07-09 while authoring polylogue-212.4 (D4 behavioral archaeology demo). `polylogue find 'sessions where seq(action:shell -\u003e action:shell)'` (no `then` verb) returns mode=list, total=11 (all sessions in the fixture) -- but `polylogue find 'sessions where seq(action:shell -\u003e action:shell)' then select --json` correctly returns only the 2 matching sessions. The SAME defect reproduces with an ordinary non-SEQ predicate: bare `find 'sessions where origin:codex-session'` also returns total=11 (unfiltered), while the equivalent COMPACT form `find 'origin:codex-session'` (no \"sessions where\" prefix) correctly returns total=5. So this is not SEQ-specific: the explicit boolean-query entry form (\"sessions where \u003cpredicate\u003e\") appears to be silently ignored specifically when `find` is invoked bare (no trailing `then \u003cverb\u003e`), while the compact query form and any `then`-verb invocation both apply the predicate correctly.","design":"Likely in the query dispatch/CLI layer that decides how to render a bare `find` result (cli/query_group.py or archive/query/expression.py entry-point handling) -- probably a code path that, for the \"boolean\" entry form specifically, defaults to a plain unfiltered session listing instead of executing the compiled predicate, when there is no subsequent `then` action forcing full execution. Compare the \"boolean\" vs \"compact\" entry-point handling in the query dispatch layer; the compact form clearly executes correctly (verified: origin:codex-session compact -\u003e total 5), so the bug is specific to the explicit `sessions where` prefix path in bare-find (list) mode. Reproduction is exact and cheap: `polylogue find \"sessions where origin:codex-session\"` (wrong, shows all) vs `polylogue find \"origin:codex-session\"` (right, filters) vs `polylogue find \"sessions where origin:codex-session\" then select --json` (right, filters) -- three one-line CLI invocations against any archive.","acceptance_criteria":"Bare `find \"sessions where \u003cpredicate\u003e\"` (no then-verb) returns the SAME filtered total as both the compact form and `then select` for the identical predicate. A regression test pins this equivalence for at least one field predicate and one seq() predicate. Verify: the three reproduction commands above agree on session count.","notes":"[Escalation 2026-07-09, verified independently against live prod archive] The bug is broader than originally diagnosed. Fresh test: `polylogue find \"sessions where origin:codex-session\" then analyze --count` returns 17082 (the full unfiltered archive total) -- NOT just bare find without a then-verb. `then select --json` DOES correctly filter (confirmed: 20 rows returned, not 17082) but `then analyze --count` does not. So the defect is not \"bare find vs any then-verb\" as originally scoped -- it is specific to which downstream verb/projection actually forces full predicate execution vs falls back to an unfiltered listing. analyze --count is broken; select --json is not. Needs re-scoping to cover the analyze path specifically, likely a different code path than the bare-find dispatch originally suspected.\nFix pushed in PR #2626 (branch feature/fix/prod-smoke-test-query-bugs). Root cause confirmed exactly as escalation note described: polylogue/cli/archive_query.py built filter_kwargs['boolean_predicate'] but never forwarded it to the count_search_sessions/count_sessions call sites, even though both methods already accept+apply it. Fix: pass boolean_predicate=filter_kwargs.get('boolean_predicate') at both call sites. Verified live: 'sessions where origin:codex-session' then analyze --count now returns 2607 (matching compact form), not 17082/17083. Regression test added. Awaiting merge.","status":"closed","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T00:27:55Z","created_by":"Sinity","updated_at":"2026-07-09T23:35:03Z","closed_at":"2026-07-09T23:35:03Z","close_reason":"Fixed and merged in PR #2626. Root cause: polylogue/cli/archive_query.py built filter_kwargs['boolean_predicate'] but never forwarded it to count_search_sessions/count_sessions call sites. Fixed by passing it through. Verified live (2607 correct vs 17082 unfiltered) and via regression test.","labels":["area:cli","area:query","bug"],"dependencies":[{"issue_id":"polylogue-70qb","depends_on_id":"polylogue-212.4","type":"discovered-from","created_at":"2026-07-09T02:27:54Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-70qb","title":"Bare 'find sessions where \u003cpredicate\u003e' ignores the boolean predicate, returns unfiltered list","description":"Discovered 2026-07-09 while authoring polylogue-212.4 (PF-D4 behavioral archaeology demo). `polylogue find 'sessions where seq(action:shell -\u003e action:shell)'` (no `then` verb) returns mode=list, total=11 (all sessions in the fixture) -- but `polylogue find 'sessions where seq(action:shell -\u003e action:shell)' then select --json` correctly returns only the 2 matching sessions. The SAME defect reproduces with an ordinary non-SEQ predicate: bare `find 'sessions where origin:codex-session'` also returns total=11 (unfiltered), while the equivalent COMPACT form `find 'origin:codex-session'` (no \"sessions where\" prefix) correctly returns total=5. So this is not SEQ-specific: the explicit boolean-query entry form (\"sessions where \u003cpredicate\u003e\") appears to be silently ignored specifically when `find` is invoked bare (no trailing `then \u003cverb\u003e`), while the compact query form and any `then`-verb invocation both apply the predicate correctly.","design":"Likely in the query dispatch/CLI layer that decides how to render a bare `find` result (cli/query_group.py or archive/query/expression.py entry-point handling) -- probably a code path that, for the \"boolean\" entry form specifically, defaults to a plain unfiltered session listing instead of executing the compiled predicate, when there is no subsequent `then` action forcing full execution. Compare the \"boolean\" vs \"compact\" entry-point handling in the query dispatch layer; the compact form clearly executes correctly (verified: origin:codex-session compact -\u003e total 5), so the bug is specific to the explicit `sessions where` prefix path in bare-find (list) mode. Reproduction is exact and cheap: `polylogue find \"sessions where origin:codex-session\"` (wrong, shows all) vs `polylogue find \"origin:codex-session\"` (right, filters) vs `polylogue find \"sessions where origin:codex-session\" then select --json` (right, filters) -- three one-line CLI invocations against any archive.","acceptance_criteria":"Bare `find \"sessions where \u003cpredicate\u003e\"` (no then-verb) returns the SAME filtered total as both the compact form and `then select` for the identical predicate. A regression test pins this equivalence for at least one field predicate and one seq() predicate. Verify: the three reproduction commands above agree on session count.","notes":"[Escalation 2026-07-09, verified independently against live prod archive] The bug is broader than originally diagnosed. Fresh test: `polylogue find \"sessions where origin:codex-session\" then analyze --count` returns 17082 (the full unfiltered archive total) -- NOT just bare find without a then-verb. `then select --json` DOES correctly filter (confirmed: 20 rows returned, not 17082) but `then analyze --count` does not. So the defect is not \"bare find vs any then-verb\" as originally scoped -- it is specific to which downstream verb/projection actually forces full predicate execution vs falls back to an unfiltered listing. analyze --count is broken; select --json is not. Needs re-scoping to cover the analyze path specifically, likely a different code path than the bare-find dispatch originally suspected.\nFix pushed in PR #2626 (branch feature/fix/prod-smoke-test-query-bugs). Root cause confirmed exactly as escalation note described: polylogue/cli/archive_query.py built filter_kwargs['boolean_predicate'] but never forwarded it to the count_search_sessions/count_sessions call sites, even though both methods already accept+apply it. Fix: pass boolean_predicate=filter_kwargs.get('boolean_predicate') at both call sites. Verified live: 'sessions where origin:codex-session' then analyze --count now returns 2607 (matching compact form), not 17082/17083. Regression test added. Awaiting merge.","status":"closed","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T00:27:55Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","closed_at":"2026-07-09T23:35:03Z","close_reason":"Fixed and merged in PR #2626. Root cause: polylogue/cli/archive_query.py built filter_kwargs['boolean_predicate'] but never forwarded it to count_search_sessions/count_sessions call sites. Fixed by passing it through. Verified live (2607 correct vs 17082 unfiltered) and via regression test.","labels":["area:cli","area:query","bug"],"dependencies":[{"issue_id":"polylogue-70qb","depends_on_id":"polylogue-212.4","type":"discovered-from","created_at":"2026-07-09T02:27:54Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-rvtu","title":"usage_timeline silently drops timeless-session cost/usage data forever","description":"Discovered in the polylogue-srjq sort_key_ms audit (.agent/reports/sort-key-ms-coalesce-audit-2026-07-08.md): polylogue/storage/sqlite/archive_tiers/archive.py usage_timeline base filter (line 1780) is `WHERE COALESCE(e.occurred_at_ms, s.sort_key_ms, 0) \u003e 0`, unconditionally excluding any usage/cost event whose session AND event both lack a timestamp from EVERY bucket in the mcp__polylogue__usage_timeline / cost_rollups aggregation -- not just from a since/until-filtered window. Real token/cost usage from a timeless session silently vanishes from every monthly rollup forever, understating actual spend with no visible signal that data was dropped. This is more severe than the ordering/windowing bugs elsewhere in the audit since it is unconditional, not just under a since/until filter.","acceptance_criteria":"Timeless-session usage/cost events are counted somewhere in usage_timeline/cost_rollups output (e.g. an explicit \"unknown time\" bucket, or included in an always-visible aggregate) rather than silently dropped by the base filter. Regression test seeding a usage event on a session with NULL occurred_at_ms and NULL sort_key_ms, proving its cost/token counts are NOT missing from the aggregated totals. Verify: devtools test -k usage_timeline.","notes":"[2026-07-08] Follow-up fix (landed in the z29t PR due to rebase timing, not a separate bead): this beads own cost_rows/event_rows f-string SQL introduced two new interpolation sites (event_where/cost_where_clause local variables) that tests/unit/storage/test_no_string_interpolated_sql.py flagged as unaudited once actually run against this beads changes -- devtools verify --quick does not run pytest, so this was not caught before rvtu merged. Root cause: the AST-based audit trusts an exact bare-name allowlist (where, where_clause, clause, ...) for interpolated identifiers, and my chosen variable names (event_where, cost_where_clause) were not exact matches. Fixed by renaming both local variables to the already-trusted where_clause. No behavior change, pure identifier rename. Caught while rebasing polylogue-z29t onto post-rvtu master and running the full test file, which devtools verify --quick would not have caught either.","status":"closed","priority":1,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-07-08T16:05:56Z","created_by":"Sinity","updated_at":"2026-07-08T17:18:20Z","closed_at":"2026-07-08T16:53:28Z","close_reason":"Fixed both silent-drop sites in list_usage_timeline_insights (polylogue/storage/sqlite/archive_tiers/archive.py): the event-scan base filter (was \"COALESCE(e.occurred_at_ms, s.sort_key_ms, 0) \u003e 0\") and the cost-scan base filter (was \"s.sort_key_ms \u003e 0\") both unconditionally excluded any session/event with neither a reliable event timestamp nor a session sort_key_ms -- not just under a since/until window, matching the more severe half of the audit finding. Removed both exclusion filters and replaced the bucket-computation strftime() calls with a CASE expression: a row with a genuine timestamp buckets normally (YYYY-MM), a row with none routes to an explicit \"unknown\" bucket instead of vanishing. since/until windowing behavior (s.sort_key_ms \u003e= ?/\u003c= ?) is intentionally left unchanged -- that is the separate, less-severe windowing pattern the sibling z29t/s5mm/2seq beads address; this bead was scoped to the unconditional/unwindowed drop specifically.\n\n3 new regression tests (tests/unit/storage/test_usage_timeline.py) seeding a session with NULL updated_at_ms/created_at_ms (so the generated sort_key_ms column is NULL) plus a usage event/cost row with NULL occurred_at_ms: both event-count and cost-dollar paths now land in an \"unknown\" bucket instead of disappearing, and a sanity check confirms ordinary timestamped sessions still bucket normally (unchanged behavior).\n\nVerify: devtools test tests/unit/storage/test_usage_timeline.py tests/unit/api/test_facade_contracts.py -k usage_timeline tests/unit/cli/test_insights.py tests/unit/mcp/test_envelope_contracts.py tests/unit/mcp/test_tool_discovery.py -k usage (all passed); devtools verify --quick green.","dependencies":[{"issue_id":"polylogue-rvtu","depends_on_id":"polylogue-srjq","type":"discovered-from","created_at":"2026-07-08T18:06:33Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-z29t","title":"Fix epoch-fallback in CLI query-unit ordering + central time-predicate generator","description":"Discovered in the polylogue-srjq sort_key_ms audit (.agent/reports/sort-key-ms-coalesce-audit-2026-07-08.md): the highest-priority BUG cluster. polylogue/storage/sqlite/archive_tiers/archive.py `_query_unit_time_expression` (lines 7139-7148, message and action/block branches) generates the WHERE-boundary subquery for the public `query` CLI/MCP `time\u003e=`/`time\u003c=`/`time\u003e`/`time\u003c` field predicate, consumed by `_time_predicate_clause`. It coalesces to literal 0 when a message/action/block has no occurred_at_ms or session sort_key_ms, so ANY user-typed time-range filter silently mishandles timeless rows: time\u003e=X excludes them, time\u003c=X includes them, regardless of true (unknown) recency. The same epoch-fallback pattern also drives sort=time ORDER BY + LIMIT/OFFSET pagination in query_messages (4914,4916), query_actions (5163,5166), query_session_actions (5247), query_session_action_occurrences (5307), query_files/query_session_files MIN/MAX first_seen_ms/last_seen_ms aggregation (5360,5361,5437,5438), query_blocks (5542,5544), and get_session_tree (1102).","acceptance_criteria":"The central time-predicate generator (_query_unit_time_expression / _time_predicate_clause) and every sort=time ORDER BY site no longer silently pin a timeless row to epoch: a time\u003e=/time\u003c= filter must not silently exclude/include a timeless row purely due to the fallback, and sort=time ordering must not collide a genuinely-timeless row with a real 1970 timestamp. Regression test per site proving a timeless message/action/block/file is not silently dropped by a time\u003e= filter and does not collapse into real-epoch-timestamp rows for sort=time ordering. Verify: devtools test -k \"query_unit_time or query_messages or query_actions or query_blocks or query_files or session_tree\".","status":"closed","priority":1,"issue_type":"bug","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-08T16:05:16Z","created_by":"Sinity","updated_at":"2026-07-08T17:12:08Z","started_at":"2026-07-08T17:11:49Z","closed_at":"2026-07-08T17:12:08Z","close_reason":"Fixed the highest-priority BUG cluster from the sort_key_ms audit: every epoch-fallback COALESCE(...) in polylogue/storage/sqlite/archive_tiers/archive.py backing the query CLI unit engine had its trailing \", 0\" removed, letting a timeless row (no reliable timestamp anywhere in its COALESCE chain) resolve to NULL instead of epoch:\n\n- _query_unit_time_expression (message/action/block/file/assertion branches) + _time_predicate_clause: the central generator behind every user-typed time\u003e=/time\u003c=/time\u003e/time\u003c CLI/MCP filter. Comparisons are now wrapped \"(expression IS NULL OR expression \u003cop\u003e ?)\" -- an unknown time is no longer treated as proof a row falls outside the requested window; before, epoch-0 always failed \u003e/\u003e= (silent exclusion) and always passed \u003c/\u003c= (silent false-inclusion as \"old\").\n- query_messages, query_actions, query_session_actions, query_session_action_occurrences, query_blocks: sort=time ORDER BY (and the default tie-break ordering) now lets NULL flow naturally -- SQLite sorts NULL last in DESC / first in ASC, so a timeless row is grouped distinctly instead of colliding with genuine 1970 data.\n- query_files / query_session_files: the MIN/MAX(COALESCE(...)) aggregation feeding first_seen_ms/last_seen_ms no longer synthesizes epoch when every underlying timestamp is NULL -- these fields (and the \"file\" units time predicate, which reads first_seen_ms directly) can now be genuinely None.\n- get_session_tree: the sibling-ordering COALESCE also lost its epoch fallback.\n\nFixed a stale-then-un-stale _AUDITED_SITES line-number churn in tests/unit/storage/test_no_string_interpolated_sql.py caused by ruff reformatting the edited f-string SQL blocks (net no line-count change once formatting settled).\n\n4 new regression tests (tests/unit/storage/test_query_unit_time_expression.py), each seeding a genuinely timeless session (no created_at_ms/updated_at_ms so sort_key_ms is NULL) alongside a normally-timestamped one: (1) a time filter with every operator (\u003e,\u003e=,\u003c,\u003c=) still includes the timeless message: (2) sort=time ordering in both directions includes both rows without crashing, with the timeless row landing at the expected NULL-ordering position; (3) get_session_tree includes a timeless sibling without collapsing it onto a real session; (4) query_files reports first_seen_ms/last_seen_ms as None (not 0) for a timeless file.\n\nScope note: work-event/phase insight windowing (list_session_work_event_insights/list_session_phase_insights) and public search ranking/since-filter (query_builders.py/runtime.py/attachment_records.py) are separate, already-filed sibling beads (2seq, s5mm) -- not touched here, matching the audits phase split.\n\nVerify: devtools test tests/unit/storage/test_query_unit_time_expression.py tests/unit/storage/test_no_string_interpolated_sql.py tests/unit/storage/test_tree_laws.py tests/unit/storage/test_archive_tiers_archive.py tests/unit/cli/test_query_support_runtime.py (32 passed); devtools test tests/unit/cli/test_query_expression.py -k \"message or action or block or file or session_tree\" (88 passed); devtools verify --quick green. Rebased onto master after polylogue-rvtu merged (#2575) -- clean auto-merge on archive.py, no line overlap.","dependencies":[{"issue_id":"polylogue-z29t","depends_on_id":"polylogue-srjq","type":"discovered-from","created_at":"2026-07-08T18:06:31Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-srjq","title":"sort_key_ms COALESCE audit: classify every ordering/window path (fixed/safe/synthetic)","description":"Split from polylogue-cpf.6 (the clock-seam half of that bead is done separately, PR pending). 66 COALESCE(...sort_key_ms...) occurrences across 9 files (storage/insights/session/status.py, rebuild.py; storage/repair.py; storage/search/query_builders.py, runtime.py; storage/sqlite/queries/attachment_records.py, session_insight_timeline_reads.py; storage/sqlite/archive_tiers/archive.py; daemon/convergence_stages.py) need a per-site classification: does the COALESCE-to-0/epoch fallback silently pin a timeless session to 1970 in an ORDERING or WINDOW context (bug -- needs explicit synthetic time_confidence), is it SAFE (the fallback value is never observable in ordering, e.g. a non-ordering aggregate), or is it an intentionally-synthetic placeholder that already carries honest provenance elsewhere. Timeless sessions must appear with time_confidence=synthetic instead of vanishing from time-windowed queries or silently sorting to the epoch.","design":"Full classification audit complete: .agent/reports/sort-key-ms-coalesce-audit-2026-07-08.md (68 sites, 9 files, method + evidence-backed verdict per site). 26 BUG sites confirmed across query_builders.py, runtime.py, attachment_records.py, and archive.py (public search ranking/since-filter, CLI query-unit ordering + the central _query_unit_time_expression time-predicate generator, work-event/phase insight windowing, usage_timeline silent-drop). 33 SAFE (self-cancelling drift checks, hot-window gates, no-LIMIT full sweeps) + 3 SAFE-guarded (convergence_stages.py explicit IS NULL guards) + 9 SAFE-with-caveat (session_insight_timeline_reads.py Shape B: materialized_at_ms terminal avoids epoch but has inverse false-freshness bias). Zero SYNTHETIC-OK sites -- no existing time_confidence convention exists anywhere in the codebase to pair a fallback with (a finding in itself, tracked in cuxz).\n\nFix phase split into scoped follow-ups (26 BUG sites is too large/cross-cutting for one PR -- public search ranking, CLI pagination, the central time-predicate generator, and usage aggregation each need independent review and their own regression tests):\n- polylogue-z29t (P1): CLI query-unit ordering + _query_unit_time_expression/_time_predicate_clause -- highest priority, drives every user-typed time\u003e=/time\u003c= filter on the query CLI.\n- polylogue-rvtu (P1): usage_timeline unconditional silent-drop (archive.py:1780) -- most severe since it is not gated by since/until at all.\n- polylogue-s5mm (P2): public search ranking + since-filter (query_builders.py, runtime.py, attachment_records.py).\n- polylogue-2seq (P2): work-event/phase insight windowing (list_session_work_event_insights/list_session_phase_insights).\n- polylogue-cuxz (P2): design decision on whether/how a time_confidence signal should surface to consumers, and the Shape B false-freshness caveat.","acceptance_criteria":"A committed audit table (one row per COALESCE(...sort_key_ms...) call site: file:line, context, classification verdict, whether a fix is needed) plus fixes for every site classified as a bug (silent epoch ordering in a user-visible window/sort path). Verify: the audit artifact plus a regression test per fixed site proving a timeless session no longer vanishes/mis-sorts, using time_confidence=synthetic to signal degraded provenance instead.","notes":"[2026-07-08] Audit phase (AC clause 1: \"a committed audit table\") done and closed via .agent/reports/sort-key-ms-coalesce-audit-2026-07-08.md. Fix phase (AC clause 2: \"fixes for every site classified as a bug\") deferred to 5 scoped follow-up beads (z29t, rvtu, s5mm, 2seq, cuxz) per the design field above -- 26 BUG sites is genuinely cross-cutting, multi-subsystem work that deserves independent PRs and regression tests rather than one rushed sweep. This bead stays open/unclaimed as the audit-tracking parent; close it once all 5 follow-ups land, or supersede it into an epic if that reads better once the fix phase starts.","status":"closed","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-08T00:12:01Z","created_by":"Sinity","updated_at":"2026-07-08T17:53:17Z","started_at":"2026-07-08T15:54:09Z","closed_at":"2026-07-08T17:53:17Z","close_reason":"Audit + fix phase complete. Audit artifact committed as .agent/reports/sort-key-ms-coalesce-audit-2026-07-08.md (#2574): 68 COALESCE(...sort_key_ms...) sites classified across 9 files -- 26 BUG, 33 SAFE, 3 SAFE-guarded-staleness-check, 9 SAFE-Shape-B-caveat (session_insight_timeline_reads.py, tracked separately), 0 SYNTHETIC-OK (no existing convention).\n\nAll 26 BUG sites fixed and shipped across 4 PRs:\n- polylogue-z29t (#2576): 12 sites in archive.py -- get_session_tree, list_session_work_event_insights/list_session_phase_insights (before 2seq refined the since/until half further), usage_timeline base filter (before rvtu fixed it more thoroughly), query_messages/actions/session_actions/session_action_occurrences/files/session_files/blocks, the central _query_unit_time_expression/_time_predicate_clause generator.\n- polylogue-rvtu (#2575): usage_timeline unconditional drop (the more severe half of the archive.py usage_timeline finding) + a CodeRabbit-caught pagination-cutoff gap in the same function.\n- polylogue-2seq (#2577): list_session_work_event_insights/list_session_phase_insights since/until window NULL-propagation exclusion (the residual half after z29t).\n- polylogue-s5mm (this PR, open at close time): the last 14 sites in storage/search/query_builders.py, runtime.py, storage/sqlite/queries/attachment_records.py -- public search ranking + since-filter.\n\nNet: every audited BUG site now includes rather than silently excludes/mis-sorts a timeless row, using an \"(expr IS NULL OR expr \u003cop\u003e ?)\" guard pattern consistently, each with dedicated regression tests seeding a genuinely timeless row.\n\nDeliberately NOT delivered as part of this closure: the AC also asked for \"time_confidence=synthetic\" signaling to consumers -- split out as polylogue-cuxz (open), a genuine product/design decision (new payload-model field vs explicit non-signal decision) rather than a bead-loop drive-by. The shipped fixes are a strict correctness improvement regardless (no more silent exclusion/mis-sort); they just do not yet expose a \"this timestamp is unreliable\" signal. session_insight_timeline_reads.py false-freshness caveat (Shape B, 9 sites) also deferred to cuxz per its own AC.\n\nVerify: audit artifact + per-site regression tests across the 4 PRs listed above; devtools verify --quick green on each.","labels":["area:substrate","area:temporal"],"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -194,7 +194,7 @@ {"_type":"issue","id":"polylogue-5hf","title":"Provider token accounting: honest cross-provider usage ledger","description":"Coverage, caveats, cached-vs-uncached splits, reasoning tokens, current-window + cumulative session usage. Companions: lineage-tokens (double-count), cost reconciliation probe. GH issue thread (body + comments) is input, not authority; this bead's scope statement wins where they conflict.","design":"SCOPE. The honest cross-provider usage ledger surface: given a session, logical session, day, or origin, return coverage, caveats, cached-vs-uncached input split, reasoning-vs-completion output split, and both current-window and cumulative token totals. This is the READ surface that consumes the corrected lane/pricing substrate from the sibling children; it is not the place to fix the underlying decomposition (that is the disjoint-lane child) or pricing (the LiteLLM child).\n\nFILES. Read models: storage session_provider_usage_events (exact provider events) and session_model_usage (per-model rollup); provider_usage_report_from_connection and the analyze-usage CLI path; MCP provider_usage / cost_rollups / session_costs tools. Coverage/caveat states already enumerated in docs/internals.md 'Provider usage accounting is audited as a source-derived read model' (exact event rows vs text-only estimates vs unsupported origins vs acquired-not-materialized vs stale rollups) are the caveat vocabulary to surface, not to invent.\n\nALGORITHM. For each origin, prefer exact provider usage events; fall back to text-estimate only with an explicit caveat flag; expose per-lane totals (input_uncached, input_cached, output_completion, output_reasoning) sourced from the disjoint-lane child; attach the LiteLLM-resolved API-equivalent cost and the subscription-credit cost as the two-view child provides them. Report cumulative session usage AND the current provider window separately.\n\nPITFALLS. Do not re-sum raw provider fields here; consume already-decomposed lanes. Do not paper over missing coverage as zero — a source acquired-but-not-materialized is a distinct caveat, not $0. Respect logical-session grain (4ts) so inherited-prefix tokens are not re-counted at the ledger.","acceptance_criteria":"Given a session/day/origin, the ledger returns per-lane token totals (cached/uncached input, reasoning/completion output), a coverage class and caveat set drawn from the documented vocabulary, and both API-equivalent and subscription-credit cost figures. Text-only-estimate and unsupported-origin rows are labelled, never silently zeroed. A test asserts the ledger consumes decomposed lanes (no raw input+output sum) and that logical-grain totals do not re-count inherited-prefix tokens. Verify on the live archive: analyze usage over codex-session and claude-session emit labelled lanes and dual cost views without the 7.69x-class inflation.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=A-trust-floor; lane=security-privacy; readiness=A-implementation-ready; proof=negative Host/Origin/token/spool/security fixture suite. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/017_polylogue_5hf.md (depth: bead-localized-from-export; urgency: T1-critical-path-correctness). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\n\n[Cluster PR 2026-07-12] Investigated first: the honest cross-provider usage ledger surface (polylogue/storage/usage.py: ProviderUsageReport/OriginUsageReport/PricingLaneReport, provider_usage_report_from_connection) was ALREADY substantially implemented on master -- declared coverage matrix + observed coverage_state vocabulary (exact/partial/missing_provider_telemetry, estimate_only, unsupported, acquired_not_materialized, stale_rollup) exactly matching docs/cost-model.md's documented vocabulary; cached-vs-uncached input split; current-window (provider_request_usage) AND cumulative (provider_cumulative_usage) usage reported separately; reasoning-vs-completion output split already present at the event tier (session_provider_usage_events -\u003e provider_request_usage/provider_cumulative_usage carry reasoning_output_tokens) -- intentionally NOT duplicated into the session_model_usage rollup tier, per docs/cost-model.md's 'logical completion/reasoning partition preserved as evidence without inventing a second additive cost lane' contract (confirmed this is by design, not a gap, by reading _cost_components/_estimate_from_usage in pricing.py). The one real gap: the ledger only ever exposed the API-equivalent cost basis (catalog_api_equivalent_usd), never the subscription-credit view -- so this bead's own AC 'both API-equivalent and subscription-credit cost figures' was unmet on this specific surface even though the dual view existed elsewhere (session-profile cost paths). Closed via the same change as f2qv.3 (shared footprint): subscription_credit_usd on PricingLaneReport/ProviderUsageReport. PR: https://github.com/Sinity/polylogue/pull/2727 (batched with f2qv.4, f2qv.5, f2qv.3). AC honesty: 'test asserts ledger consumes decomposed lanes (no raw input+output sum) and logical-grain totals do not re-count inherited-prefix tokens' -- ALREADY covered by pre-existing tests (test_provider_usage_report_treats_codex_cumulative_as_session_global, test_provider_usage_report_labels_physical_and_logical_model_rollups), not newly added by this PR but verified still green. 'Verify on the live archive: analyze usage over codex-session and claude-session emit labelled lanes and dual cost views without the 7.69x-class inflation' -- the 7.69x-class regression guard is pre-existing (test_disjoint_input_cache_lanes_survive_parse_write_and_pricing); the dual-view addition itself is NOT independently re-verified against the operator's live 38GB archive in this session (no archive_root configured in this worktree). Verification: devtools test tests/unit/storage/test_provider_usage_report.py tests/unit/mcp/test_envelope_contracts.py tests/unit/mcp/test_tool_discovery.py tests/unit/mcp/test_server_surfaces.py tests/unit/cli/ -k usage -\u003e 170 total passed across the two runs. mypy --strict clean. devtools verify --quick -\u003e exit 0.","status":"closed","priority":1,"issue_type":"feature","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:32:21Z","created_by":"Sinity","updated_at":"2026-07-12T01:18:32Z","started_at":"2026-07-12T01:04:32Z","closed_at":"2026-07-12T01:18:32Z","close_reason":"Merged PR #2727: dual cost view (API-equivalent + subscription-credit) now reported on the provider usage ledger; shared conversion helper ensures consistency across surfaces.","external_ref":"gh-2316","labels":["area:usage","delivery:A-trust-floor","lane:security-privacy"],"dependencies":[{"issue_id":"polylogue-5hf","depends_on_id":"polylogue-38x","type":"relates-to","created_at":"2026-07-04T02:59:20Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-5hf","depends_on_id":"polylogue-f2qv","type":"parent-child","created_at":"2026-07-04T21:34:41Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-0mu","title":"Import/browser-capture freshness: newest-wins; DOM fallback must not overwrite richer sessions","description":"Last-writer-wins can let older GDPR/browser payloads replace newer bodies while keeping updated_at_ms=MAX(existing,incoming); DOM-fallback captures can overwrite richer native/GDPR sessions; same-length changed captures can be skipped by the stale raw guard. Newest-wins tests across browser/GDPR orderings; DOM fallback never canonically overwrites; import wait/convergence operation-scoped. Silent evidence downgrade = trust bug.","design":"Audit-confirmed shape (Kant refresh): imports coalesce by (origin,native_id) with last-writer-wins; an older GDPR/browser payload can replace a newer body while updated_at_ms keeps MAX(existing,incoming) — the freshness comparison must use the incoming payload's own timestamp/content, not count. DOM-fallback ChatGPT/Claude captures can overwrite richer native/GDPR sessions — add a source-class precedence rule (native/GDPR \u003e DOM fallback) at the coalesce site. Same-length changed captures skipped by the stale raw guard — compare content hash, not message count. existing_capture_state() reports 'archived' from an older raw/index row without comparing the overwritten spool payload. Tests: newest-wins across browser/GDPR orderings; DOM fallback never canonically overwrites; same-count changed-text reimport produces one current indexed session.","acceptance_criteria":"Re-capturing an existing session via DOM fallback never reduces stored message count or richness (newest-wins by content comparison, not timestamp alone); regression test covers the observed clobber case; capture-gap events emitted when fallback drops known content.","status":"closed","priority":1,"issue_type":"bug","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:32:18Z","created_by":"Sinity","updated_at":"2026-07-03T20:53:39Z","started_at":"2026-07-03T20:44:13Z","closed_at":"2026-07-03T20:53:39Z","close_reason":"Completed: equal-count changed raw payloads now update; DOM fallback captures are marked and cannot overwrite richer non-fallback rows; rejected lower-precedence fallback writes a capture_gap session event; focused ingest/parser/storage regressions and devtools verify --quick pass.","labels":["area:ingest","size:S"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-jnj.5","title":"Route ops reset --session/--source through the mutation contract","description":"Identity resets tombstone directly before the preview/confirmation branch — a typo mutates suppression state without dry-run or JSON evidence. Require dry-run preview + --yes + stable JSON like other destructive ops.","design":"Audit-confirmed: ops reset --session/--source tombstones BEFORE the preview/confirmation branch in the reset command implementation (cli/commands/ reset path). Fix: route identity resets through the same mutation contract as other destructive ops — dry-run prints exact target rows (origin/native_id, counts), mutation requires --yes, stable JSON envelope for both. Test: typo'd session ref produces zero-target dry-run and no mutation; real ref mutates only with --yes.","acceptance_criteria":"- `polylogue ops reset --session \u003cref\u003e` and `--source \u003cref\u003e` print a dry-run of the exact target rows (origin/native_id + counts) BEFORE any tombstone write; no mutation occurs without `--yes` (code path confirmed: tombstone no longer runs before the preview/confirmation branch — grep the reset command implementation).\n- Test: a typo'd/nonexistent session ref produces a zero-target dry-run and zero rows mutated (suppression state asserted unchanged).\n- Test: a real ref with `--yes` mutates only the named targets; a stable JSON envelope is emitted for both dry-run and mutation (same shape as other destructive ops).\n- `devtools test \u003creset command test\u003e` green for both paths.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=A-trust-floor; lane=security-privacy; readiness=A-implementation-ready; proof=negative Host/Origin/token/spool/security fixture suite. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/047_polylogue_jnj_5.md (depth: bead-localized-from-export; urgency: T1-critical-path-correctness). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"closed","priority":1,"issue_type":"bug","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:32:12Z","created_by":"Sinity","updated_at":"2026-07-09T23:35:05Z","started_at":"2026-07-09T21:51:25Z","closed_at":"2026-07-09T23:35:05Z","close_reason":"Fixed and merged in PR #2627. ops reset --session/--source now routes through the mutation contract: dry-run preview, --yes gating with no interactive-prompt blocking in machine mode, MutationResultPayload JSON envelope, and a fixed typo-resolves-to-zero-targets bug in _resolve_archive_session_ids. 30 tests passing (25 pre-existing + 5 new).","labels":["area:cli","area:security","delivery:A-trust-floor","lane:security-privacy","refactor"],"dependencies":[{"issue_id":"polylogue-jnj.5","depends_on_id":"polylogue-kwsb","type":"parent-child","created_at":"2026-07-04T21:47:44Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-37t.2","title":"Inline annotation protocol: agent-authored structure in plain prose","description":"Agents write structured markers in prose; extraction at block enrichment turns them into candidate assertions with evidence refs. Author-declared notation, not heuristic mining — the construct-validity-safe way to get structure out of prose.","design":"PROTOCOL DESIGN (2026-07-03, generalizing the marker idea into a composable protocol): (1) SYNTAX: line-anchored sigil markers — '::kind(args): body' on its own line, inline '[[kind: body]]' for short spans. Chosen for: harness-agnostic (plain text works in ANY provider incl. web chats), streaming-safe (line-complete before parse), markdown-inert (harmless where uninterpreted), collision-resistant (escape via '\\::'). Decide the final sigil after a corpus collision scan — grep the live archive for candidate-prefix false positives; evidence over taste. (2) KIND REGISTRY (declare-once, o21): each kind declares payload schema, extraction target, lifecycle — note/claim/lesson/decision -\u003e candidate assertions with evidence ref = containing message; predict(p, horizon, resolver) -\u003e prediction ledger (calibration bead); handoff(...) -\u003e reboot/handoff hints (37t.3); anchor(name) -\u003e named refs other markers cite; bead(title, prio?) -\u003e candidate bead in the discovered-work flow (4c0); eval(score, dim) -\u003e self-assessment rows (37t.9's PROMPT_EVAL becomes one kind). New kinds are registry entries, not parser changes. (3) COMPOSABILITY: markers carry refs (session:/message:/assertion:/bead ids) linking structure across the corpus; scoping via anchor + explicit ref, NOT syntactic nesting — the grammar stays line-local and trivial; complexity lives in the registry. (4) EXTRACTION at block enrichment (structural): each marker -\u003e typed row with exact message/block provenance; malformed markers extract as kind=malformed with raw text (never silently dropped — agents learn from feedback, and malformed rate is itself a quality measure). (5) ADOPTION LOOP: spec ships as an agent skill + preamble one-liner (pj8/37t.4); adoption rate and kind distribution are 9l5.7 measures; the experiment machinery (stc) can A/B protocol-on vs off. (6) CONSTRUCT VALIDITY: author-declared structure is the honest tier between raw prose and tool calls — extraction is exact (no NLP), authorship explicit, and the tier label 'agent-declared' distinguishes it from 'structural' outcomes in every downstream measure; agents can be wrong or game it — calibration closes that loop.\n\n## Authoritative corrective contract (2026-07-13)\n\nMarker kinds are authoring syntax that lower into the owning goal, assertion, event, finding, or\npolicy service. The marker registry declares parsing/rendering/lowering; it does not make each marker\nkind a durable domain object or parallel lifecycle.","acceptance_criteria":"- Final sigil chosen after a corpus collision scan: grep the live archive for candidate-prefix false positives and record the scan result in the PR.\n- Line-anchored '::kind(args): body' and inline '[[kind: body]]' parse at block enrichment into typed rows with exact message/block provenance; malformed markers extract as kind=malformed with raw text (never silently dropped) and the malformed rate is a recorded measure. Verify: pytest over fixtures covering well-formed, malformed, markdown-inert, streaming-split, and '\\::' escaped inputs.\n- Kind registry is declare-once: adding a kind (note/claim/lesson/decision/predict/handoff/anchor/bead/eval) is a registry entry, not a parser change. Verify: a structure/property test asserts a new kind touches only the registry module.\n- Extracted candidates carry an evidence ref to the containing message and land as candidate-status assertions (not active). Verify: pytest asserts status and ref on an extracted marker.\n\n## Corrective acceptance criteria (2026-07-13)\n\nRepresentative goal, decision/assertion, event, finding, and policy markers lower to their owning\ntyped service and refs. No marker-specific table/lifecycle appears; unregistered lowerings fail with\nan actionable declaration error.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=context-memory; readiness=A-implementation-ready; proof=context scheduler ledger fixture and candidate judgment queue proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/166_polylogue_37t_2.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\nREVISIT 2026-07-13 (operator-prompted, in light of the rigor/rxdo/alphabet programs adopted tonight — this bead is now a KEYSTONE multiplier): (1) TIER: 'agent-declared' becomes a formal rung on the authority ladder used everywhere tonight (structural T1 / rule T2 / judged T3 / derived D) — exact extraction like T1, untrusted authorship like T3; every downstream measure labels it. (2) PACK-D SHORTCUT: speech-act tokens (completion-claim, correction, question) were T3-judged = expensive; with this protocol agents/operator SELF-DECLARE at write time — forward sessions get exact speech-act tokens free, T3 only needed for the historical corpus. The pattern language gains PACK-F: declared-marker tokens in the mixed unit stream (match(m:declared:claim -\u003e[no: a:test-run] $) = 67ac forward-path). (3) PRE-REGISTRATION AUTHORING: ::predict(p, horizon, resolver) IS rigor mechanism C's cheapest UX — an expectation declared in prose, timestamped by its message, graph-provable ordering for free (rxdo.9.3). (4) FINDING AUTHORING: a ::finding kind can emit rxdo.4 finding.v1 candidates with evidence ref = containing message — inline channel into the judge lifecycle. (5) CORRECTIONS WITH CHECKS: operator-annotated corrections ([[correction: use X not Y | check: forbid Y]]) carry their own compilable violation predicate — c1+c2 of the steerability operationalization in one marker. (6) UNIFY with dve1: marker kinds should reference annotation schema ids (a kind = the inline authoring surface of a schema), not a parallel registry. (7) CALIBRATION now concrete: sample declared markers into the judgment queue (rxdo.11 L10 ordering), per-agent declaration precision via rxdo.9.12 machinery — the bead's 'calibration closes that loop' has real machinery behind it. (8) ::handoff efficacy is measurable via L7 compaction regret. (9) Adjacent shipped tonight: terminal-note lane (dmp, #2801) captures terminal notes as candidates — this protocol generalizes it. PRIORITY RAISED P2-\u003eP1: cheapest forward-path for the speech-act alphabet + registration + finding authoring across three adopted programs.\nADOPTION + EXPANSION PASS (operator, 2026-07-13). ADOPTION DESIGN: (1) SESSION-START SEEDING — require ONE marker at session start (::goal/::intent declaring what this session is for): pattern-continuation does the rest (early tokens condition later behavior — the operator's momentum insight is exactly right for LLMs), AND the goal marker doubles as the PROBLEM-OPENED event that abandonment detection needs (see resolution redesign below) — one mandate, two systems fed. (2) TINY REQUIRED SET: goal at start, resolved/blocked/handoff at end, claim on completion statements; everything else optional — mental load bounded. (3) MISS-DETECTION LOOP (rxdo.11-style, call it L11): retrospective PACK-D detectors (rule/judged) find UNdeclared corrections/claims/questions in recent sessions, diff vs declared markers -\u003e per-agent DECLARATION RECALL measure -\u003e feedback into agent skills/preambles; the retrospective tier becomes the audit/training-wheels for the prospective protocol. (4) REINFORCEMENT: markers must visibly pay off for agents — recall packs cite the agent's own prior markers back (evidence the channel works), findings materialize from ::finding. (5) Harness nudge: a Stop-hook reminder when a session ends with no terminal marker. EXPANSION DOMAINS: ::confidence (uncertainty declarations feeding calibration), ::blocked-on (dependency signals — tonight's fleet coordination in-band!), ::source (provenance for borrowed external info), ::dissent (agent disagrees but complies — audit gold), ::phase (research-\u003eimplementation segmentation — feeds the pattern alphabet as declared boundaries), ::stale-context (recall-item X was wrong/outdated = L1 relevance feedback authored inline), operator-side markers in user messages (corrections-with-checks, priorities), cross-agent markers in multi-agent transcripts (lane-\u003ecoordinator ::status parsed from session streams), and the PROVIDER-UNIVERSALITY point: plain-prose markers work in ChatGPT/Gemini web chats too — captured web sessions gain declared structure with zero harness support.","status":"open","priority":1,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:32:06Z","created_by":"Sinity","updated_at":"2026-07-13T05:46:48Z","labels":["area:context","area:ingest","delivery:D-agent-context-coordination","lane:context-memory","spine"],"dependencies":[{"issue_id":"polylogue-37t.2","depends_on_id":"polylogue-37t","type":"parent-child","created_at":"2026-07-03T06:32:06Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} +{"_type":"issue","id":"polylogue-37t.2","title":"Inline annotation protocol: agent-authored structure in plain prose","description":"Agents and operators may write optional structured markers in prose; exact extraction turns them into candidate events/assertions with evidence refs. This is an author-declared channel, not heuristic mining and not yet a mandatory session protocol. Adoption strength is measured before any enforcement decision.","design":"PROTOCOL DESIGN (2026-07-03, generalizing the marker idea into a composable protocol): (1) SYNTAX: line-anchored sigil markers \u2014 '::kind(args): body' on its own line, inline '[[kind: body]]' for short spans. Chosen for: harness-agnostic (plain text works in ANY provider incl. web chats), streaming-safe (line-complete before parse), markdown-inert (harmless where uninterpreted), collision-resistant (escape via '\\::'). Decide the final sigil after a corpus collision scan \u2014 grep the live archive for candidate-prefix false positives; evidence over taste. (2) KIND REGISTRY (declare-once, o21): each kind declares payload schema, extraction target, lifecycle \u2014 note/claim/lesson/decision -\u003e candidate assertions with evidence ref = containing message; predict(p, horizon, resolver) -\u003e prediction ledger (calibration bead); handoff(...) -\u003e reboot/handoff hints (37t.3); anchor(name) -\u003e named refs other markers cite; bead(title, prio?) -\u003e candidate bead in the discovered-work flow (4c0); eval(score, dim) -\u003e self-assessment rows (37t.9's PROMPT_EVAL becomes one kind). New kinds are registry entries, not parser changes. (3) COMPOSABILITY: markers carry refs (session:/message:/assertion:/bead ids) linking structure across the corpus; scoping via anchor + explicit ref, NOT syntactic nesting \u2014 the grammar stays line-local and trivial; complexity lives in the registry. (4) EXTRACTION at block enrichment (structural): each marker -\u003e typed row with exact message/block provenance; malformed markers extract as kind=malformed with raw text (never silently dropped \u2014 agents learn from feedback, and malformed rate is itself a quality measure). (5) ADOPTION LOOP: spec ships as an agent skill + preamble one-liner (pj8/37t.4); adoption rate and kind distribution are 9l5.7 measures; the experiment machinery (stc) can A/B protocol-on vs off. (6) CONSTRUCT VALIDITY: author-declared structure is the honest tier between raw prose and tool calls \u2014 extraction is exact (no NLP), authorship explicit, and the tier label 'agent-declared' distinguishes it from 'structural' outcomes in every downstream measure; agents can be wrong or game it \u2014 calibration closes that loop.\n\n## Authoritative corrective contract (2026-07-13)\n\nMarker kinds are authoring syntax that lower into the owning goal, assertion, event, finding, or\npolicy service. The marker registry declares parsing/rendering/lowering; it does not make each marker\nkind a durable domain object or parallel lifecycle.\n\nMARKER ADOPTION AUTHORITY DECISION 2026-07-13. Markers are optional/advisory for now. Session-start examples, palette affordances, and bounded non-blocking reminders may be experimental arms, but absence of a marker is never an error, completion blocker, or Stop-hook veto. Use stc to preregister eligible sessions, control/no-nudge and advisory-nudge arms, assignment/exposure, declaration-recall against retrospective PACK-D detection, declaration precision, malformed rate, task outcomes, friction/opt-out, correction recurrence, stopping, and exclusions. A mandatory policy requires a positive experiment receipt, explicit operator ratification after that receipt, and a separately scoped AssertionKind.POLICY with revocation. L11 may propose skill/preamble changes but cannot authorize enforcement.","acceptance_criteria":"- Final sigil chosen after a corpus collision scan: grep the live archive for candidate-prefix false positives and record the scan result in the PR.\n- Line-anchored '::kind(args): body' and inline '[[kind: body]]' parse at block enrichment into typed rows with exact message/block provenance; malformed markers extract as kind=malformed with raw text (never silently dropped) and the malformed rate is a recorded measure. Verify: pytest over fixtures covering well-formed, malformed, markdown-inert, streaming-split, and '\\::' escaped inputs.\n- Kind registry is declare-once: adding a kind (note/claim/lesson/decision/predict/handoff/anchor/bead/eval) is a registry entry, not a parser change. Verify: a structure/property test asserts a new kind touches only the registry module.\n- Extracted candidates carry an evidence ref to the containing message and land as candidate-status assertions (not active). Verify: pytest asserts status and ref on an extracted marker.\n\n## Corrective acceptance criteria (2026-07-13)\n\nRepresentative goal, decision/assertion, event, finding, and policy markers lower to their owning\ntyped service and refs. No marker-specific table/lifecycle appears; unregistered lowerings fail with\nan actionable declaration error.\n\nA preregistered declaration-recall experiment includes no-nudge and advisory arms and measures precision, recall, malformed rate, task outcome, friction/opt-out, and recurrence. Before a later explicit policy decision, missing goal/terminal/claim markers never fail a session, block Stop, or change completion status; a fixture proves the non-blocking behavior.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=context-memory; readiness=A-implementation-ready; proof=context scheduler ledger fixture and candidate judgment queue proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/166_polylogue_37t_2.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 \u2014 verify source anchors before coding; line numbers are snapshot-relative.\nREVISIT 2026-07-13 (operator-prompted, in light of the rigor/rxdo/alphabet programs adopted tonight \u2014 this bead is now a KEYSTONE multiplier): (1) TIER: 'agent-declared' becomes a formal rung on the authority ladder used everywhere tonight (structural T1 / rule T2 / judged T3 / derived D) \u2014 exact extraction like T1, untrusted authorship like T3; every downstream measure labels it. (2) PACK-D SHORTCUT: speech-act tokens (completion-claim, correction, question) were T3-judged = expensive; with this protocol agents/operator SELF-DECLARE at write time \u2014 forward sessions get exact speech-act tokens free, T3 only needed for the historical corpus. The pattern language gains PACK-F: declared-marker tokens in the mixed unit stream (match(m:declared:claim -\u003e[no: a:test-run] $) = 67ac forward-path). (3) PRE-REGISTRATION AUTHORING: ::predict(p, horizon, resolver) IS rigor mechanism C's cheapest UX \u2014 an expectation declared in prose, timestamped by its message, graph-provable ordering for free (rxdo.9.3). (4) FINDING AUTHORING: a ::finding kind can emit rxdo.4 finding.v1 candidates with evidence ref = containing message \u2014 inline channel into the judge lifecycle. (5) CORRECTIONS WITH CHECKS: operator-annotated corrections ([[correction: use X not Y | check: forbid Y]]) carry their own compilable violation predicate \u2014 c1+c2 of the steerability operationalization in one marker. (6) UNIFY with dve1: marker kinds should reference annotation schema ids (a kind = the inline authoring surface of a schema), not a parallel registry. (7) CALIBRATION now concrete: sample declared markers into the judgment queue (rxdo.11 L10 ordering), per-agent declaration precision via rxdo.9.12 machinery \u2014 the bead's 'calibration closes that loop' has real machinery behind it. (8) ::handoff efficacy is measurable via L7 compaction regret. (9) Adjacent shipped tonight: terminal-note lane (dmp, #2801) captures terminal notes as candidates \u2014 this protocol generalizes it. PRIORITY RAISED P2-\u003eP1: cheapest forward-path for the speech-act alphabet + registration + finding authoring across three adopted programs.\nADOPTION + EXPANSION PASS (operator, 2026-07-13). HISTORICAL ADOPTION PROPOSAL (NOT AUTHORIZED): (1) SESSION-START SEEDING \u2014 proposed requiring one marker at session start (::goal/::intent declaring what this session is for): pattern-continuation does the rest (early tokens condition later behavior \u2014 the operator's momentum insight is exactly right for LLMs), AND the goal marker doubles as the PROBLEM-OPENED event that abandonment detection needs (see resolution redesign below) \u2014 one mandate, two systems fed. (2) TINY REQUIRED SET: goal at start, resolved/blocked/handoff at end, claim on completion statements; everything else optional \u2014 mental load bounded. (3) MISS-DETECTION LOOP (rxdo.11-style, call it L11): retrospective PACK-D detectors (rule/judged) find UNdeclared corrections/claims/questions in recent sessions, diff vs declared markers -\u003e per-agent DECLARATION RECALL measure -\u003e feedback into agent skills/preambles; the retrospective tier becomes the audit/training-wheels for the prospective protocol. (4) REINFORCEMENT: markers must visibly pay off for agents \u2014 recall packs cite the agent's own prior markers back (evidence the channel works), findings materialize from ::finding. (5) Historical proposal: a Stop-hook reminder; current authority decision permits only an experimental, bounded, non-blocking reminder and no failure/veto. EXPANSION DOMAINS: ::confidence (uncertainty declarations feeding calibration), ::blocked-on (dependency signals \u2014 tonight's fleet coordination in-band!), ::source (provenance for borrowed external info), ::dissent (agent disagrees but complies \u2014 audit gold), ::phase (research-\u003eimplementation segmentation \u2014 feeds the pattern alphabet as declared boundaries), ::stale-context (recall-item X was wrong/outdated = L1 relevance feedback authored inline), operator-side markers in user messages (corrections-with-checks, priorities), cross-agent markers in multi-agent transcripts (lane-\u003ecoordinator ::status parsed from session streams), and the PROVIDER-UNIVERSALITY point: plain-prose markers work in ChatGPT/Gemini web chats too \u2014 captured web sessions gain declared structure with zero harness support.\n\nMARKER ADOPTION AUTHORITY DECISION 2026-07-13. Markers are optional/advisory for now. Session-start examples, palette affordances, and bounded non-blocking reminders may be experimental arms, but absence of a marker is never an error, completion blocker, or Stop-hook veto. Use stc to preregister eligible sessions, control/no-nudge and advisory-nudge arms, assignment/exposure, declaration-recall against retrospective PACK-D detection, declaration precision, malformed rate, task outcomes, friction/opt-out, correction recurrence, stopping, and exclusions. A mandatory policy requires a positive experiment receipt, explicit operator ratification after that receipt, and a separately scoped AssertionKind.POLICY with revocation. L11 may propose skill/preamble changes but cannot authorize enforcement.","status":"open","priority":1,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:32:06Z","created_by":"Sinity","updated_at":"2026-07-13T06:29:30Z","labels":["area:context","area:ingest","delivery:D-agent-context-coordination","lane:context-memory","spine"],"dependencies":[{"issue_id":"polylogue-37t.2","depends_on_id":"polylogue-37t","type":"parent-child","created_at":"2026-07-03T06:32:06Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.2","depends_on_id":"polylogue-stc","type":"related","created_at":"2026-07-13T06:29:30Z","created_by":"Codex","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-20d.3","title":"Verify v23 FTS readiness end-to-end: find works; readiness is an O(1) ledger read","description":"v23 added fts_freshness_state + the text-populated partial index after `find hermes` refused with 'Search index is incomplete' despite healthy FTS. Verify on the live archive: (a) find \u003cterm\u003e works; (b) readiness hot path reads the ledger row, no recount scan; (c) triggers maintain source_rows/indexed_rows +-1 and the bulk trigger-suspension path recomputes exact counts once post-rebuild; (d) recount lives only in ops doctor. Fix whatever of a-d is missing; regression so status cannot report healthy while find refuses. Contentless-FTS delete markers do not change the +-1 arithmetic.","design":"v23 added fts_freshness_state + the text-populated partial index; verify and finish the O(1) design: (a) polylogue find \u003cterm\u003e works on the live archive; (b) readiness hot path reads ONE ledger row — the three FTS sync triggers (messages_fts_a{i,d,u}) increment/decrement source_rows/indexed_rows as a single-row UPDATE inside the existing write transaction (negligible); bulk trigger-suspension path recomputes exact counts once post-rebuild; (c) STALE verdicts are CACHED: when freshness cannot be trusted, record STALE with counts in the ledger (the write exists at fts_lifecycle.py:804-812) and trust it for a bounded TTL instead of recounting ~15s of cold I/O per attempt — measured: 17s-then-fail, three times, for the same answer; (d) the expensive verify-scan is demoted to ops doctor. Second-order win: with readiness O(1) the gate can run on every query for free. Regression: status cannot report healthy while find refuses; stale archive answers instantly with an actionable error. Contentless-FTS delete markers do not change the +-1 arithmetic.","status":"closed","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:32:01Z","created_by":"Sinity","updated_at":"2026-07-03T06:39:31Z","started_at":"2026-07-03T06:33:58Z","closed_at":"2026-07-03T06:39:31Z","close_reason":"Completed: search readiness now returns trusted recorded FTS readiness verdicts, including cached stale verdicts, before any exact recount. Added sync/async trace regressions proving stale rows do not query blocks or messages_fts_docsize; py_compile/ruff focused checks passed; focused FTS tests passed; live archive v23 ledger shows messages_fts ready at 5,705,798/5,705,798 and POLYLOGUE_ARCHIVE_ROOT=/home/sinity/.local/share/polylogue polylogue --plain find hermes --limit 3 completed in ~3.05s with 1,184 bytes of bounded output.","labels":["area:perf","area:storage","enabler"],"dependencies":[{"issue_id":"polylogue-20d.3","depends_on_id":"polylogue-20d","type":"parent-child","created_at":"2026-07-03T06:32:00Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-4ts.2","title":"Count tokens on logical-session basis (fork/resume replays double-count)","description":"Child rollups still count inherited-prefix tokens: Codex live 2.12x vs authoritative state_5.sqlite (closes to ~1.08x on re-ingest); Claude +9.6%. Attribute to logical_session_id root; slice rollups to the tail; present API-equivalent vs subscription-equivalent as separate columns. Blocks the forensics repricing headline. GH issue thread (body + comments) is input, not authority; this bead's scope statement wins where they conflict.","design":"Code-confirmed shape (gh#2472): storage is deduplicated by lineage, but the child's session_model_usage rollup still counts inherited-prefix tokens — _write_session_events receives the full session.session_events, and _reextract_prefix_tail_db refreshes message counts but not usage rollups. Fix: attribute usage to the logical-session root (session_profiles.logical_session_id) and slice/recompute provider-usage rollups to the child's own tail. Measured residual to close: Codex live 2.12x vs state_5.sqlite (should approach per-thread median 1.00 after re-ingest + fix); Claude +9.6% (+6.1pp resume-dup, +3.5pp stale-window). Present API-equivalent vs subscription-equivalent as separate columns (cache reads free on subscription; see bd memories on token semantics). Verify with the cost-reconciliation probe bead once both exist.","acceptance_criteria":"Token/cost rollups on the live archive count each physical replay chain once at logical-session grain: fork/resume re-ingests no longer double-count (the 189B-vs-139B Codex class); physical and logical views both available and labeled; verified against the lpl reconciliation probe.","notes":"2026-07-03 all-provider product field slice: commit 8ca374e59 adds top-level ProviderUsageReport model_rollup_usage (physical_session) and logical_model_rollup_usage (logical_session_model_high_water), with JSON and text output. Live active archive smoke /realm/tmp/polylogue-cost-reconciliation/provider-usage-all-logical-current.json: 8 origins; physical_session total 395,320,980,423; logical_session_model_high_water total 288,741,229,728; all-provider replay gap 106,579,750,695. Ignored .agent/demos/agent-forensics was updated to use 395.3B physical vs 288.7B logical as the current token-grain headline. Verification: full provider_usage_report storage test file passed (7 tests, 182s with D-state waits), changed single test passed against final code, ruff/py_compile passed, doc-command/docs-surface checks passed, demo-shelf check passed. Remaining before closing: decide and implement how cost/repricing headline should consume physical vs logical grain; token headline is now product-visible and labeled, but final forensics campaign should not close on token semantics alone.\n\n2026-07-04 slice update: implemented logical Codex reconciliation and logical catalog repricing, but do not close yet. Code now makes `devtools lab probe cost-reconciliation --codex-state ... --json` report Codex `details.archive_grains` and `details.logical_comparison` alongside the physical comparison; samples carry logical native id, logical high-water tokens, physical chain tokens, replay gap, and chain session count. `polylogue analyze usage --detail headline --format json` now exposes `pricing_grain=physical_session`, `logical_pricing_grain=logical_session_model_high_water`, physical `catalog_api_equivalent_usd`, logical `logical_catalog_api_equivalent_usd`, and corresponding pricing lanes. Live active archive proof artifacts: `/realm/tmp/polylogue-cost-reconciliation/codex-logical-probe-current.json` shows Codex physical outside_tolerance=182, logical outside_tolerance=78, physical_total_tokens=213,554,395,025, logical_total_tokens=137,737,178,713, external_total_tokens=149,688,014,305, replay_gap_tokens=75,817,216,312. `/realm/tmp/polylogue-cost-reconciliation/provider-usage-all-logical-pricing-current.json` shows all-origin physical token total=397,514,349,314, logical token total=290,864,785,981, physical catalog API-equivalent=$340,174.201780, logical catalog API-equivalent=$282,339.486727. Verification: `devtools test tests/unit/storage/test_provider_usage_report.py`; `devtools test tests/unit/devtools/test_cost_reconciliation_probe.py`; `devtools test tests/unit/cli/test_diagnostics.py -k usage_report_text_renders_pricing_lanes`; `devtools verify --quick` run 20260704T115647Z-quick-4191376-2fff7e41. Residual before closure: explain/repair remaining logical outside-tolerance threads and stale provider rollup state, or split them into a precise follow-up if evidence shows they are not lineage-token-grain scope.","status":"closed","priority":1,"issue_type":"bug","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:51Z","created_by":"Sinity","updated_at":"2026-07-04T12:15:12Z","started_at":"2026-07-03T12:44:31Z","closed_at":"2026-07-04T12:15:12Z","close_reason":"Completed lineage-token scope. Physical and logical token/cost grains are product-visible and labeled; Codex reconciliation now reports physical vs logical archive grains plus residual classification; provider usage materialization and stale diagnostics no longer treat reasoning-only cumulative rows as billable rollup replacements. Live active archive evidence: codex-logical-probe-current-max100.json has physical outside_tolerance=182, logical outside_tolerance=78, replay_gap_tokens=75,817,216,312, and residual classification showing 62/78 logical residuals have zero replay gap; codex-stale-rollup-targeted-current.json has stale_sessions=0 and expected_total=actual_total=112,011,817,245. Residual non-lineage work split to polylogue-ivsc (Codex state_5 external token drift) and polylogue-xy95 (full usage diagnostic performance). Verification: devtools test tests/unit/storage/test_provider_usage_report.py tests/unit/devtools/test_cost_reconciliation_probe.py passed; devtools verify --quick passed run 20260704T121302Z-quick-18976-2dc08407.","external_ref":"gh-2472","labels":["area:lineage","area:usage","enabler","size:M"],"dependencies":[{"issue_id":"polylogue-4ts.2","depends_on_id":"polylogue-4ts","type":"parent-child","created_at":"2026-07-03T06:31:51Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-4ts.1","title":"Execute lineage validation plan (gates citing archive counts externally)","description":"Plan at .agent/scratch/research/12-lineage-validation.md. Campaign enabler: gates citing ANY archive count externally (forensics headline, claim-vs-evidence denominators).","design":"Make lineage validation a first-class executable evidence artifact, not a scratch SQL checklist. Add a read-only devtools workspace command that opens the archive with mode=ro, verifies the current index schema has session_links.branch_point_message_id/inheritance, computes exact lineage counts, classifies resolution state, audits dangling branch points, and samples prefix-sharing children through the composed read path. The artifact must separate physical stored counts from logical composed/session counts and emit a single verdict field controlling whether archive counts are citable externally. Reuse workload diagnostics only as context; its planner-estimated table counts are not authoritative for this gate.","acceptance_criteria":"Every gate in the lineage validation plan runs against the live archive and cites its counts (physical vs logical sessions, dedup ratios, branch-point integrity); failures filed as beads; the plan document updated with measured results.","notes":"Research integrated 2026-07-03 from subagent Pascal; update the existing note .agent/scratch/research/12-lineage-validation.md rather than creating a duplicate. Current implementation already has prefix-tail extraction in storage/sqlite/archive_tiers/write.py::_extract_prefix_tail, late child re-extraction in _reextract_prefix_tail_db, sync composition in read_archive_session_envelope, async composition in storage/sqlite/queries/message_query_reads.py::get_messages plus batch/paginated paths, topology cycle quarantine, and logical_session_id materialization. Existing tests cover synthetic fork/resume behavior, topology resolution/cycle quarantine, and logical rollups. Live read-only probe: schema v23, sessions=16498, messages=4142175, profile_rows=16494, logical_sessions=9400, links=8033, prefix-sharing=345, spawned-fresh=7533, unresolved/null-inheritance=155, quarantined=0, dangling_branch_point=9. Gaps: no durable demo-shelf artifact, workload probe has stale/estimated message counts, and the 9 dangling branch points plus 4 missing profile rows must be classified before external archive counts are citable.","status":"closed","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:50Z","created_by":"Sinity","updated_at":"2026-07-04T18:15:53Z","started_at":"2026-07-04T18:04:59Z","closed_at":"2026-07-04T18:15:53Z","close_reason":"Completed: added devtools workspace lineage-validation as the read-only citable-count gate; live v24 artifact generated under .agent/demos/lineage-validation/current with physical_sessions=16635, logical_sessions=9517, stored_messages=4269978, profile coverage=1.0, prefix-sharing links=345, and sampled composed-read ratio=382.2x. The gate correctly reports external_counts_citable=false because 6 dangling branch points remain; residual repair filed as polylogue-9p0y and linked to the lineage epic. Updated .agent/scratch/research/12-lineage-validation.md with the current command and measured result. Verification: focused lineage devtools tests passed; devtools verify --quick passed run 20260704T181528Z-quick-1028909-1dcfe397.","labels":["area:lineage","enabler","size:M"],"dependencies":[{"issue_id":"polylogue-4ts.1","depends_on_id":"polylogue-4ts","type":"parent-child","created_at":"2026-07-03T06:31:50Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -208,25 +208,25 @@ {"_type":"issue","id":"polylogue-sru.2","title":"Characterize ambiguous bucket: wordless continuation vs prose-without-markers","description":"Split next-turn-is-tool-call (wordless continuation) from prose-lacking-ack-markers; state counts for both. Opus-4-7 74% ambiguous vs deepseek 17% is likely turn-structure variance, not behavior — this split disambiguates.","design":"Implementation home: the claim-vs-evidence classifier in devtools (devtools/ module behind `devtools workspace claim-vs-evidence`; tests tests/unit/devtools/test_claim_vs_evidence.py). Wordless-continuation detection: for each failure's paired next assistant message, check whether its blocks contain tool_use and no text block with \u003eN chars before the first tool_use — that is 'wordless continuation'; prose without matched ack markers stays 'ambiguous-prose'. Emit both as classification_reason variants (field already exists) and add the two counts to the report summary + by_model/by_tool cuts. Regen: `devtools workspace claim-vs-evidence --limit 5000 --out-dir .agent/demos/claim-vs-evidence --json`. Acceptance: report shows ambiguous split into wordless_continuation vs prose_no_marker with counts; per-model ambiguous variance (opus-4-7 74% vs deepseek 17%) re-examined after the split.","notes":"2026-07-03 Codex WIP: unit implementation for ambiguous split passes focused tests, but live regeneration with --limit 5000 became too slow and had to be killed twice. First attempt used correlated subqueries for next-message block shape; second used set-based CTE; third used chunked second query after sampled rows, but the full command still exceeded 90s on active archive and ignored SIGINT while inside SQLite. Do not close or commit this slice until the live regeneration path is profiled/fixed. Dirty files currently show the WIP implementation: devtools/claim_vs_evidence.py and tests/unit/devtools/test_claim_vs_evidence.py. Last passing focused proof: python -m py_compile + ruff check + devtools test tests/unit/devtools/test_claim_vs_evidence.py -\u003e 3 passed.","status":"closed","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:28Z","created_by":"Sinity","updated_at":"2026-07-03T07:45:10Z","started_at":"2026-07-03T07:09:21Z","closed_at":"2026-07-03T07:45:10Z","close_reason":"Completed: claim-vs-evidence now splits ambiguous follow-ups into wordless tool continuations and prose-without-marker buckets, reports the counts in JSON/README summaries, and regenerates the current demo on the active archive. Focused tests pass; live regen/check completed.","labels":["area:substrate","campaign"],"dependencies":[{"issue_id":"polylogue-sru.2","depends_on_id":"polylogue-sru","type":"parent-child","created_at":"2026-07-03T06:31:27Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-sru.3","title":"Benign-recovery vs consequential-silence split by handler kind","description":"Read failures are ~94% silent but 'tried another path' is usually benign; Bash/test failures are the consequential class. Scope the headline to consequential handler kinds or add an explicit split — credibility depends on not inflating with trivial recoveries.","design":"Handler kind is already available on the paired failure row (actions lane exposes handler/tool). Define the consequential set explicitly in code (Bash/test/build/write-class handlers) and the benign-recovery set (Read/Glob/Grep-class 'tried another path'), emit split headline rows: silent-proceed among consequential vs among all. Keep the mapping a named constant with a rationale comment so reviewers can argue with it. Report both; never let the headline mix classes silently. Same regen/tests as the other methodology children.","status":"closed","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:28Z","created_by":"Sinity","updated_at":"2026-07-03T07:58:08Z","started_at":"2026-07-03T07:55:37Z","closed_at":"2026-07-03T07:58:08Z","close_reason":"Completed: claim-vs-evidence now reports a first-class handler-class split separating consequential shell/edit/write-class tool failures from benign read/search/path-discovery failures and other tools. The regenerated active-archive artifact shows consequential=4,177 failures with 921 silent-proceed (22.0% lower bound), benign_recovery=633 with 166 silent-proceed (26.2%), and other=190 with 92 silent-proceed (48.4%). Focused tests and demo shelf checks passed.","labels":["area:substrate","campaign"],"dependencies":[{"issue_id":"polylogue-sru.3","depends_on_id":"polylogue-sru","type":"parent-child","created_at":"2026-07-03T06:31:28Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-sru.1","title":"Expose action-unit outcome fields + followup_class as product capability","description":"Capabilities-may-not-be-silos gate for the campaign: the facts the report needs must become composable query capability. After this, the whole report is `actions where is_error:true | group by session.origin, followup_class | count` and every future cut (model/tool/repo/time) is free.","design":"1) is_error/exit_code are normalized at parse time (sources/parsers/base_models.py:74-75) but ActionQueryRowPayload (surfaces/payloads.py:~1298) carries neither — add as filterable/groupable action-unit fields. 2) Add derived followup_class (acknowledged|silent_proceed|wordless_continuation|ambiguous) + followup_message_ref computed in the source-derived lowering (no cache tables). 3) Reduce devtools workspace claim-vs-evidence to a render preset over these query strings, or retire it. Touchpoint chain: stage parser -\u003e AST to_payload -\u003e executor -\u003e metadata.py aggregate_group_fields -\u003e shell_completion_values.py -\u003e devtools render openapi + cli-output-schemas + cli-reference. Line refs pre-07-03; re-locate.","acceptance_criteria":"Fixture session with known unacknowledged failure fires via pure query strings; report README numbers reproducible from the printed queries.","notes":"Completed: action-unit outcome follow-up classification is now shared query capability. is_error/exit_code were already wired; this slice added source-derived followup_class and followup_message_ref over existing actions/messages/blocks, exposed followup_class as filterable/groupable action metadata, added action row payload fields, routed root CLI terminal-unit aggregate expressions before session-selector compilation, and moved the report classifier from scripts into polylogue.archive.actions.followup. Reproduction/query forms are now printed in .agent/demos/claim-vs-evidence/PUBLIC_REPRODUCTION.md: actions where is_error:true | group by followup_class | count; actions where followup_class:silent_proceed. Verification: focused DSL/report/CLI tests passed; active demo packet regenerated over archive root /home/sinity/.local/share/polylogue schema v23 with 41,886 structured failures and 5,000 inspected; devtools verify --quick passed run 20260703T092510Z-quick-718233-46e8b587.","status":"closed","priority":1,"issue_type":"feature","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:27Z","created_by":"Sinity","updated_at":"2026-07-03T09:25:36Z","started_at":"2026-07-03T09:05:37Z","closed_at":"2026-07-03T09:25:36Z","close_reason":"Completed","labels":["area:query","area:substrate","campaign"],"dependencies":[{"issue_id":"polylogue-sru.1","depends_on_id":"polylogue-sru","type":"parent-child","created_at":"2026-07-03T06:31:26Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-rxdo.10.3","title":"Demo D9: repeated-context mass and cost with causal savings separated","description":"Measure repeated-context mass/cost across compaction, resume, delegation, and re-explanation. This is\nobserved repetition, not automatically avoidable loss. `context-loss tax` or savings claims require\na matched counterfactual experiment over context policies.","design":"Define repeated units, normalization/deduplication, grain, time/frame, cost basis, and authority in a\ncanonical MetricDefinition. Report observed repeated tokens/dollars separately from estimated\navoidable mass. A causal savings arm uses stc with matched tasks and declared context treatments,\nleakage/exclusion/stopping rules, and outcome receipts. Descriptive output never subtracts all\nrepetition as waste; necessary protocol/context remains distinguishable.","acceptance_criteria":"Seed necessary repeated protocol, genuinely repeated authored context, and ambiguous similarity.\nThe descriptive report labels each and emits repeated-context mass/cost without a savings claim.\nOnly a matched ExperimentDefinition receipt may render context-loss tax/avoidable savings, and\nremoving assignment/exposure downgrades the output to observational.","notes":"[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nFlagship demo and the continuity sales pitch as a measured number. Embedding-cluster instances of the operator re-establishing the same context across sessions (self-similar authored spans, cross-session, excluding quotes/recall-injections); price the clusters (authored tokens x cost model, metric:\u003chash\u003e with explicit exclusions). Output: 'context loss cost you N tokens / $X last month' + the top-5 most re-explained topics (each a candidate for a judged assertion or recall-pack entry — the demo's output IS actionable memory work). Composes with h4 rediscovery-miss detection (closed-loops Part C) and L7 compaction regret for the full where-does-context-die picture. DEPS: embeddings at message grain (mhx.2 demand-driven note), cost model (f2qv machinery, merged #2776 evidence).\n\nORIGINAL DESIGN:\nImplement D9 as a reproducible analysis recipe over authored context spans. Cluster semantically similar cross-session spans where the operator re-establishes the same context, excluding quoted material, recall injections, and runtime-generated context. Price each cluster using authored-token counts and the cost model under a content-addressed metric definition. Render total repeated-context tokens and dollars plus the top five recurring topics; emit each topic as a candidate for a judged assertion or recall-pack entry.\n\nORIGINAL ACCEPTANCE_CRITERIA:\n1. A seeded multi-session corpus with repeated authored context yields the exact qualifying spans, token total, priced total, and top-five topic ordering. 2. Quotes, injected recall/context, protocol rows, and assistant-authored spans are excluded. 3. Output cites cohort, query, metric hash, cost-model version, embedding model/version, archive epoch, and exclusions. 4. Re-running at the same epoch is deterministic. 5. Each surfaced topic can be promoted into the existing judged assertion or recall-pack workflow without creating a parallel memory store.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T04:22:48Z","created_by":"Sinity","updated_at":"2026-07-13T05:46:17Z","metadata":{"consumer_proof":"observed-operator-flow"},"labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-f2qv","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-lph4","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-mhx.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-rxdo.10","type":"parent-child","created_at":"2026-07-13T06:22:48Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-stc","type":"related","created_at":"2026-07-13T07:55:25Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-rxdo.10.2","title":"Demo D3: prior observed recovery candidates with measured precision","description":"Given a fresh failure, retrieve prior observed recovery candidates from the operator's archive and\nmeasure precision@k. Adjacency or captured-span evidence supports a candidate, not the claim that a\nparticular change was \"the fix.\" Strong fix attribution requires target/state transition linkage or\na judged receipt. This is the first external continuity activation because it has the smallest cold-\nstart dependency surface.","design":"Use action-pattern PACKs and semantic retrieval to find structurally compatible failure/recovery\nspans. Each hit carries mode = adjacency-only | captured-span | target-state-linked | judged-fix,\nexact evidence refs, frame/evaluation receipt, ranker version, and compatibility explanation.\nRender `prior observed recovery candidate` for the first two modes. Only target-state-linked or\njudged-fix may render stronger attribution. Evaluation uses a blinded labeled corpus and precision@k\nby mode; no prose heuristic upgrades evidence class.","acceptance_criteria":"A private-data-free corpus plus one cold archive query returns cited candidates and precision@k.\nAdjacency-only/captured-span results never say \"the fix.\" A target/state-linked fixture may earn the\nstronger label, and deleting its linkage downgrades it. The first external user can run the flow\nwithout harness-resume compatibility or operator assistance.","notes":"[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nFlagship demo. Given fresh error text: embed -\u003e nearest past tool_result failures (tool_result_is_error=true, PACK-B failure kinds) that were FOLLOWED by success within-session (exit-code transition; avna pattern with M3 span capture once landed, plain SQL adjacency until then) -\u003e surface the fix diff/span. MEASURED: precision@k on a labeled holdout of known repeats (rxdo.9.4 holdout mechanism) — the demo ships WITH its own quality number or it does not ship. DEPS: exit-code backfill for Claude Code origin (avna.2 note: typed is_error + parseable codes verified present), embeddings, holdout cohort machinery. Feeds mhx.3 retrieval eval lane its first labeled task.\n\nORIGINAL DESIGN:\nImplement D3 as a reproducible retrieval recipe. Given fresh error text, embed it and retrieve nearest historical tool-result failures with tool_result_is_error=true and the PACK-B failure kinds. Restrict candidates to failures followed by a within-session success transition, initially using SQL adjacency and later the M3 captured span/diff. Rank candidates, surface the historical fix span or diff with evidence refs, and evaluate precision@k against a labeled holdout cohort using the rxdo.9.4 mechanism.\n\nORIGINAL ACCEPTANCE_CRITERIA:\n1. A seeded holdout of repeated failures and recoveries returns the expected prior fix candidate in the top-k and reports precision@k. 2. Non-error tool results and failures without a subsequent success transition are excluded. 3. Every result cites the failure action, success transition, session, captured span/diff when available, embedding model/version, and query/result-set refs. 4. SQL-adjacency fallback and M3-span mode are explicitly identified in output. 5. The demo ships with its measured quality number and fails closed if the holdout or required provenance is unavailable.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T04:22:42Z","created_by":"Sinity","updated_at":"2026-07-13T05:46:12Z","metadata":{"consumer_proof":"external-continuity"},"labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-avna.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-mhx.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-mhx.3","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-rxdo.10","type":"parent-child","created_at":"2026-07-13T06:22:42Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-rxdo.9.4","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":3,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-rxdo.10.1","title":"Demo D1: convergent questions — 'you have asked this 14 times'","description":"Flagship demo (archive-intelligence Thread 1, rxdo.10 design). Cluster embeddings of authored-user question messages across ALL providers (material_origin honest — protocol rows excluded); surface recurring question clusters with their N historical answers; agent judges score answer agreement (rxdo.9.11-.15 machinery, blinded). Rigor-native: cohort = question-messages result_set; counts carry denominators; embedding model+version pinned in the metric hash (303r.7); the demo is a recipe (rxdo.8) whose steps are query:\u003chash\u003e refs. Feeds: goal-graph cross-session linking, 'you asked this before' compose-time overlay (yyvg.3). DEPS: rxdo substrate (merged #2813), embeddings surfaces (mhx), judgment machinery for the agreement leg (can ship v1 without it — clusters + answer list only).","design":"Implement D1 as a reproducible analysis recipe. Select authored-user question messages across origins using material_origin, excluding protocol/runtime rows; embed and cluster recurring questions; resolve the historical answers associated with each cluster; optionally run blinded agent judgments for answer agreement. Persist the cohort/result-set and query refs, pin embedding model/version and classifier inputs in the metric hash, and render the repeated-question count plus answer list as the demo result.","acceptance_criteria":"1. A private-data-free seeded corpus containing the same authored question across multiple origins produces one cluster with the exact repeat count and linked answers. 2. Runtime/protocol user-role rows are excluded. 3. The result cites query, result-set, recipe, model/version, and archive epoch refs and reproduces identically at the same epoch. 4. V1 may ship clusters plus answers without the judgment leg; if judgments are enabled, blinded agreement and disagreement are rendered. 5. The demo exposes its own exclusions and does not publish a count without its denominator/cohort.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T04:22:37Z","created_by":"Sinity","updated_at":"2026-07-13T05:03:19Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.10.1","depends_on_id":"polylogue-mhx.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.1","depends_on_id":"polylogue-rxdo.10","type":"parent-child","created_at":"2026-07-13T06:22:36Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.1","depends_on_id":"polylogue-rxdo.9.11","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-rxdo.10.3","title":"Archive demo AI-D9: repeated-context mass and cost with causal savings separated","description":"Measure repeated-context mass/cost across compaction, resume, delegation, and re-explanation. This is\nobserved repetition, not automatically avoidable loss. `context-loss tax` or savings claims require\na matched counterfactual experiment over context policies.","design":"Define repeated units, normalization/deduplication, grain, time/frame, cost basis, and authority in a\ncanonical MetricDefinition. Report observed repeated tokens/dollars separately from estimated\navoidable mass. A causal savings arm uses stc with matched tasks and declared context treatments,\nleakage/exclusion/stopping rules, and outcome receipts. Descriptive output never subtracts all\nrepetition as waste; necessary protocol/context remains distinguishable.","acceptance_criteria":"Seed necessary repeated protocol, genuinely repeated authored context, and ambiguous similarity.\nThe descriptive report labels each and emits repeated-context mass/cost without a savings claim.\nOnly a matched ExperimentDefinition receipt may render context-loss tax/avoidable savings, and\nremoving assignment/exposure downgrades the output to observational.","notes":"[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nFlagship demo and the continuity sales pitch as a measured number. Embedding-cluster instances of the operator re-establishing the same context across sessions (self-similar authored spans, cross-session, excluding quotes/recall-injections); price the clusters (authored tokens x cost model, metric:\u003chash\u003e with explicit exclusions). Output: 'context loss cost you N tokens / $X last month' + the top-5 most re-explained topics (each a candidate for a judged assertion or recall-pack entry \u2014 the demo's output IS actionable memory work). Composes with h4 rediscovery-miss detection (closed-loops Part C) and L7 compaction regret for the full where-does-context-die picture. DEPS: embeddings at message grain (mhx.2 demand-driven note), cost model (f2qv machinery, merged #2776 evidence).\n\nORIGINAL DESIGN:\nImplement D9 as a reproducible analysis recipe over authored context spans. Cluster semantically similar cross-session spans where the operator re-establishes the same context, excluding quoted material, recall injections, and runtime-generated context. Price each cluster using authored-token counts and the cost model under a content-addressed metric definition. Render total repeated-context tokens and dollars plus the top five recurring topics; emit each topic as a candidate for a judged assertion or recall-pack entry.\n\nORIGINAL ACCEPTANCE_CRITERIA:\n1. A seeded multi-session corpus with repeated authored context yields the exact qualifying spans, token total, priced total, and top-five topic ordering. 2. Quotes, injected recall/context, protocol rows, and assistant-authored spans are excluded. 3. Output cites cohort, query, metric hash, cost-model version, embedding model/version, archive epoch, and exclusions. 4. Re-running at the same epoch is deterministic. 5. Each surfaced topic can be promoted into the existing judged assertion or recall-pack workflow without creating a parallel memory store.\n\nThis child uses the AI-D* archive-intelligence namespace; PF-D* belongs to polylogue-212.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T04:22:48Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","metadata":{"consumer_proof":"observed-operator-flow"},"labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-f2qv","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-lph4","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-mhx.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-rxdo.10","type":"parent-child","created_at":"2026-07-13T06:22:48Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.3","depends_on_id":"polylogue-stc","type":"related","created_at":"2026-07-13T07:55:25Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-rxdo.10.2","title":"Archive demo AI-D3: prior observed recovery candidates with measured precision","description":"Given a fresh failure, retrieve prior observed recovery candidates from the operator's archive and\nmeasure precision@k. Adjacency or captured-span evidence supports a candidate, not the claim that a\nparticular change was \"the fix.\" Strong fix attribution requires target/state transition linkage or\na judged receipt. This is the first external continuity activation because it has the smallest cold-\nstart dependency surface.","design":"Use action-pattern PACKs and semantic retrieval to find structurally compatible failure/recovery\nspans. Each hit carries mode = adjacency-only | captured-span | target-state-linked | judged-fix,\nexact evidence refs, frame/evaluation receipt, ranker version, and compatibility explanation.\nRender `prior observed recovery candidate` for the first two modes. Only target-state-linked or\njudged-fix may render stronger attribution. Evaluation uses a blinded labeled corpus and precision@k\nby mode; no prose heuristic upgrades evidence class.","acceptance_criteria":"A private-data-free corpus plus one cold archive query returns cited candidates and precision@k.\nAdjacency-only/captured-span results never say \"the fix.\" A target/state-linked fixture may earn the\nstronger label, and deleting its linkage downgrades it. The first external user can run the flow\nwithout harness-resume compatibility or operator assistance.","notes":"[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nFlagship demo. Given fresh error text: embed -\u003e nearest past tool_result failures (tool_result_is_error=true, PACK-B failure kinds) that were FOLLOWED by success within-session (exit-code transition; avna pattern with M3 span capture once landed, plain SQL adjacency until then) -\u003e surface the fix diff/span. MEASURED: precision@k on a labeled holdout of known repeats (rxdo.9.4 holdout mechanism) \u2014 the demo ships WITH its own quality number or it does not ship. DEPS: exit-code backfill for Claude Code origin (avna.2 note: typed is_error + parseable codes verified present), embeddings, holdout cohort machinery. Feeds mhx.3 retrieval eval lane its first labeled task.\n\nORIGINAL DESIGN:\nImplement D3 as a reproducible retrieval recipe. Given fresh error text, embed it and retrieve nearest historical tool-result failures with tool_result_is_error=true and the PACK-B failure kinds. Restrict candidates to failures followed by a within-session success transition, initially using SQL adjacency and later the M3 captured span/diff. Rank candidates, surface the historical fix span or diff with evidence refs, and evaluate precision@k against a labeled holdout cohort using the rxdo.9.4 mechanism.\n\nORIGINAL ACCEPTANCE_CRITERIA:\n1. A seeded holdout of repeated failures and recoveries returns the expected prior fix candidate in the top-k and reports precision@k. 2. Non-error tool results and failures without a subsequent success transition are excluded. 3. Every result cites the failure action, success transition, session, captured span/diff when available, embedding model/version, and query/result-set refs. 4. SQL-adjacency fallback and M3-span mode are explicitly identified in output. 5. The demo ships with its measured quality number and fails closed if the holdout or required provenance is unavailable.\n\nThis child uses the AI-D* archive-intelligence namespace; PF-D* belongs to polylogue-212.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T04:22:42Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","metadata":{"consumer_proof":"external-continuity"},"labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-avna.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-mhx.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-mhx.3","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-rxdo.10","type":"parent-child","created_at":"2026-07-13T06:22:42Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.2","depends_on_id":"polylogue-rxdo.9.4","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":3,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-rxdo.10.1","title":"Archive demo AI-D1: frame-aware convergent questions","description":"Flagship archive-intelligence continuity demo. Cluster authored-user questions across a declared archive frame, list historical answer candidates, and optionally judge agreement. Repeat counts are enumeration-exact only over the stated frame and pinned classifier/embedding definitions. `Unresolved` requires 7yk5 goal-state evidence; otherwise the demo says recurring or no observed closure. All durable definitions/results are promotion-driven, privacy-classified, and excisable.","design":"CLAIM CLASS: descriptive retrieval plus an optional judged-comparison layer; never causal. Select question messages using material_origin and a versioned question classifier/declared-marker rule. Bind origins, resolved interval, source/index generations, capture-completeness ref, exclusions, classifier/model refs, and measurement authority in the evaluation receipt. Cluster with a pinned embedding definition and expose membership/uncertainty rather than treating similarity as truth.\n\nFor each cluster, enumerate answer candidates with evidence refs. Render `recurring question` by default. Render `unresolved_inactive(H)` only when a goal/question ref resolves through 7yk5 under a named horizon and adequate future/capture frame. Agreement is a blinded judgment result supporting agree, disagree, tie, incomparable, abstain, and insufficient-evidence; no forced consensus.\n\nPersist ad-hoc question literals/membership only when the demo result is explicitly promoted/cited. Query literals, cluster membership, and answer selections inherit privacy, retention, export, and excision behavior. Consumer proof is external-continuity. Falsification corpus: exact stored repeats with one deliberately missing origin, classifier disagreement, two incomparable answers, and an excised member; the output must remain exact-over-frame, frame-incomplete, judged/unknown as appropriate, and privacy-safe.","acceptance_criteria":"1. A private-data-free corpus returns the expected recurring cluster and answer candidates with query/result/recipe/evaluation refs.\n2. A missing-origin fixture remains enumeration-exact over stored rows but renders frame-incomplete; restoring the origin changes the frame receipt.\n3. Runtime/protocol rows and classifier-disputed messages retain explicit exclusions/authority rather than silently entering the count.\n4. Without a 7yk5 closure/future-cone receipt the result never says unresolved or abandoned.\n5. Judged agreement preserves tie, incomparable, abstain, and insufficient-evidence.\n6. Ad-hoc secret-bearing input leaves no durable user-tier plan/member copy; promoted output participates in excision and export policy.\n7. Deleting the embedding/classifier/evaluation component ref invalidates reproducibility rather than reusing the same identity.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T04:22:37Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.10.1","depends_on_id":"polylogue-mhx.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.1","depends_on_id":"polylogue-rxdo.10","type":"parent-child","created_at":"2026-07-13T06:22:36Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.10.1","depends_on_id":"polylogue-rxdo.9.11","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0,"notes":"[LEGACY FIELDS PRESERVED BY FINAL CORRECTIVE PASS 2026-07-13]\n\nORIGINAL TITLE:\nDemo D1: convergent questions \u2014 'you have asked this 14 times'\n\nORIGINAL DESCRIPTION:\nFlagship demo (archive-intelligence Thread 1, rxdo.10 design). Cluster embeddings of authored-user question messages across ALL providers (material_origin honest \u2014 protocol rows excluded); surface recurring question clusters with their N historical answers; agent judges score answer agreement (rxdo.9.11-.15 machinery, blinded). Rigor-native: cohort = question-messages result_set; counts carry denominators; embedding model+version pinned in the metric hash (303r.7); the demo is a recipe (rxdo.8) whose steps are query:\u003chash\u003e refs. Feeds: goal-graph cross-session linking, 'you asked this before' compose-time overlay (yyvg.3). DEPS: rxdo substrate (merged #2813), embeddings surfaces (mhx), judgment machinery for the agreement leg (can ship v1 without it \u2014 clusters + answer list only).\n\nORIGINAL DESIGN:\nImplement D1 as a reproducible analysis recipe. Select authored-user question messages across origins using material_origin, excluding protocol/runtime rows; embed and cluster recurring questions; resolve the historical answers associated with each cluster; optionally run blinded agent judgments for answer agreement. Persist the cohort/result-set and query refs, pin embedding model/version and classifier inputs in the metric hash, and render the repeated-question count plus answer list as the demo result.\n\nORIGINAL ACCEPTANCE_CRITERIA:\n1. A private-data-free seeded corpus containing the same authored question across multiple origins produces one cluster with the exact repeat count and linked answers. 2. Runtime/protocol user-role rows are excluded. 3. The result cites query, result-set, recipe, model/version, and archive epoch refs and reproduces identically at the same epoch. 4. V1 may ship clusters plus answers without the judgment leg; if judgments are enabled, blinded agreement and disagreement are rendered. 5. The demo exposes its own exclusions and does not publish a count without its denominator/cohort.\n\nThis child uses the AI-D* archive-intelligence namespace; PF-D* belongs to polylogue-212.","metadata":{"consumer_proof":"external-continuity"}} {"_type":"issue","id":"polylogue-ei94","title":"Merge conductor with contention-class admission and completion receipts","description":"Productize the reusable merge-conductor protocol proven by the 2026-07-13 train. It accepts a lane/\nPR roster, admits work using contention-class budgets, distinguishes process exit from acceptance-\ncriteria completion, triages reviews and local gates, merges eligible work, serializes Beads updates,\nand emits a durable receipt. Incident-specific PR numbers, billing state, and held lanes are inputs,\nnot invariant workflow text.","design":"STATE MACHINE. discovered -\u003e running -\u003e process_done -\u003e reviewed -\u003e locally_verified -\u003e mergeable -\u003e\nmerged -\u003e beads_reconciled -\u003e complete, with blocked/failed/held branches and evidence refs at every\ntransition. DONE/process exit never means AC complete. Review findings are classified and actionable\nitems resolved; gates are named with exact commands/results; partial ACs produce notes/follow-ups,\nnever closure.\n\nADMISSION VECTOR. One migration-touching writer per durability tier/window. One live archive writer.\nOne writer per overlapping generated-surface family; 2-3 are allowed only when output ownership is\ndemonstrably disjoint. One heavy database/I/O lane per underlying archive/device unless measurements\nprove safe isolation. Four heavy code/build/verification lanes are the default host backstop.\nLightweight read-only review/design may exceed four, but is not exempt from memory, I/O, API, or\narchive contention. No duplicate worker may target one branch/resource. Limits are configurable ops\npolicy, not product semantics.\n\nSAFETY. Inspect live processes before worktree cleanup; detect mixed-checkout environments; use p155\nmigration collision keys; regenerate and reverify generated surfaces; stop on non-generated design\ncollisions; preserve hooks; normalize titles; serialize/read back Beads writes. Emit PR/lane,\ncontention tokens, convergence/review/gate/merge state, Beads closed/noted, residuals, timings,\ncollisions, rework, host pressure, and evidence refs. The falsification comparison measures\nthroughput as well as collision/rework/merge latency so lower concurrency cannot declare victory by\nmerely doing less work.","acceptance_criteria":"1. A committed workflow artifact separates invariant protocol from incident configuration and\n accepts a roster with declared resource/contention footprints.\n2. Admission refuses duplicate branch/resource workers, second migration writer in one tier/window,\n overlapping generated writers, second live archive writer, or an unsafe heavy-I/O collision;\n disjoint lightweight reads can exceed four under declared resource limits.\n3. The conductor refuses running/process-done-only lanes, untriaged substantive findings, red\n substantive gates, live-process cleanup, and unresolved design/migration conflicts.\n4. A synthetic train proves generated regeneration, title normalization, mixed-checkout detection,\n serialized/read-back Beads state, partial-AC note, and complete receipt.\n5. A replay over the 2026-07-13 roster identifies the migration collision and reports throughput,\n rework, merge latency, and host pressure under the proposed policy.","notes":"[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nThe 2026-07-13 merge train (44+ PRs, two conductor sessions, zero broken master states surviving \u003e1h) ran on a prompt that lives only in gitignored scratch (.agent/scratch/merge-conductor-prompt.md) — inert. PRODUCTIZE: (1) commit the protocol as a repo workflow doc or skill: converged-lanes-only rule; per-PR triage-\u003elocal-gate-\u003eadmin-merge sequence; rebase+regen recipe for generated-surface conflicts; bead close/note discipline with per-close verification (the reimport race); title-suffix strip before squash; (2) encode tonight's hard lessons as protocol steps: check for LIVE PROCESSES before git worktree remove (pgrep -f \u003cpath\u003e — two races bit us); mixed-checkout .venv artifacts poison worktree test runs (detect+remove); migration-slot collision check before merging parallel durable-tier PRs (p155 lint is the structural fix); local-gate attestation IS the CI substitute under outage (e6ja evidence); (3) the conductor emits a session summary table (PR/lane/beads-closed/noted) — make that a rendered artifact, and its per-merge receipts feed L4 (orchestration-prompt loop) and the fleet forensics corpus. Related: s7ae.5 re-scope, 2yax, e6ja, p155.\n\nORIGINAL DESIGN:\n# Merge-conductor prompt (fresh instance, polylogue fanout train)\n\nYou are the merge conductor for /realm/project/polylogue. ~26 fanout PRs\n(#2776–#2802 range) need triage → local gate → squash-merge → bead\nbookkeeping. Work autonomously; the operator has pre-authorized everything\nbelow.\n\n## Hard context\n\n- GitHub Actions is PERMANENTLY billing-locked: every workflow fails at init\n with zero steps. CI will never go green. The local gate below is the CI\n substitute, and merges use `gh pr merge \u003cN\u003e --squash --admin`\n (operator-authorized; do not ask again).\n- An adversarial-review fleet is still iterating on some lanes. ONLY merge a\n lane whose review loop has converged: `.agent/tools/fanout-launch.sh\n --status` shows it DONE (not RUNNING). RUNNING lane = moving target, skip\n and re-poll later. `--tails \u003clane\u003e` shows what a lane is doing.\n- Lane branch = `feature/fanout/\u003clane\u003e`, worktree = \n `/realm/worktrees/polylogue-\u003clane\u003e`. Do rebases IN the lane worktree; never\n `cd /realm/project/polylogue` from inside a worktree (hook blocks it).\n- DO NOT TOUCH: PR #2796 / lane embeddings-hygiene (operator drives it\n interactively), PR #2701 (release-please, held), lane eqp-census (deferred).\n\n## Per-PR protocol\n\n1. Pick a converged lane with an open PR. Prefer disjoint footprints first;\n anything touching generated surfaces (docs/topology-status.md,\n docs/plans/topology-target.yaml, docs/cli-reference.md, openapi/CLI-output\n schemas) merges one-at-a-time with rebase+regen between.\n2. Triage every substantive PR comment (CodeRabbit findings are often REAL —\n verify against the diff; earlier tonight one flagged a genuine\n closure-matrix breakage). Fix actionable items on the branch; reply\n briefly to false positives. The review fleet posted per-iteration comments\n + a final AC matrix — read them; they are the evidence base.\n3. Local gate (CI substitute), in the lane worktree or a scratch worktree at\n the merge result: `devtools verify --quick` (grep output for FAILED/BLOCK —\n exit text can mislead) + focused `devtools test \u003cpaths\u003e` for the lane's\n owned area. NEVER blanket `pytest tests/unit`. Keep pytest temp under\n /realm/tmp, not /tmp.\n4. Merge: `gh pr merge \u003cN\u003e --squash --admin`. If the PR title already ends in\n `(#N)`, strip it first (`gh pr edit \u003cN\u003e --title ...`) or the squash subject\n doubles it. If GitHub says merge conflicts: in the lane worktree\n `git fetch origin \u0026\u0026 git rebase origin/master`; conflicts on generated\n surfaces resolve by regenerating (`devtools render topology-projection \u0026\u0026\n devtools render topology-status`, or the surface's render command), `git\n add` + `git rebase --continue`, re-run quick gate, `git push\n --force-with-lease`, wait ~15s for mergeability recompute, merge.\n5. Bead bookkeeping after each merge (bead ids per lane are in\n `.agent/tools/fanout_gen_prompts.py` LANES dict; verdicts in the PR's final\n AC-matrix comment):\n - AC satisfied → `bd close polylogue-\u003cid\u003e --reason \"\u003cPR #N merged: evidence\u003e\"`\n - AC partial/deferred → `bd note polylogue-\u003cid\u003e \"\u003cwhat PR #N delivered, what remains\u003e\"` — never close partials.\n - KNOWN ISSUE: bd prints \"auto-importing … into empty database\" noise per\n invocation. Harmless to reads, but SEQUENCE all bd writes (no parallel\n bd calls) and verify each close with `bd show polylogue-\u003cid\u003e --json`\n afterward; re-close if a subsequent auto-import reverted it.\n6. Keep the main checkout fast-forwarded between batches: dirty\n `.beads/*.jsonl` is normal — `git checkout -- .beads/*.jsonl \u0026\u0026 git merge\n --ff-only origin/master`, then `bd export -o .beads/issues.jsonl`.\n `.beads/metadata.json` local modification (dolt server mode) must be\n PRESERVED — never checkout/revert that file.\n\n## Cleanup (after a lane is MERGED and its review loop DONE)\n\n`git worktree remove /realm/worktrees/polylogue-\u003clane\u003e` from the main\ncheckout, delete the local branch (`git branch -D feature/fanout/\u003clane\u003e` —\nsquash-merged branches always need -D), and the remote branch if auto-delete\ndidn't. Verify MERGED state first (`gh pr view \u003cN\u003e --json state`).\n\n## Cadence + reporting\n\n- Batch: gate + merge 2–4 compatible PRs, then bd bookkeeping, then ff master,\n then re-poll convergence. Re-poll `--status` every ~10 min; new lanes\n converge continuously.\n- Maintain a running table: PR / merged-at / beads closed / beads noted /\n gate evidence. Final message: the table + which lanes remain unmerged and\n why (still reviewing / conflicted / operator-held).\n- Already merged tonight (don't redo): #2772, #2774, #2775, #2784. Beads\n already closed: kp4q, xiyv, 20d.4; noted: fnm.1, 212.9.1, 20d.2, s7ae.8, oxz.\n\n\nORIGINAL ACCEPTANCE_CRITERIA:\n1. A committed workflow artifact contains the reusable conductor protocol and clearly separates invariant rules from the 2026-07-13 incident parameters. 2. It accepts a lane/PR roster and records, per PR, convergence state, review triage, local gates, merge result, Beads closed/noted, and evidence refs. 3. It refuses to merge a running lane, an untriaged substantive finding, a failed substantive gate, a live-process worktree, or a conflicting durable migration slot. 4. Generated-surface conflicts follow the regenerate/reverify path; non-generated design collisions stop for dedicated reconciliation. 5. Beads writes are serialized and read back after every mutation. 6. A synthetic conductor exercise proves DONE-vs-process-exit handling, title normalization, mixed-checkout detection, and a partial-AC note rather than an improper closure.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T04:22:26Z","created_by":"Sinity","updated_at":"2026-07-13T05:46:59Z","metadata":{"consumer_proof":"observed-operator-flow"},"labels":["area:coordination","area:devloop","delivery:D-agent-coordination","horizon:frontier","lane:agent-coordination"],"dependencies":[{"issue_id":"polylogue-ei94","depends_on_id":"polylogue-2yax","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-ei94","depends_on_id":"polylogue-e6ja","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-ei94","depends_on_id":"polylogue-p155","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-ei94","depends_on_id":"polylogue-s7ae.5","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-ei94","depends_on_id":"polylogue-wple","type":"related","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-7yk5","title":"Goal/question graph: declared open/close events, cross-session linking, the future cone","description":"OWNER BEAD for the v3 resolution semantics designed 2026-07-13 (currently scattered across rxdo.10 notes, 37t.2, fnm.8, 1vpm.2). THE MODEL: sessions are episodes; the entities that get resolved are GOALS/QUESTIONS spanning sessions. Openings: declared ::goal/::question/::problem markers (37t.2; the mandatory session-start ::goal feeds this automatically); closings: ::resolved/::answer/::blocked with refs linking closure to opening. Cross-session linking: explicit refs first, D1 convergent-question embedding clusters second, lineage descendants third. THE FUTURE CONE: an episode's resolution search space = its session's lineage descendants + later same-cluster sessions; 'unresolved as of epoch E' is time-indexed by construction (query_runs carry archive_epoch). CONSUMERS: abandonment/survival analytics (right-censored, horizon in metric hash), session-start context Layer-2 ('here is what you left open'), D1 demo, 37t.18 entity graph, jnj.13 triage surface. DEPS: 37t.2 (markers), fnm.8 (lineage scope operator — the future-cone query needs logical: expansion), D1 clustering (mhx). Ladder: v1 PACK-E structural proxies for history; v2 declared events forward; v3 this graph.\n\n## Authoritative corrective scope (2026-07-13)\n\nHistorical non-closure is represented as unresolved_inactive(H), not metaphysical abandonment.\nEvery derived inactivity claim names its horizon, frame, and closure authority.","design":"Represent goals and questions as cross-session entities whose openings and closings are declared events. Opening markers come from polylogue-37t.2 (::goal, ::question, ::problem); closing markers use ::resolved, ::answer, or ::blocked and carry refs to their openings. Link across sessions in precedence order: explicit refs, D1 convergent-question clusters, then lineage descendants. Define an episode's future cone as lineage descendants plus later sessions in the same cluster. Evaluate unresolved state as of an archive epoch so later closures do not rewrite historical answers. Deliver in the recorded ladder: v1 PACK-E structural proxy for history, v2 declared markers forward, v3 the explicit graph consumed by abandonment analytics, context injection, D1, entity graph, and triage.\n\n## Authoritative corrective contract (2026-07-13)\n\nGoal state is open | explicitly_closed | explicitly_blocked | unresolved_inactive(H). H is an as-of\nhorizon with an evaluation receipt. Explicit close/block events outrank inactivity inference.\n`abandoned` is only a user-facing interpretation produced by a named MetricDefinition with proxy,\ninactivity window, censoring, frame, and authority policy. The graph remains the owner of state;\nsurvival analytics consume it rather than independently guessing from the final stored message.","acceptance_criteria":"1. Declared open and close markers round-trip with stable refs, and a close identifies its opening. 2. Explicit refs take precedence over cluster and lineage inference; ambiguous inferred links remain visible rather than silently selecting one. 3. The future-cone query includes lineage descendants and later same-cluster sessions while excluding unrelated sessions. 4. 'Unresolved as of epoch E' is reproducible and does not see closures after E. 5. A seeded cross-session fixture proves open, resolved, blocked, descendant, clustered, and unrelated cases. 6. The context, D1, abandonment, entity-graph, and triage consumers can address the same goal/question refs.\n\n## Corrective acceptance criteria (2026-07-13)\n\nThe same open goal evaluated at two horizons can remain open/recent then become\nunresolved_inactive(H) without being rewritten as a fact. Explicit close and block events resolve\ndistinctly. Every derived state carries horizon/evaluation refs, and a missing future/capture frame\nrenders censored/unknown rather than abandoned.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T04:22:21Z","created_by":"Sinity","updated_at":"2026-07-13T05:44:34Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-7yk5","depends_on_id":"polylogue-37t.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-7yk5","depends_on_id":"polylogue-fnm.8","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-7yk5","depends_on_id":"polylogue-mhx.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":3,"dependent_count":1,"comment_count":0} +{"_type":"issue","id":"polylogue-7yk5","title":"Goal/question graph: declared open/close events, cross-session linking, the future cone","description":"OWNER BEAD for the v3 resolution semantics designed 2026-07-13 (currently scattered across rxdo.10 notes, 37t.2, fnm.8, 1vpm.2). THE MODEL: sessions are episodes; the entities that get resolved are GOALS/QUESTIONS spanning sessions. Openings: declared ::goal/::question/::problem markers (37t.2; optional/advisory session-start ::goal markers may feed this when present); closings: ::resolved/::answer/::blocked with refs linking closure to opening. Cross-session linking: explicit refs first, AI-D1 convergent-question embedding clusters second, lineage descendants third. THE FUTURE CONE: an episode's resolution search space = its session's lineage descendants + later same-cluster sessions; 'unresolved as of epoch E' is time-indexed by construction (query_runs carry archive_epoch). CONSUMERS: abandonment/survival analytics (right-censored, horizon in metric hash), session-start context Layer-2 ('here is what you left open'), AI-D1 demo, 37t.18 entity graph, jnj.13 triage surface. DEPS: 37t.2 (markers), fnm.8 (lineage scope operator \u2014 the future-cone query needs logical: expansion), AI-D1 clustering (mhx). Ladder: v1 PACK-E structural proxies for history; v2 declared events forward; v3 this graph.\n\n## Authoritative corrective scope (2026-07-13)\n\nHistorical non-closure is represented as unresolved_inactive(H), not metaphysical abandonment.\nEvery derived inactivity claim names its horizon, frame, and closure authority.","design":"Represent goals and questions as cross-session entities whose openings and closings are declared events. When voluntarily declared, opening markers come from polylogue-37t.2 (::goal, ::question, ::problem); closing markers use ::resolved, ::answer, or ::blocked and carry refs to their openings. Link across sessions in precedence order: explicit refs, AI-D1 convergent-question clusters, then lineage descendants. Define an episode's future cone as lineage descendants plus later sessions in the same cluster. Evaluate unresolved state as of an archive epoch so later closures do not rewrite historical answers. Deliver in the recorded ladder: v1 PACK-E structural proxy for history, v2 declared markers forward, v3 the explicit graph consumed by abandonment analytics, context injection, AI-D1, entity graph, and triage.\n\n## Authoritative corrective contract (2026-07-13)\n\nGoal state is open | explicitly_closed | explicitly_blocked | unresolved_inactive(H). H is an as-of\nhorizon with an evaluation receipt. Explicit close/block events outrank inactivity inference.\n`abandoned` is only a user-facing interpretation produced by a named MetricDefinition with proxy,\ninactivity window, censoring, frame, and authority policy. The graph remains the owner of state;\nsurvival analytics consume it rather than independently guessing from the final stored message.\n\nMarker absence remains unknown/no-declaration and never blocks session operation. Historical reconstruction may use named proxies or judged backfill with explicit authority. Mandatory capture is deferred to 37t.2's measured adoption gate and later operator policy; the goal graph accepts declarations but does not enforce authoring behavior.","acceptance_criteria":"1. Declared open and close markers round-trip with stable refs, and a close identifies its opening. 2. Explicit refs take precedence over cluster and lineage inference; ambiguous inferred links remain visible rather than silently selecting one. 3. The future-cone query includes lineage descendants and later same-cluster sessions while excluding unrelated sessions. 4. 'Unresolved as of epoch E' is reproducible and does not see closures after E. 5. A seeded cross-session fixture proves open, resolved, blocked, descendant, clustered, and unrelated cases. 6. The context, AI-D1, abandonment, entity-graph, and triage consumers can address the same goal/question refs.\n\n## Corrective acceptance criteria (2026-07-13)\n\nThe same open goal evaluated at two horizons can remain open/recent then become\nunresolved_inactive(H) without being rewritten as a fact. Explicit close and block events resolve\ndistinctly. Every derived state carries horizon/evaluation refs, and a missing future/capture frame\nrenders censored/unknown rather than abandoned.\n\nA session with no markers remains valid and produces unknown/no-declaration rather than a protocol failure. Advisory-marker and historical-backfill fixtures feed the same goal refs while preserving their distinct authority. No mandatory marker policy is implied by closing this bead.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T04:22:21Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-7yk5","depends_on_id":"polylogue-37t.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-7yk5","depends_on_id":"polylogue-fnm.8","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-7yk5","depends_on_id":"polylogue-mhx.2","type":"blocks","created_at":"2026-07-13T07:04:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":3,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-vw33","title":"Reconciliation pass: merge 12 duplicate-concept pairs between tonight's programs and pre-existing beads","description":"The 2026-07-13 design night independently reinvented or collided with ~12 existing beads; each pair needs ONE implementation and merged design fields. PAIRS (tonight's construct \u003c-\u003e existing bead): L7 compaction-regret \u003c-\u003e gjg.3 (gjg.3 first, L7 adds embedding method); cijx file-modeling G1-G8 \u003c-\u003e 7xv/7xv.1 (cijx richer, supersede-merge); goal-graph episodes \u003c-\u003e 1vpm.2 (declared open/close events = strongest boundary signal); avna M1 quantifiers \u003c-\u003e fnm.3 (absorb fnm.3); steerability c1/c2 \u003c-\u003e 1vpm.5; rxdo.11-L1 \u003c-\u003e 37t.17 (identical); rigor-J-for-context \u003c-\u003e 37t.9 (identical); loop-registry instances \u003c-\u003e 1jc + 37t.10 (register as loops); 37t.2 marker write-leg \u003c-\u003e rii.1 (same channel); rxdo.10 analytics atlas \u003c-\u003e 9l5 epic+23 children (SAME PROGRAM two eras: 9l5.10=process mining, 9l5.12=info-theory, 9l5.13 activity_spans=PACK-A+M3, 9l5.1=outcome conditioning — full pass required); xv1u curriculum \u003c-\u003e pj8 (pj8 recipes = xv1u seed tier); 1xc.10 \u003c-\u003e 5wp (straight dedupe). ALSO from the same sweep: 37t.16 adopts the authority-ladder vocabulary; ldau is solved-by-design in uh6c (cite+fold); fnm.8 lineage-scope operator is a goal-graph-v3 dependency; 4ts.5 is an L7 dependency; h6r (agent identity) must RISE — judge calibration rxdo.9.12 requires stable judge identity; flag untouched P1s t0dy / b5l.1 / 303r.2 for the next wave. Full annotated 394-bead sweep in the session chatlog 2026-07-13 (recoverable via polylogue).","status":"closed","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T03:47:28Z","created_by":"Sinity","updated_at":"2026-07-13T04:04:42Z","closed_at":"2026-07-13T04:04:42Z","close_reason":"Executed inline 2026-07-13 in the originating session (operator: 'we don't want a bead about editing beads, we want to edit beads'): 4 supersedes (7xv-\u003ecijx, 7xv.1-\u003ecijx, fnm.3-\u003eavna, 1xc.10-\u003e5wp), 2 dependency links (gjg.3\u003c-4ts.5, rxdo.9.12\u003c-h6r), h6r P4-\u003eP2, and 47 reconciliation/upgrade/unblock notes across the pairs table, the eight easier-overnight beads, the dozen upgraded framings, and the wave flags (t0dy/b5l.1/303r.2).","dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-yyvg.3","title":"Archive-context overlay: cross-provider intelligence blended into native webUIs","description":"Operator direction: 'think of more things the extension could handle — UX, blending useful stuff into the native interfaces.' The in-page layer machinery (ys30/wvji) is the substrate; this bead is the ARCHIVE-INTELLIGENCE content for it: (1) RELATED-SESSIONS sidebar — viewing any chat, see embedding-nearest sessions from ALL providers (the cross-provider memory no single provider can offer; polylogue's unique blend-in); (2) 'YOU ASKED THIS BEFORE' inline — D1 convergent-question detection live at compose time: typing a question that embedding-matches a historical cluster surfaces the N prior answers BEFORE the model re-answers (token savings + the flagship demo running ambiently); (3) badges on chat list — captured-state, duplicate-of, has-related; (4) in-UI archive search — keyboard shortcut opens polylogue search overlay from within ChatGPT/claude.ai; (5) marker palette — 37t.2 inline markers authored from web chats (plain prose = provider-universal; palette inserts ::kind syntax + renders existing markers specially in captured views); (6) composer recall-insert — one click injects a compiled recall pack into the prompt box (with delivery receipt logged, feeding L1). Every element is read-or-suggest; no silent writes (writes belong to the reverse-organization sibling). Ranked build order: 4 (cheapest, immediately useful) -\u003e 1 -\u003e 6 -\u003e 2 -\u003e 3 -\u003e 5. AC per element in-bead at implementation time; the overlay must degrade to nothing when the daemon is unreachable (never break the native UI).","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T03:40:17Z","created_by":"Sinity","updated_at":"2026-07-13T03:40:17Z","labels":["area:capture","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-yyvg.3","depends_on_id":"polylogue-yyvg","type":"parent-child","created_at":"2026-07-13T05:40:17Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-yyvg.2","title":"Provider collections as first-class: projects/custom-GPTs/claude.ai projects modeled","description":"Grounded state (verified 2026-07-13): sessions.provider_project_ref TEXT exists; ChatGPT parser populates it from conversation_template_id/gizmo_id with g-p- (project) vs g- (custom GPT) distinction; claude.ai parser extracts NOTHING project-shaped; no first-class collections relation anywhere (names, membership history, hierarchy). BUILD: origin-scoped collections modeling — collection identity (origin, native_collection_id, kind: project|custom-gpt|gem|folder), display names WITH observed-at history (renames are events), session membership WITH validity intervals (moves are events; membership is time-indexed like everything else). SOURCES: exports where present; browser-capture enrichment where exports lack it (verify whether claude.ai export carries project structure at all — if not, capture is the only source and the extension observes collection state from the UI); reverse-organization receipts (sibling bead) write the same events. Query surface: collection: field in the DSL; sessions where collection.name:x. AC: ChatGPT projects and custom GPTs queryable as collections with correct kind; claude.ai projects modeled from at least one source; rename/move history reconstructable for one real collection.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T03:40:13Z","created_by":"Sinity","updated_at":"2026-07-13T03:40:13Z","labels":["area:capture","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-yyvg.2","depends_on_id":"polylogue-yyvg","type":"parent-child","created_at":"2026-07-13T05:40:12Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-yyvg.1","title":"Reverse-organization channel: polylogue organizes the provider webUIs","description":"Operator direction 2026-07-13: 'go the other way around — organizing stuff in chatgpt/claude.ai webuis: naming chatlogs better, organizing into projects.' ARCHITECTURE — plan/apply with the posting-channel trust posture (rides ptx infra + yqof control surface; mutating remote user data is destructive-class): (1) PLAN: archive computes organization plans as JUDGED CANDIDATES — title suggestions from 30h display-title synthesis (better than first-prompt echoes; the L6 title-CTR loop measures whether suggested titles are actually better), project assignment from dve1 ontology labels + D1 question clusters, archival/duplicate flags from D7 redundancy atlas. Plans are previewable objects (result_set of (chat_ref, current, proposed, evidence_refs)). (2) APPLY: extension executes via same-origin authenticated provider endpoints (the webUI's own rename/move APIs — same fragility class as capture selectors; isolate per-provider in adapter modules with contract tests, jlme.3-style fail-visibly-on-drift); per-op receipts (op, before, after, timestamp) captured back into the archive; idempotence keys; rate limits; dry-run default + kill switch per yqof; NEVER auto-apply — operator judges the plan or per-item. (3) TWO-WAY: manual renames/moves observed by capture flow back as organization events; drift between archive-canonical and provider-visible state becomes a standing query. AC: a plan for \u003e=20 real chats previewed, judged, applied on ChatGPT with receipts; claude.ai adapter behind the same contract; zero writes possible with the kill switch on; every applied op has a receipt row citing its plan evidence.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T03:40:07Z","created_by":"Sinity","updated_at":"2026-07-13T03:40:07Z","labels":["area:capture","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-yyvg.1","depends_on_id":"polylogue-yyvg","type":"parent-child","created_at":"2026-07-13T05:40:07Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-yyvg.3","title":"Archive-context overlay: cross-provider intelligence blended into native webUIs","description":"Operator direction: 'think of more things the extension could handle \u2014 UX, blending useful stuff into the native interfaces.' The in-page layer machinery (ys30/wvji) is the substrate; this bead is the ARCHIVE-INTELLIGENCE content for it: (1) RELATED-SESSIONS sidebar \u2014 viewing any chat, see embedding-nearest sessions from ALL providers (the cross-provider memory no single provider can offer; polylogue's unique blend-in); (2) 'YOU ASKED THIS BEFORE' inline \u2014 AI-D1 convergent-question detection live at compose time: typing a question that embedding-matches a historical cluster surfaces the N prior answers BEFORE the model re-answers (token savings + the flagship demo running ambiently); (3) badges on chat list \u2014 captured-state, duplicate-of, has-related; (4) in-UI archive search \u2014 keyboard shortcut opens polylogue search overlay from within ChatGPT/claude.ai; (5) marker palette \u2014 37t.2 inline markers authored from web chats (plain prose = provider-universal; palette inserts ::kind syntax + renders existing markers specially in captured views); (6) composer recall-insert \u2014 one click injects a compiled recall pack into the prompt box (with delivery receipt logged, feeding L1). Every element is read-or-suggest; no silent writes (writes belong to the reverse-organization sibling). Ranked build order: 4 (cheapest, immediately useful) -\u003e 1 -\u003e 6 -\u003e 2 -\u003e 3 -\u003e 5. AC per element in-bead at implementation time; the overlay must degrade to nothing when the daemon is unreachable (never break the native UI).","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T03:40:17Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","labels":["area:capture","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-yyvg.3","depends_on_id":"polylogue-yyvg","type":"parent-child","created_at":"2026-07-13T05:40:17Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0,"design":"Build one in-page shell over ys30/wvji and add archive-intelligence modules in measured order: in-UI archive search; related sessions; composer recall insertion with delivery receipt; AI-D1 `asked before` suggestions; capture/duplicate/related badges; optional marker palette. All modules are read-or-suggest only. Remote mutation belongs exclusively to yyvg.1.\n\nEvery module declares query/result/context refs, freshness, privacy/excision behavior, empty/degraded state, latency budget, and provider DOM/adapter contract. The overlay is fail-open for the native provider UI: daemon loss, auth loss, schema mismatch, timeout, or extension drift removes/soft-disables Polylogue UI without blocking typing, navigation, or provider actions. Recall insertion shows exact payload/budget and records delivery; it never grants instruction authority. Marker palette insertion remains optional until 37t.2's declaration-recall experiment and a later explicit operator policy authorize stronger adoption.","acceptance_criteria":"1. Each of the six modules has a private-data-free fixture plus loading, empty, stale, privacy-blocked, daemon-unreachable, and adapter-drift states.\n2. Native ChatGPT/claude.ai typing, navigation, and actions remain functional when Polylogue is unavailable or mismatched.\n3. Search and related-session results resolve to cross-provider evidence with pinned query/evaluation refs.\n4. Recall insertion previews exact content, authority treatment, token budget, omissions, and delivery receipt; ordinary knowledge cannot become executable policy.\n5. AI-D1 compose-time suggestions use frame-aware recurring-question semantics and never claim unresolved without goal evidence.\n6. Marker palette absence is never an error; no mandatory prompt/hook requirement lands through this bead.\n7. No module invokes provider mutation APIs; a static/behavioral boundary test fails if yyvg.1 actuator imports enter the overlay."} +{"_type":"issue","id":"polylogue-yyvg.2","title":"Provider collections as first-class: projects/custom-GPTs/claude.ai projects modeled","description":"Grounded state (verified 2026-07-13): sessions.provider_project_ref TEXT exists; ChatGPT parser populates it from conversation_template_id/gizmo_id with g-p- (project) vs g- (custom GPT) distinction; claude.ai parser extracts NOTHING project-shaped; no first-class collections relation anywhere (names, membership history, hierarchy). BUILD: origin-scoped collections modeling \u2014 collection identity (origin, native_collection_id, kind: project|custom-gpt|gem|folder), display names WITH observed-at history (renames are events), session membership WITH validity intervals (moves are events; membership is time-indexed like everything else). SOURCES: exports where present; browser-capture enrichment where exports lack it (verify whether claude.ai export carries project structure at all \u2014 if not, capture is the only source and the extension observes collection state from the UI); reverse-organization receipts (sibling bead) write the same events. Query surface: collection: field in the DSL; sessions where collection.name:x. AC: ChatGPT projects and custom GPTs queryable as collections with correct kind; claude.ai projects modeled from at least one source; rename/move history reconstructable for one real collection.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T03:40:13Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","labels":["area:capture","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-yyvg.2","depends_on_id":"polylogue-yyvg","type":"parent-child","created_at":"2026-07-13T05:40:12Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0,"design":"Model origin-scoped CollectionIdentity(origin, native_collection_id, kind) separately from observations. Preserve display-name observations with observed-at/source receipts and membership intervals/events rather than overwriting current state. Kinds include project, custom-gpt, gem, folder, and unknown/extensible values under an OriginSpec-like contract. Sources may be export records, browser-capture observations, or reconciled reverse-operation receipts; each carries authority/fidelity and conflicts remain visible.\n\nExpose `collection:` and collection-name/kind predicates through the common query plan. Current membership is a time-indexed projection; historical rename/move reconstruction consumes events. Do not make provider collection state the archive's authority or collapse local promoted selections into remote collections. Verify claude.ai source availability before claiming export support; browser-only coverage renders as such.","acceptance_criteria":"1. ChatGPT project and custom-GPT fixtures produce distinct collection kinds and stable origin/native identities.\n2. One rename and one move reconstruct old and current state from observations/events without destructive overwrite.\n3. Conflicting export/browser/operation observations retain source authority and observed-at receipts.\n4. claude.ai project support names its actual source; absent export structure renders browser-only or unsupported, never inferred.\n5. Collection DSL queries have CLI/daemon/MCP/Python parity and bind an as-of time.\n6. Local result sets/selections and remote provider collections remain separate concepts connected only by explicit plans/receipts."} +{"_type":"issue","id":"polylogue-yyvg.1","title":"Reverse-organization channel: polylogue organizes the provider webUIs","description":"Operator direction 2026-07-13: 'go the other way around \u2014 organizing stuff in chatgpt/claude.ai webuis: naming chatlogs better, organizing into projects.' ARCHITECTURE \u2014 plan/apply with the posting-channel trust posture (rides ptx infra + yqof control surface; mutating remote user data is destructive-class): (1) PLAN: archive computes organization plans as JUDGED CANDIDATES \u2014 title suggestions from 30h display-title synthesis (better than first-prompt echoes; the L6 title-CTR loop measures whether suggested titles are actually better), project assignment from dve1 ontology labels + AI-D1 question clusters, archival/duplicate flags from AI-D7 redundancy atlas. Plans are previewable objects (result_set of (chat_ref, current, proposed, evidence_refs)). (2) APPLY: extension executes via same-origin authenticated provider endpoints (the webUI's own rename/move APIs \u2014 same fragility class as capture selectors; isolate per-provider in adapter modules with contract tests, jlme.3-style fail-visibly-on-drift); per-op receipts (op, before, after, timestamp) captured back into the archive; idempotence keys; rate limits; dry-run default + kill switch per yqof; NEVER auto-apply \u2014 operator judges the plan or per-item. (3) TWO-WAY: manual renames/moves observed by capture flow back as organization events; drift between archive-canonical and provider-visible state becomes a standing query. AC: a plan for \u003e=20 real chats previewed, judged, applied on ChatGPT with receipts; claude.ai adapter behind the same contract; zero writes possible with the kill switch on; every applied op has a receipt row citing its plan evidence.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T03:40:07Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","labels":["area:capture","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-yyvg.1","depends_on_id":"polylogue-yyvg","type":"parent-child","created_at":"2026-07-13T05:40:07Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0,"design":"Use the shared plan -\u003e authorize -\u003e apply -\u003e receipt -\u003e reconcile vocabulary without a generic mutation executor. OBSERVE first: capture provider collection/title/archive state with origin, native refs, observation time, capability/version, and staleness receipt. PLAN produces a versioned candidate relation of current/proposed state plus query/ontology/title/redundancy evidence; it never mutates remote state. AUTHORIZE supports whole-plan or per-item operator judgment and capability scope.\n\nProvider-specific extension adapters APPLY through authenticated same-origin APIs with dry-run default, kill switch, rate/concurrency limits, idempotency keys, before-state checks, and exact provider responses. Partial failure is resumable and cannot mark unapplied members complete. RECONCILE re-observes provider state, confirms/rejects each operation, and exposes manual/provider drift through a standing query. Where a provider supports reversal, receipts carry prior state and an undo plan; irreversible operations state that before authorization. Query literals, inferred organization, and receipts follow privacy/excision policy. Endpoint drift fails visibly and disables mutation without breaking capture/read overlays.","acceptance_criteria":"1. A stale observed-state fixture refuses planning/apply until refreshed or explicitly accepted as stale.\n2. At least 20 candidate chat operations render current/proposed state, evidence refs, privacy class, capability scope, and per-item authorization.\n3. Dry-run and kill-switch modes make zero provider writes; unauthorized or out-of-scope operations fail closed.\n4. ChatGPT apply records idempotency key, before/after state, provider response, partial-failure status, and reconciliation observation; retry does not duplicate effects.\n5. A claude.ai adapter implements the same envelope with its own capability/failure contract.\n6. Manual remote drift is detected after reconciliation rather than silently overwritten.\n7. Reversible operations produce tested undo plans; irreversible ones require an explicit non-reversible authorization receipt."} {"_type":"issue","id":"polylogue-xv1u","title":"Candidate curriculum v1: measurable teaching artifacts without self-authority","description":"Build the smallest measurable curriculum arm now. It reads usage/context receipts and renders a\nbounded candidate teaching artifact with source refs and exclusions. It cannot inject itself, edit\nskills, schedule itself, or grant itself policy authority. Its value is tested as one arm of a\nmatched experiment before adaptive generation is allowed.","design":"V1 selects a small declared candidate set from existing telemetry, renders an immutable artifact,\nrecords selection/query/evaluation refs and exclusions, and submits it through 37t.11 as quoted\nevidence. ExperimentDefinition in stc preregisters matched tasks, arm assignment, leakage screen,\noutcomes, context-use measures, correction recurrence, operator judgment, stopping, and exclusions.\nThe candidate artifact cannot modify policy or scheduler state. Deferred until a credible effect\nreceipt: adaptive topic selection, autonomous skill edits, continual optimization, automatic\nscheduling, and self-injection.","acceptance_criteria":"1. V1 deterministically renders a bounded candidate artifact from declared receipts with source and\n exclusion refs.\n2. The scheduler always treats it as quoted evidence; attempts to self-authorize or bypass judgment\n fail.\n3. A preregistered matched experiment compares candidate curriculum against control and reports task\n outcome, context use, correction recurrence, leakage, and operator judgment.\n4. No adaptive/self-editing/scheduling code lands in v1. Expansion requires the experiment receipt\n to show useful effect without unacceptable correction or leakage cost.","notes":"[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nOperator (2026-07-13): the DSL 'really will have to be taught — partially skill, partially global memory. I do hope allocating say 25Ktok for polylogue will have obvious payoff.' DESIGN — tiered teaching budget: TIER-0 global memory (~500 tok): existence + when-to-reach + skill pointer (exists in CLAUDE.md today). TIER-1 static skill (today 4.2KB/~1K tok, pj8): grow to ~5-8K tok with a DSL cheatsheet (grammar essentials, field vocabulary, seq/pattern forms) + worked recipes. TIER-2, THE NOVEL PART — GENERATED PERSONALIZED CURRICULUM: render the bulk of the budget from the archive's own telemetry — the highest-VALUE query patterns from THIS archive (rxdo.3 query-runs: which queries get re-run, promoted, cited by findings), this user's derived ontology labels (dve1), this archive's alphabet tokens (avna.2/3), current goal-graph state. 25K of YOUR proven patterns, not generic reference — that is what makes the payoff 'obvious'. Refreshed by a curriculum loop (rxdo.11 family: watch usage -\u003e measure recipe value -\u003e propose curriculum diff -\u003e operator gate -\u003e skill version bump). TIER-3 point-of-use zero-preload help (jnj.10 completions/explain/did-you-mean — interactive, costs no context). PAYOFF MEASUREMENT (the 25K must prove itself): A/B skill variants via mechanism J (rxdo.9.10); re-explanation-tax delta (D9); rediscovery-miss rate delta (h4); DSL-miss detection — agent hand-rolls grep-over-sessions where one query would have worked = detectable pattern, per-agent 'query recall' analog of 37t.2's declaration recall. Polylogue reports its own context ROI: teaching tokens allocated vs tokens saved + outcomes. NOTE: the ~96 MCP tool descriptions are part of the same context budget (mcp-ergonomics #2790 bounded payloads; description budget is the other half). Related: 3gd (activation layer epic frame), 3gd.1 (doctor/why-zero-usage), pj8, jnj.10, rxdo.11.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T03:09:25Z","created_by":"Sinity","updated_at":"2026-07-13T05:45:01Z","metadata":{"consumer_proof":"observed-operator-flow"},"dependencies":[{"issue_id":"polylogue-xv1u","depends_on_id":"polylogue-37t.11","type":"blocks","created_at":"2026-07-13T07:48:16Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-xv1u","depends_on_id":"polylogue-stc","type":"blocks","created_at":"2026-07-13T07:48:22Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":2,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-rxdo.11","title":"Improvement-loop registry with two governed operational pilots","description":"Capstone construct from .agent/scratch/closed-loops-design-2026-07-13.md. Every closed-loop mechanism is the same 5-tuple: watch (standing query, rxdo.5) -\u003e measure (metric:\u003chash\u003e) -\u003e propose (recipe emitting CANDIDATES, never auto-apply) -\u003e judge (lifecycle) -\u003e bump (content-addressed artifact version). Declare loops like insight descriptors in one LOOP_REGISTRY; loop health itself queryable (starved-for-judgments, artifact-changed-this-month). Ten grounded instances enumerated in the doc: L1 recall relevance (delivery receipts -\u003e ranker), L2 classifier residue (confessed-unclassified -\u003e rules), L3 judge calibration, L4 orchestration-prompt outcomes (tonight's fanout = seed corpus), L5 detector precision, L6 title CTR (position-bias caveat named), L7 COMPACTION REGRET (embedding-match later re-derivations vs discarded prefix — what forgetting cost, as a number), L8 cost routing (needs J experiments else observational), L9 ontology drift (dve1), L10 elicitation-value meta-loop (judgment decision-impact computable retrospectively by re-deriving dependents without it). Non-handwave rule encoded: a loop qualifies only with named signal source + content-addressed metric + candidate proposer + judge gate. DEP: rxdo.5 standing queries, rxdo.9.1 metric hashes.\n\n## Authoritative corrective scope (2026-07-13)\n\nRetain ImprovementLoopSpec and a declare-once registry, but activate only two heterogeneous pilots\nuntil the shared operational contract is proven. The remaining loop designs are durable horizon\ninstances, not thirteen daemon loops.","design":"# Closed-loop mechanisms + HITL UX + operationalizations (2026-07-13)\n\n## Part A — The loop inventory (each grounded: signal → metric → proposer → gate → versioned artifact)\n\nThe non-handwaving rule: a loop qualifies only if its SIGNAL already exists\nor is landing in a named PR/bead, its METRIC is content-addressable, its\nPROPOSER emits candidates (never auto-applies), and a JUDGE gate versions\nthe artifact.\n\nL1. **Recall relevance loop.** Signal: context-delivery receipts (landed\nminimal leg #2792; 37t.22) log what was injected; usage detection = injected\nrefs cited/quoted/re-read in subsequent turns (text+embedding match). Metric:\nper-item usage rate. Proposer: retrieval ranker reweighting (implicit\nrelevance feedback — proven search-engine tech). Gate: ranker:\u003chash\u003e bump.\n\nL2. **Classifier residue loop.** Signal: PACK-A/B classifiers confess\n\"unclassified\" residue. Metric: residue volume per command shape (standing\nquery). Proposer: agent drafts rules for top residue clusters. Gate: judged →\nclassifier:\u003chash\u003e vN+1. The classifier improves from its own confessed\nignorance; fully mechanical.\n\nL3. **Judge calibration loop** (= rxdo.9.12/.15). Signal: agent-judge vs\noperator-gold overlap. Metric: per-judge per-dimension agreement. Proposer:\nweight/routing updates. Gate: operator confirms routing policy changes.\n\nL4. **Orchestration prompt loop.** Signal: lane prompts are stored artifacts\n(fanout-prompts/); outcomes measurable (PR merged, review iterations, cost,\nconvergence time). Metric: prompt-feature × outcome correlations. Proposer:\nfindings (\"lanes with explicit AC restatement converge faster\") + template\ndiffs. Gate: operator adopts template vN. Tonight's 30-lane fanout is the\nseed corpus.\n\nL5. **Detector precision loop.** Signal: pathology/finding detectors emit\ncandidates; judgments record accept/reject. Metric: per-detector precision\n(standing query). Proposer: threshold/rule adjustments. Gate: judged →\ndetector version bump. Same shape as L2 — detectors ARE classifiers.\n\nL6. **Title/summary CTR loop.** Signal: rxdo.3 query-runs + subsequent read\nevents = implicit click-through on search results. Metric: per-title-source\nCTR (30h synthesized vs origin titles). Proposer: title-generation strategy\nranking. Gate: strategy flag flip. Honest caveat: position bias — log rank\nat click time (rxdo.3 sample_refs carry order) or the metric lies.\n\nL7. **Compaction regret loop.** Signal: compaction boundaries (column\nexists) + discarded-prefix content vs agent's LATER re-derivations\n(embedding match between post-boundary content and discarded prefix).\nMetric: regret = re-derived mass that was discarded. Proposer: compaction\npolicy tuning (what to preserve). Gate: policy version. This one is novel\nand fully measurable — \"what did forgetting cost\" as a number.\n\nL8. **Cost-routing loop.** Signal: routing decisions + judged outcomes.\nMetric: tier efficiency frontier. Proposer: routing advisor updates. Gate:\noperator adopts. Needs J experiments to de-confound task mix; without them,\nlabel observational.\n\nL9. **Ontology drift loop** (= dve1 as designed).\nL10. **Elicitation-value loop** (meta). Signal: every judgment's downstream\nimpact is computable retrospectively — re-derive the dependent objects\n(rankings, labels) without that judgment and diff. Metric: decision-impact\nper judgment type. Proposer: asking-policy update (solicit\nhighest-expected-impact next, not just max-entropy). Gate: policy version.\nActive learning that optimizes for decisions, not information.\n\n**The unifying abstraction — improvement loops as first-class objects.**\nEvery loop above is the same 5-tuple: (watch: standing query) → (measure:\nmetric:\u003chash\u003e) → (propose: recipe emitting candidates) → (judge: lifecycle)\n→ (bump: content-addressed artifact version). Declare loops like insight\ndescriptors: one LOOP_REGISTRY where each loop names its five parts. New\nloop = one registry entry, and loop health itself is queryable (\"which\nloops are starved for judgments\", \"which loop changed an artifact this\nmonth\"). This is the capstone construct: polylogue doesn't just observe its\nown use — it schedules its own improvement under operator governance.\n\n## Part B — Human-in-the-loop UX (judgment as a designed surface)\n\nPrinciples: bounded attention (daily budget cap, never nag); highest\ndecision-value first (L10 ordering); blinding by default (provenance masked\nuntil verdict); every judgment visibly DOES something (show the ranking\nshift/label change immediately — perceived efficacy sustains the habit);\nskip is signal (declines are low-stakes data).\n\nSurfaces:\n- **Judgment inbox**: capped daily queue, one-keystroke verdicts, fzf\n two-pane for comparisons (resorter sessions), Anki-like economics.\n- **Micro-moments in existing flows**: after read/search — one-key \"was\n this what you were looking for?\" (feeds L1); finding notification —\n inline accept/reject (feeds L5); session close in `continue` flows —\n one-tap outcome (solved/partial/abandoned — gold for PACK-E).\n- **Ambient disambiguation**: did-you-mean moments double as taxonomy\n votes (which interpretation you picked is a label judgment).\n- **Deliberate sessions**: \"rank this week's sessions by importance\" as a\n 5-minute swipe activity; output = importance ranking with uncertainty.\n\n## Part C — Operationalizations (the three challenged constructs)\n\n**Abandonment** (survival analysis needs event-vs-censored, which rescues\nthe definition): a goal episode is ABANDONED(H) if the session ends without\nterminal success signals (PACK-E proxies; later outcome annotations) AND no\nlineage descendant AND no same-question-cluster session within horizon H.\nRecent sessions that haven't had H time yet are RIGHT-CENSORED — exactly\nwhat Kaplan-Meier handles; naive \"ended = abandoned\" counting is the bug\nthe estimator exists to avoid. Time-indexed by construction (as-of epoch).\nH is part of the metric hash. Ladder: v1 proxies (structural) → v2 outcome\nannotations → v3 goal-graph future cone.\n\n**Recall-pack \"help\"** (multi-outcome; the unknown-unknowns problem is\nreal and partially solvable):\n h1 Direct usage: injected item cited/used downstream (L1 signal). Weakest\n (usage ≠ value) but cheap.\n h2 Re-explanation reduction: D9 metric on matched sessions.\n h3 Outcome delta: pre-registered A/B (mechanism J) — the only causal tier.\n h4 **Rediscovery-miss detection** (the unknown-unknowns half-answer):\n when an agent laboriously re-derives content that WAS in the archive\n but NOT injected (embedding match between derived conclusions and\n existing archive content), that is a measurable recall MISS — the\n absence-of-context cost made visible retrospectively. Doesn't catch\n \"never re-derived, just failed\" (truly unknown unknowns — name this\n limit honestly), but converts a chunk of unknown-unknowns into\n known-misses. Composes with L7 (same re-derivation detector).\n\n**Correction absorption** (the challenge dissolves the naive metric and\nleaves a better one): \"turns until absorbed\" is NOT about waiting — it\nmeasures how many exchanges exhibit the uncorrected behavior before it\nstops. Operationalize behaviorally, never by acknowledgment (models say\n\"you're right\" and repeat the mistake — acknowledgment is noise):\n c1 Correction event: PACK-D annotation (T3; T2 bootstrap for stereotyped\n forms).\n c2 Violation predicate: what the correction forbids/requires. A useful\n SUBSET compiles to checkable rules (\"use X not Y\", \"stop doing Z\" →\n string/pattern checks on subsequent outputs) — rule-tier, honest;\n the rest needs judged compliance over pattern-extracted\n (correction, response) pairs.\n c3 Absorption-in-session: violation rate → 0 before session end; time-to-\n last-violation is the score (turns metric emerges, correctly grounded).\n c4 **Recurrence across sessions**: the SAME correction needed again later\n (embedding-matched correction clusters) = the durable steerability\n failure, and arguably the metric that matters most — c3 without c4\n rewards models that comply locally and forget.\n\n## Part D — Exit codes + toolchain semantics (empirical update)\n\nVERIFIED against live session JSONL (~/.claude/projects/-realm-project-\npolylogue): foreground Bash failures carry \"Exit code N\" as tool_result\ntext prefix (4067× code 1, 1092× code 2, 205× code 0, plus 128/144/8...);\nbackground task completions carry \"completed (exit code N)\" (3184×). The\nearlier \"not available for Claude Code\" claim is WRONG. Extraction is\nT2 rule-tier: parse the prefix; caveat — success usually carries NO marker,\nso exit-0 must be recorded as INFERRED (is_error=false, no prefix) vs\nPARSED (explicit) — the classifier distinguishes the two provenances.\nFeeds tool_result_exit_code backfill for the largest origin in the archive.\n\nToolchain semantics (operator ask): PACK-A grows a built-in toolchain\nregistry — command → tool identity → language/ecosystem (pytest→python,\ncargo→rust, tsc→typescript, go test→go, ruff/mypy→python-qa...), so\nanalytics primitives like \"failure rate by language\", \"test latency by\necosystem\", \"which stack causes the most retry spirals\" come free.\nRegistry = data file + classifier:\u003chash\u003e, extensible per-archive via the\nsame residue loop (L2).\n\n## Authoritative corrective contract (2026-07-13)\n\nEach spec declares owner/authority, watch inputs, metric/definition refs, proposer, judge/routing\npolicy, artifact target/version, schedule/backoff, budget, candidate queue, and promotion rule.\nRuntime state records last observation/proposal/judgment/artifact bump, starvation/failure/paused\nstate, retry/backoff, and receipts. Pilot L1 recall relevance by pointing to 37t.17's implementation\nand evidence stream; do not build parallel read-access analytics. Pilot L2 classifier residue with a\ndifferent proposer/artifact type. More loops activate only after both run without per-loop scheduler\nor state forks and pass budget/authority review.","acceptance_criteria":"## Corrective acceptance criteria (2026-07-13)\n\nL1 and L2 register through one declaration and execute through one scheduler/state machine. Their\nwatch, proposal, judgment, bump, pause/failure/starvation, backoff, and budget receipts are visible.\nRemoving the shared scheduler/state path breaks both pilot tests. No other loop has an active daemon\nschedule at closure; horizon specs remain declarative.","notes":"IMPLEMENTATION HOMES assigned 2026-07-13: L7 compaction-regret -\u003e polylogue-gjg.3 (pre-existing design, richer); L1 recall-relevance -\u003e polylogue-37t.17; config loops (1jc/37t.10) register as instances. The registry declares; those beads implement.\nREGISTRY ADDITIONS 2026-07-13: three more loop instances designed later the same session — L11 DECLARATION RECALL (37t.2 adoption note: retrospective PACK-D detectors find undeclared corrections/claims, diff vs declared markers, per-agent recall score feeds skill/preamble revisions); L12 CURRICULUM (xv1u: watch query-run telemetry -\u003e measure recipe value -\u003e propose curriculum diff -\u003e operator gate -\u003e skill version bump); L13 CAPTURE-COVERAGE ERROR (3uw: sessions-known-to-exist vs archived, per origin, budgeted alerts). All follow the 5-tuple; register, do not fork.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:56:03Z","created_by":"Sinity","updated_at":"2026-07-13T05:45:39Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.11","depends_on_id":"polylogue-37t.17","type":"related","created_at":"2026-07-13T07:48:27Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.11","depends_on_id":"polylogue-rxdo","type":"parent-child","created_at":"2026-07-13T04:56:02Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-rxdo.11","title":"Improvement-loop registry with two governed operational pilots","description":"Capstone construct from .agent/scratch/closed-loops-design-2026-07-13.md. Every closed-loop mechanism is the same 5-tuple: watch (standing query, rxdo.5) -\u003e measure (metric:\u003chash\u003e) -\u003e propose (recipe emitting CANDIDATES, never auto-apply) -\u003e judge (lifecycle) -\u003e bump (content-addressed artifact version). Declare loops like insight descriptors in one LOOP_REGISTRY; loop health itself queryable (starved-for-judgments, artifact-changed-this-month). Ten grounded instances enumerated in the doc: L1 recall relevance (delivery receipts -\u003e ranker), L2 classifier residue (confessed-unclassified -\u003e rules), L3 judge calibration, L4 orchestration-prompt outcomes (tonight's fanout = seed corpus), L5 detector precision, L6 title CTR (position-bias caveat named), L7 COMPACTION REGRET (embedding-match later re-derivations vs discarded prefix \u2014 what forgetting cost, as a number), L8 cost routing (needs J experiments else observational), L9 ontology drift (dve1), L10 elicitation-value meta-loop (judgment decision-impact computable retrospectively by re-deriving dependents without it). Non-handwave rule encoded: a loop qualifies only with named signal source + content-addressed metric + candidate proposer + judge gate. DEP: rxdo.5 standing queries, rxdo.9.1 metric hashes.\n\n## Authoritative corrective scope (2026-07-13)\n\nRetain ImprovementLoopSpec and a declare-once registry, but activate only two heterogeneous pilots\nuntil the shared operational contract is proven. The remaining loop designs are durable horizon\ninstances, not thirteen daemon loops.","design":"# Closed-loop mechanisms + HITL UX + operationalizations (2026-07-13)\n\n## Part A \u2014 The loop inventory (each grounded: signal \u2192 metric \u2192 proposer \u2192 gate \u2192 versioned artifact)\n\nThe non-handwaving rule: a loop qualifies only if its SIGNAL already exists\nor is landing in a named PR/bead, its METRIC is content-addressable, its\nPROPOSER emits candidates (never auto-applies), and a JUDGE gate versions\nthe artifact.\n\nL1. **Recall relevance loop.** Signal: context-delivery receipts (landed\nminimal leg #2792; 37t.22) log what was injected; usage detection = injected\nrefs cited/quoted/re-read in subsequent turns (text+embedding match). Metric:\nper-item usage rate. Proposer: retrieval ranker reweighting (implicit\nrelevance feedback \u2014 proven search-engine tech). Gate: ranker:\u003chash\u003e bump.\n\nL2. **Classifier residue loop.** Signal: PACK-A/B classifiers confess\n\"unclassified\" residue. Metric: residue volume per command shape (standing\nquery). Proposer: agent drafts rules for top residue clusters. Gate: judged \u2192\nclassifier:\u003chash\u003e vN+1. The classifier improves from its own confessed\nignorance; fully mechanical.\n\nL3. **Judge calibration loop** (= rxdo.9.12/.15). Signal: agent-judge vs\noperator-gold overlap. Metric: per-judge per-dimension agreement. Proposer:\nweight/routing updates. Gate: operator confirms routing policy changes.\n\nL4. **Orchestration prompt loop.** Signal: lane prompts are stored artifacts\n(fanout-prompts/); outcomes measurable (PR merged, review iterations, cost,\nconvergence time). Metric: prompt-feature \u00d7 outcome correlations. Proposer:\nfindings (\"lanes with explicit AC restatement converge faster\") + template\ndiffs. Gate: operator adopts template vN. Tonight's 30-lane fanout is the\nseed corpus.\n\nL5. **Detector precision loop.** Signal: pathology/finding detectors emit\ncandidates; judgments record accept/reject. Metric: per-detector precision\n(standing query). Proposer: threshold/rule adjustments. Gate: judged \u2192\ndetector version bump. Same shape as L2 \u2014 detectors ARE classifiers.\n\nL6. **Title/summary CTR loop.** Signal: rxdo.3 query-runs + subsequent read\nevents = implicit click-through on search results. Metric: per-title-source\nCTR (30h synthesized vs origin titles). Proposer: title-generation strategy\nranking. Gate: strategy flag flip. Honest caveat: position bias \u2014 log rank\nat click time (rxdo.3 sample_refs carry order) or the metric lies.\n\nL7. **Compaction regret loop.** Signal: compaction boundaries (column\nexists) + discarded-prefix content vs agent's LATER re-derivations\n(embedding match between post-boundary content and discarded prefix).\nMetric: regret = re-derived mass that was discarded. Proposer: compaction\npolicy tuning (what to preserve). Gate: policy version. This one is novel\nand fully measurable \u2014 \"what did forgetting cost\" as a number.\n\nL8. **Cost-routing loop.** Signal: routing decisions + judged outcomes.\nMetric: tier efficiency frontier. Proposer: routing advisor updates. Gate:\noperator adopts. Needs J experiments to de-confound task mix; without them,\nlabel observational.\n\nL9. **Ontology drift loop** (= dve1 as designed).\nL10. **Elicitation-value loop** (meta). Signal: every judgment's downstream\nimpact is computable retrospectively \u2014 re-derive the dependent objects\n(rankings, labels) without that judgment and diff. Metric: decision-impact\nper judgment type. Proposer: asking-policy update (solicit\nhighest-expected-impact next, not just max-entropy). Gate: policy version.\nActive learning that optimizes for decisions, not information.\n\n**The unifying abstraction \u2014 improvement loops as first-class objects.**\nEvery loop above is the same 5-tuple: (watch: standing query) \u2192 (measure:\nmetric:\u003chash\u003e) \u2192 (propose: recipe emitting candidates) \u2192 (judge: lifecycle)\n\u2192 (bump: content-addressed artifact version). Declare loops like insight\ndescriptors: one LOOP_REGISTRY where each loop names its five parts. New\nloop = one registry entry, and loop health itself is queryable (\"which\nloops are starved for judgments\", \"which loop changed an artifact this\nmonth\"). This is the capstone construct: polylogue doesn't just observe its\nown use \u2014 it schedules its own improvement under operator governance.\n\n## Part B \u2014 Human-in-the-loop UX (judgment as a designed surface)\n\nPrinciples: bounded attention (daily budget cap, never nag); highest\ndecision-value first (L10 ordering); blinding by default (provenance masked\nuntil verdict); every judgment visibly DOES something (show the ranking\nshift/label change immediately \u2014 perceived efficacy sustains the habit);\nskip is signal (declines are low-stakes data).\n\nSurfaces:\n- **Judgment inbox**: capped daily queue, one-keystroke verdicts, fzf\n two-pane for comparisons (resorter sessions), Anki-like economics.\n- **Micro-moments in existing flows**: after read/search \u2014 one-key \"was\n this what you were looking for?\" (feeds L1); finding notification \u2014\n inline accept/reject (feeds L5); session close in `continue` flows \u2014\n one-tap outcome (solved/partial/abandoned \u2014 gold for PACK-E).\n- **Ambient disambiguation**: did-you-mean moments double as taxonomy\n votes (which interpretation you picked is a label judgment).\n- **Deliberate sessions**: \"rank this week's sessions by importance\" as a\n 5-minute swipe activity; output = importance ranking with uncertainty.\n\n## Part C \u2014 Operationalizations (the three challenged constructs)\n\n**Abandonment** (survival analysis needs event-vs-censored, which rescues\nthe definition): a goal episode is ABANDONED(H) if the session ends without\nterminal success signals (PACK-E proxies; later outcome annotations) AND no\nlineage descendant AND no same-question-cluster session within horizon H.\nRecent sessions that haven't had H time yet are RIGHT-CENSORED \u2014 exactly\nwhat Kaplan-Meier handles; naive \"ended = abandoned\" counting is the bug\nthe estimator exists to avoid. Time-indexed by construction (as-of epoch).\nH is part of the metric hash. Ladder: v1 proxies (structural) \u2192 v2 outcome\nannotations \u2192 v3 goal-graph future cone.\n\n**Recall-pack \"help\"** (multi-outcome; the unknown-unknowns problem is\nreal and partially solvable):\n h1 Direct usage: injected item cited/used downstream (L1 signal). Weakest\n (usage \u2260 value) but cheap.\n h2 Re-explanation reduction: AI-D9 metric on matched sessions.\n h3 Outcome delta: pre-registered A/B (mechanism J) \u2014 the only causal tier.\n h4 **Rediscovery-miss detection** (the unknown-unknowns half-answer):\n when an agent laboriously re-derives content that WAS in the archive\n but NOT injected (embedding match between derived conclusions and\n existing archive content), that is a measurable recall MISS \u2014 the\n absence-of-context cost made visible retrospectively. Doesn't catch\n \"never re-derived, just failed\" (truly unknown unknowns \u2014 name this\n limit honestly), but converts a chunk of unknown-unknowns into\n known-misses. Composes with L7 (same re-derivation detector).\n\n**Correction absorption** (the challenge dissolves the naive metric and\nleaves a better one): \"turns until absorbed\" is NOT about waiting \u2014 it\nmeasures how many exchanges exhibit the uncorrected behavior before it\nstops. Operationalize behaviorally, never by acknowledgment (models say\n\"you're right\" and repeat the mistake \u2014 acknowledgment is noise):\n c1 Correction event: PACK-D annotation (T3; T2 bootstrap for stereotyped\n forms).\n c2 Violation predicate: what the correction forbids/requires. A useful\n SUBSET compiles to checkable rules (\"use X not Y\", \"stop doing Z\" \u2192\n string/pattern checks on subsequent outputs) \u2014 rule-tier, honest;\n the rest needs judged compliance over pattern-extracted\n (correction, response) pairs.\n c3 Absorption-in-session: violation rate \u2192 0 before session end; time-to-\n last-violation is the score (turns metric emerges, correctly grounded).\n c4 **Recurrence across sessions**: the SAME correction needed again later\n (embedding-matched correction clusters) = the durable steerability\n failure, and arguably the metric that matters most \u2014 c3 without c4\n rewards models that comply locally and forget.\n\n## Part D \u2014 Exit codes + toolchain semantics (empirical update)\n\nVERIFIED against live session JSONL (~/.claude/projects/-realm-project-\npolylogue): foreground Bash failures carry \"Exit code N\" as tool_result\ntext prefix (4067\u00d7 code 1, 1092\u00d7 code 2, 205\u00d7 code 0, plus 128/144/8...);\nbackground task completions carry \"completed (exit code N)\" (3184\u00d7). The\nearlier \"not available for Claude Code\" claim is WRONG. Extraction is\nT2 rule-tier: parse the prefix; caveat \u2014 success usually carries NO marker,\nso exit-0 must be recorded as INFERRED (is_error=false, no prefix) vs\nPARSED (explicit) \u2014 the classifier distinguishes the two provenances.\nFeeds tool_result_exit_code backfill for the largest origin in the archive.\n\nToolchain semantics (operator ask): PACK-A grows a built-in toolchain\nregistry \u2014 command \u2192 tool identity \u2192 language/ecosystem (pytest\u2192python,\ncargo\u2192rust, tsc\u2192typescript, go test\u2192go, ruff/mypy\u2192python-qa...), so\nanalytics primitives like \"failure rate by language\", \"test latency by\necosystem\", \"which stack causes the most retry spirals\" come free.\nRegistry = data file + classifier:\u003chash\u003e, extensible per-archive via the\nsame residue loop (L2).\n\n## Authoritative corrective contract (2026-07-13)\n\nEach spec declares owner/authority, watch inputs, metric/definition refs, proposer, judge/routing\npolicy, artifact target/version, schedule/backoff, budget, candidate queue, and promotion rule.\nRuntime state records last observation/proposal/judgment/artifact bump, starvation/failure/paused\nstate, retry/backoff, and receipts. Pilot L1 recall relevance by pointing to 37t.17's implementation\nand evidence stream; do not build parallel read-access analytics. Pilot L2 classifier residue with a\ndifferent proposer/artifact type. More loops activate only after both run without per-loop scheduler\nor state forks and pass budget/authority review.","acceptance_criteria":"## Corrective acceptance criteria (2026-07-13)\n\nL1 and L2 register through one declaration and execute through one scheduler/state machine. Their\nwatch, proposal, judgment, bump, pause/failure/starvation, backoff, and budget receipts are visible.\nRemoving the shared scheduler/state path breaks both pilot tests. No other loop has an active daemon\nschedule at closure; horizon specs remain declarative.","notes":"IMPLEMENTATION HOMES assigned 2026-07-13: L7 compaction-regret -\u003e polylogue-gjg.3 (pre-existing design, richer); L1 recall-relevance -\u003e polylogue-37t.17; config loops (1jc/37t.10) register as instances. The registry declares; those beads implement.\nREGISTRY ADDITIONS 2026-07-13: three more loop instances designed later the same session \u2014 L11 DECLARATION RECALL (37t.2 adoption note: retrospective PACK-D detectors find undeclared corrections/claims, diff vs declared markers, per-agent recall score feeds skill/preamble revisions); L12 CURRICULUM (xv1u: watch query-run telemetry -\u003e measure recipe value -\u003e propose curriculum diff -\u003e operator gate -\u003e skill version bump); L13 CAPTURE-COVERAGE ERROR (3uw: sessions-known-to-exist vs archived, per origin, budgeted alerts). All follow the 5-tuple; register, do not fork.\n\nL11 AUTHORITY: declaration-recall measures missed declarations and may propose skill/preamble revisions. It does not make markers mandatory or authorize blocking hooks. Any enforcement waits for the 37t.2 experiment receipt plus explicit operator adoption as a revocable policy assertion.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:56:03Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.11","depends_on_id":"polylogue-37t.17","type":"related","created_at":"2026-07-13T07:48:27Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.11","depends_on_id":"polylogue-rxdo","type":"parent-child","created_at":"2026-07-13T04:56:02Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-avna.2","title":"Alphabet pack v1: action-semantics + failure-kind rule classifiers (PACK-A/B)","description":"Critical path for the pattern program (grounding catalog: load-bearing for 6/16 analyses, pure T2, no judge dependency). PACK-A over actions view (tool+command+path): test-run, build, lint, format, typecheck, vcs:commit/push/rebase/merge, deps-install, db-op, service-op. PACK-B over exit_code + is_error + output-text rules: assertion-fail, compile-error, timeout, oom, permission-denied, network-error, env-breakage (ambiguous residue explicitly unclassified — never guess). Every classifier versioned + content-addressed (classifier:\u003chash\u003e) so match counts pin classifier versions in query hashes. AC: \u003e=95% live-archive test-run/build command coverage (measured, cited); misclassification sample judged; catalog patterns #1 and #15 compile+run on fixtures using only registered tokens.","design":"PACK-A classifies action semantics over typed action/tool/command/path evidence: test-run, build,\nlint, format, typecheck, VCS operations, dependency installation, database operations, and service\noperations. PACK-B classifies failure kinds from structural `is_error`, provider/parsed numeric exit\ncodes, typed background status, and bounded output rules: assertion failure, compile error, timeout,\nOOM/killed, permission, network, and environment breakage. Ambiguous residue remains unclassified.\nEach pack and toolchain mapping is a content-addressed classifier definition with authority and\nevidence refs. Parsed code 0 and structural success-with-unknown-code remain distinct.\n\nThese packs are the actions-only vocabulary consumed by avna PatternDefinition. Pattern execution\npins classifier hashes and EventOrderSpec, exposes captures/measures/overlap policy, and must prove\nSQL-vs-Python metamorphic parity before mixed-stream tokens are admitted. L2 in rxdo.11 owns the\nclassifier-residue improvement loop; pack implementation does not create a second loop.","acceptance_criteria":"1. PACK-A/B declarations are content-addressed, discoverable, and version all rule/toolchain inputs.\n2. Live-corpus measurement shows \u003e=95% coverage for declared test/build commands, with cited frame\n and a judged error sample; residue and ambiguous cases are reported rather than guessed.\n3. Structural is_error, parsed numeric code, typed background status, and unknown-code success remain\n distinguishable in seeded fixtures, including killed/OOM and environment breakage.\n4. Grounding-catalog patterns #1 and #15 compile and run using only registered actions-only tokens,\n with captures and measures.\n5. SQL and Python executions agree under metamorphic rewrites and the same EventOrderSpec; removing a\n production classifier rule changes/fails the proof. Mixed-stream syntax remains deferred.","notes":"EMPIRICAL UPDATE (operator observation confirmed, earlier claim WRONG): Claude Code exit codes ARE extractable from session JSONL — foreground Bash failures carry 'Exit code N' as tool_result text prefix (live archive: 4067x code-1, 1092x code-2, 205x code-0, plus 128/144/8), background task completions carry 'completed (exit code N)' (3184x). PACK-B gains a T2 extraction rule for the largest origin; MUST distinguish PARSED exit-0 (explicit prefix) from INFERRED exit-0 (is_error=false, no marker) as separate provenances. Also SCOPE ADDITION (operator): built-in toolchain registry — command -\u003e tool identity -\u003e language/ecosystem (pytest-\u003epython, cargo-\u003erust, tsc-\u003etypescript, ruff/mypy-\u003epython-qa) as a data file + classifier:\u003chash\u003e, enabling analytics primitives (failure rate by language, retry spirals by stack); extensible per-archive via the classifier-residue loop (rxdo.11 L2).\nEXIT-CODE GROUNDING REFINED (operator correction, verified): Claude Code supplies a TYPED is_error boolean on every tool_result (live archive: 60,266 false / 5,630 true) — success/failure is T1 STRUCTURAL, not inferred; my earlier parsed-vs-inferred caveat applies only to the NUMERIC code. Refined grounding: (a) is_error = T1 success/failure signal, always present; (b) numeric exit codes = T2 text parse where present — foreground failures carry 'Exit code N' prefixes, background completions carry 'completed (exit code 0)' (3,186x); (c) background task notifications ALSO carry typed-ish status tags: completed 8,612 / failed 695 / KILLED 3,794 (the killed class = OOM/freeze forensics gold, cf. tonight's incidents); (d) is_error=false without numeric marker = success-with-unknown-code — harmless: PACK-B failure kinds only need codes on failures, which carry them.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:32:11Z","created_by":"Sinity","updated_at":"2026-07-13T05:54:45Z","dependencies":[{"issue_id":"polylogue-avna.2","depends_on_id":"polylogue-avna","type":"parent-child","created_at":"2026-07-13T04:32:11Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} -{"_type":"issue","id":"polylogue-avna.1","title":"Pattern-analysis grounding catalog: 16 analyses, tokens, tiers, soundness verdict","description":"Full catalog: .agent/scratch/pattern-analysis-grounding-2026-07-13.md. Sixteen analyses each grounded (pattern expression, tokens with tiers + grounding sources, yield grain, operators proven necessary). SOUNDNESS: 14/16 representable with alphabet packs A-E; 2 need phase-2 M6 join (honest v1 approximations); 3 correctly pattern+relational compositions. NEW requirements named: token unions; match spans as registered ObjectRef judgment targets; MEASURES aggregations; unified MIXED unit stream as default alphabet. Demo work must cite these groundings.","design":"# Pattern-analysis grounding catalog (2026-07-13)\n\nPurpose: enumerate every pattern-language analysis named in tonight's design\nthreads and ground each precisely — pattern expression, tokens with authority\ntiers, grounding sources, yield grain, and which operators/tokens it proves\nnecessary. This is the soundness proof-by-enumeration for the avna row-pattern\ndesign + alphabet.\n\nTiers: T1=structural (parser-asserted columns) · T2=rule classifier\n(content-addressed classifier:\u003chash\u003e) · T3=judged annotation (candidate→judge\nlifecycle) · D=derived interaction token (computed from structure,\nclassifier-named).\n\n## Alphabet packs\n\n- **PACK-A action semantics (T2)**: test-run, build, lint, format, typecheck,\n vcs:commit|push|rebase|merge, deps-install, db-op, service-op. Grounding:\n actions view (tool, command, path); versioned rule sets, classifier:\u003chash\u003e.\n- **PACK-B failure kinds (T2, T3 refinement)**: assertion-fail, compile-error,\n timeout, oom, permission-denied, network-error, env-breakage. Grounding:\n tool_result_exit_code + tool_result_is_error (T1) + output-text rules;\n ambiguous residue → T3.\n- **PACK-C interaction tokens (D)**: gap(t) = inter-message gap \u003e t with\n same-session continuation (honest name \"gap\", NOT \"confusion\" —\n away-from-keyboard is structurally undecidable; docs must say proxy);\n boundary:resume (T1 — column exists today); context-injection (T1 once\n 37t delivery receipts land).\n- **PACK-D message speech-acts (T3; some T2 bootstrap)**: question,\n instruction, correction, approval, completion-claim (T2 prior art exists:\n demo/receipts.py high-specificity phrase rules + seeded sampling),\n compliance-with-correction (T3).\n- **PACK-E outcome proxies (T2, from the avna resolution note)**:\n final-action-failed, edits-never-committed, ends-mid-error. Session grain.\n\n## The catalog\n\nEach entry: pattern · tokens(tier) · yield · requires · verdict.\n\n1. **Retry spiral** — `match(( a:edit -\u003e a:test-run AND fail:assertion ){3,})`\n Tokens: edit(T1), test-run(A/T2), assertion-fail(B/T2). Yield: match spans\n per session (start/end action ids, iteration count as measure).\n Requires: quantifiers(M1), groups, captures(M3). VERDICT: representable\n with alphabet v1 (packs A+B) + M1/M3. NOTE the contrast class #16 — spiral\n vs healthy red-green differs ONLY by failure-kind mix and terminal state;\n without PACK-B the pathology detector is dishonest.\n\n2. **Same-target thrash** — `match(e1=a:edit -\u003e fail -\u003e e2=a:edit[path=e1.path] -\u003e\n fail -\u003e e3=a:edit[path=e1.path])`. Tokens: edit(T1), fail(T1), path\n equality across steps. Requires: M6 cross-step variable binding\n (MATCH_RECOGNIZE DEFINE-class; beyond regular languages). VERDICT: NOT\n representable in v1; the join operator is proven necessary by this + #7.\n Phase-2 as designed.\n\n3. **Churn→abandon** — `match(m:correction -\u003e m:correction -\u003e[within:10m] $)`\n over the MESSAGE alphabet, session must end (anchor) with outcome proxy\n abandoned(E/T2 or T3). Tokens: correction(D/T3), $ anchor, outcome proxy.\n Requires: message alphabet (M7), anchors (M5), absence-free. VERDICT:\n representable with M5+M7 + PACK-D correction. The [within] link already\n exists.\n\n4. **67ac claims-without-verification** — `match(m:completion-claim -\u003e[no:\n a:test-run|a:build|a:typecheck|a:lint] $)`. Tokens: completion-claim\n (D/T2 — receipts.py rules), verification = UNION of PACK-A members (an\n alphabet feature: token unions/classes, trivially regex-native). Requires:\n absence links (M2), anchors (M5), MIXED alphabet in one pattern (messages\n AND actions interleaved in one ordered stream — the session event stream\n is naturally mixed; design decision: the default alphabet is the unified\n ordered unit stream, tokens carry their unit kind). VERDICT: representable;\n proves M2+M5+mixed-stream. This replaces 67ac's bespoke sampling pipeline\n with one query — the flagship receipt.\n\n5. **Fix-span extraction (D3 feeder)** — `match(f=fail:any -\u003e ... -\u003e\n s=a:test-run AND ok)` with captures f..s exported as spans. Requires:\n captures/match-as-unit (M3), lazy gap semantics, overlap policy (M8 —\n first-fix vs all-fixes changes counts). VERDICT: representable; proves\n M3+M8. Spans feed the fix-embedding index.\n\n6. **Workflow shape mining** — not a single pattern: frequent-sequence mining\n over the PACK-A token stream, THEN each mined shape becomes a match()\n query users can run/save (query:\u003chash\u003e). Requires: the alphabet only;\n mining is an analysis recipe (rxdo.8), not a language feature. VERDICT:\n language is sufficient as target; mining lives in recipes. Upgrades\n workflow_shape_distribution from precomputed to queryable.\n\n7. **Fabrication screen (continuous)** — claim of a performed action with no\n matching action row: `match(c=m:completion-claim[claims-action] -\u003e[no:\n a:*[matches(c.claimed_target)]] $)` — requires extracting the CLAIMED\n TARGET from the message (T3 extraction; T2 for stereotyped claims) and a\n join between the claim's extracted target and action predicates (M6\n variant with extracted-field binding). VERDICT: v1 approximation WITHOUT\n join: claim followed by NO action of the claimed KIND at all (kind from\n claim classifier), catches the gross case (claimed test-run, zero\n test-runs after) — representable with M2 + PACK-D; exact-target matching\n needs M6+T3 extraction. Both stages valuable; stage honestly.\n\n8. **Steerability** — `match(c=m:correction -\u003e (m:assistant AND NOT\n compliance(c)){0,k} -\u003e m:assistant AND compliance(c))` — per-model\n turns-to-incorporate. Tokens: correction(T3), compliance-with-THAT-\n correction (T3 pairwise judgment — agent-judged, K/L machinery). Requires:\n M1 bounded quantifier, M6-lite (compliance references the captured\n correction — but as a JUDGMENT input, not a structural join: the judge\n receives (correction, response) pairs). VERDICT: pattern extracts the\n candidate spans (representable with M1+M3); the compliance labeling is a\n judgment recipe over the extracted pairs. Two-stage: pattern → judge —\n and that composition (match spans as judgment work-queues) is itself a\n design requirement now named: MATCH SPANS MUST BE VALID JUDGMENT TARGETS\n (ObjectRef kind for match spans).\n\n9. **Gap-after-output (confusion proxy)** — `match(m:assistant[tokens\u003eT] -\u003e\n d:gap(5m))`. Tokens: gap(C/D), token counts (T1). VERDICT: representable\n with PACK-C + mixed stream; the honest-naming rule does the epistemics.\n\n10. **Resume-boundary cost** — `match(^ -\u003e d:boundary:resume -\u003e m:*{0,k})`\n measuring re-establishment tokens after compaction. Tokens:\n boundary:resume (T1 — EXISTS), token/cost measures (T1). VERDICT:\n representable TODAY structurally; measures need M3 capture-with-measures\n (MEASURES clause — add to M3 scope: aggregations over matched span).\n\n11. **Unresolved-at-end** — cross-session future cone (avna resolution note).\n VERDICT: NOT a single-session pattern; v1 uses PACK-E proxies as session\n tokens; the goal-graph (v3) owns the real semantics. Pattern language\n scope boundary CORRECTLY drawn at session; cross-session composition\n happens in the relational layer (pipeline over lineage + D1 clusters).\n\n12. **Subagent fan-out efficiency** — sessions spawning N subagents, k fail.\n The lineage is a TREE; sequence patterns see only the spawn events\n (`a:subagent{3,}` works for counting spawns — T1 token exists) but\n child-session outcomes are cross-session joins. VERDICT: spawn-side\n representable; outcome joins are relational (pipeline: match | join\n children | ...). Tree-pattern language remains frontier, correctly\n out of scope.\n\n13. **Verification-before-claim rate** — the anti-67ac positive discipline:\n `match(a:verification -\u003e m:completion-claim)` vs #4 as a ratio (rigor\n mechanism B: numerator/denominator result-set refs). VERDICT:\n representable; the RATIO is rxdo.9.2's machinery, not the language's.\n\n14. **Interrupted→resumed continuation quality** — session ends mid-error\n (PACK-E) AND lineage child exists AND child reaches success. Cross-\n session again: session-level tokens + relational join on lineage.\n VERDICT: two patterns + a pipeline join; representable as composition.\n\n15. **Permission-denial loops** — `match((a:* AND fail:permission-denied)\n {2,})`. Tokens: PACK-B permission-denied. VERDICT: representable with\n M1 + PACK-B. (Tonight's classifier-denial events would have matched.)\n\n16. **Healthy red-green (contrast class)** — `match((a:edit -\u003e a:test-run AND\n fail:assertion){1,} -\u003e a:test-run AND ok -\u003e a:vcs:commit)` — same tokens\n as #1 plus terminal success+commit. VERDICT: representable; exists to\n keep #1 honest (pathology = spiral WITHOUT this terminal).\n\n## Operator-requirement matrix (what the enumeration proves)\n\n- M1 quantifiers: required by 1, 8, 15, 16.\n- M2 absence links: required by 4, 7; nothing else substitutes.\n- M3 captures + MEASURES: required by 1, 5, 8, 10 (MEASURES scope addition).\n- M5 anchors: required by 3, 4, 10.\n- M6 cross-step binding: required by 2, 7-exact; correctly phase-2 (nothing\n in the v1 demo set hard-blocks on it; 7 has an honest v1 approximation).\n- M7 message alphabet + MIXED unified stream: required by 3, 4, 8, 9, 10 —\n the mixed ordered unit stream should be the DEFAULT alphabet (decision).\n- M8 overlap policy: required by 5 (and any counted match).\n- NEW (named by this exercise): token unions/classes (4); match spans as\n ObjectRef judgment targets (8); MEASURES aggregations (10); session-scope\n boundary with relational composition for cross-session (11, 12, 14).\n\n## Alphabet-requirement summary\n\nPACK-A and PACK-B are load-bearing for nearly everything (1, 4, 5, 13, 15,\n16) — they are the v1 alphabet work and pure T2 rule-classifier packs:\ncheap, deterministic, content-addressed, no judge dependency. PACK-C needs\none derived token (gap) + two existing columns. PACK-D has T2 prior art for\nits hardest member (completion-claim) and T3 for the rest — it gates 3, 4,\n7, 8 and arrives via the dve1 seed ontologies. PACK-E is three T2 rules.\n\n## Soundness verdict\n\n14 of 16 analyses are representable within the proposed design (session-\nscoped row patterns + unified mixed unit stream + alphabet packs A–E);\n2 (same-target thrash, exact-target fabrication) require the phase-2 M6\njoin and have honest v1 approximations; 3 (unresolved, fan-out outcomes,\ninterrupted→resumed) correctly live as pattern+relational compositions\nrather than language features — the session-scope boundary held under\nenumeration. No analysis required a mechanism outside the already-designed\nM1–M8 + four named additions (unions, span-refs-as-judgment-targets,\nMEASURES, mixed-default-alphabet). The DSL design is sound for the demo\nprogram; the alphabet packs are the actual critical path.\n\n## Authoritative corrective contract (2026-07-13)\n\nThe catalog is the requirements traceability artifact for PatternDefinition, not an alternate language\nspec. Each analysis row must bind tokens to authority tiers and classifier/schema refs, embed\nEventOrderSpec (partition, lineage, order source, ties, evidence grade, horizon), state result/match\ngrain, captures/measures/overlap policy, identify pattern versus relational stages, and name the honest\nv1 approximation when exact semantics require M6 or mixed streams. PACK-A/B actions-only analyses are\nthe executable v1 gate; PACK-C-E and mixed streams remain later until that parity proof lands.","acceptance_criteria":"1. All 16 catalog rows contain expression, typed tokens, authority/grounding refs, EventOrderSpec,\n yield grain, captures/measures/overlap, required mechanism, and soundness verdict.\n2. Every row maps to a named implementation Bead or explicitly documented relational composition;\n exact-target M6 and mixed-stream gaps use honest staged approximations.\n3. Catalog analyses #1 and #15 execute through PACK-A/B fixtures with SQL/Python parity; #5 exposes a\n match span usable as a judgment/evidence ref.\n4. Same-timestamp/tie and changed classifier-version fixtures alter grade/identity rather than silently\n preserving a match.\n5. A generated/checkable support matrix fails if an analysis names an unregistered token/mechanism.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:31:46Z","created_by":"Sinity","updated_at":"2026-07-13T05:58:32Z","dependencies":[{"issue_id":"polylogue-avna.1","depends_on_id":"polylogue-avna","type":"parent-child","created_at":"2026-07-13T04:31:45Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-avna","title":"Order-explicit row patterns with typed match sets","description":"Design capture: .agent/scratch/dsl-pattern-matching-design-2026-07-13.md. VERIFIED current state: seq() = gap-tolerant ordered subsequence over action rows with per-link [next]/[within:t] constraints (QuerySequenceConstraint) — correct base semantics, but a strict fragment of SQL:2016 MATCH_RECOGNIZE. Missing, ranked: M1 quantifiers on steps/groups ((edit-\u003efail){3,} retry spirals); M2 ABSENCE links (claim -\u003e[no: verification] end = 67ac as one query); M3 captures/match-as-unit-grain (matched spans become rows usable in pipelines + result_sets — the rxdo-native requirement); M4 alternation/grouping/optionality; M5 anchors; M6 cross-step joins (same-file retry, MATCH_RECOGNIZE DEFINE-class, phase 2); M7 alphabet generalization (messages stream next); M8 explicit overlap policy (hash-relevant: match counts are population claims). IMPLEMENTATION: SQL prefilter (existing seq lowering) + Python NFA with predicate edges over candidate sessions bounded rows; quantifier-free patterns keep pure-SQL fast path; pattern AST enters rxdo.2 canonical query hash; LALR colon-terminal pitfall applies. Literal string regex: Python REGEXP as bounded post-filter only (hard candidate cap, typed error unbounded), low priority. Utility receipts: pathology patterns, 67ac, D3 fix-span extraction, workflow shapes user-queryable, churn detection. Spike output: grammar sketch + NFA prototype over a fixture session + match-grain result_set design. Related: polylogue-fnm.13 (set algebra doc), rxdo.2 (canonicalization), rxdo.10 (demos D3), 67ac.\n\n## Authoritative corrective scope (2026-07-13)\n\nPattern semantics must name the event order and evidence grade; timestamp order alone cannot support\nabsence, sequence, or abandonment claims. EventOrderSpec is embedded in PatternDefinition rather\nthan becoming another durable registry.","design":"# DSL review + structural pattern matching design (2026-07-13)\n\nOperator questions: (1) is seq(A-\u003eB-\u003eC) properly designed — rigid adjacency or\ngaps? modeling + utility unclear; (2) review the DSL as-is vs known designs,\nfind suboptimal/missing; (3) could a regex-EQUIVALENT mechanism apply — a\nsublanguage for specifying the STRUCTURE of a session (and literal string\nregex, worth it?).\n\n## 1. What we actually have (verified in expression.py + docs/search.md)\n\n- Lark grammar: fielded predicates, booleans, near:\"...\", count/date ranges,\n `with \u003cunits\u003e` projection, pipeline stages (sessions where ... | group by\n ... | count) over unit sources sessions/actions/messages/observed-events.\n- `seq(step -\u003e step -\u003e ...)`: session-level predicate over ACTION rows.\n Steps are action-unit predicates (AND-conjunctions allowed per step).\n DEFAULT SEMANTICS: ordered SUBSEQUENCE — unrelated actions between steps\n are allowed. Per-link constraints exist: `-\u003e[next]` = strict adjacency in\n the action stream; `-\u003e[within:5m]` = time bound. Compiled to\n QuerySequenceConstraint(kind next|within); SQL lowerer applies each step\n predicate to its own ordered action row and enforces order between steps.\n- So the operator's adjacency worry is already answered correctly: gaps by\n default, adjacency opt-in. Two real caveats:\n (a) `[next]` adjacency is ALPHABET-RELATIVE (next ACTION row, not next\n message/block) — underdocumented, and the right mental model is\n \"regex over the action token stream\";\n (b) seq is a session FILTER only — the matched span is thrown away. You\n can find sessions containing edit-\u003efail-\u003eedit, but you cannot get the\n matching spans out as rows.\n\n## 2. Comparison against known designs\n\n- **SQL:2016 MATCH_RECOGNIZE** (Oracle, Flink, Snowflake): PARTITION BY /\n ORDER BY / PATTERN (regex over symbols: quantifiers, alternation,\n grouping) / DEFINE (symbol predicates, may reference other symbols via\n PREV/FIRST — i.e. cross-step joins) / MEASURES (extraction) / AFTER MATCH\n SKIP policy. seq() is a strict fragment: fixed-length concatenation with\n per-step predicates. MATCH_RECOGNIZE is the closest production-grade\n \"regex for row streams\" and the right semantic target.\n- **Flink/Esper CEP**: next (strict) / followedBy (relaxed) / within (time)\n — seq's link constraints mirror this exactly — plus what seq lacks:\n notFollowedBy (ABSENCE), times/oneOrMore (quantifiers), groups.\n- **spaCy Matcher**: per-token attribute predicates + OP quantifiers — the\n \"predicate token + quantifier\" shape, evidence this UX works for\n non-programmers.\n- **LTL/temporal logic**: eventually/until/always — cleaner theory, worse\n ergonomics; regex-style wins for operators.\n- **Tree patterns**: session lineage is a TREE (forks/subagents); sequence\n patterns don't cover \"session that spawned ≥3 subagents which all\n failed\". Frontier, not this design.\n\n## 3. What's missing (ranked)\n\nM1. **Quantifiers on steps/groups**: `(edit -\u003e test-fail){3,}` — retry\nspirals, the single most demanded pattern class (pathology detectors).\nM2. **Absence constraints on links**: `A -\u003e[no: action:verify] B` — \"claim\nfollowed by NO verification before session end\" is exactly 67ac's\ncompletion-claims analysis as one pattern. CEP notFollowedBy.\nM3. **Captures / match-as-unit**: matches become a unit grain — rows\n(session_id, span, per-step bindings) usable in pipelines (`matches where\npattern(...) | group by ...`), projectable via with-units, storable as\nresult_sets (rxdo grain). Without this, patterns can filter but not FEED\nanalyses — the rxdo-native requirement.\nM4. **Alternation + grouping + optionality**: `(A|B) -\u003e C?` — trivial once\nthe engine is an NFA.\nM5. **Anchors**: `^`/`$` per stream — \"session ENDS unresolved\".\nM6. **Cross-step joins (backreference-class)**: \"edit file X ... fail ...\nedit the SAME file\" — per-step variable binding with equality guards\n(MATCH_RECOGNIZE DEFINE-style). Phase 2; regexes proper cannot do this,\nrow-pattern engines can.\nM7. **Alphabet generalization**: same engine over messages (role/\nmaterial_origin tokens) and, later, sessions-as-tokens in a workspace\ntimeline. Actions first (today's alphabet), messages second.\nM8. **Overlap policy**: default AFTER MATCH SKIP PAST LAST, opt-in\noverlapping. Must be explicit or match counts are ambiguous (rigor:\nmatch counts are population claims — the policy is part of the metric\ndefinition, so it belongs in the canonical AST → query hash).\n\n## 4. Implementation shape (pragmatic)\n\nDon't lower full patterns to SQL. Two-phase:\n1. SQL prefilter: existing seq lowering (or its relaxation: \"session\n contains at least one row matching each step predicate\") narrows\n candidate sessions cheaply.\n2. Python NFA (Thompson construction; edges are unit predicates already\n compiled by the expression layer) over each candidate session's ordered\n unit rows. Sessions are bounded; the unit rows already stream through\n the query layer. Deterministic, unit-testable, no SQL gymnastics.\nFast path stays: quantifier-free, absence-free patterns keep the pure-SQL\nseq lowering.\nGrammar: extend seq() or introduce match(); colon-terminal LALR pitfall\napplies (new terminals above FIELD_CLAUSE.4). Canonicalization: pattern AST\nenters the rxdo.2 query-hash canonical form (quantifiers/links/policy all\nhash-relevant).\n\n## 5. Literal string regex — honest verdict\n\nSQLite ships no REGEXP; FTS5 can't. Feasible as a Python-registered REGEXP\nfunction used ONLY as a bounded post-filter after FTS/predicate narrowing\n(hard cap on candidate rows, typed error if unbounded). Useful for shapes\nlike error codes/UUIDs/paths; cheap to add; never a primary scan. Low\npriority, worth having; folds into the same bounded-post-filter machinery\nthe NFA uses.\n\n## 6. Utility receipts (why this earns its complexity)\n\n- Pathology detectors as patterns: retry spiral `(edit -\u003e fail){3,}`,\n thrash `(edit A -\u003e edit B -\u003e edit A)` (needs M6).\n- 67ac completion-claims: `claim -\u003e[no: verification] $` — the flagship\n measured-result demo becomes ONE QUERY.\n- D3 you-solved-this-before: `fail -\u003e ... -\u003e success` span extraction (M3\n captures feed the embedding index of fix spans).\n- workflow_shape_distribution upgraded from precomputed shapes to\n user-queryable patterns.\n- Churn detection: `correction -\u003e correction -\u003e[within:10m] abandon`.\n\n## 7. Answer to the Seq modeling question, direct\n\nDefault gap-tolerance is the correct base semantics (rigid chains almost\nnever match real streams); adjacency and time bounds as LINK decorations is\nalso right. What was under-designed is not the link algebra — it's that (a)\nthe alphabet and adjacency-relativity are implicit, (b) there are no\nquantifiers/absence/captures, so seq stops one step short of being the\nregex-for-sessions it wants to be, and (c) matches are not values. The\ndesign direction: seq() grows into row-pattern matching a la\nMATCH_RECOGNIZE, with matches as a first-class unit grain.\n\n## Authoritative corrective contract (2026-07-13)\n\nPatternDefinition embeds EventOrderSpec: partition key; lineage-composition policy; typed unit kinds;\nordering source; tie policy; evidence grade observed|checkpointed|replay-verified; horizon/as-of\nevaluation receipt; overlap policy; and match policy. A match set retains captures, measures,\noverlap/order receipts, and relation-manifest identity; it is not a result-set alias. Land PACK-A/B,\nactions-only v1, captures/measures, and SQL-vs-Python metamorphic parity before mixed streams. No\nstandalone EventOrder registry until independent identity/lifecycle is demonstrated.","acceptance_criteria":"## Corrective acceptance criteria (2026-07-13)\n\nPACK-A/B execute over actions-only data in SQL and Python with identical captures/measures and\noverlap behavior. Equal timestamps under different tie/evidence policies remain ambiguous or yield\ndistinguishable grades; they never silently establish sequence. Mixed-stream syntax is rejected as\ndeferred. Removing EventOrderSpec from production lowering makes the parity fixture fail.","notes":"ALPHABET GAP (operator probe: what ARE 'edit'/'test-fail'?). Verified: the pattern alphabet today = SemanticBlockType (~10 structural, parser-asserted tokens: file_edit/shell/git/search/web/subagent/...) + raw string predicates (command:pytest) + structural outcome (output:failed from tool_result_is_error/exit_code). 'edit' is a primitive; 'test-fail' is NOT — no test-run/build/lint/typecheck/vcs-verb/deps-install categories exist, and no failure-KIND semantics (assertion-fail vs compile-error vs timeout vs OOM vs env-breakage vs network) — yet retry-spiral pathology NEEDS failure kinds (red-green iteration is healthy; retrying env-breakage is pathological). DESIGN: the alphabet is an ONTOLOGY AT ACTION GRAIN and reuses the tags/annotation ladder verbatim: tier-1 structural (parser-asserted, ground truth); tier-2 RULE-DERIVED command/outcome classifiers (pytest|cargo test|npm test -\u003e test-run) — deterministic, versioned, CONTENT-ADDRESSED (classifier:\u003chash\u003e, same names-\u003ehashes family as metric:/tag:/ranker:) so any pattern-match count pins the classifier version in its metric hash; tier-3 judged/embedded — ambiguous commands + failure kinds classified from output text, flowing as action-grain candidate annotations through the judge lifecycle, with derived-scalar membership enabling FUZZY TOKENS in patterns (~test-fail = membership above threshold; threshold + classifier hash both canonicalize into the query hash). Token inventory the alphabet needs: action semantics (test-run, build, lint, format, typecheck, vcs:commit/push/rebase/merge, deps-install, db-op, service-op, deploy), failure kinds (above), message-grain tokens for the message alphabet (question, correction, instruction, approval — the dve1 seed ontologies at message grain), derived interaction tokens (operator-stall from timestamp gaps, compaction/resume boundary — boundary='resume' already exists as a column, context-injection events). Third instance of the same design pattern: authority ladder + content-addressed definitions + judge lifecycle, now at unit grain.\nRESOLUTION SEMANTICS (operator probe: what does 'unresolved' mean, how do we know?). Honest answer: today it is NOTHING — no primitive exists; my anchor example borrowed future vocabulary. Design (4th instance of the authority ladder): TIER-1 structural proxies, each an honest named classifier (classifier:\u003chash\u003e): final-action-failed; edits-never-committed (file_edit/write with no subsequent vcs:commit in-session); ends-mid-error (last tool_result is_error with no later success). Cheap, incomplete, explicitly labeled PROXIES. TIER-2/3: the dve1 outcome ontology (solved/partial/abandoned/question-opened/question-closed) as judged session-grain annotations — 'resolved' is fundamentally SEMANTIC (was the goal met) and needs reading the conversation. THE DEEPER MODELING POINT: resolution is not a session-local property — sessions are EPISODES; the thing that gets resolved is a GOAL/QUESTION entity that spans sessions (opened in A, resolved in B days later, possibly different provider). The resolution graph = question-opened/closed annotation events + cross-session linking via D1 convergent-question embedding clusters + lineage descendants. So '$ unresolved' is sugar for: terminal session state with NO resolution event in the session's FUTURE CONE (lineage children + later same-cluster sessions) — and it is TIME-INDEXED: 'unresolved AS OF \u003carchive_epoch\u003e' (rigor: unresolved-counts must carry the as-of epoch; query_runs already record archive_epoch, composes for free). Staging: v1 structural proxies with classifier hashes; v2 outcome annotations via the dve1 bootstrap; v3 goal-entity graph (D1 clusters + lineage = the future cone).","status":"open","priority":2,"issue_type":"spike","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:17:45Z","created_by":"Sinity","updated_at":"2026-07-13T05:44:29Z","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-avna.1","title":"Pattern-analysis grounding catalog: 16 analyses, tokens, tiers, soundness verdict","description":"Full catalog: .agent/scratch/pattern-analysis-grounding-2026-07-13.md. Sixteen analyses each grounded (pattern expression, tokens with tiers + grounding sources, yield grain, operators proven necessary). SOUNDNESS: 14/16 representable with alphabet packs A-E; 2 need phase-2 M6 join (honest v1 approximations); 3 correctly pattern+relational compositions. NEW requirements named: token unions; match spans as registered ObjectRef judgment targets; MEASURES aggregations; unified MIXED unit stream as default alphabet. Demo work must cite these groundings.","design":"# Pattern-analysis grounding catalog (2026-07-13)\n\nPurpose: enumerate every pattern-language analysis named in tonight's design\nthreads and ground each precisely \u2014 pattern expression, tokens with authority\ntiers, grounding sources, yield grain, and which operators/tokens it proves\nnecessary. This is the soundness proof-by-enumeration for the avna row-pattern\ndesign + alphabet.\n\nTiers: T1=structural (parser-asserted columns) \u00b7 T2=rule classifier\n(content-addressed classifier:\u003chash\u003e) \u00b7 T3=judged annotation (candidate\u2192judge\nlifecycle) \u00b7 D=derived interaction token (computed from structure,\nclassifier-named).\n\n## Alphabet packs\n\n- **PACK-A action semantics (T2)**: test-run, build, lint, format, typecheck,\n vcs:commit|push|rebase|merge, deps-install, db-op, service-op. Grounding:\n actions view (tool, command, path); versioned rule sets, classifier:\u003chash\u003e.\n- **PACK-B failure kinds (T2, T3 refinement)**: assertion-fail, compile-error,\n timeout, oom, permission-denied, network-error, env-breakage. Grounding:\n tool_result_exit_code + tool_result_is_error (T1) + output-text rules;\n ambiguous residue \u2192 T3.\n- **PACK-C interaction tokens (D)**: gap(t) = inter-message gap \u003e t with\n same-session continuation (honest name \"gap\", NOT \"confusion\" \u2014\n away-from-keyboard is structurally undecidable; docs must say proxy);\n boundary:resume (T1 \u2014 column exists today); context-injection (T1 once\n 37t delivery receipts land).\n- **PACK-D message speech-acts (T3; some T2 bootstrap)**: question,\n instruction, correction, approval, completion-claim (T2 prior art exists:\n demo/receipts.py high-specificity phrase rules + seeded sampling),\n compliance-with-correction (T3).\n- **PACK-E outcome proxies (T2, from the avna resolution note)**:\n final-action-failed, edits-never-committed, ends-mid-error. Session grain.\n\n## The catalog\n\nEach entry: pattern \u00b7 tokens(tier) \u00b7 yield \u00b7 requires \u00b7 verdict.\n\n1. **Retry spiral** \u2014 `match(( a:edit -\u003e a:test-run AND fail:assertion ){3,})`\n Tokens: edit(T1), test-run(A/T2), assertion-fail(B/T2). Yield: match spans\n per session (start/end action ids, iteration count as measure).\n Requires: quantifiers(M1), groups, captures(M3). VERDICT: representable\n with alphabet v1 (packs A+B) + M1/M3. NOTE the contrast class #16 \u2014 spiral\n vs healthy red-green differs ONLY by failure-kind mix and terminal state;\n without PACK-B the pathology detector is dishonest.\n\n2. **Same-target thrash** \u2014 `match(e1=a:edit -\u003e fail -\u003e e2=a:edit[path=e1.path] -\u003e\n fail -\u003e e3=a:edit[path=e1.path])`. Tokens: edit(T1), fail(T1), path\n equality across steps. Requires: M6 cross-step variable binding\n (MATCH_RECOGNIZE DEFINE-class; beyond regular languages). VERDICT: NOT\n representable in v1; the join operator is proven necessary by this + #7.\n Phase-2 as designed.\n\n3. **Churn\u2192abandon** \u2014 `match(m:correction -\u003e m:correction -\u003e[within:10m] $)`\n over the MESSAGE alphabet, session must end (anchor) with outcome proxy\n abandoned(E/T2 or T3). Tokens: correction(D/T3), $ anchor, outcome proxy.\n Requires: message alphabet (M7), anchors (M5), absence-free. VERDICT:\n representable with M5+M7 + PACK-D correction. The [within] link already\n exists.\n\n4. **67ac claims-without-verification** \u2014 `match(m:completion-claim -\u003e[no:\n a:test-run|a:build|a:typecheck|a:lint] $)`. Tokens: completion-claim\n (D/T2 \u2014 receipts.py rules), verification = UNION of PACK-A members (an\n alphabet feature: token unions/classes, trivially regex-native). Requires:\n absence links (M2), anchors (M5), MIXED alphabet in one pattern (messages\n AND actions interleaved in one ordered stream \u2014 the session event stream\n is naturally mixed; design decision: the default alphabet is the unified\n ordered unit stream, tokens carry their unit kind). VERDICT: representable;\n proves M2+M5+mixed-stream. This replaces 67ac's bespoke sampling pipeline\n with one query \u2014 the flagship receipt.\n\n5. **Fix-span extraction (AI-D3 feeder)** \u2014 `match(f=fail:any -\u003e ... -\u003e\n s=a:test-run AND ok)` with captures f..s exported as spans. Requires:\n captures/match-as-unit (M3), lazy gap semantics, overlap policy (M8 \u2014\n first-fix vs all-fixes changes counts). VERDICT: representable; proves\n M3+M8. Spans feed the fix-embedding index.\n\n6. **Workflow shape mining** \u2014 not a single pattern: frequent-sequence mining\n over the PACK-A token stream, THEN each mined shape becomes a match()\n query users can run/save (query:\u003chash\u003e). Requires: the alphabet only;\n mining is an analysis recipe (rxdo.8), not a language feature. VERDICT:\n language is sufficient as target; mining lives in recipes. Upgrades\n workflow_shape_distribution from precomputed to queryable.\n\n7. **Fabrication screen (continuous)** \u2014 claim of a performed action with no\n matching action row: `match(c=m:completion-claim[claims-action] -\u003e[no:\n a:*[matches(c.claimed_target)]] $)` \u2014 requires extracting the CLAIMED\n TARGET from the message (T3 extraction; T2 for stereotyped claims) and a\n join between the claim's extracted target and action predicates (M6\n variant with extracted-field binding). VERDICT: v1 approximation WITHOUT\n join: claim followed by NO action of the claimed KIND at all (kind from\n claim classifier), catches the gross case (claimed test-run, zero\n test-runs after) \u2014 representable with M2 + PACK-D; exact-target matching\n needs M6+T3 extraction. Both stages valuable; stage honestly.\n\n8. **Steerability** \u2014 `match(c=m:correction -\u003e (m:assistant AND NOT\n compliance(c)){0,k} -\u003e m:assistant AND compliance(c))` \u2014 per-model\n turns-to-incorporate. Tokens: correction(T3), compliance-with-THAT-\n correction (T3 pairwise judgment \u2014 agent-judged, K/L machinery). Requires:\n M1 bounded quantifier, M6-lite (compliance references the captured\n correction \u2014 but as a JUDGMENT input, not a structural join: the judge\n receives (correction, response) pairs). VERDICT: pattern extracts the\n candidate spans (representable with M1+M3); the compliance labeling is a\n judgment recipe over the extracted pairs. Two-stage: pattern \u2192 judge \u2014\n and that composition (match spans as judgment work-queues) is itself a\n design requirement now named: MATCH SPANS MUST BE VALID JUDGMENT TARGETS\n (ObjectRef kind for match spans).\n\n9. **Gap-after-output (confusion proxy)** \u2014 `match(m:assistant[tokens\u003eT] -\u003e\n d:gap(5m))`. Tokens: gap(C/D), token counts (T1). VERDICT: representable\n with PACK-C + mixed stream; the honest-naming rule does the epistemics.\n\n10. **Resume-boundary cost** \u2014 `match(^ -\u003e d:boundary:resume -\u003e m:*{0,k})`\n measuring re-establishment tokens after compaction. Tokens:\n boundary:resume (T1 \u2014 EXISTS), token/cost measures (T1). VERDICT:\n representable TODAY structurally; measures need M3 capture-with-measures\n (MEASURES clause \u2014 add to M3 scope: aggregations over matched span).\n\n11. **Unresolved-at-end** \u2014 cross-session future cone (avna resolution note).\n VERDICT: NOT a single-session pattern; v1 uses PACK-E proxies as session\n tokens; the goal-graph (v3) owns the real semantics. Pattern language\n scope boundary CORRECTLY drawn at session; cross-session composition\n happens in the relational layer (pipeline over lineage + AI-D1 clusters).\n\n12. **Subagent fan-out efficiency** \u2014 sessions spawning N subagents, k fail.\n The lineage is a TREE; sequence patterns see only the spawn events\n (`a:subagent{3,}` works for counting spawns \u2014 T1 token exists) but\n child-session outcomes are cross-session joins. VERDICT: spawn-side\n representable; outcome joins are relational (pipeline: match | join\n children | ...). Tree-pattern language remains frontier, correctly\n out of scope.\n\n13. **Verification-before-claim rate** \u2014 the anti-67ac positive discipline:\n `match(a:verification -\u003e m:completion-claim)` vs #4 as a ratio (rigor\n mechanism B: numerator/denominator result-set refs). VERDICT:\n representable; the RATIO is rxdo.9.2's machinery, not the language's.\n\n14. **Interrupted\u2192resumed continuation quality** \u2014 session ends mid-error\n (PACK-E) AND lineage child exists AND child reaches success. Cross-\n session again: session-level tokens + relational join on lineage.\n VERDICT: two patterns + a pipeline join; representable as composition.\n\n15. **Permission-denial loops** \u2014 `match((a:* AND fail:permission-denied)\n {2,})`. Tokens: PACK-B permission-denied. VERDICT: representable with\n M1 + PACK-B. (Tonight's classifier-denial events would have matched.)\n\n16. **Healthy red-green (contrast class)** \u2014 `match((a:edit -\u003e a:test-run AND\n fail:assertion){1,} -\u003e a:test-run AND ok -\u003e a:vcs:commit)` \u2014 same tokens\n as #1 plus terminal success+commit. VERDICT: representable; exists to\n keep #1 honest (pathology = spiral WITHOUT this terminal).\n\n## Operator-requirement matrix (what the enumeration proves)\n\n- M1 quantifiers: required by 1, 8, 15, 16.\n- M2 absence links: required by 4, 7; nothing else substitutes.\n- M3 captures + MEASURES: required by 1, 5, 8, 10 (MEASURES scope addition).\n- M5 anchors: required by 3, 4, 10.\n- M6 cross-step binding: required by 2, 7-exact; correctly phase-2 (nothing\n in the v1 demo set hard-blocks on it; 7 has an honest v1 approximation).\n- M7 message alphabet + MIXED unified stream: required by 3, 4, 8, 9, 10 \u2014\n the mixed ordered unit stream should be the DEFAULT alphabet (decision).\n- M8 overlap policy: required by 5 (and any counted match).\n- NEW (named by this exercise): token unions/classes (4); match spans as\n ObjectRef judgment targets (8); MEASURES aggregations (10); session-scope\n boundary with relational composition for cross-session (11, 12, 14).\n\n## Alphabet-requirement summary\n\nPACK-A and PACK-B are load-bearing for nearly everything (1, 4, 5, 13, 15,\n16) \u2014 they are the v1 alphabet work and pure T2 rule-classifier packs:\ncheap, deterministic, content-addressed, no judge dependency. PACK-C needs\none derived token (gap) + two existing columns. PACK-D has T2 prior art for\nits hardest member (completion-claim) and T3 for the rest \u2014 it gates 3, 4,\n7, 8 and arrives via the dve1 seed ontologies. PACK-E is three T2 rules.\n\n## Soundness verdict\n\n14 of 16 analyses are representable within the proposed design (session-\nscoped row patterns + unified mixed unit stream + alphabet packs A\u2013E);\n2 (same-target thrash, exact-target fabrication) require the phase-2 M6\njoin and have honest v1 approximations; 3 (unresolved, fan-out outcomes,\ninterrupted\u2192resumed) correctly live as pattern+relational compositions\nrather than language features \u2014 the session-scope boundary held under\nenumeration. No analysis required a mechanism outside the already-designed\nM1\u2013M8 + four named additions (unions, span-refs-as-judgment-targets,\nMEASURES, mixed-default-alphabet). The DSL design is sound for the demo\nprogram; the alphabet packs are the actual critical path.\n\n## Authoritative corrective contract (2026-07-13)\n\nThe catalog is the requirements traceability artifact for PatternDefinition, not an alternate language\nspec. Each analysis row must bind tokens to authority tiers and classifier/schema refs, embed\nEventOrderSpec (partition, lineage, order source, ties, evidence grade, horizon), state result/match\ngrain, captures/measures/overlap policy, identify pattern versus relational stages, and name the honest\nv1 approximation when exact semantics require M6 or mixed streams. PACK-A/B actions-only analyses are\nthe executable v1 gate; PACK-C-E and mixed streams remain later until that parity proof lands.","acceptance_criteria":"1. All 16 catalog rows contain expression, typed tokens, authority/grounding refs, EventOrderSpec,\n yield grain, captures/measures/overlap, required mechanism, and soundness verdict.\n2. Every row maps to a named implementation Bead or explicitly documented relational composition;\n exact-target M6 and mixed-stream gaps use honest staged approximations.\n3. Catalog analyses #1 and #15 execute through PACK-A/B fixtures with SQL/Python parity; #5 exposes a\n match span usable as a judgment/evidence ref.\n4. Same-timestamp/tie and changed classifier-version fixtures alter grade/identity rather than silently\n preserving a match.\n5. A generated/checkable support matrix fails if an analysis names an unregistered token/mechanism.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:31:46Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","dependencies":[{"issue_id":"polylogue-avna.1","depends_on_id":"polylogue-avna","type":"parent-child","created_at":"2026-07-13T04:31:45Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-avna","title":"Order-explicit row patterns with typed match sets","description":"Design capture: .agent/scratch/dsl-pattern-matching-design-2026-07-13.md. VERIFIED current state: seq() = gap-tolerant ordered subsequence over action rows with per-link [next]/[within:t] constraints (QuerySequenceConstraint) \u2014 correct base semantics, but a strict fragment of SQL:2016 MATCH_RECOGNIZE. Missing, ranked: M1 quantifiers on steps/groups ((edit-\u003efail){3,} retry spirals); M2 ABSENCE links (claim -\u003e[no: verification] end = 67ac as one query); M3 captures/match-as-unit-grain (matched spans become rows usable in pipelines + result_sets \u2014 the rxdo-native requirement); M4 alternation/grouping/optionality; M5 anchors; M6 cross-step joins (same-file retry, MATCH_RECOGNIZE DEFINE-class, phase 2); M7 alphabet generalization (messages stream next); M8 explicit overlap policy (hash-relevant: match counts are population claims). IMPLEMENTATION: SQL prefilter (existing seq lowering) + Python NFA with predicate edges over candidate sessions bounded rows; quantifier-free patterns keep pure-SQL fast path; pattern AST enters rxdo.2 canonical query hash; LALR colon-terminal pitfall applies. Literal string regex: Python REGEXP as bounded post-filter only (hard candidate cap, typed error unbounded), low priority. Utility receipts: pathology patterns, 67ac, AI-D3 fix-span extraction, workflow shapes user-queryable, churn detection. Spike output: grammar sketch + NFA prototype over a fixture session + match-grain result_set design. Related: polylogue-fnm.13 (set algebra doc), rxdo.2 (canonicalization), rxdo.10 (demos AI-D3), 67ac.\n\n## Authoritative corrective scope (2026-07-13)\n\nPattern semantics must name the event order and evidence grade; timestamp order alone cannot support\nabsence, sequence, or abandonment claims. EventOrderSpec is embedded in PatternDefinition rather\nthan becoming another durable registry.","design":"# DSL review + structural pattern matching design (2026-07-13)\n\nOperator questions: (1) is seq(A-\u003eB-\u003eC) properly designed \u2014 rigid adjacency or\ngaps? modeling + utility unclear; (2) review the DSL as-is vs known designs,\nfind suboptimal/missing; (3) could a regex-EQUIVALENT mechanism apply \u2014 a\nsublanguage for specifying the STRUCTURE of a session (and literal string\nregex, worth it?).\n\n## 1. What we actually have (verified in expression.py + docs/search.md)\n\n- Lark grammar: fielded predicates, booleans, near:\"...\", count/date ranges,\n `with \u003cunits\u003e` projection, pipeline stages (sessions where ... | group by\n ... | count) over unit sources sessions/actions/messages/observed-events.\n- `seq(step -\u003e step -\u003e ...)`: session-level predicate over ACTION rows.\n Steps are action-unit predicates (AND-conjunctions allowed per step).\n DEFAULT SEMANTICS: ordered SUBSEQUENCE \u2014 unrelated actions between steps\n are allowed. Per-link constraints exist: `-\u003e[next]` = strict adjacency in\n the action stream; `-\u003e[within:5m]` = time bound. Compiled to\n QuerySequenceConstraint(kind next|within); SQL lowerer applies each step\n predicate to its own ordered action row and enforces order between steps.\n- So the operator's adjacency worry is already answered correctly: gaps by\n default, adjacency opt-in. Two real caveats:\n (a) `[next]` adjacency is ALPHABET-RELATIVE (next ACTION row, not next\n message/block) \u2014 underdocumented, and the right mental model is\n \"regex over the action token stream\";\n (b) seq is a session FILTER only \u2014 the matched span is thrown away. You\n can find sessions containing edit-\u003efail-\u003eedit, but you cannot get the\n matching spans out as rows.\n\n## 2. Comparison against known designs\n\n- **SQL:2016 MATCH_RECOGNIZE** (Oracle, Flink, Snowflake): PARTITION BY /\n ORDER BY / PATTERN (regex over symbols: quantifiers, alternation,\n grouping) / DEFINE (symbol predicates, may reference other symbols via\n PREV/FIRST \u2014 i.e. cross-step joins) / MEASURES (extraction) / AFTER MATCH\n SKIP policy. seq() is a strict fragment: fixed-length concatenation with\n per-step predicates. MATCH_RECOGNIZE is the closest production-grade\n \"regex for row streams\" and the right semantic target.\n- **Flink/Esper CEP**: next (strict) / followedBy (relaxed) / within (time)\n \u2014 seq's link constraints mirror this exactly \u2014 plus what seq lacks:\n notFollowedBy (ABSENCE), times/oneOrMore (quantifiers), groups.\n- **spaCy Matcher**: per-token attribute predicates + OP quantifiers \u2014 the\n \"predicate token + quantifier\" shape, evidence this UX works for\n non-programmers.\n- **LTL/temporal logic**: eventually/until/always \u2014 cleaner theory, worse\n ergonomics; regex-style wins for operators.\n- **Tree patterns**: session lineage is a TREE (forks/subagents); sequence\n patterns don't cover \"session that spawned \u22653 subagents which all\n failed\". Frontier, not this design.\n\n## 3. What's missing (ranked)\n\nM1. **Quantifiers on steps/groups**: `(edit -\u003e test-fail){3,}` \u2014 retry\nspirals, the single most demanded pattern class (pathology detectors).\nM2. **Absence constraints on links**: `A -\u003e[no: action:verify] B` \u2014 \"claim\nfollowed by NO verification before session end\" is exactly 67ac's\ncompletion-claims analysis as one pattern. CEP notFollowedBy.\nM3. **Captures / match-as-unit**: matches become a unit grain \u2014 rows\n(session_id, span, per-step bindings) usable in pipelines (`matches where\npattern(...) | group by ...`), projectable via with-units, storable as\nresult_sets (rxdo grain). Without this, patterns can filter but not FEED\nanalyses \u2014 the rxdo-native requirement.\nM4. **Alternation + grouping + optionality**: `(A|B) -\u003e C?` \u2014 trivial once\nthe engine is an NFA.\nM5. **Anchors**: `^`/`$` per stream \u2014 \"session ENDS unresolved\".\nM6. **Cross-step joins (backreference-class)**: \"edit file X ... fail ...\nedit the SAME file\" \u2014 per-step variable binding with equality guards\n(MATCH_RECOGNIZE DEFINE-style). Phase 2; regexes proper cannot do this,\nrow-pattern engines can.\nM7. **Alphabet generalization**: same engine over messages (role/\nmaterial_origin tokens) and, later, sessions-as-tokens in a workspace\ntimeline. Actions first (today's alphabet), messages second.\nM8. **Overlap policy**: default AFTER MATCH SKIP PAST LAST, opt-in\noverlapping. Must be explicit or match counts are ambiguous (rigor:\nmatch counts are population claims \u2014 the policy is part of the metric\ndefinition, so it belongs in the canonical AST \u2192 query hash).\n\n## 4. Implementation shape (pragmatic)\n\nDon't lower full patterns to SQL. Two-phase:\n1. SQL prefilter: existing seq lowering (or its relaxation: \"session\n contains at least one row matching each step predicate\") narrows\n candidate sessions cheaply.\n2. Python NFA (Thompson construction; edges are unit predicates already\n compiled by the expression layer) over each candidate session's ordered\n unit rows. Sessions are bounded; the unit rows already stream through\n the query layer. Deterministic, unit-testable, no SQL gymnastics.\nFast path stays: quantifier-free, absence-free patterns keep the pure-SQL\nseq lowering.\nGrammar: extend seq() or introduce match(); colon-terminal LALR pitfall\napplies (new terminals above FIELD_CLAUSE.4). Canonicalization: pattern AST\nenters the rxdo.2 query-hash canonical form (quantifiers/links/policy all\nhash-relevant).\n\n## 5. Literal string regex \u2014 honest verdict\n\nSQLite ships no REGEXP; FTS5 can't. Feasible as a Python-registered REGEXP\nfunction used ONLY as a bounded post-filter after FTS/predicate narrowing\n(hard cap on candidate rows, typed error if unbounded). Useful for shapes\nlike error codes/UUIDs/paths; cheap to add; never a primary scan. Low\npriority, worth having; folds into the same bounded-post-filter machinery\nthe NFA uses.\n\n## 6. Utility receipts (why this earns its complexity)\n\n- Pathology detectors as patterns: retry spiral `(edit -\u003e fail){3,}`,\n thrash `(edit A -\u003e edit B -\u003e edit A)` (needs M6).\n- 67ac completion-claims: `claim -\u003e[no: verification] $` \u2014 the flagship\n measured-result demo becomes ONE QUERY.\n- AI-D3 you-solved-this-before: `fail -\u003e ... -\u003e success` span extraction (M3\n captures feed the embedding index of fix spans).\n- workflow_shape_distribution upgraded from precomputed shapes to\n user-queryable patterns.\n- Churn detection: `correction -\u003e correction -\u003e[within:10m] abandon`.\n\n## 7. Answer to the Seq modeling question, direct\n\nDefault gap-tolerance is the correct base semantics (rigid chains almost\nnever match real streams); adjacency and time bounds as LINK decorations is\nalso right. What was under-designed is not the link algebra \u2014 it's that (a)\nthe alphabet and adjacency-relativity are implicit, (b) there are no\nquantifiers/absence/captures, so seq stops one step short of being the\nregex-for-sessions it wants to be, and (c) matches are not values. The\ndesign direction: seq() grows into row-pattern matching a la\nMATCH_RECOGNIZE, with matches as a first-class unit grain.\n\n## Authoritative corrective contract (2026-07-13)\n\nPatternDefinition embeds EventOrderSpec: partition key; lineage-composition policy; typed unit kinds;\nordering source; tie policy; evidence grade observed|checkpointed|replay-verified; horizon/as-of\nevaluation receipt; overlap policy; and match policy. A match set retains captures, measures,\noverlap/order receipts, and relation-manifest identity; it is not a result-set alias. Land PACK-A/B,\nactions-only v1, captures/measures, and SQL-vs-Python metamorphic parity before mixed streams. No\nstandalone EventOrder registry until independent identity/lifecycle is demonstrated.","acceptance_criteria":"## Corrective acceptance criteria (2026-07-13)\n\nPACK-A/B execute over actions-only data in SQL and Python with identical captures/measures and\noverlap behavior. Equal timestamps under different tie/evidence policies remain ambiguous or yield\ndistinguishable grades; they never silently establish sequence. Mixed-stream syntax is rejected as\ndeferred. Removing EventOrderSpec from production lowering makes the parity fixture fail.","notes":"ALPHABET GAP (operator probe: what ARE 'edit'/'test-fail'?). Verified: the pattern alphabet today = SemanticBlockType (~10 structural, parser-asserted tokens: file_edit/shell/git/search/web/subagent/...) + raw string predicates (command:pytest) + structural outcome (output:failed from tool_result_is_error/exit_code). 'edit' is a primitive; 'test-fail' is NOT \u2014 no test-run/build/lint/typecheck/vcs-verb/deps-install categories exist, and no failure-KIND semantics (assertion-fail vs compile-error vs timeout vs OOM vs env-breakage vs network) \u2014 yet retry-spiral pathology NEEDS failure kinds (red-green iteration is healthy; retrying env-breakage is pathological). DESIGN: the alphabet is an ONTOLOGY AT ACTION GRAIN and reuses the tags/annotation ladder verbatim: tier-1 structural (parser-asserted, ground truth); tier-2 RULE-DERIVED command/outcome classifiers (pytest|cargo test|npm test -\u003e test-run) \u2014 deterministic, versioned, CONTENT-ADDRESSED (classifier:\u003chash\u003e, same names-\u003ehashes family as metric:/tag:/ranker:) so any pattern-match count pins the classifier version in its metric hash; tier-3 judged/embedded \u2014 ambiguous commands + failure kinds classified from output text, flowing as action-grain candidate annotations through the judge lifecycle, with derived-scalar membership enabling FUZZY TOKENS in patterns (~test-fail = membership above threshold; threshold + classifier hash both canonicalize into the query hash). Token inventory the alphabet needs: action semantics (test-run, build, lint, format, typecheck, vcs:commit/push/rebase/merge, deps-install, db-op, service-op, deploy), failure kinds (above), message-grain tokens for the message alphabet (question, correction, instruction, approval \u2014 the dve1 seed ontologies at message grain), derived interaction tokens (operator-stall from timestamp gaps, compaction/resume boundary \u2014 boundary='resume' already exists as a column, context-injection events). Third instance of the same design pattern: authority ladder + content-addressed definitions + judge lifecycle, now at unit grain.\nRESOLUTION SEMANTICS (operator probe: what does 'unresolved' mean, how do we know?). Honest answer: today it is NOTHING \u2014 no primitive exists; my anchor example borrowed future vocabulary. Design (4th instance of the authority ladder): TIER-1 structural proxies, each an honest named classifier (classifier:\u003chash\u003e): final-action-failed; edits-never-committed (file_edit/write with no subsequent vcs:commit in-session); ends-mid-error (last tool_result is_error with no later success). Cheap, incomplete, explicitly labeled PROXIES. TIER-2/3: the dve1 outcome ontology (solved/partial/abandoned/question-opened/question-closed) as judged session-grain annotations \u2014 'resolved' is fundamentally SEMANTIC (was the goal met) and needs reading the conversation. THE DEEPER MODELING POINT: resolution is not a session-local property \u2014 sessions are EPISODES; the thing that gets resolved is a GOAL/QUESTION entity that spans sessions (opened in A, resolved in B days later, possibly different provider). The resolution graph = question-opened/closed annotation events + cross-session linking via D1 convergent-question embedding clusters + lineage descendants. So '$ unresolved' is sugar for: terminal session state with NO resolution event in the session's FUTURE CONE (lineage children + later same-cluster sessions) \u2014 and it is TIME-INDEXED: 'unresolved AS OF \u003carchive_epoch\u003e' (rigor: unresolved-counts must carry the as-of epoch; query_runs already record archive_epoch, composes for free). Staging: v1 structural proxies with classifier hashes; v2 outcome annotations via the dve1 bootstrap; v3 goal-entity graph (D1 clusters + lineage = the future cone).","status":"open","priority":2,"issue_type":"spike","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:17:45Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-p155","title":"Lint: detect numbered-migration slot collisions at verify time","description":"Evidence 2026-07-13 merge train: PRs #2794 and #2800 independently claimed source-tier migration slot 008; the conductor caught it during rebase, renumbered to 009, preserved the capture_mode column through the copy-forward, and bumped SOURCE_SCHEMA_VERSION — but detection relied on conductor attention during conflict resolution. With parallel lanes routinely adding durable-tier migrations, slot collisions are now an expected event class. Add a cheap verify-step: duplicate NNN prefixes within storage/sqlite/migrations/{source,user}/ fail devtools verify --quick (and the same check as a lab policy so devtools lab policy schema-versioning covers it). AC: two files sharing a slot in either durable tier fail the gate with both paths named; renumbering guidance in the message.","design":"Extend the schema-versioning policy with a structured durable-migration contention key:\n(tier, target schema version, numbered slot). Duplicate prefixes/targets in source or user migrations\nfail `devtools verify --quick` and `devtools lab policy schema-versioning`, naming both owners/paths\nand renumber/rebase guidance. Expose the key in machine-readable output so 2yax and ei94 can reserve\none writer per tier/window before Git conflict time. Derived-tier rebuild versions remain a separate\ncontention class, not numbered durable migrations.","acceptance_criteria":"Two durable migrations claiming the same tier/slot or target version fail with both paths and owner\nrefs; non-colliding source/user windows pass independently. JSON output supplies the contention key\nconsumed by frontier/conductor fixtures. A replay of the 008/009 incident is detected before merge.","status":"open","priority":2,"issue_type":"chore","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:10:01Z","created_by":"Sinity","updated_at":"2026-07-13T05:47:10Z","dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-rxdo.10","title":"Rigor-native demo catalog: nine evidence-backed product proofs","description":"D1-D9 are product proofs over the shared query/metric/pattern/judgment/experiment contracts, not nine\nnew subsystems. Every claim binds definition and evaluation refs, frame and measurement authority,\nprivacy/excision policy, and the evidence needed for its claim class. Flagships are D1, D3, and D9;\nfirst external activation is D3. Observational outputs use honest names, while causal language\nrequires ExperimentDefinition receipts.","design":"## Thread 1 — Demos beyond the current list (embedding-grade, rxdo-native)\n\nRigor template for every demo below: the demo IS a recipe (rxdo.8) whose\nsteps are query:\u003chash\u003e refs; every number carries metric:\u003chash\u003e; cohorts are\nresult_set objects; sampled quantities carry bootstrap CIs (mechanism H);\nheadline claims pre-registered (C); embedding-derived numbers pin the\nembedding model+version in the metric hash (303r.7's model-effect key — an\nembedding upgrade is a confound, not a refresh).\n\nD1. **Convergent questions** (\"you have asked this 14 times\"). Cluster\nembeddings of authored-user question messages across ALL providers; surface\nrecurring unresolved questions with their N historical answers and whether\nthe answers agree (agent judges score agreement — K/L machinery).\nPopulation claim (count) + judgment layer; cohort = question-messages\n(material_origin honest). The single most \"this tool knows me\" demo.\n\nD2. **Semantic drift of self**: per-quarter centroids of authored messages;\ntrajectory through topic space; drift distances with CIs (sampled). \"What\nyou stopped and started caring about, measured.\"\n\nD3. **You solved this before**: given a fresh error text, embed → nearest\npast tool_result failures (tool_result_is_error=true) that were FOLLOWED by\nsuccess (exit-code transition within session) → surface the fix diff.\nRetrieval precision@k measured on a labeled holdout (D holdouts). Uses the\nv16 keystone columns + embeddings + lineage composition.\n\nD4. **Answer-quality arbitrage**: embedding-matched question pairs asked to\ndifferent models over time; blinded pairwise judging (N elicitation, agent\npanel + operator spot-check); Bradley-Terry per-model quality ON YOUR OWN\nquestion distribution — procurement decisions from your archive, not from\nbenchmarks.\n\nD5. **Idea genealogy**: trace a named concept through time: first\nappearance, mutation points (embedding neighborhoods over sliding windows),\nwhich sessions developed it, when it crossed into code (thread 4 join).\nRendered as a timeline artifact; the trace is a saved analysis DAG.\n\nD6. **Novelty watch**: standing query (rxdo.5) over embedding space — a new\nsession landing far from every historical cluster emits a novelty finding\ncandidate. \"You did something categorically new this week\" as a\npush-notification-grade event.\n\nD7. **Redundancy atlas**: semantic near-duplicate mass (embedding clusters)\n× physical lineage duplication (#2467 machinery) → \"your archive is X%\nretellings\" with exactness-honest accounting; doubles as a compression\nroadmap.\n\nD8. **Fleet convergence forensics**: tonight's 30-lane corpus — did\nindependent lanes converge on similar solutions? Embed lane outputs/diffs,\nmeasure cross-lane similarity vs a between-unrelated-tasks baseline. First\ndemo OF the multi-agent archive ABOUT multi-agent work.\n\nD9. **Re-explanation tax**: embedding-cluster instances of the operator\nre-establishing the same context across sessions; price it (metric:\nauthored tokens in re-explanation clusters × cost model). The continuity\nsales pitch as a measured number: \"context loss cost you N tokens / $X last\nmonth.\"\n\n## Cross-cutting: what makes all four threads one design\n\nEvery thread lands on the same three moves: (1) name it with a content\naddress (query:/metric:/ranker:/tag:/schema versions); (2) grade authority\nexplicitly (asserted vs judged vs derived; population vs sampled); (3) make\nagents produce CANDIDATES that flow through the one judge lifecycle.\nNothing here adds a second architecture — it's the rxdo graph + rigor\nmechanisms + annotation machinery, extended to tags, files, and taxonomy.\n\n## Authoritative corrective contract (2026-07-13)\n\nAUTHORITATIVE CLAIM CORRECTIONS. D3 returns prior observed recovery candidates; adjacency-only and\ncaptured-span evidence never becomes \"the fix\" without target/state linkage or judgment. D9 reports\nrepeated-context mass/cost; avoidable loss, tax, or savings requires matched context-policy\nexperiments. D8 actual resume is descriptive; its improvement evaluation uses matched resume\ntreatments, not deliberately divergent baselines. Abandonment is unresolved_inactive(H) from the goal\ngraph with right censoring. Counts are frame-exact under named definitions, never unqualified\npopulation claims. CIs name their uncertainty source. Demos consume existing typed objects and render\nthrough Selection x Projection x Render; no demo-specific durable object or daemon loop.","acceptance_criteria":"1. Every D1-D9 child declares claim class, consumer proof, definitions/evaluation world, frame,\n measurement authority, privacy/excision, reproducible fixture, and falsification condition.\n2. D3 and D9 enforce the corrected naming gates; D8 rejects confounded divergent controls.\n3. D3 runs first on a cold external archive with cited candidates and measured precision@k.\n4. Any causal headline resolves to stc assignment/exposure/outcome receipts; otherwise it is\n observational/capability-only.\n5. Demo outputs reuse query/result/finding/judgment/report contracts and create no parallel stores.\n6. Closing the catalog requires every child reconciled and the D1/D3/D9 public-safe proof receipts.","notes":"ANALYTICS ATLAS (operator: 'what analytics could polylogue do that we do not yet know it could' — full text in .agent/scratch/archive-intelligence-design-2026-07-13.md addendum): A. PROCESS MINING — derive your actual debugging/build workflow as a discovered state machine with transition probabilities from action streams (alpha/heuristic miner on tool events; never applied to AI-pair-work logs); Markov entropy rate = workflow stereotypy per model. B. SURVIVAL ANALYSIS — Kaplan-Meier session-abandonment hazard vs duration/cost/error-count ('after the 3rd failed test run P(abandon) doubles'); time-to-resolution for recurring question clusters. C. INFORMATION THEORY — compression distance (NCD) as embedding-free similarity cross-check; conditional-entropy formulaic-ness score per model; MUTUAL INFORMATION between injected recall context and subsequent success = the honest self-test of the continuity product claim. D. GRAPH — session-x-file co-editing communities vs the import graph (mismatch = hidden coupling code structure hides); lineage-tree stats (fork survival, subagent fan-out efficiency). E. QUASI-EXPERIMENTAL — interrupted time series around tooling adoptions (beads, testmon, dolt-server: archive knows the dates); matched recall-vs-no-recall comparisons (observational, named confounds, or pre-registered via rxdo.9.10). F. CHANGEPOINT — PELT on cost/error/vocabulary ('something changed June 12' narratives; ref 9l5.17); fabrication screen = standing pattern query for claimed-actions-without-tool-events (67ac generalized to continuous monitor). G. INTERACTION SCIENCE — operator stall-time after agent output as confusion proxy; correction-incorporation turns = per-model STEERABILITY score (novel eval metric from real usage); question-answer coverage rate per model (agent-judged). H. ECONOMIC — marginal cost per merged PR/closed bead over time; model-tier efficiency frontier (cost x judged quality via D4/rankers) -\u003e routing-policy advisor with receipts. All rigor-native by construction (metric hashes, cohorts, sampled-only CIs).\nOPERATIONALIZATIONS for challenged atlas constructs (full text: closed-loops-design-2026-07-13.md Part C): ABANDONMENT = goal episode ending without terminal success AND no lineage descendant AND no same-question-cluster revisit within horizon H; recent sessions are RIGHT-CENSORED (exactly what Kaplan-Meier exists to handle — naive ended=abandoned counting is the bug); H is part of the metric hash; ladder v1 proxies -\u003e v2 outcome annotations -\u003e v3 goal-graph. RECALL-PACK HELP = four tiers: h1 direct usage of injected items (weakest, cheap), h2 re-explanation reduction (D9), h3 pre-registered A/B (only causal tier), h4 REDISCOVERY-MISS detection — agent re-derives content that WAS in the archive but NOT injected (embedding match) = measurable recall miss; converts part of unknown-unknowns into known-misses; residual limit named honestly (never-re-derived failures stay invisible). CORRECTION ABSORPTION = behavioral, never acknowledgment ('you're right' then repeating = noise): violation predicate per correction (subset compiles to checkable rules — 'use X not Y' is string-checkable, rule-tier; rest judged over pattern-extracted pairs); score = time-to-last-violation in-session; the metric that matters most = RECURRENCE across sessions (same correction needed again, embedding-matched) — local compliance without durable absorption is the real steerability failure.\nABANDONMENT/SUCCESS REDESIGN (operator: 'success' is semantic; abandonment cannot be annotated in realtime — but problems/questions OPENED and resolutions/answers CAN be): the primary grounding flips from retrospective outcome labels to PROSPECTIVE declared open/close events via the 37t.2 inline protocol — ::goal/::question/::problem markers open episodes (the mandatory session-start ::goal marker feeds this automatically), ::resolved/::answer/::blocked markers close them, refs link closures to openings across sessions. SUCCESS = declared closure (agent-declared tier, calibration-audited); ABANDONMENT = derived, never annotated: open episode with no closure in the future cone within horizon H (right-censored until H elapses). Ladder becomes: v1 structural proxies (PACK-E) for history; v2 declared open/close events going forward (exact, cheap); v3 goal-graph linking (refs + D1 clusters) for cross-session. dve1's outcome ontology repositions as BACKFILL for the pre-protocol corpus + audit tier for declared closures, not the primary.\nCross-link 2026-07-13: polylogue-9l5 epic = this atlas's earlier design (tower layering worth adopting; 9l5.7 = metric:\u003chash\u003e precursor). Per-child mapping recorded on the 9l5 epic note. One program, one implementation.\n\n[LEGACY FIELDS PRESERVED BY CORRECTIVE FOLLOW-UP 2026-07-13]\n\nORIGINAL DESCRIPTION:\nDesign capture: .agent/scratch/archive-intelligence-design-2026-07-13.md Thread 1. Nine demos beyond the current set, each rigor-native (recipe with query:\u003chash\u003e steps, metric:\u003chash\u003e numbers, CIs only on sampled quantities, pre-registered headlines, embedding model+version pinned in metric hashes per 303r.7): D1 convergent-questions (asked-N-times), D2 semantic drift of self, D3 you-solved-this-before (v16 exit-code transitions + embeddings + holdout precision@k), D4 answer-quality arbitrage (blinded BT on own question distribution), D5 idea genealogy, D6 novelty watch (standing query), D7 redundancy atlas (x #2467), D8 fleet convergence forensics (the 30-lane corpus), D9 re-explanation tax (continuity priced). Sequence after rxdo substrate + rigor mechanisms; D1/D3/D9 flagship candidates. Related: 212.11 proof world, 67ac, fcyf.\n\nORIGINAL DESIGN:\n## Thread 1 — Demos beyond the current list (embedding-grade, rxdo-native)\n\nRigor template for every demo below: the demo IS a recipe (rxdo.8) whose\nsteps are query:\u003chash\u003e refs; every number carries metric:\u003chash\u003e; cohorts are\nresult_set objects; sampled quantities carry bootstrap CIs (mechanism H);\nheadline claims pre-registered (C); embedding-derived numbers pin the\nembedding model+version in the metric hash (303r.7's model-effect key — an\nembedding upgrade is a confound, not a refresh).\n\nD1. **Convergent questions** (\"you have asked this 14 times\"). Cluster\nembeddings of authored-user question messages across ALL providers; surface\nrecurring unresolved questions with their N historical answers and whether\nthe answers agree (agent judges score agreement — K/L machinery).\nPopulation claim (count) + judgment layer; cohort = question-messages\n(material_origin honest). The single most \"this tool knows me\" demo.\n\nD2. **Semantic drift of self**: per-quarter centroids of authored messages;\ntrajectory through topic space; drift distances with CIs (sampled). \"What\nyou stopped and started caring about, measured.\"\n\nD3. **You solved this before**: given a fresh error text, embed → nearest\npast tool_result failures (tool_result_is_error=true) that were FOLLOWED by\nsuccess (exit-code transition within session) → surface the fix diff.\nRetrieval precision@k measured on a labeled holdout (D holdouts). Uses the\nv16 keystone columns + embeddings + lineage composition.\n\nD4. **Answer-quality arbitrage**: embedding-matched question pairs asked to\ndifferent models over time; blinded pairwise judging (N elicitation, agent\npanel + operator spot-check); Bradley-Terry per-model quality ON YOUR OWN\nquestion distribution — procurement decisions from your archive, not from\nbenchmarks.\n\nD5. **Idea genealogy**: trace a named concept through time: first\nappearance, mutation points (embedding neighborhoods over sliding windows),\nwhich sessions developed it, when it crossed into code (thread 4 join).\nRendered as a timeline artifact; the trace is a saved analysis DAG.\n\nD6. **Novelty watch**: standing query (rxdo.5) over embedding space — a new\nsession landing far from every historical cluster emits a novelty finding\ncandidate. \"You did something categorically new this week\" as a\npush-notification-grade event.\n\nD7. **Redundancy atlas**: semantic near-duplicate mass (embedding clusters)\n× physical lineage duplication (#2467 machinery) → \"your archive is X%\nretellings\" with exactness-honest accounting; doubles as a compression\nroadmap.\n\nD8. **Fleet convergence forensics**: tonight's 30-lane corpus — did\nindependent lanes converge on similar solutions? Embed lane outputs/diffs,\nmeasure cross-lane similarity vs a between-unrelated-tasks baseline. First\ndemo OF the multi-agent archive ABOUT multi-agent work.\n\nD9. **Re-explanation tax**: embedding-cluster instances of the operator\nre-establishing the same context across sessions; price it (metric:\nauthored tokens in re-explanation clusters × cost model). The continuity\nsales pitch as a measured number: \"context loss cost you N tokens / $X last\nmonth.\"\n\n## Cross-cutting: what makes all four threads one design\n\nEvery thread lands on the same three moves: (1) name it with a content\naddress (query:/metric:/ranker:/tag:/schema versions); (2) grade authority\nexplicitly (asserted vs judged vs derived; population vs sampled); (3) make\nagents produce CANDIDATES that flow through the one judge lifecycle.\nNothing here adds a second architecture — it's the rxdo graph + rigor\nmechanisms + annotation machinery, extended to tags, files, and taxonomy.\n\nCORRECTIVE READING 2026-07-13: the earlier detailed D1-D9 catalog remains valuable as ideation, but\nany conflicting \"fix,\" \"tax,\" population-exact, or abandonment wording is superseded by the\nauthoritative corrective contract in the design field and the child Beads.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:08:04Z","created_by":"Sinity","updated_at":"2026-07-13T05:55:06Z","metadata":{"consumer_proof":"external-audit,external-continuity,observed-operator-flow"},"labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.10","depends_on_id":"polylogue-rxdo","type":"parent-child","created_at":"2026-07-13T04:08:03Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-cijx","title":"File/repo modeling: replay-grade session-\u003etree trajectories and the eight products","description":"Thread 4 of archive-intelligence-design-2026-07-13.md. Replay = the validation benchmark (operator framing); the products: G1 file biographies (every conversation that shaped a file + rejected alternatives), G2 roads-not-taken corpus, G3 line provenance -\u003e per-model code SURVIVAL analysis, G4 cost-per-subsystem, G5 dead-context filtering for recall packs (inject only context whose file refs still resolve — biggest continuity quality lever), G6 personal SWE-bench (real (state,task,outcome) triples for model evals), G7 fleet conflict prediction (fcyf consumer), G8 semantic work-diffs. Substrate gap: file_refs relation (session/action x repo-identity x path x pre/post content hash) — the resolved evolution of polylogue-a7xr.17's unresolved code_refs strings. Repo identity must survive worktrees/renames (tonight's fanout = stress test). NON-GOAL: becoming a VCS. Spike output: file_refs schema sketch + replay-fidelity benchmark definition + G5 prototype scope.","design":"## Thread 4 — Files/repos: replay is the benchmark; the gold is eight products\n\nReplay-grade modeling = from session streams alone (Edit/Write/Bash tool\ncalls + results + git operations), reconstruct working-tree state\ntrajectories. The capability itself is a VALIDATION HARNESS (as the\noperator said); what it enables:\n\nG1. **File biographies**: every conversation that ever shaped a file, with\nrejected alternatives — `read --file \u003cpath\u003e` = git blame for the WHY. The\ncode-archaeology product.\nG2. **Roads not taken**: proposed-but-unapplied/reverted diffs as a\nqueryable corpus of rejected approaches.\nG3. **Line provenance**: which session/model/prompt authored the lines of\ncurrent HEAD; enables survival analysis (\"whose code survives 90 days\") —\na rigorous per-model quality measure NO benchmark can give.\nG4. **Cost-per-subsystem**: join actions' file paths × cost model — \"the\ndaemon cost $X across 214 sessions.\"\nG5. **Dead-context filtering for recall**: inject past context only when\nits file references still resolve against the CURRENT tree — recall packs\nstop citing code that no longer exists. The single biggest continuity\nquality lever.\nG6. **Personal SWE-bench**: replay yields (initial state, task, outcome)\ntriples from real work → private eval suite of YOUR tasks for judging new\nmodels (composes with D4/K-O judging).\nG7. **Fleet conflict prediction**: live file-touch trajectories per lane →\npredicted conflicts before they happen (fcyf fleet observatory consumer).\nG8. **Semantic work-diff**: compare two lanes/agents by file-state\ntrajectory structure, not diff text.\n\nSubstrate gap, concretely: a file_refs relation (session/action ×\nrepo-identity × path × pre/post content hash where derivable) — the\nresolved evolution of a7xr.17's unresolved strings. Repo identity needs\ncare (worktrees, renames, same-repo-many-checkouts — tonight's fanout is\nthe stress test). Explicit non-goal: polylogue does not become a VCS; it\nmodels what sessions DID to trees, keyed to git commits where visible.\n\n","status":"open","priority":2,"issue_type":"spike","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:07:45Z","created_by":"Sinity","updated_at":"2026-07-13T02:59:00Z","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-rxdo.10","title":"Archive-intelligence demo catalog: AI-D1 through AI-D9","description":"AI-D1\u2013AI-D9 are product proofs over the shared query/metric/pattern/judgment/experiment contracts, not nine\nnew subsystems. Every claim binds definition and evaluation refs, frame and measurement authority,\nprivacy/excision policy, and the evidence needed for its claim class. Flagships are AI-D1, AI-D3, and AI-D9;\nfirst external activation is D3. Observational outputs use honest names, while causal language\nrequires ExperimentDefinition receipts.","design":"## Thread 1 \u2014 Demos beyond the current list (embedding-grade, rxdo-native)\n\nRigor template for every demo below: the demo IS a recipe (rxdo.8) whose\nsteps are query:\u003chash\u003e refs; every number carries metric:\u003chash\u003e; cohorts are\nresult_set objects; sampled quantities carry bootstrap CIs (mechanism H);\nheadline claims pre-registered (C); embedding-derived numbers pin the\nembedding model+version in the metric hash (303r.7's model-effect key \u2014 an\nembedding upgrade is a confound, not a refresh).\n\nD1. **Convergent questions** (\"you have asked this 14 times\"). Cluster\nembeddings of authored-user question messages across ALL providers; surface\nrecurring unresolved questions with their N historical answers and whether\nthe answers agree (agent judges score agreement \u2014 K/L machinery).\nPopulation claim (count) + judgment layer; cohort = question-messages\n(material_origin honest). The single most \"this tool knows me\" demo.\n\nD2. **Semantic drift of self**: per-quarter centroids of authored messages;\ntrajectory through topic space; drift distances with CIs (sampled). \"What\nyou stopped and started caring about, measured.\"\n\nD3. **You solved this before**: given a fresh error text, embed \u2192 nearest\npast tool_result failures (tool_result_is_error=true) that were FOLLOWED by\nsuccess (exit-code transition within session) \u2192 surface the fix diff.\nRetrieval precision@k measured on a labeled holdout (D holdouts). Uses the\nv16 keystone columns + embeddings + lineage composition.\n\nD4. **Answer-quality arbitrage**: embedding-matched question pairs asked to\ndifferent models over time; blinded pairwise judging (N elicitation, agent\npanel + operator spot-check); Bradley-Terry per-model quality ON YOUR OWN\nquestion distribution \u2014 procurement decisions from your archive, not from\nbenchmarks.\n\nD5. **Idea genealogy**: trace a named concept through time: first\nappearance, mutation points (embedding neighborhoods over sliding windows),\nwhich sessions developed it, when it crossed into code (thread 4 join).\nRendered as a timeline artifact; the trace is a saved analysis DAG.\n\nD6. **Novelty watch**: standing query (rxdo.5) over embedding space \u2014 a new\nsession landing far from every historical cluster emits a novelty finding\ncandidate. \"You did something categorically new this week\" as a\npush-notification-grade event.\n\nD7. **Redundancy atlas**: semantic near-duplicate mass (embedding clusters)\n\u00d7 physical lineage duplication (#2467 machinery) \u2192 \"your archive is X%\nretellings\" with exactness-honest accounting; doubles as a compression\nroadmap.\n\nD8. **Fleet convergence forensics**: tonight's 30-lane corpus \u2014 did\nindependent lanes converge on similar solutions? Embed lane outputs/diffs,\nmeasure cross-lane similarity vs a between-unrelated-tasks baseline. First\ndemo OF the multi-agent archive ABOUT multi-agent work.\n\nD9. **Re-explanation tax**: embedding-cluster instances of the operator\nre-establishing the same context across sessions; price it (metric:\nauthored tokens in re-explanation clusters \u00d7 cost model). The continuity\nsales pitch as a measured number: \"context loss cost you N tokens / $X last\nmonth.\"\n\n## Cross-cutting: what makes all four threads one design\n\nEvery thread lands on the same three moves: (1) name it with a content\naddress (query:/metric:/ranker:/tag:/schema versions); (2) grade authority\nexplicitly (asserted vs judged vs derived; population vs sampled); (3) make\nagents produce CANDIDATES that flow through the one judge lifecycle.\nNothing here adds a second architecture \u2014 it's the rxdo graph + rigor\nmechanisms + annotation machinery, extended to tags, files, and taxonomy.\n\n## Authoritative corrective contract (2026-07-13)\n\nAUTHORITATIVE CLAIM CORRECTIONS. D3 returns prior observed recovery candidates; adjacency-only and\ncaptured-span evidence never becomes \"the fix\" without target/state linkage or judgment. D9 reports\nrepeated-context mass/cost; avoidable loss, tax, or savings requires matched context-policy\nexperiments. D8 actual resume is descriptive; its improvement evaluation uses matched resume\ntreatments, not deliberately divergent baselines. Abandonment is unresolved_inactive(H) from the goal\ngraph with right censoring. Counts are frame-exact under named definitions, never unqualified\npopulation claims. CIs name their uncertainty source. Demos consume existing typed objects and render\nthrough Selection x Projection x Render; no demo-specific durable object or daemon loop.\n\nDEMO NAMESPACE. This catalog uses AI-D1 through AI-D9. The proof-world portfolio under polylogue-212 uses PF-D*. In particular AI-D8 is fleet-convergence forensics and PF-D8 is actual session resume; unqualified D8 is invalid outside a parent-local historical quotation.","acceptance_criteria":"1. Every AI-D1\u2013AI-D9 child declares claim class, consumer proof, definitions/evaluation world, frame,\n measurement authority, privacy/excision, reproducible fixture, and falsification condition.\n2. AI-D3 and AI-D9 enforce the corrected naming gates; AI-D8 rejects confounded divergent controls.\n3. D3 runs first on a cold external archive with cited candidates and measured precision@k.\n4. Any causal headline resolves to stc assignment/exposure/outcome receipts; otherwise it is\n observational/capability-only.\n5. Demo outputs reuse query/result/finding/judgment/report contracts and create no parallel stores.\n6. Closing the catalog requires every child reconciled and the AI-D1/AI-D3/AI-D9 public-safe proof receipts.","notes":"ANALYTICS ATLAS (operator: 'what analytics could polylogue do that we do not yet know it could' \u2014 full text in .agent/scratch/archive-intelligence-design-2026-07-13.md addendum): A. PROCESS MINING \u2014 derive your actual debugging/build workflow as a discovered state machine with transition probabilities from action streams (alpha/heuristic miner on tool events; never applied to AI-pair-work logs); Markov entropy rate = workflow stereotypy per model. B. SURVIVAL ANALYSIS \u2014 Kaplan-Meier session-abandonment hazard vs duration/cost/error-count ('after the 3rd failed test run P(abandon) doubles'); time-to-resolution for recurring question clusters. C. INFORMATION THEORY \u2014 compression distance (NCD) as embedding-free similarity cross-check; conditional-entropy formulaic-ness score per model; MUTUAL INFORMATION between injected recall context and subsequent success = the honest self-test of the continuity product claim. D. GRAPH \u2014 session-x-file co-editing communities vs the import graph (mismatch = hidden coupling code structure hides); lineage-tree stats (fork survival, subagent fan-out efficiency). E. QUASI-EXPERIMENTAL \u2014 interrupted time series around tooling adoptions (beads, testmon, dolt-server: archive knows the dates); matched recall-vs-no-recall comparisons (observational, named confounds, or pre-registered via rxdo.9.10). F. CHANGEPOINT \u2014 PELT on cost/error/vocabulary ('something changed June 12' narratives; ref 9l5.17); fabrication screen = standing pattern query for claimed-actions-without-tool-events (67ac generalized to continuous monitor). G. INTERACTION SCIENCE \u2014 operator stall-time after agent output as confusion proxy; correction-incorporation turns = per-model STEERABILITY score (novel eval metric from real usage); question-answer coverage rate per model (agent-judged). H. ECONOMIC \u2014 marginal cost per merged PR/closed bead over time; model-tier efficiency frontier (cost x judged quality via D4/rankers) -\u003e routing-policy advisor with receipts. All rigor-native by construction (metric hashes, cohorts, sampled-only CIs).\nOPERATIONALIZATIONS for challenged atlas constructs (full text: closed-loops-design-2026-07-13.md Part C): ABANDONMENT = goal episode ending without terminal success AND no lineage descendant AND no same-question-cluster revisit within horizon H; recent sessions are RIGHT-CENSORED (exactly what Kaplan-Meier exists to handle \u2014 naive ended=abandoned counting is the bug); H is part of the metric hash; ladder v1 proxies -\u003e v2 outcome annotations -\u003e v3 goal-graph. RECALL-PACK HELP = four tiers: h1 direct usage of injected items (weakest, cheap), h2 re-explanation reduction (D9), h3 pre-registered A/B (only causal tier), h4 REDISCOVERY-MISS detection \u2014 agent re-derives content that WAS in the archive but NOT injected (embedding match) = measurable recall miss; converts part of unknown-unknowns into known-misses; residual limit named honestly (never-re-derived failures stay invisible). CORRECTION ABSORPTION = behavioral, never acknowledgment ('you're right' then repeating = noise): violation predicate per correction (subset compiles to checkable rules \u2014 'use X not Y' is string-checkable, rule-tier; rest judged over pattern-extracted pairs); score = time-to-last-violation in-session; the metric that matters most = RECURRENCE across sessions (same correction needed again, embedding-matched) \u2014 local compliance without durable absorption is the real steerability failure.\nABANDONMENT/SUCCESS REDESIGN (operator: 'success' is semantic; abandonment cannot be annotated in realtime \u2014 but problems/questions OPENED and resolutions/answers CAN be): the primary grounding flips from retrospective outcome labels to PROSPECTIVE declared open/close events via the 37t.2 inline protocol \u2014 ::goal/::question/::problem markers open episodes (an optional/advisory session-start ::goal marker may feed this when present), ::resolved/::answer/::blocked markers close them, refs link closures to openings across sessions. SUCCESS = declared closure (agent-declared tier, calibration-audited); ABANDONMENT = derived, never annotated: open episode with no closure in the future cone within horizon H (right-censored until H elapses). Ladder becomes: v1 structural proxies (PACK-E) for history; v2 declared open/close events going forward (exact, cheap); v3 goal-graph linking (refs + D1 clusters) for cross-session. dve1's outcome ontology repositions as BACKFILL for the pre-protocol corpus + audit tier for declared closures, not the primary.\nCross-link 2026-07-13: polylogue-9l5 epic = this atlas's earlier design (tower layering worth adopting; 9l5.7 = metric:\u003chash\u003e precursor). Per-child mapping recorded on the 9l5 epic note. One program, one implementation.\n\n[LEGACY FIELDS PRESERVED BY CORRECTIVE FOLLOW-UP 2026-07-13]\n\nORIGINAL DESCRIPTION:\nDesign capture: .agent/scratch/archive-intelligence-design-2026-07-13.md Thread 1. Nine demos beyond the current set, each rigor-native (recipe with query:\u003chash\u003e steps, metric:\u003chash\u003e numbers, CIs only on sampled quantities, pre-registered headlines, embedding model+version pinned in metric hashes per 303r.7): D1 convergent-questions (asked-N-times), D2 semantic drift of self, D3 you-solved-this-before (v16 exit-code transitions + embeddings + holdout precision@k), D4 answer-quality arbitrage (blinded BT on own question distribution), D5 idea genealogy, D6 novelty watch (standing query), D7 redundancy atlas (x #2467), D8 fleet convergence forensics (the 30-lane corpus), D9 re-explanation tax (continuity priced). Sequence after rxdo substrate + rigor mechanisms; D1/D3/D9 flagship candidates. Related: 212.11 proof world, 67ac, fcyf.\n\nORIGINAL DESIGN:\n## Thread 1 \u2014 Demos beyond the current list (embedding-grade, rxdo-native)\n\nRigor template for every demo below: the demo IS a recipe (rxdo.8) whose\nsteps are query:\u003chash\u003e refs; every number carries metric:\u003chash\u003e; cohorts are\nresult_set objects; sampled quantities carry bootstrap CIs (mechanism H);\nheadline claims pre-registered (C); embedding-derived numbers pin the\nembedding model+version in the metric hash (303r.7's model-effect key \u2014 an\nembedding upgrade is a confound, not a refresh).\n\nD1. **Convergent questions** (\"you have asked this 14 times\"). Cluster\nembeddings of authored-user question messages across ALL providers; surface\nrecurring unresolved questions with their N historical answers and whether\nthe answers agree (agent judges score agreement \u2014 K/L machinery).\nPopulation claim (count) + judgment layer; cohort = question-messages\n(material_origin honest). The single most \"this tool knows me\" demo.\n\nD2. **Semantic drift of self**: per-quarter centroids of authored messages;\ntrajectory through topic space; drift distances with CIs (sampled). \"What\nyou stopped and started caring about, measured.\"\n\nD3. **You solved this before**: given a fresh error text, embed \u2192 nearest\npast tool_result failures (tool_result_is_error=true) that were FOLLOWED by\nsuccess (exit-code transition within session) \u2192 surface the fix diff.\nRetrieval precision@k measured on a labeled holdout (D holdouts). Uses the\nv16 keystone columns + embeddings + lineage composition.\n\nD4. **Answer-quality arbitrage**: embedding-matched question pairs asked to\ndifferent models over time; blinded pairwise judging (N elicitation, agent\npanel + operator spot-check); Bradley-Terry per-model quality ON YOUR OWN\nquestion distribution \u2014 procurement decisions from your archive, not from\nbenchmarks.\n\nD5. **Idea genealogy**: trace a named concept through time: first\nappearance, mutation points (embedding neighborhoods over sliding windows),\nwhich sessions developed it, when it crossed into code (thread 4 join).\nRendered as a timeline artifact; the trace is a saved analysis DAG.\n\nD6. **Novelty watch**: standing query (rxdo.5) over embedding space \u2014 a new\nsession landing far from every historical cluster emits a novelty finding\ncandidate. \"You did something categorically new this week\" as a\npush-notification-grade event.\n\nD7. **Redundancy atlas**: semantic near-duplicate mass (embedding clusters)\n\u00d7 physical lineage duplication (#2467 machinery) \u2192 \"your archive is X%\nretellings\" with exactness-honest accounting; doubles as a compression\nroadmap.\n\nD8. **Fleet convergence forensics**: tonight's 30-lane corpus \u2014 did\nindependent lanes converge on similar solutions? Embed lane outputs/diffs,\nmeasure cross-lane similarity vs a between-unrelated-tasks baseline. First\ndemo OF the multi-agent archive ABOUT multi-agent work.\n\nD9. **Re-explanation tax**: embedding-cluster instances of the operator\nre-establishing the same context across sessions; price it (metric:\nauthored tokens in re-explanation clusters \u00d7 cost model). The continuity\nsales pitch as a measured number: \"context loss cost you N tokens / $X last\nmonth.\"\n\n## Cross-cutting: what makes all four threads one design\n\nEvery thread lands on the same three moves: (1) name it with a content\naddress (query:/metric:/ranker:/tag:/schema versions); (2) grade authority\nexplicitly (asserted vs judged vs derived; population vs sampled); (3) make\nagents produce CANDIDATES that flow through the one judge lifecycle.\nNothing here adds a second architecture \u2014 it's the rxdo graph + rigor\nmechanisms + annotation machinery, extended to tags, files, and taxonomy.\n\nCORRECTIVE READING 2026-07-13: the earlier detailed D1-D9 catalog remains valuable as ideation, but\nany conflicting \"fix,\" \"tax,\" population-exact, or abandonment wording is superseded by the\nauthoritative corrective contract in the design field and the child Beads.\n\nMARKER GATE: prospective goal markers are optional until polylogue-37t.2's declaration-recall experiment and a later explicit operator policy. Demos accept missing declarations as unknown/censored and never treat protocol non-use as abandonment.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:08:04Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","metadata":{"consumer_proof":"external-audit,external-continuity,observed-operator-flow"},"labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.10","depends_on_id":"polylogue-rxdo","type":"parent-child","created_at":"2026-07-13T04:08:03Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-cijx","title":"File/repo evidence: observed tree trajectories and graded reproduction","description":"Own the session-to-repository evidence program that superseded 7xv and 7xv.1. Session streams alone support an observed tree trajectory, not an exact historical working tree. Stronger claims require explicit checkpoints and replay verification. The program supplies file biographies, roads-not-taken evidence, contribution provenance, cost-per-subsystem, dead-reference filtering for recall, private evaluation episodes, fleet conflict prediction, and semantic work comparisons without turning Polylogue into a VCS.","design":"EVIDENCE MODEL. Materialize file/repository observations with session/action refs, repository identity, worktree/root evidence, path and rename evidence, operation kind, observed pre/post content hashes where actually captured, command/tool outcome, and a coverage/degradation receipt. Repository identity survives multiple worktrees and renames and never relies on cwd alone when stronger git evidence exists.\n\nGRADE EVERY TRAJECTORY:\n- observed: only tool/action-derived deltas; missing human edits, generators, shell side effects, concurrent agents, and external processes remain explicit coverage gaps;\n- checkpointed: an interval is anchored by captured git tree/file hashes or equivalent pre/post state;\n- replay-verified: a bounded reconstruction or applied patch matches a captured checkpoint and verifier receipt.\n\nPRODUCT CLAIMS. G1 file biographies, G2 roads-not-taken, G4 cost joins, G5 dead-context filtering, and G7 conflict hints may consume observed evidence with visible coverage. G3 is contribution provenance, never line authorship; survival claims require at least checkpointed linkage. G6 private evaluation episodes and G8 exact work comparisons require checkpointed or replay-verified state plus declared task/outcome authority. Proposed-but-unapplied material remains distinct from applied changes.\n\nREPRODUCTION HARNESS (absorbed from superseded 7xv.1). Build an ordered work trace, a reproduction plan, and a disposable worktree at the recorded base. Prefer applying the produced patch or checking out the target commit and rerunning verifier-class commands rather than replaying every historical command. Classify actions as pure_read | safe_verify | mutating_patch | networked | secret_sensitive | interactive | unknown. Only pure_read/safe_verify auto-run; mutating work is confined to disposable worktrees; networked/secret-sensitive/unknown remain plan-only without explicit authorization. Receipts cite both original evidence and reproduction outputs.\n\nDURABILITY. File observations and derived trajectories are rebuildable index/read-model state; operator judgments and promoted evaluation definitions use their owning durable assertion/experiment contracts. No second VCS, generic replay executor, or unsupported authorship ledger is introduced.","status":"open","priority":2,"issue_type":"spike","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:07:45Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","dependency_count":0,"dependent_count":0,"comment_count":0,"notes":"[LEGACY FIELDS PRESERVED BY FINAL CORRECTIVE PASS 2026-07-13]\n\nORIGINAL TITLE:\nFile/repo modeling: replay-grade session-\u003etree trajectories and the eight products\n\nORIGINAL DESCRIPTION:\nThread 4 of archive-intelligence-design-2026-07-13.md. Replay = the validation benchmark (operator framing); the products: G1 file biographies (every conversation that shaped a file + rejected alternatives), G2 roads-not-taken corpus, G3 line provenance -\u003e per-model code SURVIVAL analysis, G4 cost-per-subsystem, G5 dead-context filtering for recall packs (inject only context whose file refs still resolve \u2014 biggest continuity quality lever), G6 personal SWE-bench (real (state,task,outcome) triples for model evals), G7 fleet conflict prediction (fcyf consumer), G8 semantic work-diffs. Substrate gap: file_refs relation (session/action x repo-identity x path x pre/post content hash) \u2014 the resolved evolution of polylogue-a7xr.17's unresolved code_refs strings. Repo identity must survive worktrees/renames (tonight's fanout = stress test). NON-GOAL: becoming a VCS. Spike output: file_refs schema sketch + replay-fidelity benchmark definition + G5 prototype scope.\n\nORIGINAL DESIGN:\n## Thread 4 \u2014 Files/repos: replay is the benchmark; the gold is eight products\n\nReplay-grade modeling = from session streams alone (Edit/Write/Bash tool\ncalls + results + git operations), reconstruct working-tree state\ntrajectories. The capability itself is a VALIDATION HARNESS (as the\noperator said); what it enables:\n\nG1. **File biographies**: every conversation that ever shaped a file, with\nrejected alternatives \u2014 `read --file \u003cpath\u003e` = git blame for the WHY. The\ncode-archaeology product.\nG2. **Roads not taken**: proposed-but-unapplied/reverted diffs as a\nqueryable corpus of rejected approaches.\nG3. **Line provenance**: which session/model/prompt authored the lines of\ncurrent HEAD; enables survival analysis (\"whose code survives 90 days\") \u2014\na rigorous per-model quality measure NO benchmark can give.\nG4. **Cost-per-subsystem**: join actions' file paths \u00d7 cost model \u2014 \"the\ndaemon cost $X across 214 sessions.\"\nG5. **Dead-context filtering for recall**: inject past context only when\nits file references still resolve against the CURRENT tree \u2014 recall packs\nstop citing code that no longer exists. The single biggest continuity\nquality lever.\nG6. **Personal SWE-bench**: replay yields (initial state, task, outcome)\ntriples from real work \u2192 private eval suite of YOUR tasks for judging new\nmodels (composes with D4/K-O judging).\nG7. **Fleet conflict prediction**: live file-touch trajectories per lane \u2192\npredicted conflicts before they happen (fcyf fleet observatory consumer).\nG8. **Semantic work-diff**: compare two lanes/agents by file-state\ntrajectory structure, not diff text.\n\nSubstrate gap, concretely: a file_refs relation (session/action \u00d7\nrepo-identity \u00d7 path \u00d7 pre/post content hash where derivable) \u2014 the\nresolved evolution of a7xr.17's unresolved strings. Repo identity needs\ncare (worktrees, renames, same-repo-many-checkouts \u2014 tonight's fanout is\nthe stress test). Explicit non-goal: polylogue does not become a VCS; it\nmodels what sessions DID to trees, keyed to git commits where visible.\n\n","acceptance_criteria":"1. A seeded session with tool edits plus an uncaptured external edit renders an observed trajectory with the gap visible and cannot claim an exact tree, exact authorship, or replay verification.\n2. A checkpointed fixture binds pre/post git tree or file hashes; deleting a checkpoint downgrades every dependent claim.\n3. A replay-verified fixture creates a disposable worktree, applies the recorded patch/target, runs declared verifiers, matches the checkpoint, and emits a two-way receipt.\n4. Unsafe, networked, secret-sensitive, interactive, and unknown actions are not automatically replayed.\n5. Contribution provenance distinguishes proposer, applier, generator, and observed committer where evidence permits; it never silently renders model authorship.\n6. G5 excludes or visibly degrades recall items whose file refs no longer resolve against the selected repository generation.\n7. The active design contains the session-repo mapping and safe reproduction value from superseded 7xv/7xv.1; no reader must reconstruct it from closed Beads.","labels":["area:insights","area:interop","horizon:mid","tech-tree"]} {"_type":"issue","id":"polylogue-uh6c","title":"Tags redesign: namespaces with separate membership, affinity, and confidence axes","description":"Informal tags remain namespaced, plural, and non-hierarchical by default, but one scalar cannot\nrepresent asserted membership, semantic affinity, and classification confidence. These are three\nindependent constructs with axis-specific queries and provenance. Affinity never grants membership;\nconfidence measures an assertion/judgment, not similarity.","design":"tagged(item, tag) is asserted boolean/qualified membership with author/evidence/status.\ntag_affinity(item, prototype) is embedding/model-derived similarity tied to a versioned prototype,\nmodel, and evaluation world. tag_confidence(assertion) is calibrated uncertainty of a classifier or\njudgment tied to its actor/execution context and definition. Comparisons or conversions across axes\nfail closed unless an operation declares a versioned conversion. Informal membership may remain\ninformal forever. A prototype is a resource/definition used to calculate affinity, not tag identity.\nDSL predicates and renderers name the axis (`tagged:`, `tag-affinity:`, `tag-confidence:`); the\nambiguous scalar `tag:x\u003e0.7` is rejected.","acceptance_criteria":"Seed and query: high affinity without membership; asserted membership with unknown affinity; and a\nlow-confidence classifier assertion without changing membership or affinity. Axis-mixing operations\nfail with a named conversion requirement. Prototype/model changes alter affinity receipts, not tag\nidentity. Cross-surface outputs preserve axis and provenance. Verify through production DSL lowering,\nstorage/read paths, and renderer tests—not a test-only replica.","notes":"[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nThread 3 of archive-intelligence-design-2026-07-13.md (nayuki tags-not-hierarchies applied). DECISIONS PROPOSED: no tree schema (hierarchy-as-convention via namespaces like topic/x, prefix queries); scalar tags as a THREE-TIER AUTHORITY LADDER: asserted-binary (user.db authority), asserted-scalar (judged confidence, calibrated agent judges), derived-scalar (embedding similarity to tag prototype, index-tier disposable). Tag prototypes content-addressed (tag:\u003chash\u003e over exemplar refs + embedding model key) with mutable name pointers — same names-\u003ehashes pattern as query:/metric:/ranker:. DSL scalar predicates (tag:python\u003e0.7), min/max fuzzy algebra, mixed-authority composition fails closed. Spike output: confirm the ladder against current TAG assertion rows + migration story + DSL grammar cost (colon-terminal LALR pitfall).\n\nORIGINAL DESIGN:\n## Thread 3 — Tags: namespaces yes, trees no, scalars via three authority tiers\n\nNayuki's argument (single-parent hierarchies force false choices; tags are\nmulti-membership; queries are intersections) is already polylogue's\ndirection — TAG assertions are flat multi-membership. Adopt from the essay:\ntag QUERIES as first-class set algebra (already have it via DSL) and\nkey-value tags where needed. Decisions:\n\n- **No tree schema.** Hierarchy-as-convention via namespaces\n (topic/search, lang/python) — prefix queries give grouping free, no new\n machinery, no single-parent lie.\n- **Scalar tags — yes, as an authority ladder, and THIS is the embedding\n unification**: a tag is a named region in meaning space with three\n assignment tiers:\n (a) asserted-binary — operator/agent says so; user.db authority;\n (b) asserted-scalar — judged confidence from annotation batches\n (calibrated agent judges, L);\n (c) derived-scalar — similarity(item, tag prototype) computed from\n embeddings for EVERYTHING, disposable/rebuildable (index-tier\n semantics, honest about being derived).\n Tag prototypes are content-addressed (tag:\u003chash\u003e over exemplar refs +\n embedding model key) with mutable name pointers — the exact\n names→hashes pattern of query:/metric:/ranker:. Corrections (b) feed\n prototype revisions; the ladder is self-improving.\n- **DSL**: scalar predicates `tag:python\u003e0.7`; fuzzy set algebra uses\n min/max semantics, mixed-authority composition fails closed with a\n suggestion (grain doctrine applied to authority).\n- Embeddings ↔ hierarchy: embedding space subsumes soft hierarchy\n (clusters nest approximately); a formal tree adds nothing analytical —\n navigation UIs can render soft nesting on demand.\n\n","status":"open","priority":2,"issue_type":"spike","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:07:40Z","created_by":"Sinity","updated_at":"2026-07-13T05:44:17Z","dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-dve1","title":"Seed annotation ontologies + autonomous per-archive ontology bootstrap","description":"Thread 2 of archive-intelligence-design-2026-07-13.md. SHIP packaged annotation schemas on the EXISTING polylogue/annotations machinery: activity, outcome (solved/partial/abandoned/question-opened/closed), knowledge-artifact (decision/lesson/preference/fact/commitment-made), reusability (snippet/recipe/demo-worthy). Affect/stance NOT default (privacy: opt-in only). BUILD the bootstrap loop for archive-specific topics: embed+cluster sample -\u003e agent proposes labels grounded in exemplars -\u003e operator judges via elicitation session (rxdo.9.14) -\u003e schema v1 registered -\u003e agent batch backfill as candidates -\u003e standing query watches cluster drift, proposes v2. Productizes the data-cartography workflow. DEP: rxdo.4 labels, rxdo.9.14 elicitation.\n\n## Authoritative corrective scope (2026-07-13)\n\nFormal ontology membership is not the high end of an informal scalar tag ladder. Informal tags and\naffinity may nominate ontology candidates, but only schema/version/batch-governed judgment can\ncreate ontology facts.","design":"## Thread 2 — Ontologies: ship seeds, derive the rest\n\nThe machinery already exists (annotation schemas + batches + judge\nlifecycle + rxdo.4 labels). What to SHIP is seed schema definitions, and\nwhat to BUILD is the bootstrap loop.\n\nSeed ontologies (packaged annotation schemas, versioned, judge-gated):\n- **activity**: debugging | design | implementation | research | writing |\n ideation | ops | procurement — session/segment grain.\n- **outcome**: solved | partial | abandoned | superseded | question-opened |\n question-closed — the基basis for D1/D3 and success analytics.\n- **knowledge-artifact**: decision | lesson | preference | fact-established |\n commitment-made — feeds existing AssertionKinds; \"commitment-made\" is the\n sleeper (promises you made and forgot).\n- **reusability**: snippet-worthy | recipe-worthy | demo-worthy — the\n curation feeder.\n- Affect/stance deliberately NOT in the default seed set (privacy posture:\n private-by-default archives may opt in; never ship as silently-on).\n\nDomain topics are NOT built-in — they are derived per-archive by the\n**ontology bootstrap loop** (the productization of tonight's\ndata-cartography prompt): (1) embed + cluster a sample; (2) an agent\nproposes taxonomy labels grounded in exemplar sessions per cluster; (3) the\noperator judges/renames via an elicitation session (N — this is a judgment\nworkflow, blinding optional); (4) schema v1 registered in\nannotation_schemas; (5) agent batch backfills as candidate annotations;\n(6) a standing query watches cluster drift and proposes v2 when the space\nmoves. Custom ontology as a DERIVED, versioned, judged object — the\nscaffolding universal, the taxonomy personal.\n\n## Authoritative corrective contract (2026-07-13)\n\nCandidate generation records source tag membership, affinity, classifier definition, confidence,\nand evidence refs separately. Promotion creates a new annotation-batch assertion under a versioned\nontology schema after judgment; it never mutates an informal tag into a formal fact. Autonomous work\nstops at candidate generation until governed experiment receipts justify more authority.","acceptance_criteria":"## Corrective acceptance criteria (2026-07-13)\n\nA high-affinity informal tag produces at most a candidate. Without an explicit judged batch it does\nnot appear in formal ontology queries. Promotion preserves the source axes and schema/batch refs;\nrejection leaves informal tagging intact.","notes":"BOOTSTRAP LOOP EXPANSIONS (operator: 'expand this idea'): (1) MULTI-VIEW — cluster on content embeddings AND behavioral signatures (action patterns via avna row-patterns, temporal rhythms, cost shapes) — different views yield different ontologies (topic vs workflow vs collaboration-style); (2) CROSS-VIEW AGREEMENT as taxonomy validation — a category isolated independently by text AND behavior views is real, reducing LLM-label hallucination; (3) UTILITY-DRIVEN REFINEMENT — rxdo.3 query-run telemetry shows which labels are actually QUERIED; unused labels decay, heavily-queried low-precision labels get split proposals — ontology optimizes for query utility (closed loop unique to polylogue: we log our own query usage); (4) ACTIVE EXEMPLAR SOLICITATION — route max-entropy boundary sessions to judgment first (active learning, resorter economics); (5) definitions-as-hypotheses — each label carries prototype + criterion, backfill measures precision, bad labels pruned; (6) EPOCH-SCOPED labels — categories can have validity windows ('your 2025 obsession'); (7) MATURATION PATH — stable categories upgrade from labels to structured extraction schemas (annotation machinery already supports fields: procurement -\u003e {vendor, decision, price}); (8) subdivision on demand — split a cluster only when query traffic + internal variance justify it, namespaces emerge.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:07:34Z","created_by":"Sinity","updated_at":"2026-07-13T05:44:24Z","dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-dve1","title":"Seed annotation ontologies + autonomous per-archive ontology bootstrap","description":"Ship versioned seed annotation schemas over the existing annotation/batch/judgment substrate and bootstrap archive-specific ontologies as governed candidates. Seed families are activity, prospective goal events, observed outcome evidence, knowledge artifacts, and reusability. `unresolved_inactive(H)` is derived by the goal graph; abandonment is never inferred as a timeless annotation. Informal tags/affinity may nominate candidates but cannot become formal ontology facts without a judged annotation batch.","design":"SEED SCHEMAS.\n- activity at declared session/segment grain: debugging, design, implementation, research, writing, ideation, ops, procurement;\n- goal events: opened, blocked, resumed, declared-resolved, superseded, and explicitly-abandoned only when an actor actually declares it;\n- outcome evidence: test passed, commit observed, deployment observed, user accepted, answer declared, unknown, with structural/rule/judged authority preserved;\n- knowledge artifact: decision, lesson, preference, fact candidate/established under named authority, commitment;\n- reusability: snippet-, recipe-, and demo-worthy as purpose-specific judgments.\nAffect/stance remains opt-in. Goal state belongs to 7yk5. `unresolved_inactive(H)` is a horizon/evaluation-world derivation with censoring, never a label this schema guesses. Historical solved/partial/abandoned labels are backfill candidates or audit judgments, not primary prospective truth.\n\nBOOTSTRAP. Sample and cluster multiple declared views: content embeddings, action-pattern signatures, temporal/cost shapes, and outcome evidence. Cross-view agreement is validation evidence, not automatic truth. An agent proposes labels grounded in exemplars; active elicitation routes boundary cases; the operator/shared judgment lifecycle accepts, renames, splits, or rejects; a versioned schema and annotation batch record the result. Query utility, residue, epoch drift, and precision may propose revisions. Autonomous work stops at candidates.\n\nTAG/ONTOLOGY BOUNDARY. Candidate generation records source tag membership, affinity, classifier definition, confidence, frame, and evidence refs separately. Promotion creates new formal annotation assertions under a schema/batch; it never mutates an informal tag into a formal fact. Version crosswalks, an unclassified residue bucket, rare-category exploration, privacy/excision, and rejection history remain visible.","acceptance_criteria":"1. Prospective open/close/block events and structural outcome evidence remain distinct; absence of closure does not create an abandonment annotation.\n2. The same open goal can become unresolved_inactive(H) only through 7yk5 with a named horizon/frame/evaluation receipt and right-censoring.\n3. A high-affinity informal tag produces at most a candidate; formal ontology queries remain empty until a judged schema/batch assertion exists.\n4. A rejected candidate leaves informal tags intact and preserves the rejection/evidence trail.\n5. Multi-view bootstrap fixtures preserve cross-view disagreement, residue, rare samples, epoch scope, and privacy/excision behavior.\n6. Historical outcome backfill renders its proxy/judged authority and cannot overwrite prospective goal events.","notes":"[LEGACY FIELDS PRESERVED BY FINAL CORRECTIVE PASS 2026-07-13]\n\nORIGINAL DESCRIPTION:\nThread 2 of archive-intelligence-design-2026-07-13.md. SHIP packaged annotation schemas on the EXISTING polylogue/annotations machinery: activity, outcome (solved/partial/abandoned/question-opened/closed), knowledge-artifact (decision/lesson/preference/fact/commitment-made), reusability (snippet/recipe/demo-worthy). Affect/stance NOT default (privacy: opt-in only). BUILD the bootstrap loop for archive-specific topics: embed+cluster sample -\u003e agent proposes labels grounded in exemplars -\u003e operator judges via elicitation session (rxdo.9.14) -\u003e schema v1 registered -\u003e agent batch backfill as candidates -\u003e standing query watches cluster drift, proposes v2. Productizes the data-cartography workflow. DEP: rxdo.4 labels, rxdo.9.14 elicitation.\n\n## Authoritative corrective scope (2026-07-13)\n\nFormal ontology membership is not the high end of an informal scalar tag ladder. Informal tags and\naffinity may nominate ontology candidates, but only schema/version/batch-governed judgment can\ncreate ontology facts.\n\nORIGINAL DESIGN:\n## Thread 2 \u2014 Ontologies: ship seeds, derive the rest\n\nThe machinery already exists (annotation schemas + batches + judge\nlifecycle + rxdo.4 labels). What to SHIP is seed schema definitions, and\nwhat to BUILD is the bootstrap loop.\n\nSeed ontologies (packaged annotation schemas, versioned, judge-gated):\n- **activity**: debugging | design | implementation | research | writing |\n ideation | ops | procurement \u2014 session/segment grain.\n- **outcome**: solved | partial | abandoned | superseded | question-opened |\n question-closed \u2014 the\u57fabasis for D1/D3 and success analytics.\n- **knowledge-artifact**: decision | lesson | preference | fact-established |\n commitment-made \u2014 feeds existing AssertionKinds; \"commitment-made\" is the\n sleeper (promises you made and forgot).\n- **reusability**: snippet-worthy | recipe-worthy | demo-worthy \u2014 the\n curation feeder.\n- Affect/stance deliberately NOT in the default seed set (privacy posture:\n private-by-default archives may opt in; never ship as silently-on).\n\nDomain topics are NOT built-in \u2014 they are derived per-archive by the\n**ontology bootstrap loop** (the productization of tonight's\ndata-cartography prompt): (1) embed + cluster a sample; (2) an agent\nproposes taxonomy labels grounded in exemplar sessions per cluster; (3) the\noperator judges/renames via an elicitation session (N \u2014 this is a judgment\nworkflow, blinding optional); (4) schema v1 registered in\nannotation_schemas; (5) agent batch backfills as candidate annotations;\n(6) a standing query watches cluster drift and proposes v2 when the space\nmoves. Custom ontology as a DERIVED, versioned, judged object \u2014 the\nscaffolding universal, the taxonomy personal.\n\n## Authoritative corrective contract (2026-07-13)\n\nCandidate generation records source tag membership, affinity, classifier definition, confidence,\nand evidence refs separately. Promotion creates a new annotation-batch assertion under a versioned\nontology schema after judgment; it never mutates an informal tag into a formal fact. Autonomous work\nstops at candidate generation until governed experiment receipts justify more authority.\n\nORIGINAL ACCEPTANCE_CRITERIA:\n## Corrective acceptance criteria (2026-07-13)\n\nA high-affinity informal tag produces at most a candidate. Without an explicit judged batch it does\nnot appear in formal ontology queries. Promotion preserves the source axes and schema/batch refs;\nrejection leaves informal tagging intact.\n\nORIGINAL NOTES:\nBOOTSTRAP LOOP EXPANSIONS (operator: 'expand this idea'): (1) MULTI-VIEW \u2014 cluster on content embeddings AND behavioral signatures (action patterns via avna row-patterns, temporal rhythms, cost shapes) \u2014 different views yield different ontologies (topic vs workflow vs collaboration-style); (2) CROSS-VIEW AGREEMENT as taxonomy validation \u2014 a category isolated independently by text AND behavior views is real, reducing LLM-label hallucination; (3) UTILITY-DRIVEN REFINEMENT \u2014 rxdo.3 query-run telemetry shows which labels are actually QUERIED; unused labels decay, heavily-queried low-precision labels get split proposals \u2014 ontology optimizes for query utility (closed loop unique to polylogue: we log our own query usage); (4) ACTIVE EXEMPLAR SOLICITATION \u2014 route max-entropy boundary sessions to judgment first (active learning, resorter economics); (5) definitions-as-hypotheses \u2014 each label carries prototype + criterion, backfill measures precision, bad labels pruned; (6) EPOCH-SCOPED labels \u2014 categories can have validity windows ('your 2025 obsession'); (7) MATURATION PATH \u2014 stable categories upgrade from labels to structured extraction schemas (annotation machinery already supports fields: procurement -\u003e {vendor, decision, price}); (8) subdivision on demand \u2014 split a cluster only when query traffic + internal variance justify it, namespaces emerge.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T02:07:34Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-rxdo.9.14","title":"Active elicitation sessions: resorter loop with blinding (CLI + agent batch)","description":"Rigor mechanism N (gwern.net/resorter adaptation). Elicitation session = (target set, dimensions, judge, blinding policy, budget); engine picks next comparison for max information (closest latent estimates / fewest observations) so ~50 items rank in ~100 comparisons. Surfaces: operator CLI riding p5g's fzf pattern (two panes, pick better, tie/skip), and agent batch mode (MCP feeding pairs, collecting verdicts). Part I blinding (rxdo.9.6) applies AT elicitation: provenance masked until session ends. Sessions durable, citing emitted judgments. DEP: K + M.","design":"## Authoritative corrective contract (2026-07-13)\n\nActive elicitation uses exploration quotas so uncertain, minority, disconnected, and low-coverage\nregions cannot starve behind exploitation. Selection receipts bind candidate pool, quota/policy,\nitem order/blinding, rubric, ActorRef/ExecutionContextRef, and definition versions.","acceptance_criteria":"## Corrective acceptance criteria (2026-07-13)\n\nA seeded minority/disconnected region receives its declared exploration budget despite a larger\nhigh-score region. Disabling the quota changes the production selection and fails the test. Every\nprompt batch can be reconstructed from its selection receipt without exposing hidden labels.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T01:05:50Z","created_by":"Sinity","updated_at":"2026-07-13T05:45:22Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.9.14","depends_on_id":"polylogue-rxdo.9","type":"parent-child","created_at":"2026-07-13T03:05:49Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-rxdo.9.13","title":"ranker:\u003chash\u003e — content-addressed aggregation models over judgment sets","description":"Rigor mechanism M. A ranking is a DERIVED object: ranker:\u003chash\u003e (Bradley-Terry MLE via iterative scaling ~100 lines pure Python — no scipy; majority; Dawid-Skene-weighted; mean) applied to a judgment set yields a ranking result-set (items, latent scores, uncertainty intervals, judge provenance). Same content-address discipline as query:/metric: hashes; judgment rows are the truth, fitted models are derived. Shares canonicalization machinery with rxdo.9.1. DEP: K + rxdo.2 substrate.","design":"## Authoritative corrective contract (2026-07-13)\n\nAggregation consumes explicit verdicts and produces a partial order. Disconnected components,\ncycles, ties, incomparability, and insufficient evidence remain visible. A total rank is emitted\nonly when the ranker definition declares and justifies a tie-break/completion policy; otherwise no\nfabricated ordering. Bind judgment-set, rubric, actor/context calibration, and ranker component refs.","acceptance_criteria":"## Corrective acceptance criteria (2026-07-13)\n\nSeed disconnected components, a tie, an incomparable pair, and a preference cycle. Default output is\na partial order exposing each condition. A requested total rank without a declared completion policy\nfails; a declared policy yields a distinct ranker identity and receipt.","notes":"EXTERNAL REFERENCE ASSESSED (operator pointer, 2026-07-13): github.com/max-niederman/fullrank — Bayesian pairwise ranking, examined in depth. WHAT IT IS: Thurstonian probit model (p(i\u003ej)=Phi(si-sj)) with a Unified Skew-Normal posterior, EXACT posterior sampling via the Arellano-Valle/Azzalini convolutional representation (real math — the probit-likelihood/normal-prior -\u003e SUN conjugacy is the Durante-2019-era result), entropy-driven active pair selection. Python CLI+library. VERDICT: do NOT adopt as dependency — early-stage (26 commits, no releases), NO LICENSE specified (hard blocker for a public MIT repo), single-judge pairwise-only (no n-wise/Plackett-Luce, no multi-judge calibration weighting, no dimensions), and its author flags the active-selection heuristic as unproven/failing for some priors. WHAT TO TAKE (three things): (1) OUTPUT SHAPE — posterior SAMPLING yields ranking STATISTICS (P(i is top-k), pairwise P(i\u003ej) marginals, rank distributions) — adopt this as the ranker contract's output shape regardless of engine; richer and more honest than point-estimates+intervals. (2) A second registered engine 'thurstone-sun' alongside the default pure-Python BT-MLE iterative scaling — ranker:\u003chash\u003e makes engine plurality cheap; implement from the published math if wanted (NOT by vendoring unlicensed code); accept scipy dep only if/when this engine is requested. (3) Its documented active-selection failure modes reinforce: elicitation selection policy (rxdo.9.14) must be PLUGGABLE and LOGGED (policy id in session provenance) so policy quality is itself measurable — another rxdo.11 loop instance. Independent validation note: a stranger converged on the same loop shape (compare-until-confident + active selection + uncertainty-aware output) — the resorter-class design is convergent, which is evidence it is right.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T01:05:45Z","created_by":"Sinity","updated_at":"2026-07-13T05:45:17Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.9.13","depends_on_id":"polylogue-rxdo.9","type":"parent-child","created_at":"2026-07-13T03:05:44Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-rxdo.9.12","title":"Judges as actors (human or agent) with measured calibration","description":"Rigor mechanism L. judge_ref identifies WHO judged: operator, or agent as (model + prompt hash) — a judge is a program. Nothing in the lifecycle assumes human (operator: 'judgments solely human is pointlessly limiting'). Per-judge, per-dimension calibration = agreement with consensus/gold on overlap items (Dawid-Skene framing: agent judges are noisy raters weighted by MEASURED agreement). DEP: K.","design":"## Authoritative corrective contract (2026-07-13)\n\nJudge identity is ActorRef plus separate ExecutionContextRef, never a model-name scalar. Calibration\nis stratified by stable actor/model family and exact prompt/tools/runtime/config context, with gold\ncoverage, abstention, tie/incomparable behavior, and drift windows visible. No universal JudgeSpec\ntable; a routing policy becomes a definition only after independent reuse/lifecycle appears.","acceptance_criteria":"## Corrective acceptance criteria (2026-07-13)\n\nThe same actor under two execution contexts has separable calibration. Missing gold or context\nproduces unknown calibration, not inherited confidence. Reports preserve abstain/tie/incomparable\nrates and refuse unsupported cross-context pooling.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T01:05:40Z","created_by":"Sinity","updated_at":"2026-07-13T05:45:12Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.9.12","depends_on_id":"polylogue-h6r","type":"blocks","created_at":"2026-07-13T05:58:42Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.9.12","depends_on_id":"polylogue-rxdo.9","type":"parent-child","created_at":"2026-07-13T03:05:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} @@ -381,14 +381,14 @@ {"_type":"issue","id":"polylogue-k8k","title":"Investigate Sinnix scope wrapper latency for lightweight Polylogue CLI reads","description":"Evidence from polylogue-qhk: after adding analyze usage --detail headline, the storage report path takes ~0.14s warm and python -m polylogue / unwrapped CLI take ~5.3s, but the devshell-scoped polylogue wrapper took 45.59s wall with low CPU. The wrapper is generated by /realm/project/sinnix/scripts/sinnix-direnvrc and routes polylogue through sinnix-scope background. This makes lightweight read/report commands appear much slower than Polylogue itself. Acceptance: classify whether the delay is systemd/scope startup, current host pressure, or wrapper policy; adjust Sinnix/devenv scoping so lightweight Polylogue CLI reads avoid the extra latency while heavy import/rebuild/db scans remain contained; capture before/after timing.","acceptance_criteria":"- A timing matrix is run with \u003e=3 warm iterations each, recording wall/user/sys for: (1) `python -m polylogue --help` or a cheap read, (2) the `uv run polylogue` equivalent, (3) the devshell polylogue wrapper, (4) `sinnix-scope background -- polylogue` equivalent, (5) a trivial `sinnix-scope`/systemd-run command such as `true`. Host pressure is captured once (sinnix-observe / systemd/cgroup evidence) if the latency reproduces.\n- An artifact is produced: a table with median/min/max, the wrapper path resolved via `command -v`/`type -a`, scope unit/journal evidence for one slow run, and a root-cause classification (systemd startup / active host pressure / wrapper policy / Polylogue import floor).\n- If a durable wrapper-policy bug reproduces: before/after timing shows lightweight reads bypass or materially reduce scope overhead while heavy import/rebuild/db scans stay contained; a Sinnix follow-up bead is created if the root cause lives in Sinnix.\n- If no durable bug reproduces: close with the timing artifact + classification rather than changing policy.\n- Verification: rerun the timing matrix after any Sinnix/devshell change plus a heavy-command smoke showing the containment wrapper still applies where intended.","notes":"Executable upgrade (2026-07-04 sidecar):\nProduct question: is the 45s wrapper latency a transient host/systemd issue or a durable wrapper-policy bug that makes lightweight Polylogue reads unusable from the devshell?\nLikely files/modules/repos: /realm/project/sinnix/scripts/sinnix-direnvrc, sinnix-scope wrappers, Polylogue devshell wrapper generation, and the polylogue CLI entrypoint only for timing comparison. This may require a Sinnix-side fix; keep Polylogue bead as the evidence/coordination record and create a Sinnix follow-up if the root cause lives there.\nMeasurement matrix: run each command at least 3 warm times and record wall/user/sys: (1) python -m polylogue --help or a cheap read, (2) uv run polylogue equivalent if applicable, (3) devshell polylogue wrapper, (4) sinnix-scope background -- polylogue equivalent, (5) systemd-run/sinnix-scope trivial command such as true. Capture current host pressure once with sinnix-observe or systemd/cgroup evidence if latency reproduces.\nArtifact shape: short table with median/min/max, wrapper path resolved with command -v/type -a, scope unit/journal evidence for one slow run, and classification: systemd startup, active host pressure, wrapper policy, or Polylogue import floor.\nAcceptance detail: before/after timing shows lightweight reads bypass or materially reduce scope overhead while heavy import/rebuild/db scans remain contained; if no durable bug reproduces, close with the timing artifact and root-cause classification rather than changing policy.\nVerification command: rerun the timing matrix after any Sinnix/devshell change, plus a heavy-command smoke showing the containment wrapper still applies where intended.","status":"closed","priority":2,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T18:27:59Z","created_by":"Sinity","updated_at":"2026-07-04T22:46:42Z","closed_at":"2026-07-04T22:46:42Z","close_reason":"Completed: timing matrix captured current wrapper behavior and no durable wrapper-policy bug reproduced. Resolved wrapper paths for the devshell wrapper, venv entrypoint, uv run, and explicit sinnix-scope, and captured host pressure. Cheap help medians were about 0.279s python module, 0.347s uv, 0.337s devshell wrapper, 0.329s explicit sinnix-scope, and 0.047s scope true; live usage-headline medians were about 1.86s python module and 1.92-1.94s through uv/devshell/sinnix-scope. Classification: the original 45.59s result was transient host/systemd/scope pressure, not current Polylogue/Sinnix wrapper policy. Artifact: .agent/scratch/research/2026-07-04-k8k-scope-wrapper-latency.md plus raw timing JSON under /realm/tmp.","comments":[{"id":"019f2eac-772e-7703-83b8-4eb425852255","issue_id":"polylogue-k8k","author":"Sinity","text":"CROSS-REPO (N2): root cause + fix live in /realm/project/sinnix/scripts/sinnix-direnvrc; only the before/after timing is Polylogue-local. Sinnix has no bead tracker — remediation is a Sinnix-repo change, this bead owns the measurement half only.","created_at":"2026-07-04T19:48:02Z"}],"dependency_count":0,"dependent_count":0,"comment_count":1} {"_type":"issue","id":"polylogue-3uw","title":"Capture-completeness: the instrument's coverage error as a standing measure","description":"Convergence legibility answers 'how converged is what we ingested'; nothing answers 'how much of what EXISTS did we ingest'. Sessions known to have happened (hook SessionStart fired, harness wrote a file, extension saw a chat) versus sessions fully archived = the coverage error, per origin, over time. An instrument that does not know its own coverage error cannot honestly caveat its findings — and silent capture regressions (the hibernation threat) currently have no number to trip on.\n\n## Authoritative corrective scope (2026-07-13)\n\nThis is now correctness infrastructure, not a distant observability enhancement: every honest\nanalytic frame needs an addressable coverage assessment for the same origins and interval.","design":"Three evidence sources joined against the archive: hook events (SessionStart without a matching archived session after a grace window = a miss), watcher-root file inventories (files seen vs raw rows), extension capture-gap events (3v1). Materialize as a per-origin coverage measure (9l5.7 registry, tier=structural) with a trailing-window trend; surface in ops status + daemon health (alert on regression) + the day page's open-loops. The drift sentinel (da1) alerts on shape drift; this alerts on VOLUME drift — together they are the hibernation-mode floor instrumentation.\n\n## Authoritative corrective contract (2026-07-13)\n\nMaterialize a versioned CoverageRef/object carrying expected-signal sources, observed/archived\ncounts, known misses, grace window, origin/window, archive/source generations, method version, and\ndegraded/unknown reasons. rxdo.3 and MetricDefinition rendering consume this ref; do not create a\nseparate analytics UI or imply that unobserved sources are zero. Coverage may be exact only over\nthe declared known-to-exist signal inventory.","acceptance_criteria":"Coverage renders per origin on the live archive with the known-miss list drillable to refs; a seeded missed-session scenario trips the health alert; findings' sample-frame stanzas can cite the coverage number for their window.\n\n## Corrective acceptance criteria (2026-07-13)\n\nThe coverage artifact is resolvable and binds origin, interval, evidence-source inventory, method,\nand generations. A result frame can cite it. A seeded missing SessionStart/file/extension signal\nmakes an otherwise enumeration-exact result render frame-incomplete. Unknown signal-source\ncoverage remains unknown, not 100%. Focused materialization and result-envelope tests prove the\nproduction reference path.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=I-analytics-experiments; lane=analytics-experiments; readiness=A-implementation-ready; proof=measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/184_polylogue_3uw.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\nLOOP INSTANCE 2026-07-13: capture-completeness is an rxdo.11-family standing measure — watch: sessions-known-to-exist signals (SessionStart hook events, harness files on disk, extension chat sightings) vs sessions-fully-archived; measure: coverage error per origin over time; alert: budgeted (mechanism E discipline). Tonight's t0p note (harness sidecar audit) enumerates the known-to-exist sources for Claude Code.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T17:01:35Z","created_by":"Sinity","updated_at":"2026-07-13T05:43:44Z","labels":["area:analytics","area:ingest","area:ops","delivery:I-analytics-experiments","horizon:frontier","lane:analytics-experiments","spine","tech-tree","wave:2"],"dependencies":[{"issue_id":"polylogue-3uw","depends_on_id":"polylogue-d1y","type":"blocks","created_at":"2026-07-03T19:01:35Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-4be","title":"Restore drill: prove the backups restore, quarterly","description":"Three backup layers exist (btrbk, polylogue-sqlite-backup, source-tier doctrine); none has ever been restore-tested. An untested backup is a hypothesis, and this one carries the entire project's irreplaceable asset.","design":"A devtools lane (or ops command): restore the latest backup set to a scratch root, run integrity_check per tier, run a 10-query battery (counts, one find, one read, one insight read), compare counts against the live archive within expected-lag tolerance, record timing + result as an ops artifact. Quarterly cadence via the operator's existing timer infrastructure (sinnix-side systemd timer calling the lane; alert on failure through the daemon health surface). First run is the bead; the timer makes it standing.","acceptance_criteria":"One full restore executed from real backups with the battery green and timing recorded; the lane is invocable as one command; the quarterly timer is wired sinnix-side; a deliberately corrupted scratch restore fails loudly.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=B-storage-rebuild-bytes; lane=operational-resilience; readiness=A-implementation-ready; proof=daemon crash/heartbeat fixture and backup restore drill log. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/033_polylogue_4be.md (depth: anchored-contract-prework; urgency: T1-critical-path-correctness). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\nFRESH DRILL MATERIAL 2026-07-13: realistic restore targets now exist — the beads-dolt migration reflink backups under /realm/tmp/beads-backup-* (made before each embedded-\u003eserver flip) and the v35 pre-swap index generation. First drill should restore one durable tier from borg AND one beads workspace from reflink, timed, with a written runbook as the artifact.\nFRESH DRILL MATERIAL 2026-07-13: realistic restore targets exist — beads-dolt migration reflink backups under /realm/tmp/beads-backup-* and the v35 pre-swap index generation. First drill: restore one durable tier from borg AND one beads workspace from reflink, timed, runbook as the artifact.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T17:01:34Z","created_by":"Sinity","updated_at":"2026-07-13T04:15:27Z","labels":["area:ops","delivery:B-storage-rebuild-bytes","lane:operational-resilience","spine"],"dependencies":[{"issue_id":"polylogue-4be","depends_on_id":"polylogue-8jg9","type":"parent-child","created_at":"2026-07-04T21:47:46Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} -{"_type":"issue","id":"polylogue-h6r","title":"Agent identity: a stable who-did-this tuple for every session","description":"Half the analytics tower assumes 'per agent' partitions the schema cannot express: a model name is not an agent — the same model under different CLAUDE.md versions, skills, or MCP profiles is behaviorally a different worker. Calibration (h10), setup A/B, advisory tuning, and the evaluation instrument all need a stable agent-identity key or they average across regime changes and mislead exactly when the setup changes (which is when you look).","design":"agent_identity = (model_name, harness+version, config_state_ref, role) materialized per session as a derived column set: model/harness from session metadata (exists), config_state_ref from the 7aw config-artifact joins (the hash of the config set in force at session start), role from subagent dispatch context where present. Store as columns on session_profiles (the hot-row home) + a registry of observed identities with first/last seen. Measures gain identity as a grouping unit ('measure X by agent'). Degrades honestly: sessions predating config capture get config_state_ref=unknown, and identity-partitioned measures state the unknown fraction. Small bead, foundational — blocks h10's per-agent calibration claims.","acceptance_criteria":"Identity tuple materialized for new sessions on the live machine (config ref resolving via 7aw); an identity-partitioned measure runs with the unknown fraction stated; h10's calibration curves key on identity, not bare model name.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=F-lineage-compaction; lane=lineage-compaction; readiness=A-implementation-ready; proof=branch/shared-prefix/compaction/truncation fixture matrix and regrounding proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/087_polylogue_h6r.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T17:01:33Z","created_by":"Sinity","updated_at":"2026-07-13T03:58:52Z","labels":["area:analytics","area:insights","delivery:F-lineage-compaction","lane:lineage-compaction","spine","wave:2"],"dependencies":[{"issue_id":"polylogue-h6r","depends_on_id":"polylogue-7aw","type":"blocks","created_at":"2026-07-03T19:01:33Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0} +{"_type":"issue","id":"polylogue-h6r","title":"Worker identity: stable ActorRef plus execution-context fingerprint","description":"A bare model name is not enough for analytics or calibration, but prompt/configuration must not be collapsed into stable actor identity either. Sessions record a stable ActorRef, a separate content-addressed ExecutionContextRef, and role/purpose. Analyses may derive a worker-profile tuple from both, while calibration remains inspectable at actor-family and exact-context levels.","design":"ActorRef identifies the durable actor/model family, human, service, or agent persona. It excludes prompt text, context image, tools, permissions, and mutable configuration so the same actor remains comparable over time.\n\nExecutionContextRef content-addresses the exact behavioral environment: harness and version, prompt/instruction hash, delivered-context receipt, skills/tools/MCP profile, configuration-artifact set, runtime/build, permissions, sampling/effort parameters, and other available execution controls. Role/purpose (judge, proposer, runner, recipient, operator) is recorded separately.\n\nMaterialize actor_ref, execution_context_ref, role, and evidence/unknown status on the session profile or owning derived read model. A derived WorkerProfileRef may group (actor, context, role) for behavioral analyses, but it is not ActorRef. Measures expose unknown fractions and refuse silent pooling across contexts. Judge calibration reports both stable actor/model-family behavior and exact-context behavior with drift windows and gold coverage.","acceptance_criteria":"1. The same actor under two prompts/configuration sets has one ActorRef and two ExecutionContextRefs; exact-context calibration remains separable.\n2. Two distinct actors under one shared runtime remain distinct.\n3. Missing configuration/context capture yields an explicit unknown context fraction, not a fabricated identity or inherited calibration.\n4. Identity-partitioned analytics state whether they group by actor, exact context, role, or derived worker profile.\n5. rxdo.9.12 consumes these refs without maintaining a competing judge-identity tuple.","notes":"[LEGACY FIELDS PRESERVED BY FINAL CORRECTIVE PASS 2026-07-13]\n\nORIGINAL TITLE:\nAgent identity: a stable who-did-this tuple for every session\n\nORIGINAL DESCRIPTION:\nHalf the analytics tower assumes 'per agent' partitions the schema cannot express: a model name is not an agent \u2014 the same model under different CLAUDE.md versions, skills, or MCP profiles is behaviorally a different worker. Calibration (h10), setup A/B, advisory tuning, and the evaluation instrument all need a stable agent-identity key or they average across regime changes and mislead exactly when the setup changes (which is when you look).\n\nORIGINAL DESIGN:\nagent_identity = (model_name, harness+version, config_state_ref, role) materialized per session as a derived column set: model/harness from session metadata (exists), config_state_ref from the 7aw config-artifact joins (the hash of the config set in force at session start), role from subagent dispatch context where present. Store as columns on session_profiles (the hot-row home) + a registry of observed identities with first/last seen. Measures gain identity as a grouping unit ('measure X by agent'). Degrades honestly: sessions predating config capture get config_state_ref=unknown, and identity-partitioned measures state the unknown fraction. Small bead, foundational \u2014 blocks h10's per-agent calibration claims.\n\nORIGINAL ACCEPTANCE_CRITERIA:\nIdentity tuple materialized for new sessions on the live machine (config ref resolving via 7aw); an identity-partitioned measure runs with the unknown fraction stated; h10's calibration curves key on identity, not bare model name.\n\nORIGINAL NOTES:\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=F-lineage-compaction; lane=lineage-compaction; readiness=A-implementation-ready; proof=branch/shared-prefix/compaction/truncation fixture matrix and regrounding proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/087_polylogue_h6r.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 \u2014 verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T17:01:33Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","labels":["area:analytics","area:insights","delivery:F-lineage-compaction","lane:lineage-compaction","spine","wave:2"],"dependencies":[{"issue_id":"polylogue-h6r","depends_on_id":"polylogue-7aw","type":"blocks","created_at":"2026-07-03T19:01:33Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0} {"_type":"issue","id":"polylogue-cpf","title":"Land the six doctrines: time, writers, finding-provenance, degraded-modes, non-goals, injected-context trust","description":"The six doctrine texts were written in full in the 2026-07-03 design session (session transcript is the source — Claude-Session trailer on this commit); they cover the cheap-to-write, expensive-to-lack gaps: time semantics (three times, UTC epoch-ms canon, skew tolerance, duration honesty), writer classes (four classes, one writer-class per file, cross-tier interruption validity), finding provenance (five-part stanza, re-runs supersede, semantic version bumps flag stale findings), degraded-mode ladder (five rungs, degrade-loudly-once, sacred EVIDENCE-ONLY floor), the non-goals register (with revisit triggers), and injected-context trust classes (OPERATOR/SYSTEM/QUOTED). Landing them is mostly transcription + wiring the named enforcement hooks.","design":"(1) Commit texts under docs/doctrine/ (or internals sections — match the ttu docs-IA tiering), adjusted to repo voice; link from architecture-spine. (2) Enforcement hooks, each small: schema-audit check for TEXT timestamps in new DDL; writer-class docstring convention + layering check; provenance-stanza refusal in the findings lane (3tl.4); degraded-rung declaration in feature review; trust-class typing in the ContextSource protocol (37t.11 carries the implementation — this bead lands the doctrine text + the deny-lexicon tripwire test fixture). (3) Retire folklore: where a doctrine supersedes scattered notes (time comments, writer lore), point them at the doctrine.\n\n## Authoritative corrective contract (2026-07-13)\n\nAdd the unification doctrine: compare identity, lifecycle, authority, access shape, and durability\ntier. Unify only when all five match; otherwise reuse a protocol and state what remains typed/domain-\nspecific. Every design claiming unified/generic/first-class records these answers. Shared receipt\nenvelopes do not imply one receipt table; plan/authorize/apply/receipt/reconcile vocabulary does not\nimply one executor; export profiles do not imply a universal bundle object. Reconcile finding\nprovenance text to the shipped finding schema, and keep degradation separate from authority/evidence\ntier in rendering.","acceptance_criteria":"Six doctrine documents committed and indexed; the three cheap lints wired (timestamp DDL check, provenance stanza gate, trust deny-lexicon fixture); architecture-spine links them; bd memory updated to point at doctrines instead of restating them.\n\n## Corrective acceptance criteria (2026-07-13)\n\nDoctrine and scaffold examples cover a valid unification and at least three rejected flattenings:\nquery-run vs context-delivery durability, experiment vs query lifecycle, and evidence basket vs\nresult storage. A design lint/checklist requires the five answers and domain remainder when those\nkey claims appear. Existing finding/trust/degradation doctrine points to owning schemas/services\nrather than maintaining parallel truth.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=A-trust-floor; lane=agent-write-safety; readiness=A-implementation-ready; proof=candidate assertion write-path tests and rejected-candidate resurrection guard. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/163_polylogue_cpf.md (depth: epic-checklist; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\nRECONCILE 2026-07-13: the six doctrines predate tonight's programs and three now have machinery — (1) finding-provenance five-part stanza should BE finding.v1's provenance fields (rxdo.4, merged #2812): reconcile the stanza against the shipped schema and record deltas as follow-ups, not a parallel doctrine; (2) injected-context trust = the context-layer trust labels (37t revisit note: Layer-1 scheduled knowledge carries tier labels); (3) degraded-mode ladder pairs with the authority ladder — degradation rungs and evidence tiers are orthogonal axes and BOTH must render (bkzv). Time semantics + writer classes + non-goals register remain the un-landed remainder — still cheap-to-write, expensive-to-lack.","status":"open","priority":2,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T17:01:31Z","created_by":"Sinity","updated_at":"2026-07-13T05:46:52Z","labels":["area:legibility","area:substrate","delivery:A-trust-floor","lane:agent-write-safety","spine","wave:2"],"comments":[{"id":"019f2e82-3169-7159-ae84-91b915bbb5f7","issue_id":"polylogue-cpf","author":"Sinity","text":"Salvage from docs/execution-plan.md (superseded — see BEADS WORKFLOW memory \"gh-1807 umbrella dropped, doctrine lives in docs\"). Two doctrine fragments in that file are NOT enumerated in the current doctrine set; cross-check them against the non-goals register + trust/degraded-mode texts before retiring the file:\n\nNON-GOALS REGISTER candidates (from the plan's Rawlog Coverage Map):\n- Polylogue is not a general desktop-automation framework. It owns only branch-local URLs/logs/receiver config and exposes inspectable control points for existing local tools (revisit trigger: a real cross-tool orchestration need that no existing tool owns).\n- OTel/OTLP export is a projection, not internal authority. The archive's own tables are the source of truth; OTLP is an outbound view.\n- Context images/bundles are evidence-backed projections (omissions, caveats, redaction, candidate-review affordances) — never presented as authority. (Overlaps 4smp variant/evidence labeling.)\n- Rendering: no hard-coded one-off palette; no showcase-era proof vocabulary. Theme tokens + demo-backed visual tests.\n\nLOCALITY / CLOSEOUT-POSTURE candidate (belongs with degraded-modes or a closure-discipline doctrine): a cloud agent may patch source probes, docs, and fixtures for a deployment-facing bead, but cannot certify deployed truth. Closeout of deployment-smoke / browser-capture receiver-archive consistency / copied-profile browser proof requires the operator's live deployment + archive. Partially covered by the cloud-agents doc (command safety) and the archive-root pitfall memory, but the closure rule (\"cannot close on source/docs alone\") is not stated as doctrine.","created_at":"2026-07-04T19:01:52Z"},{"id":"019f2eac-4f4e-7b5c-9814-79d8e618bf8b","issue_id":"polylogue-cpf","author":"Sinity","text":"Promoted to epic (E4 audit): bundled 6 doctrine texts + 6 hooks was too large for one task. Hook beads for the 3 cheap lints now filed as children. Doctrine texts still land under docs/doctrine/. Note: cpf's finding-provenance hook mis-pointed at 3tl.4 (a docs-publishing lane) — provenance-stanza gate belongs in the findings lane once it exists, not as 3tl.4's identity.","created_at":"2026-07-04T19:47:52Z"}],"dependency_count":0,"dependent_count":0,"comment_count":2} {"_type":"issue","id":"polylogue-ze5","title":"Decision: user.db vocabulary — separate epistemic records from workspace state","description":"Operator question (2026-07-03): is 'assertions' the best term, and is the concept sufficient? Analysis: the unified user.db assertions table currently holds at least four ontologically different thing-classes under one noun — EPISTEMIC records (claims, notes, lessons, corrections, judgments — things with truth-values, evidence refs, and a candidate-\u003ejudged lifecycle), CURATION (tags, marks, highlights — pointers expressing salience, no truth-value), WORKSPACE state (saved views, workspaces, recall packs — UI/config state that happens to be durable), and COMMS (blackboard posts — messages with delivery semantics, 1hj). 'Assertion' is right ONLY for the first class; calling a saved view an assertion is a category error the codebase papers over, and externally the word reads as test tooling (the positioning analysis's worst-offender finding). Sufficiency gaps for the epistemic class specifically: no inter-record relations (supersedes / contradicts / refines — needed the moment two lessons conflict), no revision history (edits overwrite; for an epistemics tool, belief CHANGE is data), confidence is absent (predictions h10 bolt it on), and retraction-with-reason is weaker than it should be.","design":"Recommendation (decide, then execute incrementally — no big-bang rename): (1) VOCABULARY: keep the storage table name (churn without benefit); introduce a typed CLASS field/derivation over kinds — epistemic | curation | workspace | comms — and use class-appropriate nouns in every surface: 'records' or 'notes/claims' for epistemic (external docs already translate to 'judged notes/memory' per 3tl.1), 'tags/marks', 'saved views', 'messages'. The class taxonomy lands in the c9y placement/vocabulary doctrine and the glossary. (2) SUFFICIENCY, sequenced smallest-first via migrations-v2 (user.db is durable-tier): relations table (record_id, relation [supersedes|contradicts|refines|derives-from], target_ref) — unlocks conflict surfacing in the judge queue ('this lesson contradicts an active one') and honest supersession chains; revision history as an append-only shadow (record_revisions: record_id, changed_at, old_body, author) — cheap, restores belief-change as data; confidence as an optional field on epistemic kinds (predictions h10 then reuse it instead of a parallel field). (3) The judge verb (p5g) and scheduler ledger consume relations: contradiction pairs surface together at judgment time. (4) Explicitly rejected: splitting the table per class (the unified table with kind vocabulary is load-bearing for the hash boundary and the audit surface; classes are a lens, not a partition).","acceptance_criteria":"Class taxonomy recorded in the vocabulary doctrine + glossary and every kind mapped; relations + revisions land as additive user.db migrations with the judge queue surfacing contradictions; surface nouns audited (no user-facing 'assertion' for non-epistemic classes); confidence field adopted by h10.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=D-horizon-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=D-horizon-ready.\n[RATIFIED 2026-07-08, decision brief .agent/reports/decision-brief-2026-07-08.md — operator approved all calls] Design recommendation approved: four-class lens (epistemic|curation|workspace|comms) over unified table, additive migrations for relations (supersedes/contradicts/refines) + append-only revisions + optional confidence; per-class split stays rejected. Refinement: external noun for epistemic class is NOTES (user-facing), records (API); assertion survives only as storage/enum term. MIGRATION COORDINATION: relations+revisions ride the same user.db v4-\u003ev5 window as rxdo.2 query tables (60i5 batching).","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T15:53:39Z","created_by":"Sinity","updated_at":"2026-07-08T20:14:32Z","labels":["area:context","area:substrate","decision","delivery:D-agent-context-coordination","lane:agent-coordination"],"dependencies":[{"issue_id":"polylogue-ze5","depends_on_id":"polylogue-37t","type":"parent-child","created_at":"2026-07-04T21:31:03Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-37t.11","title":"Context scheduler with disclosure and execution-authority firewall","description":"The missing 40% of the OS-vision design, and the coherence fix for a real fragmentation risk: as of today SEVEN independent mechanisms want to write into agent context, each with its own budget rules — repo brief + resume delta (37t.4), semantic recall (mhx.4), SRS-due lessons (rvh), blackboard messages (1hj), PreToolUse/prompt advisories (bfv), compaction re-grounding (gjg), and the affordance-index pointer (pj8). Built separately they will fight for the same tokens, double-inject, and be untunable as a whole. The OS analogy names the fix: injection sources are processes, context budget is memory, and there must be ONE scheduler that allocates it — plus a LEDGER recording every allocation so 'what was in this session's context and why' is a queryable fact rather than a reconstruction.\n\n## Authoritative corrective scope (2026-07-13)\n\nThe scheduler independently decides whether content may be disclosed and whether it may act as an\ninstruction. Trust labels and inject:true are insufficient to cross the execution-authority boundary.","design":"(1) SOURCE PROTOCOL: each injector registers (declare-once) as a ContextSource with: moment (session-start | pre-compact-resume | mid-session-advisory | on-demand), priority class (correctness \u003e directives \u003e recall \u003e ambient), a propose() returning candidate items (each: content-or-ref, token cost, relevance score, source ref, expiry), and a degrade order (full -\u003e ref-only -\u003e drop). Existing beads become sources, not owners of budgets: 37t.4's sections, mhx.4's recall hits, rvh's due lessons, 1hj's messages, gjg's re-grounding items. (2) SCHEDULER: per moment, allocate the scoped budget (y4c per-repo/per-moment budgets) across classes by fixed proportions with borrowing (unused directive budget flows to recall), then within class by score; produce the final assembly deterministically (same inputs -\u003e same context, testable). Hard invariants: never exceed moment budget; every included item carries its resolve_ref; refs-over-bodies below a per-item threshold (jgp). (3) LEDGER: every allocation decision (included/degraded/dropped, with scores and budget state) written as a context-injection event keyed to the target session — the session's 'memory map'. Read surfaces: 'polylogue context ledger \u003csession\u003e' + a webui panel on the session Info tab; the compaction-loss forensics (gjg) and uplift instrumentation read it (arm evidence = ledger rows). (4) MID-SESSION moments share the same arbiter with tiny budgets (advisory = one item) so cooldown/dedup state is global — an advisory about X suppresses a blackboard item about X (cross-source dedup by content-hash/ref). (5) IMPLEMENTATION HOME: extends context/compiler.py (compile_context already does budgeted segment assembly — the scheduler generalizes its admission logic and hoists it above the preamble composer); the SessionStart hook calls ONE entrypoint. (6) Sequencing: lands BEFORE mhx.4/rvh/1hj/bfv wire their injection legs — each of those beads' design now says 'register as a ContextSource' (notes added); 37t.4 ships first as the initial two sources and gets refactored onto the protocol here.\n\n## Authoritative corrective contract (2026-07-13)\n\nPartition every delivery into quoted evidence versus executable instruction. Findings, memories,\nreports, recalled transcript, generated curricula, and ordinary adopted assertions enter as quoted\nevidence. Only AssertionKind.POLICY may be considered for the instruction partition, and the kind\ndoes not authorize itself: require explicit operator adoption, scope, authority/issuer provenance,\nvalidation, expiry/revocation, recipient compatibility, and a delivery receipt. Ordinary assertions\ncannot gain instruction authority through a mutable boolean or generic inject flag. Deliveries record\ninclusion/exclusion, disclosure decision, authority decision, source refs, policy refs, and resolved\nexecution context.","acceptance_criteria":"ContextSource protocol + scheduler in context/compiler.py with deterministic assembly (property test: same inputs -\u003e byte-identical context); 37t.4's sections migrated as the first two sources; budget invariants enforced (property test: never exceeds moment budget at any source combination); ledger rows written per injection and readable via CLI + MCP; cross-source dedup demonstrated (advisory suppresses same-ref blackboard item in a seeded scenario).\n\n## Corrective acceptance criteria (2026-07-13)\n\nAn adopted ordinary knowledge assertion and a generated curriculum remain quoted evidence even with\ninject:true. A valid, explicitly adopted, scoped policy assertion enters the instruction partition\nand emits an authority receipt. Revoked, expired, wrong-scope, self-authored/unadopted, or malformed\npolicies are refused with reasons. Removing the production authority check makes the fixture fail.","notes":"CONTRACT-FIRST SPLIT (pace): slice 1 (size:M): ContextSource protocol + minimal scheduler (fixed proportions, no borrowing) + ledger rows, with 37t.4's two sources migrated — unblocks mhx.4, rvh, 1hj, bfv, gjg to build sources in parallel. Slice 2: borrowing, cross-source dedup, mid-session moments, ledger surfaces.\nSECURITY CONSTRAINT (2026-07-03, blocking — from the injected-context trust doctrine): the ContextSource protocol carries a trust class per item (OPERATOR = human-authored/judged, may instruct; SYSTEM = machine-composed structural facts, never directives, no verbatim stored prose; QUOTED = recalled content, always fenced + attributed + framed as data-not-directives). Class is a type-level property of the source (a source without a judgment gate cannot emit OPERATOR items). No verbatim tool-output/web text is injectable at any class — recalled evidence of that kind injects as refs only. Candidate-\u003ejudged promotion IS the QUOTED-\u003eOPERATOR transition. Ledger records the class of every injected item. Acceptance additions: property test that assembled output never contains unfenced QUOTED content; red-team fixture (seeded session containing an injection string) never reaches an assembled preamble unfenced. Build the scheduler with this from slice 1 — retrofitting trust classes is how injection holes ship.\nCoordination program update 2026-07-04: the agent coordination source from polylogue-s7ae must register as a ContextSource, not a separate hook-specific injection path. It proposes compact coordination items: self identity, sibling/overlap awareness, work-item refs, addressed messages, resource episodes, hook/daemon/root caveats, and handoff refs. The scheduler/ledger owns budget, trust class, cooldown/dedup, and proof of what entered context. This preserves algebraic composition: bby.9/pj8/1hj/bfv/d1y become sources/projections over the same envelope rather than separate context writers.\nREVIEW REFINEMENT (2026-07-06, bundle-3): scope sharpened — implement ContextSource protocol + schedule_context entrypoint + trust_class derivation + ops.db INJECTION LEDGER (included/degraded/dropped candidates with scores, trust class, inclusion/drop reason, budget state). Trust gate is slice-1, not retrofit (retrofit = injection hole): non-user/unpromoted agent content cannot emit operator-trust context; tool-output/web/runtime content is refs-only or visibly fenced QUOTED. SessionStart and PreCompact flows must CALL schedule_context instead of assembling their own memory lists (the flat bd-prime dump is the baseline to beat). Injection-tripwire fixture (cpf.3) is the acceptance guard: seeded injection strings never enter an unfenced preamble. context_inject events excluded from attention training (37t.17). Ranking = staleness-decay x topic-proximity x attention. Verbatim spec: bundles/rnd-bundle-3-of-6.md L1256.\nDR ADDITION (2026-07-06): compiled context is an ARTIFACT GRAPH, not a dump — beyond the ledger, expose context.explain (selection explanation, excluded-with-reasons, budget breakdown per allocation class) and context.diff (added/removed/changed/token-delta between two compiles — the compare-compactions primitive), plus an expand_map so every summary node points back to raw evidence refs (summaries auditable, never opaque). Budget policy: reserves (task/tool-schema/scratch) + allocation floors by role so exemplars AND aggregates both survive pressure.\n2026-07-06 design gap noted during operator Q\u0026A — CROSS-SOURCE SCORE CALIBRATION: within a priority class the scheduler ranks by source-provided score, but scores from different sources (similarity floats, SRS urgency, loss-forensics ranks, blackboard scope-match) are not comparable numbers. Resolution to encode in slice 1: scores are ORDINAL WITHIN SOURCE only; the scheduler allocates per-source sub-quotas inside each class (fixed shares, borrowing on emptiness) and never compares raw scores across sources. A learned/calibrated cross-source ranking is explicitly out of scope until the ledger provides outcome data to learn from (37t.17 read-access analytics is the feedback loop).\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=A-implementation-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/062_polylogue_37t_11.md (depth: bead-localized-from-export; urgency: T0-stop-the-line-or-P1). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T15:53:31Z","created_by":"Sinity","updated_at":"2026-07-13T05:44:45Z","labels":["area:context","area:coordination","area:substrate","delivery:D-agent-context-coordination","lane:agent-coordination","size:L","spine","wave:1"],"dependencies":[{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-1hj","type":"relates-to","created_at":"2026-07-04T21:31:42Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-1jc","type":"relates-to","created_at":"2026-07-04T21:31:45Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-37t","type":"parent-child","created_at":"2026-07-03T17:53:30Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-37t.12","type":"blocks","created_at":"2026-07-04T21:35:11Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-37t.15","type":"blocks","created_at":"2026-07-06T03:47:29Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-3gd","type":"relates-to","created_at":"2026-07-04T21:31:44Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-4smp","type":"relates-to","created_at":"2026-07-04T21:31:45Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-bfv","type":"relates-to","created_at":"2026-07-04T21:31:43Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-gjg","type":"relates-to","created_at":"2026-07-04T21:31:44Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-mhx.4","type":"relates-to","created_at":"2026-07-04T21:31:41Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-rvh","type":"relates-to","created_at":"2026-07-04T21:31:42Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-37t.11","depends_on_id":"polylogue-s7ae","type":"relates-to","created_at":"2026-07-04T20:01:59Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":2,"dependent_count":8,"comment_count":0} {"_type":"issue","id":"polylogue-fnm.12","title":"User-defined query macros: named, composable DSL shorthands in user.db","description":"The highest-leverage runtime configurable found in the preference design pass: operators (and agents) repeat the same filter combinations constantly — 'my real coding sessions' = origin:claude-code-session + repo-scope + exclude-subagents + trailing-90d. Today that is retyped or shell-aliased outside the product. Named macros stored in user.db make the DSL personal: define once, compose anywhere the grammar accepts a predicate, share with agents automatically (they resolve server-side, so MCP/webui/CLI all understand them).","design":"(1) Definition: 'polylogue config macro set mine \"origin:claude-code-session exclude:subagents after:-90d\"' (and MCP/webui equivalents); stored as typed user.db rows (the y4c settings registry), validated at definition time by compiling against the grammar — a macro that does not parse is refused with the caret error. (2) Reference syntax: @mine inside any query position where a predicate group is valid ('@mine \"WAL contention\" | group by model | count'). Expansion happens in the compiler BEFORE lowering (textual-hygienic: expanded predicates carry their macro provenance for error messages and explain output — 'explain' shows the expansion). (3) Composability rules: macros may reference macros (depth-capped, cycle-checked at definition); macros are predicate-groups only in v1 — no pipeline stages inside macros (keeps semantics local; revisit with evidence). (4) Surfaces: completions offer @-macros (fnm.4 registry projection); saved views can be macro-defined; the query-support matrix documents them. (5) Agent leverage: agents see the operator's macros via completions/explain — shared vocabulary between operator and agents for free; agents may define their own under a namespace (agent:@retry-storms) kept visually distinct.","acceptance_criteria":"Define/list/delete macros via CLI+MCP; @macro composes inside find, unit-where, and pipeline queries on the live archive; invalid macro refused at definition with caret; explain shows expansion with provenance; cycle/depth guards tested; completions surface @-macros.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=C-read-evidence-contract; lane=read-contracts; readiness=A-implementation-ready; proof=CLI/daemon/MCP/Python/web query parity suite and content-hash citation drift fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/152_polylogue_fnm_12.md (depth: bead-localized-from-export; urgency: T1-critical-path-correctness). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T15:28:38Z","created_by":"Sinity","updated_at":"2026-07-07T13:05:10Z","labels":["area:query","area:surface","delivery:C-read-evidence-contract","lane:read-contracts"],"dependencies":[{"issue_id":"polylogue-fnm.12","depends_on_id":"polylogue-fnm","type":"parent-child","created_at":"2026-07-03T17:28:38Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-t8t","title":"Agent workflow catalog: walk the seven core flows end-to-end, fix what breaks","description":"Affordances exist in pieces; nobody has walked the actual workflows end-to-end: (1) RESUME — arrive in repo, recover context, continue; (2) FORENSIC DEBUG — did a past session touch this; (3) PRIOR ART — has anything explored this approach; (4) DECISION LOOKUP — what did we decide and why; (5) POSTMORTEM WRITE — close the loop after failure (37t.7); (6) COST CHECK — what has this repo/task cost; (7) SELF-INSPECTION — agent reads its own live session mid-flight (raw-log 05-28; needs hook-fresh ingest + get_session on self). Walk each as a real agent over MCP against the live archive, time it, file every gap — the empirical complement to the cookbook (pj8).","design":"(1) Each flow = a workflow registry entry (product/workflows.py REQUIRED_WORKFLOW_IDS) with intent, tool sequence, envelope shapes, round-trip token cost, latency budget (20d.14). (2) Execute from a real Claude Code session via polylogue MCP on this machine; archive the walk transcript as evidence. (3) Verify-or-refute known suspects: self-inspection freshness (searchable within seconds?), search-within-session ergonomics, resume-brief token cost vs preamble budget, cost-check cold latency. (4) Output: per flow PASS+timing or a filed bead; catalog doc renders from the registry (drift-checked) and becomes the reference the cookbook prompts point at.","acceptance_criteria":"Seven registry entries; seven archived walk transcripts; every gap filed as a linked bead; rendered catalog lists measured tokens+latency per flow; self-inspection demonstrates an agent reading its own in-progress session.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=A-implementation-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/070_polylogue_t8t.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T15:15:57Z","created_by":"Sinity","updated_at":"2026-07-07T13:04:16Z","labels":["area:context","area:legibility","area:mcp","delivery:D-agent-context-coordination","lane:agent-coordination","spine","wave:2"],"dependencies":[{"issue_id":"polylogue-t8t","depends_on_id":"polylogue-s7ae","type":"parent-child","created_at":"2026-07-04T21:31:04Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-9e5.16","title":"Python API parity: the library surface audited against CLI/MCP capabilities","description":"The async library API (api/__init__.py, documented in library-api.md) is a promised public surface, but nothing checks that it kept pace: capabilities added CLI-first or MCP-first (followup_class queries, logical sessions, corrections, context images, embeddings ops, observed-event pipelines) may or may not be reachable from the library, and library-api.md may describe an older shape. Surface drift here is invisible because the library has no external consumers yet — which is exactly when it silently rots.","design":"(1) Generate the capability matrix: CLI commands (inventory) x MCP tools (EXPECTED_TOOL_NAMES) x facade methods (9e5.14 map) -\u003e a three-column reachability table; every capability classified: all-surfaces / intentionally-surface-specific (document why) / drifted (fix or deprecate). (2) library-api.md verified line-by-line against the current facade (doc-commands lint covers commands, not API signatures — add an api-doc check that imports and getattr-verifies every documented symbol, render-style). (3) Structural fix rides 1fp: once capability protocols exist, the library API IS the protocol set + composition root — parity becomes definitional and this audit becomes the regression test for it. Until then, close the drifted gaps found. (4) The matrix generator lands as a devtools render artifact (drift-checked) so parity stays visible permanently.","acceptance_criteria":"Capability matrix generated and committed as a rendered doc; every drifted row either fixed or documented as intentional; api-doc symbol check wired into verify; library-api.md accurate against the live facade.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=A-trust-floor; lane=evidence-honesty; readiness=D-horizon-ready; proof=rigor-audit coverage report, evidence-contract tests, not-supported/unknown rendering fixture. Original readiness=D-horizon-ready.\nBurst candidate f96da638d rejected after cold review: the matrix auto-classifies every one-surface row intentional, name grouping hides operation-level gaps, the inventory is not the full public Python surface, and the doc verifier can pass with zero references and checks only hasattr. Required architecture: governed capability-spec IDs with per-operation bindings and intentional-absence authority; unknown/unbound live entries fail; doc checks require sections/counts/signatures/asyncness and mutation-sensitive removal tests.\n2026-07-10 Terra repair 0e4c4d27d rejected on coordinator review. It strengthens live-entry inventory and API-doc signature checks, but still does not implement the requested cross-surface capability matrix: all 101 CLI commands are one command-tree operation with wholesale MCP/Python absences, all 88 MCP tools are one tool-registry operation, and Python entries are grouped by owner with wholesale CLI/MCP absences. Thus aggregate_sessions/search/context/etc are never aligned as the same semantic operation and no cross-surface drift can be discovered. This repeats the core misframing in a governed form. Keep the doc verifier work salvageable; redesign the registry around stable semantic operation IDs with per-surface bindings and per-operation intentional absences.\nPR #2782 merged: fixed the annotation-batch-import API/CLI/MCP drift (commits 62cc33275, 13274c048, a1e505788, 3771946b2) — the one tractable in-lane runtime gap found. DEFERRED (not closing, all 4 matrix items): the generated capability matrix doc, remaining drift fixes/documentation, and the API-doc symbol check wired into verify are all owned by the successor bead polylogue-s1kr; this PR is a review artifact, not a closure.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T14:53:28Z","created_by":"Sinity","updated_at":"2026-07-13T00:01:35Z","started_at":"2026-07-10T20:13:07Z","labels":["area:audit","area:surface","delivery:A-trust-floor","lane:evidence-honesty"],"dependencies":[{"issue_id":"polylogue-9e5.16","depends_on_id":"polylogue-9e5","type":"parent-child","created_at":"2026-07-03T16:53:28Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9e5.16","depends_on_id":"polylogue-9e5.14","type":"blocks","created_at":"2026-07-04T21:31:34Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-stc","title":"Experiment definitions as typed assertions with preregistered lifecycle","description":"Experiments remain a distinct typed domain definition because preregistration, assignment, exposure,\nstopping, exclusion, and outcome semantics differ from query recipes. V1 is a versioned typed\nassertion payload using shared definition/evaluation/receipt protocols; it does not get a dedicated\ntable until two materially different consumers stabilize the lifecycle.","design":"ExperimentDefinition v1 records hypothesis/claim class, arms/treatments, assignment unit and rule,\nexposure evidence, preregistered MetricDefinition refs and directions, sample/frame intent,\nexclusion/leakage policy, stopping rule, analysis plan, and distinction between confirmatory and\npost-hoc exploratory metrics. Store it as a typed assertion payload with an immutable schema version;\nassignments/exposures/outcomes are typed linked assertions/receipts. Implement common\nDefinitionIdentity and EvaluationWorld, but retain experiment lifecycle and authority.\n\nFirst materially different consumers: candidate-curriculum A/B and matched resume/prompt or harness\ncomparison. Only after both use the same payload/lifecycle without special cases may 60i5 coordinate\na dedicated durable schema. Agent construction may discover registered metrics and validate a draft,\nbut assignment remains explicit/observable and agents cannot redefine preregistration after exposure.","acceptance_criteria":"1. An agent can construct a valid two-arm typed assertion from discoverable MetricDefinitions;\n missing direction, assignment, exposure, stopping, exclusion, frame, or analysis fields are\n refused by name.\n2. Preregistered and exploratory metrics render separately; post-exposure edits create a new version\n and cannot masquerade as preregistration.\n3. Curriculum and a different matched prompt/resume/harness consumer run through the same lifecycle\n without consumer-specific scheduler/state forks.\n4. Assignment/exposure/outcome receipts bind evaluation worlds and support paired analysis where\n declared; causal claims without them are refused.\n5. No dedicated experiment table lands before the two-consumer stabilization review is recorded.","notes":"Agents-run-evals (operator 2026-07-03): the eval instrument's operators are AGENTS, not just the human — a devloop agent should be able to: pick a task class from the archive, define the ExperimentSpec (model-A vs model-B arms on same-class tasks), execute arms via the remote-control lane (2n6: spawn harness sessions with chosen models), let structural outcomes accumulate, run experiment analyze, and file the procurement-grade report — end to end without operator toil beyond judgment. The 9l5.2 killer-query is the observational baseline; this is its interventional upgrade. Add an 'agent-operated evaluation' acceptance walk to the t8t catalog once both land.\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=I-analytics-experiments; lane=analytics-experiments; readiness=A-implementation-ready; proof=measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/118_polylogue_stc.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\n\n[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nGeneralize what cfk/jxe did by hand into substrate: an experiment is a first-class declared object — hypothesis, arms, assignment rule, PREREGISTERED metrics (declared before data collection, timestamped — the construct-validity teeth), sample-size intent, analysis plan — and the archive hosts its lifecycle: assignment, observation collection (sessions tagged to arms), paired/grouped analysis through the measure registry, and a cold-reader-gateable report. Agent affordance is the point (operator ask): agents should be able to CONSTRUCT well-formed experiments informedly — query the measure registry for what is measurable at what validity, draft the prereg, run the arms, and produce the analysis — so self-experimentation (37t.9 context-spec variation, prompt A/B, harness comparisons) stops being bespoke campaign scripting.\n\nORIGINAL DESIGN:\n(1) ExperimentSpec as a user.db artifact (assertion-adjacent, judgment-visible): hypothesis, arms (name + treatment description), assignment (manual | alternating | by-session-property), preregistered metrics (each a registry measure ref + direction + minimum-interesting-effect), planned n, analysis plan (paired vs unpaired, test choice via 9l5.7). Prereg timestamp is the assertion created_at — post-hoc metric additions are visibly post-hoc (labeled exploratory). (2) Lifecycle tools (CLI + MCP): experiment define / assign \u003csession-ref\u003e \u003carm\u003e / status (n per arm, power-ish progress vs planned n) / analyze (runs the plan: per-metric effect + CI + test, paired where declared; exploratory section separated) / report (markdown artifact, cold-reader-gate ready, .agent/demos pattern). (3) Assignment evidence: arm membership is an assertion row with evidence ref to the session — auditable, revocable. (4) Agent flow: the registry + query_units expose measures and their validity metadata; a well-formed spec is constructible from one MCP conversation; malformed specs (unregistered metric, no direction, n=1 with unpaired plan) are refused with actionable errors. (5) First consumers: the uplift re-run (cfk) migrates onto this; 37t.9 prompt/context experiments; harness A/B (same task class, model arms). Non-goal: automatic arm assignment inside agent harnesses — assignment stays explicit/observable.\n\nORIGINAL ACCEPTANCE_CRITERIA:\ncfk's protocol is expressible as an ExperimentSpec and its analysis reproduces via experiment analyze. An agent (via MCP) can define a valid two-arm experiment end-to-end against the seeded corpus; malformed specs are refused with the missing field named. Prereg vs exploratory metrics render separately in the report.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T14:11:56Z","created_by":"Sinity","updated_at":"2026-07-13T05:45:34Z","labels":["area:analytics","area:context","area:substrate","delivery:I-analytics-experiments","horizon:frontier","lane:analytics-experiments","spine"],"dependencies":[{"issue_id":"polylogue-stc","depends_on_id":"polylogue-9l5","type":"parent-child","created_at":"2026-07-04T21:31:06Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-stc","depends_on_id":"polylogue-9l5.7","type":"blocks","created_at":"2026-07-03T16:11:56Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-stc","depends_on_id":"polylogue-rxdo.2","type":"blocks","created_at":"2026-07-07T14:54:54Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-stc","depends_on_id":"polylogue-rxdo.3","type":"blocks","created_at":"2026-07-07T14:54:55Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":3,"dependent_count":1,"comment_count":0} +{"_type":"issue","id":"polylogue-stc","title":"Experiment definitions as typed assertions with preregistered lifecycle","description":"Experiments remain a distinct typed domain definition because preregistration, assignment, exposure,\nstopping, exclusion, and outcome semantics differ from query recipes. V1 is a versioned typed\nassertion payload using shared definition/evaluation/receipt protocols; it does not get a dedicated\ntable until two materially different consumers stabilize the lifecycle.","design":"ExperimentDefinition v1 records hypothesis/claim class, arms/treatments, assignment unit and rule,\nexposure evidence, preregistered MetricDefinition refs and directions, sample/frame intent,\nexclusion/leakage policy, stopping rule, analysis plan, and distinction between confirmatory and\npost-hoc exploratory metrics. Store it as a typed assertion payload with an immutable schema version;\nassignments/exposures/outcomes are typed linked assertions/receipts. Implement common\nDefinitionIdentity and EvaluationWorld, but retain experiment lifecycle and authority.\n\nFirst materially different consumers: candidate-curriculum A/B and matched resume/prompt or harness\ncomparison. Only after both use the same payload/lifecycle without special cases may 60i5 coordinate\na dedicated durable schema. Agent construction may discover registered metrics and validate a draft,\nbut assignment remains explicit/observable and agents cannot redefine preregistration after exposure.DECLARATION-RECALL PILOT (37t.2; preregister before exposure). Eligible units are comparable agent\nsessions in a declared task/harness/model frame. Arm A receives no marker nudge; arm B receives an\nadvisory session-start example/palette and, if tested, a bounded non-blocking end reminder. Record\nassignment and actual exposure; exclude prior marker users, contaminated cross-arm sessions, missing\ncapture, and sessions without enough retrospective text to score. The reference detector is a pinned\nPACK-D rule/judged sample for claim, correction, question, goal, terminal, and handoff speech acts.\nPrimary outcomes are declaration recall and precision by kind. Secondary outcomes are malformed rate,\ntask outcome, correction recurrence, operator/agent friction, opt-out, and completion latency/cost.\nReport detector uncertainty and inter-rater/gold coverage; a weak detector cannot prove low recall.\nStopping and minimum sample intent are fixed before exposure; unexpected analyses are exploratory.\n\nThis experiment tests whether an advisory authoring channel is useful. It does not test a mandatory\npolicy and cannot authorize one. A later mandate requires a positive receipt under the preregistered\nthresholds, explicit operator ratification after reviewing benefit and friction, and a separately\nversioned, revocable AssertionKind.POLICY. Missing markers remain valid in both arms and never change\nsession completion, Stop behavior, or goal truth.","acceptance_criteria":"1. An agent can construct a valid two-arm typed assertion from discoverable MetricDefinitions;\n missing direction, assignment, exposure, stopping, exclusion, frame, or analysis fields are\n refused by name.\n2. Preregistered and exploratory metrics render separately; post-exposure edits create a new version\n and cannot masquerade as preregistration.\n3. Curriculum and a different matched prompt/resume/harness consumer run through the same lifecycle\n without consumer-specific scheduler/state forks.\n4. Assignment/exposure/outcome receipts bind evaluation worlds and support paired analysis where\n declared; causal claims without them are refused.\n5. No dedicated experiment table lands before the two-consumer stabilization review is recorded.\n\n6. The 37t.2 declaration-recall pilot preregisters eligibility/frame, no-nudge and advisory arms,\n assignment/exposure, pinned reference detector, per-kind precision/recall, malformed rate, task\n outcomes, recurrence, friction/opt-out, latency/cost, exclusions, sample intent, stopping, and\n confirmatory versus exploratory analyses.\n7. A fixture with no markers remains a valid completed session in every arm. The experiment report\n cannot emit or activate enforcement; it can only supply evidence for a later explicit, revocable\n operator policy decision.","notes":"Agents-run-evals (operator 2026-07-03): the eval instrument's operators are AGENTS, not just the human \u2014 a devloop agent should be able to: pick a task class from the archive, define the ExperimentSpec (model-A vs model-B arms on same-class tasks), execute arms via the remote-control lane (2n6: spawn harness sessions with chosen models), let structural outcomes accumulate, run experiment analyze, and file the procurement-grade report \u2014 end to end without operator toil beyond judgment. The 9l5.2 killer-query is the observational baseline; this is its interventional upgrade. Add an 'agent-operated evaluation' acceptance walk to the t8t catalog once both land.\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=I-analytics-experiments; lane=analytics-experiments; readiness=A-implementation-ready; proof=measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/118_polylogue_stc.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 \u2014 verify source anchors before coding; line numbers are snapshot-relative.\n\n[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nGeneralize what cfk/jxe did by hand into substrate: an experiment is a first-class declared object \u2014 hypothesis, arms, assignment rule, PREREGISTERED metrics (declared before data collection, timestamped \u2014 the construct-validity teeth), sample-size intent, analysis plan \u2014 and the archive hosts its lifecycle: assignment, observation collection (sessions tagged to arms), paired/grouped analysis through the measure registry, and a cold-reader-gateable report. Agent affordance is the point (operator ask): agents should be able to CONSTRUCT well-formed experiments informedly \u2014 query the measure registry for what is measurable at what validity, draft the prereg, run the arms, and produce the analysis \u2014 so self-experimentation (37t.9 context-spec variation, prompt A/B, harness comparisons) stops being bespoke campaign scripting.\n\nORIGINAL DESIGN:\n(1) ExperimentSpec as a user.db artifact (assertion-adjacent, judgment-visible): hypothesis, arms (name + treatment description), assignment (manual | alternating | by-session-property), preregistered metrics (each a registry measure ref + direction + minimum-interesting-effect), planned n, analysis plan (paired vs unpaired, test choice via 9l5.7). Prereg timestamp is the assertion created_at \u2014 post-hoc metric additions are visibly post-hoc (labeled exploratory). (2) Lifecycle tools (CLI + MCP): experiment define / assign \u003csession-ref\u003e \u003carm\u003e / status (n per arm, power-ish progress vs planned n) / analyze (runs the plan: per-metric effect + CI + test, paired where declared; exploratory section separated) / report (markdown artifact, cold-reader-gate ready, .agent/demos pattern). (3) Assignment evidence: arm membership is an assertion row with evidence ref to the session \u2014 auditable, revocable. (4) Agent flow: the registry + query_units expose measures and their validity metadata; a well-formed spec is constructible from one MCP conversation; malformed specs (unregistered metric, no direction, n=1 with unpaired plan) are refused with actionable errors. (5) First consumers: the uplift re-run (cfk) migrates onto this; 37t.9 prompt/context experiments; harness A/B (same task class, model arms). Non-goal: automatic arm assignment inside agent harnesses \u2014 assignment stays explicit/observable.\n\nORIGINAL ACCEPTANCE_CRITERIA:\ncfk's protocol is expressible as an ExperimentSpec and its analysis reproduces via experiment analyze. An agent (via MCP) can define a valid two-arm experiment end-to-end against the seeded corpus; malformed specs are refused with the missing field named. Prereg vs exploratory metrics render separately in the report.\n\nOPERATOR DECISION 2026-07-13: provisionally adopt the independent review recommendation: measure\ndeclaration recall before considering mandatory markers. Current policy is optional/advisory. Positive\nexperimental evidence is necessary but not sufficient for enforcement; explicit later ratification is\nalso required.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T14:11:56Z","created_by":"Sinity","updated_at":"2026-07-13T06:29:30Z","labels":["area:analytics","area:context","area:substrate","delivery:I-analytics-experiments","horizon:frontier","lane:analytics-experiments","spine"],"dependencies":[{"issue_id":"polylogue-stc","depends_on_id":"polylogue-9l5","type":"parent-child","created_at":"2026-07-04T21:31:06Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-stc","depends_on_id":"polylogue-9l5.7","type":"blocks","created_at":"2026-07-03T16:11:56Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-stc","depends_on_id":"polylogue-rxdo.2","type":"blocks","created_at":"2026-07-07T14:54:54Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-stc","depends_on_id":"polylogue-rxdo.3","type":"blocks","created_at":"2026-07-07T14:54:55Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":3,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-9l5.7","title":"Statistics substrate over canonical metrics and three-part validity","description":"This is the statistical-honesty layer. It implements statistical primitives and enforces\nconstruct validity for canonical MetricDefinition objects owned by rxdo.9.1. It does not define a\ncompeting MeasureSpec identity. Every metric states separate enumeration requirements, frame/\ncoverage requirements, measurement authority, denominator/null policy, confounds, and uncertainty\nmethods; outputs suppress invalid compositions rather than decorating them with caveats.","design":"IDENTITY. rxdo.9.1 owns metric:\u003chash\u003e and MetricDefinition. This bead owns the registry\nimplementation, completeness checks, statistical functions, composition, and rendering. Registry\ndeclarations include construct, formula/component version refs, unit, denominator expression,\nnull policy, required enumeration class, required frame coverage, accepted measurement authorities,\nconfounds, provenance-mixing rule, uncertainty-source/method, footnote template, and output schema.\n\nPRIMITIVES. Provide Wilson intervals, quantiles/ECDF/histograms, bootstrap/order-statistic intervals,\nMann-Whitney or declared alternatives, median differences, Cliff's delta, distribution distances,\nand multiple-comparison correction. Optional scipy support may accelerate, but core validity checks\nremain dependency-light.\n\nHONEST COMPOSITION. A census means only enumeration-exact over a declared frame. It receives no\nsampling CI. Missing/incomparable coverage or mixed authorities fail closed unless the metric\nexplicitly declares the mixture. Every interval names its uncertainty source. Registry entries are\ndiscoverable to agents before experiment design, and query-run receipts record metric identity,\nformula version, grouping/window, frame result, authority, and n.","acceptance_criteria":"1. The implementation consumes rxdo.9.1 MetricDefinition identity; no second MeasureSpec hash/\n registry identity remains.\n2. Registry validation rejects a missing denominator/null policy, frame requirement, measurement\n authority, formula version, or confound declaration with a named error.\n3. At least five existing analytics are registered and one DSL query composes metric+group+compare\n through production lowering.\n4. Cross-origin comparison without compatible coverage/authority is suppressed. An exact census\n renders no sampling CI but preserves frame/model uncertainty.\n5. Property tests cover interval/statistic behavior and an anti-vacuity test removes a production\n registry dependency to make composition fail.","notes":"CONTRACT-FIRST SPLIT (pace): slice 1 (size:S): MeasureSpec dataclass + registry + wilson_interval + one registered measure end-to-end — unblocks stc, h10, 9l5.8-.12, temporal/survival work immediately. Slice 2: the full stats module + DSL composition + enforcement. Downstream beads depend on the SPEC SHAPE, not the complete primitive set.\n\nA16 REFINEMENT (2026-07-06 corpus digestion; verbatim specs: .agent/scratch/corpus-gpt-pro-2026-07-06/bundles/rnd-bundle-2-of-6.md L1057 + rnd-bundle-1-of-6.md L2608): (a) MeasureSpec gains denominator_expr (the #1 construct-validity trap — enforce it), null_policy (suppress|zero|exclude|separate-unknown), provenance_mixing_flags, footnote_template, formula_version. (b) Placement decided: registry lives BELOW insights/registry.py — insight surfaces become projections of measures; do not overload InsightType into measure semantics. (c) Coverage gates SUPPRESS (refuse the bare number with an actionable diagnostic), not annotate; mixed-tier denominators fail closed unless declared mixed-declared (credit_vs_api_divergence is intentionally mixed-declared; outcome_conditioned_cost must never silently mix provider-reported with catalog estimates). (d) Phase order: register cache_amplification_ratio, thinking_tax, stuck_tool_density, tool_mix_entropy, credit_vs_api_divergence FIRST — they stress the provenance system hardest (Codex inclusive-lane decomposition, cost-basis naming, timing provenance, action coverage). (e) Denominator hazards checklist to encode as registry validation: cached-vs-fresh token lanes (Codex input includes cached; disjoint-lane guard), cost basis never collapses to one total_usd, timing_provenance splits rows, physical-vs-logical grain declared per measure (logical default for work questions, physical for archive-row questions). (f) Uncertainty additions: Cliffs delta + median diff for skewed two-sample, Jensen-Shannon for distribution/transition comparisons, bootstrap for pXX; census counts render coverage=census with NO interval (already in design). (g) Full 16-measure formula/confound/suppress-when table survives in the A16 branch extract (.agent/scratch/corpus-gpt-pro-2026-07-06/B-A16-measure-registry.md) — lift rows from there when registering each measure. (h) Measure invocations should record onto query-run objects when rxdo.3 lands (measure output addressable: id, formula_version, group/window, coverage result, n).\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=I-analytics-experiments; lane=analytics-experiments; readiness=A-implementation-ready; proof=measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/116_polylogue_9l5_7.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\n\n[LEGACY FIELDS PRESERVED BY CORRECTIVE PASS 2026-07-13]\nORIGINAL DESCRIPTION:\nThe keystone of the analytics tower. Today every number the archive emits is a point estimate with no uncertainty, and construct validity is a discipline (footnotes written by hand in campaign reports) rather than a mechanism. Two deliverables: (1) honest statistical primitives available wherever aggregates compose — proportions with Wilson intervals, mean/median/percentiles with n and CI, two-sample comparisons with effect size + test, histogram/ECDF buckets; (2) the MEASURE REGISTRY: every analytic registers a declaration — construct it operationalizes, formula, evidence tier (structural / provider-reported / derived / heuristic), sample-frame requirements, known confounds — and the composition layer enforces it: a cross-origin cost comparison without coverage tiers refuses to render as a bare number; every output carries its tier footnote automatically (generalizing the 9l5.2 pattern). insight_rigor_audit extends to audit the registry.\n\nORIGINAL DESIGN:\n(1) polylogue/analytics/stats.py: pure functions over sequences — wilson_interval(k,n), quantiles_with_ci (bootstrap or order-statistic CIs), two_proportion_test, mann_whitney (rank test avoids normality assumptions on latency/cost distributions), cliffs_delta effect size, histogram_buckets. scipy.stats behind the [analytics] extra with hand-rolled fallbacks for the handful used in core paths (Wilson and bootstrap are 20 lines each — core stays dependency-lean). (2) MeasureSpec (declare-once discipline, o21): name, construct, unit, formula ref, evidence_tier, required_coverage (e.g. priced-provenance-only), confounds list, output schema. Registered like query units; query_units/completions expose them so agents can DISCOVER what is measurable and at what validity before designing an analysis — the informed-construction affordance. (3) DSL integration (after fnm.1 aggregates): measure stages compose — 'sessions where repo:X | measure silent_proceed_rate by model | compare origin:claude-code-session vs codex-session' emits rates + CIs + test + tier footnotes. Multiple-comparison honesty: when a group-by fans out \u003e5 comparisons, render Benjamini-Hochberg-adjusted flags, not raw stars. (4) Renderers show uncertainty by default: rate -\u003e '24.1% [22.9, 25.3] n=5000 (structural)'; --point-only to suppress. Pitfall: do NOT attach CIs to full-population counts (no sampling error) — the registry marks census vs sample measures.\n\nORIGINAL ACCEPTANCE_CRITERIA:\npolylogue/analytics/stats.py exists with property tests (hypothesis: interval coverage on synthetic distributions). At least 5 existing analytics re-registered as MeasureSpecs with tiers. A cross-origin comparison without coverage labels is refused at composition with an actionable error. One DSL query composes measure+group+compare and renders CIs + tier footnotes on the seeded corpus.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T14:11:51Z","created_by":"Sinity","updated_at":"2026-07-13T05:43:49Z","labels":["area:analytics","area:query","delivery:I-analytics-experiments","lane:analytics-experiments","spine","wave:2"],"dependencies":[{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-3uw","type":"related","created_at":"2026-07-13T07:48:05Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:54:33Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:54:34Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:54:35Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-9l5","type":"parent-child","created_at":"2026-07-03T16:11:51Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-9l5.18","type":"relates-to","created_at":"2026-07-07T15:02:06Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-9l5.19","type":"blocks","created_at":"2026-07-06T03:49:26Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:54:36Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:54:37Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-f2qv.1","type":"blocks","created_at":"2026-07-07T14:54:38Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-f2qv.2","type":"blocks","created_at":"2026-07-07T14:54:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-f2qv.3","type":"blocks","created_at":"2026-07-07T14:54:40Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-f2qv.4","type":"blocks","created_at":"2026-07-07T14:54:41Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-f2qv.5","type":"blocks","created_at":"2026-07-07T14:54:42Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.7","depends_on_id":"polylogue-rxdo.9.1","type":"blocks","created_at":"2026-07-13T07:47:59Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":12,"dependent_count":20,"comment_count":0} {"_type":"issue","id":"polylogue-scd","title":"Cross-surface handoff: polylogue open + copy-as-command everywhere","description":"The CLI, webui, and MCP each dead-end at their own borders: a CLI result cannot jump to the richer web view ('polylogue open' does not exist); a webui row cannot be turned into the equivalent CLI command for scripting; an MCP payload ref requires manual reconstruction to inspect by hand. Every border crossing is retyping.","design":"(1) 'polylogue open \u003cref\u003e' resolves any ref (session/message/assertion, or 'last') to the workbench deep link and opens it (xdg-open; prints the URL when headless; starts nothing — if the daemon is down it says so and prints the URL for later). Deep-link routes must exist for message and assertion anchors (the anchor vocabulary from the list payloads — verify after bby.7's ref unification). (2) Webui: every result row/panel gets a copy-affordance offering the canonical ref and the equivalent CLI invocation ('polylogue --id X read --view changes') — the query-first CLI grammar makes this mechanical from the route+params. (3) find/read terminal output ends with a one-line handoff hint when a tty ('open in workbench: polylogue open \u003cref\u003e') — same restraint rules as jnj.12's guidance lines, suppressed with --plain/--format json. (4) MCP payloads already carry refs; add web_url computed field to the ref envelope so agents can hand the operator a clickable link. One ref grammar everywhere is the enabler and bby.7's parity test is the guard.","acceptance_criteria":"`polylogue-scd` has an execution-grade design note before coding, lands behind the release gate `C-read-evidence-contract`, and records a focused proof artifact. Acceptance requires one seeded positive case, one degraded/empty case where applicable, docs or generated-surface updates for any public behavior, and verification via CLI/daemon/MCP/Python/web query parity suite and content-hash citation drift fixture.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=C-read-evidence-contract; lane=read-contracts; readiness=D-horizon-ready; proof=CLI/daemon/MCP/Python/web query parity suite and content-hash citation drift fixture. Original readiness=E-spec-needed.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T14:02:39Z","created_by":"Sinity","updated_at":"2026-07-08T20:14:33Z","labels":["area:surface","area:web","delivery:C-read-evidence-contract","delivery:ac-patched","lane:read-contracts"],"dependencies":[{"issue_id":"polylogue-scd","depends_on_id":"polylogue-bby.11","type":"relates-to","created_at":"2026-07-04T21:31:50Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-scd","depends_on_id":"polylogue-jnj","type":"parent-child","created_at":"2026-07-04T21:31:15Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-dmp","title":"polylogue note: zero-friction memory capture from the terminal","description":"Terminal-side ambient capture is missing: when the operator (or an agent in a shell) realizes something worth remembering, there is no one-liner to record it with provenance — the thought either interrupts flow for a heavier tool or evaporates. The overlay bead (90y) solves this for browser reading; this is the terminal twin. Ambient criterion: capture must cost one line or it will not happen.","design":"(1) 'polylogue note \"WAL contention was the real cause, not cache size\"' writes a candidate NOTE assertion. Anchoring: --ref \u003csession-ref|last\u003e attaches evidence refs ('last' = most recent archived session for the current repo/cwd — the common case after finishing work); --repo/--topic add scope refs; bare note with no ref is allowed but flagged unanchored. (2) Kind selection: --kind note|claim|correction|lesson (default note); everything lands as candidate, judged later via polylogue judge — capture and judgment deliberately decoupled (capture must be instant; judgment can batch). (3) stdin mode for piping ('git diff | polylogue note --stdin --ref last --kind lesson' style flows) with a size cap. (4) Same verb over MCP already exists once 27p lands (candidate writer) — keep payload shapes identical so CLI and MCP notes are indistinguishable in the queue. (5) Shell ergonomics: a tiny zsh widget (bindkey) that prefills 'polylogue note' with the last command + exit code as context is the ambient cherry — ship as an optional snippet in docs, not a hard dependency.","acceptance_criteria":"1. `polylogue note \"text\"` writes exactly one candidate NOTE assertion to user.db through the candidate writer; default --kind is note and nothing is auto-judged. 2. Anchoring: `--ref \u003csession-ref|last\u003e` attaches evidence refs (`last` resolves to the most recent archived session for the current repo/cwd); `--repo`/`--topic` add scope refs; a bare note with no ref is accepted but flagged unanchored (observable on the candidate row/queue). 3. `--kind note|claim|correction|lesson` selects the assertion kind and every value lands as a candidate. 4. stdin mode: `git diff | polylogue note --stdin --ref last --kind lesson` reads the body from stdin under a size cap; oversize input is rejected with an actionable error. 5. CLI and MCP note payload shapes are identical so a CLI-written note is indistinguishable in the pending-candidate queue from an MCP-written one (test-asserted; MCP parity depends on 27p landing). 6. The zsh prefill widget ships only as an optional docs snippet, not a runtime dependency. Verify: `devtools test` selection on the note command + candidate writer; the written candidate appears in `polylogue judge --list` (or the pending-queue read).","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=context-memory; readiness=A-implementation-ready; proof=context scheduler ledger fixture and candidate judgment queue proof. Original readiness=A-implementation-ready.","status":"closed","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T14:02:38Z","created_by":"Sinity","updated_at":"2026-07-13T00:56:00Z","closed_at":"2026-07-13T00:56:00Z","close_reason":"PR #2801 merged: all 6 ACs satisfied — root terminal note creates one non-injected candidate; session/last anchors + scope refs + unanchored notes; kind selection; bounded stdin; CLI/MCP payload parity with distinct attribution; zsh widget documented+tested","labels":["area:context","area:surface","delivery:D-agent-context-coordination","lane:context-memory","spine"],"dependencies":[{"issue_id":"polylogue-dmp","depends_on_id":"polylogue-27p","type":"relates-to","created_at":"2026-07-04T21:31:31Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -398,12 +398,12 @@ {"_type":"issue","id":"polylogue-o21","title":"Extension-point ergonomics: declare-once registries, scaffolds, actionable completeness errors","description":"Every extension today is a scavenger hunt across parallel registration sites, each failing opaquely when missed — the accumulated tribal knowledge lives in bd memories: a new MCP tool needs EXPECTED_TOOL_NAMES + TOOL_CONTRACT + role gating + render openapi + render cli-output-schemas (four separate opaque failures); a new golden-path workflow must be in REQUIRED_WORKFLOW_IDS or CLI startup crashes with an unrelated error; a new AssertionKind breaks two renders plus the every-kind-has-a-surface test; a new module fails topology verify until two regens run; a new origin touches detector, parser, enum, schema package, usage-coverage, and completeness matrix. This is the single biggest tax on future expansion: the cost is not writing the feature, it is discovering the registration constellation.\n\n## Authoritative corrective scope (2026-07-13)\n\nRegistry count is now a compounding risk. Declare-once derivation and scaffolding must precede new\nclassifier, marker, loop, or ranker registry families.","design":"Three legs, applied per extension point (MCP tool, CLI verb/command, DSL unit/stage, insight, origin, assertion kind, devtools command, workflow): (1) DECLARE-ONCE: each point gets a single declaration object carrying ALL metadata the parallel sites currently hold (name, contract, role gating, schema, docs blurb, owning surface) — the parallel lists become derivations: EXPECTED_TOOL_NAMES is generated FROM tool declarations, REQUIRED_WORKFLOW_IDS from workflow specs, render inputs read the declarations. Where a hard second site must remain (generated OpenAPI), the deriver owns it. (2) ACTIONABLE ERRORS: every registration validator, when it fails, names the missing step and the command that fixes it ('assertion kind X has no surface entry: add to user_audit surface map at \u003cpath\u003e; then run devtools render openapi') — turn the four opaque failures into one checklist error. The registration-traps bd memory becomes obsolete BY CONSTRUCTION, which is the acceptance test: a new agent adds a tool end-to-end without the memory. (3) SCAFFOLDS: devtools new tool|origin|insight|command generates the declaration + stub + test skeleton in the right places (repo already generates surfaces; generating starting points is the same machinery pointed forward). Sequencing: pilot on ONE extension point (MCP tools — highest trap density), extract the pattern, then sweep the rest one per PR. Relates t46 (contracts own surfaces — this is the authoring-side complement) and utf (devtools catalog lint rides the same declaration).\n\n## Authoritative corrective contract (2026-07-13)\n\nEvery scaffold asks the unification test: identity, lifecycle, authority, access shape, and\ndurability compatibility. If all match an existing definition family, reuse it; if not, share only\ncommon protocols and retain the typed domain declaration. Generate registration, discovery,\nvalidation, docs/schemas, completeness audit, and actionable missing-step errors from one source.\nPilot on MCP tools, then make classifier/marker/loop/ranker declarations consumers of the proven\nmechanism. Raw type count is not the objective; independently evolving semantic machinery is.","acceptance_criteria":"- Slice 1 (size:S, unblocks dependents): a DeclarationSpec dataclass + registry protocol are defined and one pilot extension point (MCP tools) is migrated to declare-once, with a published pattern doc; dependents can build against the protocol immediately.\n- DECLARE-ONCE (pilot): EXPECTED_TOOL_NAMES is derived FROM the tool declarations (grep shows the parallel list is a derivation, not hand-maintained); where a hard second site remains (generated OpenAPI) the deriver owns it.\n- ACTIONABLE ERRORS: the MCP-tool registration validator, on failure, names the missing step and the exact fixing command (e.g. 'add to \u003cpath\u003e; then run devtools render openapi'). Acceptance test: a new agent adds an MCP tool end-to-end WITHOUT consulting the registration-traps memory — the memory becomes obsolete by construction.\n- SCAFFOLD: `devtools new tool` generates the declaration + stub + test skeleton in the correct places.\n- Slices 2..n sweep the remaining extension points one per PR (child beads); `devtools verify` and `devtools render all --check` are green after each.\n\n## Corrective acceptance criteria (2026-07-13)\n\nThe MCP pilot derives every required surface from one declaration and reports an actionable missing\nregistration when one output is removed. Scaffolding prints the five unification answers and refuses\nan unjustified new durable object/registry. At least two later declaration families reuse the proven\nprotocol without sharing domain validation or durability incorrectly.","notes":"CONTRACT-FIRST SPLIT (pace, 2026-07-03): dependents need the DeclarationSpec SHAPE, not the full sweep. Slice 1 (size:S, unblocks everything): define the declaration dataclass + registry protocol + one pilot extension point (MCP tools), publish the pattern doc. Slices 2..n: per-extension-point sweeps, parallelizable, non-blocking. Dependents may build against the protocol from slice 1 day one.\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=M-substrate-consolidation; lane=substrate-consolidation; readiness=A-implementation-ready; proof=layering/import graph diff, parity tests before/after refactor, public-model compatibility suite. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/100_polylogue_o21.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\nDEMAND QUADRUPLED 2026-07-13: tonight's designs add four registries to the scavenger-hunt list — classifier:\u003chash\u003e (avna.2), marker kinds (37t.2), LOOP_REGISTRY (rxdo.11), ranker:\u003chash\u003e (rxdo.9.13) — on top of the existing tool/workflow/assertion-kind/origin traps. The declare-once + scaffold + actionable-completeness-error pattern this bead owns is now the difference between the registry system compounding or collapsing. Consider it the alphabet program's ergonomics prerequisite.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T13:37:56Z","created_by":"Sinity","updated_at":"2026-07-13T05:45:45Z","labels":["area:devtools","area:substrate","delivery:M-substrate-consolidation","horizon:frontier","lane:substrate-consolidation","refactor","wave:2"],"dependencies":[{"issue_id":"polylogue-o21","depends_on_id":"polylogue-t46","type":"relates-to","created_at":"2026-07-04T22:29:26Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-o21","depends_on_id":"polylogue-utf","type":"relates-to","created_at":"2026-07-04T22:29:27Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-703","title":"One status assembly: daemon/status.py, cli/commands/status.py, and workload diagnostics converge","description":"Status/health is computed at least three times: daemon/status.py (2,418 lines), cli/commands/status.py (1,892 lines, its own _table_exists and direct DB probing), and ops diagnostics workload. They disagree in production — live evidence 2026-07-03: bare CLI status said 'FTS: 100.0% indexed / DB: 844.6 MB' while the daemon-backed web header reported degraded insights and 28.5 GB, during a rebuild neither acknowledged. The convergence-snapshot bead (4bu) defines the shared payload for converging-state; this bead is the structural follow-through: ONE status assembly module in the substrate computes every shared fact once; daemon HTTP, CLI, and diagnostics become renderers.","design":"Inventory first: diff the fact sets each of the three computes (they overlap ~60-80% by eyeball: archive tier presence/sizes, FTS readiness, counts, daemon liveness, embedding coverage, debt). Extract a status/assembly module (home: operations/ or maintenance/ — it reads storage + ops.db, so substrate-adjacent, NOT daemon) exposing compose_status_snapshot(scope=...) with the 4bu convergence payload as one section. CLI bare status renders it (drops its own DB probing + _table_exists); daemon /api/status and web header chips render it; workload diagnostics keeps its extra deep sections but sources the shared facts from the same assembly. Contract: any fact shown by two surfaces must come from the assembly — enforced socially via review + a doc note in internals.md; the win is that number-disagreement bugs become impossible by construction rather than found by probing. Sequencing: 4bu lands the payload; this bead migrates the three call sites and deletes the duplicated probes (~1-2k lines net deletion expected).","acceptance_criteria":"`polylogue-703` declares a before/after measurement, an acceptable resource envelope, and a regression guard. The implementation fails loudly on stale/partial state and records phase timing where relevant. Verification artifact: CLI/daemon/MCP/Python/web query parity suite and content-hash citation drift fixture.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=C-read-evidence-contract; lane=read-contracts; readiness=D-horizon-ready; proof=CLI/daemon/MCP/Python/web query parity suite and content-hash citation drift fixture. Original readiness=E-spec-needed.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T13:23:41Z","created_by":"Sinity","updated_at":"2026-07-08T20:14:33Z","labels":["area:daemon","area:surface","delivery:C-read-evidence-contract","delivery:ac-patched","lane:read-contracts","refactor"],"dependencies":[{"issue_id":"polylogue-703","depends_on_id":"polylogue-t46","type":"parent-child","created_at":"2026-07-04T21:31:13Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-hiu","title":"Collapse storage twins onto the sync core behind an async adapter boundary","description":"DECIDED (delegated by operator 2026-07-03): direction B — sync core, async adapter. The sync store survives; the parallel async implementation (async_sqlite* backends + duplicated mixin SQL) is retired. Rationale: (1) SQLite is synchronous C — aiosqlite is itself a thread queue wrapping sync calls, so option A (async core) keeps a fiction layer and adds a per-statement queue hop to the ingest hot loop (millions of rows x ~10-30us = real minutes on replays), while B REMOVES a layer. (2) The sync store is the bigger, more battle-tested implementation (8,867 lines / 239 defs, owns batch ingest); porting it onto async would be the larger migration with throughput risk, whereas wrapping it is mechanical. (3) Concurrency gets BETTER, not worse: aiosqlite serializes all ops through one thread; a small per-thread read-connection pool under WAL gives genuinely parallel reads for daemon/MCP. (4) The fast path (20d.1) makes interactive CLI a daemon client, shrinking the sync tree's direct-caller role to daemonless fallback — one core serves both worlds. (5) Surfaces do not change: facade/repository methods stay async def; only their bodies become awaited adapter calls. Option A rejected for ingest-throughput risk + larger port; option C (twins + parity tests) rejected as a permanent 2x tax with generated-test ceremony on top.","design":"Execution plan, each step independently shippable and mypy-strict-netted: (0) PREREQ pf1: reconcile the 10 documented divergences INTO the sync store — for each, the divergence diff decides which twin's behavior is canonical; the sync store becomes the single source of behavior BEFORE any wiring moves. (1) ADAPTER: storage/adapter.py — a dedicated executor with per-thread read connections (pool size ~4, WAL concurrent readers) + the existing single-writer discipline for writes; wrap at REPOSITORY-METHOD granularity (one thread hop per logical operation), never per-statement. asyncio.to_thread is insufficient (default executor contention with other to_thread users) — use a named ThreadPoolExecutor owned by the storage layer. Connection lifecycle: thread-local connections built from connection_profile read/write profiles; write ops route to the writer thread. (2) MIGRATE one repository mixin at a time: mixin methods keep signatures, bodies delegate to sync-store methods via the adapter; delete the mixin's duplicated SQL as it moves. Biggest read mixins first (archive reads), writes last. (3) DELETE async_sqlite.py / async_sqlite_archive.py / async_sqlite_raw.py when their last caller moves; the '10 divergences' doc comment dies with them. (4) GATES per step: bench ingest-throughput (no regression beyond noise), bench slo read latencies on seeded corpus, devtools verify; the twin-tax memory rule is retired in the same PR that deletes the backends. (5) Timing: after exb (layering) so relocated primitives do not chase moving imports; facade decomposition (1fp) consumes the result — protocols wrap the adapter, not aiosqlite. Risks stated honestly: thread-pool sizing under daemon load (measure with 20d.14 histograms); any hidden aiosqlite-specific behavior (row factories, isolation) surfaces in step 2 — the per-mixin cadence keeps each surprise small.","acceptance_criteria":"Per migrated mixin: bench ingest-throughput within noise of baseline and interactive read SLOs hold. Final state: async_sqlite.py/async_sqlite_archive.py/async_sqlite_raw.py deleted, the 10-divergences doc comment gone, the twin-tax bd memory retired in the same PR.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=M-substrate-consolidation; lane=substrate-consolidation; readiness=A-implementation-ready; proof=layering/import graph diff, parity tests before/after refactor, public-model compatibility suite. Original readiness=A-implementation-ready.\n[RATIFIED 2026-07-08, decision brief .agent/reports/decision-brief-2026-07-08.md — operator approved all calls] Direction B (sync core, async adapter) re-confirmed by operator. Sequencing stands: pf1 first, adapter at repository-method granularity, mixin-by-mixin, ingest-throughput gate per step. Consequence locked: runtime sync/async differential harness permanently rejected (hiu makes it moot).\nURGENCY 2026-07-13: tonight's provider-origin atomic keyword sweep is being executed TWICE across the sync/async twins right now — every storage-touching wave pays the twin tax again. Recommend scheduling direction-B execution BEFORE the next storage-heavy wave, not after; the decision is already made, only sequencing was open.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T13:23:39Z","created_by":"Sinity","updated_at":"2026-07-13T04:10:25Z","labels":["area:substrate","decision","delivery:M-substrate-consolidation","lane:substrate-consolidation","refactor","size:L"],"dependencies":[{"issue_id":"polylogue-hiu","depends_on_id":"polylogue-b5l","type":"blocks","created_at":"2026-07-07T14:55:27Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hiu","depends_on_id":"polylogue-exb","type":"blocks","created_at":"2026-07-03T15:38:16Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-hiu","depends_on_id":"polylogue-pf1","type":"blocks","created_at":"2026-07-03T15:23:39Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":3,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-212.6","title":"D8 'Pick up where I left off': abandoned-session triage to live continuation","description":"The memory-product moment as a demo: find_abandoned_sessions surfaces real abandoned work ranked by resumability; get_resume_brief composes the evidence-cited brief (every line resolvable); the operator picks one and actually continues it in the harness. Distinct from D1/D2/D4: those prove forensics; this proves the archive changes what you do NEXT — the capability the whole memory thesis rests on, demonstrated without waiting for the uplift experiment's statistics.\n\n## Authoritative corrective scope (2026-07-13)\n\nD8 remains a descriptive product proof: resume real unfinished work from cited evidence. Its causal\nevaluation is a separate matched-treatment experiment; deliberately divergent baselines are a\nconfounded control.","design":"Chain of existing primitives: find_abandoned_sessions -\u003e get_resume_brief -\u003e resume routing (37t.8 owns session-\u003einvocation mapping; until it lands, the demo ends with the composed `claude --resume \u003cid\u003e` command printed). Two variants per the epic rule: seeded-corpus public variant (the synthetic corpus has abandoned-session scenarios; verify scenario coverage, add one if missing) and live operator variant. Deliverable: recording via visual-tapes (3tl.5 machinery) + a workflow registry entry so `polylogue` ships the flow as a golden path, not a doc. Honesty rail: resume ranking currently keys on workflow shapes the classifier never emits (polylogue-tsk) — either land tsk first or exclude the dead scorer from the demo path; a demo must not showcase a scorer known to be 10% dead weight.\n\n## Authoritative corrective contract (2026-07-13)\n\nKeep the actual-resume flow and its evidence/compatibility receipts. Evaluate it with matched task\ninstances under different resume brief/prompt treatments using stc, with assignment, exposure,\nleakage, stopping, exclusions, and task outcomes preregistered. Do not compare intentionally easy\nversus hard prompts or call mere continuation a productivity gain. D3 runs first externally; D8 is\nthe stronger later continuity proof.","acceptance_criteria":"`polylogue-212.6` has an execution-grade design note before coding, lands behind the release gate `L-external-legibility`, and records a focused proof artifact. Acceptance requires one seeded positive case, one degraded/empty case where applicable, docs or generated-surface updates for any public behavior, and verification via one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof.\n\n## Corrective acceptance criteria (2026-07-13)\n\nThe descriptive demo reconstructs an unfinished session, produces an evidence-cited brief, and\nrecords actual continuation with compatibility/degradation status. A distinct matched experiment\ncompares resume treatments; without assignment/exposure receipts no causal improvement claim is\nemitted. A deliberately divergent-baseline fixture is rejected as confounded.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=D-horizon-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=E-spec-needed.\nEASIER 2026-07-13: resume routing MERGED (37t.8 via hot-daemon lane: (origin, native_id) -\u003e harness reopen command, continue verb emits it). D8 'pick up where I left off' now assembles from existing parts: find_resume_candidates + tsk fix + continue --exec.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T13:08:23Z","created_by":"Sinity","updated_at":"2026-07-13T05:46:25Z","metadata":{"consumer_proof":"external-continuity"},"labels":["area:context","area:demos","delivery:L-external-legibility","delivery:ac-patched","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T15:08:23Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:30Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:31Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:32Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:33Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:34Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-stc","type":"related","created_at":"2026-07-13T07:48:34Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:35Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-tsk","type":"blocks","created_at":"2026-07-03T15:08:23Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":7,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-212.6","title":"PF-D8 'Pick up where I left off': abandoned-session triage to live continuation","description":"The memory-product moment as a demo: find_abandoned_sessions surfaces real abandoned work ranked by resumability; get_resume_brief composes the evidence-cited brief (every line resolvable); the operator picks one and actually continues it in the harness. Distinct from D1/D2/D4: those prove forensics; this proves the archive changes what you do NEXT \u2014 the capability the whole memory thesis rests on, demonstrated without waiting for the uplift experiment's statistics.\n\n## Authoritative corrective scope (2026-07-13)\n\nD8 remains a descriptive product proof: resume real unfinished work from cited evidence. Its causal\nevaluation is a separate matched-treatment experiment; deliberately divergent baselines are a\nconfounded control.","design":"Chain of existing primitives: find_abandoned_sessions -\u003e get_resume_brief -\u003e resume routing (37t.8 owns session-\u003einvocation mapping; until it lands, the demo ends with the composed `claude --resume \u003cid\u003e` command printed). Two variants per the epic rule: seeded-corpus public variant (the synthetic corpus has abandoned-session scenarios; verify scenario coverage, add one if missing) and live operator variant. Deliverable: recording via visual-tapes (3tl.5 machinery) + a workflow registry entry so `polylogue` ships the flow as a golden path, not a doc. Honesty rail: resume ranking currently keys on workflow shapes the classifier never emits (polylogue-tsk) \u2014 either land tsk first or exclude the dead scorer from the demo path; a demo must not showcase a scorer known to be 10% dead weight.\n\n## Authoritative corrective contract (2026-07-13)\n\nKeep the actual-resume flow and its evidence/compatibility receipts. Evaluate it with matched task\ninstances under different resume brief/prompt treatments using stc, with assignment, exposure,\nleakage, stopping, exclusions, and task outcomes preregistered. Do not compare intentionally easy\nversus hard prompts or call mere continuation a productivity gain. D3 runs first externally; D8 is\nthe stronger later continuity proof.","acceptance_criteria":"`polylogue-212.6` has an execution-grade design note before coding, lands behind the release gate `L-external-legibility`, and records a focused proof artifact. Acceptance requires one seeded positive case, one degraded/empty case where applicable, docs or generated-surface updates for any public behavior, and verification via one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof.\n\n## Corrective acceptance criteria (2026-07-13)\n\nThe descriptive demo reconstructs an unfinished session, produces an evidence-cited brief, and\nrecords actual continuation with compatibility/degradation status. A distinct matched experiment\ncompares resume treatments; without assignment/exposure receipts no causal improvement claim is\nemitted. A deliberately divergent-baseline fixture is rejected as confounded.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=D-horizon-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=E-spec-needed.\nEASIER 2026-07-13: resume routing MERGED (37t.8 via hot-daemon lane: (origin, native_id) -\u003e harness reopen command, continue verb emits it). D8 'pick up where I left off' now assembles from existing parts: find_resume_candidates + tsk fix + continue --exec.\n\nDEMO NAMESPACE DECISION 2026-07-13: this portfolio uses PF-D* identifiers. The archive-intelligence catalog polylogue-rxdo.10 uses AI-D*. Historical unqualified D1/D2/... text remains an alias only inside its owning parent; cross-program dependencies and external-adoption prose must use the qualified identifier.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T13:08:23Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","metadata":{"consumer_proof":"external-continuity"},"labels":["area:context","area:demos","delivery:L-external-legibility","delivery:ac-patched","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T15:08:23Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:30Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:31Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:32Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:33Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:34Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-stc","type":"related","created_at":"2026-07-13T07:48:34Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:35Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.6","depends_on_id":"polylogue-tsk","type":"blocks","created_at":"2026-07-03T15:08:23Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":7,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-pj8","title":"Agent query cookbook: MCP prompts + skill recipes as the discoverability layer","description":"Agents use what is in their face and skip what requires invention (jgp doctrine). The MCP server exposes ~61 read tools; nothing teaches an agent WHICH five matter for the common intents: 'what was I doing in this repo', 'postmortem the last failed session', 'what did we decide about X', 'what failed recently and was never acknowledged', 'find the session where we touched file Y'. server_prompts.py exists but the prompt surface is thin, and there is no harness-side skill teaching Polylogue idioms the way the beads skill teaches bd.","design":"Three thin layers over existing capability, no new query machinery: (1) MCP prompts: register ~6 intent-named prompts (resume-context, postmortem-last, decisions-about, unacknowledged-failures, sessions-touching-file, cost-of) that expand to the right tool-call sequences with cwd/repo prefilled — prompts are the MCP-native discoverability channel. (2) A 'polylogue' harness skill (dots/claude/skills + codex overlay, sinnix-side) with the same recipes in agent-readable form plus the two rules agents get wrong (archive root env var; refs over dumps). (3) The SessionStart preamble (37t.4) ends with a one-line affordance index pointing at those prompts — injection makes the surface ambient. Acceptance: affordance-usage report shows tool diversity rising in agent sessions (baseline: today's usage is dominated by search/get_session). Keep total prompt count small — the cookbook is a curation, not another catalog.","acceptance_criteria":"- ~6 intent-named MCP prompts are registered (resume-context, postmortem-last, decisions-about, unacknowledged-failures, sessions-touching-file, cost-of) that expand to the correct tool-call sequences with cwd/repo prefilled; total prompt count stays small (curation, not another catalog).\n- The prompt set includes the coordination intents over the shared envelope (agent_status, agent_self, work_item/current packet, coordination_hazards, addressed_messages, handoff) per the s7ae coordination update.\n- A `polylogue` harness skill (dots/claude/skills + codex overlay, sinnix-side) carries the same recipes plus the two rules agents get wrong (archive-root env var; refs over dumps).\n- The SessionStart preamble (37t.4) ends with a one-line affordance index pointing at those prompts.\n- MCP prompt/tool code and generated contracts are complete BEFORE any deployment batch (EXPECTED_TOOL_NAMES / prompt registry + `devtools render openapi` + `render all --check` clean); if only deployment remains it is recorded explicitly on the bead.\n- `devtools workspace affordance-usage` shows tool diversity rising versus the search/get_session-dominated baseline.","notes":"Coordination program update 2026-07-04: pj8 is now part of polylogue-s7ae. Its MCP prompts/skill recipes should include agent coordination intents over the shared envelope: agent_status, agent_self, work_item/current packet, coordination_hazards, addressed_messages, and handoff. Keep prompts curated and intent-named; do not expose a giant catalog. Complete MCP prompt/tool code and generated contracts before any deployment batch is requested; if only deployment remains, record that explicitly and move on.\n2026-07-06 anchors: prompt registration in polylogue/mcp/server_prompts.py (existing prompt plumbing — extend, do not invent); the registration-traps memory applies: EXPECTED_TOOL_NAMES analog for prompts + contract + render openapi/cli-output-schemas regen if schemas change. Skill recipes land in the repo skills dir consumed by harness config. Verify: devtools test -k prompt + MCP discovery test listing the ~6 intent prompts; then one live agent session using resume-context end-to-end.\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=A-implementation-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/064_polylogue_pj8.md (depth: bead-localized-from-export; urgency: T0-stop-the-line-or-P1). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\n[2026-07-07 progress] Layer 1 SHIPPED: PR #2557 (feature/mcp/agent-query-cookbook) adds the 6 intent recipe prompts (resume_context, postmortem_last, decisions_about, unacknowledged_failures, sessions_touching_file, cost_of) — pure text expansion, cwd/repo prefilled, EXPECTED_PROMPT_NAMES=12, parametrized surface tests, verify --quick green. Layer 2 SHIPPED: sinnix f46f4d5 adds dots/_ai/skills/polylogue/SKILL.md + shared-agent-skills.nix registration (propagates on next switch — NOT yet rebuilt). Coordination intents ride the existing agent_coordination_brief views; addressed_messages maps to blackboard_list because the envelope has no messages field yet (bby.9 scope). REMAINING: SessionStart preamble affordance line (blocked on 37t.4); affordance-usage diversity evidence (post-deploy); cost tools lack a repo filter — recipe documents the two-step fallback, candidate follow-up if it grates.\n[2026-07-07 merge] PR #2557 MERGED (6b416f091 on master). Remaining runtime step: the live MCP server serves the new prompts only after the deployed polylogue package/daemon picks up master — record per the s7ae deployment-batch rule. Baseline-drift PR #2556 also merged (a836e4bfc); master full-verify baseline green.\nRECONCILED 2026-07-13 with xv1u (generated curriculum): pj8's static recipes become xv1u's Tier-1 seed content; the generated Tier-2 (from query-run telemetry) supersedes hand-curation over time. Keep pj8 scoped to the static skill slice; the discoverability layer rides jnj.10.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T13:08:21Z","created_by":"Sinity","updated_at":"2026-07-13T04:00:23Z","labels":["area:context","area:coordination","area:legibility","area:mcp","delivery:D-agent-context-coordination","lane:agent-coordination","spine","wave:1"],"dependencies":[{"issue_id":"polylogue-pj8","depends_on_id":"polylogue-s7ae","type":"parent-child","created_at":"2026-07-04T20:00:35Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":3,"comment_count":0} {"_type":"issue","id":"polylogue-peo","title":"Daemon death leaves no trace: crash forensics + heartbeat sentinel + restart policy","description":"During read-only serving (run --no-watch --no-source-catchup --no-browser-capture) the daemon terminated twice within minutes; the log simply stops mid-work (last lines: routine embed/insights progress), no traceback, no 'Killed', nothing in ops.db. The web SPA degraded to 'Failed to fetch' everywhere with no daemon-down banner. One exit was code 144 (possibly external SIGTERM from the harness) — but that ambiguity IS the finding: when the daemon dies, nothing records why, and no surface says it is gone.","design":"(1) faulthandler.enable() + SIGTERM/SIGINT handlers that log signal + active thread stacks to the run log AND an ops.db daemon_lifecycle row (started/stopped/signal/last_heartbeat) before exit; an atexit sentinel distinguishes clean stop from vanish. (2) Startup writes a heartbeat row every periodic-loop tick; `polylogue` bare status and /healthz report heartbeat age, so 'daemon: running' claims are backed by a fresh heartbeat, not a pid file (bare status said 'Daemon: running' while it served a rebuild — verify what that check reads). (3) systemd unit: Restart=on-failure with backoff if not already set (check sinnix module). (4) Web SPA: liveness probe with visible 'daemon unreachable since T, retrying' banner instead of per-widget fetch failures (lands with bby.1). Postmortem for the two observed deaths belongs in the fix PR: reproduce serving + convergence under the same flags and capture what 144 actually was.","acceptance_criteria":"1. `faulthandler.enable()` is active at daemon start; SIGTERM/SIGINT handlers log the signal plus active thread stacks to the run log AND write an `ops.db` `daemon_lifecycle` row (started/stopped/signal/last_heartbeat) before exit; an atexit sentinel distinguishes clean stop from vanish. 2. A heartbeat row is written every periodic-loop tick; `polylogue` bare status and `/healthz` report heartbeat age, and a 'running' claim is backed by a fresh heartbeat rather than a pid file (verify what the bare-status check currently reads and correct it if pid-based). 3. The systemd unit has `Restart=on-failure` with backoff (check/patch the sinnix module). 4. The web SPA shows a visible 'daemon unreachable since T, retrying' banner instead of per-widget fetch failures (may land with bby.1). 5. Postmortem in the fix PR: the read-only serving death is reproduced under `run --no-watch --no-source-catchup --no-browser-capture` and what exit code 144 was is captured. Verify: send SIGTERM to a running daemon and confirm a `daemon_lifecycle` signal row plus a thread-stack log; `devtools test` selection on the lifecycle/heartbeat code; bare status reports a stale/absent heartbeat when the daemon is gone.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=B-storage-rebuild-bytes; lane=operational-resilience; readiness=A-implementation-ready; proof=daemon crash/heartbeat fixture and backup restore drill log. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/034_polylogue_peo.md (depth: anchored-contract-prework; urgency: T1-critical-path-correctness). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\nPR #2802 merged: AC1-3 satisfied — daemon subprocess receives SIGTERM (classified as signal), emits thread-stack log, persists signal/stop data; OPS-only heartbeat scheduled even when schema gate blocks archive work, /healthz/live exposes DB-free process heartbeat age; existing Nix/Home Manager service units specify Restart=on-failure RestartSec=5s. AC4 satisfied by separately-closed polylogue-bby.1 (merged PR #2673). DEFERRED (not closing): AC5 — this PR proves ordinary SIGTERM is exit 143 and makes future termination evidence durable, but does not reproduce the historical serving/convergence incident or identify its exit 144; that needs the external harness/systemd evidence path.","status":"open","priority":2,"issue_type":"bug","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T13:08:18Z","created_by":"Sinity","updated_at":"2026-07-13T01:08:28Z","labels":["area:daemon","area:ops","delivery:B-storage-rebuild-bytes","lane:operational-resilience"],"dependencies":[{"issue_id":"polylogue-peo","depends_on_id":"polylogue-8jg9","type":"parent-child","created_at":"2026-07-04T21:47:47Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-fnm.11","title":"Pipeline/clause parity across units + generated support matrix","description":"Live evidence: `sessions where origin:claude-code-session | count` fails with 'pipeline terminal stage must be an executable \u003cunit\u003es where ... query' while `observed-events where kind:tool_finished | group by handler | count` works — the sessions unit does not support the count pipeline the docs/memory present as canonical. `after:2026-07-01` parses in bare find mode but is 'invalid query expression near column 43' inside `sessions where ...` — the compact-clause vocabulary differs between find-mode and unit-where-mode with no documentation of the split. The one bright spot: unsupported group-by fields produce a helpful error listing supported fields (keep that pattern).","design":"(1) Build the support matrix FROM the registries (query_units + stage lowerers + clause grammar), not by hand: a generated docs/query-support-matrix.md (devtools render, drift-checked) showing units x pipeline stages x compact clauses. The generator doubles as the gap list. (2) Close the two gaps the evidence hit: `| count` (and group-by) on the sessions unit; date clauses (after:/before:) inside unit-where expressions. Both lower onto existing SQL (sessions has created_at; count is trivial) — the gap is grammar wiring, not storage. Memory note applies: pipeline stages are hand-parsed outside the Lark grammar (split on |), so new stage support per unit is lowerer work; terminal priorities pitfall for any new ':' token. (3) Error rendering: every unsupported-combination error follows the group-by pattern — name the unit, the stage/clause, and the nearest supported alternative; parse errors gain a caret line under the query text (column number already computed, 'near column 43' is user-hostile without one). Feeds fnm.1 (aggregates) — do the matrix first so fnm.1 lands against known gaps.","acceptance_criteria":"docs/query-support-matrix.md is generated from registries and drift-checked by render all --check. 'sessions where origin:X | count' and group-by on sessions work. after:/before: clauses parse inside unit-where expressions. Every unsupported unit/stage/clause combination errors with the unit, the construct, and the nearest supported alternative; parse errors render a caret line.","notes":"Recovered stale-agent audit 2026-07-04: public CLI cleanup should be driven by this matrix, not by one-off flag deletion. Already clean: --dialogue-only/--no-tool-outputs are absent; read --view recovery is absent and pinned by tests. Questionable surfaces to classify in the generated matrix: read --view dialogue is body_policy=authored-dialogue rather than a distinct evidence family; chronicle is bounded authored dialogue plus omissions and should be projection composition; context-image flags duplicate SelectionSpec/query selection; correlation --github-api should be explicit enrichment, not default read projection; analyze --count/--by are legacy sugar for terminal aggregation. PR-sized slice remains: sessions terminal count/group-by, after/before parity inside unit-where, generated support matrix, and clearer unsupported-combination/caret errors.\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=C-read-evidence-contract; lane=read-contracts; readiness=A-implementation-ready; proof=CLI/daemon/MCP/Python/web query parity suite and content-hash citation drift fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/049_polylogue_fnm_11.md (depth: bead-localized-from-export; urgency: T1-critical-path-correctness). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T13:08:17Z","created_by":"Sinity","updated_at":"2026-07-07T13:04:02Z","labels":["area:query","delivery:C-read-evidence-contract","lane:read-contracts","wave:2"],"dependencies":[{"issue_id":"polylogue-fnm.11","depends_on_id":"polylogue-fnm","type":"parent-child","created_at":"2026-07-03T15:08:17Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":2,"comment_count":0} {"_type":"issue","id":"polylogue-fs1.7","title":"Upstream Hermes archival contract and durable lifecycle-event spool","description":"Upstream Hermes should expose a stable archival contract rather than making Polylogue couple permanently to private state.db schema. The same integration must capture lifecycle/runtime events durably: hooks are best-effort, so synchronous HTTP from a hook can disappear during an outage. This bead owns the upstream-compatible snapshot/export contract and an atomic local event spool; fs1.2 remains the Polylogue importer.","design":"Propose a generic versioned per-session export containing producer/schema version, stable installation/profile ID, session revision hash, every active/inactive/compacted/rewound message, observed/addressing semantics, explicit parent relationship and lifecycle, usage plus cost provenance, archive/handoff state, and source/user scope. Hermes produces it from a consistent read transaction; Polylogue stores and parses the exact export bytes.\n\nLifecycle hooks append events atomically to a local spool and return immediately. Polylogue drains/acknowledges asynchronously with restart-safe idempotency. Event IDs correlate profile/session/turn/tool/snapshot revision; event bodies carry IDs, hashes, timings, and outcomes rather than duplicate transcripts. Distinguish per-turn on_session_end from true durable-session on_session_finalize. The session snapshot is the recovery source when runtime events are incomplete. Keep the upstream patch generic and useful without Polylogue.","acceptance_criteria":"A versioned export schema and compatibility fixture are checked in on both sides; a Hermes internal DB migration does not break the export consumer; the export includes inactive/compacted/observed/addressing and cost-provenance fixtures; killing Polylogue during hook delivery and restarting drains the atomic spool exactly once; per-turn end and durable-session finalization remain distinct; an incomplete event stream is reconciled visibly against the session snapshot; event bodies contain no duplicated transcript; a working local Hermes prototype and upstream-able patch/PR are prepared, with file-watch fallback documented.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=K-interop-origin-export; lane=origin-interop-export; readiness=D-horizon-ready; proof=OriginSpec detector/parser/fixture/fidelity suite and content-hash export/import roundtrip. Original readiness=E-spec-needed.\n2026-07-10 Nous follow-up technical refinement: the upstream export fixture must explicitly cover producer/schema version, profile/install identity, stable session revision/content hash, parent relationship type, active/rewound/compacted/observed messages, text/reasoning, tool calls/results with stable action IDs, usage and cost provenance, archive/handoff/finalization state, and repository/cwd when available. Identical revisions deduplicate; changed revisions remain retained history. The runtime spool taxonomy must include model attempts/failures/retries/fallbacks, tool start/finish/failure/denial, approvals, subagent start/finish, compaction, rewind, true finalization, and context-delivered events, while keeping transcript bodies in snapshots rather than duplicating them in events.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T12:34:53Z","created_by":"Sinity","updated_at":"2026-07-10T13:26:57Z","labels":["area:context","area:ingest","area:substrate","delivery:K-interop-origin-export","delivery:ac-patched","horizon:mid","lane:origin-interop-export"],"dependencies":[{"issue_id":"polylogue-fs1.7","depends_on_id":"polylogue-fs1","type":"parent-child","created_at":"2026-07-03T14:34:52Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-fs1.7","depends_on_id":"polylogue-fs1.2","type":"relates-to","created_at":"2026-07-04T22:29:28Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-fs1.7","depends_on_id":"polylogue-qqyg","type":"relates-to","created_at":"2026-07-10T11:03:59Z","created_by":"Sinity","metadata":"{}"}],"comments":[{"id":"019f2eac-7575-713b-b558-be1ae1b2fd07","issue_id":"polylogue-fs1.7","author":"Sinity","text":"EXTERNAL DEPENDENCY (N2): this is an upstream PR to the open-source Hermes repo, tracked in no local system. It can silently block the fs1 importer children — treat as external-blocked, do not count toward fs1 terminal state until merged upstream.","created_at":"2026-07-04T19:48:02Z"}],"dependency_count":0,"dependent_count":1,"comment_count":1} -{"_type":"issue","id":"polylogue-3tl.5","title":"Moving pictures: query-tour and live-follow recordings via visual-tapes","description":"The README/pitch has no moving pictures, and the visual-tapes machinery (devtools render visual-tapes) exists precisely for this. Two recordings do more than a thousand words of prose: (1) a ~90-second asciinema/GIF of six DSL queries rapid-fire ('find ... then read' tour — failure-rate by model, cost of abandoned work, SEQ thrash-loop detection, claim-vs-evidence drilldown), (2) a GIF of the web reader following a live session as it happens.","design":"Tape specs are product surfaces (committed spec files rendered by devtools render visual-tapes), not one-off screen captures — they must stay regenerable against the seeded demo corpus so they never rot or leak private data. The six-query script should overlap the D4 behavioral-archaeology demo (polylogue-212.4) query list; write once, use in both. Output: GIFs embedded in README + docs site via the 3tl.4 publishing lane. Pitfall: record against 'polylogue demo seed' output, never the live archive.","notes":"Phase history through 2026-07-04: visual-tapes default inventory now includes public, private-data-free query/read and reader evidence specs. Phase 1 generated demo-tour, query-tour, and reader-evidence-tour; focused proof included devtools test tests/unit/devtools/test_visual_vhs.py, devtools render visual-tapes --check, captured GIFs under /realm/tmp/polylogue-visual-tapes-capture, devtools render all --check, and devtools verify doc-commands. Phase 2 added browser-capture-tour.tape and browser-capture-tour.gif under docs/examples/visual-tapes; it runs the deterministic browser-provider smoke with headless Chrome and the unpacked extension, proving ChatGPT/Claude fixture capture through content script, receiver, popup state, and artifact spool. Focused proof: devtools test tests/unit/devtools/test_visual_vhs.py -\u003e 17 passed; devtools render visual-tapes --check -\u003e 4 specs; devtools workspace dev-loop --browser-provider-smoke --json -\u003e ok True with both providers captured and no popup raw-payload leak; vhs generated the GIF.\n\n2026-07-04 live-follow proof update: branch-local dev-loop daemon launches against a schema-ready disposable .local/dev-archive, constrains watcher to the browser-capture spool, passes --spool for the receiver, and disables unrelated source catch-up by default. Manual proof with deterministic provider smoke: captures POSTed to live receiver moved from spooled_only to archived within two polls for both chatgpt and claude-ai; archive-state showed raw_row_exists=true, indexed_session_exists=true, indexed_message_count=2. CLI select resolved chatgpt-export:polylogue-dev-loop-provider-smoke and claude-ai-export:polylogue-dev-loop-provider-smoke by fixture text. API /api/sessions/:id/messages returned the two captured ChatGPT turns. Proof artifacts: /realm/tmp/polylogue-live-follow-launch3.json, /realm/tmp/polylogue-live-follow-provider-smoke3.json, /realm/tmp/polylogue-live-follow-api-proof.json. Residual found and split to polylogue-vh57: messages read-view advertises format=text but currently errors before rendering.\n\n2026-07-04 reusable live-follow artifact: added devtools workspace dev-loop --browser-provider-live-follow, which composes branch-local daemon launch, unique deterministic ChatGPT/Claude fixture session id, unpacked-extension capture, archive-state polling, API /api/sessions/:id/messages proof, persisted JSON summary, and daemon teardown. Browser-capture visual tape now records this stronger proof rather than the old spool-only smoke, and docs/examples/visual-tapes/browser-capture-tour.gif was regenerated. Proof: devtools test tests/unit/devtools/test_dev_loop.py tests/unit/devtools/test_visual_vhs.py -k 'browser_provider_live_follow or browser_provider_smoke or browser_capture_tour or default_tape_names' -\u003e 4 passed; devtools render visual-tapes --check -\u003e 4 specs; devtools verify --quick -\u003e ok run_id=20260704T171932Z-quick-791959-457c37a3; live command devtools workspace dev-loop --isolated-ports --browser-provider-live-follow --json -\u003e ok true, provider_statuses chatgpt/claude true, archive_ok true, api_ok true, API message counts 2/2, daemon_stop ok true. Reusable proof summary: /realm/tmp/polylogue-browser-provider-live-follow-proof.json.","status":"closed","priority":2,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T12:04:13Z","created_by":"Sinity","updated_at":"2026-07-04T17:43:29Z","started_at":"2026-07-04T15:02:45Z","closed_at":"2026-07-04T17:43:29Z","close_reason":"Completed: visual-tapes now include current query/read, reader evidence, and browser-capture recordings; browser-capture-tour now runs reusable live-follow proof through deterministic ChatGPT/Claude fixture capture, archive/API convergence, daemon web reader DOM rendering, and daemon teardown. Evidence: node --check browser-extension/scripts/dev-loop-provider-smoke.mjs; npm --prefix browser-extension run lint; focused devtools test over dev_loop/visual_vhs/web_shell_realtime contracts -\u003e 4 passed; devtools workspace dev-loop --isolated-ports --browser-provider-live-follow --json -\u003e ok true with providers/archive/api/reader all true and reader_rows=2; vhs regenerated docs/examples/visual-tapes/browser-capture-tour.gif; devtools render visual-tapes --check; devtools verify --quick run 20260704T174204Z-quick-831243-2b143dea.","labels":["area:demos","area:legibility"],"dependencies":[{"issue_id":"polylogue-3tl.5","depends_on_id":"polylogue-3tl","type":"parent-child","created_at":"2026-07-03T14:04:13Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-3tl.5","title":"Moving pictures: query-tour and live-follow recordings via visual-tapes","description":"The README/pitch has no moving pictures, and the visual-tapes machinery (devtools render visual-tapes) exists precisely for this. Two recordings do more than a thousand words of prose: (1) a ~90-second asciinema/GIF of six DSL queries rapid-fire ('find ... then read' tour \u2014 failure-rate by model, cost of abandoned work, SEQ thrash-loop detection, claim-vs-evidence drilldown), (2) a GIF of the web reader following a live session as it happens.","design":"Tape specs are product surfaces (committed spec files rendered by devtools render visual-tapes), not one-off screen captures \u2014 they must stay regenerable against the seeded demo corpus so they never rot or leak private data. The six-query script should overlap the PF-D4 behavioral-archaeology demo (polylogue-212.4) query list; write once, use in both. Output: GIFs embedded in README + docs site via the 3tl.4 publishing lane. Pitfall: record against 'polylogue demo seed' output, never the live archive.","notes":"Phase history through 2026-07-04: visual-tapes default inventory now includes public, private-data-free query/read and reader evidence specs. Phase 1 generated demo-tour, query-tour, and reader-evidence-tour; focused proof included devtools test tests/unit/devtools/test_visual_vhs.py, devtools render visual-tapes --check, captured GIFs under /realm/tmp/polylogue-visual-tapes-capture, devtools render all --check, and devtools verify doc-commands. Phase 2 added browser-capture-tour.tape and browser-capture-tour.gif under docs/examples/visual-tapes; it runs the deterministic browser-provider smoke with headless Chrome and the unpacked extension, proving ChatGPT/Claude fixture capture through content script, receiver, popup state, and artifact spool. Focused proof: devtools test tests/unit/devtools/test_visual_vhs.py -\u003e 17 passed; devtools render visual-tapes --check -\u003e 4 specs; devtools workspace dev-loop --browser-provider-smoke --json -\u003e ok True with both providers captured and no popup raw-payload leak; vhs generated the GIF.\n\n2026-07-04 live-follow proof update: branch-local dev-loop daemon launches against a schema-ready disposable .local/dev-archive, constrains watcher to the browser-capture spool, passes --spool for the receiver, and disables unrelated source catch-up by default. Manual proof with deterministic provider smoke: captures POSTed to live receiver moved from spooled_only to archived within two polls for both chatgpt and claude-ai; archive-state showed raw_row_exists=true, indexed_session_exists=true, indexed_message_count=2. CLI select resolved chatgpt-export:polylogue-dev-loop-provider-smoke and claude-ai-export:polylogue-dev-loop-provider-smoke by fixture text. API /api/sessions/:id/messages returned the two captured ChatGPT turns. Proof artifacts: /realm/tmp/polylogue-live-follow-launch3.json, /realm/tmp/polylogue-live-follow-provider-smoke3.json, /realm/tmp/polylogue-live-follow-api-proof.json. Residual found and split to polylogue-vh57: messages read-view advertises format=text but currently errors before rendering.\n\n2026-07-04 reusable live-follow artifact: added devtools workspace dev-loop --browser-provider-live-follow, which composes branch-local daemon launch, unique deterministic ChatGPT/Claude fixture session id, unpacked-extension capture, archive-state polling, API /api/sessions/:id/messages proof, persisted JSON summary, and daemon teardown. Browser-capture visual tape now records this stronger proof rather than the old spool-only smoke, and docs/examples/visual-tapes/browser-capture-tour.gif was regenerated. Proof: devtools test tests/unit/devtools/test_dev_loop.py tests/unit/devtools/test_visual_vhs.py -k 'browser_provider_live_follow or browser_provider_smoke or browser_capture_tour or default_tape_names' -\u003e 4 passed; devtools render visual-tapes --check -\u003e 4 specs; devtools verify --quick -\u003e ok run_id=20260704T171932Z-quick-791959-457c37a3; live command devtools workspace dev-loop --isolated-ports --browser-provider-live-follow --json -\u003e ok true, provider_statuses chatgpt/claude true, archive_ok true, api_ok true, API message counts 2/2, daemon_stop ok true. Reusable proof summary: /realm/tmp/polylogue-browser-provider-live-follow-proof.json.","status":"closed","priority":2,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T12:04:13Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","started_at":"2026-07-04T15:02:45Z","closed_at":"2026-07-04T17:43:29Z","close_reason":"Completed: visual-tapes now include current query/read, reader evidence, and browser-capture recordings; browser-capture-tour now runs reusable live-follow proof through deterministic ChatGPT/Claude fixture capture, archive/API convergence, daemon web reader DOM rendering, and daemon teardown. Evidence: node --check browser-extension/scripts/dev-loop-provider-smoke.mjs; npm --prefix browser-extension run lint; focused devtools test over dev_loop/visual_vhs/web_shell_realtime contracts -\u003e 4 passed; devtools workspace dev-loop --isolated-ports --browser-provider-live-follow --json -\u003e ok true with providers/archive/api/reader all true and reader_rows=2; vhs regenerated docs/examples/visual-tapes/browser-capture-tour.gif; devtools render visual-tapes --check; devtools verify --quick run 20260704T174204Z-quick-831243-2b143dea.","labels":["area:demos","area:legibility"],"dependencies":[{"issue_id":"polylogue-3tl.5","depends_on_id":"polylogue-3tl","type":"parent-child","created_at":"2026-07-03T14:04:13Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-5nn","title":"Optimize usage-timeline live archive aggregation","description":"Live smoke of polylogue analyze insights usage-timeline --group-by month-origin-model --limit 2 --format json against /home/sinity/.local/share/polylogue returned correct JSON but took about 18 seconds because the query aggregates the full archive before the limit can help. Investigate pushing useful filters/order constraints into the SQL, adding an index if warranted by evidence, or documenting a narrower default. Acceptance: live bounded usage-timeline smoke on the active archive has a measured latency target and a query plan that does not do avoidable whole-corpus work for small result windows.","status":"closed","priority":2,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T11:53:18Z","created_by":"Sinity","updated_at":"2026-07-03T12:07:01Z","started_at":"2026-07-03T11:57:26Z","closed_at":"2026-07-03T12:07:01Z","close_reason":"Completed: usage-timeline first-page reads no longer do avoidable whole-provider-event scans. Added idx_session_provider_usage_events_time_model as a runtime index and bounded/skipped the event leg when cheap cost rows prove provider events cannot sort into the requested first page. Live active-archive evidence: before was about 18s; first run with this patch built the index in 35.180s; steady-state run returned the same two rows in 1.696s; EXPLAIN QUERY PLAN uses idx_session_provider_usage_events_time_model. Verification: py_compile, devtools test tests/unit/cli/test_insights.py -k usage_timeline, devtools render all --check, devtools verify --quick.","dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-fie","title":"Decision: archive scaling doctrine — keep everything, optimize the ceilings","description":"Doctrine settled by operator (2026-07-03): NO retention/pruning — session data is important and worth the storage; keep-everything is permanent policy. What remains undecided is how to keep the system fast and operable as the archive grows without deleting anything: ~16.5K sessions / ~42GB blobs today, daily multi-session ingest. polylogue-1xc covers bugs at current scale; this bead owns the growth-architecture decisions: where SQLite ceilings actually land at 100K sessions / 100GB+ (FTS rebuild duration, ANALYZE cost, 'ops reset --index' rebuild windows already measured in hours, backup windows), which optimization levers to pull and in what order (blob zstd 83u.5, cold/compressed tiers that remain fully queryable, incremental index maintenance), and whether the turso probe results change anything.","design":"Deliverable is a measured decision, not implementation: (1) measure growth rate from ops.db ingest telemetry, extrapolate 12/24 months; (2) benchmark the two worst-scaling operations (full index rebuild, FTS rebuild) at synthetic 3x/10x via the scenario generator; (3) rank optimization levers by measured payoff: blob zstd (est 36GB-\u003e5-8GB, zero data loss), separating hot/cold FTS shards, incremental-rebuild investment; (4) record the doctrine in docs/ + close reason. Flag honestly: if 10x rebuild windows are unacceptable, incremental index maintenance strains the fresh-first schema doctrine — that tension needs an explicit operator call, not a workaround. Retention/deletion is out of scope by operator direction.","acceptance_criteria":"A decision record for `polylogue-fie` names the options considered, the chosen path, explicit non-goals, migration/rollback impact, and the release gate it affects. A minimal probe or code-reading appendix supports the decision. No product implementation ships under this bead until the decision record is linked from the relevant follow-up beads and `leased-blob race fixture, blob-reference resolver report, SHA-256 restore/compression proof` is updated if the decision changes a verification lane.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=B-storage-rebuild-bytes; lane=blob-integrity; readiness=D-horizon-ready; proof=leased-blob race fixture, blob-reference resolver report, SHA-256 restore/compression proof. Original readiness=E-spec-needed.\n[RATIFIED 2026-07-08, decision brief .agent/reports/decision-brief-2026-07-08.md] Lever order DECIDED independent of probe outcomes: (1) blob zstd 83u.5 proceeds unconditionally (pure win); (2) hot/cold FTS sharding second, only if FTS rebuild is the actual degradation; (3) incremental index maintenance REJECTED by default — fresh-first rebuild doctrine wins; unacceptable rebuild windows are answered by b5l blue-green + sharding, never by abandoning rebuild-from-source. The design-field tension is resolved in favor of the doctrine. Probes now confirm rather than decide.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T11:41:15Z","created_by":"Sinity","updated_at":"2026-07-08T20:14:34Z","labels":["area:storage","decision","delivery:B-storage-rebuild-bytes","delivery:ac-patched","lane:blob-integrity"],"dependencies":[{"issue_id":"polylogue-fie","depends_on_id":"polylogue-1xc","type":"parent-child","created_at":"2026-07-04T21:31:00Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-x7d","title":"Unify root query row rendering contracts","description":"The bounded find fix had to patch three projection/rendering paths: archive_query root rows, query_output deterministic rows, and select rows. This duplication let --limit bound row count while multiline titles/snippets still exploded output in the live archive. Collapse list/search/select row rendering onto one projection contract for title normalization, snippet bounds, machine payload shape, and plain text rendering, then keep archive_query/query_output/select as thin adapters.","design":"Target shape: define a small shared row projection helper or value object for session list rows and search-hit rows, with explicit budgets (title 96 or table budget, snippet 320), single-line normalization, and separate full-read expansion. archive_query._summary_payload/_hit_payload/_summary_line/_hit_line, cli.query_output format_summary_list/format_search_hit_list, and cli.select select_row_from_result should call that shared contract rather than each carrying its own truncation rules. Preserve existing JSON schemas; change only overlong values. Add parity tests proving the three surfaces produce bounded titles/snippets for the same giant title/search hit.","acceptance_criteria":"- A shared row-projection helper/value object exists for session-list rows and search-hit rows with explicit budgets (title 96 / table budget, snippet 320), single-line normalization, and separate full-read expansion.\n- archive_query._summary_payload/_hit_payload/_summary_line/_hit_line, cli.query_output.format_summary_list/format_search_hit_list, and cli.select.select_row_from_result all call the shared contract (grep shows no per-surface truncation rules remaining).\n- Existing JSON schemas are preserved; only overlong values change.\n- Parity tests prove the three surfaces produce bounded titles/snippets for the same giant title/search hit (`devtools test \u003cparity test\u003e` green).\n- Informativeness: unified rows carry, beyond title/origin/date, an outcome badge (structural terminal state: completed/failed/abandoned/unknown), cost when priced provenance exists, relative time, repo/cwd basename, and message count; the column set is consistent across find results, `read --all` listings, and select pickers; `--format json` carries the same fields under the same names (schema-checked). Display-title synthesis (30h) feeds the title cell.","notes":"Informativeness spec (2026-07-03 CLI UX pass): unified result rows should carry, beyond title/origin/date: outcome badge (from structural terminal state: completed/failed/abandoned/unknown), cost (when priced provenance exists), relative time (2h ago), repo/cwd basename, and message count — the columns that let an operator triage without opening anything. Display-title synthesis (30h) feeds the title cell. Column set consistent across find results, read --all listings, and select pickers; --format json carries the same fields under the same names (schema-checked).\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=C-read-evidence-contract; lane=read-contracts; readiness=A-implementation-ready; proof=CLI/daemon/MCP/Python/web query parity suite and content-hash citation drift fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/048_polylogue_x7d.md (depth: bead-localized-from-export; urgency: T1-critical-path-correctness). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T06:31:38Z","created_by":"Sinity","updated_at":"2026-07-07T13:04:01Z","labels":["area:query","delivery:C-read-evidence-contract","lane:read-contracts"],"dependencies":[{"issue_id":"polylogue-x7d","depends_on_id":"polylogue-jnj","type":"parent-child","created_at":"2026-07-03T08:31:46Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -414,7 +414,7 @@ {"_type":"issue","id":"polylogue-jnj.13","title":"Bare-invocation triage: status + five most recent sessions with one-key open","description":"No-arg polylogue on a tty currently shows status/stats — reasonable, but for a reader product the more inviting default is status PLUS the five most recent sessions with one-key open. The select renderer already produces exactly those rows; this is composition of existing pieces. Keep machine mode (non-tty) output unchanged.","design":"Bare 'polylogue' currently prints help via the strict command floor (cli/query_group.py _bare_root_error_message handles bare WORDS; bare NO-ARGS shows Click help). Target triage surface instead: archive status one-liner (daemon fresh? converged?) + five most recent sessions (id, origin, title, age) + the three most useful next commands. Keep it fast (\u003c200ms: one indexed query, no insight loads) and plain-safe.","acceptance_criteria":"Bare invocation renders triage in under 200ms on the live archive; falls back to help text when no archive exists; strict-floor bare-word behavior unchanged (polylogue foo still UsageError). Verify: devtools test -k bare + timing spot-check.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=C-read-evidence-contract; lane=read-contracts; readiness=D-horizon-ready; proof=CLI/daemon/MCP/Python/web query parity suite and content-hash citation drift fixture. Original readiness=D-horizon-ready.","status":"open","priority":2,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T05:04:04Z","created_by":"Sinity","updated_at":"2026-07-08T20:14:34Z","labels":["area:cli","delivery:C-read-evidence-contract","horizon:frontier","lane:read-contracts","refactor"],"dependencies":[{"issue_id":"polylogue-jnj.13","depends_on_id":"polylogue-jnj","type":"parent-child","created_at":"2026-07-03T07:04:04Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-37t.7","title":"Close the failure loop: verify postmortem -\u003e next session's context seed","description":"workspace failure-context produces an envelope (testmon graph + git history + fixtures for a failing test); the pytest supervisor produces a postmortem (.cache/verify/) — neither flows into the next agent session. Build the splice: a compile_context seed constructed from the latest verify postmortem + failure-context envelope, injectable via the SessionStart hook or an explicit `polylogue context --from-verify` entry. The obvious first consumer is the devloop itself after a red verify run.","design":"`workspace failure-context` produces an envelope (testmon graph + git history + fixtures for a failing test) and the pytest supervisor produces a postmortem (.cache/verify/) — neither flows into the next agent session. Build the splice: a compile_context seed constructed from the latest verify postmortem + failure-context envelope, injectable via the SessionStart hook or an explicit `polylogue context --from-verify`. First consumer: the devloop itself after a red verify run. Test discipline: session-cut recovery drills (chaos-lane, yeq) — deliberately kill sessions mid-work and measure whether the next session recovers unprompted from injected context alone.","acceptance_criteria":"- A compile_context seed is constructed from the latest verify postmortem (.cache/verify/) + the `workspace failure-context` envelope (testmon graph + git history + fixtures), injectable via the SessionStart hook or an explicit `polylogue context --from-verify` entry point.\n- The first consumer is wired: the devloop injects the seed after a red verify run.\n- Verify: `polylogue context --from-verify` on a real red postmortem emits a seed containing the failing test plus the implicated files; `devtools test \u003ccontext seed test\u003e` green.\n- Session-cut recovery drills (chaos-lane, yeq) are run: sessions are killed mid-work and the next session's unprompted recovery from injected context alone is measured; the recovery rate is recorded as the loop's KPI.","notes":"Raw-log 06-28 addition: session-cut recovery DRILLS as the test discipline — deliberately kill sessions mid-work (chaos-lane style, yeq) and measure whether the next session recovers unprompted from injected context alone. Recovery rate under drills is the loop's honest KPI and generates uplift-experiment subjects for free.\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=A-implementation-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/169_polylogue_37t_7.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T05:02:28Z","created_by":"Sinity","updated_at":"2026-07-07T13:05:23Z","labels":["area:context","area:devloop","delivery:D-agent-context-coordination","lane:agent-coordination"],"dependencies":[{"issue_id":"polylogue-37t.7","depends_on_id":"polylogue-37t","type":"parent-child","created_at":"2026-07-03T07:02:27Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-37t.6","title":"Session-aware devshell entry: surface what the last agent session left behind","description":"On cd/direnv entry, print what the last agent session in this cwd left: unresolved blackboard blocker/question notes, the last session's terminal state, resume candidates for this directory. All reads exist (blackboard_list with unresolved filter; find_resume_candidates already scores cwd at 0.15 weight) — this is a status-line/devshell-hook integration away. Keep it one bounded line + an expand command; restrained-injection rule applies.","design":"On cd/direnv entry, print one bounded line summarizing what the last agent session in this cwd left behind: unresolved blackboard blocker/question notes (blackboard_list unresolved filter), the last session's terminal state, and resume candidates for this directory (find_resume_candidates, which already scores cwd at 0.15 weight). All reads exist; this is a devshell-hook / status-line integration. Keep it one bounded line plus an expand command and apply the restrained-injection rule (no noisy dumps; suppress when there is nothing to report).","acceptance_criteria":"1. A devshell/direnv entry hook prints a single bounded line for the current cwd combining unresolved blackboard-note count, the last session's terminal state, and the top resume candidate(s), using existing reads (blackboard_list unresolved filter, find_resume_candidates) with no new query machinery. 2. An expand command shows the full detail; the entry line stays one line and suppresses itself when there is nothing to report (restrained injection). Verify: run the hook in a cwd with a known last session plus an unresolved blackboard note and confirm the summary line and expand output; `devtools test` selection on the integration helper.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=A-implementation-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/168_polylogue_37t_6.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T05:02:27Z","created_by":"Sinity","updated_at":"2026-07-07T13:05:22Z","labels":["area:context","area:devloop","delivery:D-agent-context-coordination","lane:agent-coordination"],"dependencies":[{"issue_id":"polylogue-37t.6","depends_on_id":"polylogue-37t","type":"parent-child","created_at":"2026-07-03T07:02:26Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-kph","title":"Provenance-carrying PRs: attach the authoring session's postmortem bundle","description":"Sessions already link to repos and commits (session_repos, session_commits). Wire CI or a gh hook to attach the authoring session's postmortem bundle to each PR: claims in the PR body paired with the actual in-session verification exit codes. Converts the repo's own claim-verification doctrine from a rulebook into machinery — and is the productized, recurring form of the D1 receipts demo. Start read-only (a comment/artifact per PR), no gating.","design":"Wire CI or a gh hook to attach the authoring session's postmortem bundle to each PR, pairing PR-body claims with the in-session verification exit codes. Sessions already link to repos and commits (session_repos, session_commits), so the authoring session is resolvable from the PR head commit. Productizes the D1 receipts demo (212.2) as recurring machinery. Start read-only: a comment or artifact per PR, no merge gating.","acceptance_criteria":"1. Given a PR whose head commit maps to an authoring session (via session_commits/session_repos), CI or a gh hook resolves that session and posts its postmortem bundle as a PR comment or artifact. 2. The attached bundle pairs PR-body claim sentences with the actual in-session verification exit codes (get_postmortem_bundle output). 3. Read-only: no merge gating, and a PR with no resolvable authoring session degrades gracefully (skips with a note, does not fail the PR). Verify: on a test PR authored in a recorded session the workflow posts the bundle comment/artifact; `devtools test` (or a workflow dry-run) selection on the resolution helper asserts PR-\u003esession mapping for a fixture commit.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=A-implementation-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=A-implementation-ready.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T05:02:26Z","created_by":"Sinity","updated_at":"2026-07-07T12:57:30Z","labels":["area:devloop","area:substrate","delivery:D-agent-context-coordination","lane:agent-coordination"],"dependencies":[{"issue_id":"polylogue-kph","depends_on_id":"polylogue-s7ae","type":"parent-child","created_at":"2026-07-04T21:49:16Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-kph","title":"Provenance-carrying PRs: attach the authoring session's postmortem bundle","description":"Sessions already link to repos and commits (session_repos, session_commits). Wire CI or a gh hook to attach the authoring session's postmortem bundle to each PR: claims in the PR body paired with the actual in-session verification exit codes. Converts the repo's own claim-verification doctrine from a rulebook into machinery \u2014 and is the productized, recurring form of the PF-D1 receipts demo. Start read-only (a comment/artifact per PR), no gating.","design":"Wire CI or a gh hook to attach the authoring session's postmortem bundle to each PR, pairing PR-body claims with the in-session verification exit codes. Sessions already link to repos and commits (session_repos, session_commits), so the authoring session is resolvable from the PR head commit. Productizes the PF-D1 receipts demo (212.2) as recurring machinery. Start read-only: a comment or artifact per PR, no merge gating.","acceptance_criteria":"1. Given a PR whose head commit maps to an authoring session (via session_commits/session_repos), CI or a gh hook resolves that session and posts its postmortem bundle as a PR comment or artifact. 2. The attached bundle pairs PR-body claim sentences with the actual in-session verification exit codes (get_postmortem_bundle output). 3. Read-only: no merge gating, and a PR with no resolvable authoring session degrades gracefully (skips with a note, does not fail the PR). Verify: on a test PR authored in a recorded session the workflow posts the bundle comment/artifact; `devtools test` (or a workflow dry-run) selection on the resolution helper asserts PR-\u003esession mapping for a fixture commit.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=A-implementation-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=A-implementation-ready.","status":"open","priority":2,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T05:02:26Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","labels":["area:devloop","area:substrate","delivery:D-agent-context-coordination","lane:agent-coordination"],"dependencies":[{"issue_id":"polylogue-kph","depends_on_id":"polylogue-s7ae","type":"parent-child","created_at":"2026-07-04T21:49:16Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-83u.6","title":"Attachment acquisition census by origin and byte volume","description":"Post-v13: measure acquired/unfetched/unavailable by origin and byte volume on the live archive. Quantifies how much of the metadata-only gap has actually closed and what re-acquisition would recover — the sizing input for the acquisition beads in this program and the honesty check on any 'attachments preserved' claim.","design":"Read-only attachment-acquisition census over the active archive (promoted from the 2026-07-04 notes sidecar). Open source.db (raw_sessions/artifact_observations if needed), index.db (attachments/artifact_observations), and resolve blob paths via polylogue/storage/blob_store.py + archive-tier path helpers, all with SQLite URI mode=ro; never mutate the live archive. Group by (origin, acquisition_status) and emit attachment_count, declared_byte_sum, acquired_blob_count, acquired_blob_bytes_on_disk, unfetched_count, unavailable_count, missing_blob_ref_count, top source_ref classes, and a bounded (~20) sample of hashes/paths. Reuse the blob-reference-debt / diagnostics-workload primitives so totals reconcile. Persist a JSON + short markdown census under .agent/scratch/research/ (or a demo-shelf evidence entry). Baseline the current archive as 'before' (per 83u.4 evidence: 7,226 attachment rows = 958 acquired w/ non-null hash + 0 missing acquired blobs, 6,268 unfetched blob_hash NULL) and re-run as 'after' once 83u.2/83u.3 acquisition beads land. Pitfall: unfetched (NULL blob_hash) rows are honest-absent, not missing_blob_ref debt — keep those lanes distinct.","acceptance_criteria":"1. A committed census artifact (JSON + markdown under .agent/scratch/research/ or demo-shelf) reports attachments grouped by (origin, acquisition_status) with attachment_count, declared_byte_sum, acquired_blob_count/bytes-on-disk, unfetched_count, unavailable_count, and missing_blob_ref_count, distinguishing genuinely-unfetchable from re-acquirable. 2. A before/after pair is captured: baseline now, re-run after the acquisition beads; the delta is written back into parent 83u as the epic's before/after closing evidence. 3. Follow-up beads are filed only for actionable acquisition classes (live local source path, archive-member re-acquisition, genuinely unavailable), not per missing row. Verify: the census command runs read-only (mode=ro) against POLYLOGUE_ARCHIVE_ROOT=/home/sinity/.local/share/polylogue and its totals reconcile against `polylogue ops diagnostics workload --blob-reference-debt --json`; no write connection is opened against the live archive.","notes":"Executable upgrade (2026-07-04 sidecar):\nProduct question: after index schema v13, how much attachment evidence is actually backed by bytes, and where is the recoverable gap by origin/source path?\nLikely read surfaces: source.db raw_sessions/artifact_observations if needed, index.db attachments/artifact_observations, blob store path resolution from polylogue/storage/blob_store.py and archive tier path helpers. Open DBs read-only with SQLite URI mode=ro; do not mutate the live archive.\nCommand/artifact shape: produce a JSON + short markdown census under .agent/scratch/research/ or a demo-shelf evidence artifact, with rows grouped by origin and acquisition_status: attachment_count, declared_byte_sum, acquired_blob_count, acquired_blob_bytes_on_disk, unfetched_count, unavailable_count, missing_blob_ref_count, top source_ref classes, and sample hashes/paths bounded to ~20.\nVerification command: run the census against a reflink/copy or read-only live archive with POLYLOGUE_ARCHIVE_ROOT=/home/sinity/.local/share/polylogue, then cross-check totals against polylogue ops diagnostics workload --blob-reference-debt --json and any existing blob-reference-debt command output.\nFeeds: update parent polylogue-83u with before/after numbers; create follow-up beads only for actionable acquisition classes (live local source path, archive-member re-acquisition, genuinely unavailable), not for every missing row.\nREFRAME: the census reports the unfetchable floor as NORMAL expected accounting (source-deleted / pre-install / provider-expiry), not a defect backlog. Its job is to separate reachable-but-missed (feeds 83u.2/83u.3 as bugs) from genuinely-gone (baseline).\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=B-storage-rebuild-bytes; lane=blob-integrity; readiness=A-implementation-ready; proof=leased-blob race fixture, blob-reference resolver report, SHA-256 restore/compression proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/037_polylogue_83u_6.md (depth: anchored-contract-prework; urgency: T1-critical-path-correctness). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"closed","priority":2,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T05:02:21Z","created_by":"Sinity","updated_at":"2026-07-08T23:27:20Z","started_at":"2026-07-08T20:56:50Z","closed_at":"2026-07-08T23:27:20Z","close_reason":"Committed the baseline (\"before\") half of the required before/after pair under .agent/demos/attachment-acquisition-census/ (README.md, ANALYSIS.md, census.json, reconcile-attachment-acquisition-debt.json, regenerate.sh). Read-only census (SQLite mode=ro) grouped by (origin, acquisition_status) with attachment_count, declared_byte_sum, acquired_blob_count/bytes-on-disk, missing_blob_ref_count; reconciles against `polylogue ops maintenance attachment-acquisition-debt` (83u.4), recorded as reconciliation.totals_match=true in census.json. Shipped as PR #2587, merged 5c2dca621.\n\nBaseline finding: 7,390 attachments; 967 acquired (0 missing blob files); 6,423 unfetched. Unfetched byte volume heavily concentrated in chatgpt-export (13.4GB declared, 0 acquired) -- identifies the highest-value re-acquisition target for 83u.2/83u.3.\n\nCodeRabbit caught a real edge case pre-merge (an acquired row with NULL blob_hash would be silently dropped from both the success and failure buckets, producing a false totals_match=False) -- fixed by tracking acquired_null_blob_hash_count separately; re-verified live, totals_match still true, anomaly count 0.\n\nAC honesty: AC1 (committed census artifact with the required fields) and the reconciliation-verify clause are satisfied. AC2 (before/after pair) is half-satisfied -- this is the baseline; the \"after\" re-run and epic-delta writeback happens once 83u.2/83u.3 ship, not yet. AC3 (file follow-ups only for actionable classes) not yet applicable since no missing_blob_ref debt exists in the current baseline to file follow-ups for.","labels":["area:attachments","area:audit","area:storage","delivery:B-storage-rebuild-bytes","lane:blob-integrity"],"dependencies":[{"issue_id":"polylogue-83u.6","depends_on_id":"polylogue-83u","type":"parent-child","created_at":"2026-07-03T07:02:20Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-83u.6","depends_on_id":"polylogue-83u.2","type":"relates-to","created_at":"2026-07-04T22:29:32Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-83u.6","depends_on_id":"polylogue-83u.3","type":"relates-to","created_at":"2026-07-04T22:29:33Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-9e5.2","title":"Affordance usage ranking: evidence-backed surface-economy kill list","description":"The archive records agent sessions using polylogue's own MCP/CLI; insights/affordance_usage.py + devtools workspace affordance-usage already exist. Rank all ~90 MCP tools and ~50 CLI commands by real invocation count over the live archive -\u003e kill/keep/promote list for surface economy. Feeds the contracts and surface-algebra programs with evidence instead of taste.","design":"Read-only surface-economy census (no surface removed by this bead). Run `devtools workspace affordance-usage` (insights/affordance_usage.py) over the live archive for per-tool/per-command invocation counts from archived agent tool-use rows, then LEFT JOIN against the full surface set — MCP EXPECTED_TOOL_NAMES from tests/infra/mcp.py and the CLI command_inventory — so zero-invocation surfaces surface as kill candidates. Classify each surface kill / keep / promote. Pitfall: the archive only records surfaces used BY agents that used polylogue, so absence != dead for operator-only commands — annotate that caveat and do not classify operator-only surfaces as dead on usage alone.","acceptance_criteria":"1. A committed ranked table classifies every MCP tool (~90) and CLI command (~50) as kill / keep / promote with its real invocation count, and carries the operator-only-caveat annotation. 2. Follow-up beads are opened for kill candidates, feeding the contracts / surface-algebra programs. 3. No surface is removed by this bead. Verify: `devtools workspace affordance-usage` runs against POLYLOGUE_ARCHIVE_ROOT=/home/sinity/.local/share/polylogue and the artifact's surface list reconciles to the current EXPECTED_TOOL_NAMES + command_inventory counts (no surface unclassified).","status":"closed","priority":2,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T05:02:10Z","created_by":"Sinity","updated_at":"2026-07-05T08:46:45Z","started_at":"2026-07-05T08:25:01Z","closed_at":"2026-07-05T08:46:45Z","close_reason":"Completed: devtools workspace affordance-usage now emits a full surface-inventory classification over current MCP tools and recursive CLI command inventory, regenerated .agent/demos/agent-affordance-usage on /home/sinity/.local/share/polylogue, and opened follow-up beads polylogue-9e5.25, polylogue-9e5.26, and polylogue-9e5.27 for MCP review, CLI review, and remaining live-regeneration latency. Verification: devtools test tests/unit/devtools/test_affordance_usage.py; devtools verify --quick.","labels":["area:audit","area:cli"],"dependencies":[{"issue_id":"polylogue-9e5.2","depends_on_id":"polylogue-9e5","type":"parent-child","created_at":"2026-07-03T07:02:10Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-9e5","title":"Audit lane: read-only analyses producing evidence artifacts","description":"The follow-up analysis catalog from the fables deep-dive: each item is a bounded, read-only analysis a sidecar agent can run during wait windows (PROCESS.md already prescribes 3-4 bounded sidecar research agents when the backlog is thin or a long command runs). Output contract per audit: an evidence artifact (scratch note or demo-shelf entry with method + numbers) plus follow-up beads for anything actionable — the audit itself never mutates product code. Priorities within: adoption/usage/honesty audits (P2) decide product direction; the rest are P3 wait-lane work. Best-bets ranking from the source analysis: assertion adoption, affordance usage, embedding-staleness quantification.","acceptance_criteria":"Every child produces a READ-ONLY evidence artifact and never mutates product code. Children that must ship tooling/deletions (9e5.9 heuristics lane, 9e5.15 dead-code sweep, 9e5.16 api-doc gate) are split so the audit/analysis half stays read-only and the execution half is a separate tracked bead. Verify: each closed 9e5 child cites an artifact, not a product-code diff, unless explicitly split.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=A-trust-floor; lane=usage-cost-honesty; readiness=D-horizon-ready; proof=usage/cost reconciliation report with disjoint lanes and empty-evidence tests. Original readiness=D-horizon-ready.","status":"open","priority":2,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T05:02:09Z","created_by":"Sinity","updated_at":"2026-07-08T20:14:34Z","labels":["area:audit","delivery:A-trust-floor","lane:usage-cost-honesty"],"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -519,7 +519,7 @@ {"_type":"issue","id":"polylogue-iqd3","title":"embedding_write.mark_session_embedding_error has the same needs_reindex clobber shape as y337","description":"While fixing polylogue-y337 (embedding_status.needs_reindex clobbered by a concurrent config-change bulk-mark), found that polylogue/storage/sqlite/archive_tiers/embedding_write.py:mark_session_embedding_error (lines 118-142) has the identical unconditional-clear shape: when retryable=False, needs_reindex=0 is written unconditionally, which could equally clobber a concurrent _reconcile_embedding_config_change bulk-mark landing mid-flight. Not covered by y337s AC or evidence test.","design":"Same fix shape as y337: thread the model actually used for this embed attempt through mark_session_embedding_error (available at its call sites the same way text_provider.model was available for _record_archive_embedding_success), and only let needs_reindex=0 (the retryable=False terminal-failure case) take effect if that model still matches the currently configured model at write time -- otherwise force needs_reindex=1 regardless of retryable, since a config change means the session needs reindexing under the new model regardless of whether THIS attempt is being marked non-retryable.","acceptance_criteria":"mark_session_embedding_error no longer clobbers a concurrent config-change reindex mark when retryable=False. A test analogous to test_embedding_needs_reindex_race_evidence.py proves it (bulk-mark lands mid-flight, terminal error write with retryable=False must not clear needs_reindex if the model has moved on). Verify: devtools test \u003cnew test file\u003e.","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T07:58:45Z","created_by":"Sinity","updated_at":"2026-07-09T07:58:45Z","labels":["area:embeddings","area:storage"],"dependencies":[{"issue_id":"polylogue-iqd3","depends_on_id":"polylogue-y337","type":"discovered-from","created_at":"2026-07-09T09:58:45Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-57bg","title":"Extend cfk uplift re-run to n=12-20 using the production pack-generation pipeline","description":"polylogue-cfks n=5 pilot (directional positive, 4/5 pairs favor handoff-pack, mean 30.2/40 vs 22.8/40) used hand-written context summaries as the \"pack\" arm input, not the actual production pack-generation pipeline (qt3s fast regeneration + yps freshness metadata), and drew all 5 checkpoints from one sessions own consecutive devloop history rather than genuinely independent subjects. Both are real limitations the n=5 report documents explicitly. A publishable uplift claim needs n=12-20 per the original protocol.","design":"Use the actual production pack-generation command (compose_context_preamble / devtools workspace read-package or whatever the qt3-shipped fast-regeneration path is) to generate each pack arms input, verifying yps freshness metadata (generated_at ~= consumption time, freshness state fresh, zero successor warnings) before dispatching that arm -- this directly tests the root-cause fix the original jxe campaign attributed its negative result to (packet staleness), which the n=5 pilot did not test. Draw subjects from genuinely independent devloop sessions/checkpoints (not all from one continuous session) to avoid the correlated-subject-and-rater limitation the n=5 report flags. Reuse the n=5 pilots mechanism otherwise: isolated Agent-tool subagents per arm, ground truth written before dispatch, blinded judge subagents, cold-reader gate on the final artifact. Commit under a NEW .agent/demos/uplift-two-arm/ run (retire the n=5 current/ to a dated subfolder per the shelfs own \"current, not append-only\" convention).","acceptance_criteria":"n=12-20 paired runs completed using the production pack-generation pipeline with verified freshness metadata per pack; genuinely independent subjects (not one sessions consecutive checkpoints); per-pair scores + paired analysis (sign test, means) committed; cold-reader gate PASS; result recorded as the programs first potentially-publishable uplift finding (positive, negative, or still-ambiguous).","notes":"[2026-07-09] Added a required measurement per user challenge to the n=5 pilots \"synthesis effort\" framing: the n=5 pilot did not impose or measure any effort/budget difference between the raw-ref and handoff-pack arms (both got the same nominal single unbounded dispatch), so it cannot actually show whether raw-ref lost because it explored less or because synthesis quality is independent of exploration volume. This re-run must log tool-call count and token usage per arm per pair, and explicitly check whether raw-ref arms that matched or exceeded the pack arms measured effort still lost -- that is much stronger evidence for (or against) the synthesis-effort hypothesis than the current pilots untested assumption.","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T04:05:38Z","created_by":"Sinity","updated_at":"2026-07-09T04:50:45Z","labels":["area:analytics","area:experiments"],"dependencies":[{"issue_id":"polylogue-57bg","depends_on_id":"polylogue-cfk","type":"discovered-from","created_at":"2026-07-09T06:05:38Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-57bg","depends_on_id":"polylogue-e5b5","type":"blocks","created_at":"2026-07-09T12:31:02Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-57bg","depends_on_id":"polylogue-x35k","type":"blocks","created_at":"2026-07-09T12:31:03Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":2,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-vv2b","title":"Wire lineage-completeness signal into CLI/API session payloads","description":"polylogue-4ts.6 added lineage_complete/lineage_truncation_reason to ArchiveSessionEnvelope and wired it through the two MCP-facing payloads (MCPMessagesListPayload via archive_messages_payload, MCPArchiveSessionPayload.from_session) -- CodeRabbit correctly flagged (PR #2603) that two more read surfaces still silently drop it: _session_payload (polylogue/cli/archive_query.py:2198, the CLI reader payload) and _archive_session_to_session (polylogue/api/archive.py:1162, the Python API Session domain model). Also relevant: the async batch/paginated wrappers (get_messages_batch, get_messages_paginated, get_message_edge_windows in message_query_reads.py) currently discard the signal by calling plain get_messages internally rather than get_messages_with_lineage_completeness -- their callers cannot observe truncation either.","design":"Same additive pattern as the two already-wired payloads: add lineage_complete: bool = True / lineage_truncation_reason: str | None = None (or the LineageTruncationReason Literal from polylogue.storage.runtime) to whatever dict/model _session_payload and Session (api/archive.py) already return, and pass session.lineage_complete/lineage_truncation_reason through at the two construction sites. For the async batch/paginated wrappers, switch their internal get_messages(...) calls to get_messages_with_lineage_completeness(...) and thread the signal through their own return shapes (may need new tuple/dataclass wrapping, same trade-off already made for get_messages itself).","acceptance_criteria":"polylogue read (CLI) and the Python API Session model both expose lineage_complete/lineage_truncation_reason for a truncated session, proven by a fixture (dangling branch point or depth-limit case) asserting the field on the CLI JSON output and the API Session object. get_messages_batch/get_messages_paginated/get_message_edge_windows either surface the signal or explicitly document why they intentionally do not (e.g. if paginated views are inherently partial by design and completeness is a session-level, not a page-level, concern).","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T03:14:24Z","created_by":"Sinity","updated_at":"2026-07-09T03:14:24Z","labels":["area:lineage","area:mcp"],"dependencies":[{"issue_id":"polylogue-vv2b","depends_on_id":"polylogue-4ts.6","type":"discovered-from","created_at":"2026-07-09T05:14:24Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-xyel","title":"Real D1-receipts demo (212.2) re-emitted through demo-packet contract","description":"polylogue-212.7 built the Demo Finding Packet contract (devtools/demo_packet.py: validate_packet, lint_demo_registry, devtools lab policy demo-packet-registry) and proved it end-to-end with a deliberately trivial stub fixture (.agent/demos/_packet-contract-stub/, counts sessions in the seeded corpus). The bead AC literally asked for \"one existing demo (D1 receipts) re-emitted through the runner\" -- 212.2 (D1 receipts: claim-vs-evidence on a real PR) does not exist as an implemented demo yet, so 212.7 shipped the mechanism proven against a stub instead of the real thing. This bead is the follow-up: implement 212.2 for real and register it in .agent/demos/registry.json as a conforming packet, retiring (or keeping alongside, if useful as a contract-only fixture) the stub.","design":"Implement 212.2 per its own description: pick a merged agent-authored PR, resolve PR -\u003e authoring session via session_commits/session_repos, get_postmortem_bundle, render two columns (claimed PR-body sentences vs observed actions rows with exit_code/duration, drillable to the raw tool_result block). Package the output as a packet directory under .agent/demos/d1-receipts/ conforming to devtools/demo_packet.py PACKET_FILENAMES + PROVENANCE_STANZA_FIELDS + REPORT_SECTION_ORDER (reuse the stub as a structural template). Register it in .agent/demos/registry.json. Run devtools lab policy demo-packet-registry to prove it validates.","acceptance_criteria":".agent/demos/d1-receipts/ (or similar slug) exists with all 7 required packet files, a real claim-vs-evidence finding on an actual merged PR from this repo, and validates cleanly via devtools lab policy demo-packet-registry. Registered in .agent/demos/registry.json. Verify: devtools lab policy demo-packet-registry passes with the new entry included.","notes":"[2026-07-10 fable] polylogue demo receipts (PR #2662) is the deterministic contract-proof baseline this bead re-emits through the packet contract; receipts.json/summary.json shapes in the v2 escrow (polylogue-demo-receipts/) are a draft packet layout.","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T00:12:05Z","created_by":"Sinity","updated_at":"2026-07-10T17:14:23Z","labels":["area:demos","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-xyel","depends_on_id":"polylogue-212.7","type":"discovered-from","created_at":"2026-07-09T02:12:05Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-xyel","title":"Real PF-D1-receipts demo (212.2) re-emitted through demo-packet contract","description":"polylogue-212.7 built the Demo Finding Packet contract (devtools/demo_packet.py: validate_packet, lint_demo_registry, devtools lab policy demo-packet-registry) and proved it end-to-end with a deliberately trivial stub fixture (.agent/demos/_packet-contract-stub/, counts sessions in the seeded corpus). The bead AC literally asked for \"one existing demo (PF-D1 receipts) re-emitted through the runner\" -- 212.2 (PF-D1 receipts: claim-vs-evidence on a real PR) does not exist as an implemented demo yet, so 212.7 shipped the mechanism proven against a stub instead of the real thing. This bead is the follow-up: implement 212.2 for real and register it in .agent/demos/registry.json as a conforming packet, retiring (or keeping alongside, if useful as a contract-only fixture) the stub.","design":"Implement 212.2 per its own description: pick a merged agent-authored PR, resolve PR -\u003e authoring session via session_commits/session_repos, get_postmortem_bundle, render two columns (claimed PR-body sentences vs observed actions rows with exit_code/duration, drillable to the raw tool_result block). Package the output as a packet directory under .agent/demos/d1-receipts/ conforming to devtools/demo_packet.py PACKET_FILENAMES + PROVENANCE_STANZA_FIELDS + REPORT_SECTION_ORDER (reuse the stub as a structural template). Register it in .agent/demos/registry.json. Run devtools lab policy demo-packet-registry to prove it validates.","acceptance_criteria":".agent/demos/d1-receipts/ (or similar slug) exists with all 7 required packet files, a real claim-vs-evidence finding on an actual merged PR from this repo, and validates cleanly via devtools lab policy demo-packet-registry. Registered in .agent/demos/registry.json. Verify: devtools lab policy demo-packet-registry passes with the new entry included.","notes":"[2026-07-10 fable] polylogue demo receipts (PR #2662) is the deterministic contract-proof baseline this bead re-emits through the packet contract; receipts.json/summary.json shapes in the v2 escrow (polylogue-demo-receipts/) are a draft packet layout.","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T00:12:05Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","labels":["area:demos","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-xyel","depends_on_id":"polylogue-212.7","type":"discovered-from","created_at":"2026-07-09T02:12:05Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-8e1b","title":"Reconcile bead priority field with delivery-gate order","description":"priority (1-4) is currently uncorrelated with the delivery:* gate letter (A-trust-floor..N-horizon) that actually encodes intended sequencing. Sample: E-variants-preferences carries 5 P1 items vs A-trust-floor 2, D-agent-context-coordination 9 P1s. Sorting ready work by priority alone (as bd ready does by default) surfaces late-gate items ahead of earlier-gate ones, misleading anyone not cross-checking the gate board. Discovered 2026-07-08 while walking the top-P1 ready list with the operator.","design":"Re-derive priority from (gate letter, ready-vs-blocked, epic-vs-leaf) rather than hand-set values: earlier gates should dominate later gates at the same nominal urgency; a blocked items priority should not compete with a ready items in an earlier gate. Candidate mechanical rule: priority = f(gate_index, blocked_flag), leaving room for genuine P0 (security/data-loss) overrides. Use .agent/tools/delivery-gate-status.py as the source of gate ordering/state. Batch as one mechanical bd update sweep + bd-graph-lint, not per-bead edits.","acceptance_criteria":"Mechanical priority rule derived from delivery-gate order is documented in this bead's notes before execution; a single scripted bd update sweep reassigns priority (no other field touched) on every open/in_progress bead carrying a delivery:*-gate label; bd-graph-lint passes after the sweep; before/after priority-by-gate distribution is reported in the shipping PR.","notes":"MECHANICAL RULE (2026-07-08, executed as one scripted bd update sweep):\n\nScope: every OPEN or IN_PROGRESS bead carrying a delivery:\u003cgate\u003e label\n(gate != delivery:ac-patched, which is an overlay marker not a gate).\nOut of scope (left untouched): closed beads; beads with no delivery:*-gate\nlabel (24 at sweep time - counted, not reassigned); any bead whose CURRENT\npriority is 0 (explicit P0 override signal - none existed among open,\ngate-labeled beads at sweep time, but the rule preserves them if they\nappear later).\n\nGate groups (source: .agent/tools/delivery-gate-status.py GATES order),\nmapped to base priority tiers 1-4:\n tier1 = {A-trust-floor} (the active frontier)\n tier2 = {B-storage-rebuild-bytes, C-read-evidence-contract,\n D-agent-context-coordination} (near-term)\n tier3 = {E-variants-preferences, F-lineage-compaction,\n G-live-performance, H-web-cockpit} (mid-term)\n tier4 = {I-analytics-experiments, J-embeddings-retrieval,\n K-interop-origin-export, L-external-legibility,\n M-substrate-consolidation, N-horizon} (far horizon)\n\nnew_priority = min(4, base_tier\n + (1 if blocked else 0)\n + (1 if issue_type == 'epic' else 0))\n\nblocked := status == 'open' AND has an unresolved (non-closed) dependency\nof type 'blocks' (same definition delivery-gate-status.py uses for its\nready/blocked split). in_progress beads are treated as unblocked (already\nactively claimed). Epics are demoted one tier below their gate's leaf tier\nso P1 signals \"grab this leaf task now\", not \"here is a rollup tracker\".\nDemotions stack (blocked epic in gate A -\u003e tier 1+1+1 = 3), capped at 4.\n\nEffect: this directly fixes the motivating case (gate A-trust-floor ready\nleaf work now dominates gate E-variants-preferences ready leaf work at\nevery tier), and makes `bd ready` sorted by priority track delivery-gate\norder by construction instead of by an independently hand-set field.\n\nScript: computed by a one-off Python pass over `bd export`'d issues.jsonl\n(scratch, not committed) producing an id -\u003e new_priority map, applied via\ngrouped `bd update \u003cids...\u003e --priority N` calls (one call per target\npriority value, not per-bead) so the change lands as a single mechanical\nsweep. 288 of 387 open/gate-labeled beads changed priority; 99 already\nmatched the rule's output.","status":"closed","priority":3,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-08T19:53:15Z","created_by":"Sinity","updated_at":"2026-07-09T20:17:19Z","started_at":"2026-07-08T20:08:32Z","closed_at":"2026-07-09T20:17:19Z","close_reason":"Work was actually completed and merged via PR #2584 (merged 2026-07-08T20:22:23Z) -- the mechanical priority/delivery-gate reconciliation sweep described in this beads own notes. Bead was left in_progress, never closed, likely the known beads-checkout-hook-reverts-live-updates pattern (close silently reverted by a branch switch before the close commit landed on master). Found stale while doing final dangling-item sweep at the end of an unrelated session; not connected to this sessions own work.","labels":["area:beads-hygiene"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-1ilk","title":"Webui v2 test stack: vitest component lane + playwright e2e/visual-regression riding the stack decision","description":"Web UI test coverage today is DOM-smoke only (tests/visual/test_reader_*.py) plus demo-visual-verify in CI. The webui-v2 stack decision (bby.11: TypeScript+Preact+Vite per its design field) determines the right test stack, so this bead is deliberately blocked on it rather than investing in harnessing JS-in-Python-strings that v2 replaces. Operator direction 2026-07-08: the webui plan must be figured out end-to-end so agents can execute rapidly - testing is part of that plan.\n","design":"Decide-with-the-stack, then implement: (a) component/unit lane - vitest + @testing-library/preact for rendered components against fixture payloads (typed API client from the daemon OpenAPI gives contract-checked mocks); (b) e2e lane - playwright against the daemon serving the demo archive (existing demo seed machinery), smoke journeys: open reader, search, expand tool block, follow lineage link; (c) visual regression - playwright screenshot snapshots of the canonical views, tolerances tuned to the design-token system (9xuk) so token changes re-baseline deliberately, wired like syrupy snapshots (dedicated fix(test) re-baseline PRs); (d) CI placement respecting the per-PR economy: component lane per-PR (fast), e2e+visual on master/nightly like the heavy pytest suite. Existing tests/visual DOM-smoke retires only when the surfaces it covers are re-covered.\n","acceptance_criteria":"Test stack documented in the v2 scaffold; component lane runs per-PR within budget; one e2e journey and one visual snapshot demonstrably catch a seeded regression; re-baseline procedure documented; tests/visual retirement mapped surface-by-surface. VERIFY: CI run links + the seeded-regression demonstrations in notes.","notes":"2026-07-10 live audit: its stack-decision blocker is stale because bby.11 is ratified. First slice must install Playwright against the current shell, not wait for v2: boot/search/open/back; credentialed first-party flow; deterministic delay/401/409/503/out-of-order requests; keyboard/focus/a11y; responsive screenshots/traces; current known-red journeys retained as evidence. Full packet: .agent/scratch/2026-07-10-webui-verifiability-audit.md.\n[Recovered Web Cockpit no-import ruling, 2026-07-11] The kit's probe_current_web.py and audit_web_surface.py are not a test harness: they infer daemon flags from help text, request route literals with urllib, scan source keywords, and emit manifests without browser DOM, interaction, focus, accessibility, responsive, or assertion coverage. Do not import them or count their green packaging checks as web proof. The kit's complete/partial/unavailable/timeout/forbidden/error inventory is useful fixture input only; implement it through the current-shell Playwright journeys already specified here, retaining known-red traces until repaired.","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-08T18:15:42Z","created_by":"Sinity","updated_at":"2026-07-11T15:52:31Z","labels":["area:test","area:web","horizon:mid"],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-dbiv","title":"CLI/TUI alignment with the shared aesthetic vocabulary (glyphs, provenance treatment, generated Textual theme)","description":"CLI and TUI do not speak the direction doc vocabulary: role/origin coloring is ad hoc per command, unknown values often print as blanks or zeros in plaintext tables, and the TUI runs stock textual themes (ui/tui/app.py:55-59). Alignment is thin-adapter work once the tokens (9xuk) and vocabulary (bkzv) beads land: consume, do not invent. Direction doc principles 1, 3, 4 applied to terminal surfaces; respects POLYLOGUE_FORCE_PLAIN/NO_COLOR orthogonality already defined in theme.py.\n","design":"(a) CLI: route role/origin/status styling in cli/query_output.py + shared/formatting.py through theme.py Rich styles; plaintext mode renders the glyph vocabulary without color; unknown values render the dash+label treatment (never bare 0/empty cell) - this makes jnj.3 output-dialect work land on a consistent vocabulary. (b) TUI: register the generated Textual theme from the tokens bead; replace the stock dark/light toggle. (c) Contract: one table-cell formatting helper for metrics (tabular alignment, provenance suffix) shared by insight plaintext renderers. HARD ordering: needs 9xuk (generated Textual theme + Rich styles) - blocks edge justified.\n","acceptance_criteria":"CLI role/origin/status styling flows from theme.py; unknown metrics render dash+label in plaintext and Rich modes; TUI uses the generated theme; FORCE_PLAIN/NO_COLOR behavior unchanged. VERIFY: devtools test tests/unit/cli -k \"output or format\" tests/unit/ui; side-by-side terminal captures in notes.","status":"open","priority":3,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-08T18:09:46Z","created_by":"Sinity","updated_at":"2026-07-08T18:09:46Z","labels":["area:cli","area:surface","horizon:frontier"],"dependencies":[{"issue_id":"polylogue-dbiv","depends_on_id":"polylogue-jnj.3","type":"related","created_at":"2026-07-08T20:09:47Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-dbiv","depends_on_id":"polylogue-tjx1","type":"parent-child","created_at":"2026-07-08T20:09:46Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} @@ -607,7 +607,7 @@ {"_type":"issue","id":"polylogue-83u","title":"Attachment \u0026 blob evidence integrity: bytes exist, are honest, and stay affordable","description":"Attachments are metadata-only by construction: 8,425 rows claim 8.4GB, 0 blobs exist, 56% zero-byte; blob_hash was synthetic until v13 made it honest-nullable with acquisition_status. This program makes attachment/blob evidence real end-to-end: acquire bytes where handles are live, classify what is genuinely unfetchable, keep the backup verifier trustworthy, and compress the store. GH issue thread (body + comments) is input, not authority; this bead's scope statement wins where they conflict.","acceptance_criteria":"REFRAMED (operator 2026-07-04): the goal is to CAPTURE attachment bytes going forward, not miss-then-account. (1) Forward capture is default at ingest/browser-capture: uploaded + inline bytes land in the blob store at acquisition time (83u.3, 83u.1). (2) Non-inline bytes that STILL EXIST at their source are re-acquired (83u.2) — 'we're not getting some that exist' is a bug, not acceptable loss. (3) A permanent unfetchable floor is NORMAL and expected (source deleted, pre-install history, provider expiry) — the census (83u.6) reports it as honest baseline accounting, never as a failure to fix. Terminal state: no attachment whose bytes were reachable at capture time is lost; the unfetchable floor is measured and explained; no synthetic hashes. Verify: a live-capture session with an upload stores the blob; the census separates reachable-but-missed (bug) from genuinely-unfetchable (normal).","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=B-storage-rebuild-bytes; lane=blob-integrity; readiness=B-local-inspection-needed; proof=leased-blob race fixture, blob-reference resolver report, SHA-256 restore/compression proof. Original readiness=B-local-inspection-needed.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/137_polylogue_83u.md (depth: epic-checklist; urgency: T0-stop-the-line-or-P1). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":3,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:45Z","created_by":"Sinity","updated_at":"2026-07-08T20:14:45Z","external_ref":"gh-2468","labels":["area:attachments","area:storage","delivery:B-storage-rebuild-bytes","lane:blob-integrity"],"dependencies":[{"issue_id":"polylogue-83u","depends_on_id":"polylogue-38x","type":"relates-to","created_at":"2026-07-04T02:59:22Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-rii.2","title":"Materialize hook events + OTLP spans into queryable evidence","description":"Hook events are captured as raw blobs but never materialized (~95% of hook-only signal invisible: tool annotations, pre-MCP output, permission decisions, cwd changes, subagent lifecycle); OTLP spans likewise. Both converge on the write-leg contract. GH issue thread (body + comments) is input, not authority; this bead's scope statement wins where they conflict.","design":"Code-confirmed gaps (gh#2461, re-locate lines): archive/artifact_taxonomy/runtime.py:~209 classifies HOOK_EVENT with parse_as_session=False (stored as raw blobs, used only for paste enrichment); artifact_taxonomy/support.py:~82 looks_like_hook_event hardcodes provider in ('claude-code','codex'). Fix: materialize hook events through the write-leg contract into session_events/ObservedEvents keyed to the owning session (session id is in the hook payload); un-hardcode the provider check via the taxonomy. OTLP: spans already land in ops.db via the receiver — project them into queryable evidence the same way rather than a second reader. ~95% of hook-only signal (tool annotations, pre-MCP output, permission decisions, cwd changes, subagent lifecycle) becomes visible.","acceptance_criteria":"Hook events and OTLP spans materialize into queryable evidence tables with stable object refs, idempotent replay, parser fingerprints, and fixture coverage. Replaying the same input does not duplicate rows. Query surfaces can select the materialized events by session, repo/worktree, time, and evidence tier.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=agent-coordination; readiness=A-implementation-ready; proof=two-agent separate-worktree proof with before/after coordination envelopes. Original readiness=C-needs-acceptance-criteria.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/072_polylogue_rii_2.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":3,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:44Z","created_by":"Sinity","updated_at":"2026-07-08T20:14:56Z","external_ref":"gh-2461","labels":["area:ingest","area:substrate","delivery:D-agent-context-coordination","delivery:ac-patched","lane:agent-coordination"],"dependencies":[{"issue_id":"polylogue-rii.2","depends_on_id":"polylogue-rii","type":"parent-child","created_at":"2026-07-03T06:31:44Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rii.2","depends_on_id":"polylogue-rii.1","type":"blocks","created_at":"2026-07-03T06:31:44Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-rii","title":"Live substrate intake: agents write work-events; evidence materializes in-loop","description":"Invert the relationship for live agents: work lands in Polylogue as it happens (push), and the agent reads context/evidence back in-loop. OPERATOR GATE: direction confirmed as worth phasing, full program needs explicit green-light before a large build. Hermes-specific ingestion lives in the Hermes bridge program; this program owns the generic write-leg and intake seams. GH issue thread (body + comments) is input, not authority; this bead's scope statement wins where they conflict.","design":"Invert the relationship for live agents: work lands in Polylogue as it happens (push) and the agent reads context/evidence back in-loop. OPERATOR GATE: the direction is confirmed worth phasing, but the full program needs an explicit green-light before a large build. This epic owns the GENERIC write-leg and intake seams (rii.1 is the first child); Hermes-specific ingestion lives in the Hermes bridge (fs1). Treat the GH issue thread as input, not authority; this bead's scope statement wins where they conflict.","acceptance_criteria":"- The generic write-leg + intake seam scope is defined and split into child beads (rii.1 = the agent work-event write-leg); Hermes-specific ingestion is explicitly excluded and pointed at fs1.\n- The program stays gated: no large build starts until an explicit operator green-light is recorded as a bead comment.\n- The epic advances when rii.1 lands and an agent's pushed work-event materializes into the run-projection read-models within one convergence cycle (see rii.1 acceptance).","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=D-agent-context-coordination; lane=context-memory; readiness=A-implementation-ready; proof=context scheduler ledger fixture and candidate judgment queue proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/164_polylogue_rii.md (depth: epic-checklist; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":3,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:31:43Z","created_by":"Sinity","updated_at":"2026-07-08T20:14:56Z","external_ref":"gh-2384","labels":["area:substrate","delivery:D-agent-context-coordination","lane:context-memory"],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-rxdo.9.10","title":"Experiment analysis projection over stc definitions and cohort relations","description":"Rigor mechanism J analyzes experiments but does not own a second experiment identity. It consumes a\nversioned typed ExperimentDefinition assertion from stc, cohort/result relation refs, canonical\nMetricDefinition refs, and assignment/exposure/outcome receipts. A pair of cohorts alone is an\nobservational comparison unless the experiment lifecycle proves otherwise.","design":"Lower ExperimentDefinition arms/assignment/exposure/frame/exclusions/stopping/analysis plan into\ncohort/result selections, then compute the preregistered registered metrics through 9l5.7. Preserve\npaired/unpaired design, confirmatory versus exploratory metrics, attrition/exclusion, leakage, exact\nevaluation worlds, and claim class. Emit an analysis artifact/receipt linked to the definition; do\nnot create an experiment table, registry, or separate lifecycle. Context PROMPT_EVAL, curriculum A/B,\nrouting/harness comparisons, D8 matched resume treatments, and D9 causal savings use this same path.","acceptance_criteria":"A stc two-arm fixture with assignments/exposures/outcomes analyzes end to end and reproduces declared\npaired metrics. An otherwise identical cohort-pair fixture without assignment/exposure renders\nobservational and cannot emit a causal claim. Post-exposure metric changes render exploratory/new-\nversion. At least two different consumers share the path without a second ExperimentDefinition or\nspecial-case executor.","notes":"[LEGACY FIELDS PRESERVED BY CORRECTIVE FOLLOW-UP 2026-07-13]\n\nORIGINAL DESCRIPTION:\nRigor mechanism J. Two cohorts + one metric_ref + a pre-registered comparison = an experiment object; thin composition over mechanisms A+B+C; bridge to the e5b5 eval harness. DEP: mechanisms A, B, C landed.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T00:56:22Z","created_by":"Sinity","updated_at":"2026-07-13T05:55:01Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.9.10","depends_on_id":"polylogue-rxdo.9","type":"parent-child","created_at":"2026-07-13T02:56:22Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.9.10","depends_on_id":"polylogue-stc","type":"related","created_at":"2026-07-13T07:55:17Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-rxdo.9.10","title":"Experiment analysis projection over stc definitions and cohort relations","description":"Rigor mechanism J analyzes experiments but does not own a second experiment identity. It consumes a\nversioned typed ExperimentDefinition assertion from stc, cohort/result relation refs, canonical\nMetricDefinition refs, and assignment/exposure/outcome receipts. A pair of cohorts alone is an\nobservational comparison unless the experiment lifecycle proves otherwise.","design":"Lower ExperimentDefinition arms/assignment/exposure/frame/exclusions/stopping/analysis plan into\ncohort/result selections, then compute the preregistered registered metrics through 9l5.7. Preserve\npaired/unpaired design, confirmatory versus exploratory metrics, attrition/exclusion, leakage, exact\nevaluation worlds, and claim class. Emit an analysis artifact/receipt linked to the definition; do\nnot create an experiment table, registry, or separate lifecycle. Context PROMPT_EVAL, curriculum A/B,\nrouting/harness comparisons, PF-D8 matched resume treatments, and AI-D9 causal savings use this same path.","acceptance_criteria":"A stc two-arm fixture with assignments/exposures/outcomes analyzes end to end and reproduces declared\npaired metrics. An otherwise identical cohort-pair fixture without assignment/exposure renders\nobservational and cannot emit a causal claim. Post-exposure metric changes render exploratory/new-\nversion. At least two different consumers share the path without a second ExperimentDefinition or\nspecial-case executor.","notes":"[LEGACY FIELDS PRESERVED BY CORRECTIVE FOLLOW-UP 2026-07-13]\n\nORIGINAL DESCRIPTION:\nRigor mechanism J. Two cohorts + one metric_ref + a pre-registered comparison = an experiment object; thin composition over mechanisms A+B+C; bridge to the e5b5 eval harness. DEP: mechanisms A, B, C landed.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-13T00:56:22Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","labels":["area:substrate","delivery:C-read-evidence-contract","horizon:mid","lane:read-contracts","tech-tree"],"dependencies":[{"issue_id":"polylogue-rxdo.9.10","depends_on_id":"polylogue-rxdo.9","type":"parent-child","created_at":"2026-07-13T02:56:22Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-rxdo.9.10","depends_on_id":"polylogue-stc","type":"related","created_at":"2026-07-13T07:55:17Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-elkv","title":"Audit issue templates for genuinely stranger-facing bug/question framing","description":"polylogue-3tl.8 audit: the 4 existing issue templates (feature-or-change, bug-or-regression, cleanup-or-refactor, research-or-decision) read as operator/agent-facing by name; unclear whether 02-bug-or-regression.yml already suffices for a first-time external user or needs stranger-facing framing added. Content was not read in the audit pass.","design":"Read the actual field/label content of 02-bug-or-regression.yml and decide whether it needs stranger-facing rewording or a distinct template.","acceptance_criteria":"Issue templates confirmed adequate for external users, or updated/split to be so.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T19:47:07Z","created_by":"Sinity","updated_at":"2026-07-09T19:47:07Z","labels":["area:docs","discovered-from:polylogue-3tl.8"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-uqqi","title":"Investigate why has_user_event is universally 0 in local state_5.sqlite","description":"polylogue-ivsc audit: has_user_event=0 for 100% of 2463 threads in the live Codex state_5.sqlite, even for threads with genuine content-specific first_user_message text. Either a Codex CLI regression on this install/version, or the field tracks a different telemetry event than message presence.","design":"Low priority, informational only — does not gate any polylogue-side fix. Check Codex CLI changelog/source if accessible.","acceptance_criteria":"Root cause documented (regression vs different-semantics) or explicitly marked unresolvable from available evidence.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T19:22:32Z","created_by":"Sinity","updated_at":"2026-07-09T19:22:32Z","labels":["area:cost","discovered-from:polylogue-ivsc"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-7nu9","title":"A2A source importer: task streams + Agent Cards -\u003e canonical evidence","description":"First slice of polylogue-pb0j (A2A bridge epic) -- the memo that surfaced this whole thread called this \"probably the most important first slice.\" Ingest A2A protocol artifacts (JSON-RPC task/message/artifact streams, Agent Card snapshots) the SAME way other external-agent-runtime evidence gets bridged into the archive (matching the Hermes bridge pattern, polylogue-fs1, and the general OriginSpec detector/parser/fixture/fidelity contract this repo already uses for every source).","design":"VERIFY FIRST: pin the actual current A2A wire schema (JSON-RPC method names, Task/Message/Part/Artifact field shapes, task lifecycle state enum) against the live spec before writing a parser -- A2A is an actively evolving protocol (donated to Linux Foundation 2025), do not trust the captured chatgpt sessions paraphrase as a schema source, only as design rationale.\n\nFollow the existing OriginSpec pattern (detector + parser + raw fixture + normalized fixture + parser fingerprint + fidelity/completeness notes) used by every other source in sources/parsers/. New origin token needed (something like a2a-task-stream or similar -- check core/enums.py Origin for naming convention before picking).\n\nSchema mapping (from the polylogue-pb0j epic design, repeated here for the implementer):\n- AgentCard -\u003e capability snapshot as source evidence (name, provider, endpoint, skills, auth scheme, version, signature/hash)\n- Task -\u003e a run/delegation object near session_runs/session_observed_events (external task id, context id, endpoint, skill id, tenant, lifecycle state, status history)\n- Message -\u003e messages/blocks (sender/receiver role, message id, context id, task id, parts, media types, metadata, raw JSON preserved)\n- Part -\u003e blocks/attachments (text-\u003etext blocks, structured data-\u003eJSON blocks, file/raw-\u003eattachment/blob acquisition via the existing true-hash blob write path)\n- Artifact -\u003e artifacts/attachments/reports, content-hashed with acquisition status tracked (reuse the shipped attachment-acquisition-debt classification, polylogue-83u.4/83u.6 -- do not invent a parallel acquisition-status taxonomy)\n- task/artifact lifecycle events -\u003e session_observed_events rows (task.created/working/input_required/completed/failed, artifact.updated) -- reuse the existing ObservedEventKind vocabulary, extend only if genuinely no existing kind fits\n- contextId -\u003e loosely to logical session/thread group; preserve as external provenance (do not let A2As own grouping override Polylogues own topology/lineage resolution)\n\nWhere would real A2A evidence come from in practice, to seed a real (not just synthetic) fixture? Likely candidates: any local agent harness that logs its own outgoing/incoming A2A JSON-RPC calls (check if Claude Code, Codex, or any locally-run agent framework already emits A2A traffic logs); a captured HAR/network log from a browser session where an agent UI made A2A calls; or, if nothing real is available yet, a synthetic but schema-accurate fixture built directly from the official A2A spec examples.","acceptance_criteria":"A2A origin contract added (detector, parser, raw fixture, normalized fixture, parser fingerprint, fidelity/completeness notes) following the OriginSpec pattern used by every other source. A fixture (real capture preferred, spec-accurate synthetic acceptable if no real capture exists yet) imports cleanly: Agent Card becomes a capability-snapshot evidence row, a Task becomes a session_runs-adjacent object with correct lifecycle state, Messages/Parts become messages/blocks with attachments routed through the existing acquisition-status path, and task/artifact events land in session_observed_events using existing ObservedEventKind values (or a justified new one). Idempotent replay proven (same content hash, no duplicate rows). Verification artifact: OriginSpec detector/parser/fixture/fidelity suite, matching every other source contract in this repo.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-09T10:50:58Z","created_by":"Sinity","updated_at":"2026-07-09T10:50:58Z","labels":["area:ingest","area:interop"],"dependencies":[{"issue_id":"polylogue-7nu9","depends_on_id":"polylogue-pb0j","type":"parent-child","created_at":"2026-07-09T12:50:57Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -741,7 +741,7 @@ {"_type":"issue","id":"polylogue-wmj","title":"OTel GenAI trace export lane","description":"Project Run/ObservedEvent/tool/subagent/context data to OTel trace/span/span-event form (GenAI semantic conventions) WITHOUT making OTel internal authority — export-only lane. Makes the archive readable by Langfuse/Phoenix-class tooling. Counterpart of the existing OTLP intake; verify current GenAI semconv before freezing attribute names.","design":"Export lane: archive sessions -\u003e OTel GenAI semantic-convention spans (gen_ai.* attributes) so LangSmith/Langfuse/Phoenix-class consumers can read Polylogue evidence. Mapping: session -\u003e trace, message/tool block pairs -\u003e spans (actions view gives tool_use\u003c-\u003etool_result pairing), cost/token fields -\u003e gen_ai.usage.*. Emit OTLP-file/JSONL first (no live exporter dependency); reuse the D07 doctrine: internal schema first, adapters second (fs1.10). Note ops.db already has an otlp table family — check before adding new plumbing.","acceptance_criteria":"polylogue export --format otel-genai-jsonl produces spans that pass an OTel GenAI semantic-convention validator for a sample session set; tool pairs land as parent/child spans; cost attributes present where evidence exists. Verify: validator run + devtools test -k otel.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=K-interop-origin-export; lane=origin-interop-export; readiness=D-horizon-ready; proof=OriginSpec detector/parser/fixture/fidelity suite and content-hash export/import roundtrip. Original readiness=D-horizon-ready.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:20Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:38Z","labels":["area:substrate","delivery:K-interop-origin-export","horizon:vision","lane:origin-interop-export"],"dependencies":[{"issue_id":"polylogue-wmj","depends_on_id":"polylogue-l4kf","type":"parent-child","created_at":"2026-07-04T21:49:07Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-f94","title":"Kill-or-commit the TUI (~373 lines of skeletal Textual screens)","description":"DECIDED (operator, 2026-07-03): KILL. Delete ui/tui (~373 lines of skeletal Textual screens) — the web reader owns interactive reading and the fzf-select pattern owns terminal interactivity (jnj.11 extends it). Reversible via git history if a real TUI need ever materializes. Execution: remove the module, its command/inventory registrations, tests, and the Textual dependency if nothing else uses it; regenerate the topology projection (devtools render topology-projection \u0026\u0026 devtools render topology-status) and render all --check.","design":"Execution list (decision already made — KILL): delete polylogue/ui/tui/ (rg first for the actual module path), its command registration in cli/ (command_inventory + click registration), its tests, and the textual dependency from pyproject if nothing else imports it. Then: devtools render topology-projection + topology-status (module removal changes the projection), render all --check, and the command-inventory tests. One PR, surgical-renewal shaped.","acceptance_criteria":"`polylogue-f94` includes a before/after ownership map, preserves public behavior through parity tests, and deletes or redirects the old path with compatibility notes where needed. The refactor does not change evidence semantics unless a migration and release note say so. Verification artifact: layering/import graph diff, parity tests before/after refactor, public-model compatibility suite.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=M-substrate-consolidation; lane=substrate-consolidation; readiness=D-horizon-ready; proof=layering/import graph diff, parity tests before/after refactor, public-model compatibility suite. Original readiness=E-spec-needed.\nEXECUTE 2026-07-13: operator decision stands (KILL, 2026-07-03). Note for the executor: the judgment inbox (rxdo.9.16) is fzf-pattern terminal UX per jnj.11, NOT a Textual revival — no reason to hold the deletion.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:19Z","created_by":"Sinity","updated_at":"2026-07-13T04:01:41Z","labels":["area:cli","delivery:M-substrate-consolidation","delivery:ac-patched","lane:substrate-consolidation"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-pf1","title":"Sync/async divergence: diff the twin backends against the '10 known divergences' list","description":"The async backend self-documents ~10 known divergences from the sync path; nothing enforces the list stays complete. Systematic diff of query text + pragma application + error handling between the twin trees; either converge or make each divergence a tested, documented contract. Feeds the twin-path trap that has already bitten (see bd memories).","design":"Twins: async lane storage/sqlite/async_sqlite*.py vs sync lane storage/sqlite/archive_tiers/. Method: extract per-lane surface inventories (method name, SQL statements touched, tables written) via AST + SQL-string parse; diff into three classes — identical, intentionally async-only/sync-only, DIVERGENT (same table+intent, different SQL/semantics). Divergent rows become bugs; the artifact becomes a regression fixture so new divergence fails a test (the standing STORAGE TWINS trap made mechanical). Feeds a7xr (consolidation epic).","acceptance_criteria":"A committed twin-diff artifact classifies every write-path method; zero unexplained divergences (each is fixed or has an explicit rationale row); a test regenerates the diff and fails on new divergence. Verify: devtools test -k twin.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=M-substrate-consolidation; lane=substrate-consolidation; readiness=D-horizon-ready; proof=layering/import graph diff, parity tests before/after refactor, public-model compatibility suite. Original readiness=D-horizon-ready.\n[2026-07-08 new-gpt-pro corpus] .agent/scratch/new-gpt-pro/storage-twins-sql-inventory.csv (3531 rows, full async+sync SQL statement inventory with file:line) and storage-twins-exact-shared-sql.csv (15 statements byte-identical between async_sqlite_* mixins and sync archive_tiers/, e.g. DELETE FROM sessions WHERE session_id=? at storage/sqlite/queries/sessions_writes.py:49 vs archive_tiers/archive.py:3833) escrowed as evidence for this bead -- treat as information not authority, verify file:line against current master before use (generated 2026-07-07 from an earlier snapshot). Source session: sessions/sql-analysis-report.*.md in the same corpus dir. Not yet cross-checked against the existing \"10 known divergences\" self-documented list this bead references.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:18Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:39Z","labels":["area:storage","delivery:M-substrate-consolidation","horizon:frontier","lane:substrate-consolidation"],"dependencies":[{"issue_id":"polylogue-pf1","depends_on_id":"polylogue-a7xr","type":"parent-child","created_at":"2026-07-04T21:49:12Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0} -{"_type":"issue","id":"polylogue-bby.3","title":"Aggregate analytics views in the web UI","description":"No aggregate view exists — the inspector is session-by-session while the substrate has rollups, facets, group-by pipelines, and cost relations. Add a pivot/aggregate pane fed by the same DSL pipeline payloads (group by model/tool/outcome), with drill-through to the underlying sessions. Renders the saved-views defaults.","design":"An /analytics route with a handful of DSL-pipeline-backed panels: cost by origin/outcome over time, tool failure rates, workflow-shape mix. Every number carries the existing q-* evidence chips and clicks through to the sessions behind it (drill-through = the same query with the group predicate applied). Cost rollups, provider usage, coverage, pathology distributions, tool usage all have JSON endpoints or API methods already — no pixels. This is also where the D2 (cost-by-outcome) and D6 (Wrapped) demos live permanently once built. Depends on DSL aggregates for the richer panels; the rollup-backed ones can ship first.","acceptance_criteria":"The web behavior for `polylogue-bby.3` is backed by the shared API contract, handles loading/stale/error states explicitly, and has a seeded visual or interaction smoke test. Slow or missing daemon routes degrade visibly rather than rendering false emptiness. Verification artifact: web visual smoke, slow-route state fixture, basket-to-citable-export proof.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=H-web-cockpit; lane=web-evidence-cockpit; readiness=D-horizon-ready; proof=web visual smoke, slow-route state fixture, basket-to-citable-export proof. Original readiness=E-spec-needed.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:09Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:39Z","labels":["area:analytics","area:web","delivery:H-web-cockpit","delivery:ac-patched","lane:web-evidence-cockpit"],"dependencies":[{"issue_id":"polylogue-bby.3","depends_on_id":"polylogue-9l5.7","type":"blocks","created_at":"2026-07-07T14:54:32Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-bby.3","depends_on_id":"polylogue-bby","type":"parent-child","created_at":"2026-07-03T06:51:08Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-bby.3","depends_on_id":"polylogue-fnm.1","type":"relates-to","created_at":"2026-07-04T22:29:35Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-bby.3","title":"Aggregate analytics views in the web UI","description":"No aggregate view exists \u2014 the inspector is session-by-session while the substrate has rollups, facets, group-by pipelines, and cost relations. Add a pivot/aggregate pane fed by the same DSL pipeline payloads (group by model/tool/outcome), with drill-through to the underlying sessions. Renders the saved-views defaults.","design":"An /analytics route with a handful of DSL-pipeline-backed panels: cost by origin/outcome over time, tool failure rates, workflow-shape mix. Every number carries the existing q-* evidence chips and clicks through to the sessions behind it (drill-through = the same query with the group predicate applied). Cost rollups, provider usage, coverage, pathology distributions, tool usage all have JSON endpoints or API methods already \u2014 no pixels. This is also where the PF-D2 (cost-by-outcome) and PF-D6 (Wrapped) demos live permanently once built. Depends on DSL aggregates for the richer panels; the rollup-backed ones can ship first.","acceptance_criteria":"The web behavior for `polylogue-bby.3` is backed by the shared API contract, handles loading/stale/error states explicitly, and has a seeded visual or interaction smoke test. Slow or missing daemon routes degrade visibly rather than rendering false emptiness. Verification artifact: web visual smoke, slow-route state fixture, basket-to-citable-export proof.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=H-web-cockpit; lane=web-evidence-cockpit; readiness=D-horizon-ready; proof=web visual smoke, slow-route state fixture, basket-to-citable-export proof. Original readiness=E-spec-needed.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:09Z","created_by":"Sinity","updated_at":"2026-07-13T06:28:38Z","labels":["area:analytics","area:web","delivery:H-web-cockpit","delivery:ac-patched","lane:web-evidence-cockpit"],"dependencies":[{"issue_id":"polylogue-bby.3","depends_on_id":"polylogue-9l5.7","type":"blocks","created_at":"2026-07-07T14:54:32Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-bby.3","depends_on_id":"polylogue-bby","type":"parent-child","created_at":"2026-07-03T06:51:08Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-bby.3","depends_on_id":"polylogue-fnm.1","type":"relates-to","created_at":"2026-07-04T22:29:35Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-bby.4","title":"Live session tailing as a first-class mode","description":"SSE granular topics + append-mode ingestion exist; the UI treats the archive as static. A 'live' mode that follows an in-flight session (auto-refresh transcript tail, cursor-latency chip) — also the substrate for the self-watching demo.","design":"SSE granular topics and append animations already exist; missing is a 'follow' toggle on an in-flight session: auto-scroll transcript tail + a running cost/latency ticker fed from the insights endpoints + a capture-latency chip from ingest-cursor timestamps. The web version of the self-watching-session demo — the feature that makes people leave the tab open.","acceptance_criteria":"The web behavior for `polylogue-bby.4` is backed by the shared API contract, handles loading/stale/error states explicitly, and has a seeded visual or interaction smoke test. Slow or missing daemon routes degrade visibly rather than rendering false emptiness. Verification artifact: web visual smoke, slow-route state fixture, basket-to-citable-export proof.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=H-web-cockpit; lane=web-evidence-cockpit; readiness=D-horizon-ready; proof=web visual smoke, slow-route state fixture, basket-to-citable-export proof. Original readiness=E-spec-needed.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:09Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:39Z","labels":["area:daemon","area:web","delivery:H-web-cockpit","delivery:ac-patched","lane:web-evidence-cockpit"],"dependencies":[{"issue_id":"polylogue-bby.4","depends_on_id":"polylogue-20d.13","type":"blocks","created_at":"2026-07-07T14:54:26Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-bby.4","depends_on_id":"polylogue-bby","type":"parent-child","created_at":"2026-07-03T06:51:09Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-9l5.6","title":"tool-episodes projection: call + result + outcome + context + next action","description":"Sidecar research (Sartre): affordance-usage and analyze tools stop at aggregate evidence. A first-class tool-episodes projection — tool call, paired result, outcome status, surrounding context, what the agent did next, caveats — supports Serena/codebase-memory utility evaluation and is the natural drill-down unit under every aggregate. Likely reuses the action outcome fields + followup_class machinery from the campaign.","design":"New derived read model `tool_episodes` (rebuildable; registry pattern under polylogue/storage/insights/session/, registered in insights/registry.py so CLI+MCP inherit it). Each episode joins a tool_use block to its paired tool_result via the existing `actions` view and carries: the keystone structural outcome fields (tool_result_is_error, tool_result_exit_code, index schema v16), a bounded surrounding-context window (prev/next K messages), followup_class (from the closed sru.1 keystone), and per-episode caveats (unknown-outcome NULL vs structural). Surfaces: (a) an `analyze` drill-down projection, (b) a DSL `tool-episodes` unit that is the natural drill-down under affordance-usage / analyze-tools aggregates, (c) an MCP tool. Aggregates OVER episodes register as MeasureSpecs via 9l5.7; the projection itself is a unit, not a measure. Pitfall: a tool_use with no paired result (interrupted/streamed) must still yield exactly one episode with outcome=unknown — never dropped.","acceptance_criteria":"1. On the seeded/demo corpus `tool-episodes` is queryable and each row carries call + paired result + structural outcome (is_error/exit_code) + surrounding-context window + next-action + caveat. 2. A drill-down from an affordance-usage (or analyze-tools) aggregate cell returns exactly the underlying episodes for that cell. 3. Property test: every tool_use block resolves to exactly one episode (paired or unknown-outcome), zero dropped. 4. Aggregates over episodes register through 9l5.7 (so tier footnotes render). Verify: `polylogue analyze tools` drill-down and a DSL `... | tool-episodes` query both render on the demo archive; the MCP tool returns the same rows; `devtools test` selection over the new insight + registry passes.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=I-analytics-experiments; lane=analytics-experiments; readiness=A-implementation-ready; proof=measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/182_polylogue_9l5_6.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:06Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:18Z","labels":["area:analytics","area:query","delivery:I-analytics-experiments","lane:analytics-experiments"],"dependencies":[{"issue_id":"polylogue-9l5.6","depends_on_id":"polylogue-1vpm","type":"relates-to","created_at":"2026-07-07T15:02:09Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.6","depends_on_id":"polylogue-9l5","type":"parent-child","created_at":"2026-07-03T06:51:05Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.6","depends_on_id":"polylogue-9l5.7","type":"blocks","created_at":"2026-07-07T14:54:45Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-bby","title":"Web workbench: from result list to evidence cockpit","description":"Web audit findings (fables session): the MK2 shell is a solid three-pane reader but hides the product's depth — the DSL, aggregates, live capture, and long-session structure are all invisible at the point of use. Children in rough value order.","design":"Epic: evolve the MK2 three-pane web reader from a result list into an evidence cockpit that surfaces the product's depth at the point of use, the DSL/query algebra, aggregates, live-capture/daemon status, and long-session structure, all currently invisible in the shell. Delivered through child beads in rough value order.","acceptance_criteria":"1. All child beads under bby are closed (`bd show polylogue-bby --json` shows no open children). 2. The web workbench exposes at the point of use: DSL/query entry, aggregate views, live-capture/daemon status (including the daemon-down banner from peo/bby.1), and long-session structure, none of which requires leaving the reader. Verify: `bd show polylogue-bby --json` children closed; the reader-visual smoke lane (`devtools lab smoke run reader-visual-smoke`) plus the fast visual lane pass against the seeded corpus.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=H-web-cockpit; lane=web-evidence-cockpit; readiness=A-implementation-ready; proof=web visual smoke, slow-route state fixture, basket-to-citable-export proof. Original readiness=A-implementation-ready.\n[GPT-Pro branch assimilation 2026-07-11] Branch 14 (`6a5112f3`; mission 04 cockpit) partially recovered: earlier 4.4MB Cockpit kit survives; v2 ZIP returns `404 Interpreter file not found`. Accepted truth-state/result-envelope/route/bounded-loader obligations. Runtime/prototype/campaign material is largely superseded by #2673/#2675 and existing children; no parallel graph imported. Matrix: `.agent/reports/chatgpt-pro-branch-assimilation-2026-07-11.md`; bytes under `/realm/inbox/gpt-pro-sol/recovered-branch-project-explanation-2026-07-11/polylogue/`.","status":"open","priority":4,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:06Z","created_by":"Sinity","updated_at":"2026-07-11T11:37:23Z","labels":["area:web","delivery:H-web-cockpit","lane:web-evidence-cockpit"],"dependency_count":0,"dependent_count":0,"comment_count":0} @@ -750,13 +750,13 @@ {"_type":"issue","id":"polylogue-9l5.4","title":"Token-economy analytics: cache-lane and attention accounting","description":"Cache-lane accounting is disjoint and honest; nothing yet answers 'what fraction of apparent token throughput is cache-read amplification, per provider, over time' or 'context budget spent on tool results vs prose'. Cache amplification (216x in the last forensics run) is itself a finding-grade number when computed honestly.","design":"Two derived metrics beg to exist, both structurally computable today: (1) context amplification — bytes re-read / bytes unique per session (how much of the context is churn); cache-lane accounting is disjoint and labeled, so cache-read amplification per provider over time is exact where provider-reported. (2) babysitting index — operator interventions per hour of agent work; latency profiles already carry user-response vs agent-response medians, and human-authored message counts are materialized. Ship both as profile/insight fields with per-origin coverage tiers.","acceptance_criteria":"`polylogue-9l5.4` registers every emitted measure with sample frame, evidence tier, denominator, uncertainty/confound notes, and non-claim wording. Empty backing evidence renders unknown/not-supported, not zero. A seeded fixture demonstrates at least one supported finding and one deliberately unsupported result. Verification artifact: measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=I-analytics-experiments; lane=analytics-experiments; readiness=D-horizon-ready; proof=measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture. Original readiness=E-spec-needed.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:04Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:40Z","labels":["area:analytics","area:usage","delivery:I-analytics-experiments","delivery:ac-patched","lane:analytics-experiments"],"dependencies":[{"issue_id":"polylogue-9l5.4","depends_on_id":"polylogue-9l5","type":"parent-child","created_at":"2026-07-03T06:51:04Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.4","depends_on_id":"polylogue-9l5.7","type":"blocks","created_at":"2026-07-07T14:54:51Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-9l5.2","title":"Cross-provider comparative analytics","description":"The archive is the only place Claude/Codex/ChatGPT/Gemini work traces coexist normalized: same task-shape comparisons — failure rates, retry behavior, cost per completed session, tool-mix, session lengths — by origin/model with explicit coverage tiers per origin so partial provenance cannot masquerade as a finding. This relation is also what the public leaderboard variant reads.","design":"The killer query shape: 'same repo, same month: Claude Code vs Codex — turns per task, $/session, tool-failure rate, subagent usage' — no lab and no observability vendor can run it; the archive is the only place these providers coexist normalized. Honesty by construction: the coverage matrix (storage/usage.py:51-139) already annotates exact vs estimated accounting per origin — every comparison row carries its coverage tier as a footnote, so partial provenance cannot masquerade as a finding. This relation is also what the public leaderboard variant reads.\n\nTHE $0 LANE (fables interop analysis): once local-model sessions exist in the archive (Hermes/Ollama behind the LiteLLM gateway), the same comparison gains a free-lane column — local-model vs API harnesses on the same repo and task class: turns, failure rates, wall-clock, and actual cost $0 vs the API-equivalent counterfactual the api_equivalent cost axis already computes. Answers 'when is the free lane good enough?' with structural outcomes instead of vibes — and it is exactly the evidence-backed comparison shape the open-model community amplifies. Requires fs1.1 keystone outcome extraction so local-agent sessions are outcome-comparable, and per-origin coverage tiers stay mandatory.","acceptance_criteria":"1. On the seeded corpus a cross-origin same-task comparison (turns/task, $/session, tool-failure rate, subagent usage) renders WITH a per-origin coverage-tier footnote on EVERY row, sourced from the storage/usage.py coverage matrix (exact vs estimated per origin). 2. A comparison where one origin lacks priced provenance is REFUSED as a bare number at composition and returns an actionable error (the 9l5.7 composition/honesty guard), not a silent partial. 3. When local-model ($0-lane) sessions are present, a free-lane column shows actual $0 vs the api_equivalent counterfactual. Verify: a DSL `... | compare origin:claude-code-session vs codex-session` query renders on the demo archive; a snapshot test asserts the mandatory coverage footnote AND exercises the refusal path when one origin's provenance is unpriced. Note: the design's 'fs1.1 keystone outcome extraction' phrase is a stale conflation — the outcome-extraction keystone is the closed sru.1; fs1.1 (Hermes importer) is the separate prerequisite only for the $0-lane column's local sessions (orchestrator to rewire the deps accordingly).","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=I-analytics-experiments; lane=analytics-experiments; readiness=A-implementation-ready; proof=measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/181_polylogue_9l5_2.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:03Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:18Z","labels":["area:analytics","delivery:I-analytics-experiments","lane:analytics-experiments"],"dependencies":[{"issue_id":"polylogue-9l5.2","depends_on_id":"polylogue-1vpm","type":"relates-to","created_at":"2026-07-07T15:02:08Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.2","depends_on_id":"polylogue-9l5","type":"parent-child","created_at":"2026-07-03T06:51:02Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.2","depends_on_id":"polylogue-9l5.7","type":"blocks","created_at":"2026-07-07T14:54:46Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-9l5.1","title":"Outcome-conditioned analytics: cost/duration/retries/tools by structural success","description":"Group cost, duration, retry chains, and tool usage by structural outcome (exit_code/is_error terminal state), with per-origin coverage caveats. The includes High-Value backlog names this directly. Consumes the action outcome fields; surfaces through analyze projections + DSL aggregates + MCP insight tools — one relation, three surfaces.","design":"Anchored examples (all one step from existing substrate): cost of failed vs clean sessions; failure-rate by model VERSION; retry cascade depth; 'sessions where \u003e30% of tool calls errored' (needs the child-count DSL predicate or the relation directly). Keystone fields tool_result_is_error/exit_code + the actions view are the ground truth; outcomes are captured today but analytics still mostly counts and sums. This is the highest-leverage analytics move precisely because it is the construct-valid one: success measured from provider-reported structure, never assistant prose. Per-origin coverage caveats from the column-honesty audit bead; surfaces = analyze projections + DSL aggregates + MCP insight tools over ONE shared relation.","acceptance_criteria":"1. One shared relation groups cost, duration, retry-chain depth, and tool-mix by structural outcome (terminal tool_result_is_error / exit_code from the actions view — never assistant prose), reachable identically through the analyze projection, a DSL aggregate, and an MCP insight tool (one relation, three surfaces returning the same numbers). 2. A per-origin coverage caveat (from the 9e5.3 column-honesty audit) renders on every grouped row. 3. The predicate 'sessions where \u003e30% of tool calls errored' resolves on the seeded corpus. Verify: `polylogue analyze \u003coutcome-view\u003e`, the equivalent DSL aggregate, and the MCP call each return identical figures on the demo archive; a snapshot test pins the coverage caveat and the \u003e30%-errored predicate result.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=I-analytics-experiments; lane=analytics-experiments; readiness=A-implementation-ready; proof=measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/180_polylogue_9l5_1.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":4,"issue_type":"feature","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:02Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:19Z","labels":["area:analytics","delivery:I-analytics-experiments","lane:analytics-experiments"],"dependencies":[{"issue_id":"polylogue-9l5.1","depends_on_id":"polylogue-1vpm","type":"relates-to","created_at":"2026-07-07T15:02:07Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.1","depends_on_id":"polylogue-9l5","type":"parent-child","created_at":"2026-07-03T06:51:02Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-9l5.1","depends_on_id":"polylogue-9l5.7","type":"blocks","created_at":"2026-07-07T14:54:46Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-212.5","title":"D5 'The session that watched itself': live capture proof","description":"Live dev session with polylogued tailing; mid-session, query the archive for THIS session — messages typed a minute ago come back through MCP with ingest-cursor timestamps proving capture latency; end by generating the session's own postmortem before it ends. Stagecraft more than code; latency claims come from cursor rows, not assertion.","design":"The reflexive capture proof: run an agent session ABOUT polylogue while browser-capture + hooks record it, then produce the archive's account of that same session (timeline, tool calls, cost, claims) as a Demo Finding Packet (212.7 contract). The packet juxtaposes what the agent claimed in-session vs what the archive recorded — the honest-mirror demo. All substrate exists (capture e2e verified 2026-06-29; hooks channel live); this is composition + writeup, gated only by 212.7's packet shape.","acceptance_criteria":"A committed packet under .agent/demos/ where the recorded session's evidence (tool timing, exit codes, cost) annotates the session's own narrative; regeneration instructions work cold. Verify: packet passes the 212.7 shape check + cold-reader gate.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=D-horizon-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=D-horizon-ready.\nUNBLOCKED 2026-07-13: r4no (silent capture failure) fixed and merged (#2780) with the held-with-reason path tested; live-capture proof demo can now run without the trust caveat. Also cite 4g3n timeline (doing-nothing is a logged event) when it lands.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:01Z","created_by":"Sinity","updated_at":"2026-07-13T04:01:05Z","labels":["area:daemon","area:demos","delivery:L-external-legibility","horizon:mid","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T06:51:00Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:35Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:36Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:37Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:40Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:41Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":6,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-212.5","title":"PF-D5 'The session that watched itself': live capture proof","description":"Live dev session with polylogued tailing; mid-session, query the archive for THIS session \u2014 messages typed a minute ago come back through MCP with ingest-cursor timestamps proving capture latency; end by generating the session's own postmortem before it ends. Stagecraft more than code; latency claims come from cursor rows, not assertion.","design":"The reflexive capture proof: run an agent session ABOUT polylogue while browser-capture + hooks record it, then produce the archive's account of that same session (timeline, tool calls, cost, claims) as a Demo Finding Packet (212.7 contract). The packet juxtaposes what the agent claimed in-session vs what the archive recorded \u2014 the honest-mirror demo. All substrate exists (capture e2e verified 2026-06-29; hooks channel live); this is composition + writeup, gated only by 212.7's packet shape.","acceptance_criteria":"A committed packet under .agent/demos/ where the recorded session's evidence (tool timing, exit codes, cost) annotates the session's own narrative; regeneration instructions work cold. Verify: packet passes the 212.7 shape check + cold-reader gate.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=D-horizon-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=D-horizon-ready.\nUNBLOCKED 2026-07-13: r4no (silent capture failure) fixed and merged (#2780) with the held-with-reason path tested; live-capture proof demo can now run without the trust caveat. Also cite 4g3n timeline (doing-nothing is a logged event) when it lands.\n\nDEMO NAMESPACE DECISION 2026-07-13: this portfolio uses PF-D* identifiers. The archive-intelligence catalog polylogue-rxdo.10 uses AI-D*. Historical unqualified D1/D2/... text remains an alias only inside its owning parent; cross-program dependencies and external-adoption prose must use the qualified identifier.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:01Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","labels":["area:daemon","area:demos","delivery:L-external-legibility","horizon:mid","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T06:51:00Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:35Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:36Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:37Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:39Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:40Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.5","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:41Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":6,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-9l5","title":"Outcome-grounded analytics: the archive answers 'so what' questions","description":"The archive answers 'so what' questions. Tower map (2026-07-03 design pass): LAYER 0 substrate (exists) — profiles, work events, phases, threads, cost rollups with five-axis accounting, structural pathologies, followup_class, run projection, topology/logical sessions, tool timing, workflow shapes. LAYER 1 descriptive (children .1-.6): outcome-conditioned, cross-provider, epidemiology, token economy, saved views, tool episodes. LAYER 2 statistical honesty (.7): uncertainty primitives + the measure registry with construct-validity metadata — the keystone every higher layer composes through. LAYER 3 temporal (.8): trends, baselines, changepoints. LAYER 4 duration \u0026 sequence (.9 survival, .10 process mining). LAYER 5 causal (experiment hosting bead): declared arms, prereg, paired analysis. LAYER 6 predictive (.11): calibrated classical models as advisories. Plus cross-cutting measures (.12 information-theoretic + graph) and the semantic layer (mhx.5 topics/novelty). COMPOSITION RULE: every layer lands as registered measures over the query algebra (fnm/4p1) — measure x grouping x window x comparison x uncertainty — never as bespoke analyze modes; construct validity is enforced by the registry (evidence tier + sample frame + confounds declared per measure, coverage preconditions checked at composition, tier footnotes rendered in every output).","design":"Epic: the archive answers 'so what' questions, layered over the Layer-0 substrate (profiles, work events, phases, threads, five-axis cost rollups, structural pathologies, followup_class, run projection, topology/logical sessions, tool timing, workflow shapes). Layer 1 descriptive (children .1-.6), Layer 2 statistical honesty (.7 uncertainty primitives + measure registry with construct-validity metadata, the keystone), Layer 3 temporal (.8), Layer 4 duration/sequence (.9 survival, .10 process mining), Layer 5 causal (experiment hosting), Layer 6 predictive (.11), plus cross-cutting measures (.12) and the semantic layer (mhx.5). Composition rule: every layer lands as registered measures over the query algebra (fnm/4p1), measure x grouping x window x comparison x uncertainty, never as bespoke analyze modes; construct validity is enforced by the registry.","acceptance_criteria":"1. All child beads (9l5.1-.12 and folded-in measures) are closed (`bd show polylogue-9l5 --json` shows no open children). 2. Every delivered analytic lands as a registered measure over the query algebra (fnm/4p1), not a bespoke analyze mode; the measure registry (.7) enforces evidence tier + sample frame + confounds per measure and renders tier footnotes in every output. 3. The keystone statistical-honesty layer (.7) is in place before higher layers compose through it, and coverage preconditions are checked at composition time. Verify: `bd show polylogue-9l5 --json` children closed; `devtools test` selection on the measure registry asserts construct-validity metadata is required per measure and that outputs carry tier footnotes.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=I-analytics-experiments; lane=analytics-experiments; readiness=A-implementation-ready; proof=measure registry, sample-frame/uncertainty/confound rendering tests, experiment analysis fixture. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/179_polylogue_9l5.md (depth: epic-checklist; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\nRECONCILIATION DIRECTIVE 2026-07-13 (executed from the session sweep): this epic and the rxdo.10 analytics atlas are the SAME PROGRAM from two eras. Adopt this epic's tower layering (everything composes through the statistical-honesty layer) as the atlas's skeleton; re-ground children in tonight's primitives: 9l5.7 measure-registry = metric:\u003chash\u003e (rxdo.9.1) — MERGE, it is the same construct designed earlier; 9l5.10 process mining = atlas A (PACK-A token streams); 9l5.12 info-theoretic = atlas C (incl. NCD cross-check + recall mutual-information); 9l5.13 activity_spans = PACK-A tokens + avna M3 captures materialized as a unit; 9l5.1 outcome-conditioning = declared open/close events (abandonment redesign, right-censoring); 9l5.11 predictive advisories gain judge-calibration weighting (rxdo.9.12, dep: h6r); 9l5.16 TQI-never-truth = ranker-not-truth doctrine; 9l5.17 drift observatory = changepoints (atlas F) with validity gates. CIs only where sampling exists — population counts get none (anti-theater rule).","status":"open","priority":4,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:01Z","created_by":"Sinity","updated_at":"2026-07-13T04:00:13Z","labels":["area:analytics","delivery:I-analytics-experiments","lane:analytics-experiments"],"dependency_count":0,"dependent_count":0,"comment_count":0} -{"_type":"issue","id":"polylogue-212.4","title":"D4 'Behavioral archaeology': six DSL queries, rapid fire","description":"Each answers a question an engineering lead would ask, each impossible in any chat UI: SEQ thrash-loop hunt; failure-rate by model; which tools break (observed-event outcomes by tool); near:'race condition' semantic probe across providers; abandoned-in-this-repo-this-quarter; then pipe straight into read. Show explain_query_expression once to prove the query means what it says. Nearly free: all reads exist. Doubles as the DSL reference-card content.","design":"A demo: six DSL queries, each answering a question an engineering lead would ask and each impossible in a chat UI, SEQ thrash-loop hunt; failure-rate by model; which tools break (observed-event outcomes by tool); a `near:'race condition'` semantic probe across providers; abandoned-in-this-repo-this-quarter; then a query piped straight into `read`. Show `explain_query_expression` once to prove a query means what it says. All underlying reads exist; packaging is the work, and the set doubles as the DSL reference-card content.","acceptance_criteria":"1. Six DSL queries are authored and run against the demo/seeded corpus, each producing sensible results: SEQ thrash-loop, failure-rate by model, tool-breakage by observed-event outcome, `near:` semantic probe across providers, abandoned-this-repo-this-quarter, and a query piped into `read`. 2. `explain_query_expression` is shown once demonstrating a query's parsed meaning. 3. The six queries are captured as the DSL reference-card content (committed demo/doc artifact). Verify: each query runs via `polylogue` against the `polylogue demo seed` corpus (recorded output); the demo script is exercised by the docs/visual lane where applicable.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=A-implementation-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/125_polylogue_212_4.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"closed","priority":4,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:00Z","created_by":"Sinity","updated_at":"2026-07-09T00:43:35Z","started_at":"2026-07-09T00:15:43Z","closed_at":"2026-07-09T00:43:35Z","close_reason":"Ran and packaged all 6 named DSL queries against the seeded demo corpus (11 sessions, 43 messages) as a conforming Demo Finding Packet under .agent/demos/d4-behavioral-archaeology/ (registered in .agent/demos/registry.json, mode public), passing devtools lab policy demo-packet-registry: (1) SEQ thrash-loop hunt seq(action:shell -\u003e action:shell) -- 2/11 sessions match, verified via then select --json. (2) Tool call volume by tool: Bash 9, Read 8, Task 1, Write 1, exec_command 1. (3) Tool failure rate: Bash 4, exec_command 1. (4) near:\"flaky async test\" semantic probe -- 0 results, honestly attributed to the fixtures sparse embedding coverage (2/43 messages, both numerator and denominator independently cited per CodeRabbit review), not claimed as a search failure. (5) since:2y time-scoped population -- 9/11 sessions. (6) query piped into read (find origin:codex-session then read --first --view messages) -- resolves a real captured tool error and the agents next-step response. --explain shown once on query 1 proving the parsed AST. Shipped as PR #2590, merged 89e3ef445 (2 CodeRabbit findings addressed: filled a placeholder bead id, added the missing denominator citation for the 2/43 ratio).\n\nBonus: while authoring query 1, discovered and filed a real product defect (polylogue-70qb) -- bare `find \"sessions where \u003cpredicate\u003e\"` (no then-verb) silently ignores the predicate and returns the full unfiltered session list, while both `then select` and the compact query form correctly filter. Documented as a counterexample in report.md rather than hidden -- exactly the demos own thesis (a DSL query surfacing something a chat UI never could) playing out during its own authoring.\n\nAC honesty: all 3 AC clauses satisfied -- six queries authored and run producing sensible/honestly-caveated results; explain_query_expression shown once; captured as committed demo-shelf content (also doubles as informal DSL reference-card examples, though a dedicated reference-card document was not separately authored -- the queries and their syntax are demonstrated in report.md/PROMPT.md).","labels":["area:demos","area:query","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T06:50:59Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:02Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:02Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:03Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:04Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:05Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:07Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":6,"dependent_count":1,"comment_count":0} -{"_type":"issue","id":"polylogue-212.3","title":"D2 'Where did the money actually go': cost by outcome","description":"Five-axis cost basis shown honestly (provider-reported exact vs catalog-priced with stated coverage), then the pivot nobody else can do: cost by outcome — '$N this month; X% spent in sessions that ended abandoned or with a failing final action; five most expensive failures, click through to the exact turn.' Needs the outcome-conditioned join (action outcome fields bead); instruments otherwise exist (cost_rollups, session_costs, terminal-state profiles, per-origin exact/estimate labels rendered as footnotes).","design":"A demo: show the five-axis cost basis honestly (provider-reported exact vs catalog-priced with stated coverage), then the pivot no chat UI can do, cost by outcome: total monthly spend, the % spent in sessions that ended abandoned or with a failing final action, and the five most expensive failures each drillable to the exact turn. Needs the outcome-conditioned join (action outcome fields bead); cost instruments exist (cost_rollups, session_costs, terminal-state profiles, per-origin exact/estimate labels rendered as footnotes).","acceptance_criteria":"1. The demo renders a five-axis cost basis with provider-reported-exact vs catalog-priced values clearly labeled and coverage stated (per-origin exact/estimate footnotes). 2. Cost-by-outcome pivot: total monthly spend, the fraction spent in abandoned or failing-final-action sessions, and the five most expensive failures, each drillable to the exact turn via the outcome-conditioned join. Verify: the demo runs via cost_rollups/session_costs against the seeded corpus (recorded output); depends on the action-outcome join bead (note dependency); `devtools test` selection covers the join query if new.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=A-implementation-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/124_polylogue_212_3.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:50:59Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:19Z","labels":["area:demos","area:usage","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T06:50:59Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:08Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:09Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:10Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:11Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:12Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:13Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":6,"dependent_count":1,"comment_count":0} +{"_type":"issue","id":"polylogue-212.4","title":"PF-D4 'Behavioral archaeology': six DSL queries, rapid fire","description":"Each answers a question an engineering lead would ask, each impossible in any chat UI: SEQ thrash-loop hunt; failure-rate by model; which tools break (observed-event outcomes by tool); near:'race condition' semantic probe across providers; abandoned-in-this-repo-this-quarter; then pipe straight into read. Show explain_query_expression once to prove the query means what it says. Nearly free: all reads exist. Doubles as the DSL reference-card content.","design":"A demo: six DSL queries, each answering a question an engineering lead would ask and each impossible in a chat UI, SEQ thrash-loop hunt; failure-rate by model; which tools break (observed-event outcomes by tool); a `near:'race condition'` semantic probe across providers; abandoned-in-this-repo-this-quarter; then a query piped straight into `read`. Show `explain_query_expression` once to prove a query means what it says. All underlying reads exist; packaging is the work, and the set doubles as the DSL reference-card content.","acceptance_criteria":"1. Six DSL queries are authored and run against the demo/seeded corpus, each producing sensible results: SEQ thrash-loop, failure-rate by model, tool-breakage by observed-event outcome, `near:` semantic probe across providers, abandoned-this-repo-this-quarter, and a query piped into `read`. 2. `explain_query_expression` is shown once demonstrating a query's parsed meaning. 3. The six queries are captured as the DSL reference-card content (committed demo/doc artifact). Verify: each query runs via `polylogue` against the `polylogue demo seed` corpus (recorded output); the demo script is exercised by the docs/visual lane where applicable.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=A-implementation-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/125_polylogue_212_4.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 \u2014 verify source anchors before coding; line numbers are snapshot-relative.\n\nDEMO NAMESPACE DECISION 2026-07-13: this portfolio uses PF-D* identifiers. The archive-intelligence catalog polylogue-rxdo.10 uses AI-D*. Historical unqualified D1/D2/... text remains an alias only inside its owning parent; cross-program dependencies and external-adoption prose must use the qualified identifier.","status":"closed","priority":4,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:51:00Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","started_at":"2026-07-09T00:15:43Z","closed_at":"2026-07-09T00:43:35Z","close_reason":"Ran and packaged all 6 named DSL queries against the seeded demo corpus (11 sessions, 43 messages) as a conforming Demo Finding Packet under .agent/demos/d4-behavioral-archaeology/ (registered in .agent/demos/registry.json, mode public), passing devtools lab policy demo-packet-registry: (1) SEQ thrash-loop hunt seq(action:shell -\u003e action:shell) -- 2/11 sessions match, verified via then select --json. (2) Tool call volume by tool: Bash 9, Read 8, Task 1, Write 1, exec_command 1. (3) Tool failure rate: Bash 4, exec_command 1. (4) near:\"flaky async test\" semantic probe -- 0 results, honestly attributed to the fixtures sparse embedding coverage (2/43 messages, both numerator and denominator independently cited per CodeRabbit review), not claimed as a search failure. (5) since:2y time-scoped population -- 9/11 sessions. (6) query piped into read (find origin:codex-session then read --first --view messages) -- resolves a real captured tool error and the agents next-step response. --explain shown once on query 1 proving the parsed AST. Shipped as PR #2590, merged 89e3ef445 (2 CodeRabbit findings addressed: filled a placeholder bead id, added the missing denominator citation for the 2/43 ratio).\n\nBonus: while authoring query 1, discovered and filed a real product defect (polylogue-70qb) -- bare `find \"sessions where \u003cpredicate\u003e\"` (no then-verb) silently ignores the predicate and returns the full unfiltered session list, while both `then select` and the compact query form correctly filter. Documented as a counterexample in report.md rather than hidden -- exactly the demos own thesis (a DSL query surfacing something a chat UI never could) playing out during its own authoring.\n\nAC honesty: all 3 AC clauses satisfied -- six queries authored and run producing sensible/honestly-caveated results; explain_query_expression shown once; captured as committed demo-shelf content (also doubles as informal DSL reference-card examples, though a dedicated reference-card document was not separately authored -- the queries and their syntax are demonstrated in report.md/PROMPT.md).","labels":["area:demos","area:query","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T06:50:59Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:02Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:02Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:03Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:04Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:05Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.4","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:07Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":6,"dependent_count":1,"comment_count":0} +{"_type":"issue","id":"polylogue-212.3","title":"PF-D2 'Where did the money actually go': cost by outcome","description":"Five-axis cost basis shown honestly (provider-reported exact vs catalog-priced with stated coverage), then the pivot nobody else can do: cost by outcome \u2014 '$N this month; X% spent in sessions that ended abandoned or with a failing final action; five most expensive failures, click through to the exact turn.' Needs the outcome-conditioned join (action outcome fields bead); instruments otherwise exist (cost_rollups, session_costs, terminal-state profiles, per-origin exact/estimate labels rendered as footnotes).","design":"A demo: show the five-axis cost basis honestly (provider-reported exact vs catalog-priced with stated coverage), then the pivot no chat UI can do, cost by outcome: total monthly spend, the % spent in sessions that ended abandoned or with a failing final action, and the five most expensive failures each drillable to the exact turn. Needs the outcome-conditioned join (action outcome fields bead); cost instruments exist (cost_rollups, session_costs, terminal-state profiles, per-origin exact/estimate labels rendered as footnotes).","acceptance_criteria":"1. The demo renders a five-axis cost basis with provider-reported-exact vs catalog-priced values clearly labeled and coverage stated (per-origin exact/estimate footnotes). 2. Cost-by-outcome pivot: total monthly spend, the fraction spent in abandoned or failing-final-action sessions, and the five most expensive failures, each drillable to the exact turn via the outcome-conditioned join. Verify: the demo runs via cost_rollups/session_costs against the seeded corpus (recorded output); depends on the action-outcome join bead (note dependency); `devtools test` selection covers the join query if new.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=A-implementation-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/124_polylogue_212_3.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 \u2014 verify source anchors before coding; line numbers are snapshot-relative.\n\nDEMO NAMESPACE DECISION 2026-07-13: this portfolio uses PF-D* identifiers. The archive-intelligence catalog polylogue-rxdo.10 uses AI-D*. Historical unqualified D1/D2/... text remains an alias only inside its owning parent; cross-program dependencies and external-adoption prose must use the qualified identifier.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:50:59Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","labels":["area:demos","area:usage","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T06:50:59Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:08Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:09Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:10Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:11Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:12Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.3","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:13Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":6,"dependent_count":1,"comment_count":0} {"_type":"issue","id":"polylogue-212.1","title":"Post-hoc forensic Q\u0026A demo: questions a tracer cannot answer","description":"The category-separation demo: take one completed multi-hour coding-agent session and answer post-hoc questions live — when did the bad assumption first enter; which file churned before the regression; what evidence did the agent cite for a design choice; which prior failed attempts resemble today's failure. Composes existing reads (postmortem bundle, work events, phases, neighbor candidates, git correlation); packaging is the work, plus one honest 'we cannot answer X' slide (construct validity).","design":"A category-separation demo: take one completed multi-hour coding-agent session and answer post-hoc questions live, when the bad assumption first entered; which file churned before the regression; what evidence the agent cited for a design choice; which prior failed attempts resemble today's. Composes existing reads (postmortem bundle, work events, phases, neighbor candidates, git correlation); packaging is the work, plus one honest 'we cannot answer X' slide for construct validity.","acceptance_criteria":"1. Against one completed multi-hour session, the demo answers each forensic question live using existing reads (get_postmortem_bundle, session_work_events, session_phases, neighbor_candidates, git correlation): first-bad-assumption entry, file churned before the regression, cited evidence for a design choice, and resembling prior failed attempts. 2. One explicit 'we cannot answer X' slide is included (construct-validity honesty). Verify: the demo runs end-to-end against a chosen archived session (recorded output/artifact) using only existing reads (no new query machinery).","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=A-implementation-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/122_polylogue_212_1.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:50:58Z","created_by":"Sinity","updated_at":"2026-07-08T20:15:20Z","labels":["area:demos","area:legibility","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.1","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T06:50:57Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.1","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:14Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.1","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:14Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.1","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:15Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.1","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:16Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.1","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:17Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.1","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:18Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":6,"dependent_count":1,"comment_count":0} -{"_type":"issue","id":"polylogue-212.2","title":"D1 'The receipts': claim-vs-evidence on a real PR","description":"Pick a merged agent-authored PR; resolve PR -\u003e authoring session via session_commits/session_repos; get_postmortem_bundle; render two columns: claimed (PR-body sentences: 'tests pass') vs observed (actions rows: the pytest invocation, exit_code, duration — drillable to the raw tool_result block). A PR body audited against ground truth in ~10 seconds. Nearly free: all reads exist. Tell the deleted-prose-miner story as part of the demo (why this exists).","design":"A demo: pick a merged agent-authored PR, resolve PR-\u003eauthoring session via session_commits/session_repos, run get_postmortem_bundle, and render two columns, claimed (PR-body sentences like 'tests pass') vs observed (actions rows: the pytest invocation, exit_code, duration, drillable to the raw tool_result block). Audits a PR body against ground truth in ~10 seconds. All reads exist; tell the deleted-prose-miner story as motivation.","acceptance_criteria":"1. For a chosen merged agent-authored PR, the demo resolves the authoring session from session_commits/session_repos and produces a two-column claim-vs-evidence view: PR-body claim sentences beside the observed actions rows (invocation, exit_code, duration), drillable to the raw tool_result block. 2. The demo composes only existing reads (get_postmortem_bundle) with no new query machinery and includes the deleted-prose-miner motivation. Verify: run against a real merged PR and its authoring session (recorded artifact); the drill-through resolves to an actual tool_result block.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=A-implementation-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/123_polylogue_212_2.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\n[2026-07-10 fable] Kit fork-prompt for this demo escrowed (.agent/scratch/legibility-kit-2026-07-10/fork-prompts/02-polylogue-receipts-demo.md). Two adjudicated upgrades from the GPT strategy-falsification round (dialogue entry [12]): add a COMPARATIVE baseline arm (what grep/naive search would conclude vs structural pairing) and an anti-grep control (prose containing the word error without a failed operation + a genuine structured failure whose output does not contain the word). Also gains substrate deps: prefer building on 212.11 (Incident 14:32) + 212.12 (packet v2) once they land. The private-archive Receipts BENCHMARK (n=60/60, census-gated) is a separate lane owned by the codex agent per the 2026-07-10 dialogue — this bead is the deterministic public demo only.\n[2026-07-10 fable, legibility-v2] Deterministic CONTRACT proof landed: polylogue demo receipts (PR #2662) — claim-vs-structural-receipt with later repair, anti-grep control, stable block/raw/blob refs, honest invalid_demo_evidence degradation. Per the kit v2 beads-delta (escrow .agent/scratch/legibility-kit-v2-2026-07-10/07-BEADS-DELTA.md) this SUPPORTS but does not close this bead: the field proof on a real merged agent PR remains the scope here. polylogue-xyel owns re-emitting it through the demo-packet contract.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:50:58Z","created_by":"Sinity","updated_at":"2026-07-10T17:14:21Z","labels":["area:demos","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T06:50:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:19Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:20Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:21Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:22Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:23Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:24Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":6,"dependent_count":1,"comment_count":0} -{"_type":"issue","id":"polylogue-212","title":"Demo portfolio: construct-valid demos (D1/D2/D4/D5/D8 + post-hoc forensic Q\u0026A)","description":"Ground rule for all: every displayed number resolves, on click or --explain, to structural evidence (outcome fields, usage events, provenance refs, raw bytes) — never regex over prose. Each runs on the deterministic demo corpus (seed 1843) for public reproduction + a live-archive operator variant. D3 (resurrect a dead session) is covered by the context-loop preamble bead + uplift campaign; D6 (Wrapped/one-year-four-assistants) is the forensics campaign artifact; D7 (candidates on trial) is the context-loop judgment flow — do not duplicate them here.\n\nCOMPOSITIONALITY RULE (operator, 2026-07-03): every demo must decompose into product primitives — DSL queries, saved views, read-package layouts, render profiles, workflow registry entries. Shell/python is allowed only as glue (sequencing, narration). If a demo needs bespoke logic beyond glue, that logic is a missing product primitive: file the primitive as a bead, build it, THEN ship the demo on top. Demos are the forcing function for product algebra, not a parallel scripts directory (the agent_forensics.py -\u003e polylogue analyze fold in tf2.2 is the template).\n\nCLARIFICATION (2026-07-08): the glue restriction targets hidden bespoke business logic masquerading as a demo, not the demo agents own reasoning. A demo may run a query, read the result, and decide what to query next based on that judgment — that adaptive loop is not \"bespoke logic requiring a product primitive,\" it is often the very capability being demonstrated (e.g. 212.1 post-hoc forensic Q\u0026A, 212.9 foreman-rhetoric analysis). Only non-primitive DATA TRANSFORMS or COMPUTATIONS belong to the \"file it as a primitive first\" rule; agent-in-the-loop decision-making does not.","design":"Portfolio contract (see 212.7): every demo = executable PROMPT.md emitting the uniform Demo Finding Packet; product primitives only, shell as glue; anti-demo (212.8) ships beside successes. IDEA MENU: a 60-item grounded demo catalog from the 2026-07-06 corpus digestion is preserved at .agent/scratch/corpus-gpt-pro-2026-07-06/D-demos.md — pull from it when extending the portfolio; most items converge on six primitives now tracked elsewhere (query runs rxdo.3, cohorts rxdo.2, annotation batches rxdo.7, artifact edges 1vpm.3, analysis runs rxdo.8, context-compile runs 37t.11/gjg.4). Standouts beyond the current children: Beads swarm autopsy + before/after backlog-quality audit (process story), stale-docs-vs-code reality check, notes-sidecar trap detector, GitHub external-ref reconciliation (operator checklist, never auto-mutation), commit\u003c-\u003esession archaeology both directions (7xv), memory-utility analytics (37t.17), flat-dump-vs-compiled-context (gjg.4/37t.11 arm), archive-root pitfall detector (fold into doctor/adoption lane).\n","acceptance_criteria":"Each demo child (212.1 post-hoc forensic Q\u0026A, 212.2 D1, 212.3 D2, 212.4 D4, 212.5 D5, 212.6 D8) ships in two variants: (a) a public seeded-corpus variant (seed 1843) reproducible with one documented command, and (b) a live-archive operator variant. GROUND RULE: every displayed number resolves, on click or --explain, to structural evidence (outcome fields, usage events, provenance refs, raw bytes) — never regex over prose. COMPOSITIONALITY: every demo decomposes into product primitives (DSL queries, saved views, read-package layouts, render profiles, workflow-registry entries); shell/python is glue only, and any bespoke logic beyond glue is first filed and built as a product primitive. D3/D6/D7 are explicitly out of scope (covered by the context-loop/uplift/forensics campaigns). Epic closeable when all non-deferred children are closed and a cold-reader can drive each public variant to first result unaided. Verify: each child's own acceptance + devtools verify doc-commands over the demo commands.","notes":"PORTFOLIO ORDER (corpus-digested 2026-07-06, defended): first public mini-portfolio = THREE packets: D1 receipts (212.2, the wedge), D4 behavioral archaeology (212.4, query breadth), anti-demo (new child, honesty). Second wave: D3 post-hoc forensic QA (212.1) + method-trace swarm-to-beads (process story — safest inbound narrative per situation brief; must show mistakes/gates/held changes, not velocity porn). Third (after packet runner + rxdo.7 annotation import): cost-by-outcome (212.3, needs outcome join), resume-triage (212.6), external annotation loop (new when rxdo.7 lands), delegation rhetoric (annotation-recipe variant first; true delegation unit 1vpm.1 later — Fable is a cohort, not a silo). Full-direction demos (work reconstruction 7xv.1, context-compile-after-compaction gjg.4, query-objects analysis DAG rxdo) stay LAST — fronting them recreates the deferral pattern the brief warns about. Packet contract + runner + registry = new child; corpus coverage check for seed-1843 should be the first runner step (unverified claim: seeded corpus has fixtures for every today-prompt).\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=A-implementation-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/191_polylogue_212.md (depth: epic-checklist; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\n[2026-07-10 legibility-kit digest, fable] Demo doctrine now public: docs/demos.md (claim/oracle/controls/falsifier/non-claims per demo). New children: polylogue-212.11 (Incident 14:32 shared proof world) + polylogue-212.12 (Demo Packet v2 contract) — these are the kit-recommended substrate BEFORE flagship demos; kit merge order puts them ahead of 212.2 Receipts. Kit expanded portfolio (rejected demos, controls, launch arc) escrowed: .agent/scratch/legibility-kit-2026-07-10/02b-demo-portfolio-expanded.md. Recommended public arc: Receipts -\u003e Count It Once -\u003e (sinex) Missing Source -\u003e (sinex) Changes-Mind-Honestly -\u003e joint World Around the Claim; Resume Under Oath is the honest memory demo (three-arm, stale-memory traps, independent ground truth).","status":"open","priority":4,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:50:57Z","created_by":"Sinity","updated_at":"2026-07-10T14:50:01Z","labels":["area:demos","delivery:L-external-legibility","lane:docs-demos-launch"],"dependency_count":0,"dependent_count":0,"comment_count":0} +{"_type":"issue","id":"polylogue-212.2","title":"PF-D1 'The receipts': claim-vs-evidence on a real PR","description":"Pick a merged agent-authored PR; resolve PR -\u003e authoring session via session_commits/session_repos; get_postmortem_bundle; render two columns: claimed (PR-body sentences: 'tests pass') vs observed (actions rows: the pytest invocation, exit_code, duration \u2014 drillable to the raw tool_result block). A PR body audited against ground truth in ~10 seconds. Nearly free: all reads exist. Tell the deleted-prose-miner story as part of the demo (why this exists).","design":"A demo: pick a merged agent-authored PR, resolve PR-\u003eauthoring session via session_commits/session_repos, run get_postmortem_bundle, and render two columns, claimed (PR-body sentences like 'tests pass') vs observed (actions rows: the pytest invocation, exit_code, duration, drillable to the raw tool_result block). Audits a PR body against ground truth in ~10 seconds. All reads exist; tell the deleted-prose-miner story as motivation.","acceptance_criteria":"1. For a chosen merged agent-authored PR, the demo resolves the authoring session from session_commits/session_repos and produces a two-column claim-vs-evidence view: PR-body claim sentences beside the observed actions rows (invocation, exit_code, duration), drillable to the raw tool_result block. 2. The demo composes only existing reads (get_postmortem_bundle) with no new query machinery and includes the deleted-prose-miner motivation. Verify: run against a real merged PR and its authoring session (recorded artifact); the drill-through resolves to an actual tool_result block.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=A-implementation-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/123_polylogue_212_2.md (depth: bead-localized-from-export; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 \u2014 verify source anchors before coding; line numbers are snapshot-relative.\n[2026-07-10 fable] Kit fork-prompt for this demo escrowed (.agent/scratch/legibility-kit-2026-07-10/fork-prompts/02-polylogue-receipts-demo.md). Two adjudicated upgrades from the GPT strategy-falsification round (dialogue entry [12]): add a COMPARATIVE baseline arm (what grep/naive search would conclude vs structural pairing) and an anti-grep control (prose containing the word error without a failed operation + a genuine structured failure whose output does not contain the word). Also gains substrate deps: prefer building on 212.11 (Incident 14:32) + 212.12 (packet v2) once they land. The private-archive Receipts BENCHMARK (n=60/60, census-gated) is a separate lane owned by the codex agent per the 2026-07-10 dialogue \u2014 this bead is the deterministic public demo only.\n[2026-07-10 fable, legibility-v2] Deterministic CONTRACT proof landed: polylogue demo receipts (PR #2662) \u2014 claim-vs-structural-receipt with later repair, anti-grep control, stable block/raw/blob refs, honest invalid_demo_evidence degradation. Per the kit v2 beads-delta (escrow .agent/scratch/legibility-kit-v2-2026-07-10/07-BEADS-DELTA.md) this SUPPORTS but does not close this bead: the field proof on a real merged agent PR remains the scope here. polylogue-xyel owns re-emitting it through the demo-packet contract.\n\nDEMO NAMESPACE DECISION 2026-07-13: this portfolio uses PF-D* identifiers. The archive-intelligence catalog polylogue-rxdo.10 uses AI-D*. Historical unqualified D1/D2/... text remains an alias only inside its owning parent; cross-program dependencies and external-adoption prose must use the qualified identifier.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:50:58Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","labels":["area:demos","delivery:L-external-legibility","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-212","type":"parent-child","created_at":"2026-07-03T06:50:58Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-9e5.28","type":"blocks","created_at":"2026-07-07T14:53:19Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-9e5.29","type":"blocks","created_at":"2026-07-07T14:53:20Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-9e5.30","type":"blocks","created_at":"2026-07-07T14:53:21Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-cpf.5","type":"blocks","created_at":"2026-07-07T14:53:22Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-cpf.6","type":"blocks","created_at":"2026-07-07T14:53:23Z","created_by":"Sinity","metadata":"{}"},{"issue_id":"polylogue-212.2","depends_on_id":"polylogue-svfj","type":"blocks","created_at":"2026-07-07T14:53:24Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":6,"dependent_count":1,"comment_count":0} +{"_type":"issue","id":"polylogue-212","title":"Proof-world demo portfolio: PF-D1/PF-D2/PF-D4/PF-D5/PF-D8","description":"Ground rule for all: every displayed number resolves, on click or --explain, to structural evidence (outcome fields, usage events, provenance refs, raw bytes) \u2014 never regex over prose. Each runs on the deterministic demo corpus (seed 1843) for public reproduction + a live-archive operator variant. D3 (resurrect a dead session) is covered by the context-loop preamble bead + uplift campaign; D6 (Wrapped/one-year-four-assistants) is the forensics campaign artifact; D7 (candidates on trial) is the context-loop judgment flow \u2014 do not duplicate them here.\n\nCOMPOSITIONALITY RULE (operator, 2026-07-03): every demo must decompose into product primitives \u2014 DSL queries, saved views, read-package layouts, render profiles, workflow registry entries. Shell/python is allowed only as glue (sequencing, narration). If a demo needs bespoke logic beyond glue, that logic is a missing product primitive: file the primitive as a bead, build it, THEN ship the demo on top. Demos are the forcing function for product algebra, not a parallel scripts directory (the agent_forensics.py -\u003e polylogue analyze fold in tf2.2 is the template).\n\nCLARIFICATION (2026-07-08): the glue restriction targets hidden bespoke business logic masquerading as a demo, not the demo agents own reasoning. A demo may run a query, read the result, and decide what to query next based on that judgment \u2014 that adaptive loop is not \"bespoke logic requiring a product primitive,\" it is often the very capability being demonstrated (e.g. 212.1 post-hoc forensic Q\u0026A, 212.9 foreman-rhetoric analysis). Only non-primitive DATA TRANSFORMS or COMPUTATIONS belong to the \"file it as a primitive first\" rule; agent-in-the-loop decision-making does not.","design":"Portfolio contract (see 212.7): every demo = executable PROMPT.md emitting the uniform Demo Finding Packet; product primitives only, shell as glue; anti-demo (212.8) ships beside successes. IDEA MENU: a 60-item grounded demo catalog from the 2026-07-06 corpus digestion is preserved at .agent/scratch/corpus-gpt-pro-2026-07-06/D-demos.md \u2014 pull from it when extending the portfolio; most items converge on six primitives now tracked elsewhere (query runs rxdo.3, cohorts rxdo.2, annotation batches rxdo.7, artifact edges 1vpm.3, analysis runs rxdo.8, context-compile runs 37t.11/gjg.4). Standouts beyond the current children: Beads swarm autopsy + before/after backlog-quality audit (process story), stale-docs-vs-code reality check, notes-sidecar trap detector, GitHub external-ref reconciliation (operator checklist, never auto-mutation), commit\u003c-\u003esession archaeology both directions (7xv), memory-utility analytics (37t.17), flat-dump-vs-compiled-context (gjg.4/37t.11 arm), archive-root pitfall detector (fold into doctor/adoption lane).\n\nDEMO NAMESPACE DECISION 2026-07-13: this portfolio uses PF-D* identifiers. The archive-intelligence catalog polylogue-rxdo.10 uses AI-D*. Historical unqualified D1/D2/... text remains an alias only inside its owning parent; cross-program dependencies and external-adoption prose must use the qualified identifier.","acceptance_criteria":"Each demo child (212.1 post-hoc forensic Q\u0026A, 212.2 D1, 212.3 D2, 212.4 D4, 212.5 D5, 212.6 D8) ships in two variants: (a) a public seeded-corpus variant (seed 1843) reproducible with one documented command, and (b) a live-archive operator variant. GROUND RULE: every displayed number resolves, on click or --explain, to structural evidence (outcome fields, usage events, provenance refs, raw bytes) \u2014 never regex over prose. COMPOSITIONALITY: every demo decomposes into product primitives (DSL queries, saved views, read-package layouts, render profiles, workflow-registry entries); shell/python is glue only, and any bespoke logic beyond glue is first filed and built as a product primitive. D3/D6/D7 are explicitly out of scope (covered by the context-loop/uplift/forensics campaigns). Epic closeable when all non-deferred children are closed and a cold-reader can drive each public variant to first result unaided. Verify: each child's own acceptance + devtools verify doc-commands over the demo commands.\n\nAll child titles, workflow IDs, manifests, and cross-program references use PF-D*; an unqualified D8 reference fails the demo-catalog lint as ambiguous with AI-D8 fleet convergence.","notes":"PORTFOLIO ORDER (corpus-digested 2026-07-06, defended): first public mini-portfolio = THREE packets: D1 receipts (212.2, the wedge), D4 behavioral archaeology (212.4, query breadth), anti-demo (new child, honesty). Second wave: D3 post-hoc forensic QA (212.1) + method-trace swarm-to-beads (process story \u2014 safest inbound narrative per situation brief; must show mistakes/gates/held changes, not velocity porn). Third (after packet runner + rxdo.7 annotation import): cost-by-outcome (212.3, needs outcome join), resume-triage (212.6), external annotation loop (new when rxdo.7 lands), delegation rhetoric (annotation-recipe variant first; true delegation unit 1vpm.1 later \u2014 Fable is a cohort, not a silo). Full-direction demos (work reconstruction 7xv.1, context-compile-after-compaction gjg.4, query-objects analysis DAG rxdo) stay LAST \u2014 fronting them recreates the deferral pattern the brief warns about. Packet contract + runner + registry = new child; corpus coverage check for seed-1843 should be the first runner step (unverified claim: seeded corpus has fixtures for every today-prompt).\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=A-implementation-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=A-implementation-ready.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/191_polylogue_212.md (depth: epic-checklist; urgency: T2-foundation-before-feature-proof). Generated from master @ 8a975a40 2026-07-06 \u2014 verify source anchors before coding; line numbers are snapshot-relative.\n[2026-07-10 legibility-kit digest, fable] Demo doctrine now public: docs/demos.md (claim/oracle/controls/falsifier/non-claims per demo). New children: polylogue-212.11 (Incident 14:32 shared proof world) + polylogue-212.12 (Demo Packet v2 contract) \u2014 these are the kit-recommended substrate BEFORE flagship demos; kit merge order puts them ahead of 212.2 Receipts. Kit expanded portfolio (rejected demos, controls, launch arc) escrowed: .agent/scratch/legibility-kit-2026-07-10/02b-demo-portfolio-expanded.md. Recommended public arc: Receipts -\u003e Count It Once -\u003e (sinex) Missing Source -\u003e (sinex) Changes-Mind-Honestly -\u003e joint World Around the Claim; Resume Under Oath is the honest memory demo (three-arm, stale-memory traps, independent ground truth).","status":"open","priority":4,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:50:57Z","created_by":"Sinity","updated_at":"2026-07-13T06:26:36Z","labels":["area:demos","delivery:L-external-legibility","lane:docs-demos-launch"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-3tl.3","title":"Claim-vs-evidence leaderboard variant (multi-model, incl. open models)","description":"Comparative multi-model variant of the finding: silent-proceed / unsupported-claim rates across models including the open models present in the archive, with cost/cache columns. The open-model rows (DeepSeek, Hermes, other local models once ingested) are the point, not an afterthought — the comparison nobody else can produce is closed-vs-open on identical real-work task classes with structural outcome labels. Must survive adversarial reading and adversarial QUOTING (single rows will be screenshot out of context): stage-separated scoring (extract atomic claims -\u003e align to evidence spans -\u003e score support/contradiction/unknown -\u003e only then summary scores), human spot-checks on a random subset, self-judging contamination controls (the scoring model must not be a contestant, or score with a panel), methodology + limitations up front, per-origin coverage tiers on every row. Only after the base finding passes its cold-reader gate.","design":"Reuse the claim-vs-evidence harness (campaign artifacts under .agent/demos/claim-vs-evidence) — the variant axis is MODEL: silent-proceed / unsupported-claim rates per model family over identical task classes, with cost + cache columns from f2qv-honest accounting. Open-model rows (DeepSeek, Hermes, local via LiteLLM) are the headline. Precondition: enough non-Claude sessions in the archive per task class (coverage gate REFUSES cells below n_min rather than publishing thin comparisons). Output: a Demo Finding Packet (212.7 shape) + leaderboard table render.","acceptance_criteria":"`polylogue-3tl.3` registers every emitted measure with sample frame, evidence tier, denominator, uncertainty/confound notes, and non-claim wording. Empty backing evidence renders unknown/not-supported, not zero. A seeded fixture demonstrates at least one supported finding and one deliberately unsupported result. Verification artifact: one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=D-horizon-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=E-spec-needed.\n[Audit pass 2026-07-09, RECOVERED SUMMARY -- full report lost to worktree cleanup, lower rigor than other 9e5 audit clusters] .agent/demos/claim-vs-evidence/claim-vs-evidence.report.json already has a by_model breakdown including deepseek-v4-pro (open model, n=22) -- the core multi-model comparison already exists. Remaining gaps: cost/cache columns (hard-blocked on epic f2qv), an unverified n_min coverage-refusal gate, and Hermes rows absent from by_model entirely. Follow-ups identified: verify/implement n_min refusal in the generator; investigate why Hermes is absent from by_model. Evidence: .agent/scratch/research/2026-07-09-external-legibility-audit.md section 1.\n[FULL REPORT RECOVERED 2026-07-09] The earlier note on this bead was from a thin recovered summary; the complete original report (with citations) was found intact in the subagent transcript and is now at .agent/scratch/research/2026-07-09-external-legibility-audit.md section 1. Precise numbers: silent_proceed=22, classified_outcomes=22 for deepseek-v4-pro, silent_rate_lower_bound=5.6%. The actual AC-blocking gap is verifying whether devtools workspace claim-vs-evidence already has n_min coverage-refusal logic internally (report schema shows no visible refusal marker) -- this needs a source read of that generator module, not a data-availability fix. See follow-up bead for this.","status":"open","priority":4,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:50:56Z","created_by":"Sinity","updated_at":"2026-07-09T19:45:16Z","labels":["area:legibility","delivery:L-external-legibility","delivery:ac-patched","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-3tl.3","depends_on_id":"polylogue-3tl","type":"parent-child","created_at":"2026-07-03T06:50:56Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-3tl","title":"External legibility: a stranger can understand, run, and cite Polylogue","description":"Every finished artifact proves the substrate is honest; this program makes the project legible to someone with no context. The gap is weeks, not months (fables positioning analysis): the value exists but is illegible from outside. Core diagnosis: the problem is category anchoring, not absence of explanation — name the category ('the system of record for AI work') rather than borrowing chat-viewer/observability/memory/QS buckets that all mis-frame it. Deliverable set: README rewrite around the named category and four verbs (search/analyze/audit/remember), one-command demo, two published evidence artifacts, two recordings, findings with URLs. Discipline: capability-phrased memory claims until the uplift re-run (polylogue-cfk) reports; it, published with its data, is the natural launch post.","acceptance_criteria":"Terminal state: a stranger can (1) understand from the README's first screen, (2) run the one-command demo successfully, (3) cite a published finding URL. All three verified by a cold-reader pass from someone/something with no project context.","notes":"2026-07-06 D01 rerun landed (on-brief; preserved as corpus-gpt-pro-2026-07-06/DR2-01-competitive-landscape.md). Positioning decision it supports: PRIMARY category claim = flight recorder: 'Polylogue is the local flight recorder for AI work — a cross-provider system of record where every metric resolves to raw bytes.' Each clause excludes a crowded incumbent family: local/offline excludes cloud dashboards (LangSmith/Langfuse/Helicone/Phoenix/Weave — all live-instrumentation-first); cross-provider excludes single-platform exporters; system-of-record excludes ephemeral tracing UIs and soft 'memory' branding (Limitless); bytes-resolution excludes dashboard-slop. Nearest neighbors: simonw llm+Datasette (substrate spirit, but CLI logger not system of record) and W and B HiveMind (closest product motion: daemon captures coding-agent sessions incl. Claude Code/Cursor imports — but cloud, team-dashboard, coding-only; watch it). Honesty-benchmark framing DEMOTED to secondary launch artifact: as an umbrella it reads accusatory and narrows to public verification. Target communities: AI Engineer/Latent Space, simonw/local-first crowd, coding-agent power users. Anti-goal: do not launch under observability, memory, or evals labels — each invites the wrong comparison set.\n[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=B-local-inspection-needed; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=B-local-inspection-needed.\n[Prework packet 2026-07-07] Static execution packet (anchors, mechanism, plan, tests, verification): .agent/scratch/corpus-gpt-pro-2026-07-07/prework-v2/task_packets/task_packets/190_polylogue_3tl.md (depth: epic-checklist; urgency: T0-stop-the-line-or-P1). Generated from master @ 8a975a40 2026-07-06 — verify source anchors before coding; line numbers are snapshot-relative.\n[2026-07-10 legibility-kit digest, fable] GPT-5.6 Pro external-legibility kit (219 files) adjudicated + partially landed. Escrow: .agent/scratch/legibility-kit-2026-07-10/ (inspiration, not authority). Landed via feature/docs/external-legibility-kit PR: README flight-recorder rewrite, evidence-first demo tour, docs/demos.md, docs/findings/claim-vs-evidence.md, docs/public-claims.yaml, docs/sinex-interop.md, site nav/hero. Kit launch cut (12-beads-launch-cut.csv) mapped to live beads, statuses corrected: 0hqs CLOSED (#2628 landed the bounded-daemon fix the kit wanted), 3tl.5/212.8/212.4 closed as kit assumed. Kit merge order for the remaining wedge: scenario+oracle substrate (212.11/212.12) -\u003e readiness vocabulary (bby.1) -\u003e semantic renderer slice (ap7) -\u003e Receipts (212.2) -\u003e Count It Once -\u003e narrative from real commands -\u003e site routes (landed) -\u003e install proof (3tl.7) -\u003e integration gates (3tl.9/3tl.10). Rule adopted: polished public copy never merges before the corresponding executable command + proof packet exists.\n[GPT-Pro branch assimilation 2026-07-11] Branch 19 (`6a511407`; mission 09 category/launch) 1.87MB research kit recovered and adjudicated. Adopt evidence/receipts as primary category, Receipts -\u003e Count It Once -\u003e honesty anti-demo, bounded-fixture non-prevalence, provenance and candid privacy. Correct primary `flight recorder/system of record` wording to a qualified analogy/aspiration due category collision and expectation debt; revalidate dated competitor/channel claims before launch. Matrix: `.agent/reports/chatgpt-pro-branch-assimilation-2026-07-11.md`.","status":"open","priority":4,"issue_type":"epic","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:50:54Z","created_by":"Sinity","updated_at":"2026-07-11T11:37:26Z","labels":["area:legibility","delivery:L-external-legibility","lane:docs-demos-launch"],"dependency_count":0,"dependent_count":0,"comment_count":0} {"_type":"issue","id":"polylogue-6l6","title":"Docs/theming/release-proof/control-plane polish","description":"Externally inspectable + internally dogfoodable polish set. PR #2500 already repaired docs-site links. GH issue thread (body + comments) is input, not authority; this bead's scope statement wins where they conflict.","design":"Grab-bag polish set — split on claim if any slice grows: (a) docs theming pass (ui/theme.py tokens applied to docs site), (b) release-proof check (3tl.7 install matrix is the heavy half; this is the docs claim-consistency half — versions/commands in docs match pyproject), (c) control-plane doc currency (docs/devtools.md vs command_catalog.py drift — the doc-commands lint exists, extend to prose). Each slice is independent; none blocks the others.","acceptance_criteria":"Each slice either done or split to its own bead; docs claims about version/commands verified against live surfaces (render checks green). Verify: devtools render all --check + doc-commands lint.","notes":"[Delivery upgrade 2026-07-07T00:05:00Z] Release=L-external-legibility; lane=docs-demos-launch; readiness=D-horizon-ready; proof=one-command demo log, claims-ledger coverage report, install matrix, cold-reader proof. Original readiness=D-horizon-ready.\n[Audit pass 2026-07-09, RECOVERED SUMMARY -- lower rigor] Slice (a) theming: CONFIRMED live drift (every provider hex color differs between polylogue/ui/theme.py and devtools/pages_style.py) -- split to new bead polylogue-p8d5 per this bead's own design note ('split on claim if any slice grows'). Slice (b) release-proof docs claim-consistency: audit found no version-claim drift in installation docs -- tentatively DONE, but this was a lower-rigor recovered-summary pass (the full report with citations was lost to worktree cleanup), so treat as informational rather than a fully verified closure; re-check before relying on it. Slice (c) control-plane doc currency: the recovered summary states 'no standalone control-plane doc exists to audit,' but this may be a MISMATCH with this bead's actual slice-c definition (docs/devtools.md vs command_catalog.py drift, extending the existing doc-commands lint to prose) -- the recovered agent may have looked for a different artifact than intended. Slice (c) should be re-investigated against the bead's own design note before considering it resolved. Evidence: .agent/scratch/research/2026-07-09-external-legibility-audit.md section 7 (recovered summary, not the full report).","status":"closed","priority":4,"issue_type":"chore","owner":"ezo.dev@gmail.com","created_at":"2026-07-03T04:32:25Z","created_by":"Sinity","updated_at":"2026-07-09T19:47:26Z","closed_at":"2026-07-09T19:47:26Z","close_reason":"Full report recovered (was previously kept open on a thin recovered summary pending slice-c re-investigation -- now resolved). All 3 slices addressed per this beads own AC (\"each slice either done or split\"): (a) theming -- CONFIRMED live drift, every provider hex color differs between polylogue/ui/theme.py and devtools/pages_style.py; split to polylogue-p8d5. (b) release-proof docs claim-consistency -- spot-checked, no version-claim drift found in installation.md/README.md (both correctly describe source/Nix-only install without a version claim, consistent with 3tl.7s honest-by-omission finding); full claim-by-claim sweep across all 68 docs files needs polylogue-ttus complete file inventory as a prerequisite, split to polylogue-ccma (blocked on ttu). (c) control-plane doc currency -- CONFIRMED near-zero-work: no docs/control-plane.md or equivalent standalone doc exists; \"control-plane\" only appears as a docstring term (operations/specs.py:1) and a helper name (command_catalog.py control_plane_argv()); the closest existing doc is docs/devtools.md, already gated by verify_doc_commands.py. No standalone surface exists to audit -- closing this slice with no code change, as the report explicitly authorizes. Evidence: .agent/scratch/research/2026-07-09-external-legibility-audit.md section 7 (full report, recovered from subagent transcript after the tracked file was lost to worktree cleanup).","external_ref":"gh-2307","labels":["area:legibility","delivery:L-external-legibility","horizon:frontier","lane:docs-demos-launch"],"dependencies":[{"issue_id":"polylogue-6l6","depends_on_id":"polylogue-3tl","type":"parent-child","created_at":"2026-07-04T21:31:10Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}