summaryrefslogtreecommitdiffstats
path: root/CLAUDE.md
diff options
context:
space:
mode:
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md6
1 files changed, 4 insertions, 2 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 14d1980..ad215d5 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -119,8 +119,10 @@ Scope: `hub`, `node`, `common`, or omitted for cross-cutting
- **NS4** ~~`admin_pk_ed25519` auto-pinned from keystore~~ ❌ **that was finding M3.** The
keystore key is not the key the browser signs with, so every admin operation failed
closed. Authority now comes from the node's roster — `meshbay-node operator pair`
- (2026-08-14). `admin_pk_ed25519` is still read as a legacy form; never auto-pin again,
- and never resolve the operator's key through the hub
+ (2026-08-14). `admin_pk_ed25519` was kept as a legacy form and is now **removed**
+ (2026-08-15) — one source of authority, the roster. A config still naming it is
+ warned about at startup, never obeyed. Never auto-pin again, and never resolve the
+ operator's key through the hub
- **NS5** DTLS channel binding in GEK-HMAC — `HMAC(GEK, nonce || offer_fp || answer_fp)` detects WebRTC signaling MitM ✅ DONE
- **NS6** Chat `sender_id` enforced from authenticated session — prevents impersonation ✅ DONE
- **NS7** Node Ed25519 auth — node daemon authenticates to hub via `POST /v1/nodes/auth` (Ed25519 signed timestamp), no auth_key/password on node. JWT `scope: "node"` blocks group management (create/add/delete/join). Operator manages groups from browser only. ✅ DONE