Account key approval visibility and safety checklist

Status: Approved priorities 1–3 are implemented and locally release-verified. All six stages of the combined cycle are complete, including operator documentation and deployment/recovery rehearsal. Community-visible events, notifications, device pairing, and revocation remain deferred follow-up work. Checked items describe completed work or decisions, not production deployment.

Reduce easy account impersonation while preserving open registration, member sponsorship, and convenient device setup. Prioritize the cross-account approval restriction, clear approval wording, and visible account-key history. Notifications and device pairing can follow as separately scoped features.

The combined Step 1 assessment and Step 2 feature description are approved for Option B, grouping priorities 1–3 with a default-enabled flag. The Step 3 development plan is approved; Stage 1 was implemented in commit c7ba748b on feature/account-key-approval-safety. The Step 4 implementation summary records all six completed stages and their verification limits. Stage 6 was committed as e48ac882b; the cycle was subsequently merged in 382b2d652. The approval policy FDP checklist supplies the narrower flag requirements within that scope. See also the findings and recommendations. Select and scope work through the Railspike workflow.

Priority 1 Prevent unintended access and clarify approvals

SituationSuggested wording
First approved key for a usernameApprove new member Bob
Additional key for the approver's usernameAdd this key to my account
Additional key for a different existing usernameGrant this key access as Bob

Stage 1 binds the target key to the signed record and rechecks live authorization under the write lock. Stage 2 adds the displayed consequence, key-count warning, exact key confirmation, signed review-context digest, and renewed review after context changes.

Meaningful authorization prompts should identify the consequential details the user is authorizing. This follows OWASP transaction authorization guidance.

Priority 2 Show account key history and exceptional approvals

Existing foundations: individual profiles show approval attribution, and the CLI audit includes invitation-derived grants, unknown attribution, and explicit warnings that review candidates are not proven violations. Policy evaluation computes classification/count/authority, and Stage 3 persists these facts in grant-bound acceptance receipts. Account-wide history is implemented in Stage 4; Stage 5 supplies the authenticated operator security view. Stage 6 supplies the acceptance-evidence specification and deployment, recovery, and rollback runbook.

Priority 3 Make approval policy changes visible

The registered flag description explains prospective behavior. Existing signed feature-flag activity supplies actor/time/source evidence; Stage 5 adds the authenticated operator view joining policy changes with grants, including signed actor/time/source evidence and explicit uncertainty for unrecorded deployment changes.

Historical policy context is useful audit evidence. It is not required to re-evaluate or remove previously accepted grants under the prospective restriction model.

Priority 4 Notify existing account holders

Notifying users when authentication factors change is consistent with OWASP factor-change guidance.

Priority 5 Make owner authorized device setup convenient

The goal is to make adding your own device easier than asking another member to approve a key claiming your username. Recovery without an available approved device remains a separate design.

Decisions before selecting follow-up cycles

Verification for selected work

Enforcement verification: php tests/run.php ApprovalPolicyTest passed all six tests, and php tests/run.php WriteApiSmokeTest::testSignedInvitationRedemptionRechecksPolicyBeforeAcceptance passed during the checkout review. These cover the permission matrix, live policy changes, competing claims, stale state, protocol bypass attempts, operator authority, and invitation acceptance. The completed Stage 6 summary records additional signed API, browser, history, access-boundary, archive/rebuild, and local release checks. The checks below reflect that recorded evidence; they were not rerun during the October 23 checklist reconciliation. The full repository suite is not claimed to pass; the summary preserves prior failures and startup-timeout rerun results.

Verification evidence: Stages 1–2 cover permission, stale-context, target-binding, and concurrent-claim checks; Stages 3–4 cover acceptance snapshots, invitation/archive replay, history, and membership boundaries; Stages 5–6 cover authenticated operator access, cache/offline boundaries, signed browser flows on desktop/mobile, and local deployment rehearsal. See the implementation summary for exact commands, results, and limitations. No application, dependency, or production changes were made during checklist reconciliation.

Visibility supports detection and accountability. Enforcing who may grant account access remains the primary prevention measure.