Password-gate /replay + /social as URL-only, strip their nav, fix visited-link color, add shared loading state #73
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?
Foundational / cross-cutting. Several other tickets depend on the gate + shared loading component. Touches
App.tsx+components/Layout.tsx(shared with the map/users/items tickets - mergemainbefore pushing)./coilyco/eco-app/page-password), read at the service. A simple page-level password prompt is fine./replayand/socialbehind it. Both become URL-only: remove them from the top nav (frontend/src/components/Layout.tsx) and from the Home page. Reachable only by typing the URL.Files:
frontend/src/components/Layout.tsx,frontend/src/App.tsx,frontend/src/pages/Home.tsx, global CSS,src/eco_mcp_app/http_app.py(+ SSM read). Verifyward exec frontend-build+ward exec lint.🔒 Reserved by
ward agent --driver claude— containerengineer-claude-eco-app-73on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-06T05:12:02Z). 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#73· branchissue-73· driverclaude· workflowdirect-mainengineer-claude-eco-app-73· wardv0.413.0· dispatched2026-07-06T05:12:02ZIssue 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-73on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-06T05:35:00Z). 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#73· branchissue-73· driverclaude· workflowdirect-mainengineer-claude-eco-app-73· wardv0.413.0· dispatched2026-07-06T05:35:00ZIssue 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 - page-password gate on /replay + /social (URL-only), shared , global visited-link fix; landed on main as
2dbcf3a.Honest retro: this one went smoothly, which for a "foundational / cross-cutting" ticket is a little suspicious in a good way. The repo already had every pattern I needed sitting right next to me —
species.py's env-then-SSM admin-key lookup was a clean template forpage_auth.py, so the backend was mostly transcription with a timing-safe compare bolted on. The gate itself is deliberately a soft speed bump: password verified server-side, never shipped to the client, but the JSON APIs behind those pages stay public, so nobody should mistake it for real auth.Two things fought back, both minor. ESLint's
react-hooks/set-state-in-effectrejected my first cut ofPagePassword(synchronous setState in the effect for the "already unlocked" shortcut) — moving that into a lazyuseStateinitializer was the right fix anyway. And the merge:mainmoved twice under me, the second time (#78's /economy rework) collided in FEATURES.md on the same React-frontend bullet I was editing. Resolved by keeping my side and splicing in their richer /economy sentence — no code conflict, App.tsx/Layout.tsx/Home.tsx all auto-merged.Confident in the result: 463 py + 89 fe tests green, build + lint + precommit clean, all re-run post-merge on the final tree.
One real follow-up worth filing: the SSM parameter
/coilyco/eco-app/page-passwordstill needs to be created (a random string), and the deploy repo (coilyco-bridge/deploy) should wireECO_PAGE_PASSWORDinto the pod env via ExternalSecret — same shape as SENTRY_DSN. Until then the gate stays open in prod (no password configured = render through), which is a safe default but means the surfaces aren't actually gated live yet. That's an operator/deploy-repo action, out of this container's scope.