Skip to content

Commit d91ba37

Browse files
authored
release: v0.20.0 — writer-controlled sharing, recall sweep, authz hardening (#572)
Bumps all 7 workspace packages 0.19.0 → 0.20.0 + CHANGELOG. Contains: Layer 1 private/shared + centralized read-scoping (#565), recall sweep (ume4/9rc6/hesq #564/#566/#567), teammate-findings surfacing (#568), cross-agent delete authz guards (#569/#570), nonce-cache consolidation (#559), and CI/tooling fixes (#560/#561/#562/#571). Full suite green (1622). Both K&S approved. Phase 2 publish (--publish) is the maintainer's 2FA step.
1 parent 8255d28 commit d91ba37

9 files changed

Lines changed: 49 additions & 23 deletions

File tree

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,32 @@
22

33
## [Unreleased]
44

5+
## [0.20.0] - 2026-07-05
6+
7+
Writer-controlled memory sharing (Kris flair#522/#550), a memory recall-correctness sweep, and cross-agent authz hardening.
8+
9+
### ✨ Writer-controlled memory sharing (#522 / #550)
10+
11+
- **Layer 1 — `Memory.visibility` = private/shared + centralized read-scoping (#565).** A single chokepoint (`resolveReadScope`) that every cross-agent read path routes through (Memory.search/get, SemanticSearch, MemoryBootstrap, the by-id guard). Durability-keyed default (permanent/persistent → shared, ephemeral → private); a `private` memory is never returned to a non-owner on any path. Migration-invariant — existing memories keep their exact access (`visibility != private` treats no-visibility as shared). Also deletes the SemanticSearch `visibility=="office"` global read leak.
12+
- **Surface teammate findings (#568).** Bootstrap surfaces grant-visible teammate memories relevant to `currentTask` in a distinct, attributed section; the agent's own-context sections stay own-only.
13+
14+
### 🔧 Memory recall correctness
15+
16+
- **Dedup signal on singleton results (#564, ops-ume4).** Harper omits `$distance` when a cosine-sort result set is a singleton → dedup silently scored 0. Fallback: point-lookup the candidate and compute cosine directly.
17+
- **Superseded records no longer resurface in recall (#566 SemanticSearch/BM25, #567 bootstrap).** A server-superseded record (past `validTo`, not archived) not co-present with its successor could resurface; now excluded unconditionally in every recall path.
18+
- **openclaw-flair supersede: write-new-before-close-old + observable failure (#563, ops-mmh9).**
19+
20+
### 🔒 Security
21+
22+
- **Cross-agent delete authz regression guards** for `Relationship.delete` (#569) and `Credential.delete` (#570) — both verified safe against real Harper (the target record is bound before the method runs), now guarded so a future refactor can't silently reintroduce a bypass.
23+
- **Consolidated 3 Ed25519 nonce caches + crypto helpers into one shared guard (#559, ops-c4op).**
24+
25+
### 🧰 Tooling / CI
26+
27+
- **`release.sh` aligns bun.lock leaf specifiers after bump** — stops the recurring `--frozen-lockfile` desync (#560, ops-i9w8).
28+
- **Fail-fast timeouts on the two timeout-less CI jobs** whose sfw (Socket firewall) install could hang and block merge indefinitely (#571, ops-fumh).
29+
- **Real-Harper dedup/supersede e2e** (#562, which found ops-ume4) + Memory.get RequestTarget routing coverage (#561).
30+
531
## [0.19.0] - 2026-07-03
632

733
The read-gate security sweep: three distinct anonymous/cross-agent read exposures, all found from one Sherlock sweep RED and closed.

bun.lock

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tpsdev-ai/flair",
3-
"version": "0.19.0",
3+
"version": "0.20.0",
44
"description": "Identity, memory, and soul for AI agents. Cryptographic identity (Ed25519), semantic memory with local embeddings, and persistent personality — all in a single process.",
55
"type": "module",
66
"license": "Apache-2.0",

packages/flair-client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tpsdev-ai/flair-client",
3-
"version": "0.19.0",
3+
"version": "0.20.0",
44
"description": "Lightweight client for Flair — identity, memory, and soul for AI agents. Zero heavy dependencies.",
55
"type": "module",
66
"main": "dist/index.js",

packages/flair-mcp/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tpsdev-ai/flair-mcp",
3-
"version": "0.19.0",
3+
"version": "0.20.0",
44
"description": "MCP server for Flair — persistent memory for Claude Code, Cursor, and any MCP client.",
55
"type": "module",
66
"main": "dist/index.js",
@@ -27,7 +27,7 @@
2727
},
2828
"dependencies": {
2929
"@modelcontextprotocol/sdk": "1.27.1",
30-
"@tpsdev-ai/flair-client": "0.19.0",
30+
"@tpsdev-ai/flair-client": "0.20.0",
3131
"zod": "4.3.6"
3232
},
3333
"license": "Apache-2.0",

packages/langgraph-flair/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tpsdev-ai/langgraph-flair",
3-
"version": "0.19.0",
3+
"version": "0.20.0",
44
"description": "LangGraph BaseStore adapter backed by Flair — durable agent memory with crypto-pinned identity, federation, and cross-orchestrator portability.",
55
"type": "module",
66
"main": "dist/index.js",
@@ -36,7 +36,7 @@
3636
},
3737
"license": "Apache-2.0",
3838
"dependencies": {
39-
"@tpsdev-ai/flair-client": "0.19.0"
39+
"@tpsdev-ai/flair-client": "0.20.0"
4040
},
4141
"peerDependencies": {
4242
"@langchain/langgraph-checkpoint": ">=0.0.10"

packages/n8n-nodes-flair/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tpsdev-ai/n8n-nodes-flair",
3-
"version": "0.19.0",
3+
"version": "0.20.0",
44
"description": "n8n community node — use Flair as your AI Agent's memory backend. Includes FlairChatMemory (Memory port) and FlairSearch (Tool port).",
55
"type": "commonjs",
66
"main": "dist/index.js",
@@ -48,7 +48,7 @@
4848
"langchain"
4949
],
5050
"dependencies": {
51-
"@tpsdev-ai/flair-client": "0.19.0",
51+
"@tpsdev-ai/flair-client": "0.20.0",
5252
"zod": "3.25.76"
5353
},
5454
"peerDependencies": {

packages/openclaw-flair/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tpsdev-ai/openclaw-flair",
3-
"version": "0.19.0",
3+
"version": "0.20.0",
44
"description": "OpenClaw memory plugin for Flair — agent identity and semantic memory",
55
"type": "module",
66
"main": "./dist/index.js",
@@ -58,7 +58,7 @@
5858
},
5959
"dependencies": {
6060
"@sinclair/typebox": "0.34.48",
61-
"@tpsdev-ai/flair-client": "0.19.0"
61+
"@tpsdev-ai/flair-client": "0.20.0"
6262
},
6363
"devDependencies": {
6464
"typescript": "5.9.3"

packages/pi-flair/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tpsdev-ai/pi-flair",
3-
"version": "0.19.0",
3+
"version": "0.20.0",
44
"description": "Flair memory extension for pi — persistent memory access from within pi sessions",
55
"type": "module",
66
"main": "dist/index.js",
@@ -21,7 +21,7 @@
2121
"node": ">=18"
2222
},
2323
"dependencies": {
24-
"@tpsdev-ai/flair-client": "0.19.0",
24+
"@tpsdev-ai/flair-client": "0.20.0",
2525
"@sinclair/typebox": "0.34.48"
2626
},
2727
"license": "Apache-2.0",

0 commit comments

Comments
 (0)