Tablero de desarrollo — TheFittClub MVP

Última sincronización: 2026-08-13 (auto via GitHub Action — no editar a mano). Repo: gala1234/thefittclub — board fuente: _docs/03-tickets/00-board.md. Pipeline: 01-pending/02-active/03-qa/04-done/.


🧭 Orden de ejecución (brújula)

Espejo del bloque compass del board (_docs/03-tickets/00-board.md). Editar allí, no aquí.

🧭 June — execution order (compass, refreshed 2026-07-30). North star RE-TARGETED: the milestone is now deploy the app + migrate the legacy members off Zenler — the original June goal, landing August/September (deadline moved 2026-07-01 → 2026-09-15 after the funnel + compliance work overran). The frame stays “functional, no Stripe”: the funnel is LIVE (T70/T72/T73 closed), foundations are DONE — everything now serves getting the ~135 lifetime members into the app. What remains: the Zenler archive deadline, the legacy content pipeline, the invitation wave, and the first-access polish.

  • 🔴 Deadline-driven (external clock — schedule FIRST, do NOT slip): T300 (archive ALL Zenler data before account access lapses ≈2026-08-06; data permanently lost at lapse — re-confirm the exact cancellation date at activation). Enables Q3 personalization. No code dep; purely a calendar gate.
  • Critical path — the legacy migration (the heart of the re-targeted hito): T300 → T65 (Zenler content pipeline — F3+F4 remaining; F1+F2 real content DONE, founder-confirmed 2026-07-30, seeds in repo; re-estimate at re-activation) → T386 (NEW 2026-07-30 — go-live: invitation wave + first access) with T381 riding the same wave (Art. 9 outreach; T371 — fixture cleanup, re-hito Junio — lands FIRST: its “26 members” figure is unverified, see traps below). Post-archive: T387 (NEW — Q3 personalization seed, consent-gated; better landing for consenting members, not a wave blocker).
  • First-access UX (land before the wave): T382 (verify-email wait state drifted from delivered design) — the auth surfaces are the first thing a migrated member sees.
  • Data lane (FIRST after the legacy chain — founder priority 2026-07-30): T71 (residual PDF bonus only, re-estimated L→S — its result page shipped inside T70) → T78 (lead-magnet event tracking; PostHog EU base from T55 is live, spec re-validated 2026-07-28). The founder restarts content publishing the moment the migration lands and needs numbers from day 1 to iterate — the vault’s own attribution analysis (80_Metricas/Atribucion_IG_Zenler.md, 664 posts vs 581 sales) is correlational-only and names the missing piece: UTM/link tracking into the funnel. T78 + the T320 lead origin tags close that gap.
  • Launch lane (after the data lane; dependency closure 2026-07-30, founder decision): the milestone contains its own blockers — T104 → T38 → T52 (error-page chain: visual → routing → PWA/offline) · T387 (Q3 personalization, post-T300) closes the queue.
  • Ordering traps: T214’s backfilled positions span F1–F4 — the FULL-cohort invitation (T386) cannot go out on F1+F2 content alone; either close T65 through F4 first or send wave-per-phase, starting with F1/F2-positioned members (decide at T386 activation) · T381’s “26 members holding Art. 9 data” is unverified: the undemonstrable query never filters is_test_account, production holds 26 E2E fixtures (T365 — only 20 flagged), and nobody has been announced to — run the listing command in the T381 spec (or land T371, fixture cleanup, first); do NOT send any email before that check · T277 re-hito’d Beta 2026-07-30 (hard-blocked by T20 — Stripe, Producción; payments-adjacent) — do NOT pull it back before T20 · T381 sequences INSIDE the T386 wave, never as a separate uncoordinated contact · T63 (beta program) recruits NEW users — a different cohort, never mixed into the legacy segment.

