docs: mark W7 P1 complete + screenshot-verified

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-15 04:06:44 -04:00
co-authored by Claude Opus 4.8
parent a99c789716
commit 22e4c68544
+21 -22
View File
@@ -70,28 +70,27 @@ peerspeak?") stays on Signal/Telegram — peerspeak is not a messenger.
## Core primitives to build ## Core primitives to build
### P1 — Persistent identity (+ regenerate) — Small, foundational ### P1 — Persistent identity (+ regenerate) — ✅ DONE 2026-06-15
**Foundation DONE (`d157d78`, 2026-06-15):** `src/identity.rs` (`load_or_create` / - **Foundation (`d157d78`):** `src/identity.rs` (`load_or_create` / `regenerate` /
`regenerate` / `save` over a `0600` hex key file at `~/.config/peerspeak/identity.key`, `save` over a `0600` hex key file at `~/.config/peerspeak/identity.key`, atomic
atomic write, malformed = hard error, path-injectable fs seam + 8 unit tests incl. write, malformed = hard error, path-injectable fs seam + 8 unit tests incl.
create/persist/regenerate/perms). Core loop now loads the stable key instead of create/persist/regenerate/perms). Core loop loads the stable key instead of
`generate()` (falls back to ephemeral only if the file can't be read/written). The `generate()`, falling back to ephemeral only if the file can't be read/written.
key file is raw hex (a secret, not structured config — JSON/TOML only matters for Key file is raw hex (a secret, not structured config).
the friends store). 238 lib tests green, clippy clean, release builds. - **Regenerate + degraded warning (`a99c789`):** `UiEvent::IdentityStatus
**Remaining in P1:** { node_id, persisted, error }` (startup + after regenerate);
- **Settings "Regenerate identity" control** (confirm + warn) — `regenerate()` `CoreCommand::RegenerateIdentity` (mints+persists a fresh key, swaps the core's
exists; UI + a `CoreCommand` that rebuilds the live endpoint with the new key live key for the next join); Settings "Identity" section showing the permanent
still to wire. ID, a Regenerate button behind a destructive-action confirm modal, and a standing
- **Visual warning when the key can't be read/written** (user, 2026-06-15). Today red "Identity not saved" banner when `persisted == false`.
the ephemeral fallback only logs — it must surface a **persistent** UI indicator, - **Verified:** 238 lib tests green, clippy clean, release builds. **Screenshot-
because running unsaved is a real degraded state (your id won't survive the next verified** — Identity section, confirm modal, and the degraded banner (`chmod 000`
launch → friends stop recognising you). Plan: a dedicated `UiEvent` the key → "Permission denied (os error 13)" warning; Regenerate clears it).
(`IdentityNotPersisted(reason)`, distinct from the transient `Error` - **Deferred (small, optional):** an always-visible degraded badge *outside*
`status_message`), an `identity_degraded: Option<String>` flag in app state, and Settings (today the warning lives in the Identity section only). The
a standing badge + a fuller explainer in the identity Settings section ("Identity relay-locatability spike (a saved `EndpointAddr` resolving by node ID without
couldn't be saved to `~/.config/peerspeak/identity.key` — friends won't recognise discovery while on the same relay) still wants confirming during 2-machine
you next launch; check disk/permissions"). Build alongside the regenerate UI testing — it underpins the P4 presence story.
slice (same identity Settings section + `CoreCommand` path).
- **Spike:** verify same-relay reachability by node ID without discovery on - **Spike:** verify same-relay reachability by node ID without discovery on
`iroh = 1.0.0-rc.0` (a saved `EndpointAddr` should resolve while the peer stays `iroh = 1.0.0-rc.0` (a saved `EndpointAddr` should resolve while the peer stays
on the same relay). Underpins the whole presence story; do during 2-machine on the same relay). Underpins the whole presence story; do during 2-machine