feat(rust): chat titles rank twenty-three conditions, and admins name the categories (PLAN_REDESIGNS §5, D172-D175, D209) #26

Merged
whitlocktech merged 3 commits from feat/title-conditions into edge 2026-09-29 17:00:54 +00:00
Member

What & why

PLAN_REDESIGNS §5: the site half of the chat-title conditions.

  • Schema:
    • Fourteen title columns on rust_player_wipe_stats. The two best_* distances move by GREATEST; the rest are sums.
    • rust_weapon_kills (kills by weapon prefab name) and rust_title_categories (the admin's title for each category).
    • purge.sql drops the two new tables.
  • Ingest: player.tally's new fields, one statement per frame, none for an older plugin's frame.
  • Titles:
    • 23 categories plus playtime, each naming where it's read from: a sum, a MAX, npc_kills − animal_kills in signed arithmetic, or a named list.
    • The weapon, wood, ore and plant lists are in one file (server/model/titles/lists.js), checked against the rig's own item list (cf63b90).
    • "NPC kills" ranks human NPCs only (D209).
  • Empty rule text means the category's title: the rule's own, then the admin's, then the default. A rename clears every server's cached answer.
  • Admin API: GET /admin/rust/title-categories and PUT /admin/rust/title-categories/:stat (empty text resets). Swagger fragment and routes.manifest.json regenerated against the pinned core.
  • Screen: every category in the rule form, with the category's title as its placeholder, and a Category titles section with Save and Reset.

Plugin half: Rust-Plugins feat/title-conditions. Spec: docs docs/rust-title-conditions.

How it was tested

  • 432 server and 58 client tests, check:swagger, and the frozen manifest against the pinned core f0e7d2a.
  • Not yet walked, on the site or in game. The org lead deferred the walk to later.

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.

Merge note: feat/zones-domes (§3) also touches schema.sql, purge.sql, swagger/doc.js, swagger-fragment.json and routes.manifest.json. Whichever merges second needs a conflict fix and a regenerated fragment and manifest.

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

## What & why PLAN_REDESIGNS §5: the site half of the chat-title conditions. - **Schema:** - Fourteen title columns on `rust_player_wipe_stats`. The two `best_*` distances move by `GREATEST`; the rest are sums. - `rust_weapon_kills` (kills by weapon prefab name) and `rust_title_categories` (the admin's title for each category). - `purge.sql` drops the two new tables. - **Ingest:** `player.tally`'s new fields, one statement per frame, none for an older plugin's frame. - **Titles:** - 23 categories plus playtime, each naming where it's read from: a sum, a MAX, `npc_kills − animal_kills` in signed arithmetic, or a named list. - The weapon, wood, ore and plant lists are in one file (`server/model/titles/lists.js`), checked against the rig's own item list (cf63b90). - "NPC kills" ranks human NPCs only (D209). - **Empty rule text** means the category's title: the rule's own, then the admin's, then the default. A rename clears every server's cached answer. - **Admin API:** `GET /admin/rust/title-categories` and `PUT /admin/rust/title-categories/:stat` (empty text resets). Swagger fragment and `routes.manifest.json` regenerated against the pinned core. - **Screen:** every category in the rule form, with the category's title as its placeholder, and a Category titles section with Save and Reset. Plugin half: Rust-Plugins `feat/title-conditions`. Spec: docs `docs/rust-title-conditions`. ## How it was tested - 432 server and 58 client tests, `check:swagger`, and the frozen manifest against the pinned core `f0e7d2a`. - **Not yet walked**, on the site or in game. The org lead deferred the walk to later. ## 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. **Merge note:** `feat/zones-domes` (§3) also touches `schema.sql`, `purge.sql`, `swagger/doc.js`, `swagger-fragment.json` and `routes.manifest.json`. Whichever merges second needs a conflict fix and a regenerated fragment and manifest. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 2 commits 2026-09-29 16:25:12 +00:00
- Schema: fourteen title columns on rust_player_wipe_stats (the two
  best_* distances move by GREATEST, the rest are sums), rust_weapon_kills
  (kills by weapon prefab name) and rust_title_categories (the admin's
  title per category). purge.sql drops the two tables.
- Ingest: player.tally's new fields, in one statement per frame, none
  for an older plugin's frame.
- Titles: 23 categories plus playtime, each naming where it is read
  from (a sum, a MAX, npc_kills - animal_kills in signed arithmetic, or
  a named list). The bow/melee/blade/revolver/wood/ore/plants lists are
  one file, applied when a title is read. "NPC kills" ranks human NPCs
  only (D209).
- A rule's text may be empty, meaning the category's title: the rule's
  own, then the admin's, then the default. Typed-only-markup is still
  refused. A rename forgets every server's cached answer.
- Admin API: GET /admin/rust/title-categories and
  PUT /admin/rust/title-categories/:stat (empty text resets); the server
  list returns them too. Swagger fragment and routes.manifest.json
  regenerated (63 routes, against the pinned core).
- Screen: every category in the rule form, the category's title as a
  placeholder, and a Category titles section with Save and Reset.

The weapon lists are unverified until the rig probe runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
fix(rust): the title weapon and plant lists, read off the rig's own item list
All checks were successful
PR Checks / client-build (pull_request) Successful in 26s
PR Checks / server-tests (pull_request) Successful in 30s
PR Checks / frozen-manifest (pull_request) Successful in 43s
cf63b902bf
A read-only probe walked ItemManager.itemList on rust-oxide (2026-09-29). Revolvers are pistol_revolver, python and hc_revolver; bows add the legacy bow, the mini crossbow and the bowless crossbow and leave out the speargun; melee is every BaseMelee except the pies; blades add the obsidian, sunken and skinning knives and the chainsword; plants add wheat and the two wild berries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
Owner

Fix this

Fix this
wtclaude added 1 commit 2026-09-29 16:36:05 +00:00
Merge edge into feat/title-conditions: §3's zone presets
All checks were successful
PR Checks / server-tests (pull_request) Successful in 24s
PR Checks / frozen-manifest (pull_request) Successful in 36s
PR Checks / client-build (pull_request) Successful in 7m39s
837b84580e
Two conflicts, both additive: schema.sql and purge.sql keep both phases'
tables. Swagger fragment (61 paths) and routes.manifest (67 routes)
regenerated against the pinned core; 455 server and 58 client tests pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
Author
Member

Fixed in 837b845 (merged edge in). The two conflicts, schema.sql and purge.sql, were both additive, so both phases' tables are kept. I regenerated the swagger fragment (61 paths) and routes.manifest.json (67 routes, all documented, checked against the pinned core f0e7d2a). 455 server and 58 client tests pass, as do check:imports, check:bundle and check:externals. It's mergeable again.

Fixed in 837b845 (merged `edge` in). The two conflicts, `schema.sql` and `purge.sql`, were both additive, so both phases' tables are kept. I regenerated the swagger fragment (61 paths) and `routes.manifest.json` (67 routes, all documented, checked against the pinned core `f0e7d2a`). 455 server and 58 client tests pass, as do check:imports, check:bundle and check:externals. It's mergeable again.
whitlocktech merged commit eb184aaac8 into edge 2026-09-29 17:00:54 +00:00
whitlocktech deleted branch feat/title-conditions 2026-09-29 17:00:55 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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