🧭 i18n / data-layer — execution order (compass, refreshed 2026-06-20). North star: a single canonical i18n storage pattern (ADR-0010) before building on it, plus correct bilingual delivery across text, media and email. Wave 0 (the data-layer GATE) is CLOSED — the schema is converged and locked.

  • ✅ Wave 0 — DONE (data layer sanitized + locked): T173 (dropped zombie LocalizedText columns + physical_focus_translations) → T172 (per-locale media + mixable subtitle tracks) + T174 (deterministic storage-pattern gate). T96 (drop legacy routines) stays Hito Beta — different tables, never blocked T172/T173.
  • Wave 2 — bilingual content surfaces (Junio · ON the canonical base): the lead-magnet chain ships bilingual day 1 — this is the same critical path as compass:junio above (T61 → { T77T70T73 } → T71T72T78). No separate i18n work — bilingual is a build-time invariant of each surface.
  • Wave 1 — bilingual email (Hito Beta; only needs users.language, already exists): T171 (branded ES/EN transactional emails + per-user locale).
  • Wave 3 — final copy sweep (Hito Beta, last): T24 (app bilingual completeness — copy strings only), so it also audits the new email + lead-magnet strings.
  • One-liner: Wave 0 closed · Junio lead-magnet chain ships bilingual (see compass:junio) · T171 + T24 are the remaining Beta i18n waves.

Salud del MVP

Métricas computadas desde el repo en cada push a main. Si un número se ve raro, ajustar la realidad en la fuente correspondiente — no editar este archivo.

Cuadro de mando

MétricaHoyFuente
% MVP realizado (effort)71% (893 de 1266 pts) · 15 tickets sin estimar (asumidos M)ticket headers Effort:
% MVP realizado (count)74% (284 de 383)_docs/01-core/mvp-scope.md
% Prod readiness7% (2 de 27)_docs/01-core/production-readiness.md
Legacy abierto6 (1 TD + 5 LD)_docs/01-core/legacy-inventory.md
Seguridad? moderate npm audit · headers present · auth 4/6 ✅_docs/01-core/security-baseline.md
Velocity real (h/pt)5.33 h/pt · 0.187 pts/h (n=260)spec headers Started: + Closed:
Velocity calendar56.63 pts/week (n=74, last 4 wks)board’s Done table 4-col rows
Launch range (estimado)2028-07-11 (early) – 2029-06-25 (late, +50% buffer) · source: real (pts/hour) · 100 semanas (20h working/week)computed from velocity + remaining points

Distribución del backlog pending (MVP)

EjeDistribución
EffortXS: 8 · S: 18 · M: 48 · L: 23 · XL: 1 · sin estimar: 0
Modelo LLMsonnet: 42 · opus: 25 · mixed: 30 · sin asignar: 1

Salud por Hito

Progreso desglosado por hito. Cada fila muestra tickets done/en vuelo/pending y el % completado weighted por effort.

HitoDeadlineDoneEn vueloPendingPts done/total%Restante
Junio2026-09-15 (33d)160019560/633 pts88%73 pts
Beta2026-07-15 (-29d)122158356.5/572 pts62%215.5 pts
Beta Launch2026-09-01 (19d)1301349.5/116.5 pts42%67 pts
Producción2026-12-01 (110d)501910.5/83.5 pts13%73 pts
Deferred1802261.5/114.5 pts54%53 pts
Sin hito320184/87 pts97%3 pts

🎯 Hito Junio: 88% completado · 73 pts restantes · ETA: 2026-12-28 (early) – 2027-03-06 (late) · 20 semanas · source: real (pts/hour).

Contenido real por producto

Derivado del código en cada corrida — la fase cuenta como contenido REAL solo si existe drizzle/seeds/catalog/products/ritual/<producto>-phase<N>-data.ts. El scaffold dummy (T211) NO cuenta. Dos Ritual Core distintos — no confundirlos.

ProductoF1F2F3F4Real
Ritual Core Legacy (prod_ritual_core_legacy) — el producto de las socias vitalicias — pipeline T652/4
Ritual Core nuevo (prod_ritual_core) — futuro: versión del Legacy con varias sesiones por día para elegir duración (express/base/progressive)0/4

