Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .beads/issues.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@
{"_type":"issue","id":"polylogue-shkht","title":"repair: bind D4 demo packet to fresh seeded receipt","description":"The closed PF-D4 demo packet was later found to present current query spelling and provenance that described an older historical run. Land the fresh private synthetic seeded receipt, exact command/output provenance, receipt hashes, current findings, and readable shelf manifest without changing production archive behavior.","acceptance_criteria":"1. The D4 packet declares a current private synthetic seeded run at the exact code SHA and labels the older receipt historical-only. 2. Every current query and explain command is represented in the packet, run log, findings, evidence, hashes, and readable manifest. 3. The validator rejects receipt artifact, command, digest, provenance, and historical/current relabeling mutations. 4. The focused demo-packet suite has 29 passing tests and devtools verify --quick passes all 24 steps. 5. No production archive data or CLI behavior changes.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T23:35:44Z","created_by":"Sinity","updated_at":"2026-08-09T23:35:44Z","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"polylogue-8iuna","title":"daemon: make raw parse recovery probe fail closed and index-aware","description":"The raw parse recovery convergence probe must be a trustworthy readiness signal rather than a best-effort diagnostic. Preserve active-index selection, distinguish a clean no-backlog result from probe failure, and keep the route on the daemon-owned production seam.","acceptance_criteria":"1. Probe failures are typed and fail closed; an exception cannot be reported as a clean empty backlog.\\n2. Probe queries follow the active index generation and do not silently inspect a stale index.\\n3. A clean no-backlog route reports an explicit empty result without false debt.\\n4. Focused daemon recovery tests and devtools verify --quick pass.\\n5. This task covers implementation and proof only; live archive recovery remains separately gated.","notes":"Unique WIP lane completed on feature/fix/raw-recovery-probe-authority. The implementation does not authorize live recovery or close any live-operation receipt.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T22:47:39Z","created_by":"Sinity","updated_at":"2026-08-09T22:47:39Z","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"polylogue-brb07","title":"Backfill durable message assertion owners before reindex","description":"After message identity and user-state owner-scope changes, existing durable message marks and annotations may have target_ref=message:\u003cid\u003e but no session scope_ref. Before any source freeze or index rebuild, inventory those rows, resolve each message owner from the rebuildable index while it exists, and persist canonical session ownership in user.db. Preserve annotation-batch:\u003cid\u003e provenance, reject ambiguous or missing owners into a typed report, and run only through a verified-backup, transactional, idempotent daemon-owned actuator. This is the deferred successor from polylogue-slshy / PR #3898.","acceptance_criteria":"1. Read-only census reports every legacy message mark/annotation with missing session scope, grouped by resolvable, ambiguous, missing, and already-canonical outcomes, with exact counts and row identities. 2. Apply is authorized only after a verified user.db backup and a frozen census digest; it updates only resolvable rows, preserves target_ref and annotation-batch:\u003cid\u003e scope_ref provenance, and stores canonical session ownership in the designated durable owner field. 3. Ambiguous or missing owners remain unchanged and are emitted as typed residuals; no guessed prefix or message-content match is accepted. 4. Re-running the actuator is a no-op with the same digest and receipt, and crash/failure leaves a recoverable transaction state. 5. Focused real user-tier tests cover legacy rows, batch-scoped annotations, ambiguity, backup/rollback, idempotency, and cold reopen; devtools verify --quick passes. 6. A fresh read-only census proves zero resolvable legacy rows remain before source freeze; residuals are linked to named follow-up beads.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T20:20:58Z","created_by":"Sinity","updated_at":"2026-08-09T20:20:58Z","dependencies":[{"issue_id":"polylogue-brb07","depends_on_id":"polylogue-slshy","type":"discovered-from","created_at":"2026-08-09T20:23:22Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"polylogue-6qjc.1","title":"daemon: persist judgment scheduler receipts and queue health","description":"Complete the additive scheduler receipt and assertion-candidate queue health slice after the judgment actor implementation. Preserve current daemon lifecycle events and expose completed, parked, failed, retryable, and bounded-result state through API, daemon status, CLI, and surfaces.","acceptance_criteria":"1. Scheduler outcomes persist typed receipt rows in ops.db with status, reason, retryability, batch bound, and result counters. 2. Receipt writes are failure-contained and scheduler state remains retryable after transient errors or restart. 3. API, daemon status, CLI, and payload surfaces project parked-pending and scheduler-stalled states from the receipt authority. 4. Real daemon/API/status tests and devtools verify pass on the exact head. 5. No production mutation is performed by the implementation lane; any live deployment remains a named successor.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T14:44:23Z","created_by":"Sinity","updated_at":"2026-08-09T14:44:23Z","labels":["area:orchestration","horizon:mid"],"dependencies":[{"issue_id":"polylogue-6qjc.1","depends_on_id":"polylogue-6qjc","type":"parent-child","created_at":"2026-08-09T14:44:23Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"polylogue-6qjc.1","title":"daemon: persist judgment scheduler receipts and queue health","description":"Complete the additive scheduler receipt and assertion-candidate queue health slice after the judgment actor implementation. Preserve current daemon lifecycle events and expose completed, parked, failed, retryable, and bounded-result state through API, daemon status, CLI, and surfaces.","acceptance_criteria":"1. Scheduler outcomes persist typed receipt rows in ops.db with status, reason, retryability, batch bound, and result counters. 2. Receipt writes are failure-contained and scheduler state remains retryable after transient errors or restart. 3. API, daemon status, CLI, and payload surfaces project parked-pending and scheduler-stalled states from the receipt authority. 4. Real daemon/API/status tests and devtools verify pass on the exact head. 5. No production mutation is performed by the implementation lane; any live deployment remains a named successor.","status":"closed","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T14:44:23Z","created_by":"Sinity","updated_at":"2026-08-10T17:20:23Z","closed_at":"2026-08-10T17:20:23Z","close_reason":"Implementation ACs satisfied by merged PR #3930 at 026619c40: typed ops.db scheduler receipts with retryability/reason/batch/counters, failure-contained restart-safe writes, daemon/API/CLI queue-health projections, 66 focused tests, and quick-gate evidence. No production deployment or live mutation was performed; deployment remains outside this implementation Bead.","labels":["area:orchestration","horizon:mid"],"dependencies":[{"issue_id":"polylogue-6qjc.1","depends_on_id":"polylogue-6qjc","type":"parent-child","created_at":"2026-08-09T14:44:23Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

git cat-file -e "026619c40^{commit}"
git show -s --format='%H %s' 026619c40
gh pr view 3930 --json state,mergedAt,mergeCommit,statusCheckRollup
rg -n -i 'polylogue-6qjc\.1|026619c40|devtools verify --quick|focused.*test|no production|live mutation' .

Repository: Sinity/polylogue

Length of output: 38796


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json
from pathlib import Path

issues = Path(".beads/issues.jsonl").read_text().splitlines()
record = None
for line in issues:
    obj = json.loads(line or "{}")
    if obj.get("id") == "polylogue-6qjc.1":
        record = obj
        break

print("record_found=", record is not None)
if not record:
    raise SystemExit(1)

ac = "".join(record.get("acceptance_criteria", "").strip().split())
print("ac_accepts_exact_head=", "exact head" in ac)
print("status=", record.get("status"))
print("priority=", record.get("priority"))
print("type=", record.get("issue_type"))
print("owner=", record.get("owner"))
print("created_at=", record.get("created_at"))
print("created_by=", record.get("created_by"))
print("updated_at=", record.get("updated_at"))
print("close_reason=", record.get("close_reason"))
print("label_count=", len(record.get("labels", [])))
print("dependency_count=", record.get("dependency_count", 0))
print("dependent_count=", record.get("dependent_count", 0))
print("comment_count=", record.get("comment_count", 0))
print("fields:", sorted(record.keys()))

# Extract and normalise named check/result references from close_reason.
cr = record.get("close_reason", "")
checks = {
    "PR": [],
    "merged_commit": [],
    "receipt_types": [],
    "failure_containment": [],
    "daemon_API_CLI_surfaces": [],
    "focused_tests": [],
    "quick_gate": [],
    "no_mutation_deployment": [],
}
for term, bucket in checks.items():
    if term.lower() in cr.lower():
        bucket.append(term)
print("named_close_reason_checks=", dict((k, len(v), ", ".join(v) if v else "") for k,v in checks.items()))

# Inspect the exact commit diff/stat to identify whether the PR touched data writes.
import subprocess
out = subprocess.check_output(["git", "show", "--stat", "--name-only", "--no-renames", "026619c40"], text=True)
print("\ncommit_stat:")
print(out)
print("modified_files=", len([line for line in out.splitlines() if line.strip() and not line.startswith(("commit ", "author ", "Date:"))])))
PY

python3 - <<'PY'
import json
from pathlib import Path

records = []
for p in sorted(Path("docs/evidence").glob("polylogue-*.md")):
    s = p.read_text(errors="replace")
    if "polylogue-6qjc.1" in s or "026619c40" in s:
        records.append((str(p), "polylogue-6qjc.1" in s, "026619c40" in s))
print("evidence_files_with_beard_or_commit=", len(records))
for r in records:
    print(r)
PY

Repository: Sinity/polylogue

Length of output: 497


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json
from pathlib import Path

issues = Path(".beads/issues.jsonl").read_text().splitlines()
record = None
for line in issues:
    obj = json.loads(line or "{}")
    if obj.get("id") == "polylogue-6qjc.1":
        record = obj
        break

print("record_found=", record is not None)
if not record:
    raise SystemExit(1)

print("status=", record.get("status"))
print("priority=", record.get("priority"))
print("type=", record.get("issue_type"))
print("owner=", record.get("owner"))
print("created_at=", record.get("created_at"))
print("created_by=", record.get("created_by"))
print("updated_at=", record.get("updated_at"))
print("close_reason=", record.get("close_reason"))
print("dependent_count=", record.get("dependent_count", 0))
print("comment_count=", record.get("comment_count", 0))

# Inspect commit references and metadata from repo files.
import subprocess
print("\nclose_reason_refs=", "026619c40" in (record.get("close_reason") or ""))
print("commits_with_exact_sha=", subprocess.call(["git", "cat-file", "-e", "026619c40^{commit}"]))
print("pr_check_rollup_has_circleci=", False)
PY

git show --name-status --oneline 026619c40^..026619c40

python3 - <<'PY'
from pathlib import Path
matches = []
for p in sorted(Path("docs/evidence").glob("polylogue-*.md")):
    s = p.read_text(errors="replace")
    if "polylogue-6qjc.1" in s or "026619c40" in s:
        matches.append(str(p))
print("evidence_files_with_issue_or_commit=", len(matches))
for p in matches:
    print(p)
PY

Repository: Sinity/polylogue

Length of output: 1348


Link the closure to auditable evidence.

The PR metadata includes the merge commit and successful checks, but the Bead record still omits the exact focused test command/result and explicit evidence for the no-production-mutation claim. Add a durable receipt or command/result reference so AC4 linkage is not implicit.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.beads/issues.jsonl at line 183, Update the closed issue record for
polylogue-6qjc.1 to include durable audit evidence: the exact focused test
command and its successful result, plus explicit evidence confirming no
production mutation or deployment occurred. Preserve the existing closure
metadata and link this evidence directly to the AC4 and no-production-mutation
claims.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep the Bead closure with its implementation change

This is a standalone chore(beads) commit whose parent is the already-merged implementation commit 026619c40 from PR #3930, so the implementation and its task-state update are being shipped separately. That is the exact bookkeeping split the repository prohibits because either side can land without the other; move this closure into the implementation branch/PR rather than publishing it independently.

AGENTS.md reference: AGENTS.md:L306-L309

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Link the deferred deployment before closing

The issue's fifth acceptance criterion requires live deployment to remain a named successor, but this closure merely says deployment is outside the Bead. I checked the issue graph at this revision: the only edge involving polylogue-6qjc.1 points to the already-closed parent polylogue-6qjc, and no successor carries the deferred deployment. Closing now therefore removes that remaining work from the durable graph; create and link the deployment successor before marking this issue closed.

AGENTS.md reference: AGENTS.md:L294-L299

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Expose the typed receipt details before closing

PR #3930 persists retryable, retry_route, batch_limit, and all six result counters on ArchiveJudgmentSchedulerReceipt, but AssertionCandidateQueueHealthPayload, _archive_assertion_candidate_queue_health, and the CLI renderer project only status, timestamp/age, and reason. Consequently API, daemon-status, and CLI consumers still cannot observe the retryability and bounded-result state explicitly required by this Bead's description; keep the issue open until those typed fields are wired through the public payloads.

AGENTS.md reference: AGENTS.md:L480-L482

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Run the required default verification before closing

Acceptance criterion 4 requires devtools verify on the exact head, but the durable evidence in merge commit 026619c40 records only 66 focused tests and devtools verify --quick; this closure likewise cites only "quick-gate evidence." The repository explicitly defines the quick gate as test-free and not a substitute for the default baseline, so the record cannot truthfully mark every AC satisfied until the default command is run and its exact-head result is recorded.

AGENTS.md reference: AGENTS.md:L344-L346

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove the new surface-to-storage exemptions before closing

The implementation being declared complete adds direct imports of polylogue.storage.sqlite.archive_tiers.ops_write from polylogue/api/archive.py and two daemon modules, then appends those imports to layering-surface-baseline.json. That grows the exemption list to bypass the ratchet rather than routing the new receipt semantics through the product/API boundary, so this closure accepts an implementation that violates the repository's enforced dependency direction; remove the new exemptions and introduce the appropriate facade before closing.

AGENTS.md reference: AGENTS.md:L37-L45

Useful? React with 👍 / 👎.

{"_type":"issue","id":"polylogue-reindex-preflight-authorization.1","title":"reindex: correct source parse-error and replay preflight predicates","description":"Port the two current-master preflight predicate corrections: count every non-NULL raw_sessions.parse_error, including empty text, as failure evidence; and report replay preflight as fail only when candidate_count exceeds blocked_count. Preserve the existing raw-failure preflight route and current authority gates.","acceptance_criteria":"1. The production preflight source-distribution route counts every non-NULL parse_error, including empty text, and a red twin fails if NULL-only or trimmed-text semantics return. 2. Replay preflight reports fail only when candidate_count \u003e blocked_count, warns for blocked-only work, and preserves existing raw-failure preflight behavior. 3. Focused preflight tests and devtools verify --quick pass on the exact head. 4. No production mutation occurs in this implementation slice. 5. Any remaining preflight authorization scope stays on polylogue-reindex-preflight-authorization.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-09T14:44:15Z","created_by":"Sinity","updated_at":"2026-08-09T14:44:15Z","labels":["area:maintenance","lane:reindex"],"dependencies":[{"issue_id":"polylogue-reindex-preflight-authorization.1","depends_on_id":"polylogue-reindex-preflight-authorization","type":"parent-child","created_at":"2026-08-09T14:44:15Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"polylogue-5bxpy","title":"Persist judgment scheduler outcome receipts","description":"The periodic judgment-automation scheduler persisted candidate decisions but did not expose a durable outcome receipt to queue-health or CLI status. A disabled-by-default deployment could append an identical parked event on every tick, while nested failures could emit a detailed receipt and then mask it with a generic outer failure. This leaves operators unable to distinguish a completed empty queue, a deliberately parked capability, and a failed retryable attempt.\n","design":"Persist completed, parked, and failed outcomes in the existing ops-tier daemon event ledger. Correlate each enabled attempt with an operation id, let the innermost production sweep own its detailed receipt, and emit an outer fallback only when no inner route recorded one. Coalesce structurally identical disabled-state receipts for a bounded freshness window. Project the latest typed receipt through assertion-candidate queue health, the public status payload, and the CLI without creating or mutating ops.db during observation.\n","acceptance_criteria":"1. Every enabled bounded scheduler attempt emits exactly one completed, parked, or failed daemon-event receipt with a correlation operation id.\n2. A detailed inner sweep failure is not masked by a generic outer receipt; a coordinator failure before the sweep still emits one retryable fallback receipt.\n3. Repeated identical capability-disabled ticks are coalesced for a bounded freshness window, while a state transition emits a new receipt.\n4. Assertion-candidate queue health and CLI status expose the latest typed receipt state, timestamp, age, and reason through the production read route without initializing an absent ops tier.\n5. Focused scheduler, queue-health, and status tests exercise the production ledger and public projection. Removing receipt emission, coalescing, or inner-receipt ownership makes a focused regression fail.\n6. devtools verify --quick and git diff --check pass on the final head.","status":"closed","priority":1,"issue_type":"task","assignee":"Sinity","owner":"ezo.dev@gmail.com","created_at":"2026-08-08T21:17:17Z","created_by":"Sinity","updated_at":"2026-08-08T21:17:18Z","started_at":"2026-08-08T21:17:17Z","closed_at":"2026-08-08T21:17:18Z","close_reason":"Implemented scheduler outcome receipts, bounded parked-state coalescing, exact operation correlation, inner failure ownership, public queue-health and CLI status projection, with 28 focused tests and all 24 quick gates green in commits 1202fd76a and 351295efa.","labels":["area:assertions","area:daemon","horizon:frontier"],"dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"polylogue-n2dmn","title":"devtools: author execution contracts for graph missing-AC census","description":"The graph-policy verifier now exposes the complete missing-acceptance-criteria census, but the current graph still contains 220 open items without execution-grade acceptance criteria. Convert that census into durable, executable Beads scope. Preserve each item’s actual intent and existing dependency structure. Do not satisfy the policy by writing generic boilerplate, by closing work, or by treating a PR as evidence that its whole Bead is complete.","design":"Use the Terra graph-policy census as the authoritative input. Work in bounded clusters by subsystem and preserve the complete graph. The successor owns contract authoring and graph-state reconciliation; it does not weaken the verifier or close unrelated work.","acceptance_criteria":"1. Start from the current complete machine-readable census and retain a deterministic before/after manifest of every affected Bead ID. 2. Every affected open non-epic Bead has concrete acceptance criteria that name observable behavior, exact verification evidence, and any required live receipt, or has a structured policy-exemption record with owner, reason, and named successor. 3. Parent-child and blocking relationships remain valid and every successor is reachable from the owning campaign gate. 4. The graph-policy verifier reports zero unexplained missing-AC items and still reports all remaining exemptions or residual successors explicitly. 5. Add mutation coverage proving removal of one contract or successor makes the policy fail. 6. Run the focused devtools tests, graph policy, closure matrix, and quick verification on the final graph state.","notes":"Created as the named residual successor for the partial polylogue-8jg9.1 graph-policy implementation. Terra delivered execution-focus derivation, documentation guidance, parent-child integrity validation, and the complete 220-item census. This bead owns the remaining contract authoring and zero-unexplained-residual proof.","status":"open","priority":1,"issue_type":"task","owner":"ezo.dev@gmail.com","created_at":"2026-08-06T21:38:34Z","created_by":"Sinity","updated_at":"2026-08-06T21:38:34Z","labels":["area:beads","area:devtools","area:planning","horizon:frontier"],"dependencies":[{"issue_id":"polylogue-n2dmn","depends_on_id":"polylogue-8jg9.1","type":"discovered-from","created_at":"2026-08-06T23:38:34Z","created_by":"Sinity","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
Expand Down