Skip to content

Commit a6ea9b7

Browse files
sym-botclaude
andcommitted
release: 0.7.23 — earned authority (role-grant chain + 6.5 enforcement)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 7d6ace8 commit a6ea9b7

3 files changed

Lines changed: 19 additions & 8 deletions

File tree

CHANGELOG.md

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

33
> **Note:** Versions 0.3.26 – 0.3.55 were released as git tags without changelog entries. Changelog resumes at 0.3.56 below.
44
5+
## 0.7.23 — 2026-06-29
6+
7+
### Added
8+
9+
- **Earned authority — the lifecycle role a node claims is now earned and verifiable, not self-asserted (MMP §6.5).** A node's validator/anchor authority flows only along signed role-grant chains that terminate at a pinned, non-earnable **anchor** (the founder root); over-reaching, unrooted, and cyclic grants confer nothing (Douceur — authority must bottom out at a pinned root).
10+
- `lib/role-grant-store.js``RoleGrantStore` holds signed role-grant / role-revoke records and resolves "what role did node N hold at time T" by walking the chain. Signatures verify on ingest against the grantor's announced key (anchor key pinned); whether the grantor actually *held* the rank is a resolve-time, role-at-time property, so an unentitled grant is stored but inert. Persisted append-only, reloaded on construction.
11+
- `lib/node.js` — the node pins an anchor (`opts.anchor` or `SYM_FOUNDER_ANCHOR="nodeId:publicKey"`), holds the grant store, and stamps its **resolved** role into attestations + witnesses (so `verifyAttestationRole` checks the stamp against the chain). `grantRole` / `revokeRole` sign + gossip a grant; `resolveRole(nodeId, at)` exposes chain resolution. With no anchor configured the node falls back to the static `lifecycleRole` (backward compatible).
12+
- `lib/frame-handler.js` — ingests `role-grant` / `role-revoke` frames (store verifies, relay-once).
13+
- **§6.5 enforcement**`MemoryStore.validateCMB` now requires the caller's resolved role to rank validator-or-above; `canonizeCMB` requires anchor. `node.validateCMB` / `node.canonizeCMB` resolve this node's earned role and let the store enforce, so a participant can advance no CMB's lifecycle.
14+
- 17 tests (10 store + 7 node). Earned authority is **dormant until an anchor is pinned** — until then every node uses its static role, unchanged.
15+
516
## 0.7.22 — 2026-06-29
617

718
### Added

package-lock.json

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

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@sym-bot/sym",
3-
"version": "0.7.22",
3+
"version": "0.7.23",
44
"description": "Infrastructure and protocol for multi-agent collective intelligence",
55
"main": "lib/node.js",
66
"bin": {
@@ -31,7 +31,7 @@
3131
"node": ">=18"
3232
},
3333
"dependencies": {
34-
"@sym-bot/core": "^0.3.43",
34+
"@sym-bot/core": "^0.3.44",
3535
"bonjour-service": "^1.3.0",
3636
"ws": "^8.20.0"
3737
},

0 commit comments

Comments
 (0)