Skip to content

[DO NOT MERGE] chore(identity): DO NOT MERGE — isolated debug Keychain slot (full stack for native testing) - #1822

Draft
matt2e wants to merge 1 commit into
onboarding/08-settings-key-backup-rowfrom
onboarding/09-do-not-merge-keychain-slot
Draft

matt2e wants to merge 1 commit into
onboarding/08-settings-key-backup-rowfrom
onboarding/09-do-not-merge-keychain-slot

Conversation

@matt2e

@matt2e matt2e commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

DO NOT MERGE. PR 08's tree plus one debug-only commit, so the native app can be built and exercised on the complete first-run flow. Nothing in it is meant to land.

Onboarding stack (merge in order, top to bottom):

  1. fix(navigation): run the visit deadline only while a presenter is attached #1814 navigation: visit deadline only while a presenter is attached
  2. refactor(communities): extract the join owner and add the pre-join relay lookup #1815 communities: join owner and pre-join relay lookup
  3. feat(identity): observable nsec backup status with pass tickets, explicit lock release, and refused-recovery copy #1816 identity: native nsec backup status
  4. feat(builderlab): tenant table — a login origin per hosted relay, granted natively and accepted by the binding signer #1817 builderlab: tenant table and granted native origins
  5. feat(identity): first-run Builderlab account client — sign-in without a plugin session, kgoose reads, link/unlink, backup, saved communities — and its dev seed #1818 identity: first-run Builderlab account client and dev seed
  6. feat(identity): first-run setup store, step table and pages (composition follows in the next PR) #1819 identity: first-run setup store, step table and pages
  7. feat(identity): the first-run Welcome flow replaces the key-setup gate (FOUNDATION: App.tsx) #1820 identity: Welcome flow replaces the key-setup gate
  8. feat(settings): read-only Key backup row in Settings → Identity #1821 settings: read-only Key backup row
  9. [DO NOT MERGE] chore(identity): DO NOT MERGE — isolated debug Keychain slot (full stack for native testing) #1822 DO NOT MERGE: isolated debug Keychain slot (full stack for native testing) ← this PR

Diff over PR 08: production +2/−2; tests +6/−3 — the isolated debug Keychain slot (xyz.block.buzz.desktop.identity.debug.onboarding) so a dev build of this branch does not share an identity with the primary checkout.

Native testing on this tree

Build and run the desktop app from this branch. Because of the debug slot, the first run starts from an empty identity without disturbing the primary checkout's Keychain item. To reset the slot between runs:

security delete-generic-password -s xyz.block.buzz.desktop.identity.debug.onboarding -a human

Native evidence (first-run recordings, hands-on checks) applies only to this tree; PRs 01–08 are unit/integration-tested only.

Checks run

Deferred to CI at the author's request (build machine under a stress load from another session). The plan's checks for this tip were the full native suites — cargo test --manifest-path src-tauri/Cargo.toml --locked and cargo test -p buzzodz-plugins --locked — at the 04 tip and again here, plus the whole-suite vitest run. Pushed with --no-verify.

🤖 Generated with Claude Code

…ychain slot

Every debug build of buzz-app, from any worktree, stores the human key in
the same Keychain item (service `dev.local.buzz.foundation.identity.debug`,
account `human`). That item already holds the real key from another
worktree, so on this branch "Creating keys…" fails with -25299 and the
first-run flow cannot be exercised without deleting that key.

This changes the debug slot name returned by `human_service(true)` in
crates/credential-store/src/lib.rs to
`dev.local.buzz.foundation.identity.debug.onboarding`. Everything that
restores, creates, imports, deletes or sign-out-marks the human key goes
through `HUMAN_SERVICE`, so this branch's dev identity is isolated and can
be reset safely:

    security delete-generic-password \
      -s dev.local.buzz.foundation.identity.debug.onboarding -a human

The release slot is unchanged. The two tests that pin the exact debug
string (`human_identity_slots_stay_separate`,
`development_and_release_items_are_separate`) move with it so CI stays
green. No TypeScript, fixture or script references the string;
docs/identity.md is left describing the real slot.

Revert or drop this commit before merging.

Validation: `cargo test -p buzz-credential-store human_identity_slots`
and `cargo test --manifest-path src-tauri/Cargo.toml
development_and_release_items_are_separate` pass; `cargo fmt --check`
clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
@matt2e
matt2e force-pushed the onboarding/08-settings-key-backup-row branch from 954be58 to b4e66e5 Compare October 29, 2026 03:36
@matt2e
matt2e force-pushed the onboarding/09-do-not-merge-keychain-slot branch from 2bc85e8 to 0735dbf Compare October 29, 2026 03:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant