diff --git a/PROJECT_CONTINUITY.md b/PROJECT_CONTINUITY.md index 3f8d53d8..b3514e3e 100644 --- a/PROJECT_CONTINUITY.md +++ b/PROJECT_CONTINUITY.md @@ -2,7 +2,7 @@ ## Right Now -**▶ RELEASING v1.52.0 (2026-07-02).** All gates PASSED: full cuda suite green (solo rerun after 2 self-inflicted contention flakes — never run evals + suite concurrently); recall gate **PASS via definitive same-corpus binary A/B** (v1.51.0 cuda-built-from-source vs current: IDENTICAL R@K both fixtures; aggregate 46.8/68.8/84.4 vs 47.2/70.7/86.7 = corpus growth; logged in eval.md; README/Cargo/repo descriptions synced). Gate found + fixed a REAL bug: **#2133** freshness wedge (completed HNSW rebuild never drained without a next file event → `rebuild_in_flight` phantom; fix = idle-tick drain, fable-APPROVED, merged #2135; follow-up **#2134** filed: `--force` DB-replacement × orphaned worker Store handle, partially pre-existing). Release remaining: release branch PR → CI → merge → **cross-build dry-run BEFORE tagging (non-negotiable)** → tag v1.52.0 → `cargo publish -p cqs` (macros unchanged) → rebuild+redeploy daemon (stop BOTH serve :8080 + cqs-watch before cp). +**✅ v1.52.0 RELEASED (2026-07-02).** Full rail executed clean: gates (full cuda suite solo-green; recall gate **PASS via definitive same-corpus binary A/B** — v1.51.0 cuda-built-from-source vs current, IDENTICAL R@K both fixtures; agg 46.8/68.8/84.4 = corpus growth vs 47.2/70.7/86.7; eval.md logged, README/Cargo/repo synced) → release PR #2136 → **cross-build dry-run all-3-green BEFORE tag** → tag v1.52.0 → crates.io published (macros unchanged, single-crate) → daemon+serve redeployed on `e6924941` → **#2133 fix live-verified** (fresh daemon reached `state: fresh` from `rebuild_from_empty` with ZERO file events — the exact pre-fix wedge scenario). The gate itself found #2133 (freshness wedge: completed HNSW rebuild never drained without a next file event; fix = idle-tick drain, fable-APPROVED, #2135); review follow-up **#2134** filed (`--force` DB-replacement × orphaned worker Store handle, partially pre-existing, P2). Gate-protocol lessons: (1) never run evals + the full suite concurrently (2 self-inflicted contention flakes, solo rerun clean); (2) the GitHub-release CPU tarball is the WRONG A/B instrument — feature-asymmetric AND it wedged on the gate; build the old tag from source with matching features. **Next:** idle loop — 30 open issues (15 fresh archeo: #2116–#2130 + #2134); candidates: #2134 (P2, watch), #2119/#2122 (overlay honesty/coverage), #2121 (plan --tokens text). GitHub release binaries were still building at update time (tag run in background — verify per-job before citing it). Today's landed arc (2026-07-02, idle loop): **#2107→PR #2114** (daemon impact-diff overlay, fable-APPROVED, `is_impact_diff` gate deleted) + daemon redeployed (`39a5d209`). **Docs drift→PR #2115** (9 verified fixes incl. two SECURITY.md docs-lies: false PDF page-cap claim, stale CQS_PDF_SCRIPT threat model). **Archeo sweep** (6 finder→fable-judge areas, 56 hits): 19 keep / 8 already-tracked / **15 issues filed #2116–#2130** (notable: reranker preamble-parity #2127 — cross-encoder scores content-alone vs embeddings' signature+doc+content, live since the reranker shipped; three plan-doc "filed/tracked" claims were lies, now true) / **12-edit scrub→PR #2131** (incl. `extract_return_objc` — the "doesn't lend itself" premise was false). **#2110→PR #2132** (in CI): semantics (b) — `--no-overlay` = full parent-truth diff subject on both paths; `cli_diff_overlay_root` (force-off before probe) + `cli_parent_diff_root` (out-of-tree re-root via `lookup_main_cqs_dir`, implemented not deferred); `affected` gains OverlayArgs (deliberately NO tristate arm — never forwarded); fable **APPROVE**, nits applied (surface-neutral help text + debug tracing). After #2132 merges: sweep worktree `agent-a5e56e7221d3ef76e` + `~/.cargo-target/fix-2110`, verify #2110 closed, then release. #2108 stays separate (frame math untouched). Earlier: #2112 windows-check hard-error gate. diff --git a/ROADMAP.md b/ROADMAP.md index ae47f427..97b6d2bd 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,5 +1,9 @@ # Roadmap +## Released: v1.52.0 (2026-07-02, crates.io + GitHub Release) + +**The worktree-overlay diff-subject truth campaign** — three fixes closing the wrong-tree family (#2109 worktree-lane review/ci/impact-diff diffed the served parent; #2114 daemon impact-diff overlay plumbing + the #2102 CLI-gate removed; #2132 `--no-overlay` = full parent-truth on both paths, `affected` gains the flags) — plus **serve/cache teardown-abort fixes** (#2103/#2106 `should_wal_checkpoint_on_drop` + drop-order keepalive), the **pdf-script embed** removing the search-chain TOCTOU (#2105), the **windows-latest hard-error PR gate** (#2112, closing the "release skips a binary" class at PR time), the **freshness-wedge fix found by this release's own gate** (#2135: completed HNSW rebuilds now drain on the idle tick — live-verified unwedge after deploy; follow-up #2134 filed), ObjC return-type extraction, docs truth fixes (#2115, two SECURITY.md lies), and the archeo sweep (#2131 + 15 tracking issues #2116–#2130). **Recall gate PASSED via definitive same-corpus binary A/B** (v1.51.0 cuda build vs current: IDENTICAL R@K both fixtures) — agg **46.8/68.8/84.4** (shift vs 47.2/70.7/86.7 is corpus growth, 17.5k→17.6k chunks, 0 dead golds). Cross-build dry-run validated all 3 platforms before tagging. + ## Released: v1.51.0 (2026-06-29, crates.io + GitHub Release) **SPLADE-viz Stage 2b** (the eval-gold "where hybrid wins" tour + R@K-delta panel, #2087, live-verified) + **four security fixes from a post-v1.50.1 red-team pass** (#2086 A/B/C: the leading-directive `ignore all previous` gap, the comment-marker strip-set, the unscanned full-file `read` relay; #2088 D: the `/api/search_legs` flag-injection — 4 confirmed / 0 false-positive, the heuristic widening empirically proven inert at 0 newly-flagged on the 17.5k corpus). A per-category α sweep confirmed the SPLADE conceptual-tax the viz surfaces does **not** survive the full production pipeline, so no retune (#2085 closed). Scoring **byte-identical** to v1.50.1 (empty scoring diff) → recall carries **47.2/70.7/86.7**; the cross-build dry-run validated all 3 platforms before tagging. diff --git a/docs/notes.toml b/docs/notes.toml index 685a0db0..e24cbd0e 100644 --- a/docs/notes.toml +++ b/docs/notes.toml @@ -1860,3 +1860,20 @@ mentions = [ "JSON_ARGS_CAPABLE_COMMANDS", "mcp/mod.rs", ] + +[[note]] +sentiment = -1.0 +text = "The freshness API can wedge on any code path where a completed background rebuild has no follow-up drain trigger: drain_pending_rebuild must be reachable from the IDLE tick, not just flush ticks. The v1.52.0 gate found rebuild_in_flight stuck true for 70min after a threshold rebuild completed cleanly on a quiet repo (WSL inotify made it worse). Fixed by drain_completed_rebuild_idle; the same orphaned-handle class has a residual on --force DB replacement." +mentions = [ + "src/cli/watch/mod.rs", + "src/cli/watch/rebuild.rs", + "freshness", +] + +[[note]] +sentiment = 0.5 +text = "Release recall-gate A/B protocol: build the OLD tag from source with the SAME features (cuda-index) into a private target dir. The GitHub-release CPU tarball is the wrong instrument twice over: feature-asymmetric (CPU ORT vs CUDA, different index path) and it hits the freshness gate cold. Same-index + same-features + CQS_NO_DAEMON + CQS_CAGRA_THRESHOLD pin makes the comparison byte-clean." +mentions = [ + "evals", + "release", +]