docs(CLN-3283): add CLI 2FA docs (narrative + 11 references) - #148
docs(CLN-3283): add CLI 2FA docs (narrative + 11 references)#148Azaeres wants to merge 1 commit into
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
e6cc5bf to
e8e2102
Compare
e8e2102 to
5a91534
Compare
ad04f62 to
3cb445e
Compare
3cb445e to
fc9ff70
Compare
fc9ff70 to
a2f123b
Compare
cc-review: CLN-3283 — CLI 2FA docs (narrative + 11 references)Branch Strategy
No staleness or conflict risks — all 13 changed files are net-new (12 new MDX pages + an additive SummaryDocs-only PR adds a CLI 2FA narrative guide ( Constraints Verified
CRITIC SectionIssues Found: 0 (Critical: 0, Major: 0, Minor: 0) Good Explanation Attack: Pass
Constraint Attack Matrix (bullet format): C1 — Narrative exists ✅
C2 — Narrative sections complete ✅
C3 — All 11 tfa subcommands have reference page ✅
C4 — docs.json sidebar registers 12 pages ✅
C5 — Flag parity ✅
C6 — Reference pages match sibling format ✅
C7 — Cross-link targets resolve ✅
Note on prior false positive: an earlier review iteration flagged this cross-link as a dead reference. That finding was incorrect — the target page predates this PR by ~6 weeks and is fully wired into the API Reference sidebar with 27 supporting redirect rules. The earlier iteration likely checked only the additive diff, not the base-branch file tree. Re-derived independently in this iteration. C8 — docs.json valid JSON ✅
C9 — Mutex/required code/backup-code group ✅
C10 — tfa activate --method-type choices = sms/totp ✅
C11 — tfa auth-new --method-type default email ✅
C12 — tfa delete --secret conditional ✅
C13 — tfa update --set-primary accepts t/true/f/false ✅
C14 — Error codes match source strings ✅
C15 — Backup codes only on first method ✅
C16 — Session key path + XDG ✅
C17 — PR description source citation (v5) ✅
C18 — Sidebar group order ✅
C19 — SMS code expiry ✅
C20 — --set-primary type semantics ✅
C21 — Mutex wording (v5 fix) ✅
C22 — auth-new --secret/--code resume semantics ✅
C23 — Authenticator app list parity ✅
Every cell contains a finding or explicit "None" with evidence of what was checked. QA SectionConstraint Validation: 23/23 passed
Execution Tracing:
Deep Spec Audit: 1 conventional spec verified, 0 violations
Contradiction Analysis: None AC Satisfaction
Issues FoundSeverity Spread: Critical: 0 | Major: 0 | Minor: 0 ISSUES REVIEWED: 23 constraints × 4 attack vectors = 92 cells checked, 0 findings.
Accepted Trade-offsNone. Richness ScoreRichness: ●●●●●●●● (Source Span · Q · C · Seq · Cond · Arch · Sem · Coverage) All 8 dimensions covered, no gaps. Evidence (per dot):
Uniform-max defense (per cc-richness-score rubric §Pass criterion): this is a small (13-file), mature, well-formed docs PR with 23 independently verified constraints. Each dot was tested for CC-CR exposure (would a wrong claim on that dimension produce different test results?), not field-presence. No hard-rule generator inflates structural completeness; no prior-layer mesh was inherited (constraints re-derived independently per dispatch instruction). The clean result reflects the small-and-mature scope, not a rubber-stamp. Cluster annotation (single cluster — 2FA CLI docs): N=23, parallel structure with paired clusters (one per command + narrative cross-cluster). D≈0.18 (parallel). Each constraint requires its own probe; no single root probe cascades. Production Shape AlignmentN/A — no Problem Analysis (docs-only PR). Design Shape AlignmentN/A — no Figma reference (docs-only PR). Recommendation✅ APPROVE — Ready to merge. Source-of-truth parity verified across all 23 constraints; v4's identified mutex wording (C21) and PR description citation (C17) are both resolved; v4's "dead link" Major was a false positive, independently re-derived as not-a-finding in this iteration (target page Alternatives considered and not chosen:
Notes for Author
Audience-Channel Match (LIAISON-manual backstop — see methodology note below)Channel: Audience claimed by content: External developers using the Recognition heuristic scan results:
Borderline references — verified user-facing:
Verdict: ✅ Audience matches channel. No internal-only content leaks into the public docs surface. Methodology note: This check was performed manually by LIAISON after posting because the cc-review subagent protocol does not currently invoke the audience-channel matching spec (the spec is registered in the kernel INDEX but its wiring into reviewer prompts is dormant — target: 3 reviewer-doc invocations, current: 0). A follow-up task has been filed to close the wiring gap. Per the spec's own dormancy classification, this is "wiring-incomplete" not "methodology-miss." Generated by Constraint Cycle 2.6.2 |
Summary
cli/two-factor-authentication.mdxmirroring the parallel GUI guide structure (setup flow, login re-auth, method management, backup codes, session-key lifecycle, error semantics).cli/reference/:tfa-activate,tfa-auth-new,tfa-delete,tfa-login,tfa-regen-codes,tfa-resend-sms,tfa-send-email,tfa-send-sms,tfa-status,tfa-totp-setup,tfa-update. Each page has frontmatter, description,Usagebash block,ParamFieldcomponents for arguments/flags, and Global Options table — consistent with the existing CLI reference page format.docs.jsonsidebar: new "Security (2FA)" sub-group under CLI & SDK with 12 entries (1 narrative + 11 reference) — additive, non-conflicting with existing nav.vast-clisource-of-truth (vast.pylines ~6700-7400 — argparse@parser.commanddecorators for the 11tfa__*functions) on branchmove-api-docs-to-docs-repofor accuracy; error codes (tfa_locked,2fa_verification_failed,2fa_expired,authorization_required) cross-referenced fromvast.py:6553(handle_failed_tfa_verification) and the 403 path atvast.py:6766-6770.Test plan
tfa loginexample links resolve tocli/reference/tfa-login.mdx; reference pages cross-link back to the narrative guide.cli/authentication.mdx,cli/reference/set-api-key.mdx) render unchanged.vastai tfa <cmd> --helpagainst a current vast-cli install.Linked ticket
CLN-3283