Repository navigation
v0.23.0 release readiness: scope, testing, docs, ship checklist #1288
Description
Activity
Claude finished @phernandez's task in 30s —— View job
Triage
Type: Enhancement (labeled
enhancement) — this is a release-coordination/tracking issue, not a code defect, doc fix, or support question, so it maps to the closest available type.Priority: High — it gates the
v0.23.0ship date and bundles real release-blocking work (scope calls on #1264/#1284, #1181, #1276, #1280, #1260/#1275/#1281; the #1248 benchmark build-out; and the outstanding verification/docs checklist).Component: No single repository component label applies — the checklist spans CLI (
just release,just doctor), MCP tooling, sync/Team push-pull, Cloud (Team WebDAV smoke, cloud re-pin), docs (changelog, docs.basicmemory.com), and CI/testing. Labeledcomponent:noneper the triage taxonomy, with the cross-cutting scope noted here in prose.Complexity: Complex — not because any single line item is hard, but because it's a coordination artifact with ~30 checklist items across scope decisions, one remaining feature-adjacent build item (#1248), a full verification pass, docs, and release-day choreography. Several items already reference and depend on other tracked issues (#1210, #1238, #1243, #1248, #1263, #1269).
Duplicates: None found — this is the only open issue matching "v0.23.0 release readiness" / "release readiness" in the repo.
No reproduction steps or clarifying questions are needed; this is a well-specified tracking issue authored by the maintainer. No implementation action taken, per triage scope.
hook session-startbrief duplicates one open decision and omits anotherTesting the v0.23 hook path (installed from
mainviauv tool install --from git+..., since thehookverb isn't on PyPI yet, per #1210), the SessionStart brief renders the open-decisions list incorrectly.Project contains exactly four notes with
type: decision,status: open. Verified two ways:- On disk: four distinct files, each with
status: openin frontmatter. - Via the API:
search_notes(type=decision, status=open)returns exactly 4 results, each with a distinctexternal_id.
The brief renders:
## Open decisions (5) - Open decision: entity type for the Order · atlantis/decisions/open-decision-entity-type-for-the-order - Open decision: name used on incorporation paperwork · atlantis/decisions/open-decision-name-used-on-incorporation-paperwork - Open decision: treatment of pre-entity spend · atlantis/decisions/open-decision-treatment-of-pre-entity-spend - Open decision: treatment of pre-entity spend · atlantis/decisions/open-decision-treatment-of-pre-entity-spend - Open decision: treatment of pre-entity spend · atlantis/decisions/open-decision-treatment-of-pre-entity-spendCount reads 5 for 4 notes, one note repeats three times with an identical permalink, and the fourth never appears. Deterministic across four consecutive runs.
Environment: Windows 11, basic-memory built from
main, invoked as the harness does (hook JSON on stdin,CLAUDE_PROJECT_DIRset).Separately,
basic-memory doctor --localfails on this build withDoctor failed: API note file missing: doctor/Doctor API Note.mdafter creating adoctor-<hash>project.- On disk: four distinct files, each with
2026-08-23 release-prep update for the latest triage batch:
- [BUG] bm update reports "up to date" when the Homebrew check fails (false negative pins users to an old version) #1297 fixed and closed by fix(cli): stop reporting "up to date" when the Homebrew update check fails #1298. Homebrew now reads the actual target version from
brew outdated --json=v2; failed Homebrew checks no longer report a false up-to-date result or auto-upgrade from PyPI-only inference. - build_context has no page_size or max_related ceiling, while list_directory has had one since #1048 #1296 fixed and closed by fix(mcp): bound context traversal requests #1299.
build_contextremains a bounded traversal seed:page_sizeis capped at 50 and the globalmax_relatedbudget at 100, with explicit pagination/traversal guidance. - [FEATURE] Add larger Chinese/multilingual embedding models to FastEmbed provider (e.g. bge-base-zh-v1.5, bge-m3) #1295 closed by docs(core): explain custom FastEmbed models #1300 as documentation/configuration. The guide now shows how to list installed FastEmbed model identifiers and dimensions and configure a supported model; no Basic Memory model registry was added.
- [enhancement] CJK (Chinese/Japanese/Korean) full-text search broken — hardcoded unicode61 tokenizer doesn't segment CJK #1294 was validated but removed from v0.23 and left open. A correct CJK mid-token keyword fallback requires a new/rebuilt tokenizer/index path; the available query-time fallbacks are unbounded scans, and trigram misses common two-character queries.
All three merged PRs cleared full applicable CI, DCO, unresolved-thread checks, and fresh exact-head Codex approval.
Current release audit: the v0.23 milestone has 10 open issues. This tracker still describes #1264/#1284, #1260, and #1281 as v0.23.1 deferrals, while those issues are currently assigned to v0.23 following the milestone consolidation. The
v0.23.0changelog heading is present with the release-date placeholder, but this batch still needs changelog coverage before the date/release PR.- [BUG] bm update reports "up to date" when the Homebrew check fails (false negative pins users to an old version) #1297 fixed and closed by fix(cli): stop reporting "up to date" when the Homebrew update check fails #1298. Homebrew now reads the actual target version from
v0.23.0 shipped 2026-08-23. Final ledger:
Released and verified: tag
601bd985→ GitHub release with artifacts, PyPI 0.23.0 (fresh-install verified on current uv), Homebrew formula v0.23.0, docs.basicmemory.com live with the What's New page, cloud re-pinned to the release tag (cloud#1819).Fixed on the way out the door: release recipe left claude-code hook bumps unstaged; older uv silently resolves 0.22.1 (fastmcp beta transitive) — both handled in #1313 with lockstep enforcement, plus the live #1210 shim validation under uv 0.8.4 and 0.12.5.
Residuals, tracked elsewhere:
- npm publish for OpenClaw failed (
NPM_TOKENempty; v0.22.1's failed the same way) — needs npm trusted publishing configured, thengh run rerun 32683434093 --failed - MCP registry publish — needs
mcp-publisher login github+publish(interactive) - PyPI trusted publisher for
dev-release.yml— dev-build channel stays dark until registered - Comprehensive v0.23 benchmark: indexing at scale, Redis reads, reranked search #1248 benchmark full runs + LWW decision → v0.23.1
- Claude Code plugin hooks silently no-op on current release:
hookCLI verb only exists on main (not in 0.22.1) #1210 closes when fix(plugins): ship the claude-code hook version bumps with releases #1313 merges
Announce when ready. 🎉
- npm publish for OpenClaw failed (
SHIPPED: v0.23.0 released 2026-08-23 — tag
601bd985, PyPI + Homebrew + GitHub release live, docs deployed. Residuals tracked below in the close-out comment.Single tracking issue for everything between here and
just release v0.23.0. Milestone ledger: 111 closed items; feature work is complete — what remains is one validation build-out (#1248), scope decisions, changelog refresh, verification, and choreography.1. Scope decisions (settle first)
semantic_embedding_query_prefix/document_prefixconfig workaround exists today — document it in known issues instead.create_time: recommend bring in — small importer guard, low risk, real user-facing crash.--path: recommend bring in — docs-only fix.hookCLI verb only exists on main (not in 0.22.1) #1210 — no action needed; the release itself fixes it (bm hookships in 0.23). Close on release.Landed 2026-08-21 during make-ready: #1290 (ChatGPT import, closes #1276 — codex loop hardened it 4×: Windows CRT sentinel, deterministic epoch, UTF-8 400s, immutable message-time rung), #1291 (prose-tail relations, the #1260 slice), #1292 (dev-release pipeline), #1289 (changelog). Benchmark driver: basic-memory-benchmarks PR #42, small-scale validated; its first catch — acknowledged
edit_noteappends lost to LWW across concurrent MCP sessions — is flagged on #1248 for a product decision.2. Remaining build item
3. Testing / verification
Full CI matrix green on main (SQLite + Postgres, 3 OS) — continuously green through the 2026-08-20 merge batch (fix(cli): run Team push/pull over WebDAV instead of storage credentials #1263, fix(core): count non-Latin tokens when relaxing full-text queries #1269, fix(core): reject transcript timestamp ranges #1271, fix(core): resolve root wikilinks by filename #1272, fix(core): traverse subdirectories in glob-filtered directory listings #1285, test(mcp): add concurrent write_note MCP integration tests #1286)
Live-Postgres search relaxation suites (post-fix(core): count non-Latin tokens when relaxing full-text queries #1269)
just package-check(Claude Code plugin, skills, Hermes, OpenClaw — Hermes changed in fix(integrations): preserve Hermes registration ownership #1274/docs(integrations): clarify Hermes monkeypatch by version #1278)just doctor— passed 2026-08-20just test-smoke— passed 2026-08-20Live Team push/pull smoke vs production — PASSED 2026-08-24 after fixing two layers (cloud#1816, closed): gateway rejected PROPFIND (cloud#1815, deployed) AND the client targeted
/proxywhen WebDAV mounts at the app root (fix(cli): route Team WebDAV transfers to the control-plane base #1310 — must merge before release). Verified live on Demo/leitstern: 207 listing with validators, baseline pull ×10, create-only push, conflict-fail on both directions, keep-local and keep-cloud resolutions, scratch cleaned: push new files → verify cloud-side; pull back; overlapping-edit aborts under default--on-conflict fail;keep-local/keep-cloudresolve correctly. The PR's tests are fixture-based by design — nobody has exercised the deployed server yet.Claude Code plugin hooks end-to-end on a 0.23 build — PASS (SessionStart brief + PreCompact checkpoint verified harness-style); stable-release no-op confirmed live, re-verify shim path after release (validates the Claude Code plugin hooks silently no-op on current release:
hookCLI verb only exists on main (not in 0.22.1) #1210 fix path against a real harness session)Embedding smoke, local half: FastEmbed reindex + semantic/hybrid queries — PASS (5 entities embedded, semantic retrieval verified with zero-lexical-overlap query); remote-provider half still open
just release-dry-run v0.23.0— clean, all 11 manifests update;/release-checkpre-flight still to run release-dayDev-release pipeline repair (ci(core): fix the silently-skipped dev release publish #1292) — merged; gate+build proven live. Publish still fails:
PYPI_TOKENno longer exists, the action falls back to OIDC, and PyPI has no trusted publisher fordev-release.yml(stable releases attest via therelease.ymlpublisher). Cleanup PR ci(core): publish dev releases via trusted publishing #1293 makes OIDC explicit.PAUL: register the PyPI trusted publisher for dev builds — PyPI →
basic-memory→ Settings → Publishing → Add GitHub publisher: ownerbasicmachines-co, repobasic-memory, workflowdev-release.yml, environment blank. Next main merge then publishes0.22.2.devN. — found during hooks verification: no dev build has published since the 0.22.1 bump (broken version gate + PyPI-rejected local version segments). Merge ci(core): fix the silently-skipped dev release publish #1292 and confirm its merge commit publishes0.22.2.devN.4. Docs
2026-08-XXdate placeholder for release day.docs/v0.23branch — done 2026-08-21: rebased on main, retrieval-inspector docs added, Team WebDAV setup note corrected,sort/non-Latin mentions, known-issues section (Document query/passage prefixes for asymmetric FastEmbed models #1264/file_path lookups are byte-wise, so NFC/NFD filename variants create duplicate entities (macOS + Syncthing) #1275/[BUG] Case-only renames on macOS (case-insensitive APFS) fail via move_note and create duplicate index entries #1281);npm run check:docs+ full Nuxt build pass. NOTE: live repo isdocs.basicmemory.com(worktreedocs.basicmemory.com-v023), not the deadbasic-memory-docs. Release-notes framing wants an author read before merge (docs repo, staged NOT merged) for coverage of the retrieval inspector (bm inspect) and Team WebDAV push/pull; add known-issues section for the deferred bugs. Merge at release (Milvus + local-Postgres documentation gaps from tire-kick session #1238).5. Release day (in order)
just release v0.23.0(recipe handles version manifests, release PR, tag; never baregit tag)docs/v0.23in the docs repo (main auto-deploys)hookCLI verb only exists on main (not in 0.22.1) #1210, Milvus + local-Postgres documentation gaps from tire-kick session #1238, v0.23 release documentation: comprehensive change review (v0.22.1 → main) #1243, Comprehensive v0.23 benchmark: indexing at scale, Redis reads, reranked search #1248, and this issue6. Post-release
content/2.whats-new/+ version badge incontent/index.mdmcp-publisher publishfrom repo root