Insight

Código MVP: 71% hecho por effort (74% por count). Producción listo: 7%. La cifra que importa es la weighted; la count es para continuidad histórica. El gap entre código listo y producción listo es la diferencia entre “compila y funciona” y “puedo cobrar dinero sin que se rompa el viernes a las 11pm” — lo que falta para go-live es operaciones, contenido, canales y legal, no código.

Pipeline en estado actual

  • WIP (en vuelo): 1 active · 0 QA = 1 abiertos.
  • Backlog: 133 pending.
  • Done con fecha en el board: 302 entradas registradas (302 con Effort registrado).

Outreach pillars (pre-MVP)

Hitos de audiencia que corren en paralelo al MVP. Detalle + pilares de contenido en _docs/01-core/mvp-scope.mdOutreach pillars.

HitoPlazoEntregableTicket
H13-4 semanasLead magnet pre-MVP elegido + producido (PDF / audio / video). Disponible en R2, signed-URL on form submission.T61
H24-6 semanasLanding pública con email capture sirviendo H1. Forma parte de T36 con LEAD_MAGNET_VARIANT=pre-mvp.T36 (consumes T61)
H36-10 semanasBlog público /blog con 4-6 artículos evergreen, uno por pilar.T53 (promovido a MVP)
H48-14 semanasNewsletter bi-weekly en producción. ≥4 emisiones publicadas. Workflow estable (≤2h founder time/emission).T62

Outreach activity (cumulative)

Métricas de trabajo no-dev. Fuente: _docs/01-core/outreach-metrics.md (actualización manual al cerrar cada pieza).

CategoríaCountNotas
Instagram posts publicados0canal primario — 100% conversiones históricas
YouTube videos publicados0long-form companion (pro setup disponible)
Newsletters publicadas0
Blog articles publicados0
Lead magnet downloads (semanas registradas)0
Beta sessions completadas0

Esta semana (2026-08-10 → 2026-08-16)

Presupuesto: 3.7 pts · fuente: real velocity × 20 working h/wk

Foco principal (en activo): Ticket 453 — Pay the reviewer from the subscription instead of API tokens (Effort M, model opus)

Obligaciones no-dev esta semana (2 pts):

  • Instagram — 3 posts/semana (canal primario) · rotating 4 pillars (2 pts) — Independiente del cluster bi-mensual. 1 de los 3 puede ser teaser/derivado del cluster en curso.
  • Founder energy + journal review · founder (0 pts) — Tracked as 0 pts — habit, not a project deliverable.

Próximas 4 semanas (lookahead)

Proyección de carga por semana. Cada semana consume el presupuesto en obligaciones no-dev primero, después walks la cola de prioridad hasta agotar puntos disponibles.

SemanaTickets proyectadosPtsObligacionesRiesgo
Wk1 (2026-08-10)T3001/1.7000000000000002Instagram · Founder
Wk2 (2026-08-17)T658/1.7000000000000002Instagram · Founder
Wk3 (2026-08-24)T3863/1.7000000000000002Instagram · Founder
Wk4 (2026-08-31)T4203/1.7000000000000002Instagram · Founder

Próximos 3 meses — big rocks

Tickets XL/L proyectados por mes basados en la cola de prioridad + velocity. Los XL definen el ritmo; un mes con XL es un mes que no entra mucho más. Launch range: Sept-26 → Ene-27.

MesTickets proyectadosBig rocks (XL/L)
2026-08T300 · T65 · T386 · T420T65 (L)
2026-09T387 · T379 · T383 · T24 · T29
2026-10T63

Active (en implementación)

Ticket 453 — Pay the reviewer from the subscription instead of API tokens

