Repository navigation
v0.56.0
Changed
-
Release staging is dispatched on the tag, reserves each version once, and refuses stale release machinery. (#1671)
-
The release pack set must name every package, the environment check sees both GitHub forms, and every workflow declares explicit permissions. (#1671)
-
The release packs every publishable package once and stages the exact tarballs, not the source tree. (#1671)
-
GET /Presencenow requires a verified reader by default; the public roster is an explicit opt-in. (#1880)Heads-up: an instance that relied on the public roster (for example a
status page) must setPRESENCE_PUBLIC_ROSTER=trueon the Flair process.
Fixed
-
Excerpts of long source memories end on a complete character, not a mangled one. (#1772)
-
flair doctor --fixadoption no longer accepts a foreign listener when the launchd job reports no pid. (#1841)Heads-up: if a
flair doctor --fixadopt now reports "the launchd job
reports no pid after load", the adopted service did not come up as expected;
confirm the label is loaded, then re-runflair doctor --fix. -
flair-client.mjsnow requires an explicit identity for reads too —list,getandsearchrefuse instead of signing as the shippedflintdefault. (#1816, #1851)Heads-up: scripted reads that relied on the default identity now fail
closed — setFLAIR_AGENT_IDor pass--agent <id>at those call sites. -
The post-publish canary no longer needs repo dependencies — its tarball hasher validates versions with a built-in SemVer 2.0.0 regex. (#1856)
-
flair init --data-dir <long>now refuses with a clear message instead of Harper's barelisten EINVAL. (#916) -
flair-client refuses every action without an explicit identity, and the hardcoded
flintsigner is gone fromscripts/repro-resource-busy.mjs. (#1855) -
Docs now match the admin grant, the config file Flair actually reads, the HTTP bind, and the MCP tool list. (#1715, #1766, #1760)
-
Spoke bring-up, presence, attention help, MCP paths, and federation sync now match the code. (#840, #932, #995)
-
federation pair checks the spoke admin credential before it contacts the hub, so a missing credential no longer burns the pairing token. (#1875)
-
The unit-test lane's home-isolation guard now ends a stuck helper probe on its 10-second bound instead of waiting on it. (#1865)
-
Home resolution follows the platform rule: Windows uses
USERPROFILE, everywhere elseHOME.Heads-up: on Windows, when
HOMEandUSERPROFILEpoint to different directories (common under Git Bash, MSYS or Cygwin), Flair now reads and writes MCP client configs underUSERPROFILE, which is what Node'sos.homedir()returns, instead ofHOME. Keys do not move — the keystore now resolves its home through the sharedresolveHome()(src/keystore.ts), which on Windows isUSERPROFILE || homedir()— so existing keys keep working. If an earlierflair initwired clients underHOME, runflair doctor --fixto wire them underUSERPROFILE. -
The OAuth consent page escapes every value it renders and validates state and scope.
-
Every home lookup in
src/now goes through one resolver, so doctor and the writers agree on where~is. (#1858) -
The OpenClaw memory plugin now makes every agent act only as itself, and refuses rather than guess.
-
openclaw-flair no longer mistakes an explicit keyPath for a shared OS user on a multi-agent gateway. (#1751)
-
Signed per-agent
GET /Presence/<id>reads no longer 401, and the read gate reuses the verdict the auth middleware already established. (#1880)
Full record: CHANGELOG.md