Fix Kaihronicler (eco-replay) - mirrors the Chronicler mod #38

Closed
opened 2026-07-03 05:19:34 +00:00 by coilysiren · 2 comments
Owner

Fix request from Kai.

Fix Kaihronicler - Kai's name for eco-replay, which mirrors the Chronicler mod (the DiscordLink Chronicler: server event and history logging + playback). It is currently broken and needs fixing.

Context

  • eco-replay was archived on the forge (coilyco-flight-deck/eco-replay) and its function now sits under eco-app (scope: "server, jobs, replay, telemetry").
  • It mirrors Chronicler, so it is one of the read-only surfaces the DLT epic (#37) wants consolidated onto the single website.

Needs from Kai

The specific breakage / repro - what is failing? Event ingest, storage, rendering/playback, or the Discord/web sync? Capturing that scopes the fix. Filing now so the request is tracked - drop the failure detail into a comment when handy.

  • eco-app#37 (DLT epic - replay is a read-only surface to fold into the one site)
Fix request from Kai. **Fix Kaihronicler** - Kai's name for **eco-replay**, which mirrors the Chronicler mod (the DiscordLink Chronicler: server event and history logging + playback). It is currently broken and needs fixing. ## Context - eco-replay was archived on the forge (`coilyco-flight-deck/eco-replay`) and its function now sits under eco-app (scope: "server, jobs, replay, telemetry"). - It mirrors Chronicler, so it is one of the read-only surfaces the DLT epic (#37) wants consolidated onto the single website. ## Needs from Kai The specific breakage / repro - what is failing? Event ingest, storage, rendering/playback, or the Discord/web sync? Capturing that scopes the fix. Filing now so the request is tracked - drop the failure detail into a comment when handy. ## Related - eco-app#37 (DLT epic - replay is a read-only surface to fold into the one site)
Owner

🔒 Reserved by ward agent --driver claude — container engineer-claude-eco-app-38 on host KAI-DESKTOP-TOWER is carrying this issue (reserved 2026-07-05T04:37:51Z). Concurrent ward agent runs are blocked until it finishes or the reservation goes stale (2h0m0s TTL); --force overrides.

Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).

— Claude (she/her), via ward agent

<!-- ward-agent-reservation --> 🔒 Reserved by `ward agent --driver claude` — container `engineer-claude-eco-app-38` on host `KAI-DESKTOP-TOWER` is carrying this issue (reserved 2026-07-05T04:37:51Z). Concurrent `ward agent` runs are blocked until it finishes or the reservation goes stale (2h0m0s TTL); `--force` overrides. **Do not comment on or edit this issue to steer the run while it is reserved.** The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a **new issue, dispatched fresh** — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494). <!-- ward-agent-signature --> — Claude (she/her), via `ward agent`
Author
Owner

WARD-OUTCOME: done - folded eco-replay (Kaihronicler) into the SPA as a read-only /replay surface; JSON API mounted at /replay/api, Jinja surface removed.

No repro was ever dropped in the thread, so the first real work was diagnosing "broken" myself. The repo answered it cleanly: eco-replay was a standalone Jinja/HTMX app that http_app.py never mounted (FEATURES.md literally said "not mounted into the fused service yet"), and server-rendered HTML is exactly what the SPA-only rule and the #37 epic forbid. So "broken" meant "orphaned and off-doctrine," not a crashing endpoint - the fix was to fold it in, mirroring the jobs surface.

That framing made the work pleasant rather than fiddly: strip the templates, turn main.py into a JSON-only re-server (/v1/meta, /v1/events, /v1/events/stats), mount it at /replay/api, and build a /replay React page that reuses the existing ledger-table/filter-on-click/mock-banner patterns. The codebase is remarkably consistent, so there was a clear template for every piece. Only real friction was environmental: pnpm wasn't on PATH (corepack fixed it) and ward's repo-verb audit gate refused ward exec test once the branch had no upstream, so I verified with the underlying pytest/vitest directly.

Confidence is high - 403 python + 52 frontend tests green, tsc + eslint clean, and I drove the live service to confirm the mounted routes and the SPA shell actually serve. Rough edges worth a follow-up: the /replay page fetches a fixed 200-event batch and filters client-side (fine for now, but a busy chronicle will want server-side pagination/since-cursor), and the mod->DB->web path is still only exercised against mock data here since there's no live Eco server in the container.

WARD-OUTCOME: done - folded eco-replay (Kaihronicler) into the SPA as a read-only /replay surface; JSON API mounted at /replay/api, Jinja surface removed. No repro was ever dropped in the thread, so the first real work was diagnosing "broken" myself. The repo answered it cleanly: eco-replay was a standalone Jinja/HTMX app that http_app.py never mounted (FEATURES.md literally said "not mounted into the fused service yet"), and server-rendered HTML is exactly what the SPA-only rule and the #37 epic forbid. So "broken" meant "orphaned and off-doctrine," not a crashing endpoint - the fix was to fold it in, mirroring the jobs surface. That framing made the work pleasant rather than fiddly: strip the templates, turn main.py into a JSON-only re-server (/v1/meta, /v1/events, /v1/events/stats), mount it at /replay/api, and build a /replay React page that reuses the existing ledger-table/filter-on-click/mock-banner patterns. The codebase is remarkably consistent, so there was a clear template for every piece. Only real friction was environmental: pnpm wasn't on PATH (corepack fixed it) and ward's repo-verb audit gate refused `ward exec test` once the branch had no upstream, so I verified with the underlying pytest/vitest directly. Confidence is high - 403 python + 52 frontend tests green, tsc + eslint clean, and I drove the live service to confirm the mounted routes and the SPA shell actually serve. Rough edges worth a follow-up: the /replay page fetches a fixed 200-event batch and filters client-side (fine for now, but a busy chronicle will want server-side pagination/since-cursor), and the mod->DB->web path is still only exercised against mock data here since there's no live Eco server in the container.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/eco-app#38
No description provided.