Stage 5 of the §14.3 integration plan, on protocol 14 (docs rust-link/PROTOCOL.md §20.8). - dt.started and dt.won are public kinds, dt.ended a staff kind. The new dangerousTreasures.js reads each row per viewer: grid and invaderCount for everyone, the winner's name for the presence audience (D376), the position, the step's key, the winner's Steam id and the invaders for staff. - Feed lines in the World events filter: "A Dangerous Treasures event has started · K12", "Alice won the treasure · K12 · 3 players fought for it". - Triggers rust.dt.started (with byEvent) and rust.dt.won, public, cooldown subject the server, names only. - eventDangerousTreasures.js: rust.dt.start, "Start a Dangerous Treasures event" (risk change, reversible none, budget rust.dt.events), server and difficulty. Refused at verify where the server said DT is not loaded or console.plugins is false (Rust-Plugins#34). dt-not-ready answers "Dangerous Treasures is not ready yet" with retryAfterMs 600000 (D365, D371); dt-no-spot retries on core's delay; DT's own refusals are permanent. - Treasure Hunter (D375): treasuresWon -> treasures_won, the title category treasureswon, and a sortable Treasures column shown where the server reports DT or a row counts one. - The map draws a running chest on the world layer; the server settings' plugin line names DT and whether a step can start one, from the integrations read's new `console`. - coreApi ^1.15.0, ci/core-ref.json pinned to website main at #215's merge. ci/bundle.json ships the two new files; swagger fragment and engagement manifest regenerated; README lists DT. Server 627/627 (16 new in test/dangerousTreasures.test.js) and every check; client 92/92, build and externals. Booted against the pinned core: 45 triggers, 13 actions, 11 budgets, 21 option sources; 89 routes unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
70 lines
2.7 KiB
JSON
70 lines
2.7 KiB
JSON
{
|
|
"$comment": [
|
|
"What a release copies into the bundle, declared ONCE. Read by .gitea/workflows/release.yml when",
|
|
"it assembles the tarball, and by server/scripts/checkBundle.js when CI asks whether that list",
|
|
"still covers everything the module's entry point can reach.",
|
|
"",
|
|
"This is an INCLUDE list on purpose. An exclude list ships whatever it forgot: the day someone",
|
|
"adds server/tools/ with a scratch credential in it, an exclude list packs it and nobody finds",
|
|
"out. The cost of that choice is that a new top-level directory silently drops OUT of every",
|
|
"release instead — which is exactly what happened to Module-uo between v0.3.0 and v1.0.0, where",
|
|
"server/commands/ arrived with a cutover, the list did not learn about it, and the module",
|
|
"installed and then died at the register stage on the operator's box. checkBundle.js exists so",
|
|
"that cannot happen twice, and it runs on the PR that adds the directory.",
|
|
"",
|
|
"server[] entries are paths under server/; root[] and generated[] are paths under the module",
|
|
"root.",
|
|
"",
|
|
"node_modules is NOT here, and its absence is asserted rather than assumed: this module declares",
|
|
"no runtime dependencies (everything the shipped half needs arrives on ctx), so the release runs",
|
|
"no npm ci and packs no dependency tree. checkBundle.js fails the PR that adds a `dependencies`",
|
|
"entry to server/package.json without also teaching the release to pack it — because a module",
|
|
"whose bundle silently lacks its own dependency fails the same way the missing directory did.",
|
|
"",
|
|
"generated[] ships but is not copied — release.yml writes module.json through jq to stamp the",
|
|
"released version into it, since the committed one is a floor rather than a record of the last",
|
|
"release. It is listed because server/index.js requires it, and a check that did not know it",
|
|
"ships would report the module's own manifest as missing from the bundle."
|
|
],
|
|
"server": [
|
|
"boot.js",
|
|
"catalogue.js",
|
|
"commands",
|
|
"configEdit.js",
|
|
"core.js",
|
|
"dangerousTreasures.js",
|
|
"db",
|
|
"dynamicPvp.js",
|
|
"engagement",
|
|
"eventDangerousTreasures.js",
|
|
"eventLeases.js",
|
|
"eventPermRewards.js",
|
|
"eventProgress.js",
|
|
"eventRewards.js",
|
|
"eventTemplates.js",
|
|
"eventWorld.js",
|
|
"eventWorldCall.js",
|
|
"index.js",
|
|
"ingest.js",
|
|
"mapImages.js",
|
|
"mapLive.js",
|
|
"model",
|
|
"npcSync.js",
|
|
"package.json",
|
|
"permSync.js",
|
|
"router",
|
|
"sidecarClient.js",
|
|
"titleSync.js",
|
|
"worldEvents.js"
|
|
],
|
|
"root": [
|
|
"engagement-triggers.json",
|
|
"swagger-fragment.json",
|
|
"LICENSE.md",
|
|
"README.md"
|
|
],
|
|
"generated": [
|
|
"module.json"
|
|
]
|
|
}
|