Calibration scorecard
Every recommend.default in the corpus is a dated, falsifiable prediction with a check-by horizon (shorter for fast-moving, low-confidence domains). Adversarial challenges and live npm signals resolve them: held = 1.0 · weakened = 0.5 · overturned = 0.0, scored per confidence tier. This is the page that keeps the word “confidence” honest — an assertion becomes a measurement.
Score by confidence tier
| tier | predictions | resolved | held | weakened | overturned | score |
|---|---|---|---|---|---|---|
| high | 11 | 6 | 4 | 2 | 0 | 83% |
| medium | 19 | 6 | 2 | 4 | 0 | 67% |
| low | 14 | 2 | 0 | 2 | 0 | 50% |
Reading the numbers: 0 of 14 graded predictions have been overturned — every “weakened” verdict means the default survived an adversarial challenge but gained a real caveat, and it's deliberately scored harshly at 0.5. A modest score in the low tier is calibration working: low confidence predicts churn — the tiers earning their ordering (high above low) is the claim this page tests. Tiers marked early have too few grades to read as a trend.
Resolved predictions
react-core weakenedhigh asserted 2026-06-25 · resolved 2026-06-25
“Stay on React 19.2 and turn on React Compiler 1.0 for new code — let it handle memoization; keep existing useMemo/useCallback as escape hatches (don't strip them — removing can change the compiler's o…”
↳ don't strip useMemo when enabling Compiler; re-verify 19.2
state heldhigh asserted 2026-06-17 · resolved 2026-06-25
“Split the problem: TanStack Query for server state + Zustand for client/UI state. This is the common, low-regret 2026 pairing.”
↳ nothing overtook Zustand; local-first builds ON Query
data heldhigh asserted 2026-06-17 · resolved 2026-06-25
“TanStack Query for REST/server-state caching — the default for client-side data fetching.”
↳ TanStack Query still #1; RSC complements; Zero 1.0
nav heldmedium asserted 2026-06-25 · resolved 2026-08-18
“React Native → Expo Router if you're on Expo, else React Navigation. Web → use the meta-framework's router (see RB-E-META-FRAMEWORKS), or TanStack Router for a type-safe SPA.”
↳ re-challenge: RR 44.2M/wk vs TanStack 19.7M (2.2x) but RR 8.3.0 typegen still executes app/routes.ts (framework-mode), so the type-safe-SPA axis is unchanged
meta-frameworks weakenedmedium asserted 2026-06-25 · resolved 2026-07-09
“Web: Next.js is the safe default; choose TanStack Start when you want a less-opinionated, Vite-native RSC stack. RN/universal: Expo Router.”
↳ Next default holds (Start still RC, RSC experimental; 60x dl spike = Lovable CI); default line oversells Start as RSC stack + no-backport patch policy missing
styling weakenedmedium asserted 2026-06-25 · resolved 2026-07-09
“Web: Tailwind (pair with shadcn/ui — RB-E-COMPONENT-LIBS). React Native: NativeWind if you want Tailwind, else StyleSheet/Unistyles. Prefer zero-runtime/compiler approaches on both.”
↳ challenge: s-c v7 prerelease active but still runtime (advice holds); NativeWind TW4 skew caveat; dead react-native-tailwind pkg row fixed
animation weakenedmedium asserted 2026-06-25 · resolved 2026-08-18
“React Native → Reanimated 4 + Gesture Handler 3 for real UI-thread animation & gestures (core Animated only for trivial cases). Web (React DOM) → Motion (framer-motion's successor) for declarative lay…”
↳ challenge: default (Reanimated 4 + GH3 / Motion on web) untouched, but the 'simple fade/slide -> Moti' clause contradicted its own caveat — Moti dormant (npm 2025-01-29, no commits since 2025-03-11, still deps framer-motion ^6.5.1)
lists heldhigh asserted 2026-06-25 · resolved 2026-08-18
“RN: FlashList for large lists, FlatList otherwise, ScrollView only for <20 static items. Web: react-virtual / react-window.”
↳ challenge: web co-defaults both current (react-window 2.3.0, TanStack Virtual 3.14.9); the TRAILING flag was a label/default-text mismatch, now named as its label reads
charts weakenedlow asserted 2026-06-25 · resolved 2026-08-18
“RN: Victory Native (XL) for standard charts; react-native-skia when you need custom/realtime rendering. Web: Recharts (batteries-included) or visx (low-level D3).”
↳ challenge: RN default HELD (victory-native 382k/wk vs gifted-charts 148k/wk; Skia vs SVG substrate) — but web victory is dormant (npm 2025-01-14), label now says so
native weakenedhigh asserted 2026-06-25 · resolved 2026-06-25
“Target the New Architecture (mandatory ≥ RN 0.82). Reach for Expo Modules for most native needs; use Nitro Modules for performance-critical custom native.”
↳ Nitro pre-1.0 (pin); Turbo Modules stay in-core stable; bridge removed 0.85
media weakenedlow asserted 2026-06-25 · resolved 2026-07-09
“Camera → VisionCamera (frame processors) or expo-camera (managed); video calling → LiveKit (open-source) or a hosted SDK (Daily/Agora/Stream); real-time filters → process VisionCamera frames + GPU-com…”
↳ challenge: v5 pin ahead of reality — 85% installs on frozen v4, open iOS26/race crashes; ship-now camera caveat added
storage weakenedmedium asserted 2026-06-25 · resolved 2026-08-18
“Small key-value → react-native-mmkv (fast, synchronous). Relational/large → op-sqlite or expo-sqlite. Secrets/tokens → Keychain / secure-store, never AsyncStorage.”
↳ challenge: secrets advice was an undifferentiated pair — expo-secure-store (57.0.1, ships with SDK) vs react-native-keychain (10.0.0, no release since 2025-03-23, 180 open issues); split by runtime
build heldhigh asserted 2026-06-25 · resolved 2026-06-25
“Web: Vite 8 (Rolldown). React Native: Metro (+ Hermes V1, precompiled iOS binaries). Monorepo: pnpm workspaces + Turborepo. Expo for managed velocity.”
↳ Vite 8 stable + Rolldown GA; napi pullback hits compiler path only
networking heldmedium asserted 2026-07-09 · resolved 2026-08-18
“Use fetch — on Expo SDK 56+ you are already on expo/fetch globally. The bigger win in most apps is the CACHE layer above it (TanStack Query, RB-E-DATA), not the client. Reach for react-native-nitro-fe…”
↳ challenge: axios at 101.7M/wk vs nitro-fetch 91k does not beat a fetch-FIRST default — the entry never recommends nitro-fetch unconditionally, and the axios when-clause already says keep it
Ledger: append-only tools/predictions.jsonl — 44 predictions to date. Unresolved ones aren't shown as wins; the score only counts what has actually been re-examined.