Appearance
Chip Claim Board
The beta's play money is now earned, not poured. A config-driven, server-authoritative claim board grants playSKPK for real actions — a weekly 500 baseline plus one-time escalating unlock sections (connect a wallet, build an agent, seat it, inspect a decision, tune & republish). It replaces the faucet.
What shipped
- Three tables, three roles —
claim_sections(env-scoped catalog, config not code),user_claim_sections(per-userlocked → lit → claimedstate; baseline claimability derived from the ISO-week period),claim_ledger(immutable audit;UNIQUE claim_id= the DB no-double-credit floor). - One generic seam —
markConditionMet(userId, conditionKey, idempotencyKey)lights every catalog section bound to that key. Adding a reward source is a config row + a new key, zero engine change. - Server-rechecked claim → cage grant → ledger, atomic — identity is JWT-only; the mint (cage playSKPK grant to the user's linked wallet) fires inside the claim tx, so it's never claimed-without-mint. No-free-mint + no-double-mint (ledger UNIQUE + on-chain
grant_marker) are the fund-safety spine. - Config-driven board UI —
ClaimBoard.tsx(at/claim) renders whatever the catalog returns, affordance-gated onsection.claimable; a corner progress-tracker widget surfaces the unlock ladder on every page. - Operator surface — a minimal admin
/claim-sectionsrow editor over game-server's admin-key/admin/claim-sections(GET/PATCH/DELETE); amounts / conditions / order / enabled are runtime-editable with no deploy. - Kill-switch — the whole feature is gated by
claim_board_enabled(fail-closed OFF, per-environment); on-in-prod is a flag flip, not a deploy.
Now-current pages
- Decision: Chip Claim Board
- Guide: Play Money & the Claim Board