feat(rust): slash commands, the next wipe, and the Admin → Rust servers page (phase 16) #18

Merged
whitlocktech merged 2 commits from feat/phase-16-commands into edge 2026-09-25 19:18:33 +00:00
Member

Phase 16, built to the plan of record in docs modules/rust/PLAN.md §32 (docs#275). The as-built record and the walk are in §32.5–32.7 (docs PR alongside).

The commands (D126, D127). /status, /wipe, /top, /online and /clan are registered in one api.registerSlashCommands batch. All five are read-only and access: 'everyone', and each resolves its own gate inside the handler.

  • Every refusal is private.
  • An answer narrower than public is private too. A moderator's /online, or a member's /clan roster, goes to the caller alone and never to the channel. That is the reverse of the row's criterion, and the case core does not cover.
  • No command asks a sidecar. The answers took 5–154 ms on the walk.

The next wipe (D128, D130).

  • Storage: six nullable columns on rust_servers.
  • Computation: model/servers/nextWipe.js holds a pure nextWipe(row, now) with the zone arithmetic done through Intl. It runs on every read and is never stored.
  • Surfaces: the public shape gains nextWipe, and the admin shape gains schedule.
  • Saving: PUT /admin/rust/servers/:id takes the six fields and writes them only when wipeRule is present. A 400 carries one sentence per problem.
  • The web: the next wipe shows on the server list and in the server header.

D133, the page the plan assumed. §32 said the schedule would go in "the existing server form", but there was none. Servers were PUT-only (D106), and the README described an Admin → Rust server form that did not exist. New page /admin/rust/servers: add, edit, test and delete a server, with the wipe schedule in the form. The token stays write-only.

Also:

  • server/commands joins ci/bundle.json, which checkBundle caught.
  • The swagger fragment is regenerated.
  • The README now lists the commands and the page.

Checks: server 368 tests, client 55, check:imports, check:swagger, client build + check:externals, all green.

Walked 2026-09-25 on real core main with both rigs' sidecars, driven through the bot's real dynamicCommands (D129). All seven §32.3 steps passed, including every D127 case.

Needs your eyes:

  • The new admin servers page in a browser. I could not sign in to drive it. Its PUT was walked through the API.

  • §32.7's reading that a one-off date applies under none too.

  • AI-assisted: Claude Code (Claude Opus 5.5)

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

Phase 16, built to the plan of record in docs `modules/rust/PLAN.md` §32 (docs#275). The as-built record and the walk are in §32.5–32.7 (docs PR alongside). **The commands (D126, D127).** `/status`, `/wipe`, `/top`, `/online` and `/clan` are registered in one `api.registerSlashCommands` batch. All five are read-only and `access: 'everyone'`, and each resolves its own gate inside the handler. - **Every refusal is private.** - **An answer narrower than public is private too.** A moderator's `/online`, or a member's `/clan` roster, goes to the caller alone and never to the channel. That is the reverse of the row's criterion, and the case core does not cover. - **No command asks a sidecar.** The answers took 5–154 ms on the walk. **The next wipe (D128, D130).** - **Storage:** six nullable columns on `rust_servers`. - **Computation:** `model/servers/nextWipe.js` holds a pure `nextWipe(row, now)` with the zone arithmetic done through `Intl`. It runs on every read and is never stored. - **Surfaces:** the public shape gains `nextWipe`, and the admin shape gains `schedule`. - **Saving:** `PUT /admin/rust/servers/:id` takes the six fields and writes them only when `wipeRule` is present. A 400 carries one sentence per problem. - **The web:** the next wipe shows on the server list and in the server header. **D133, the page the plan assumed.** §32 said the schedule would go in "the existing server form", but there was none. Servers were PUT-only (D106), and the README described an Admin → Rust server form that did not exist. New page `/admin/rust/servers`: add, edit, test and delete a server, with the wipe schedule in the form. The token stays write-only. **Also:** - `server/commands` joins `ci/bundle.json`, which `checkBundle` caught. - The swagger fragment is regenerated. - The README now lists the commands and the page. **Checks:** server 368 tests, client 55, check:imports, check:swagger, client build + check:externals, all green. **Walked 2026-09-25** on real core `main` with both rigs' sidecars, driven through the bot's real `dynamicCommands` (D129). All seven §32.3 steps passed, including every D127 case. **Needs your eyes:** - **The new admin servers page in a browser.** I could not sign in to drive it. Its PUT was walked through the API. - **§32.7's reading that a one-off date applies under `none` too.** - [x] AI-assisted: Claude Code (Claude Opus 5.5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 2 commits 2026-09-25 18:43:37 +00:00
Five read-only commands registered with api.registerSlashCommands:
/status, /wipe, /top, /online and /clan (D126). Every refusal is private,
and any answer narrower than public (online names, a clan roster) goes
to the caller alone (D127). No command asks a sidecar.

The next wipe (D128, D130): six nullable columns on rust_servers, a pure
nextWipe(row, now) with the zone arithmetic through Intl, computed on
every read. The public server shape gains nextWipe; the admin shape
gains the stored schedule; PUT /admin/rust/servers/:id takes the six
fields and writes them only when wipeRule is present.

server/commands joins ci/bundle.json, which checkBundle caught.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
feat(rust): Admin → Rust servers page and the next wipe on the web (phase 16)
All checks were successful
PR Checks / client-build (pull_request) Successful in 26s
PR Checks / frozen-manifest (pull_request) Successful in 49s
PR Checks / server-tests (pull_request) Successful in 7m49s
cddba957d3
The module had no page for its own server rows: they were written only
through PUT /admin/rust/servers/:id, and the README described an
"Admin → Rust" server form that did not exist. D133 (org lead) builds it:
add, edit, test and delete a server, with the D130 wipe schedule in the
same form. The token stays write-only and an edit sends the stored
protocol back rather than re-stamping the row.

The next wipe shows on the server list and in the server page's header,
in the reader's own clock, marked "rescheduled" for a one-off date.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit fb5a581a94 into edge 2026-09-25 19:18:33 +00:00
whitlocktech deleted branch feat/phase-16-commands 2026-09-25 19:18:34 +00: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#18
No description provided.