docs(19.5-05): complete the email-proof plan, release on hold
This commit is contained in:
@@ -3,7 +3,7 @@ phase: 19.5-social-login-in-sm-user-plugin
|
||||
plan: 05
|
||||
subsystem: auth
|
||||
tags: [sociallogin, sm-user-plugin, email-proof, pre-account-takeover, postgres, gormigrate, gate, vitest, bm]
|
||||
status: draft
|
||||
status: complete
|
||||
requires:
|
||||
- phase: 19.5-04
|
||||
provides: "sm-user-plugin v0.1.4 social sign-in hooks, sm-sociallogin-plugin v0.1.1 matching (ownerVerifiedEmail), scripts/check-phase19.5.sh"
|
||||
@@ -14,13 +14,13 @@ provides:
|
||||
- "bm src/views/OAuthCallbackView.test.ts (D-28): the real view mounted with vue's createRenderer, no new npm dependency"
|
||||
- "gate: USER_ADDED_MIGRATIONS, refused_migration_changes, migration_writes_rows, DOCKER_USER_UPDATES_TESTS, detect_vitest REQUIRE_FILES"
|
||||
- "19.5-SECURITY-REVIEW.md T-19.5-39..46 and CR-02 open; 19.5-VALIDATION.md rows 19.5-05-01..07, D-26..D-28"
|
||||
affects: [19.5-05 Task 6 (release go-ahead), 19.5-05 Task 7 (release or hold)]
|
||||
affects: [".planning/todos/pending/email-proof-release.md (release on hold, hand-off to the 19.8 session)", "sm-demo-app and sm-bm-app pins (unchanged until the release)"]
|
||||
actuals:
|
||||
tokens: 30829 # chars/4: Tasks 1-3 diffs 18621 + Tasks 4-5 diffs 12208 (bm view test, gate change, security review and validation map)
|
||||
tasks: 5 # of 7; at the Task 6 checkpoint
|
||||
commits: 5 # summercms.go commits of this plan before this draft's commit (7170c5b, 30e0cd9, c2c8c6a, 7e43873, 8c7794e); rev-list from the ledger counts 7 because two foreign 19.8-03 commits landed in between
|
||||
tokens: 33300 # chars/4: Tasks 1-3 diffs 18621 + Tasks 4-5 diffs 12208 + Task 7 (hold) todo about 2470
|
||||
tasks: 7 # Tasks 1-5 executed, Task 6 answered "hold", Task 7 recorded the hold
|
||||
commits: 9 # MEASURED: git rev-list --count 3346060..20ecc41; 7 are this plan's (7170c5b, 30e0cd9, c2c8c6a, 7e43873, 8c7794e, b57d2e1, 20ecc41), 2 are foreign 19.8-03 commits (2057643, 4895b25); the final SUMMARY commit comes on top
|
||||
plan_head_before: 33460607db95276e8180487a8ece7e4f0070b1e7
|
||||
plan_head_after: 8c7794efa250e6b5f03fcae1ce2c075f779e94f9
|
||||
plan_head_after: 20ecc41
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
@@ -55,26 +55,26 @@ key-decisions:
|
||||
- "An email change through /update or the admin form clears email_verified_at; a case-only change (strings.EqualFold) keeps it"
|
||||
- "Harness e.user is a proven account so plan 02-04 link cases keep testing the link path; e.unprovenUser models accounts without proof"
|
||||
- "The bm view test compiles the view's own template for the client at test time (vitest's node environment gives the SFC only ssrRender) and provides an empty SSR context; vite.config.ts and the dependencies stay unchanged"
|
||||
requirements-completed: [] # D-26, D-27, D-28, SC-3 are marked by the final context (Task 7), not this draft
|
||||
duration: 68min
|
||||
- "Task 6 answered hold: nothing pushed or tagged, no pointer moved; the release is handed to the 19.8 session to decide with the framework v0.4.0 release (todo email-proof-release)"
|
||||
requirements-completed: [D-26, D-27, D-28] # in local commits; SC-3 (tags and app pins, D-21 release) is open under the hold, tracked by email-proof-release.md
|
||||
duration: 75min
|
||||
completed: 2026-10-21
|
||||
---
|
||||
|
||||
# Phase 19.5 Plan 05: Proof of Address for Social Sign-in Linking Summary
|
||||
|
||||
Status: draft (at Task 6 checkpoint)
|
||||
|
||||
**users.email_verified_at (stamped only by the mailed activation code and the completed reset-code password reset, cleared on an email change) is now the owner-side condition for auto-linking a verified provider, so an auto-mode `/register` account goes pending instead of handing its sign-in to a squatter; the bm OAuth callback view's code handling is pinned by a vitest view test without a new dependency**
|
||||
|
||||
This draft covers Tasks 1-5 of 7. The Task 6 go-ahead (release or hold) is pending; Task 7 finalizes this file.
|
||||
All 7 tasks are done. Task 6 was answered **hold**, so Task 7 recorded the hold: the fix lives in local commits in four repositories, nothing is pushed or tagged, no application pin moved, and `.planning/todos/pending/email-proof-release.md` hands the release to the 19.8 session (decided together with the framework v0.4.0 release).
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** 29 min (Tasks 1-3) + 39 min (Tasks 4-5, about 25 of them spent on two gate runs that timed out on blocked loopback; see Issues)
|
||||
- **Started:** 2026-10-21T11:37:14Z
|
||||
- **Second context:** 2026-10-21T12:08Z to 12:47Z
|
||||
- **Tasks:** 5 of 7
|
||||
- **Files modified:** 20 across four repositories (plus deferred-items.md)
|
||||
- **Third context (Task 7, hold):** about 7 min
|
||||
- **Tasks:** 7 of 7 (Task 7 on the hold branch)
|
||||
- **Files modified:** 20 across four repositories (plus deferred-items.md and the release todo)
|
||||
|
||||
## Accomplishments
|
||||
|
||||
@@ -119,10 +119,12 @@ This draft covers Tasks 1-5 of 7. The Task 6 go-ahead (release or hold) is pendi
|
||||
| hand-off | `c2c8c6a` | docs(19.5-05): hand-off draft after Task 3 (email proof in user and sociallogin) |
|
||||
| 4 | `7e43873` | test(19.5): gate the bm callback view test |
|
||||
| 5 | `8c7794e` | docs(19.5): proof of address in the security review and validation map |
|
||||
| 6 | `b57d2e1` | docs(19.5-05): draft at the Task 6 checkpoint (bm view test, review, release table) |
|
||||
| 7 | `20ecc41` | docs(19.5): capture the email-proof release todo |
|
||||
|
||||
Two foreign commits of another session (`2057643`, `4895b25`, both `fix(19.8-03)`) landed between them on summercms.go master; they are not this plan's.
|
||||
|
||||
**sm-demo-app, fonoteka.go:** no commit yet. fonoteka.go's worktree shows `plugins/golem15/user` modified (the checkout is at 35cf166); it is not staged until Task 7.
|
||||
**sm-demo-app, fonoteka.go:** no commit (release on hold). fonoteka.go's worktree shows `plugins/golem15/user` modified (the checkout is at 35cf166); it stays unstaged until the release.
|
||||
|
||||
## Tests added (all pass)
|
||||
|
||||
@@ -171,6 +173,13 @@ Followed the plan's decisions. Within them:
|
||||
- **Files modified:** `../sm-bm-app/frontend/src/views/OAuthCallbackView.test.ts`
|
||||
- **Commit:** `5fd0cc3`
|
||||
|
||||
**2. [Task 6 hold] The fix is not released; the applications keep the takeover path**
|
||||
- **Found during:** Task 6 / Task 7
|
||||
- **Issue:** The user answered the Task 6 checkpoint with "hold". SC-3 and D-21 (tags v0.1.5 and v0.1.2, app pins at them) are not met by this plan.
|
||||
- **Unreleased commits:** sm-user-plugin `add1f7a`, `a99cb46`, `35cf166`; sm-sociallogin-plugin `3bb5650`, `962190b`, `c4ebf05` (plus the `chore: require sm-user-plugin v0.1.5` commit still to be made); sm-bm-app `5fd0cc3`.
|
||||
- **Pins that lack them:** sm-demo-app and sm-bm-app `plugins/golem15/user` c43ba87 (v0.1.4) and `plugins/golem15/sociallogin` d7ee28d (v0.1.1), with the matching go.mod requires; fonoteka.go gitlink c43ba87 (worktree at 35cf166, unstaged). Until they move, an auto-mode `/register` account squatting an address is still linked on the owner's verified Google sign-in in both apps that mount sociallogin.
|
||||
- **Tracked by:** `.planning/todos/pending/email-proof-release.md` (commit `20ecc41`), addressed to the 19.8 session to review and decide with the framework v0.4.0 release. Task 7's verify command (the `--sociallogin`, `--demo`, `--bm`, `--fonoteka` stages at the new pins) was not run, because no pin moved.
|
||||
|
||||
Environment-only adjustments (no repository change):
|
||||
- Docker-backed runs used `TESTCONTAINERS_HOST_OVERRIDE=127.0.0.1` and ran outside the sandbox.
|
||||
- `change_password_no_proof` sets `has_self_set_password` before calling change-password, as `TestChangePassword` does (`insertUser` creates the row with the flag false, which change-password answers with an opaque 500).
|
||||
@@ -202,17 +211,24 @@ Proposed tags (each `git ls-remote --tags origin <tag>` printed nothing; no tag
|
||||
|
||||
Current pins: sm-demo-app and sm-bm-app `plugins/golem15/user` c43ba87 (v0.1.4), `plugins/golem15/sociallogin` d7ee28d (v0.1.1); sm-demo-app go.mod requires sm-user-plugin v0.1.4 and sm-sociallogin-plugin v0.1.1; sm-bm-app go.mod requires sm-user-plugin v0.1.4 and sm-sociallogin-plugin v0.0.0 (replace to the submodule; only the user line names a version); fonoteka.go gitlink c43ba87.
|
||||
|
||||
Pointer-bump commits Task 7 would make (on "release"):
|
||||
Pointer-bump commits a release makes (not made under the hold; the todo carries them):
|
||||
1. sm-sociallogin-plugin: `chore: require sm-user-plugin v0.1.5` (go.mod, go.sum), then tag v0.1.2.
|
||||
2. sm-demo-app: `chore: bump sm-user-plugin to v0.1.5` (gitlink, go.mod, go.sum), then `chore: bump sm-sociallogin-plugin to v0.1.2` (gitlink, go.mod, go.sum); `--demo` and `scripts/check-pins.sh` green after each; push. **The push would include the foreign `b325460` unless the reply excludes it.**
|
||||
3. sm-bm-app: the same two commits (only the versioned require line changes); `--bm` green after each; push including `5fd0cc3`.
|
||||
4. fonoteka.go: `chore: bump sm-user-plugin to v0.1.5` (only `plugins/golem15/user`), local only.
|
||||
|
||||
## Hand-off for Task 6 and Task 7
|
||||
## Task 6 reply
|
||||
|
||||
- Task 6 records the user's reply verbatim under `## Task 6 reply` here.
|
||||
- Before Task 7's gate runs, check that loopback to Docker works (the NordLayer `lo` accept rules); a quick probe: `TESTCONTAINERS_HOST_OVERRIDE=127.0.0.1 go test -short -count=1 -timeout 120s -run '^TestPermissionSetScan$' ./plugins/golem15/user/classes` in fonoteka.go finishes in about 15 s when it works.
|
||||
- Nothing is pushed or tagged.
|
||||
> hold
|
||||
|
||||
Added by the user with the reply: the 19.8 session (console commands overhaul) is on hold awaiting this gap closure, and the 19.8 agent will review and decide on the release together with its framework v0.4.0 release.
|
||||
|
||||
## Task 7 (hold)
|
||||
|
||||
- Pushed: nothing. Tagged: nothing. Pointers moved: none. fonoteka.go `plugins/golem15/user` stays unstaged at 35cf166.
|
||||
- Todo: `.planning/todos/pending/email-proof-release.md` (commit `20ecc41`, `docs(19.5): capture the email-proof release todo`). It holds the release table, the D-21 steps (sm-user-plugin v0.1.5 at `35cf166`; sm-sociallogin-plugin `chore: require sm-user-plugin v0.1.5` then v0.1.2; sm-demo-app and sm-bm-app user bump then sociallogin bump, gate green after each, then push; fonoteka.go user bump local only), the note that plugin tags live in the plugins' own repositories apart from the framework v0.4.0 tag, the foreign unpushed `b325460` in sm-demo-app, the NordLayer loopback rules for Docker gate runs, and the open takeover path in the apps until the release. It does not set `resolves_phase`, so completing Phase 19.5 does not close it.
|
||||
- g15office task: **not created.** No g15office tool was available in the executing session (the g15office MCP server is not exposed to subagents). The todo's frontmatter says so; the orchestrator or the next session with the tool creates the task (type Bug or Task, description ending `Local: .planning/todos/pending/email-proof-release.md`), writes its ID into the todo, and makes it a subtask of the Phase 19.5 milestone task `onunbz3l`.
|
||||
- Task 7's verify command was not run (hold: no pin moved).
|
||||
|
||||
## User Setup Required
|
||||
|
||||
@@ -220,8 +236,8 @@ None.
|
||||
|
||||
---
|
||||
*Phase: 19.5-social-login-in-sm-user-plugin*
|
||||
*Draft: 2026-10-21*
|
||||
*Completed: 2026-10-21 (Task 7 on the hold branch)*
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
All twelve commits listed (U 3, S 3, B 1, F 5) and the five created files exist; the draft status line and the Release table heading are present once; no tag points at either plugin master and v0.1.2 is absent on the remote.
|
||||
All 14 commits listed exist (U 3, S 3, B 1, F 7); the five created files and the todo exist; no draft status line remains; the Release table heading is present once; no tag points at either plugin master and v0.1.2 is absent on the remote.
|
||||
|
||||
Reference in New Issue
Block a user