Repository source: docs/plans/backlog/account_key_approval_policy_fdp_checklist.md
Account key approval policy FDP checklist
Status: Stage 1 enforcement implemented in the approved account_key_approval_safety cycle. Stages 2–6 and release handoff remain pending. This checklist records progress; it does not grant new FDP approvals or establish production deployment.
This checklist supplies the flag requirements within the approved combined cycle for priorities 1–3 of the visibility and safety checklist. The flag controls whether an approved non-operator may approve an additional key for an existing account with a different username. The combined cycle supersedes the earlier standalone flag proposal; its approval wording, durable evidence, and history requirements also remain part of the release. Follow the Feature Development Process (source unavailable); broader future ideas remain in the findings and recommendations.
First release behavior
Implemented flag: FORUM_ALLOW_NON_OPERATOR_CROSS_ACCOUNT_APPROVAL.
Registered label: Allow members to approve keys for other existing accounts.
The flag adds a restriction to the existing approval rules. Enabling it preserves current permissions; it does not bypass signature checks, approved-actor requirements, or other existing validation.
| Actor and target | Flag enabled | Flag disabled |
|---|---|---|
| Approved non-operator approving the first key for a new username | Allowed | Allowed |
| Approved non-operator approving a different key for their own username | Allowed | Allowed |
| Approved non-operator approving another key for an existing different username | Allowed | Denied |
| Root-approved operator approving a key for any username | Allowed | Allowed |
| Unapproved actor | Denied | Denied |
All allowed entries remain subject to existing approval validation. The same key cannot approve itself.
For this limited release, use the existing canonical username_token to compare usernames. An existing account means that another approved key already has the target username when the new approval is accepted. A pending key alone does not make it an existing account. This uses the current account representation; it does not establish a new ownership model.
Approved and implemented policy-toggle behavior: apply the restriction to newly accepted approvals and invitation redemptions, leaving already accepted grants approved. Turning the flag off is not a revocation operation. Durable claims after future key revocation require a separate design before adding revocation support.
Approved default
Social recovery is outside the first release, so recovery eligibility and threshold questions do not block this cycle. Historical reapproval and migration review are also outside the approved scope. Step 2 confirms prospective-only restrictions; expiry-independent invitation history remains Stage 3 work.
One FDP cycle
Active feature name: account_key_approval_safety (supersedes the proposed non_operator_cross_account_approval_flag cycle).
Outcome: an operator can change the flag through the existing feature-flags interface, and subsequent approval attempts consistently follow the table above.
Keep separate {feature_name}_step1_solution_assessment.md, _step2_feature_description.md, _step3_development_plan.md, and _step4_implementation_summary.md artifacts, creating each only when its step is authorized. Keep Step 1–3 drafts uncommitted until the Step 4 planning commit. Include the FDP navigation bar in each step artifact. Once the feature has four planning artifacts, place them in docs/plans/{feature_name}/ and update the plan index and links.
Implementation scope checklist
The flag enforcement stage does not require stable account IDs, a general policy engine, presets, key revocation, or social recovery. The approved combined cycle does require signed review context and durable acceptance evidence in later stages. If enforcement reveals a prerequisite beyond this scope, record the concrete blocker and revisit the cycle boundary before implementation.
Stage 1 also blocks generic identity-protocol writes and validates canonical target/bootstrap matches. Root seeds and canonical imports remain trusted repository administration; the complete path inventory and release documentation above remain open. Shared writer checks cover both presentation profiles, but browser verification remains pending.
Acceptance and regression checklist
Checked items have implementation/test evidence. Unchecked items may have partial coverage; they still require the complete verification described, including normalization, signatures, UI, configuration, and rebuild cases. Policy-toggle retention does not establish expiry-independent invitation replay.
Release handoff
Deferred future work
These are candidates for later FDP cycles, not prerequisites or approved commitments for the flag release:
Progress
The approved combined cycle includes the default-enabled flag plus approval review and history. Stage 1 is implemented in c7ba748b; stages 2–6 remain. The linked Step 4 summary is the implementation record and documents earlier targeted verification and unresolved broad-suite failures.
Checkout review verification passed: php tests/run.php ApprovalPolicyTest (6/6) and php tests/run.php WriteApiSmokeTest::testSignedInvitationRedemptionRechecksPolicyBeforeAcceptance (1/1). The tests cover the permission matrix, live toggles, competing claims, stale state, canonical seed authority, protocol bypass attempts, invitation restrictions, same-second replay order, and signed redemption with grant retention after a restricted rebuild. They do not establish completion of the full acceptance checklist or production deployment.