mirror of
https://github.com/PR0M3TH3AN/bitlogin.git
synced 2026-10-27 08:31:21 +00:00
docs: pointer to the SeedPass vault/identity spec for future managed-accounts work
The shared spec stays canonical in the SeedPass repo, where its conformance oracle (cross-impl suite + fixtures) lives; this doc links it, summarizes the load-bearing rules to design against (index immutability, no shadow account numbers, namespaced metadata, capsule rank/independence), and states the preconditions: SeedPass PR #989's security review lands first, and @seedpass/core gets published. Also flags the first real design task -- reconciling this repo's v0.6 capsule format with SeedPass spec 11.1. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Tkj4rzKBA3uhfgk7kqjsb8
This commit is contained in:
1 parent
ea77c4b9b4
commit
6fc4ff09a9
1 file changed
+73
@@ -0,0 +1,73 @@
|
|||||||
|
# SeedPass interop — managed accounts groundwork
|
||||||
|
|
||||||
|
Status: pointer / pre-work — 2026-08-18. Nothing in this repo implements it yet.
|
||||||
|
|
||||||
|
## Where the shared spec lives (and why not here)
|
||||||
|
|
||||||
|
The **SeedPass Vault & Identity Specification** is the format contract for the
|
||||||
|
planned managed-accounts direction: one deterministic BIP-85 account tree that
|
||||||
|
SeedPass (the sovereign superset) and BitLogin (an identity-management subset
|
||||||
|
client) operate together, without requiring each other.
|
||||||
|
|
||||||
|
Canonical location:
|
||||||
|
|
||||||
|
> `SeedPass/docs/seedpass_vault_identity_spec.md`
|
||||||
|
> (branch `port/typescript-web-extension` until PR #989 merges, then `main`)
|
||||||
|
|
||||||
|
It deliberately lives in the SeedPass repo, not here, because that is where
|
||||||
|
its **conformance oracle** lives: the spec is extracted from working code, and
|
||||||
|
`scripts/cross_impl_check.py` (38 checks) plus the Python-generated fixtures
|
||||||
|
in `js/packages/test-vectors/` are what a conforming implementation tests
|
||||||
|
against. The spec's own change-control section says that where the document
|
||||||
|
and the code disagree, the code and the cross-impl suite win. A copy here
|
||||||
|
would drift — the exact failure the spec's preservation rules exist to
|
||||||
|
prevent. Do not vendor it; link it.
|
||||||
|
|
||||||
|
## The load-bearing rules (summary, not a substitute for reading it)
|
||||||
|
|
||||||
|
- **Entry index = permanent cryptographic coordinate.** "Alice is managed
|
||||||
|
account #184" regenerates the same identity forever. Allocation is
|
||||||
|
watermark-based and ids are never reused, even across sync deletion
|
||||||
|
(spec §7).
|
||||||
|
- **No shadow account numbers** (§8.4): BitLogin must never keep its own
|
||||||
|
mapping of account numbers to derivation indexes. The entry id is the
|
||||||
|
account number.
|
||||||
|
- **Namespaced metadata** (§8.3): BitLogin's own data (roles, permissions,
|
||||||
|
org records) goes in `bitlogin:`-namespaced fields or `bitlogin_*` record
|
||||||
|
kinds. Both SeedPass implementations already carry unknown kinds through
|
||||||
|
byte-for-byte (enforced by cross-impl Phase L).
|
||||||
|
- **Rank and independence rules for capsule unlock** (§11.1): a managed
|
||||||
|
identity must never be able to unlock the root that provisioned it, and an
|
||||||
|
unlocking key must not derive from the vault it unlocks. Normative — design
|
||||||
|
against them from the start.
|
||||||
|
- **Subset writing** (§8.5): implement `managed_account` + `nostr` + your own
|
||||||
|
namespaced kinds; never create kinds you cannot correctly derive.
|
||||||
|
|
||||||
|
## What this repo would consume
|
||||||
|
|
||||||
|
- **`@seedpass/core`** (TypeScript, browser-safe: WebCrypto + noble/scure) —
|
||||||
|
the same library the SeedPass CLI uses. Importing it makes derivation
|
||||||
|
agreement true by construction rather than by re-implementation; the
|
||||||
|
Python implementation remains the independent cross-check.
|
||||||
|
- **The fixtures + cross-impl suite** as the conformance test: any vault
|
||||||
|
BitLogin touches must survive a SeedPass open-and-save round trip
|
||||||
|
unchanged, and vice versa (spec §8.6).
|
||||||
|
|
||||||
|
## Relationship to `docs/spec.md` (BitLogin v0.6)
|
||||||
|
|
||||||
|
This repo's existing spec covers the current product: portable Nostr accounts
|
||||||
|
(login name + password + recovery phrase, encrypted capsules on relays).
|
||||||
|
The SeedPass interop is a **future layer**, not a replacement — managed
|
||||||
|
accounts would make BitLogin an interface to a SeedPass-rooted deterministic
|
||||||
|
tree, per the rules above. Reconciling the two specs (in particular: this
|
||||||
|
repo's capsule format vs SeedPass §11.1 capsule unlock, and whether a
|
||||||
|
BitLogin account's keypair can be a SeedPass-derived child) is the first
|
||||||
|
design task when that work starts.
|
||||||
|
|
||||||
|
## Preconditions before building on this
|
||||||
|
|
||||||
|
1. SeedPass PR #989 (independent security review of the TypeScript core)
|
||||||
|
lands and merges. Everything above sits on `@seedpass/core`; do not build
|
||||||
|
an identity product on it before that review.
|
||||||
|
2. `@seedpass/core` is published (or vendored by commit pin) — it is not on
|
||||||
|
npm yet.
|
||||||
Reference in new issue
Block a user