Branch: claude/monthly-plan-200-dollars-5r3vql (remote-session mandate — override of the · Track: infra · Hito: Beta · Domain: infra

Anthropic documenta la vía: CLAUDE_CODE_OAUTH_TOKEN con claude-code-action factura contra la


QA (en verificación)

(vacío — ningún ticket en QA ahora mismo)


Pending (backlog, agrupado por Hito)

Next up: Ticket 300 — Archive all Zenler data before account access expires (~1 month) · content-migration,.

Junio (deadline: 2026-09-15) — 19 tickets · 73 pts

#TicketTítuloTrackEffortModelDomain
1300Archive all Zenler data before account access expires (~1 month)content-migration,Ssonnetcontent-migration
265Zenler Content Pipeline: Ritual Core Legacy → MVPcontent-migrationLmixedcontent-pipeline
3386Legacy migration go-live: invitation wave + first accessmvp,Mmixedemail
7420fix: phase-change modal shows invented track totals and the wrong progress counter (+ presentation pass)mvp,Mmixeddashboard
12387Q3 personalization seed: Semana-0 survey → migrated members’ physical profilescontent-migration,Mmixedcontent-migration
410Public testimonial wall + UI consumption from the SSOTmvpLmixeddesign
411Club points for testimonials: per-product amounts, profile display, in-product promptsmvpMmixedother
433Start a programme over from zeromvpMopusdashboard
434Tell her when her effort will not unlock the level test, and whymvpLopusdashboard
457The prod content deploy is broken, and the snapshot that protects Back Office edits was never committedinfraMopusinfra
468The result she reads is derived from the number she gets, not from a parallel scoremvpMopusonboarding
473See and set which engine governs each product, from the Back OfficemvpMopusadmin
474Track thresholds move onto the engine; purge the ghost unlock thresholdsmvpLopusschema
475Onboarding questions born from the assigned engine, plus the founder’s own extrasmvpLopusonboarding
476Level-up tests follow the engine: coverage per transition, and no test offered after the last phasemvpMmixeddashboard
477The engine seed stops masquerading as the engine: honest degradation, observedmvpMsonnetonboarding
478fix: a racing double-submit of a passed evaluation writes duplicate “passed” history rowsmvpSsonnetplayer
479The onboarding question library shows and edits visible_in_autotestmvpXSsonnetadmin
480fix: two phase lookups still match raw sort_order against the phase numbermvpXSsonnetdashboard

Beta (deadline: 2026-07-15) — 58 tickets · 212.5 pts

#TicketTítuloTrackEffortModelDomain
1379Don’t show the journal (or any health feature) to a member who hasn’t consentedmvpSopuscompliance
1383Tap targets: land the system rule, starting with consent paritymvpMopuscompliance
2924App bilingüe completeness passmvpMsonnetother
3129Pre-launch verification: perf SLA + happy-path E2E theatermvpMsonnetother
3263Beta program design + execution (1-2 months free, polish before paid launch)mvpMsonnetother
3356Status & maintenance surface (EPIC)mvpXLsonnetother
335656c — Synthetic checks + alerting + incident emailmvpMsonnetinfra
34340materials INT→TEXT PK migration (mat_<slug>)infraMsonnetschema
34341R2 media key ↔ entity ID divergence (accept + entity-agnostic GC)infraSsonnetinfra
39105PWA native UX patterns (push, ⌘K search, FAB empezar sesión)mvpLmixedpwa, global UI
39461Lint to zero (1/4): no-unused-vars + stale disable directivesinfraSsonnetinfra
39462Lint to zero (2/4): label-has-associated-control (92 form labels)mvpMsonnetadmin
39463Lint to zero (3/4): control-has-associated-label (186 — triage first)mvpLmixedother
39464Lint to zero (4/4): the 22 interaction findings + close the ratchet at 0mvpMopusplayer
40115Journal write surface (member-facing entry creation UI)mvpMmixeddashboard
59160Remove eslint-plugin-jsx-a11y ESLint-10 peer override (upstream-gated)infraXSsonnetother
60161Back Office admin design-token restyle (retire dark-SaaS chrome)polishSsonnetother
61162Harden the migration-validation CI job (close the latent-baseline gap)infraSsonnetother
5151b — Catalog mutation audit loggingpost-mvpMsonnetother
54Multi-currency + multi-region pricing strategy (LATAM + EU)mvpMsonnetother
168Account recovery: email-switch action + new-device sign-in alertmvpMmixedauth
170Social login: Google + Apple (activate the dormant OAuth buttons)mvpMmixedauth
196Per-product Bitácora + Diario (“Tu seguimiento” in module detail)mvpMmixeddashboard
206Retention: action-event emission (T57 slice C)mvpMmixedanalytics
207Retention: moment-driven celebratory cadence (T57 slice D)mvpMmixedemail
208Retention: in-app surfaces (T57 slice E)mvpMmixeddashboard
272Remove orphaned .tfc-onb-calc-* / .tfc-onb-grid-pattern CSS rulespolishXSsonnetdesign-system
273Reconcile the .btn-gradient base atom with the handoff cta.css SSOTpolishMsonnetdesign
277Wire real billing/entitlements to the profile Subscription UImvpLmixedbilling
282Leads growth insights (cross-leads analytics)mvpMsonnetadmin, analytics
288English translation quality sweep (detect ES-in-EN + translate)mvp,Lmixedcontent-migration
318Separate the journaling consent from the onboarding consentmvpMopuscompliance
322BO email event analytics (delivered/opened/clicked/bounced) + privacy updatepost-mvpLmixedemail
323BO drip-sequence controls (enable/disable + cadence)mvpMmixedemail, back-office
328BO broadcast body: safe Markdown renderingpost-mvpSmixedemail
336Dynamic Facebook reviews in Home’s GEO Review schemapost-mvpLmixedinfra
339Prep-exercise detail sheet: video + why-it-was-added + dosing, with start-session CTAmvpMmixeddashboard
346PDF reading-time from auto word count (pdf.js extraction) — dep-bump child of T325mvpSsonnetadmin
357fix: smoke E2E navigates the branch-alias CF Pages URL, which can serve a stale deploymentinfraSsonnetinfra
359BO leads list: filter by tagpost-mvpSsonnetadmin
362dep-bump: React Router 7 → 8 (closes GHSA-qwww-vcr4-c8h2)infraLopusinfra
363Membership seniority tiers + phase milestones (recognition, not a losable ladder)post-mvpLopusaccount
367fix: the AI review’s incremental diff re-reviews main after a base mergeinfraXSsonnetinfra
369fix: the catalog snapshot’s conflict target misses a composite UNIQUE, so db:seed dies on any machine that has oneinfraSsonnetinfra
385Ambassador BO oversight: visibility, leak alerts, code revocationmvpLmixedadmin
388Re-tag legacy session blocks to the resolved product-modality (T358 data follow-up)infra,Ssonnetschema
391Extract the shared private-loader preambleinfraMsonnetinfra
392Deploy the PR preview from CI with wrangler, not the Cloudflare builderinfraMmixedinfra
393Native chrome in standalone + install invitation on the Dashboardmvp,Mmixeddashboard, design
408BO content sync: real coverage, one table list, and per-group scopeinfraLmixedadmin
412Image and video in testimonialsmvpLmixedother
417The Privacy Policy publishes four retention deadlines that nothing enforcesinfraMopusinfra
419Instagram + Facebook Messenger inbound on the shared AI assistantmvpMmixedother
443One name per phase, across every surface a member can seepolishMopuscontent-migration
446knip’s allowlist has become the place where dead code hidesinfraMsonnetinfra
492Surface the descent signalmvpSsonnetadmin
493Engine-input answers stay changeable after onboardingmvpMopusonboarding
494The onboarding stage gets its delivered media, plus the surface’s hygiene sweeppolishSsonnetonboarding

Beta Launch (deadline: 2026-09-01) — 13 tickets · 67 pts

#TicketTítuloTrackEffortModelDomain
4462Cross-channel content production workflow (Instagram + YouTube + blog + newsletter)mvpLmixedother
4525Support form backend (tickets + auto-reply)mvpMsonnetother
50181Ritual Core: sales page Hito 3 (máxima conversión)mvpLmixedother
53Magazine editorial policy + GEO playbook (the rules the publish gate enforces)mvpMmixedcompliance
279Magazine: the public surface /es/magazine · /en/magazine from the definitive designmvpLopusdesign
280Prensa /prensa · /press: public press surface (net-new)post-mvpMsonnetdesign
394Pricing SSOT + machine-readable Offer schema on the public sales surfacemvpMmixedbilling, infra
396Knowledge catalog: commercial terms + how progression actually works on /faqmvp,Mopuscontent-migration, compliance
458Magazine content schema in D1 (posts + per-locale translations + authors + media)mvpLsonnetschema
459Back Office: magazine CMS (/admin/magazine) — block composer, state machine, EN pipelinemvpLsonnetadmin
460Rename sweep: everything called “blog” becomes “magazine”mvpSsonnetother
465Magazine audio: TTS at publish, real recordings, and the listen surfacepost-mvpLmixedother
470The maternity coupon in the postpartum notice, and the settings the sends deservemvpMsonnetemail

Producción (deadline: 2026-12-01) — 19 tickets · 73 pts

#TicketTítuloTrackEffortModelDomain
4620Stripe checkout + custom page + webhooksmvpLmixedschema
4822Gifting / gift_vouchersmvpMsonnetschema
5134BO admin: Stripe customer + purchases panelpost-mvp??admin
5239Funnel analytics + event trackingmvpMsonnetother
5419Multi-ritual weekly distribution algorithmpost-mvp??dashboard
5564Friction stacks: comprimir loop de producción IG de 15 a 5 pasosinfraMmixedother
57213Meta CAPI: deduplicated Purchase from app checkout (pixel + server)mvpLmixedanalytics
167Apply edge WAF rate-limit rule on domain migrationmvpXSmixedinfra
192Custom domain cutoverinfraSsonnetinfra
209Retention: Back Office dashboard (T57 slice F)mvpLmixedadmin
395Agent-readable catalog endpoint + agentic-commerce readinesspost-mvp,Lmixedinfra, billing
397Full specs-vs-code audit (Fable session)infraLopusother
398File-size gate (diff-only pre-commit + full-repo trend)infraSsonnetinfra
399Decompose dashboard.server.ts (behavior-preserving)infraLopusdashboard
400Knip allowlist mass-expiry cleanup (395 entries)infraMsonnetinfra
401Focus indicator for .af-link anchorspolishXSsonnetdesign
402fix: autonomy-health reports “salud OK” when jq is missinginfraXSsonnetinfra
421fix: audit-skills.sh trusts file order for “last used”, so a merge can fake a STALE verdictinfraXSsonnetinfra
444The withdrawal-waiver checkbox, and the refund window each product actually getsmvpMopuscompliance

Deferred — 22 tickets · 53 pts

#TicketTítuloTrackEffortModelDomain
03Member routes: loading skeletons + i18n cleanuppolish??dashboard
15Admin detach + purge safe flow (product deletion)post-mvp??admin
18Admin routes: tripartite convention + scaffold (strangler, not big-bang)infraXS?admin
111Skill tfc-ai-pulse: structured quarterly AI tooling review (parked)infraSopusother (meta — Claude Code skill / dev tooling)
112Migración a GitHub Organization con plan Team para branch protection enforcement (parked)infraMopusother (infra / devops — repo administration)
126D1 per-PR branching (PARKED — deferred follow-up)infraMopusinfra
127OpenTelemetry distributed tracing (PARKED — deferred follow-up)infraMopusinfra
156Eval harness: wire the live agent-runner seaminfraMopusinfra
164In-app notifications: header badge + center (consumes T98 slot)mvpMmixedglobal UI
189Adversarial E2E subagent (tfc-adversarial-e2e)infraSopusinfra
255Unify the admin-BO design carve-out into a single shared sourceinfraSsonnetinfra
259Fix horizontal overflow on /admin/assets (mobile)polishSsonnetinfra
308infraSsonnetinfra
309infraSsonnetinfra
310Modal .tm-* token-tier visual adoption (surface ticket)polishMmixedother
316polish: SessionHero modality switcher — distinct keyboard focus ring on optionspolishXSsonnetdashboard
326Upgrade to Workers Paid: restore cron capacity (post-beta, revenue-gated)post-mvpSsonnetinfra
372dep-bump: jsdom 29 → 30 (fix SessionHero DOM-test breakage first)infraSsonnetinfra
375Audit-log atomicity: batch every BO audit event with the mutation it describesinfraLsonnetadmin
442Scope the precache: 686 kB on the first visitpolishSsonnetinfra
449Receiving photos and videos on WhatsApppost-mvpLopuscompliance
456PR Autopilot pays the full visual-invariants sweep on every intermediate round, not just the final oneinfraMsonnetinfra

Sin hito — 1 tickets · 3 pts

#TicketTítuloTrackEffortModelDomain
306---untagged?opus-

Deferred (migrates to Beta when ADR-0005 lands) — 1 tickets · 8 pts

#TicketTítuloTrackEffortModelDomain
130Brand / product vocabulary SSOT (with mandatory ADR-0005 investigation)infraLopuscontent-migration

Done reciente

TicketTítuloCerrado
472Engine grid legibility + the onboarding wizard stops hiding answered questions. It.1: wks · min/wk sub-headers per phase column, the Group saturation law stated where it is read, and a real engines-edit guide whose 7 anchors resolve (the route had been loading the PHASE editor’s guide — help that lied). Zero behaviour change. It.2 (founder-widened mid-flight): the wizard read only unanswered questions and dropped emptied steps — her age was unreachable; new getProductQuestionsWithAnswers, prefilled view, widened action whitelist, entry gate byte-identical. Rubric failed it.2 on a real defect (orphan heading on settled composites, visible in her own screenshot) → fixed test-first → re-review pass. Two RED→GREEN pairs by tfc-regression-test-writer; theater 33/33 (27 agent + F1–F6 founder browser, «se ve ahora bien»); AI review 4 rounds, Step 8 satisfied on pair r3→r4 (determination in ## Pre-QA gate notes); Effort re-sized S→M at close (the widening). R-T472-1..13 binding. Spawned T493 + T494 from its QA findings; the 472→492 renumbering of the descent spec rode the close. PR #1181.2026-08-12
432Member-facing phase descent + free movement within earned phases. The 30-day lock deleted (it gated descending AGAIN, not ascending, and the T333 gate already made oscillation unprofitable); highest_phase_earned high-water mark on evaluation_status (never decreases, R-T432-3); phase_resume_state restores the loop pointer on return (Q2: week counters stay with the calendar week); “Tu fase” panel in the profile, earned phases only; every member move writes a member.phase.move audit row (Q3 → T492). Design rubric fail→fail→pass it.3; found+fixed en route: seeds writing the dropped column, a 1-in-16 sha-collision flake in the AI-review cost test, and the F1 comment sweep (0054-0056 broke fresh-clone local migrate). B1-B6 browser pass deferred at close (founder decision, T366 precedent). PR #1175.2026-08-12
490fix: la guía de embarazo no tenía fila en el catálogo, así que el envío prometido no podía dispararse nunca. guia-embarazo no existía ni en la semilla ni en producción, y el fallo era mudo: resolveGuideAssets devuelve null, el barrido salta, y se ve igual que «aún no he subido el PDF». Siembra la fila con el Vol. 00 real en ES y EN, coming_soon + listed:false, con el pdfKey pre-rellenado a la clave que acuña el propio BO. Slug fijado por test contra PREGNANCY_GUIDE_SLUG. Al escribir ese test saltó una aserción vecina que codificaba «unlisted == bonus-*»: ampliada por mecanismo de entrega, no borrada. La fila de producción no la crea la semilla — el runbook va en la spec. Renumerado 471→472→477→490 por TRES colisiones el mismo día.2026-08-12
491El encuadre de la guía: veredicto, catálogo aplicado, PDF pendiente. El AI review preguntó si «rutinas para las molestias» cruzaba el RD 1907/1996. Verificado: el encuadre era del PDF de la fundadora, no del agente. Pase con thefittclub-eu-compliance-advisorCAUTION, no BLOCKER (sin verbo prohibido, sin condición nombrada, sin promesa de prevención, y la ficha 09 dice «cuando el dolor baja por la pierna» en vez de nombrar la ciática). La zona gris era una preposición. La fundadora aportó la mitigación que el marco pide —suelen funcionar pero no siempre, y solo incomodidades no graves— y reescribió el copy; aplicado ES+EN. Registrado que tfc-brand-vocab-lint pasó en verde y eso no era prueba de nada: mira vocabulario, no encuadre. Cierra con el PDF sin actualizar y lo dice: el brief para portada y antetítulo vive en la spec.2026-08-12
471fix: persistEngine is atomic on D1 — rule ids assigned up front and the whole engine rewrite (update + deletes + inserts) rides one db.batch([...]), so a mid-save failure leaves the previous definition fully intact instead of a half-written engine served live (T429). createProxyTestDb gains the batch BEGIN/ROLLBACK mirror + onStatement injection seam. Test-first: RED 6f47215 (23 → 3 rules) → GREEN f6a9783. PR #1172 · R-T471-1..3 binding · theater closed-passed · surfaced by the T469 session’s review post-close of T4302026-08-12

Para histórico completo (incluye tickets pre-redesign sin fecha): _docs/03-tickets/00-board.md en el repo.


Cómo leer este tablero

  • Active = lo que estoy construyendo ahora. Cada ticket tiene una rama abierta.
  • QA = implementación terminada y commiteada, theater en ejecución (_docs/06-prompts/03-qa-ticket.md).
  • Pending = ideas con spec escrito que aún no pueden tocarse sin “go” explícito.
  • Done = mergeado a main. El spec está bloqueado en 04-done/ con su ## Regression contract.
  • Hito indica el milestone objetivo: Junio (lead magnets + legacy) · Beta (polish) · Beta Launch (Cápsula Cero) · Producción (Stripe).
  • Track clasifica el ticket — ver tabla ## Tracks más abajo para descripción de cada uno y si cuenta o no al % MVP.
  • Effort (T-shirt) estima horas de Claude Code: XS<1h (0.5pts) · S<4h (1pt) · M=4-12h (3pts) · L=12-30h (8pts) · XL=30h+ (20pts). Weighted % usa estos puntos.
  • Model indica el LLM recomendado para implementar: sonnet (mecánico, sigue spec), opus (síntesis arquitectural / branding), mixed (cada fase su modelo).

Tracks

Cada ticket lleva un Track: en el header de su spec. Define la naturaleza del trabajo y si cuenta al % de progreso del Hito.

TrackDescripción¿Cuenta al % MVP?
mvpFuncionalidad core para lanzamiento (rutas, dominio, UI de producto, autenticación, contenido del MVP).✅ sí
infraPlataforma, CI, pipelines, harness, observabilidad, hooks. Habilita ritmo seguro.✅ sí
post-mvpDiferido a Beta o post-launch. No bloquea el lanzamiento del Hito Junio.❌ no
polishMejoras de pulido (DX, refactor incremental, microcopy) sin cambio de contrato.❌ no
content-migrationMigración / consolidación de contenido (Ritual Core Legacy → MVP, copy bilingüe).❌ no — el contenido cuenta caso por caso, no globalmente

Para detalle técnico de cualquier ticket, abrir el spec en el repo: ~/Desktop/TFC/thefittclub/_docs/03-tickets/<carpeta>/<NN>-<slug>.md

Para detalle de cualquier métrica, abrir la fuente correspondiente en ~/Desktop/TFC/thefittclub/_docs/01-core/.


Auto-generado por scripts/maintenance/generate-vault-dashboard.mjs. Última corrida local/CI: 2026-08-13.