Skip to content

v2.5.0b2 — beta: post-b1 audit fix bundle (bug-114..122)

Pre-release
Pre-release

Choose a tag to compare

@Cloto-dev Cloto-dev released this 16 Jul 09:18
fca25e5

Pre-release (2.5 Experimental line — the 2.4 series remains the Stable line, latest v2.4.40).

Fix-only beta: all 10 confirmed defects from the post-b1 comprehensive audit (cross-provider: Gemini finders + Anthropic finders, refute-framed verification, final adjudication) — bug-114..122 in qa/issue-registry.json. No new features; DB schema and MCP tool contract unchanged.

Highlights

  • Naive-timestamp UTC anchoring (bug-114, HIGH): _parse_timestamp_utc ran astimezone() on naive datetime('now') values, assuming system-local time — on any non-UTC host, recall-boost decay and the episode-boundary factor were silently shifted by the local UTC offset (repro-confirmed: JST, 9 hours). Naive DB timestamps are now anchored as UTC at the parse choke points, and ruff DTZ (flake8-datetimez) joins the lint gate so new naive datetime construction is a CI error.
  • Episode penalty actually ranks (bug-115, HIGH): under the default configuration (rrf fusion + confidence off) the episode-boundary penalty scaled scores but nothing re-sorted — a ranking no-op. Penalised fusion lists now re-sort; cascade stage order is preserved by design.
  • Structural gate hardening (bug-120, HIGH): the isolation gate no longer accepts substring tricks (OR agent_id IS NULL, commented mentions) and now sees interpolated DML targets (f"DELETE FROM {table}"), closing a class of unscoped-DML invisibility. Five new teeth tests.
  • verify-issues as a CI gate (bug-122): the 122-entry regression registry is now enforced on every PR/master push (it was hand-run only).
  • FTS migration recovery (bug-118): FTS-gated migrations skipped while CPERSONA_FTS_ENABLED=false (stale trigger bodies, missed contamination rebuild) are detected by a trigger-DDL probe and recovered on boot.
  • Also: mixed-format orphan-episode false positives (bug-116), preview truncation of ref-less injected rows made content unreachable (bug-117), no-persist skeleton shape drift for calibrate/set_recall_precision (bug-119), empty-content memories dropped by any exclude filter (bug-121).

Deliberate non-change: the datetime('now') schema defaults keep their naive (UTC) format — rewriting them offset-aware would mix formats inside one column and reintroduce the lexicographic-comparison hazard bug-116 fixes. The parse-side naive-as-UTC invariant covers old and new rows.

Verification before this cut: 276 passed / 5 skipped (20 new regression tests in test_audit_2500b2.py), ruff clean with DTZ enabled, verify-issues.sh 122 issues / 0 stale / 0 error.

Graduation line: 2.5.0b1 → 2.5.0b2 → (rc) → 2.5.0 final — the line then enters Current; Stable requires a later production-soak certification event (see SUPPORT.md).

🤖 Generated with Claude Code