refreshNavWallet assumed every signed-in session has a wallet address and
threw on null for email-only members; the catch returned null and render()
treated the member as signed out even though the session and cookie were
valid. Nav now shows the email (or member badge) when no wallet is linked.
Verified with a full browser cycle: session landing, logout, fresh code
sign-in. Assets v=20260904k.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
/contract: plain-language security review with the six design laws, honest
operator CAN/CANNOT lists, split walkthrough, oracle bridge and anti-stall
notes, testing summary, live explorer + Sourcify verified-source links
(config-driven so it follows the mainnet flip). Nav gains The contract.
All asset URLs now carry a version query so deploys bust browser caches
(the level-cycler stall). Earn-deeper checklist leads with: no withdrawal
requests, ever.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Spec 8b types 1-3. Spend accrues per campaign in batches; burns queue for
the engine signer (admin runs consume() on-chain, /api/admin/burns). Rates
are volume config (adrates.json), rehearsal placeholders until Marty sets
the real card. Public slots serve on the ledger page; campaign manager in
the members area.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Site copy regenerated through the bv-tester1 engine; em dashes scrubbed from
all user-visible strings. /api/my/activity serves per-member earnings,
referrals, and purchases from the chain index.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Zero-dependency Node server on the RM Circle pattern. Chain config lives in
the volume so the same code runs the Amoy dress rehearsal and mainnet.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>