feat(events): an event action's progress() on a live run's public page (MODULE_API 1.12.0) #210
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/events-action-progress"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Core's half of RunicNPC stage 8 (D304, D305; design in docs#321). An event action may declare an optional
progress(envelope): how its step stands while the run is live. Core accepts two shapes and interprets neither:{ label, left, of }, rendered "Bandits: 3 of 8 left";{ label, percent }, rendered "The Juggernaut: 62%".How it works:
server/src/events/progress.js. It asks each step of a live run whose action hasprogress. The call gets the step's own held ledger rows and the reader as{ userId }, so the module applies its own visibility settings.current) carries the lines asprogress.GET /public/events/:slugnow takes an optional session (optionalAuth).EventPage.jsxrenders the lines under the phase label and re-reads them every 15 s while the event is live, without reloading the page.progressis optional and must be a function. It is stripped from the admin catalog with the other callables.D305, the org lead's condition: core stays game-agnostic and UO must not break.
^1.10.0and registers no action withprogress, so its actions and pages are unchanged. The swagger generator loaded the installed UO module (v0.6.0) against this core without complaint.coreApiequality check goes red when its pin moves to this core, by design.Also regenerated:
engagement-triggers.json: every MODULE_API bump changes its embedded version.routes.guards.json:optionalAuthon the one route. The URL manifest is unchanged.PublicEventProgressLineschema.Docs:
MODULE_API.md1.12.0 andEVENTS.md§I will follow in the stage 8 docs PR. They are not in this PR.Tested
eventProgress.test.jscovers the two shapes, the deadline, a throw, a dead database, per-step rows, the reader, and the cache. Also added: a registry test (optional, stripped from the catalog) and a public-model test (only the live occurrence carriesprogress, asked for the reader). The pinned version moved to 1.12.0.mainon this machine, becausewebsite/modules/holds the installed rust and uo modules.MODULES_DIRpointed at an empty directory (CI's view), the manifest, engagement and event tests pass 97/97.progressText.Checklist
Claude Code (Claude Opus 5.5). The commit carries theCo-Authored-Bytrailer.🤖 Generated with Claude Code
https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
An event action may declare an optional `progress(envelope)`: how its step stands while the run is live. Core accepts two shapes and interprets neither: - a count: { label, left, of }, rendered "Bandits: 3 of 8 left"; - a percentage: { label, percent }, rendered "The Juggernaut: 62%". How core asks: - `events/progress.js` asks each step of a live run whose action has one. It passes the step's own held ledger rows and the reader's account id, so the module applies its own visibility. - Each call has a 2 s deadline. A throw, a late answer or any other shape is a line not shown, never an error on the page. - One answer per run and reader is cached for 5 s. - The public event's live occurrence carries the lines as `progress`. The route takes an optional session for the reader. - The page renders them under the phase label and re-reads them every 15 s while the event is live. Core stays game-agnostic: no game's words are in it. Additive, so a minor bump. Module-uo declares ^1.10.0, registers no action with progress(), and its actions and pages are unchanged. From RunicNPC stage 8 (D304, D305). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY