Repository navigation
v0.58.0
Added
-
The release tagger also marks the Python package.
Heads-up: a repo admin must list the release-tag App as a bypass actor on
theadk-flair-v*tag ruleset (id 24044018). Until then the second POST is
rejected (403) and the release refuses withadk-ref-write-rejected. -
The release attempt now carries its certified digest, the canary has a machine surface, and an unprivileged poll can start the promote.
-
Memories now support validated host-source pointers, stored in
MemoryHostSourceand returned through visibility-gated reads (slice 1 of #1940). (#1940) -
Claude Code can now recall Flair memories on every prompt, not only at session start. (#2066)
-
Claude Code can now save a continuity record just before a compaction and show it first when the session continues or restarts. (#2069)
Changed
-
The supply-chain bake-time gate now also checks exact-pinned external
optionalDependencies, not onlydependencies. (#1935)Heads-up: a project that copies the gate, as described in
docs/supply-chain-policy.md, needs both files now: copy
scripts/lib/check-dep-ages-collect.mjsinto alib/directory beside
the script, keeping the relative layout, or the script fails at import. -
Breaking: non-admin Memory reads return full authorized rows and ignore
select/property; clients must select fields from the returned object. (#1940) -
A Relay
POST /Messagethat reuses a stored message id gets the idempotent answer only when it comes from that message's sender. -
Bootstrap tests pin the priority winner for duplicate soul values. (#1730)
-
In CI the unit lane now keeps going past a failing step and reports all failures at once, instead of stopping at the first. (#2030)
-
POST /RecordUsagecounts only memories in the caller's read scope, and a non-adminMemoryUsageread shows a row only while its memory is readable.Heads-up: a usage report counts only when the memory is in the reporting agent's read
scope. Memories created throughMemory.post()orMemory.put()default to private for
standardandephemeraldurability.POST /FeedMemoriesdefaultsephemeralrecords to
private, while a newstandardfeed record with novisibilityfield is non-private; usage
reports from other agents can count it.
Fixed
-
flair initstops before authenticating when one read shows another data directory. -
A workspace package's non-optional peer must now resolve, in
bun.lock, to a version its declared range allows. (#1936) -
Cleanup failures now fail the maintenance response, the transaction helper refuses to run unwrapped, and the pointer failure switch is a test-only adapter replacement. (#1940)
-
The host pointer joins on a server-stamped row incarnation token, so a stale pointer is never returned and cleanup is hygiene. (#1965, #1940)
-
A pointer commits with its Memory row, and an echoed pointer keeps a SHARED pointer shared. (#1940)
-
Reindex retains memory provenance, feed ingestion stamps it anew, and failed pointer cleanup preserves lexical recall. (#1940)
-
Client wiring, signing and read-scope text match the code in the README, the MCP guide and the tool descriptions. (#1943)
-
FlairStorestructurally satisfies LangGraph'sBaseStoretype, and its documentation describes the implemented adapter. (#1943) -
Read-scope comments and model-facing tool text describe what the server does. (#1943)
-
The Hermes plugin's key loader now accepts a base64-encoded raw 32-byte Ed25519 seed
-
flair-client, the ADK Python memory service and the Hermes plugin sign the path they send when the base URL has a path.
-
The release guide and the release run's summary give all three post-publish canary inputs. (#1996)
-
Metal engagement is read from the embedding engine, so an empty launchd capture is no longer reported as CPU.
Heads-up: for GPU-offload requests, Apple Silicon status uses engine
readback; absent readback is reported as unconfirmed. -
A CLI and an instance in different install trees are now named;
flair initre-points only a service unit it proves is its own. (#2034) -
Launchd handoffs check before stopping anything, report what they could not verify, and claim launchd only when proven (flair#2040). (#2040)
Heads-up: to hand a directly running instance to launchd, run
flair doctor --fixfrom a console (GUI) login session on the Mac. launchd
may also start the job at the next console login (the plist sets RunAtLoad),
provided the plist is valid and the job is enabled. -
A leftover daemon identity sidecar no longer makes a stop or restart refuse.
-
check-dep-ages treats an unparseable publish time as a registry failure.
-
The CI dependency-age gate refuses the fixture-root override.
-
flair initputs back the plist it wrote when the check of that plist cannot run (flair#2078). (#2078) -
ADK record ids for colon-bearing tuples sit outside historical event-join ids.
-
The BM25 index builds in the background after startup, and
flair statusshows its progress. (#2032) -
Doctor names continuity hook pins that are not resolved versions. (#1819)
-
REM now archives validTo-expired memories, making expired-memory health warnings actionable. (#2033, #1503)
-
Federation documentation distinguishes implemented behavior from protocol placeholders. (#1453)
-
Memory and soul feed subscriptions apply the subscriber's read scope.
-
Changelog validation rejects odd continuation indentation and leading tabs. (#2007)
-
Symlinked PATH directories no longer trigger false missing-PATH warnings. (#2034)
-
The native
/mcppath checks the principal's status on each tool call it dispatches through a credential mapping. -
MCP setup follows the quickstart and documents BM25 cold starts. (#1486)
-
Memory delete waits for request commit before updating the lexical index.
-
Memory PATCH validates a durability it sets. (#1961)
-
flair memory searchaccepts--json. (#1717) -
PATCH updates existing rows; for a caller that is neither an administrator nor a trusted internal call it never creates one.
Heads-up: a client that created rows with PATCH using an agent key now
gets a refusal: 404 from the table's guard, or an earlier refusal from
Harper's permission check or from the resource. Where the resource permits
creation, create the row with POST or PUT first; PATCH then updates it. -
The release guide explains nightly tag recovery after an advisory CI failure. (#1992)
-
REM records invalid stage response envelopes as failures. (#1738)
-
Table subscription routes are served to administrators only.
Heads-up: a client that subscribed to a table route with an agent key now
gets 403. Subscribe with an administrator's credential; a verified agent can
use/FeedMemoriesfor changes to the memories it can read, and
/FeedSoulsfor soul changes. -
Task summaries accept an optional generic reference. (#1780)
-
Failed post-upgrade restarts keep a swapped Flair package after a refused pre-upgrade
/Healthconnection.Heads-up: After a refused pre-upgrade
/Healthconnection, a failed
restart keeps the new version only when Flair itself was swapped, exits
successfully, and printsflair start. Timeouts remain indeterminate.
A pre-upgrade snapshot leaves an instance with a refused/Healthconnection
stopped; it no longer starts the old version before the package swap.
Engine-change rollback retains pre-restore data beside the data directory;
keep this copy to recover post-snapshot writes with the engine that wrote them. -
Rollback recovery now warns when the proposed version failed earlier in the upgrade.
-
Client wiring and hook repairs check the package pin they replace. (#1848)
Security
-
Agent-auth and federation nonces are recorded once per instance, in a table every Harper worker thread shares. (#2061)
Heads-up:
FLAIR_AGENT_AUTH_WINDOW_MS, if you set it, must stay below
60000. A larger window refuses every TPS-Ed25519 request with
replay_store_unavailable, and the log names the variable. -
The by-id read gate checks the unselected row through its own target.
-
A non-admin HTTP collection
POSTis served only by a resource's ownpost(), and Relationship has one. -
Application creates derive
originatorInstanceIdfrom the local instance identity, or stamp null when unavailable; updates preserve the stored value.Heads-up: application
POST/PUT/PATCHbodies do not choose
originatorInstanceId; creates derive local identity and updates retain
stored attribution. -
Root dependency overrides for brace-expansion, fast-uri and moment move the repo lockfile out of their advisories' affected ranges.
-
Root dependency overrides raised for undici, ip-address, lodash, joi and fast-uri advisories in the repo lockfile.
-
provenance.verified.timestampis now stamped from the server clock. (#1960)
Full record: CHANGELOG.md