Skip to content

Define and prove secure single-use iOS invite authentication #280

Description

@BunsDev

Outcome

Deliver a reviewable, fail-closed invite-authentication contract for pairing the native iOS companion with a trusted Psyche desktop host, then prove it on a physical device before changing support status.

Control metadata

Why this is separate

Draft PR #264 is valuable source material, but at 32 commits / 37 files it combines desktop invite issuance, protocol fixtures, QR/deep-link presentation, iOS parsing, certificate validation, credential exchange, secure persistence, reconnect, and recovery UI. Those surfaces cannot receive credible authority/security review as one undifferentiated merge and must not bypass #241's atomic readiness gate.

Required protocol contract

  • Define host identity, device identity, invite identity, durable credential identity, and their canonical owners.
  • Bind every invite to the exact host certificate/identity and intended protocol profile.
  • Use bounded expiry, cryptographic randomness, single-use redemption, and atomic consume semantics.
  • Prevent replay, concurrent redemption, stale acceptance, superseded-flow acceptance, cross-host use, and downgrade.
  • Keep discovery address/QR/deep-link data separate from durable identity and authority.
  • Store only the durable exchanged credential; never persist or log the invite secret.
  • Define explicit revocation, expiration, wrong-host, secure-store failure, interrupted exchange, and retry semantics.
  • Publish structured denial/recovery results without secret-bearing messages.
  • Preserve certificate pinning and fail closed on identity mismatch.

Ordered implementation slices

  1. Protocol and fixtures: typed invite/redemption records, bounds, replay/expiry vectors, canonical generation, no UI.
  2. Desktop issuer/consumer: single-writer issuance and atomic redemption with bounded storage and revocation.
  3. iOS credential exchange: parse/validate/redeem/store without exposing workspace state before Extract an atomic iOS host-readiness state machine from PR #193 #241 commits authority.
  4. QR/deep-link UX: presentation and recovery only after the protocol core is accepted.
  5. Physical acceptance: real Mac/iPhone pairing, interruption, replay, expiry, supersession, restart, revocation, and reconnect.
  6. Distribution evidence: repeat the matrix from one immutable TestFlight build under Deliver the Psyche Build iOS internal beta and continuity loop #200.

Each slice must start from current main, have one owning acceptance gate, and preserve rollback. Do not merge the 32-commit source branch as one unit.

Acceptance criteria

  • Invite material never appears in logs, accessibility output, screenshots/fixtures, crash reports, process args, support bundles, or persistent app state.
  • Exactly one redemption can commit; every concurrent/stale attempt receives a deterministic denial.
  • A credential-store failure cannot expose the new host/workspace as authoritative.
  • Revocation survives app/host restart and blocks reconnect.
  • Manual endpoint fallback and address changes preserve the same host identity.
  • Simulator tests cover transition boundaries, but physical evidence is required for the support claim.
  • An independent R3 review resolves current findings on every focused PR.
  • Deliver the Psyche Build iOS internal beta and continuity loop #200 links immutable build identity and the complete physical evidence matrix.

Non-goals

  • Treating a QR code, Bonjour address, or TLS endpoint as durable identity.
  • Publishing TestFlight from source/simulator success.
  • Merging all of feat: add secure iOS invite authentication #264 merely because its tests pass.
  • Coupling this authentication path to future cloud/off-LAN continuity.
  • Redefining Familiar, Threads, or Psyche protocol identity in the product repository.

Evidence

Link the protocol decision, focused PRs, generated fixtures, threat model, exact-head CI, security review resolution, physical-device manifest, credential revocation/reconnect proof, and rollback results.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions