Repository navigation
v18.1.4
·
47 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
A review release of fixes. The brain format (version: 7), bf.yaml, the reply schemas and the packaged skills are unchanged; the search cache rebuilds once. Upgrade with uv tool upgrade brain-framework (or update a brain's pin); no other step is needed.
Fixed
- Search no longer lands on a section without the matching text: in a copied document with several H1s, text under a later H1 ranked as the H2 above it, whose exact read stops at that H1. An H1 after the first section is now a section of its own. The search cache rebuilds once.
- A record's fields other than
textare bounded by their encoded size, as the reply limit counts bytes: a record of long non-ASCII links or aliases passed the 2 MiB check, then every exact read of it failed withresponse exceeds its byte limit. Collection now rejects it withfields other than text exceed 2 MiB. - A registered brain whose folder exists but cannot be reached, such as a locked folder, is reported as
registered brain directory exists but cannot be reached; restore access to itby search, read andbf statusinstead of as absent, whose advice to register it againbf registerthen refused. A registered path that became a regular file is absent everywhere, sobf registertakes over its name. - An empty value, as an unset variable gives, is invalid input for
bf collect "",bf run "",--sensor "",--routine "",bf collect SENSOR --since ""andbf build --reproject "": they used to name an unknown program, collect the default window or rebuild the whole cache instead of reprojecting. - A zero-length window such as
0dis an invalid period forbf readand--scopealike; the read used to return an empty page while the scope failed withsince must be earlier than until.bf validatereports a link to such a page as an unresolved BF target. bf mcpno longer writes the MCP SDK's log line for each rejected or failed tool call to stderr; the reply carries the error.- Excerpts of a large passage holding a few characters that folding changes, such as
虏or a no-break space, are computed faster.
Documentation
- The four-tool guide and the watch example give the working checkout command,
uv run --project CHECKOUT bfinside a copied brain; the README's four-tool reply names what it trims.
Added
scripts/verify-release.sh X.Y.Zverifies a published release in one command: the annotated tag on origin, a non-draft GitHub release holding exactly the wheel and source archive, PyPI digests matching them, their build attestations and a clean install of that wheel that initializes, validates, searches and reads a brain. The release checklist now gives the commands for the release worktree, checking tasks with the pinned mise, waiting for CD and syncing the primary checkout, runs the gate withGITHUB_ACTIONS=trueand asks for an independent review before committing. Tests coverscripts/verify-release-tag.sh, the guard CD runs before publishing.
Changed
- Development tools: Python 3.14.8, uv 0.12.23, dprint 0.60.1, lefthook 2.1.16, trivy 0.75.0 and mise 2026.10.0 in the workflows. The package smoke test builds its environments in the disk cache instead of
/tmp, and every test subprocess has a timeout.