Skip to content

v1.10.1

Choose a tag to compare

@anton-core-plugin-publisher anton-core-plugin-publisher released this 19 Jun 16:04
· 2 commits to main since this release

Changed

  • Recall, item get, item log-access, and memory explore now surface real SQLite fault kinds — db_locked (busy), db_corrupt, io_error — instead of masking them as internal. The four verbs' error-kinds sets are widened accordingly (cli-contract). Fixes the original database is locked-as-internal misclassification on the recall write path.
  • SQLite extension registration is unified onto driver-global auto-extensions. vec1 (and now fts5) are registered via sqlite3.AutoExtension in internal/db's package init() (internal/db/autoext.go), so every connection the ncruces driver opens carries both modules — replacing the per-connection loadVecExtension shim that ran inside db.Open between attachEvents and Apply(core). One mechanism, every connection; the MaxOpenConns(1) pin is no longer load-bearing for module presence. Recorded in ADR 0042.

Fixed

  • stale_lock_files health panel no longer false-positives every session. It previously watched the two persistent flock sentinels (.maintenance.lock, .repos-sync.lock) and flagged any present-but-unheld file via a non-blocking flock probe — but those sentinels are designed to persist on disk unheld between runs (the kernel releases the flock on fd close; the empty file stays so the next caller re-attaches to the same inode), so the panel fired on essentially every idle session: a guaranteed false positive, not a lock leak. It now watches the two PID-fenced, removed-on-release locks instead — update.lock (via its sibling update.lock.pid holder record) and the bootstrap mkdir-mutex .bootstrap.lock (via the pid record inside its directory) — and detects staleness by probing the recorded holder PID with kill(pid, 0): an absent record (a clean, idle system) or a record naming a live holder yields no row, and only a record naming a dead holder surfaces as a warning (the owning subsystem reclaims it the next time it acquires that lock — routine for update.lock, but for .bootstrap.lock only on a re-bootstrap when the installed binary is missing, so a lingering bootstrap row is safe to remove manually after confirming no live holder). Rows now carry the dead holder's PID and how long the lock has lingered (age_ms) in place of a meaningless size_b. An empty/torn pid record is skipped quietly (it races the bootstrap pid file's non-atomic write), while a non-empty but malformed record is logged at WARN; a watched path that exists but cannot be read now surfaces as a distinct warning rather than rendering the panel falsely clean. On Windows the panel is a structural no-op (no reliable holder-liveness probe), so a clean panel there is not a positive all-clear. The lock-primitive glossary entry is corrected to match (the persistent flock sentinels are explicitly not flagged).
  • Dashboard self-terminates when orphaned (parent reparented to init) so an abnormal session exit can't leave a server holding core.db/events.db and blocking WAL checkpointing — the cause of intermittent database is locked on recall.
  • Data-dir resolver normalizes a root whose basename is data (e.g. over-specified CORE_DATA_DIR=<root>/data) down to <root>, so it can't mint a stray nested data/data/core.db.
  • Release bundle now ships post-tool-use-failure.sh; hooks.json referenced a script the allowlist omitted, so the PostToolUseFailure (error-recall) hook failed with "No such file or directory".
  • Recall layer survives the go-sqlite3 v0.35.0 FTS5 split. v0.35.0 removed FTS5 (and R*Tree/Geopoly) from the base driver — FTS5 must now be registered separately via ext/fts5. The recall/memory layer rides entirely on FTS5 (items_fts / items_content_fts external-content tables plus sync triggers on every items / items_content write), so the bump would otherwise fault every recall and item write with no such module: fts5. The weekly dependency group now lands with ext/fts5 registered: github.com/ncruces/go-sqlite3 0.34.4 → 0.35.1 (its indirect wasm asset go-sqlite3-wasm/v2/v3) plus six golang.org/x/* minors (crypto 0.53.0, net 0.56.0, sync 0.21.0, sys 0.46.0, term 0.44.0, tools 0.46.0). Supersedes Dependabot #75.