feat(rust): a Steam account linked on the site is a Rust link (D392, D396) #52

Merged
whitlocktech merged 2 commits from feat/steam-signin-link into edge 2026-10-20 10:25:46 -05:00
Member

What & why

Module-Rust's half of Sign in with Steam (docs/website/STEAM_SIGNIN.md; PLAN_REDESIGNS §15). Needs core website#218 (MODULE_API 1.17.0).

  • D392: api.onIdentityLinked → links.linkFromSteamSignin makes the Steam account this user's Rust link. It is the same write as /link's confirmOne: the PRIMARY KEY guards against a race (a /link that lands first keeps its link), Teams are reconciled, and the linked notice is raised. name is the Steam persona name; server_id is null.
  • D396: api.onIdentityLinking → links.checkSteamSignin refuses (reason: 'in_use') a Steam id that is already another website account's Rust link, so core writes nothing.
  • D393: no unlink handling. Unlinking Steam on the site removes only the sign-in, and the Rust page now says so.
  • coreApi is ^1.17.0, the engagement manifest is regenerated, and ci/core-ref.json is pinned to website#218's head (5e398d8) while that PR is open. It moves to the merge sha afterwards.

How it was tested

  • npm test (server): 690 pass, 0 fail. That includes 5 new link tests and an entry test checking both hooks are registered. Also clean: check:imports, check:engagement, check:swagger.
  • Client: npm run build, check:externals, 99 tests pass.
  • The frozen-manifest proof, run locally against core at the pinned sha: routes.manifest.json is current — 89 routes.
  • Walked with core #218 on a copy of the Rust walk database:
    • A Steam link through core's real finishLink became a Rust link.
    • Bob's /link-made Rust link refused another account's Steam link, with nothing written.
    • Unlinking the Steam sign-in left the Rust link; the Rust page shows it and the new note.

Checklist

  • I have read CONTRIBUTING.md.
  • The change builds and existing tests/checks pass locally.
  • I have added or updated tests/docs where it makes sense.
  • My commits are reasonably scoped with clear messages.

AI-assisted contributions (required)

  • No AI tools were used to produce this contribution.
  • AI tools were used. Tool(s): Claude Code (Claude Opus 5.5). I have reviewed and understand
    every change, and take responsibility for it. AI-authored commits are
    marked with a Co-Authored-By / Assisted-By trailer.

License

  • I agree that my contribution is licensed under this project's license
    (GNU GPL v3.0 or later), and I have the right to contribute it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

## What & why Module-Rust's half of Sign in with Steam (`docs/website/STEAM_SIGNIN.md`; PLAN_REDESIGNS §15). Needs core **website#218** (MODULE_API 1.17.0). - **D392:** `api.onIdentityLinked` → `links.linkFromSteamSignin` makes the Steam account this user's Rust link. It is the same write as `/link`'s `confirmOne`: the PRIMARY KEY guards against a race (a `/link` that lands first keeps its link), Teams are reconciled, and the linked notice is raised. `name` is the Steam persona name; `server_id` is null. - **D396:** `api.onIdentityLinking` → `links.checkSteamSignin` refuses (`reason: 'in_use'`) a Steam id that is already **another** website account's Rust link, so core writes nothing. - **D393:** no unlink handling. Unlinking Steam on the site removes only the sign-in, and the Rust page now says so. - `coreApi` is `^1.17.0`, the engagement manifest is regenerated, and `ci/core-ref.json` is **pinned to website#218's head** (5e398d8) while that PR is open. It moves to the merge sha afterwards. ## How it was tested - `npm test` (server): **690 pass, 0 fail**. That includes 5 new link tests and an entry test checking both hooks are registered. Also clean: `check:imports`, `check:engagement`, `check:swagger`. - Client: `npm run build`, `check:externals`, **99 tests pass**. - The frozen-manifest proof, run locally against core at the pinned sha: `routes.manifest.json is current — 89 routes`. - **Walked** with core #218 on a copy of the Rust walk database: - A Steam link through core's real `finishLink` became a Rust link. - Bob's `/link`-made Rust link refused another account's Steam link, with nothing written. - Unlinking the Steam sign-in left the Rust link; the Rust page shows it and the new note. ## Checklist - [x] I have read [CONTRIBUTING.md](CONTRIBUTING.md). - [x] The change builds and existing tests/checks pass locally. - [x] I have added or updated tests/docs where it makes sense. - [x] My commits are reasonably scoped with clear messages. ## AI-assisted contributions (required) - [ ] No AI tools were used to produce this contribution. - [x] AI tools were used. Tool(s): `Claude Code (Claude Opus 5.5)`. I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with a `Co-Authored-By` / `Assisted-By` trailer. ## License - [x] I agree that my contribution is licensed under this project's license (**GNU GPL v3.0 or later**), and I have the right to contribute it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 2 commits 2026-10-19 20:34:39 -05:00
Registers core's MODULE_API 1.17.0 identity hooks (coreApi ^1.17.0):
onIdentityLinking refuses a Steam id that is another website account's Rust
link (D396); onIdentityLinked writes the Rust link with the PRIMARY KEY as the
race guard, reconciles Teams and raises the linked notice, as /link does.
Unlinking Steam leaves the Rust link (D393); the Rust account page says so.

ci/core-ref.json still pins the 1.15.0 core and must move to the website
branch head carrying 1.17.0 before CI can pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
ci(rust): pin core to website feat/steam-signin (MODULE_API 1.17.0)
All checks were successful
PR Checks / server-tests (pull_request) Successful in 37s
PR Checks / client-build (pull_request) Successful in 21s
PR Checks / frozen-manifest (pull_request) Successful in 48s
8172454683
coreApi is ^1.17.0, which no core on main offers yet, so the frozen-manifest
job is proved against the head of the open website PR. Moves to the sha it
merges as.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit 47da3a2db8 into edge 2026-10-20 10:25:46 -05:00
whitlocktech deleted branch feat/steam-signin-link 2026-10-20 10:25:47 -05:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RunicGateway/Module-Rust#52
No description provided.