Chapter 8 · status
Honest per-element status across the seven feature families, the blockers register with unblock paths, and the working order. Sources: docs/17_FEATURES_AND_PROGRESS.md and docs/15_BLOCKERS.md — both reviewed weekly.
Badges: live shipped & tested · demo works but demo-scoped · next engine-ready, waiting on a dependency · parked idea phase.
| Element | Status | One-liner |
|---|---|---|
| A · Core loop — built | ||
| A1 · 300-format match | live | any reps, any order, first to target closes |
| A2 · tier handicap v1 | live | couch ×1.5 → athlete ×0.85 |
| A3 · %HRR handicap v2 | next | Karvonen blend — engine ready, needs straps in play |
| A4 · closure bonus | live | +15 urgency for the closer |
| A5 · charity pot | live | winner directs, never receives |
| A6 · taunt engine | live | AI-generated, canned fallback |
| B · Retention arc — built | ||
| B7 · seasons | live | 4-week series, 3/2/1 + MVP, champion crowning |
| B8 · relegation | live | A/B divisions swap at season end |
| B9 · comeback ×1.2 | live | >30% behind → one-time boost |
| B10 · MVP vote | live | second podium, feeds season points |
| B11 · streak forgiveness | live | $2 charity top-up saves the streak, once/season |
| B12 · baseline learning | live | HR drift ≤10%/update; volume-based anti-sandbagging |
| C · Social & viral — mostly built | ||
| C13 · result cards | live | 1200×675 SVG from bots, PNG from app |
| C14 · spectator mode | live | watch <code> — spectate another crew |
| C15 · crew-vs-crew | live | challenge <code> / challenge accept |
| C16 · drop-cam / public ladder | parked | ideas |
| D · Corporate — built (seeded) | ||
| D17 · org leagues | demo | hub corporate tab, awaiting real orgs |
| D18 · employer-funded pots | demo | "no employee money handled" |
| D19 · wellbeing dashboard | demo | aggregate-only, k≥5 suppression (Sahha-EAP playbook) |
| E · Verification — P1 built | ||
| E20 · camera counting | live | MoveNet in-browser, on-device only, verified:true |
| E21 · HR straps | live | GATT 0x180D, Karvonen %HRR per set |
| E22 · HealthKit / Health Connect | P2 | phased with native |
| E23 · WHOOP / Garmin cross-check | P3 | phased |
| F · Wilder cards — ideas | ||
| F24–F28 | parked | referee review · champion belts · radio mode · annual charity championship |
| G · Second wave — first four built (27 Aug) | ||
| G29 · rematch | live | one-tap run-it-back, roster carried (app + bots) |
| G30 · Monday digest | live | matches, margins, MVPs, pot, rivalry callout, AI line |
| G31 · photo finish | live | ≤5% gap → dramatic card + coral SVG variant |
| G32 · nemesis | live | head-to-head rival detection |
| G33+ · still proposed | parked | PRs · ghost race · guest slot · charity ladder · roast tiers · adaptive equivalents · warm-up predictions |
3 Sep 2026: Ben's 36-page master Source of Truth (v2026-09-02) became the product spec. Full table in docs/27_SOURCE_OF_TRUTH_RECONCILIATION.md; this is the condensed, current truth.
| Area | SOT (canonical) | Where we are | Status |
|---|---|---|---|
| Battle model | Daily battle, adjusted target 200, first eligible to target = Daily Win, battle continues — later completers bank the day | Engine V4 (game-core + apps/sot-engine.js) + the v4 app play it end to end; e2e asserts win/bank/fail | shipped |
| Seasons | Weekly default · 1 Daily Win = 1 season point | Shipped as default (monthly optional, Major future) | shipped |
| Stakes | Dinner / Dare / Deliverable / Charity Pot — agreed before season, resolve after; charity = contributions + winner directs + disclosed fee | All four lifecycles in Engine V4 + the v4 app (agreement gating, obligation fulfilment, charity chooser + receipt) | shipped |
| Rep Steal | Activator gains 10% equivalent — target keeps their score (pure gain) | Corrected in Engine V4; e2e asserts the target unchanged | shipped |
| Group Shield | Protects the group from an agreed daily failure consequence (streak reading) | Streak-protection semantics shipped (consumed at the close it saves); exact consequence scope stays open with Ben | shipped (scope open) |
| Power-up canon | 4 launch + post-launch set (Surprise Bomb, Rescue Rope, Combo Boost, Double Down, Assist Boost, Shield Bash) | All in the engine with SOT semantics; extras from our 14 preserved as experimental | shipped |
| Team mode | 2+ per side, 3v2 allowed, scoring normalisation open (Q229–231) | Team scaffolding in Engine V4, scoring pluggable per the SOT's UNCLEAR | scaffolded |
| Bots on the daily model | Chat layer per §1.3 — announcements + fast commands | SotCommandBus built parallel to the legacy bus (steal=pure-gain, day close + auto-close, full stake lifecycle, --sot sims); uncommitted at time of writing — see Bots | in flight · tested |
| Brand | Near-black + gold primary + purple secondary; loot presentation; 5-tab nav; "Join the Battle. Win the Day." | The v4 app's default skin — validated by the spec's own direction | shipped |
| Company / contract | Narwhal Ent Pty Ltd is the engaging entity | Contract parties updated | done |
| Critical states | The screen inventory's MISSING/edge states — reconnect, sync conflict, duplicate warning, rest day, winner-known | v4 app ships offline/reconnecting, sync conflict + duplicate warning, rest-day home, battle-complete-season-live; own e2e walk | shipped |
| Platform / tech | Flutter? NestJS? Cognito? — unlocked questions (Q263–269, 292–299) | Bun/PWA/Hono stays the fastest prototype path — founder+Ben decision | open (deliberately) |
The spec's §6 list, answered by things you can click today — the proposals to bring to Ben.
How are cards acquired, kept fair, do they expire? Our live answer: founder pack + daily drop, hold cap 4, leftovers carry (no expiry), draft-from-3 with the catch-up curve from v2 for competitive fairness.
Internal unit naming. Implemented as ruled: RUF internal, "reps" everywhere in the UI — enforced by the e2e language gate.
Working baseline confirmed? Configurable, default 200 — the wizard presets it, the engine honours per-group targets.
Daily Win → season point conversion. Shipped as default — standings read straight from the engine record.
Stolen reps counting toward target. Our answer: a per-day stealCanTriggerWin flag — the demo sets it on; the group decides.
The spec's missing/edge screens. Built as real states with their own 59-check e2e — offline queue, sync conflict sheets, rest-day home, winner-known transitions.
Still founder/Ben decisions, not ours to guess (SOT §6): handicap formula details (Q217–221) · team scoring (Q229–231) · brand lock (Q270–275) · monetisation (Q276–282) · platform (Q263–269, 292–299).
What's blocked, why, who unblocks it. 🟥 blocked · 🟧 partial · 🟩 clear — full detail in docs/15_BLOCKERS.md.
| # | Blocker | Unblock path | Status |
|---|---|---|---|
| Technical | |||
| T1 | Slack app doesn't exist yet (5-min human creation from /slack/manifest.yml) | create → install → paste Client ID at /slack → permanent Add-to-Slack link | blocked |
| T2 | WhatsApp Cloud API group messaging likely 1:1-only [VERIFY] | verify with Meta at pilot; DM-fallback designed (docs/14) | blocked |
| T3 | Bots only run while the dev machine is on (minirig offline ~96d) | power-on + tailscale up --force-reauth → hosting kit install (one command) | blocked |
| T4 | No auth — names free-typed, per-device state | magic-link auth via Resend on apps/api at MVP | partial |
| T5 | App ↔ bot state split (localStorage vs file JSON) | wire app → apps/api ← bots — built + tested, migration mechanical | partial |
| T6 | AI key balance — primary exhausted, running on secondary | monitor + top up; fallbacks degrade gracefully | partial |
| T7 | CF token lacks Tunnel:Edit — local server not exposed on the domain | widen scope or one tunnel login | partial |
| T8 | GitHub Actions runner stall (Aug 26–27) | resolved — transient incident; watch billing if it recurs (private repo) | clear |
| Legal / compliance | |||
| L1 | Charity-wager legal opinion — nobody has looked at the pot structure | brief a charity/gaming lawyer (AUD 3–10k); pledge-only / employer-funded until then | blocked |
| L2 | Apple 3.2.2(iv) — no in-app charity collection | already designed around: payments stay web-only | clear |
| L3 | Privacy policy + data inventory unwritten | one data-inventory sheet → policy + Apple labels + Play data safety | blocked |
| Business | |||
| B1 | Figma + blueprint not received from founder | email ask + call scheduled — design audit waits on it | blocked |
| B2 | Equity terms undefined (split, vesting, IP) | call agenda item; get it in writing | blocked |
| B3 | Corporate prospects unvalidated — no LOIs | ask on the call; Sahha-network intros | partial |
Deliberately NOT blockers: Apple Messages (no API exists — parked permanently) · app stores (PWA ships without them) · Strava (paid + capped) · custom ML rep counting (MoveNet covers MVP).
T1 — 5 minutes, human-in-loop → corporate surface goes live.
B1/B2 — Figma + equity specifics in writing.
T3 — always-on demo reliability.
T5 — kill the localStorage/file split; ~one session, mechanical.
L3 — one sheet feeds policy, Apple labels, Play data safety.
E20 in production play — MoveNet verifier live for pilot crews.

Phase 0 (due diligence) complete. Prototype feature-complete and live — and since 2 Sep 2026, re-spec'd. Ben's master Source of Truth arrived and was reconciled (docs/27): Engine V4 shipped (daily-200 first-to-target battles, weekly 1:1 seasons, all four stakes, corrected power-up canon — 110 tests), the v4 app walks the whole product (120 + 59 e2e checks, zero console errors), and the critical states exist as real states. The stack underneath is unchanged: a tested game engine, two chat bots, a phone-first app, an ops console, an AI layer, push-to-deploy hosting. Remaining for MVP proper: the SOT bot port (in flight), state unification (T5), auth (T4), first real crews, and the pilot gates (WhatsApp verification, Stripe pots, legal opinion).
Live version of the status tables with rendered components: rwf.qalarc.com/system. Full writeups: docs/17_FEATURES_AND_PROGRESS.md · docs/15_BLOCKERS.md.