Repository navigation
Nation desk culture layer + streaks auth + custody docstring fix - #30
Conversation
Demand-validation layer for the pre-PMF pivot (docs/internal/mvp-plan-2026-11): anonymous confidence poll, sovereign-debt block, and routable ways-to-hold mounted inside the currency surfaces — CurrencyStoryInspector (both connected and walletless Home) and /currency/[code] — so users vote and see access without leaving the app. - models/SentimentVote + /api/sentiment: one vote per anonymous session per currency, 180-day TTL, codes allowlisted against the dataset; SENTIMENTS kept in a leaf lib so mongoose never enters the client bundle - lib/holdable-assets: scans only swap-executable token maps through the unroutable list; no rail renders honest absence + convert_intent fake door (measures demand before any integration) - /country doorway → /currency/[code] (moment-style meta + OG card); country-card OG route kept; compare folded into the existing /pair stage - 5 funnel events + 'nation desk' group in funnel-outcomes = the virality and intent gates measurable from day one - cleanup: dead use-analytics queue removed (call sites in Tooltip, use-app-shell, TabContentRouter) - 3 new test files, 24 cases; geo-gated thesis surfaces stay denied in GB Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The block still described the deleted Privy Safe / VAULT_PRIVATE_KEY execution path (removed in 78b3413) and pointed at a doc that no longer exists — the worst possible comment for counsel or an auditor testing the non-custodial claim. Rewritten to the actual two-layer model: app gates everywhere, on-chain caveats via the user-own smart account on kit-supported chains (Celo, Celo Sepolia, Arbitrum), advisory-only + fail-closed elsewhere. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The confidence poll lived only inside the story inspector (L2) — invisible until a user opened the sheet. A single question line now sits under the LiveLine: 'How confident are you in the naira? →' taps through to the inspector where the poll and ways-to-hold live. Discovery invites at L1, the poll responds at L2 — same depth contract. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The route keyed every method on the caller-supplied URL address — anyone
could read, inflate or delete another wallet's streak state, and the
"dev only" DELETE was not env-gated. This is the unauthenticated-address
pattern the repo rules already forbid for agent memory.
- requireWalletAuth must recover the URL address or 401 (all methods)
- DELETE 404s in production
- use-streak-rewards signs via getWalletAuthHeaders + wallet-context
signMessage (sessionStorage-cached session proof, one signature);
shared fetchStreakFromApi/patchActivity take optional headers
- public aggregate /api/streaks/stats untouched
- +2 tests: missing auth and wrong-wallet signature both 401
Also adds the L1 vote invite on the moment card ("How confident are you
in the {money}? →") tapping into the story inspector where the poll
lives — discovery invites at L1, the poll responds at L2.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
fetchMock.mock.calls is any[][] — the ([u]: [unknown]) destructure was a pre-existing tsc failure that blocked the pre-push typecheck. Reads the first arg positionally instead. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
ⓘ Qodo reviews are paused because the subscription is no longer active. Ask your workspace admin to reactivate the subscription to resume reviews. Manage billing |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
The curated scheduled-events calendar correctly surfaces the Dec 8 FOMC now that Oct 27 has passed — two tests pinned the October date/ID and went red in CI. Not product code. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Node >=22 exposes window without a Web Storage backend unless --localstorage-file is set, so the 7 return-visit-lead tests crashed on window.localStorage locally and in the pre-push hook while CI's jsdom masked it. Define a Map-backed surface only when the real one is absent. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The sovereign-debt dataset has sources with no url (undefined) — Next
serializes getStaticProps to JSON and crashes the build on /currency/GHS
("cannot be serialized as JSON"). Round-tripping the derived debt and
ways props drops undefined keys before Next sees them. Verified with a
full local `next build` — all 43 static pages generate, including all 29
/currency/* paths.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Node >=22 environments can expose window without a Web Storage backend (localStorage needs --localstorage-file). ~360 tests across dozens of files crashed on window.localStorage locally and in the pre-push hook while jsdom environments silently masked it. Install a Map-backed surface only when the real one is absent — jsdom keeps its own. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The plain-object shim still missed two real cases: test files that spy on Storage.prototype (a prototype spy never sees calls on a plain object), and sessionStorage. Now: patch the Storage prototype with a WeakMap-backed store when the class exists but surfaces are missing, hand out Storage-derived surfaces, share one surface between window and globalThis, and keep it writable so per-file shims still override. 358 -> 0 local failures across the affected suites. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Summary
Test plan
Generated with Devin