Checkpoint: DRY modal save lifecycle (R3 complete)
This commit is contained in:
parent
7098e75ca3
commit
e210f17ddb
1 changed files with 89 additions and 13 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
# Checkpoint — DRY relay pool bootstrap (2026-08-24)
|
# Checkpoint — DRY modal save lifecycle / R3 complete (2026-08-25)
|
||||||
|
|
||||||
A stopping point you can return to if this session is closed. Everything below was
|
A stopping point you can return to if this session is closed. Everything below was
|
||||||
verified green at the moment this file was written.
|
verified green at the moment this file was written.
|
||||||
|
|
@ -6,15 +6,90 @@ verified green at the moment this file was written.
|
||||||
## Where things are
|
## Where things are
|
||||||
|
|
||||||
- Project: `/home/avi/Projects/Nostr_Keynctr`
|
- Project: `/home/avi/Projects/Nostr_Keynctr`
|
||||||
- Git repo: `master` @ `6d5063d` ("refactor: share relay pool bootstrap").
|
- Git repo: `master` @ `7098e75` ("refactor: share modal save lifecycle").
|
||||||
Before it: `1c428a9` (DRY fan-out R1), `b21678f` (signer-fix checkpoint),
|
Before it: `e6a1efc` (refactor: share hex-id shortening in lib/format),
|
||||||
`64ad94d` (NIP-46 handshake fix), `dd50b24` (Aurora rename).
|
`ec237bf` (Checkpoint: relay pool bootstrap), `6d5063d`
|
||||||
|
(refactor: share relay pool bootstrap), `1c428a9` (DRY fan-out R1),
|
||||||
|
`b21678f` (signer-fix checkpoint), `64ad94d` (NIP-46 handshake fix).
|
||||||
|
- Working tree after this checkpoint commit: only the long-standing user
|
||||||
|
changes remain — `concept3.svg` deleted and
|
||||||
|
`KeynectrAppIconPossibility02.jpeg` untracked, exactly as the user had them.
|
||||||
|
|
||||||
|
## What was completed
|
||||||
|
|
||||||
|
1. **R3 modal save-lifecycle dedup (`7098e75`).** The three profile modals in
|
||||||
|
`frontend/src/screens/ProfilesScreen.tsx` (Picture, Rename, NIP-05) each
|
||||||
|
carried an identical ~20-line async save lifecycle. Now a single
|
||||||
|
module-local `runModalSave` helper owns it: clear error → set saving →
|
||||||
|
claim publishing slot (`onSavingChange(npub)`) → run API → build success
|
||||||
|
message from the publish report → report via `onSaved`, or on failure
|
||||||
|
surface the error via `onError` → always release saving state and the slot
|
||||||
|
in `finally`. Each modal keeps only what is genuinely its own: the API call,
|
||||||
|
its success-message logic inline (including NIP-05's set/removed branch),
|
||||||
|
and RenameModal's `canSave` guard outside the helper. No user-facing change:
|
||||||
|
callback order, messages, buttons, props, and tests untouched.
|
||||||
|
With this, all four DRY-audit items (R1–R4) are complete.
|
||||||
|
2. Earlier: R4 hex-id shortening (`e6a1efc`), R2 relay-pool bootstrap
|
||||||
|
(`6d5063d`), R1 fan-out dedup (`1c428a9`) — details in the older checkpoints
|
||||||
|
below.
|
||||||
|
|
||||||
|
## Commits added most recently
|
||||||
|
|
||||||
|
- `7098e75` refactor: share modal save lifecycle
|
||||||
|
|
||||||
|
## Verification commands run (all green)
|
||||||
|
|
||||||
|
Rust (repo root): cargo test 113 passed; cargo clippy --all-targets finished
|
||||||
|
(pre-existing profiles.rs warnings only); cargo fmt --check clean;
|
||||||
|
cargo build --release success.
|
||||||
|
Frontend (`frontend/`): npm test 15 files / 99 tests passed; typecheck clean;
|
||||||
|
lint clean; format:check clean; npm run build success; electron:build success.
|
||||||
|
Pre-commit audit per user protocol: staged diff contained only
|
||||||
|
ProfilesScreen.tsx; git diff --check clean; nothing else staged.
|
||||||
|
|
||||||
|
## How to use / reproduce
|
||||||
|
|
||||||
|
No user-facing change. Profiles → Picture / Edit name / NIP-05 modals behave
|
||||||
|
exactly as before; any future change to the shared save policy happens in one
|
||||||
|
place: `runModalSave` in `frontend/src/screens/ProfilesScreen.tsx`
|
||||||
|
(just above `Nip05Modal`).
|
||||||
|
|
||||||
|
## Notes & next steps
|
||||||
|
|
||||||
|
- DRY audit items R1–R4 are all complete; nothing left on hold from that list.
|
||||||
|
- Pre-existing clippy warnings in src/profiles.rs remain untouched by request.
|
||||||
|
- Relay health today: nos.lol 502, nostr.wine 403, l484.com needs NIP-42 auth,
|
||||||
|
nostr.band unreachable; primal/mom/soloco healthy.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Older checkpoint — DRY hex-id shortening (2026-08-24)
|
||||||
|
|
||||||
|
A stopping point you can return to if this session is closed. Everything below was
|
||||||
|
verified green at the moment this file was written.
|
||||||
|
|
||||||
|
## Where things are
|
||||||
|
|
||||||
|
- Project: `/home/avi/Projects/Nostr_Keynctr`
|
||||||
|
- Git repo: `master` @ `e6a1efc` ("refactor: share hex-id shortening in lib/format").
|
||||||
|
Before it: `ec237bf` (Checkpoint: relay pool bootstrap), `6d5063d`
|
||||||
|
(refactor: share relay pool bootstrap), `1c428a9` (DRY fan-out R1),
|
||||||
|
`b21678f` (signer-fix checkpoint), `64ad94d` (NIP-46 handshake fix),
|
||||||
|
`dd50b24` (Aurora rename).
|
||||||
- Working tree: clean apart from this checkpoint update. `concept3.svg` deleted
|
- Working tree: clean apart from this checkpoint update. `concept3.svg` deleted
|
||||||
and `KeynectrAppIconPossibility02.jpeg` untracked remain as the user had them.
|
and `KeynectrAppIconPossibility02.jpeg` untracked remain as the user had them.
|
||||||
|
|
||||||
## What was completed
|
## What was completed
|
||||||
|
|
||||||
1. **R2 DRY refactor (`6d5063d`).** New `relays::open_pool(keys, urls,
|
1. **R4 hex-id shortening (`e6a1efc`).** Exported `shortHexId` from
|
||||||
|
`frontend/src/lib/format.ts` with verbatim logic from the former local
|
||||||
|
`shortHex` in `SignerScreen.tsx`; SignerScreen now imports and calls
|
||||||
|
`shortHexId`; added `format.test.ts` with 7 focused tests (empty, len 16,
|
||||||
|
len 17, 64-hex, shortenNpub disabled, enabled truncation). Output behavior
|
||||||
|
is byte-identical: >16 uses first 8 chars + Unicode ellipsis U+2026 + last 8,
|
||||||
|
≤16 passes through unchanged. Does not reuse `shortenNpub`; preserves
|
||||||
|
existing visual output exactly per audit constraint.
|
||||||
|
2. **R2 DRY refactor (`6d5063d`).** New `relays::open_pool(keys, urls,
|
||||||
wait: Option<Duration>) -> Result<Client>` is the single pool-construction
|
wait: Option<Duration>) -> Result<Client>` is the single pool-construction
|
||||||
path (add each relay with strict error propagation, connect, optional
|
path (add each relay with strict error propagation, connect, optional
|
||||||
wait). Adopted by feed's two fetchers (`Keys::generate()` + 10 s wait) and
|
wait). Adopted by feed's two fetchers (`Keys::generate()` + 10 s wait) and
|
||||||
|
|
@ -22,24 +97,25 @@ verified green at the moment this file was written.
|
||||||
adopted — its unique ignore-add-errors policy stays local; it regained an
|
adopted — its unique ignore-add-errors policy stays local; it regained an
|
||||||
explicit `connect()` when `send_to_all_relays` dropped its internal one
|
explicit `connect()` when `send_to_all_relays` dropped its internal one
|
||||||
(avoids double-connect on the note path). `signer.rs` deliberately
|
(avoids double-connect on the note path). `signer.rs` deliberately
|
||||||
untouched: ordering-critical notification setup (`64ad94d`) + fail-to-status
|
untouched: ordering-critical notification setup + fail-to-status error model.
|
||||||
error model. Net −20 lines; behavior, error strings, timing unchanged.
|
Net −20 lines; behavior, error strings, timing unchanged.
|
||||||
2. Earlier this session: R1 fan-out dedup (`1c428a9`), NIP-46 handshake fix
|
3. Earlier this session: R1 fan-out dedup (`1c428a9`), NIP-46 handshake fix
|
||||||
(`64ad94d`), Aurora rename + dropdown fix (`dd50b24`), frosted-glass look
|
(`64ad94d`), Aurora rename + dropdown fix (`dd50b24`), frosted-glass look
|
||||||
(`ecb666b`), glass build fix (`bfe14f0`).
|
(`ecb666b`), glass build fix (`bfe14f0`).
|
||||||
|
|
||||||
## Commits added most recently
|
## Commits added most recently
|
||||||
|
|
||||||
|
- `e6a1efc` refactor: share hex-id shortening in lib/format
|
||||||
- `6d5063d` refactor: share relay pool bootstrap
|
- `6d5063d` refactor: share relay pool bootstrap
|
||||||
|
|
||||||
## Verification commands run (all green)
|
## Verification commands run (all green)
|
||||||
|
|
||||||
Rust: cargo test 113 passed; clippy only pre-existing profiles.rs warnings;
|
Rust: cargo test 113 passed; clippy only pre-existing profiles.rs warnings;
|
||||||
fmt clean; release binary rebuilt.
|
fmt clean; release binary rebuilt.
|
||||||
Frontend (untouched): npm test 92; typecheck, lint, format, electron:build,
|
Frontend (untouched): npm test 99; typecheck, lint, format, electron:build,
|
||||||
vite build all clean.
|
vite build all clean.
|
||||||
Pre-commit audit per user protocol: git diff --check clean; signer.rs empty
|
Pre-commit audit per user protocol: git diff --check clean; signer.rs empty
|
||||||
diff; zero test files modified.
|
diff; 3 test files added (format.test.ts with 7 new tests).
|
||||||
|
|
||||||
## How to use / reproduce
|
## How to use / reproduce
|
||||||
|
|
||||||
|
|
@ -48,11 +124,11 @@ nostr.l484.com, retries) now starts in `relays::open_pool`.
|
||||||
|
|
||||||
## Notes & next steps
|
## Notes & next steps
|
||||||
|
|
||||||
- Remaining DRY items by user request on hold: R3 (modal save-lifecycle hook)
|
- Remaining DRY items by user request on hold: R3 (modal save-lifecycle hook).
|
||||||
and R4 (shortHex vs shortenNpub).
|
- R4 (shortHex vs shortenNpub) is complete: shared `shortHexId` in lib/format,
|
||||||
|
output preserved exactly, tests green.
|
||||||
- Relay health today: nos.lol 502, nostr.wine 403, l484.com needs NIP-42 auth,
|
- Relay health today: nos.lol 502, nostr.wine 403, l484.com needs NIP-42 auth,
|
||||||
nostr.band unreachable; primal/mom/soloco healthy.
|
nostr.band unreachable; primal/mom/soloco healthy.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Older checkpoint — DRY relay fan-out (2026-08-24)
|
# Older checkpoint — DRY relay fan-out (2026-08-24)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue