Commit Graph

978 Commits

Author SHA1 Message Date
31d7301a8e docs(runicnpc): the automated cutover as built, and its dry run (D332, runicnpc-rust#25, #26)
What the build added to the plan: gate 1 also needs public to name the
build staging names; gate 2 also needs the field list to match; gate 3
proves the update from the rig's appmanifest before rnpc.status; gates are
kept per wipe, public manifest and edge commit, with a 3-hour cool-down for
a failed Carbon or live attempt; the merge is a merge commit pinned with
head_commit_id; Closes since the last cutover's merge-base, leaving out PRs
main already has; dispatches dry unless dry_run is exactly false, and
code_ref for dry runs; rust-carbon started again if left stopped; 240
minutes. Then CI run 54's dry run: every gate refused for the right reason
on the 22 October public build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-11-02 07:11:19 -06:00
4224c3b0db Merge pull request 'docs(runicnpc): the automated wipe-day cutover, planned (D332)' (#411) from docs/runicnpc-auto-cutover into main
Reviewed-on: #411
2026-11-02 11:45:59 +00:00
e005b6c998 docs(runicnpc): the automated wipe-day cutover, planned (D332)
On a forced-wipe weekend a workflow in runicnpc-rust merges edge into main
on its own once five gates pass: Rust's public build changed on wipe day,
Oxide's public release caught up, a Carbon boot on public Rust says
missing=- added=-, the drill's live half passes on public Rust with edge's
code, and PR checks pass. Hourly from Thursday 17:00 UTC to Sunday 23:00
UTC, then left to the org lead. The issues it closes come from the
`Closes #N` lines of the PRs merged into edge since the last release; it
merges with RUNICNPC_TOKEN, locked to the repo. RunicNPC only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-11-02 05:42:05 -06:00
a81eaa1662 Merge pull request 'docs(runicnpc): 9c, the three fight checks explained; D331 (runicnpc-rust#20, #22)' (#410) from docs/runicnpc-fight-checks-20 into main
Reviewed-on: #410
2026-11-02 11:16:10 +00:00
f655e90b01 Merge pull request 'docs(module-rust): note the core.lease retry: false fix (website#206)' (#409) from docs/lease-retry-206 into main
Reviewed-on: #409
2026-11-02 11:09:45 +00:00
6286c0d690 docs(runicnpc): 9c, both fixes verified on staging 26377229 (runicnpc-rust#20)
Stage 5 47 pass, 0 fail; the whole harness 266 pass, 0 fail, on Rust's
next staging build, out 2026-11-02.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-11-02 05:02:15 -06:00
339ec47bec docs(runicnpc): 9c, the three fight checks explained; D331 kit extras by item definition (runicnpc-rust#20, #22)
s5.kit.heal was Rust's November 2026 build: a player-only item (the syringe)
has a held entity only in the belt (ItemModEntity.playerOnlyEntityBeltOnly),
so RunicNPC's heal found nothing. D331 records the fix the org lead chose:
every kit extra is found by its item definition when it has no held entity.

s5.fight.shootBack was the harness: a cliff rock between the fifth fight's
pair on the drill's 3500 map. s5.fight.leash (run 49, left out of the 9c note)
did not come back in three tries; the likeliest way in and the harness's new
note are recorded, and the rule stays until a failing run says which.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-11-02 04:24:50 -06:00
72abf0dee3 docs(module-rust): note the core.lease retry: false fix (website#206)
PLAN §27.6's finding that core.lease drops a module's retry: false is fixed
by website#236; record the as-built behaviour and its tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-11-01 03:18:50 -06:00
5ee91854cf Merge pull request 'docs(runicnpc): 9c, the first drill that failed (runicnpc-rust#20)' (#408) from docs/runicnpc-staging-drill-20 into main
Reviewed-on: #408
2026-11-01 08:18:01 +00:00
c576cac033 docs(runicnpc): the drill lays the harness's kit down before boot (#22)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-11-01 01:50:22 -06:00
bf2c44a2c6 docs(runicnpc): 9c, the first drill that failed (runicnpc-rust#20)
Staging 26341433: three new swap fields (55 -> 58, main at the forced
wipe of 2026-11-05), the harness that stopped silently after place
failed (0.7.4), the drill's rig booting from fresh Kits and RunicNPC
data, its 5-minute stall limit and latest.log tail, and the two checks
(shootBack, kit.heal) still to explain. Stale example kits on a real
server: runicnpc-rust#21.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-11-01 01:30:59 -06:00
6dc5ea7c58 Merge pull request 'docs(safety): team notifications and digests follow a reader's blocks' (#407) from docs/safety-team-notifications into main
Reviewed-on: #407
2026-10-31 05:37:59 +00:00
f4ff7dbf2f docs(safety): team notifications and digests follow a reader's blocks
USER_SAFETY.md §4.1 records the website fix: a forum post is not pushed,
put in the inbox or emailed to a member who blocks its author or the
thread's starter, and the digest applies each recipient's forum filter.
It also says why the Team activity feed needs nothing: forum posts never
appear in it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-31 00:23:19 -05:00
d5c5866d2e Merge pull request 'docs(android): record M8's cutover, the signing key and the Console' (#406) from docs/android-m8-cutover into main
Reviewed-on: #406
2026-10-30 23:09:12 +00:00
f0d114fc7f docs(android): record M8's cutover, the signing key and the Console
Android-app#65 cut edge over to main as v0.7.0. Records how Play's
app-signing key became the release keystore's (PEPK run in CI from the
org secret; the local keystore was a different key), what is saved in
the Play Console, and why the release run's Play step stopped (the Play
Developer API is not enabled in the Cloud project).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 18:07:47 -05:00
93933645a6 Merge pull request 'docs(tree): sync android/PROJECT_TREE.md' (#405) from chore/sync-android-tree into main
Reviewed-on: #405
2026-10-30 22:31:27 +00:00
runic-docs-bot
81681512e6 docs(tree): sync android/PROJECT_TREE.md from RunicGateway/Android-app@02fb7d4 [skip ci] 2026-10-30 22:26:39 +00:00
5025c67c3b Merge pull request 'docs(tree): sync website/PROJECT_TREE.md' (#393) from chore/sync-website-tree into main
Reviewed-on: #393
2026-10-30 21:55:15 +00:00
03398f6185 Merge pull request 'docs(safety): the demo gets report, block and hide from the module release' (#404) from docs/user-safety-demo-release into main
Reviewed-on: #404
2026-10-30 21:44:24 +00:00
d683130c2e docs(safety): the demo gets report, block and hide from the module release
The org lead's "none of those" on step 5's W1-W4 was about the demo's
data (no seeding), not about holding the features back. Record that,
the Module-Rust cutover (#73, v0.7.0) that brings them to the demo,
and the app cutover (Android-app#65) as step 6.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 15:28:50 -05:00
5b29a00509 Merge pull request 'docs(safety): record the org lead's answer to step 5's W1-W4' (#403) from docs/user-safety-w1-w4-answer into main
Reviewed-on: #403
2026-10-30 19:52:07 +00:00
a6850615c2 docs(safety): record the org lead's answer to step 5's W1-W4
None of them: the demo's chat audience, its seed and play-review's role stay
as they are, and no Module-Rust release is cut for the demo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 14:51:24 -05:00
bc920b063c Merge pull request 'docs(safety): record USER_SAFETY step 5, the walk on a local copy of the demo' (#402) from docs/user-safety-step5-walk into main
Reviewed-on: #402
2026-10-30 16:40:14 +00:00
2c973624b9 docs(safety): record USER_SAFETY step 5, the walk on a local copy of the demo
Report, hide and block walked on the web and in the app, Hide for everyone
from the queue, and S14, against website main + Module-Rust edge with
DEMO_MODE on and the demo's own seed. API 30/30, web and app rows all pass.
Walked locally, not on the demo, by the org lead's choice.

Records four findings about the demo itself, unchanged: chat is staff-only
there (W1), the rig has no chat to report (W2), play-review is an admin
(W3), and the demo runs Module-Rust v0.6.3, without this feature (W4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 11:31:39 -05:00
b3df113ba0 Merge pull request 'docs(safety): record USER_SAFETY step 4, the app's chat-line menu' (#401) from docs/user-safety-android into main
Reviewed-on: #401
2026-10-30 15:29:56 +00:00
c0bec41967 docs(safety): record USER_SAFETY step 4, the app's chat-line menu
§4.3 rewritten to match what was built: the long-press sheet and what it
offers, the refusals, the re-read after a change, the Hidden by staff marker,
and Account -> Blocked. §7 step 4 recorded as built and walked on the
emulator, with the two things the walk found. android/PLAN.md M8 step 4
points at it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 09:57:06 -05:00
76572fe3b4 Merge pull request 'docs(safety): record USER_SAFETY step 3, Module-Rust's chat lines' (#400) from docs/user-safety-rust into main
Reviewed-on: #400
2026-10-30 14:18:54 +00:00
90ba337047 docs(safety): record USER_SAFETY step 3, Module-Rust's chat lines
Rewrites §4.2 to match what was built: server/safety.js, the in-query feed
filter, rust_events.hidden_at / hidden_by, the staff hide and unhide routes
on the line's own menu, and what happens when core's safety reads fail.
Records §7 step 3 as built and walked (28 API rows and a browser pass).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 09:04:29 -05:00
runic-docs-bot
06cf843403 docs(tree): sync website/PROJECT_TREE.md from RunicGateway/website@f13b8fe [skip ci] 2026-10-30 12:24:57 +00:00
f8d46ae956 Merge pull request 'docs(safety): record S11-S14 and the user-safety core, MODULE_API 1.21.0' (#399) from docs/user-safety-core into main
Reviewed-on: #399
2026-10-30 12:23:26 +00:00
b962355810 docs(safety): record S11-S14 and the user-safety core, MODULE_API 1.21.0
USER_SAFETY.md: S11-S14 (asked while building the core), §3 corrected
(the chat feed is already read per viewer), §4 rewritten to match what
was built, §7 step 2 recorded as built and walked.

MODULE_API.md: 1.21.0 (registerReportTargets, registerGameIdentities,
ctx.safety). BACKEND_DESIGN.md: user_blocks / user_hidden_items, the
content_reports snapshot and actioned_with, the new routes, the folder
map. TEAMS.md §5.6 amended. README row updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 05:41:14 -05:00
ae730b0dcb Merge pull request 'docs(account): W1-W3 from the deletion walk are fixed; correct rust PLAN §29.8' (#398) from docs/account-deletion-walk-fixes into main
Reviewed-on: #398
2026-10-30 09:30:01 +00:00
65a5240bd0 docs(account): W1-W3 from the deletion walk are fixed; correct rust PLAN 29.8
ACCOUNT_DELETION.md step 6: W1 (Module-Rust#71), W2 (Module-uo#48) and W3
(Rust-Plugins#47) move from "not fixed" to fixed. modules/rust/PLAN.md 29.8:
Carbon 2.0.262 no longer answers "user not found" for a never-seen Steam id;
it writes the grant or membership into one shared blank record held by every
never-seen id. The bridge now checks for a record first on Carbon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 04:24:13 -05:00
19c00b7223 Merge pull request 'docs(account): record step 6, the account deletion walk' (#397) from docs/account-deletion-step6-walk into main
Reviewed-on: #397
2026-10-30 08:55:27 +00:00
aa1472bfc4 docs(account): record step 6, the account deletion walk
Every row of ACCOUNT_DELETION.md §6 step 6 walked on 2026-10-30 against
website 7bd93b8 with Module-Rust edge on the Carbon rig and Module-uo main
with the local ServUO and a uo-link sidecar: web and app deletions, the other
device's session, the Rust grant leaving the rig, the UO link cleared with and
without the sidecar, the forum's two views, the reserved staff name, the demo
and the last admin. Three findings left unfixed (W1-W3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 03:51:14 -05:00
a5984ab2ae Merge pull request 'docs(account): record step 5 (runicgateway.com /delete-account/) as built' (#396) from docs/account-deletion-site into main
Reviewed-on: #396
2026-10-30 06:42:26 +00:00
ac242be2d7 docs(account): record step 5 (runicgateway.com /delete-account/) as built
The page Google Play is given, built in runicgateway.com#45, with the
org lead's two answers (D85 links, D86 cannot-sign-in goes to the
operator).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 01:26:20 -05:00
5518671d1b Merge pull request 'docs(account): record step 4 (the Android screen) as built' (#395) from docs/account-deletion-android into main
Reviewed-on: #395
2026-10-30 05:27:43 +00:00
a298131052 docs(account): record step 4 (the Android screen) as built
ACCOUNT_DELETION.md §6 step 4 gains what was built beyond §4.3 (refusals
read off the body, the trust token dropped, the snackbar notice, the push
opt-in kept) and what was checked on the emulator. android/PLAN.md M8 step 3
notes the app's part is built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-30 00:13:37 -05:00
451e81871b Merge pull request 'docs(account): record step 3 (module hooks, kit re-pin) as built' (#394) from docs/account-deletion-modules into main
Reviewed-on: #394
2026-10-30 04:46:35 +00:00
ae3750043a docs(account): record step 3 (module hooks, kit re-pin) as built
ACCOUNT_DELETION.md: status line, and §6 step 3 marked built with what went beyond
§4.4 (Module-uo queues before calling, also retries on a live server.hello, clears
pending rows on a webId-less login, lists them via GET /admin/uo-link/config).
modules/uo/SCHEMA.md: the new shard_pending_unlinks table, and the table count
corrected (it was already stale: 33 tables, 32 shard_* plus uo_link_config).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-29 23:00:32 -05:00
24f7d33c01 Merge pull request 'docs(website): document account deletion core and MODULE_API 1.20.0' (#392) from docs/account-deletion-core into main
Reviewed-on: #392
2026-10-30 01:24:27 +00:00
42c762cc13 docs(website): document account deletion core and MODULE_API 1.20.0
ACCOUNT_DELETION.md §6 step 2 is built (website feature/account-deletion).

- MODULE_API.md: 1.20.0, api.onUserDeleting (§1.1, §1.1 history, §2.4).
- BACKEND_DESIGN.md: reserved_usernames, DELETE /auth/me/account, the admin
  delete now running the same procedure, the demo lock row, and §6.6 on the
  procedure, the display rule and what goes and what stays.
- TEAMS.md: the forum's deleted-author rule is now "[deleted player]" for
  members and the stored name, marked, for staff.
- ACCOUNT_DELETION.md: AD12 (wrong password or code is 400, not 401) and
  AD13 (a deleted account drops off Forum guests), both asked of the org
  lead while building; §4.1 refusals carry codes; step 2 marked built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-29 18:34:28 -05:00
3545e898af Merge pull request 'docs: record M8 step 2 (data safety) and plan self-service account deletion' (#391) from docs/m8-data-safety-built into main
Reviewed-on: #391
2026-10-29 22:33:22 +00:00
fc3f0ed296 docs(website): deletion unlinks game accounts through each module's unlink
A cascade is not an unlink. For UO the link lives on the shard (the
site's shard_account_links is a mirror), so dropping the mirror alone
would leave the shard attributing the game account to a deleted user.

- AD10: the hook is onUserDeleting and runs before the delete; each
  module calls its own unlink for every link (Rust: links.unlinkOwned;
  UO: the sidecar's DELETE /link/{account}, as the staff unlink does).
- AD11: an unlink that can't finish never holds up the deletion. A shard
  that is offline queues into shard_pending_unlinks, retried on
  reconnect. A protected staff account (403) is listed for admins as
  "still linked on the shard".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-29 17:28:54 -05:00
710262a591 docs(website): record the account-deletion answers (AD4-AD9)
The org lead answered the plan's six questions on 2026-10-29:
- delete at once, no grace period
- what a member wrote stays, and members see every snapshot of a
  deleted account as "[deleted player]"
- staff keep the name and the IP for moderation, so the stored rows are
  untouched and the rule is about who sees what (displayAuthor)
- the password is always the proof; SSO sits on top of a real account
- a UO game account stays on the shard; no protocol change
- a deleted staff username is never available again (reserved_usernames)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-29 17:23:58 -05:00
2ab35334d6 docs(website): plan self-service account deletion
ACCOUNT_DELETION.md is the plan of record for the org lead's decision:
a member deletes their own account on the website and in the app, as
Google Play requires of an app that starts accounts.

- One deletion service for the admin route and the member's own route,
  with a confirm step, the last-admin and demo refusals, clearing the
  username snapshots on what the member wrote, and a notice by email.
- MODULE_API 1.20.0: api.onUserDeleted, which runs after the commit and
  can't stop a deletion.
- Screens on the web and in the app; runicgateway.com /delete-account/
  as the address Play is given.
- What the schema already does (59 keys: credentials cascade, content
  detaches), the gaps, six questions, and the build order.

M8's order puts account deletion before report, block and hide, which
moves USER_SAFETY.md's reportTargets to MODULE_API 1.21.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-29 17:18:02 -05:00
988c000074 docs(android): record the account-deletion decision for M8
The org lead chose self-service deletion on the website and in the app,
with a runicgateway.com page as Play's deletion URL. Planned separately,
before the cutover.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-29 17:08:39 -05:00
6f95ed09d0 docs(android): record M8 step 2, the data-safety audit
runicgateway.com#44 declares everything the app sends as collected,
not shared, encrypted in transit and required, after an audit of
data/api/ on edge. Account deletion is left open for the org lead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
2026-10-29 08:21:09 -05:00
410c8acfe6 Merge pull request 'docs: plan report/block/hide, decide M8's open items, plan demo content' (#390) from docs/report-block-hide-plan into main
Reviewed-on: #390
2026-10-29 13:10:02 +00:00