From 12a737ec50d210c8c51149efc0d94d82e7325c71 Mon Sep 17 00:00:00 2001 From: Val Alexander Date: Tue, 21 Jul 2026 08:28:13 -0500 Subject: [PATCH 1/3] ci: add workspace test gate (fmt, clippy, cargo test) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every PR and push to main now runs the full workspace suite — including the RFC-0001 §5 conformance tests and C7 round-trip tests — plus rustfmt and clippy with warnings denied. Closes the observed gap: a fail-closed enforcement layer had no automated test gate on its own PRs. --- .github/workflows/ci.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..d8e29ae --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,26 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +permissions: + contents: read + +jobs: + test: + name: cargo test (workspace) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + - uses: Swatinem/rust-cache@v2 + - name: Format check + run: cargo fmt --all --check + - name: Clippy + run: cargo clippy --workspace --all-targets -- -D warnings + - name: Tests + run: cargo test --workspace From b928e9545a30b72fce7d7f5605b3e49b385f5a94 Mon Sep 17 00:00:00 2001 From: Val Alexander Date: Sun, 26 Jul 2026 04:58:14 -0500 Subject: [PATCH 2/3] ci: enforce declared Rust 1.88 MSRV Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/workflows/ci.yml | 8 ++++---- Cargo.toml | 2 +- docs/STATUS-2026-07-15.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d8e29ae..d7af31b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,13 +14,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@stable + - uses: dtolnay/rust-toolchain@1.88.0 with: components: rustfmt, clippy - uses: Swatinem/rust-cache@v2 - name: Format check - run: cargo fmt --all --check + run: cargo fmt --all -- --check - name: Clippy - run: cargo clippy --workspace --all-targets -- -D warnings + run: cargo clippy --locked --workspace --all-targets -- -D warnings - name: Tests - run: cargo test --workspace + run: cargo test --locked --workspace diff --git a/Cargo.toml b/Cargo.toml index e1c41ea..52ce019 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ members = ["crates/coven-threads-core"] [workspace.package] version = "0.1.0" edition = "2021" -rust-version = "1.75" +rust-version = "1.88" license = "MIT" authors = ["Valentina Alexander "] repository = "https://github.com/OpenCoven/coven-threads" diff --git a/docs/STATUS-2026-07-15.md b/docs/STATUS-2026-07-15.md index edbe205..3e04a1a 100644 --- a/docs/STATUS-2026-07-15.md +++ b/docs/STATUS-2026-07-15.md @@ -68,7 +68,7 @@ Dependency spine: Phase 2 epic (986.14) was blocked by Phase 1 work and permissi ## 5. Phase 1 + Phase 2 crate side — landed -- Root `Cargo.toml` — workspace (resolver 2, edition 2021, MSRV 1.75; deps: serde, serde_json, thiserror, uuid, blake3, time; `unsafe_code = "forbid"`, `missing_docs = "warn"`). +- Root `Cargo.toml` — workspace (resolver 2, edition 2021, MSRV 1.88; deps: serde, serde_json, thiserror, uuid, blake3, time; `unsafe_code = "forbid"`, `missing_docs = "warn"`). - `crates/coven-threads-core/` (`86550d8`) — `ids`, `strand`, `thread`, `channel`, `fray`, `pattern`, `weave`, `manifest`, `validate` (§5 receiver), plus `tests/rfc0001_s5_conformance.rs` (465 lines). - Phase 2 crate side (`5e68957`) — `audit.rs` (`ward.audit` contract, 285 lines) + `staging.rs` (DegradeToProposal records, 206 lines). From 77276437bcae17737fc3b2a5a4518e2ed38f7f6e Mon Sep 17 00:00:00 2001 From: Val Alexander Date: Sun, 26 Jul 2026 05:43:44 -0500 Subject: [PATCH 3/3] chore(beads): preserve main interaction history Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .beads/interactions.jsonl | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/.beads/interactions.jsonl b/.beads/interactions.jsonl index c00e752..e195e3c 100644 --- a/.beads/interactions.jsonl +++ b/.beads/interactions.jsonl @@ -23,3 +23,57 @@ {"id":"int-826011e5ee8ee8d205e7e838693c8fa1","kind":"field_change","created_at":"2026-07-17T14:52:45.121813Z","actor":"Val Alexander","issue_id":"threads-986.17.9","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"Phase 4 FREEZE executed 2026-07-17 (Val approval recorded on this bead 2026-07-15; gate:val-phase4-freeze satisfied). Epic AC verified: (1) all four surfaces live+functional behind fixtures adapter (daemon flip filed as threads-v3g) — /weaves rail, thread pane, strand inspector, /proposals approval, merged in coven-cave PR #3223; (2) metaphor-referent binding preserved — Nova sign-off .17.8 closed 2026-07-17 with all three coherence checks PASS, no findings; source-pin suites hold referents in CI; (3) Charm pass complete (.17.7); (4) proposal flow E2E over real staged fixtures (.17.6); contract spec landed on main via PR #1 (a55d99af1). Children .17.1-.17.8 + .17.10 all closed with evidence. goals.md updated."}} {"id":"int-a0bacc8f5edaee7a580c1a218a43157a","kind":"field_change","created_at":"2026-07-17T14:52:46.121787Z","actor":"Val Alexander","issue_id":"threads-986.17","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"EPIC SUMMARY — Phase 4 Cave UX complete. Built: PHASE-4-CAVE-SURFACES.md contract (PR #1, a55d99af1); read plumbing with dual adapters (fixtures-first default, daemon behind same interface); weave rail with tension rollup (snapped>frayed>unknown>stale>holds); thread pane Holds/Frayed/Snapped with strands + channel bindings; strand inspector with tri-state diff + R7 lineage; proposal approval flow (staged DegradeToProposal, approve/reject daemon-forwarders, fail-closed everywhere) — all merged via coven-cave PR #3223 (645a1894 head, 18 checks green, test:app 740/740). Gates: Charm voice pass .17.7; Nova coherence sign-off .17.8 (PASS, no findings); Val UX-accept .17.10; Val freeze approval .17.9. Rendering rules R1-R11 enforced fail-closed; PatternDescriptor never rendered as enforcement; Gate-4 unknown states render Blocked. Follow-up: threads-v3g (daemon endpoints + adapter flip). Screenshots 01-07 at ~/.openclaw/workspace/sage/goals/phase4-artifacts/."}} {"id":"int-8181a70aeede0f1b0c58cd5fa4521a68","kind":"field_change","created_at":"2026-07-17T14:53:21.464406Z","actor":"Val Alexander","issue_id":"threads-986","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"PROGRAM EPIC COMPLETE — all four AC met. (1) Phases 0-4 delivered: v0.2 design freeze (.4); Phase 1 crate freeze (.18, coven-threads-core through v0.1.3); Phase 2 daemon integration freeze (.20, coven PR #382 merged f745117 — gate operational on main, + WARD-C6 compaction hook PR #393); Phase 3 portability freeze (.21, + jq4 surfaces map/.af exporter PR #2); Phase 4 Cave UX freeze (.17, coven-cave PR #3223). (2) RFC-0001 §5 conformance mirror 14/14 (.11). (3) Daemon imports validator: tier-0 edits route through validate_fail_closed, pinned v0.1.3. (4) Portability ships with C7 survives-serialization enforced (c7_roundtrip suite; C1-C7 jointly canonical in grimoire §9 per .12). 30 child beads closed with evidence. Remaining non-child follow-up: threads-v3g (daemon endpoints + adapter flip)."}} +{"id":"int-66ac26cbefee070c08321748420bad15","kind":"field_change","created_at":"2026-07-17T19:21:41.010774Z","actor":"Val Alexander","issue_id":"threads-eql","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"MERGED coven PR #409 (a9724b09), all checks green. ward_manifest baselines advance on every committed protected write (store_baseline upsert + advance_surface_baseline post-apply); refusals keep pending files and append proposal-scoped audit rows. Independently live-verified on the PR branch with a hermetic daemon over the real socket: baseline hash advanced after approve; the previously-broken second cycle (drift->stage->restore-to-advanced-baseline->approve) applied 200; refused approve kept file + audited and retry stayed viable. Clarified: tier-0 POST /edits is HeldForCoherence by design — approve is the sole tier-0 commit point."}} +{"id":"int-8c4cb8b33a94f385798ab5be6d435d8d","kind":"field_change","created_at":"2026-07-17T19:21:42.881808Z","actor":"Val Alexander","issue_id":"threads-v3g","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"COMPLETE, both sides merged. Daemon: coven PR #408 (85566ba) GET /api/v1/threads/weaves + POST /api/v1/threads/proposals/{id}/{approve|reject} per spec §3/§3.7, + P1 follow-up PR #409 (a9724b09, threads-eql) making multi-cycle approves work. Cave: coven-cave PR #3362 (3db8547c8) — daemon adapter is the DEFAULT (spec §1 fixtures-first condition lapsed; COVEN_THREADS_ADAPTER=fixtures opts out), daemon semantic refusals surface verbatim (proposal-refused/not-found/proposal-corrupt, 409/404) instead of transport-shaped 503. Live-verified end to end through the real socket with a hermetic daemon: reads normalize, staging, drift refusal, approve apply, corrupt guard, unknown-id fail-closed. Validation: coven gates green; cave test:app 758/758 + typecheck on merged head. Stowaway Desktop commit rescued to rescue/val-ui-tweaks-2026-07-17 (needs its own PR)."}} +{"id":"int-be6d3f843b0a440d8eb1d1c81d475d32","kind":"field_change","created_at":"2026-07-18T07:02:18.244791Z","actor":"Val Alexander","issue_id":"threads-vmf","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"MERGED coven PR #418 (b98504cd, all checks green incl. windows after cfg fix 2001da04). Root cause: handler Err propagated out of threads_weaves_response on the first WardConfig::load failure and daemon::handle_http_stream ?-returned before writing any HTTP bytes (empty reply, curl exit 52). Fix: per-familiar isolation (log to stderr + daemon-recovery.log, skip, continue — never abort fleet read) and handle_http_stream converts api handler errors to JSON 500 envelopes for every endpoint. Independently live-verified on the PR branch: fleet of healthy sage + Val's REAL v0.1-dialect nova ward.toml returns 200 with sage listed. Tests: threads_weaves_skips_malformed_ward_without_aborting_fleet_read, handle_http_stream_converts_api_handler_error_to_json_500. Surfacing of malformed-config familiars in the UI deferred to threads-v60 migration lane."}} +{"id":"int-b1b336460d93e610124263159faeada3","kind":"field_change","created_at":"2026-07-18T07:02:19.14866Z","actor":"Val Alexander","issue_id":"threads-wro","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"MERGED coven-cave PR #3407 (d1edf3e6, 19/19 checks). preferences-store + theme-store suites now set a hermetic temp COVEN_HOME so cave-home reconciliation stops walking the real ~/.coven legacy symlinks against temp canonical overrides. Verified locally on a migrated machine: both suites + backdrop/migration siblings green; remaining test:api failure is the separately-tracked pre-existing tts flake (cave-k7i3 pattern)."}} +{"id":"int-b0352cdd9a72fadc88de97b11bb2f4b9","kind":"field_change","created_at":"2026-07-18T08:11:35.780927Z","actor":"Val Alexander","issue_id":"threads-v60","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"COMPLETE. Command: coven ward migrate merged in coven PR #419 (74b09cd1, all checks green incl. windows after TOML-escape fixture fix 023dc5bb); shipping in v0.1.5 (signed tag pushed, release pipeline running). Fleet migration APPLIED on Val's machine 2026-07-18 with Val's decisions (SSH signing-key fingerprint via runtime arg; protected->tier 0 + protected_surface; editable->tier 2 Logged; backup-only legacy disposition): all nine familiars migrated with byte-exact ward.toml.v01.bak backups; thoth additionally needed a familiars.toml workspace= line (added, backup kept). Live verification post-kickstart: GET /api/v1/threads/weaves HTTP 200 with nine weaves, 4-8 threads each, all tensions Holds, all coherence Coherent — the authority-boundary protection layer is now live over real familiar memory. v0.1 approval_tiers/harness_blocks/invariants semantics intentionally not carried (no Phase-2 equivalent; preserved in backups)."}} +{"id":"int-7c8ce4baece71955acd514e5c34b1e12","kind":"field_change","created_at":"2026-07-18T08:24:30.113404Z","actor":"Val Alexander","issue_id":"threads-2q5","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"MERGED coven PR #393 2026-07-15 (daemon main; verified via git log 04e0ce7 ancestor of main). WARD-C6 CompactionLedger events append in store::vacuum_store_path with pre/post thread commitments; tests vacuum_appends_compaction_ledger_for_warded_surface, vacuum_without_warded_surfaces_appends_no_compaction_ledger, compaction_ledger_keeps_ward_audit_append_only. Full evidence in bead comments. Closing stale in_progress claim from coordinator session."}} +{"id":"int-45fee6c5015cd238bdf2b4f49197d1c5","kind":"field_change","created_at":"2026-07-18T08:24:30.930406Z","actor":"Val Alexander","issue_id":"threads-jq4","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"MERGED coven-threads PR #2 2026-07-15 (5b4a51a on main), tag v0.1.3 cut at that commit and coven pin bumped (30474c3). Surfaces content map + export_af lossy one-way Letta exporter, no .af import path, C7 conformance in tests/c7_roundtrip.rs. Full evidence in bead comments. Closing stale in_progress claim from coordinator session."}} +{"id":"int-96e600594080674425edaa10b7a4934c","kind":"field_change","created_at":"2026-07-18T12:03:18.346804Z","actor":"Val Alexander","issue_id":"threads-k9s","extra":{"field":"status","new_value":"open","old_value":"in_progress"}} +{"id":"int-3992491181076736d0b8c9d8072dd308","kind":"field_change","created_at":"2026-07-18T12:03:18.909381Z","actor":"Val Alexander","issue_id":"threads-3xd","extra":{"field":"status","new_value":"open","old_value":"in_progress"}} +{"id":"int-019bebf2d54257621bcb1e7d3bf06f74","kind":"field_change","created_at":"2026-07-18T12:03:19.445615Z","actor":"Val Alexander","issue_id":"threads-uqx","extra":{"field":"status","new_value":"open","old_value":"in_progress"}} +{"id":"int-1805bcc20e8bca84ac7425b1877298a9","kind":"field_change","created_at":"2026-07-18T14:42:35.772492Z","actor":"Val Alexander","issue_id":"threads-k9s","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"COMPLETE, both halves merged. Spec: §2.7 DegradedFamiliarView + §4.R12 + route-1 WeaveListView shape (coven-threads main 6476a67 + 6829e5d). Daemon: coven#422 merged e04a7af8 (reopened after accidental close; branch restored from verified head e5dd8fc5) — degraded entries with const reason + sanitized single-line errors, recovery-log breadcrumbs kept, no-ward familiars skipped. Cave: coven-cave#3415 merged 037bca078 — WeaveListView {weaves, degraded}, R12 blocked rail rows with exact copy 'ward unreadable — protection not verifiable', traceForDegradedFamiliar drawer, degraded fixture, forward-compat unknown reasons; typecheck + test:app 774/774. Fail-visible gap from threads-vmf closed end to end."}} +{"id":"int-c49d97f567aa70cc2b8d289e925f4114","kind":"field_change","created_at":"2026-07-18T14:45:05.028849Z","actor":"Val Alexander","issue_id":"threads-0ip","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"MERGED coven PR #426 (7ad55434), all checks green. Root causes fixed, not papered over: (1) windows pty_runner codex_json_batch_shim flake — side-effect files (args.txt/stdin.txt) were read before reliably visible on windows; now condition-based read_side_effect_file polling with deadline; (2) ubuntu smoke session-kill timeout — record_session_exit's natural-exit path could overwrite a concurrent 'killed' status; now update_session_status_if_current CAS (UPDATE ... WHERE status='running') with unit test conditionally_updates_session_status_only_from_expected_current_status; daemon.rs exit recorder uses it. Coordinator-reviewed the product diff. No assertions weakened, no quarantines needed."}} +{"id":"int-eefa76ec3968a5d984f3da51e113add6","kind":"field_change","created_at":"2026-07-18T21:24:21.080221Z","actor":"Val Alexander","issue_id":"threads-3ym","extra":{"field":"status","new_value":"in_progress","old_value":"open"}} +{"id":"int-17b3b70454cfdb7bbdaca849bc30ad2f","kind":"field_change","created_at":"2026-07-18T21:25:07.575924Z","actor":"Val Alexander","issue_id":"threads-3ym","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"PR #7 opened: https://github.com/OpenCoven/coven-threads/pull/7. 75+17+14 tests green, clippy clean. Awaiting merge + v0.1.4 tag."}} +{"id":"int-7791cce5b8c95cc770ff67201a388f0f","kind":"field_change","created_at":"2026-07-20T01:48:39.734894Z","actor":"buns","issue_id":"threads-uqx.1","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"Decision evidence recorded in specs/PHASE-5-APPROVAL-SEMANTICS.md §6: ApprovalPath remains separate from Channel, delayed apply only, classify-first regions, deterministic predicates with advisory probes. Review correction remains required in PR #6 wording but does not change the underlying decisions."}} +{"id":"int-9966b3d0e31a940a462c3cea9f37453a","kind":"field_change","created_at":"2026-07-20T01:48:41.992184Z","actor":"buns","issue_id":"threads-uqx.3","extra":{"field":"status","new_value":"in_progress","old_value":"open"}} +{"id":"int-717d934e64e2063f31f3d85ad8d6787f","kind":"field_change","created_at":"2026-07-20T01:48:41.993328Z","actor":"buns","issue_id":"threads-uqx.3","extra":{"field":"assignee","new_value":"buns","old_value":""}} +{"id":"int-63144f5f87dec873241bda17e3a475ad","kind":"field_change","created_at":"2026-07-20T01:48:42.613203Z","actor":"buns","issue_id":"threads-uqx.4","extra":{"field":"status","new_value":"in_progress","old_value":"open"}} +{"id":"int-dfb61f7cf9804578c0e166bc37ea8713","kind":"field_change","created_at":"2026-07-20T01:48:42.614914Z","actor":"buns","issue_id":"threads-uqx.4","extra":{"field":"assignee","new_value":"buns","old_value":""}} +{"id":"int-8e47cbe0918dbb92f310ab3f8cf0a584","kind":"field_change","created_at":"2026-07-20T01:48:43.357281Z","actor":"buns","issue_id":"threads-uqx.5","extra":{"field":"status","new_value":"in_progress","old_value":"open"}} +{"id":"int-c1f6aff58fbd7b5eb8a3580151856d55","kind":"field_change","created_at":"2026-07-20T01:48:43.358634Z","actor":"buns","issue_id":"threads-uqx.5","extra":{"field":"assignee","new_value":"buns","old_value":""}} +{"id":"int-37c96749f6bfd7f56271ae11149f010d","kind":"field_change","created_at":"2026-07-20T03:26:16.179641Z","actor":"Val Alexander","issue_id":"threads-uqx.3","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Implemented and pushed in PR #15 commit 7da030d: Channel-independent ApprovalPath, conservative veto aggregation, checked deadline/min-visible arithmetic, validated wire deserialization, path-specific approval audit detail, and 0.2.0 API. Evidence: 160 unit + 17 C7 + 14 RFC tests, clippy -D warnings, rustfmt, SQLite lifecycle checks, and final independent review with no blocking findings."}} +{"id":"int-7bc189d35bf8e0c91a3ffaa0c6e4b7ef","kind":"field_change","created_at":"2026-07-20T03:26:16.719143Z","actor":"Val Alexander","issue_id":"threads-uqx.4","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Implemented and pushed in PR #15 commit 7da030d: normative single/double-quoted five-field invariant compiler, candidate-harness fact commitments, IdentityAwarePattern wired through MutationRequest -> validate -> Weave predicate authority, advisory-only probes, and fail-closed missing/stale/drift evidence. Full Rust gates and final independent review passed."}} +{"id":"int-428bbec06515ae4a9624c587090ea7fe","kind":"field_change","created_at":"2026-07-20T03:26:17.267621Z","actor":"Val Alexander","issue_id":"threads-uqx.5","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Implemented and pushed in PR #15 commit 7da030d: validated unique MaterializedDiff, replayable semantic regions, canonical framed evidence, and evidence_replay_hash bound to every surface in the complete diff including unclassified surfaces. Full Rust gates and final independent review passed."}} +{"id":"int-b774f505d4b5cb5d0c1b56694c890e6d","kind":"field_change","created_at":"2026-07-20T03:27:20.191799Z","actor":"Val Alexander","issue_id":"threads-uqx.11","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Completed in PR #6 commit 7eb8522: protected-target proposal path corrected to RFC Gate 1/2/4 rejection; RFC/schema gate threads-uqx.12 and authorized corpus gate .13 added and wired; human gate evidence made independently attributable; final fresh-context review found no significant issues; git diff --check clean; branch pushed."}} +{"id":"int-bc40668949492cdd283dde767b0d1551","kind":"field_change","created_at":"2026-07-20T06:36:32.714408Z","actor":"Val Alexander","issue_id":"threads-uqx.6","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Completed in OpenCoven/coven PR #430 commit 5ed9c56. Evidence: scheduled classification and strict envelopes; no apply before deadline/minimum visibility; durable restart-safe approve/reject/veto claims; claim-time rationale and veto timestamp persistence; fail-closed materialized evidence replay and live Tier-0 escalation rejection; one idempotent append-only lifecycle audit sequence with committed Channel; transactional approved baseline finalization; atomic conditional existing-file commits preserving concurrent bytes. cargo fmt --check, clippy -D warnings, and full coven-cli test suites passed (1262 unit tests after final regression plus integration suites); final independent review reported no significant issues."}} +{"id":"int-11d264fd2d2cc280e3ac6937bb06eadb","kind":"field_change","created_at":"2026-07-20T06:37:53.14557Z","actor":"Val Alexander","issue_id":"threads-uqx.7","extra":{"field":"assignee","new_value":"buns","old_value":"Val Alexander"}} +{"id":"int-5c2d24616b0f43f292fa6a8ae8cbf827","kind":"field_change","created_at":"2026-07-20T07:09:41.218293Z","actor":"Val Alexander","issue_id":"threads-aai","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Implemented proposal authority normalization with canonical revision hashing, Phase 5 verified/blocked/legacy handling, and passing threads-read tests at commit d1efad63fadbf51bccc8f2a19273c7fc760cd5c7."}} +{"id":"int-62e731558cce453b26938000f4850398","kind":"field_change","created_at":"2026-07-20T08:14:08.195976Z","actor":"Val Alexander","issue_id":"threads-44o","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Superseded by coven-threads PR #15 (7da030d) and coven PR #430; PR #7 remains closed. Reviewed repair branch 31ae385 preserved as archive/reference, with no merge intended."}} +{"id":"int-0da81169a2c8079b1fd4b35b1cd30b1b","kind":"field_change","created_at":"2026-07-20T09:58:28.57968Z","actor":"Val Alexander","issue_id":"threads-9w8","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Preserved staged legacy reviewKind values and fail-closed on staged/daemon disagreements; validated with targeted tests and typecheck in coven-cave phase5-veto-contract."}} +{"id":"int-5894dea092aa193dfb99528415881dfe","kind":"field_change","created_at":"2026-07-20T12:46:19.051207Z","actor":"Val Alexander","issue_id":"threads-uqx.6","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"Completed on OpenCoven/coven PR #430 at head f04bce07: daemon-owned classification and scheduler, durable revision-bound claims, deadline/minimum-visible revalidation, fail-closed committed-evidence replay, conditional atomic writes with macOS/Linux/Windows support, coherent append-only audit/baseline finalization, and startup recovery. Local rustfmt, clippy -D warnings, full coven-cli tests, Linux Docker smoke 25/25, Windows runtime CI, npm onboarding, Rust CI, and CodeQL all pass; fresh reviews found no significant issues."}} +{"id":"int-15146bc93455ac509c3c34128ab158d0","kind":"field_change","created_at":"2026-07-20T12:46:20.051298Z","actor":"Val Alexander","issue_id":"threads-uqx.7","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Completed contract and Cave lifecycle lane: coven-threads PR #16 head a00cf57 defines daemon-first lifecycle/revision/identity binding and exact wire normalization; coven-cave PR #3581 head e326f411 implements canonical revision verification, staged/daemon joins, blocked fixtures, expectedRevision forwarding, lifecycle-specific Approve/Reject/Veto UI, rationale accessibility, and held-response staleness. Focused suites/typecheck and all GitHub CI/CodeQL/E2E/cross-platform checks pass; final fresh-context review approved. No Nova/Val approval or freeze was simulated."}} +{"id":"int-ab3e2f27c9a2441fd091c9a9be60b9b8","kind":"field_change","created_at":"2026-07-21T09:37:10.556772Z","actor":"Val Alexander","issue_id":"threads-uqx.7","extra":{"field":"status","new_value":"in_progress","old_value":"closed"}} +{"id":"int-0fbe5c46a71e83ab36f5f8ea37de9ee3","kind":"field_change","created_at":"2026-07-21T12:43:02.791511Z","actor":"Val Alexander","issue_id":"threads-vv2.1","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"README.md, docs/README.md, docs/phases.md, CHANGELOG.md updated: Phase 4 now [COMPLETE; FROZEN 2026-07-17] with PR #3223 + gate evidence; Phase 5 [ACTIVE] section/rows added with full bead ledger; test counts 98→191 (160 unit, 17 C7, 14 §5 conformance); CHANGELOG v0.2.0 Phase 5 bullet expanded with spec link and one-line meanings."}} +{"id":"int-8396ba6b182c54b6e050177482a0b2ad","kind":"field_change","created_at":"2026-07-21T12:43:03.875216Z","actor":"Val Alexander","issue_id":"threads-vv2.2","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"architecture.md gained 'Phase 5: approval semantics and delayed apply' section (daemon-owned intake→classify→window→deadline→replay flow, crate-vs-daemon split, audit lifecycle table, diagram embed, spec pointer); authority-model.md DegradeToProposal now explains ApprovalPath ceremony routing; concepts.md gained Channel-vs-ApprovalPath orthogonality subsection (never derive ApprovalPath from Channel); channels-and-strands.md binds RFC-0001 §5.3 veto-window mention to the typed VetoWindow contract. Follow-up stale headers found by agent fixed by coordinator (authority-model status line, concepts Phase 4 label)."}} +{"id":"int-024400338883148f9fc6366e43a60f97","kind":"field_change","created_at":"2026-07-21T12:43:04.826996Z","actor":"Val Alexander","issue_id":"threads-vv2.3","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"glossary.md: 14 Phase 5 entries added (ApprovalPath, ApprovalPathKind, VetoWindow, ProposalClassification, SurfaceRegion family, RegionEvidence, MaterializedDiff, evidence_replay_hash, WindowCloseReason, IdentityInvariantDeclaration/Set, AdvisoryProbe, delayed apply) + stale Coven Cave 'not started' entry fixed. faq.md: 4 Phase 5 Q&A entries (ApprovalPath⊥Channel, Gate-4 fail-closed via delayed apply, regions-not-threads, daemon-owned scheduler)."}} +{"id":"int-67fcea0a3f4df85d29ef118374030c06","kind":"field_change","created_at":"2026-07-21T12:43:05.78819Z","actor":"Val Alexander","issue_id":"threads-vv2.4","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"docs/diagrams/src/delayed-apply-scheduler.mmd created in house style (daemon containment, forbidden no-provisional-apply edge, ward.audit rows per transition, APPLY reachable only through live re-materialization); rendered to .svg/.png via render.sh; diagrams/README.md row added citing PHASE-5-APPROVAL-SEMANTICS §4/decision 2 + coven PR #430. Diagram uses spec vocabulary — no proposal_expired terminal event. Incidental re-render churn on other diagrams reverted."}} +{"id":"int-4e97bac11f26e449bf7891fa7b64ae0c","kind":"field_change","created_at":"2026-07-21T12:48:47.238725Z","actor":"Val Alexander","issue_id":"threads-vv2.6","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Review complete + safe hardening applied. Findings: 2 enforcement-semantics issues filed for owner decision (threads-kzu missing-veto fail-open edge, threads-4ah cross-variant veto-window drop, both human-flagged); 6 safe changes landed: deserialize-boundary validation for AdvisoryProbeResult (try_from wire pattern), exhaustive validate_event_detail match, ApplyAudit detail-shape validation arm, #[must_use] on ApprovalPath::highest + evidence_replay_hash, SQL-literal drift tests for WindowCloseReason tags + approval-path labels, event_type guard on apply-detail accessors. Perf: clean bill (per-request validator, no hot-path issues). Gates: fmt clean, clippy -D warnings clean, 201 tests green (was 191; +10 new)."}} +{"id":"int-f36c0fed926a16505642e840a31553a4","kind":"field_change","created_at":"2026-07-21T12:54:15.707114Z","actor":"Val Alexander","issue_id":"threads-kzu","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"FIXED per Val authorization (goal session 2026-07-21). approval.rs: AutoRegression.veto now uses a field-level deserialize_with (deserialize_required_veto) that makes the wire key REQUIRED while keeping explicit veto:null valid — an absent key rejects instead of resolving to the most-permissive no-window path. Compatibility verified before landing: coven PR #430 serializes via serde_json::to_value on this crate's ApprovalPath, which always emits veto:null for None (no skip_serializing_if), so every daemon-emitted payload carries the key; local coven checkout pins tag v0.1.3 and is unaffected until the pin bumps. Note for the pin-bump: PR #430's raw-JSON verifier tolerates an absent key on auto_regression, but typed deserialization now rejects it — fail-closed, correct direction. Tests: auto_regression_requires_the_veto_key_on_the_wire, auto_regression_serialization_always_emits_the_veto_key. Gates: fmt/clippy -D warnings clean, 205 tests green."}} +{"id":"int-ac523eb518c56c8008b75050db175151","kind":"field_change","created_at":"2026-07-21T12:54:16.467256Z","actor":"Val Alexander","issue_id":"threads-4ah","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"FIXED per Val authorization (goal session 2026-07-21). approval.rs ApprovalPath::highest cross-variant arm now mirrors the equal-variant discipline: a FamiliarCoherence winner merges with an AutoRegression loser's window via VetoWindow::strongest (max duration, max min_visible), so elevating ceremony can no longer shrink a veto window a touched surface demanded. Human-path winners still drop lower windows BY DESIGN — blocked-until-explicit-approval is strictly stronger than any veto period — now documented in code. Tests: cross_variant_highest_merges_the_losing_paths_veto_window (both orders), human_paths_drop_lower_windows_by_design. Gates: fmt/clippy -D warnings clean, 205 tests green."}} +{"id":"int-c072eb01989565a4d3aa4552d0b5fb1e","kind":"field_change","created_at":"2026-07-21T12:54:17.726552Z","actor":"Val Alexander","issue_id":"threads-vv2.5","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"RESOLVED per Val authorization (goal session 2026-07-21): superseded draft removed from the crate. Evidence: never declared in lib.rs (never compiled), cites uqx.6 which closed with the scheduler implemented daemon-side in coven PR #430 (daemon-owned decision), and used spec-forbidden vocabulary (WindowCloseReason::Expired, AuditEventType::ProposalExpired — spec §4: no proposal_expired terminal event). Archived first at ~/Documents/GitHub/OpenCoven/.archive/proposal_scheduler.rs.superseded-draft-2026-07-21, then deleted. Workspace gates green after removal (205 tests)."}} +{"id":"int-7b32ae7e11ca8407e0b1462eaec0cd27","kind":"field_change","created_at":"2026-07-21T12:54:18.843409Z","actor":"Val Alexander","issue_id":"threads-vv2","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"EPIC COMPLETE (goal session 2026-07-21). All 6 children closed. Delivered: full docs/diagrams/README sync to Phase 4 frozen + Phase 5 active reality; new delayed-apply-scheduler diagram; Phase 5 vocabulary in glossary/FAQ; best-practices review with 6 safe hardening changes plus 2 enforcement fixes authorized by Val (threads-kzu, threads-4ah); superseded proposal_scheduler.rs draft archived and removed. Final gates: rustfmt clean, clippy -D warnings clean, 205 workspace tests green (was 191 at session start, 98 in docs). All changes uncommitted pending Val commit approval per conservative profile."}} +{"id":"int-a7c868205e7c5dfb60c48441054b65e4","kind":"field_change","created_at":"2026-07-21T15:54:13.274794Z","actor":"Val Alexander","issue_id":"threads-uqx.13","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"DONE: synthetic retired-Ward corpus landed on main via PR #21 squash f7947f1 (salvage of c6cdb60 per issue #20, onto post-#15 veto-hardened core). Evidence: repository-owned digest-pinned generator (examples/generate_phase5_retired_ward_corpus.rs) + conformance tests covering 5 identity fields, 4 approval labels, veto settings (valid+invalid), all built-in harness regions, 6 fail-closed unsupported cases incl. duplicate/absent-both/unchanged materialized diffs (try_new tightening, no wire bypass). Provenance kind=synthetic, historical_data_used=false — no private/historical data. Fresh-context verified-loop verdict: PASS 97/100, all mandatory minima met (fail-closed 15/15); full crate suite 176+17+4+14 green, fmt+clippy clean. Verdict: PR #21 issuecomment-5036036026."}} +{"id":"int-34cb6712d179a2768589cf97402d7646","kind":"field_change","created_at":"2026-07-22T01:56:18.603137Z","actor":"Val Alexander","issue_id":"threads-3xd","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"MERGED: familiar-contract PR #3 squash-merged to main as 710036e (2026-07-21, Val approval in-session e05c94cf; approval/merge authority exercised by Val, not simulated). Issues #3 (S_p(F) ∈ S_p(F) closure precondition → §1.1/§4.1/§5.4) and #4 (provenance predicate (iv) → §1.1/§3.4/§5.6) landed as RFC-0001 v0.3.0. Review chain: adversarial fix set 15f4701 → Nova review (1 blocking B-1 + 9 advisories + 6 nits, issuecomment-5037409670) → fix set cf5171a + fast-follows 9b5535e/12ccd44 → independent fresh-context re-review ×2 CONCUR PASS (issuecomment-5038167073 + issuecomment-5038237145). Conformance 5/5+10/10 READY verified on main post-merge. Annotated tag v0.3.0 cut at 710036e (tag object 62df1290). Follow-ups: threads-auu (definitional nits), threads-5vn (A-6 hash canonicalization)."}} +{"id":"int-1252d20d6d36355de3128a2389c895a2","kind":"field_change","created_at":"2026-07-22T01:56:19.757405Z","actor":"Val Alexander","issue_id":"threads-uqx.2","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"DONE: RFC closure + provenance amendments LANDED — familiar-contract PR #3 merged to main 710036e, annotated tag v0.3.0 cut (rfcs/README citation resolves). AC met: (1) Nova sign-off ×2 independent fresh-context re-reviews PASS at cf5171a through 12ccd44 (issuecomment-5038167073, issuecomment-5038237145); (2) Val approved + merge executed 2026-07-21 (approval given in-session by Val; merge via REST at pinned SHA 12ccd44); (3) conformance suite 5/5 positive + 10/10 negative READY re-verified on main at 710036e; (4) threads-3xd closed with evidence. Stacked PR #4 retargeted to main before branch delete (survived, open). Phase 5 freeze upstream prerequisite now satisfied."}} +{"id":"int-f0e5f4b74dbc57c03325b35a864614a1","kind":"field_change","created_at":"2026-07-22T04:06:34.709586Z","actor":"Val Alexander","issue_id":"threads-uqx.12","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Landed. PR #4 squash-merged to main as f70c796 (title 'rfc(0001): define fail-closed approval-tier compiler (#4)'), annotated tag v0.4.0 → f70c796 (tag obj ce7a837). RFC-0001 §5.3.1 approval-tier compiler normative; validator TOML+Ajv; 6+36 conformance fixtures. Review: fresh-context sign-off recommended, zero blocking (PR #4 issuecomment-5041705447); A-2..4+nits fixed 244a82d, delta re-verified. Human gates exercised by Val ('proceed with recommendation'): A-1 §6.3 ratification recorded in merge commit message; N-5 planning docs retained; ready+merge+tag executed. Verified on main at f70c796: npm test 6/6+36/36 READY. Residual fast-follows noted in uqx.12 notes: N-7 coverage display, §6.3 freeze before v0.5.0."}} +{"id":"int-cc109bcec74ae3f1454766116fb57def","kind":"field_change","created_at":"2026-07-22T09:55:28.884626Z","actor":"Val Alexander","issue_id":"threads-auu","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"PR #7 merged as 8a2dfd2 (squash, Val-approved 2026-07-22); annotated tag v0.4.1 cut at merge commit per Nova A-1. §1.1 admission-path completion + §5.6 MUST pointers + negative/09 & positive/05 CASE.md corrections + full version sweep. Conformance 6/6+36/36 READY verified on post-merge main (c3f135f)."}} +{"id":"int-e61a24100ee84af668e8754cbaeea67a","kind":"field_change","created_at":"2026-07-22T09:55:30.347625Z","actor":"Val Alexander","issue_id":"threads-cgj","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"PR #8 merged as c5f4a8a (squash, Val-approved 2026-07-22). Fail-closed propertiesFor() attribution replaces hardcoded coverage filters; semantic merge with v0.4.1 verified pre-merge in local merge tree (44/44 runs, Bounded Authority ✗ on FAIL fixture) and post-merge on main."}} +{"id":"int-c9ce61a7fd81a26f6f6f5c954e3d4a9e","kind":"field_change","created_at":"2026-07-26T06:34:32.276298Z","actor":"Val Alexander","issue_id":"threads-uqx.7","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Complete and merged. The corrections previously held uncommitted in the phase5-veto-contract worktree landed via coven-cave PR #3628 (fix/phase5-veto-review-findings, f89acdfc0, merged 2026-07-21, cave-v4ep closed): authority invariants, TOCTOU-safe pending summaries, strict decision routes. Worktree since removed. Re-verified 2026-07-24 at current cave main (32d7d309f): threads-read 87/87, threads-adapters 58/58, proposal-flow 25/25, proposal-approval wiring all assertions pass. AC evidenced in src/lib/threads-read.ts: unknown/unverifiable/unrecognized normalizes to blocked (never healthy-by-default), staleAfter past-due renders stale, blockedEnvelope fail-closed, decisions forward to daemon via strict routes. Cave remains thin read/forward with no policy authority."}} +{"id":"int-0fea7373e40795aa64289855ba7df115","kind":"field_change","created_at":"2026-07-26T07:11:44.211375Z","actor":"Val Alexander","issue_id":"threads-vfk","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"§6.3 freeze landed: familiar-contract PR #10 squash-merged as 6ab88f8 (Val-approved gate, 2026-07-26), annotated tag v0.5.0 pushed on the merge commit. Pre-merge verification at head 30f59af: conformance 6/6 positive + 36/36 negative READY, npm test READY, rfcs/RFC-0001-v0.4.md byte-exact vs tag v0.4.1 (git diff empty). §6.3.1 now normative: version-rule changes ship alone, classified under the previously-ratified rule. Unblocks threads-5vn §5.6 hash amendment."}} +{"id":"int-5a1b1b6004c85f3326404e4e4f7086bd","kind":"field_change","created_at":"2026-07-26T08:56:30.918837Z","actor":"Val Alexander","issue_id":"threads-5vn","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"v0.6.0 landed: PR OpenCoven/familiar-contract#12 squash-merged as cade5a0, annotated tag v0.6.0 pushed. §5.6.1 added (BLAKE3 structural/SHA-256 content split, canonical ward_hash/diff_hash/entry_hash defs, bare lowercase hex, fail-closed unsupported-algorithm rejection, recompute-mismatch=tamper-evidence). Evidence: suite 7/7 positive + 38/38 negative + audit-records lane READY; worked vectors independently recomputed (b3sum + shasum); RFC-0001-v0.5.md snapshot byte-exact vs tag v0.5.0; fresh-context review SIGN-OFF RECOMMENDED (one non-blocking finding split to follow-up bead)."}} +{"id":"int-abb673e72b4e468a4ccd9c27044edf78","kind":"field_change","created_at":"2026-07-26T09:58:26.267746Z","actor":"Val Alexander","issue_id":"threads-le4","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Raised workspace MSRV to 1.88, pinned CI to rust-toolchain 1.88.0, and validated with metadata consistency check plus Rust 1.88.0 fmt/clippy/test."}} +{"id":"int-f69719c6b5bd970cd2d00dbe9e9c60d5","kind":"field_change","created_at":"2026-07-26T10:21:06.074142Z","actor":"Val Alexander","issue_id":"threads-8gg","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"v0.7.0 landed: familiar-contract PR #13 squash-merged as 4fdbb08 (Val-gated, merged on Val's 'proceed'), annotated tag v0.7.0 pushed. §5.6.1 thread:v2 leaf payload defined (surface, writer, sorted deduped channel tags, full tension commitment, sorted strand commitments; BE-u64 length prefixes) with coven-threads-core adopted as normative definition (§10.1 ref; D-2 delegation restored); cross-impl recompute MUST role-scoped (fingerprints: log+surfaces; ward_hash: committed state; missing-state ≠ mismatch; tamper-evidence sentence intact); §9 rescoped. Evidence: suite 7/7+38/38+audit-records READY on main post-merge; v0.6 snapshot byte-exact; fresh-context review SIGN-OFF RECOMMENDED with leaf prose fact-checked against weave.rs:255-280/thread.rs/strand.rs/manifest.rs; review record: PR #13 comment."}} +{"id":"int-afa120a6d40fc91a458a2a764aad06fc","kind":"field_change","created_at":"2026-07-26T10:21:06.935668Z","actor":"Val Alexander","issue_id":"threads-df9","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"v0.7.0 landed: familiar-contract PR #13 merged as 4fdbb08, tag v0.7.0 pushed. check-audit-records.js now fails closed unless ≥1 .entry and ≥1 .surface companion vector found+verified per run; audit-records/README documents the guarantee; RFC §9 notes the suite fails closed on missing vector companions. Mutation-tested by author and independently by fresh-context reviewer (hide .entry → exit 1; hide .surface → exit 1; corrupt .entry → 2 FAILs exit 1; restored → green). Review record: PR #13 comment."}}