Effort 3: account management (Phase 6 multi-user) #67
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Reference
marvin8/yunjin#67
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase 6 made yunjin multi-user (auth in Effort 1, data ownership in Effort 2), but accounts themselves are frozen: the only account is the seeded
defaultuser, passwords can only be set or reset from the CLI, passkeys exist only as recorded design decisions, and there is no way for a user to leave — no deletion path and no cleanup of their feeds, aggregates, read state, settings, or credentials.Effort 3 — the final effort of Phase 6 before the collecting branch lands on
main— should close this out:Design decisions are recorded in the approved spec (local repo,
.superpowers/specs/).Findings from design exploration
webauthn3.0.1 verified against PyPI as the current release; API inspected from installed source (options/verify functions, sign-count clone detection, JSON-in/JSON-out). HTTPS on a stable domain is a hard prerequisite (RP ID binds credentials) and will be documented.Plan of attack
Approved spec:
.superpowers/specs/2026-10-04-effort3-account-management-design.md; implementation plan:.superpowers/plans/2026-10-04-effort3-account-management.md(both local to the box, git-excluded, as with Efforts 1–2).Approach:
yunjin create-user); no admin role (family instance, 2–3 users).webauthn_credentialstable +users.webauthn_user_handle; one Alembic migration on top of20261003_data_ownership.services/webauthn.pywraps the library; four JSON ceremony endpoints on the auth blueprint; username-less (discoverable-credential) login resolved by unique credential id.YunjinSessionInterfacesubclass implements per-login lifetimes (passkey = 12 h) with a server-side absolute cap in the auth guard.delete-userbypasses it deliberately).Key files:
alembic/versions/20261004_webauthn_credentials.py,src/yunjin/db/webauthn_credentials.py,src/yunjin/services/webauthn.py,src/yunjin/services/accounts.py,src/yunjin/web/auth.py,src/yunjin/web/routes/auth.py,src/yunjin/web/routes/settings.py,src/yunjin/__main__.py,src/yunjin/models.py, templateslogin.html/settings.html, docsconfig.md/cli.md/passkeys.md.Sequence (9 tasks, TDD, suite green at each task end): migration+db layer → webauthn dep+service → session lifetimes → passkey login → enrollment+credential management → password change → account deletion → CLI → docs+full nox.
Branch:
feat/issue-67-account-management(cut fromorigin/feat/multiuser)Commits (gitmoji subjects):
PR (after work completes, targeting the collecting branch, non-closing refs):
Landed on
mainin release 2026.10.6.1 (PR #69, merge89f26f7). Closing.