New hidden /users/<base16(username)> page: every field for one user; user-pivoted lists show every user #80
Loading…
Add table
Add a link
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?
/users/<hex>where<hex>is the base16 of the username. Hidden (no nav link), but NOT password-protected. It shows every single data field that relates to that individual user - across all exporters: skills/jobs + lastSeen, trades as buyer/seller, crafting, civics (votes/office), currency holdings, etc.Files: new
frontend/src/pages/User.tsx+ route inApp.tsx(touchesApp.tsx- mergemain), backend per-user aggregation endpoint. Base16-decode the path segment to recover the username.🔒 Reserved by
ward agent --driver claude— containerengineer-claude-eco-app-80on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-06T05:15:26Z). 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#80· branchissue-80· driverclaude· workflowdirect-mainengineer-claude-eco-app-80· wardv0.413.0· dispatched2026-07-06T05:15:26ZIssue body as seeded:
Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.413.0).
— Claude (she/her), via
ward agent🔓 Reservation released by
ward container reap— containereco-app(--driver claude) exited at the auth pre-launch gate without launching the agent (ward#222/#264/#609), so the hold it took is retracted. A plainward agentretry no longer needs--force.Gate: auth smoke test (claude credentials)
Recovery: Refresh the host claude login (re-run
claudeon the host to re-auth), then re-dispatch.error from the gate
— Claude (she/her), via
ward agent🔒 Reserved by
ward agent --driver claude— containerengineer-claude-eco-app-80on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-06T05:38:11Z). 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#80· branchissue-80· driverclaude· workflowdirect-mainengineer-claude-eco-app-80· wardv0.413.0· dispatched2026-07-06T05:38:11ZIssue body as seeded:
Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.413.0).
— Claude (she/her), via
ward agentWARD-OUTCOME: done - hidden /users/ dossier page + /users index, backend
users.pypivot/roster +/preview/user.json&/preview/users.json, world by-citizen/polluter de-capped; landed on main.Retrospective: the shape fell out cleanly once I mapped where every per-user field lives and — the load-bearing question — which surfaces truncate. Pleasant surprise: most aggregate leaderboards (trades top-buyers/sellers, crafting by-citizen, civics top-voters) are already built complete server-side; the top-N slicing is purely a frontend render choice. So "list every user, never a top-N" mostly just meant not re-truncating in the new endpoint, plus one real backend fix — world's by-citizen/by-polluter was capped at 25, now uncapped (
[:None]keeps the whole ranked list, tests can still pass a bound).What fought back was integration, not the feature. Main moved twice under me: first the page-password gate (#73) — resolved by keeping /users deliberately un-gated per the issue — then a new items surface (#74-ish), both touching the same App.tsx/http_app.py lines. Also hit a pre-existing red on main: #70 renamed crafting
byItem→byCraftedbut leftuseCraftingPulseand a Home test mock on the old field, sotscwas broken on main; origin independently fixed it the same commit-race I did, converged on their defensivebyCrafted?.[0].Confidence is high on the wiring: pure pivot/roster is unit-tested, both endpoints have TestClient coverage, pages have vitest coverage, and I drove the real ASGI app against an unreachable server to confirm graceful per-panel degradation. The honest soft spot is completeness at the tail — currency top-holders (15/currency) and progression citizen cards (busiest 80) still cap upstream, so a very-low-ranked holder or a quiet player can be thinned; the dossier surfaces a warning rather than pretending, and de-capping those two is a clean follow-up worth filing. Also, social is redacted to hashed handles by design, so it does not join by username and is intentionally absent from the dossier.