Repository navigation
v16.1.0
·
64 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
A review release: no format or reply change is required. It fixes the published reply schemas, which rejected some valid replies, and several failure paths; the skills, examples and documentation are clearer and match the code.
Upgrade: uv tool upgrade brain-framework, then bf skills DIR to update unedited skills. Re-copy the example weekly-review.py, github-history.py, git-history.py or local-documents.py if your brain uses one, and merge the new AGENTS.md guidance as Refresh brain instructions shows. From 15.x, apply the 16.0.1 steps first: bf skills reports skill copies made before 16.0 as unmanaged and leaves them; back up any edits and rerun it with --force.
Fixed
- The published reply schemas (
bf schema --kind read-reply, MCPoutputSchema) accept every valid reply: an empty period page, such asbf read 7din a new brain, matched two page shapes, so MCP clients that validate structured output failed the read. Reply shapes are now alternatives (anyOf), and tests validate every reply against the published schemas too. - A record's
attributesandfieldsare returned exactly as stored: replies no longer convert instants inside them to local time or drop an attribute namedtimebesidedate. - A collection that would change more than 100,000 records fails like any other collection error, recorded in history with its backoff, instead of exiting as invalid input and stopping
bf update. - An unrecoverable cache error prints
the search cache is unavailable; run bf buildin the CLI and MCP instead of a traceback. - A read waiting for another writer to build a missing cache fails after one wait, naming the writer, instead of retrying for up to six minutes.
- A program that cannot start is reported as such even when its log cannot be written.
- YAML files other than UTF-8, such as UTF-16 with a byte-order mark, are rejected naming the file.
bf skills --checkreported a skill with a deleted file ascurrent: it is nowmodifiedand lists the file underedited;--forcerestores it.- A reply names an unavailable brain once, worded as its pages report it.
bf searchandbf readreject--offsetabove 2^53−1 as invalid input (exit 2), like the MCP tools.
Changed
bf update --sensorand--routinesuggest close names for an unknown program.bf initwrites the sameAGENTS.mdfor every brain (bf://NAME/...), so comparing it with a scratch brain shows only template changes. It asks agents to update notes when the user asks or the task authorizes it, and never to editmemories/.- Help text states that
watchoptions overridebf.yaml, thatstatus --checkalso fails on programs that never succeeded and which itemsexport --kind identitieslists. - Skills: helpers run from any directory as
python3 "$SKILL_DIR/scripts/NAME.py", and throughuv run --project PATH --lockedin a brain that pins its runtime. Version checks follow each skill'scompatibilityinstead of a written version.guarded-write.pyrefuses a symbolic link anywhere in the note's path; run it from inside the brain with a relative path.new-action.pyremoves what it created when its write fails.bf-maintainexplains eachbf statusfield, and duplicated rules now live in one guide each. - Examples:
weekly-review.pyshows times with their offset instead of labelling local times as UTC.github-history.pyskips a pull request updated during its run, which the next window collects.git-history.pyrequires Git 2.37 and says so.local-documents.pykeeps the text read before an Office part's element or nesting limit and marks the recordpartialinstead of failing the snapshot. The sensors README adds a Calendar agenda configuration, and example brains ignorelogs/. - Documentation: Install and update and the four-tool walkthrough move to Start here, Troubleshooting to Reference. The upgrade steps separate the version upgrade from the manual steps of a major release and explain
modifiedandunmanagedskills. The docs now say thatoverduemeans no success within twice the refresh, that a statuscacheofstaleormissingawaits recovery, and that an exact read across brains fails while one of them is unavailable. They also document the state-directory symlink error and the corrected page sizes, log limits and missed-schedule behavior.
Development
scripts/push-and-tag X.Y.Zpushesmain, waits for CI on that commit and tags it only after success, whatever shell runs it;tests/test_release.pycovers the release scripts, and CI validates the release notes on every push.- The weekly security workflow also installs the package on the next Python release, and scans through the gate's tasks without caches.
- Dependency updates: uv 0.12.20, zensical 0.0.66, sse-starlette 3.5.0, pyjwt 2.15.1.