User surfaces: actionable dossier + fix day-as-float / add hour + remove the all-users listing (closes #86) #93
Labels
No labels
burndown-2026-06
burndown-2026-08
headless
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/eco-app#93
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Reshape the user surfaces around actionable per-player info, fix the day rendering, and remove the all-users listing page. Filed from a batch of eco-app feedback Kai handed the director surface. Closes #86 (remove the page that lists every user).
Remove the all-users listing (
/users)/usersroute andfrontend/src/pages/Users.tsx(plusUsers.test.tsx). Keep the per-user dossier/users/:hex(User.tsx) untouched as a surface.preview_users_jsonroute insrc/eco_mcp_app/http_app.pyand the users-index path insrc/eco_mcp_app/users.py(keep the single-user dossier fetch).User.tsx("All users ->", "Browse every user ->") so nothing points at the removed page.Fix "day as a float" and add the hour (
frontend/src/pages/User.tsx){t.day ?? "-"}, civicsDay {e.day}, timeline{ev.day}. These show ugly floats. Every place that mentions a day must also mention the hour, formatted from the underlying timestamp, never a bare float. Use the shared day+hour / relative-time formatter (authored in the site-wide polish ticket) if present, else format inline and leave a note so the sweep can converge them.Make the dossier actionable for that specific player
Kai: "the per user page should orient around providing actionable info for that specific user - the existing info is fine too though." Keep every existing panel, but lead with an actionable summary that answers what this player would want at a glance:
Pull supply/demand/offers from the same spine
/tradeand the item pages use (logistics.py,stores.py,market.py).Done when
/usersis gone with no dead links, the dossier leads with an actionable per-player summary while retaining the existing panels, and every day shows an hour with no raw floats.ward exectest + lint gates green. Updatedocs/FEATURES.md.🔒 Reserved by
ward agent --driver claude— containerengineer-claude-eco-app-93on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-07T06:13:28Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (2h0m0s TTL);--forceoverrides.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).
run seed context — what this run is carrying (ward#609)
coilyco-gaming/eco-app#93· branchissue-93· driverclaude· workflowdirect-mainengineer-claude-eco-app-93· wardv0.419.0· dispatched2026-07-07T06:13:28ZIssue body as seeded:
… (truncated to 2000 chars; full body is on this issue)
Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.419.0).
— Claude (she/her), via
ward agentWARD-OUTCOME: done -
/userslisting removed, dossier leads with an actionable summary, all day floats now renderDay D, HH:MM; test+lint+build+precommit green, landed on main.Mostly smooth, with one genuine surprise at the very end. The removals and the day+hour fix were clean, and wiring the actionable "At a glance" panel from the same logistics/stores spine
/tradeuses fell out naturally — owner-matched live offers, top specialties × current supply gaps, and recent trades in relative time, all best-effort so a missing exporter just thins the summary instead of sinking the page.The fight was the merge. A parallel run had already landed a shared
formatDayHouron main — the "site-wide polish ticket" formatter the issue pointed at — but it's the /info world clock (3600s/day,timeSinceStartS), while the dossier's trade/civics/progression days come off the exporter CSVs on a different calendar (Time / 86400). Feeding exporter days into that helper would render every day 24× too large. So rather than force a wrong reuse or fork the name, I kept their world-clockformatDayHouruntouched and named mineformatEventDay, with a note on both explaining the two calendars and flagging reconciliation as a follow-up for the sweep. That divergence (3600 vs 86400 seconds-per-day across the same game's data) feels like the real latent issue worth a dedicated ticket.Fairly confident: 94 frontend tests + 490 backend pass, tsc/eslint/precommit clean, and the summary logic is exercised with realistic fixtures including the degrade-when-spine-missing path. Rough edge: the "selling/buying now" list is only as complete as the logistics board's capped offer rows, so a user's non-top offers may not show — acceptable for a glance view, but noted.