Repository navigation
v0.55.0
Added
-
A macOS continuous-integration lane now exercises the real launchd upgrade path a production install follows. (#1671, #1683, #1685)
-
A CI lane now exercises
flair upgrade --check --treeon a packed extract plus systemd unit. (#1564, #1109) -
The post-publish canary now installs published flair-mcp and flair-client and asserts a tool-call.
Heads-up: a canary that cannot resolve or drive the published adapters
is a FAIL. Do not promote from a run that did not complete that step. -
Flair releases now stop at a staged tag until a clean-machine canary installs and boots the published version.
Heads-up: after approving a release, run the post-publish canary and paste
the command it prints. Until you do,lateststill points at the previous
version. -
bun run test:unitnow type-checks the tree before it runs tests.
Changed
-
The post-publish canary now passes a healthy instance when
flair doctor's only complaint is a known advisory hint. (#1701, #1686, #1698) -
@tpsdev-ai/flair-clientnow sendsX-Flair-Client: flair-client/<version>on every request. (#1383)Heads-up: upgrade
@tpsdev-ai/flair-client(and@tpsdev-ai/flair-mcp)
with this release. A server upgrade alone does not identify a silent old
client. -
Flair's URL builders now share one parser for the
HTTP_PORTvalue. -
The HTTP bind hardening also covers TLS listeners, reverses a widening, and closes the spawn environment.
-
Flair's HTTP listener is now bound by host and port, defaulting to loopback. (#1502)
Heads-up: the new default is strictly narrower — before this, a bare port
bound every interface, including the credentialed HTTP surface, and that narrowing
is the fix. It also means an install reachable remotely today will answer only on
127.0.0.1after its nextflair restartorflair upgrade, with no error:
remote agents, LAN clients and federation peers simply stop connecting. Widening is
now deliberate — declare it withflair init --http-bind <host>, the
FLAIR_HTTP_BINDenvironment variable, or a top-levelhttpBind:key in
~/.flair/config.yaml. Thehttp.hostkey shown in older deployment docs is not
read by Flair and will not preserve a widened bind, so set one of those three before
upgrading. Only hosts that include IPv4 loopback (loopback itself or a wildcard) are
accepted. -
Apple Silicon now embeds on Metal by default, and Health says so. (#1437)
Heads-up:
FLAIR_EMBED_GPU_LAYERS=0pins CPU on Apple Silicon.
Unset now means "derive", not "HFE's 0".
Fixed
-
Flair now keeps the admin password out of the launchd service file;
flair initandflair doctor --fixrefuse to write an unstartable one. (#1685, #1693, #1684) -
bootstrapno longer ships byte-identical soul entries more than once. (#1431) -
The macOS launchd CI diagnostics now redact every credential name Flair knows about, not a hand-maintained subset.
-
The CLI honours the
port:in~/.flair/config.yaml, and an unreachable instance no longer blames a config that is already correct. (#1719) -
docs/federation.mdnow states that sync is push-only. (#1452, #934) -
flair federation pairnames a local/FederationInstance403 instead of dumping raw AccessViolation. (#820)Heads-up: a 403 on pair is usually the local identity read, not the
hub. CheckFLAIR_ADMIN_AGENTSin the server process env, or
flair principal add <id> --admin, before chasing hub tokens. -
scripts/flair-client.mjsloads the raw 32-byte keyflair agent addwrites. (#1736) -
flair hook statusreports verified delivery, not a bare wired check. (#1734)Heads-up: a green hook status verified that the hook command
produces SessionStart additionalContext when run — final delivery
still depends on harness trust (re-approve in/hooks) and the
harness's own injection step. It does not mean a line exists in
hooks.json. After install, re-approve the hook in Codex (/hooks)
before the next session. -
flair initno longer writes a fresh admin-pass file that 401s against a persisted Harper user.Heads-up:
HDB_ADMIN_PASSWORDstill only seeds a brand-new install.
Re-init never rotates a stored hash unless you pass--reset-admin-pass.
That flag prints the user, socket, and destination file first, and refuses
if the operations socket is not owner-only (0700 dir / 0600 socket). -
A current server now refuses an identified flair-client older than 0.18.0 on memory writes, and
flair doctornames the silent-drop pin.Heads-up: if writes look stored but never land, upgrade the adapter
(flair upgrade/ pin@tpsdev-ai/flair-mcpand@tpsdev-ai/flair-client= 0.18.0), not the server. Restart the MCP host after the pin moves.
-
A fresh launchd instance now applies owner-only socket permissions on first start, so
flair doctoris green without a second restart. (#1701) -
The plain-tree upgrade CI lane now canonicalizes its fixture paths, so it is truthful on hosts where
TMPDIRis a symlink.Heads-up: this fixes the lane, not the product. A real deploy whose systemd unit
names a symlinked path (/opt/flair -> /srv/flair) is still never discovered, so
flair upgraderestarts the instance outside that unit — the service comes back,
but systemd's supervision is bypassed and it is left unsupervised. Set
FLAIR_SYSTEMD_UNIT=<unit>to restart through the unit until this is fixed. Tracked
separately. -
Orphaned ephemeral test Harpers are killed and removed on the next
startHarper. (#1372) -
POST /ReflectMemoriesexecute no longer dies with HTTP 422 when the generative backend is cold. (#1263) -
REM nightly no longer reports
completedwhen a core stage did not run. (#924, #1503) -
Skill registration refuses
/tmpsources and resolvesSKILL_CONFLICT. (#1433)Heads-up: scratch/inspect paths are no longer recorded as durable
skill provenance. Re-register from an npm specifier or a non-temp path. -
SkillScan no longer treats markdown inline code as shell injection. (#1434)
Heads-up:
tps skill registerstill refuseshigh/criticalwith
no bypass. The verdict does not yet gate skill loading (that is a
later #1434 step). -
flair status --jsonnames whatfederation.peers.connectedmeasures. (#1499, #1146)Heads-up:
federation.peersnow includesmeasuredBy: "lastSyncAt".
connectedis last-contact within 24h, not a live TCP session.
Full record: CHANGELOG.md