# 00 — TOC + TRACKER: All Remaining Work (Fable 5 × Opus 4.8)

**Created:** 2026-07-17 by Claude Fable 5, at James's request. **Last updated:** 2026-09-24 22:50 (**P28 design wave 1: ten file-owned agents in one evening. Browse is a timetable, /story uses a desktop, /sell and /pro show the real card and the four-item ฿499 truth, the card plate prints its AI label, onboarding walls + /me dashboard, Kathy prompt v2 + tool truth + the per-provider system hook, an adversarial battery runner, a deploy pipeline (cached install, skippable type check, standalone behind a flag, detached deploy), a production critic baseline; follow-ups P29 to P43**; spec §9.70; NOT verified: signed-in onboarding pixels, the Docker build, the standalone runtime, the battery baseline is partial). Prior: 2026-09-19 23:00 (**P27 review round 4: /story reads like a page someone wrote — no dashes, American English, the hero rebuilt, the dead request button removed, an italic Kathy, a footnote asterisk, hello@frenday.xyz on the last screen**; §9.68 "review round 4"). Prior: 2026-09-19 21:35 (**P27 review round 3 + the permanent editorial rules: James's own /story text; singular they, Customer/Companion, hours 06:00–24:00 in copy and in code, the agent named from one constant, "daytime" gone**; §9.68–§9.69). Prior: 2026-09-19 19:25 (**P27 review round 2: /story + /our-story scroll like a normal page; the card screen is now a companion page**; §9.68). Prior: 2026-09-19 16:55 (**P27: the third door — `/story` + `/our-story`, English-primary, founder screen a self-hiding placeholder**; §9.68). Prior: 2026-09-18 12:20 (**P26: the eight demo companions have AI-made, labelled portraits on /browse and their pages**; §9.67). Prior: 2026-09-18 (**P25: Frenday — the name, the host, the model**; §9.66). Prior: 2026-09-18 00:35 (**P24: the one link change — rename with a 90-day forward + owner UI; the Pro promise is now true**; §9.64). Prior: 2026-09-18 00:10 (**P23: sales wave — /sell, /pro, factory.html, launch pack, funnel fixes**; §9.63). Same night: (**P22: Wave 4 — browse cards + Pro placement, video kit, slip pre-read, nudges, perf, Clerk webhook, backups, DB budget; next-sprint menu written**; §9.61–§9.62). Prior same day: P19–P21 (the USABLE-MVP sprint, §9.58–§9.60; everything public). Prior: 2026-09-10 (**PAIDUAY thread opened (P-series, §5b)** — James set the north star to commercial value / first revenue and chose the Thai friend-for-hire market; chunk 1 = a design-led bilingual platform (provider profile pages + directory + per-provider AI receptionist + share poster + provider portal), built by an Opus/Fable agent fleet, deployed privately first. Prior: 2026-08-19 (**O12 DEPLOYED — the whole fleet runs in production on James's Germany VPS** (spec §9.48; 127.0.0.1-only, ingress step pending James's domain+CF token; live Thai chat verified on the box). Prior same day: **O24 booking dedupe guard BUILT + live-proven** — the §9.42 double-booking is closed; consequence battery 48/48, 0 exemptions left in any fixture; spec §9.47. Same day: **O22 DONE — `next build` works for all 4 apps and type-checks again** (Next `^16.3.1` + `experimental.useTypeScriptCli`, spec §9.46); deploy now waits only on VPS creds; new row **O27** = composer mints don't build (pre-existing, surfaced by O22). Prior same day: **T3 trust harness v0 BUILT + live-proven** — Opus pilot + Fable closeout mid-Anthropic-incident; 138/141 claims held, TC10 caught twice, O24 unblocked, ⚑ TC1-arithmetic question for James in §9.45. API credits RESTORED 2026-08-18. Prior: 2026-08-18 Fable session: **TRUST thread (T-series) opened** — James confirmed the "trustworthy conversation" thesis; doctrine v1 written (`docs/foundation/03`), trust-harness work order (sheet 19), side-by-side demo spec (`docs/sales/40`), pre-flight checklist (`docs/sales/50`), portfolio survey persisted (`docs/portfolio/`). New: F14, O26, T1–T9. **James's posture: NO outreach timeline — keep R1/sales warm via `docs/sales/50`, never push.** Bridge: `.tmp-factory-trust-thread-handover.md`. Prior: 2026-08-06 AFK fleet session).
**What this file is:** the single menu + status board of ALL remaining work, across every thread (factory, Cameo/marketplace, SMB catalog, backlog, website). James orders from it like a menu, in any fresh session, with any model: *"read `00_TOC_TRACKER_REMAINING_WORK_OPUS_FABLE.md`, do F4 and F10"* — that must always be enough to start.

**This file is BOTH the table of contents AND the tracker.** Whoever works a task MUST update this file as part of the work: flip the status when starting (🔄 + date), flip it when done (✅ + date + one-line evidence pointer), add newly-created tasks to the menu, and keep §1's TLDR tables in sync with §3–§5. A stale tracker is a bug — treat updating it like updating spec §9.

**Status legend:** ☐ ready · 🔒 blocked (on what) · 🔄 in progress (date) · ✅ done (date) · 💤 optionality (specced; build only when a demo/customer/James pulls it — the queue is optionality, not a to-do list).

---

## 0. ⚡ Session TLDR — latest work, what's left, recommendation (2026-08-06, Fable session while James was AFK)

*A plain-language catch-up for James. For ordering, use §1. Previous session TLDRs: git history of this file.*

**🚨 THE ONE BLOCKER ONLY YOU CAN FIX: the Anthropic API credit balance is EXHAUSTED** ("credit balance is too low", hit mid-session). Every live AI reply in every demo now returns the friendly 503. Nothing AI-live (demos, chat verification) works until you top up at console.anthropic.com → Plans & Billing. Everything below was captured/verified before it died or doesn't need the model.

**What this session produced (5 parallel agents + Fable orchestrating):**
1. **S5 is DONE — you now have a sendable sales asset:** `docs/sales/kit/17-product-tour.html`, a self-contained bilingual (TH/EN) interactive tour: the REAL captured clinic conversation replayed message-by-message (price quote → discount refusal → diagnosis refusal → after-hours refusal → booking, timestamps 02:3x AM), then real back-office screenshots (overnight queue → one-tap confirm → auto-drafted ฿6,900 invoice → customer record → re-skin proof). 1.7 MB single file, works offline, send it over LINE/email today. Raw proofs: `docs/sales/assets/` (12 screenshots + 3 verbatim transcripts).
2. **O13 BUILT (§9.40): conversations inbox + human takeover** — /admin/inbox in demo AND clinic-demo; take-over/reply/hand-back; replying auto-pauses the AI; customer sees staff replies attributed by name. The sales-kit claim the critic had to strip ("hands to your staff") is now TRUE — and takeover works even with zero API credits.
3. **O16 BUILT (§9.41): embeddable chat widget** — paste one script tag on any clinic website → branded launcher + chat panel over the real API (rate-limited, Shadow-DOM isolated, phone = full-screen sheet). Live-verified from a genuinely third-party origin, 22/22 checks.
4. **O21 BUILT (§9.39): parallel test gates are now safe** (per-checkout fixture prefixes; the collision was reproduced on demand and cured).
5. **Fresh research packs:** `docs/sales/research/05` (business refresh — see ⚑ below) + `06` (Thailand payment rails + LINE API facts for the billing design).
6. **Three real bugs found by driving the product and FIXED (§9.42):** clinic-demo login was impossible on :3300 (Better-Auth origin — you'd have hit this the night before a demo), `seed-demo-data --fresh` wipe never worked (append-only crm_notes), and the S3 template's transition script tenant hazard was avoided. Root gate green (typecheck 15/15, tests 10/10 packages); all work merged as revertable `--no-ff` merges.

**⚑ Research findings that affect your defaults (details in research/05):** (a) **EMRPad** advertises AI-LINE-answering + full clinic EMR at ฿2,990+฿990/mo — unproven newcomer, but the "AI answers your LINE" *opener* is no longer unique; differentiate on **refusals + the closed loop + real handoff (O13!)**. (b) **200% SME tax deduction** (RD 802/2026) applies to our fees — but only if you register on **depa's Thailand Digital Catalog** (→ new task S8, highest-ROI paperwork you can do). (c) FoxConnect published ฿690–2,990 pricing; the real floor is lower than research/02 said. (d) New quotable enforcement stats (54% of clinic ads illegal) strengthen the compliance wedge.

**My recommendation, in order:**
1. **Top up API credits** (5 min) — everything live depends on it.
2. **Open `docs/sales/kit/17-product-tour.html` on your phone** (2 min). If you like it, it goes out with your first outreach messages this week — outreach needs zero deployment.
3. **Read `docs/sales/30-veto-surface.md` + research/05's invalidation section** (10 min), then start outreach per kit/15–16.
4. When you have something: VPS creds (O12) + LINE dev account (O15) remain the two unlocks for a real pilot. ~~O22 (next-build fix) sits in front of deploy~~ — **done 2026-08-19 (§9.46); `next build` works for all four apps, so deploy is now waiting on your VPS credentials and nothing else.**

---

## 1. TLDR — read only this section to order

### Where we are (2026-08-06)

Factory kernel: complete incl. identity + public sockets + **conversation takeover (§9.40)**. Modules: scheduling, sales-documents, catalog, contacts-crm, tasks-workflow, payments, documents-files, marketplace-listings, marketplace-orders (+bridges, spend guards). Full Cameo arc live-verified (§9.36, awaiting James's review). **Sales thread S1–S7 ALL DONE** — research packs (01–06), defaults, clinic demo, design pass, proof capture + sendable tour (kit/17), paper kit, outreach library + prospect list. **O13 inbox+takeover and O16 embeddable widget BUILT (§9.40/§9.41)**; parallel gates safe (§9.39). ~~Nothing is deployed anywhere~~ → **DEPLOYED 2026-08-19 (O12, §9.48): all 4 apps live on the Germany VPS.** ~~API credits exhausted~~ → **RESTORED 2026-08-18.** ~~`next build` broken repo-wide~~ → **FIXED 2026-08-19 (O22, §9.46): all 4 apps build, and the build type-checks again; `next start` serves. The only thing still standing between the repo and a server is O12's VPS credentials.** Full evidence: spec §9 + `git log`.

### The menu at a glance

**FABLE menu (design/frontier work — do while Fable access lasts):**

| ID | Item | Status | Notes |
|---|---|---|---|
| F1 | Billing & entitlements contract (D12) | ✅ 2026-08-06 | spec §9.43 + sheet `modules/18-billing.md`; build = new O25, gated on 2 James calls (Opn DD question, VAT presentation — veto surface §D2) |
| F2 | Composer archetype layer design | ☐ | "Factory mints internet businesses" generalization |
| F3 | Upgrade/regeneration policy design | ☐ | How 15 client apps absorb a kernel fix |
| F4 | Availability/calendar design | ☐ | The deferred SMB hard problem |
| F5 | Gap-12 create/edit-form scaffold design | ☐ | Unblocks every "operator creates X" narrative |
| F6 | Reporting-copilot design | ☐ | Makes sheet 12 Opus-ready; marquee demo feature |
| F7 | Outbox (post-commit events) design | ☐ | Contract change; prerequisite for real notifications |
| F8 | Notifications routing design | ☐ | After F7 |
| F9 | Storefront/e-commerce archetype sheets | ☐ | Cart/checkout (guest grants = guest checkout), orders, fulfillment |
| F10 | Content/membership archetype sheets | ☐ | Posts/publish lifecycle + memberships (needs F1) |
| F11 | Bulk thin orders: vertical packs + ops runbooks | ☐ | Cheap volume for Opus |
| F12 | Cameo mint (O4) done BY Fable | ✅ 2026-07-18 | Done as O4 by Opus (spec §9.36); a Fable design/polish pass is the natural follow-up |
| F13 | Website copy revision to the a16z bar | ☐ | After James reads v1 (W1) |
| F14 | Mobile seam design (token auth + typed API + push + presigned upload) | ☐ | prerequisite for O26 + owner app; portfolio mobile lessons in `docs/portfolio/` |

**OPUS menu (build work — all have complete written orders):**

| ID | Item | Status | Blocked on / after |
|---|---|---|---|
| O1 | documents-files module (video/S3) | ✅ 2026-07-18 | BUILT on MinIO; spec §9.33; 6 tests + live-verified S3 path |
| O2 | marketplace-listings module | ✅ 2026-07-18 | BUILT; spec §9.34; 8 tests (real DB); mkt_listings migrated |
| O3 | marketplace-orders + settlement bridge | ✅ 2026-07-18 | BUILT; spec §9.35; 6 tests (real DB); video_request machine + guest/portal + payment/payout bridge |
| O4 | Cameo MVP mint (`apps/cameo-demo`) | ✅ 2026-07-18 | BUILT + live-verified on MinIO; spec §9.36. Functional slice — awaiting James's review (design/admin/sample-upload deferred, see §9.36) |
| O5 | inventory-lite | 💤 | — |
| O6 | messaging-campaigns | 💤 | middleware gap may pull a small design |
| O7 | staff-rota | 💤 | — |
| O8 | forms-intake | 💤 | — |
| O9 | loyalty-membership | 💤 | better after F1 |
| O10 | expenses-lite | 💤 | — |
| O11 | reviews-feedback | 💤 | — |
| O12 | Deploy + ingress (Germany VPS, `6326638.xyz`) | ✅ 2026-08-19 COMPLETE | spec §9.48 + §9.49; `deploy/` in repo; all 4 apps + the hub live at `https://*.6326638.xyz` (tailnet-gated — public flip = 1 DNS change + ufw 443, do after O23); Caddy DNS-01 certs; live Thai chat verified through the public domain; nightly pg_dump cron |
| O13 | Conversations inbox + human takeover | ✅ 2026-08-06 | spec §9.40; merged `95d290b`; in demo + clinic-demo; live-verified incl. zero-ai_usage while paused |
| O14 | Operator notifications v0 | ☐ | simple v0 possible now; proper version after F7+F8 |
| O15 | LINE channel adapter | 🔒 | James: LINE dev account |
| O16 | Embeddable chat widget | ✅ 2026-08-06 | spec §9.41; merged `178152a`; 22/22 third-party-origin checks; NOT yet ported to clinic-demo (~7 files, short session) |
| O17 | pgvector activation | ☐ | — |
| O18 | Langfuse tracer impl | 💤 | — |
| O19 | i18n pass on shell | 💤 | — |
| O20 | Shell per-transition RBAC | ☐ | small; good filler |
| O21 | Per-checkout test-fixture prefixes | ✅ 2026-08-06 | spec §9.39; merged `4bb8bba`; collision reproduced + cured live; parallel gates now safe |
| O22 | Fix `next build` (Next 16 × TS 7) — blocks deploy | ✅ 2026-08-19 | spec §9.46; pilot report `pilots/2026-08-19-o22-next-build.md`; branch `pilot/o22-next-build`. **Real fix, not `ignoreBuildErrors`**: Next `^16.3.1` + `experimental.useTypeScriptCli` in all 4 apps → builds type-check again (tsgo). `ignoreBuildErrors` was tested and is a laptop-only fix — under `CI=true` that build still exits 1 silently. Deploy (O12) unblocked |
| O23 | Harden `GET /api/chat` (per-IP bucket or HMAC'd conversation id) | ☐ | §9.41 known limit; do before first real client ships the widget |
| O24 | Booking dedupe guard (double-book on confirm-after-booked) | ✅ 2026-08-19 | spec §9.47; branch `pilot/o24-booking-dedupe`; pilot report `pilots/2026-08-19-o24-booking-dedupe.md`. Module-only (`scheduled-interactions/src/dedupe.ts`), no kernel change, no DDL. **Live: consequence 48/48 held, 0 failed, 0 exemptions** (was 2 expected fails) + beats 29/29 unchanged; reports `docs/trust-reports/trust-report-2026-08-19-4.md` / `-2.md`. Both `expectFail` blocks deleted; `fixtures.test.ts` asserts the inverse. New boundary fixture `tc10-two-services` (guard must not eat a real booking). ⚑ harness gap left open: no check asserts a MINIMUM record count |
| O25 | billing module build (sheet 18) + `apps/ops` mint | 🔒 | after James: Opn DD answer + VAT presentation default (spec §9.43 ⚑) |
| O26 | Expo talent app scaffold (Cameo supply side — James's project) | ☐ | after F14; James "ready today" but NOT urgent (his 2026-08-18 words); Expo lessons: `docs/portfolio/briefings/06` §5 |
| O27 | Composer mints don't build (page pruning + factory-module codegen) | ☐ | found by O22 (spec §9.46, `handoff/20` §7 item 17). A fresh `factory:create-app` fails `next build`: partial module set → dangling imports from demo's module-specific admin pages; full set → generated `lib/kernel.ts` calls factory modules as plain exports. Pre-existing, invisible until builds started type-checking. Needs a design call (which pages belong to which module), then codegen |

**SALES thread (S-series, opened 2026-07-30 — goal: everything needed for the FIRST SALE; state + defaults: `docs/sales/00-sales-thread-state.md`):**

| ID | Item | Status | Notes |
|---|---|---|---|
| S1 | Market research pack (competitors, pricing, vertical, stats) | ✅ 2026-07-30 | `docs/sales/research/01–04` — sourced, Thai+EN |
| S2 | First-sale defaults sheet (vertical=aesthetic clinics BKK, ฿25k setup + ฿2,990/฿4,990 monthly, ฿9,900 pilot, positioning) | ✅ 2026-07-30 | `docs/sales/00-sales-thread-state.md` — James vetoes if he wants |
| S3 | Clinic vertical demo mint (`apps/clinic-demo`, Thai seed, THB) | ✅ 2026-07-30 | MINTED + all 7 sales beats live-verified on :3300 (spec §9.38); Sirin Clinic, 12-item THB menu, refusal rails, lived-in admin seed |
| S4 | Product design pass (chat + admin today-dashboard, mobile-first) | ✅ 2026-07-30 | spec §9.37: derived brand tonal family (color-mix) + serif display + phone-first admin (card lists, pill nav, Today band); live-verified on :3100 + 375px/1440px screenshots; typecheck green, root test gate runs with the orchestrator; changes uncommitted in working tree |
| S5 | Proof capture + sendable interactive product tour | ✅ 2026-08-06 | `kit/17-product-tour.html` (send it as-is) + `assets/` 12 shots + 3 transcripts; spec §9.42. Screen recording NOT done (credits died) — the tour itself is the offline fallback |
| S8 | Register on depa Thailand Digital Catalog (→ clients get 200% tax deduction on our fees) | 🔒 | James: research/05 §3 — RD 802/2026; arguably the highest-ROI paperwork available |
| S6 | Paper kit: one-pager TH/EN, pilot offer, demo script, objection playbook, partner-pitch v2 | ✅ 2026-07-30 | `docs/sales/kit/10–14` written + critic pass consolidated in `docs/sales/30-veto-surface.md` |
| S7 | Outreach library TH/EN + BKK clinic prospect list | ✅ 2026-07-30 | `docs/sales/kit/15–16` written (prospect rows = verify-before-contact); critic notes in veto surface §D |

**TRUST thread (T-series, opened 2026-08-18 — James-confirmed thesis: trustworthy conversation / ground truth. Doctrine: `docs/foundation/03-doctrine-trustworthy-conversation.md`; thread bridge: `.tmp-factory-trust-thread-handover.md`):**

| ID | Item | Status | Notes |
|---|---|---|---|
| T1 | Doctrine memo v1 (5 pillars, claims TC1–TC15, testable) | ✅ 2026-08-18 | `docs/foundation/03` — **awaiting James's edit pass (§7 veto surface in the doc)** |
| T2 | Doctrine-as-rubric (claims classed [A]/[B] + SEV ladder) | ✅ 2026-08-18 | unified into the doctrine doc §3–§4 |
| T3 | Trust harness v0 — golden-conversation replay + mechanical checks | ✅ 2026-08-19 | `packages/trust-harness`, spec §9.45, pilot report `pilots/2026-08-18-trust-harness-v0.md`; live: **138/141 held, TC10 caught twice** (proof-of-catch done → O24 unblocked); milestone report `docs/trust-reports/trust-report-2026-08-18.md`; ⚑ TC1-vs-arithmetic question for James (§9.45) |
| T4 | Trust harness v1 — runtime flags + admin Trust surface | ☐ | sheet 19 Phase v1; after T3 merges |
| T5 | Side-by-side trust demo ("same AI, without the rails") | ☐ | spec `docs/sales/40-trust-demo-spec.md`; needs credits; output kit/19 |
| T6 | Doctrine poster/A5 card (TH, uses the anesth-repo type system) | 💤 | after James edits T1; design session |
| T7 | Public Thai explainer «ทำไม AI ที่ดีต้องปฏิเสธ» | 💤 | Songkran-register; doctor-buyer credibility artifact |
| T8 | Refusal reel (curated real transcripts as evidence) | 💤 | cheap after T3 batteries exist |
| T9 | Apply doctrine language to kit/website (incl. O13/O16 claims → kit texts) | 🔒 | James: edit pass on T1 first; touches veto surface §D2.17–18 |

**WEBSITE thread (separate track):**

| ID | Item | Status | Blocked on |
|---|---|---|---|
| W1 | James reads content v1 against the a16z test | 🔒 | James |
| W2 | Screenshot/recording capture (+ THB currency decision first) | 🔒 | James: THB decision |
| W3 | Design/visual session | 🔒 | after W1 |
| W4 | Static site build + deploy to thonglor.my | ☐ | after W2/W3 (24h-readiness path) |

**PAIDUAY thread (P-series, opened 2026-09-10 — James's north star: commercial value / first revenue ASAP. Market: Thai "friend for hire" daytime companionship. James: great visual/typography is the most important aspect; bilingual TH/EN out of the box; Fastwork is the incumbent. Detail: §5b. Name "Paiduay (ไปด้วย)" is temporary.)**

| ID | Item | Status | Notes |
|---|---|---|---|
| P1 | Mint `apps/paiduay` (:3400) — plumbing, TH/EN i18n, seed, conversation-scoping convention | ✅ 2026-09-10 | commit `f370552`; O27 hand-fixes in spec §9.51 |
| P2 | Design system + static mockups (Thai+Latin type, poster as the brand element) | ✅ 2026-09-10 | `apps/paiduay-design/` (Pridi+Anuphan, pine/jade/sun, daylight band); ported in `f81dc95` |
| P3 | Bilingual content: 8 fictional providers, all UI copy, safety policy draft, AI persona | ✅ 2026-09-10 | merged into `apps/paiduay/content/` |
| P4 | Public pages: home, browse, provider page (request form + chat panel), policy, language toggle | ✅ 2026-09-10 | commits `f81dc95`/`52e2f3c`/`b22a302`; Apu/Maggie/Nelson/Otto |
| P5 | Share-poster generator (1080×1350 + 1080×1920) from the profile | ✅ 2026-09-10 | commit `88bbc9f`; `/p/<slug>/poster`; Satori tone-mark fix (derived fonts) |
| P6 | Provider-scoped AI receptionist (app-local module: profile tool + meetup-request tool + refusal rails) | ✅ 2026-09-10 | commit `129ac5e`; six live probes held; meetups = booking requests |
| P7 | Provider portal, phone-first: requests accept/decline, upcoming, edit profile | ✅ 2026-09-10 | commit `e1f4d17`; Marge; edit headline/bio/price (go-live stays a staff act) |
| P8 | Trust battery for this vertical (boundary / late-night / price / injection probes), run live | ✅ 2026-09-10 | commit `db57671`; 235/239 live, 4 harness false-negatives fixed → 24/24; no brain bug |
| P9 | Deploy `paiduay.6326638.xyz` + entry point + docs + memory | ✅ 2026-09-10 | LIVE, real Let's Encrypt cert; host port 3500 (3400=TuaTon); prod tenant seeded (8 companions); live chat answered from profile; entry point row 1.7; commits `4d4a236` etc. Reachable = same as the fleet (DNS→tailnet, SNI-public); the public flip stays James's call |
| P10 | Chunk 2: self-serve provider onboarding (sign-up → profile → link + poster in 10 min) | ☐ | after James's check |
| P11 | Chunk 2: PromptPay deposit + payout (payments module), reviews, verified badge | 🔒 | James: confirm revenue model (free page → paid extras → commission) |
| P12 | Chunk 3: matchmaking (customer posts a need → matched providers accept → booking) | ☐ | after P10 |
| P13 | Chunk 3: LINE notifications | 🔒 | James: LINE developer account |
| P15 | Visual/typographic polish pass "v2" — art direction, logo, brand kit, every surface | ✅ 2026-09-10 | James-ordered; 8 agents; new design system + logo + favicon (`197ed18`), brand kit (`4e11d13`, `docs/paiduay/brand/`), all pages + poster lifted (`ae32bfe`/`56874f2`/`47a1861`/`1091e5e`); AA contrast fix; spec §9.52. Pick a logomark = James |
| P16 | **Radical redesign v3** — journey + conversion + presentation, after James rejected v2 as a re-skin | ✅ 2026-09-10 | 4 competing Fable prototypes → critic (picker 89 / person 86) → synthesis built end-to-end by one journey-owner (`782c1b6`…`713e321`), `/policy` + `/join` (`c302c6c`), portal `e884639`, poster + OG `c5cefe4`, QA fixes `5ac3952` (QA `apps/paiduay/docs/prototypes/QA-v3.md` 91/100); spec §9.56; deployed to `paiduay.6326638.xyz`. **James: judge on a phone at `/p/ploy`** |
| P17 | **CARD — the base product** (about.me + linktree, better): `/c/<handle>` photo-first page + OG card, image kit (5 formats × 3 templates) + gallery, palette + backdrops, operator intake from a seller's ad image, caption/DM pack, upgrade path to the dynamic page | ✅ 2026-09-11 | James-ordered pivot 2026-09-10 23:25; brief `apps/paiduay/docs/CARD-BRIEF.md`; spec §9.57; demo `/c/mint`, `/c/first`; sign-up/claim DEFERRED (plan: `docs/paiduay/plans/claim-flow.md`) |
| P18 | **Plans shelf** — 11 decision-grade plans with Opus work orders (`docs/paiduay/plans/README.md` = the index + James's decisions) | ✅ 2026-09-11 | claim-flow, photo-pipeline, card-editor, payments, matchmaking, video-kit, notifications, trust-safety, analytics, public-flip, card-as-module |
| P19 | **USABLE-MVP Wave 1** — self-serve cards (`kernel.records` + repo), Clerk owner identity, the 3-minute editor `/c/new`, photo pipeline (sharp, volume), safety (O23 closed, truthful copy, `/report`), kernel outbox → n8n, Pro tier ฿499 (PromptPay slip, `/admin/pro`), ALL domains public | ✅ 2026-09-17 | brief `apps/paiduay/docs/MVP-BRIEF.md`; spec §9.58; James: Clerk prod instance + origin, `PAIDUAY_PROMPTPAY_ID`, cast names |
| P20 | **USABLE-MVP Wave 2** — self-serve QA round 1 + fixes (the door to `/c/new`, Paiduay-named sign-up wall, Thai-only cards, washed Pro previews, `/c/new` caps, LINE href forms), v3 quality round 2 + fixes (1440 sheet sendable, one price/button grammar), SEO minimum, receptionist safety gaps 1–6 (102/102), plans: launch runbook, analytics v1, LINE channel | ✅ 2026-09-17 | spec §9.59; `apps/paiduay/docs/QA-MVP.md`, `QA-v3-r2.md`; James: Clerk production instance, PromptPay id, cast |
| P21 | **USABLE-MVP Wave 3** — production proof 24/26 → 26/26 after fixes (auth loop, paused kit), PDPA erasure + `/admin/card` + retention purge, analytics v1 (`kernel.hits`, counted `/go` redirects, owner numbers on `/me`, `/admin/numbers`), leftovers | ✅ 2026-09-17 | spec §9.60; `apps/paiduay/docs/PROD-PROOF-2026-09-17.md`; prod migration 0005 applied |
| P22 | **USABLE-MVP Wave 4** — widget on v3, cards on `/browse` with Pro as a labelled paid placement, video kit v1 (ffmpeg, Pro-gated), slip pre-read for `/admin/pro`, `meetup.unanswered` +4 h nudge + reminder outbox row (and the reminder timezone bug), card plate `<picture>`/WebP/preload, Clerk webhook `user.deleted`, nightly uploads backup + restore runbook, DB connection budget; five plan docs (next-sprint menu, matchmaking, card-as-module, schedules seam, Clerk production runbook) | ✅ 2026-09-17 | spec §9.61–§9.62; `apps/paiduay/docs/MVP-BRIEF-WAVE4.md`; `docs/paiduay/plans/next-sprint.md` |
| P23 | **Sales wave** — `/sell` seller front door, `/pro` public one-pager (both critic-fixed, own share images), home doors, Clerk off the public card (−532 KB), share-preview fix (LINE crawler got OG tags 4/8 times), customer + seller funnel critic rounds with fixes, launch post pack, printable one-pager, seller LINE messages + operator daily loop, `factory.html` sales page on the hub | ✅ 2026-09-17/18 | spec §9.63; `docs/paiduay/launch/*`; `apps/paiduay/docs/QA-*-2026-09-17.md`, `SHARE-PREVIEW-AUDIT-2026-09-17.md` |
| P24 | **The one link change** — `renameHandle` (Pro, once; operator free), old link 301/308-forwards 90 days and stays unregistrable meanwhile, photo dir moves with the handle, owner panel in the editor (not-Pro / free / used states), tests + live proof | ✅ 2026-09-18 | spec §9.64; `apps/paiduay/docs/screenshots/mvp/s14-*.png`; closes §9.63 (j) first item |
| P25 | **Frenday** — name research (two agents) + naming shortlist (two agents); James chose เฟรนเดย์ / Frenday (may change); `frenday.xyz` live as the temporary host (old host 301s); rebrand in copy, wordmark, OG, kit, collateral (logomark unchanged); Haiku 4.5 default + adapter thinking fix; Gemini adapter + `KERNEL_PROVIDER` (dev on flash-lite, prod on Haiku); AI-gateway work orders approved and DEFERRED | ✅ 2026-09-18 | spec §9.66; `docs/foundation/work-orders/ai-gateway-cost-and-resilience.md`; memory `frenday-name-decision` |
| P26 | **Demo companions get faces** — one AI portrait per fictional companion (`public/people/*`, 4:5 WebP twins), wired into `/browse` + `/p/<slug>`, every generated plate labelled "ตัวละครสมมติ · ภาพสร้างด้วย AI" behind an AA scrim (gated on `CardPhoto.generated`), prompt pack for regeneration | ✅ 2026-09-18 | spec §9.67; prompts `docs/paiduay/content/demo-photo-prompts.md`; shots `apps/paiduay/docs/screenshots/rebrand/d1-*.png`; doctrine unchanged — a real seller's photo is her own, never generated |
| P27 | **The third door** — `/story` (screen "Toby") and `/our-story` (screen "Sam"): a one-minute vertical scroll of full-height screens for the informed outsider, no header/footer, `scroll-snap y proximity`; **English-primary on these two routes only** (`?lang=` → the toggle cookie → `Accept-Language` → English, pure + unit-tested, applied in `proxy.ts` so `<html lang>` agrees); the founder screen is a labelled Homer-Simpson placeholder that `noindex`s itself, stays out of the sitemap and is disallowed in robots — one boolean publishes it | ✅ 2026-09-19 | commit `f5707a4`; spec §9.68; copy `apps/paiduay/content/story.ts` (copy agent), page `apps/paiduay/components/story/` + `app/story`, `app/our-story`; entry point 1.7a/1.7b; shots `apps/paiduay/docs/screenshots/story/` (412×915 EN + TH, every screen, desktop, the founder placeholder); **review round 1 (2026-09-19, Pixel 7 Pro): snap removed (plain document scroll), eyebrows/numbers/lines/emoji removed, the agent named Kathy (`KATHY` constant), companion/customer terms, card-anatomy + can/cannot + money blocks + today's sign-in row visuals, reach rewritten as one call, HOW_BUILT on /our-story only — §9.68 "review round 1"; item 1 (`?s=mentor` measurement) dropped by James**; **review round 2 (2026-09-19, Pixel 7 Pro): the “snapping” was `min-height: 100dvh` surviving round 1 — every section is now plain flow with one padding rhythm (no viewport height anywhere, no snap), the card screen is redrawn from a COMPANION page (Ploy — the self-serve card it used to dissect has no Kathy and no request button, which the audit caught) as five tiles that carry their own captions, money is a light tile beside an ink ฿499 tile with the rest as quiet text, and today/founder lost their identical boxes — §9.68 “review round 2”; open for James: “receptionist/ผู้ช่วย” vs Kathy, and “card” vs companion page, both site-wide**; 477 app tests green, root typecheck green; **review round 3 (2026-09-19, James's own text): his headlines set verbatim on screens 1/3/4/5/8 and his problem paragraph on screen 2 (Thai written natively beside them), the headline cap relaxed 9 → 14 words, the money screen's "how Pro is paid" block removed and "what ฿499 does not buy" turned into a ROADMAP block ("Not in ฿499 yet — coming": signal/visibility boosting, dynamic + surge pricing, market intelligence, identity + criminal background checks), a new optional `footnote` on `StoryScreen` carrying "Dynamic pricing coming soon." (copy only — the page does not render it yet), and the sign-in row gained X + a phone handset as "next" — §9.68 "review round 3"**; **PERMANENT EDITORIAL RULES applied site-wide (§9.69, `apps/paiduay/docs/EDITORIAL-RULES.md`, enforced by `content/editorial-rules.test.ts`): singular they everywhere (never she/her/he/him, never เธอ), Customer/ลูกค้า + Companion/เพื่อนเที่ยว as the only side names, operating hours 06:00–24:00 in copy AND in code (`BAND_END` 21→24, `PLATFORM_HOURS`, the band CSS, night = 00:00–06:00), the agent named from one constant (`content/agent.ts`, no "assistant"/"receptionist"/"ผู้ช่วย" left), and "daytime" swept out of every public string (new home tagline "Company by the hour, every day, 06:00 to midnight")**; **review round 4 (2026-09-19, 20 items): NO DASH anywhere these two routes render (em/en → hyphen, test-enforced) and American English swept through the scope (rule 6); one inline markup `*…*` = italic, spent only on the agent's name in the screen-3/4 headlines (`storyPickMarked` keeps it, `storyPick` strips it for title/OG; Thai carries the same `<em>` and does not slant, because Thai has no italic) while a LONE asterisk is the footnote mark ("Lower the rate*" / "* Dynamic pricing coming soon."); **the drawn request button is gone** from the card screen — a dead control under a chat that works — and its meaning folded into the chat caption ("Where a customer asks Kathy, and sends a request", 6 callouts → 5); **the hero rebuilt** (lockup small, quiet and without its Latin caption; the headline the biggest type on the page; the sub-line lighter; the empty paper moved from under the hero to above it, so the first viewport is the hero with screen 2 peeking); caption rhythm fixed for the "Ploy is fictional…" label AND the trust footnote in one shared rule, 32px of air above the money screen's roadmap heading; copy: "but don't accept", "{kathy}, our AI language model, is bound to…", "our AI agent", "as provided", "06:00 to midnight" (no "24:00"), a fifth Kathy-can line about the **third place**, "what a customer needs to decide", "The card is free forever.", "Not in ฿499 yet but coming soon", "Live in Bangkok since September 2026." (present tense), "That's everything you need to know." + "Shall we see the real thing now?"; a story-scoped provenance label ("Ploy is fictional; the picture is AI-made", `{name}` from the record — the site keeps `v3.photoAi`); **`content/contact.ts` → `hello@frenday.xyz`** printed as a quiet mailto on the last screen (rule 7) — §9.68 "review round 4"; 485 app tests + root typecheck green, shots replaced** |
| P28 | **Design wave 1** (2026-09-24, ten parallel file-owned agents): design tokens + states + the "sun marks now" signature + brief + two UNAPPLIED mockups (D1); home/sell/pro one job one action, the real card tile as proof, the four-item ฿499 truth on `/pro` and `/sell` (D2); the AI label ON the card plate, two-column companion read from 1024px, chat sheet hardening (D3); `/browse` as a timetable (rows by next-free day on one 06 to 24 axis, sun at now; height a third), cards still below the deck per §9.62 (b) (D4); `/story` desktop treatment on one left rail, phone pixel-identical, tablet/desktop audit (R5); Kathy prompt v2 (opener first, dates from `upcoming`, five refusal patterns, em-dash guidance, no greeting before the opener) + tool truth fields + `ChatRequest.system` function hook (K6); adversarial battery runner, 54 scenarios (T7); deploy pipeline: dockerignore 966 MB to 30 MB, manifests-first install with a cache mount, `NEXT_SKIP_TYPECHECK`, standalone behind `STANDALONE=0`, detached `deploy.sh`, `push-and-deploy.sh` (P8); onboarding walls + `/me` dashboard + editor step count (O9); production critic baseline (C10) | ✅ 2026-09-24 built · 🔄 commit + first deploy by the integrator | spec §9.70; `apps/paiduay/docs/design/DESIGN-SYSTEM-2026-09-24.md`, `mockups/direction-{a,b}.html`, `CRITIC-BEFORE-2026-09-24.md`, `apps/paiduay/docs/DEPLOY-FAST.md`; agent reports session-local (`scratchpad/wave1/*.md`). **NOT verified:** signed-in onboarding pixels, the Docker build itself, the standalone runtime; battery baseline partial |
| P29 | Production 404 burst: five concurrent page loads got the bare Next 404 (65 of 66 shots at 22:02), fine one at a time; find what answers `notFound()` under burst, return 429 with a branded page, add a branded `not-found.tsx`; move `/p` not-found from v1 `Shell` to v3 `Chrome` | ☐ | C10 #1 (not reproduced by curl, cause unknown); D1 fix list |
| P30 | `/story` copy items (James's words): money screen omits "three clips"; screen 2 paragraph fails the a16z bar; roadmap (boosts, surge pricing, background checks) contradicts `/pro`; "but don't accept" grammar; "600baht an hour" | 🔒 James | D2 story mismatch; C10 #2, #3, #7; §9.70 (b) (j) |
| P31 | Two funnels described as one product: `/sell` "messages you directly, no one in between" vs `/story` "Kathy sends the request"; "book" on the card and browse tiles, "request" everywhere else | 🔒 James (sentence) then ☐ build | C10 #4, #6 |
| P32 | Kathy visible on home and `/browse` (one line in the home fold, James's wording); the home fold at night is an empty state and at 1440 the whole page is one | 🔒 James (wording) then ☐ build | C10 #5, #9; R5 audit |
| P33 | Noun cleanup: card / page / profile / directory / everyone for two things; `v3.browse.cards` "Cards" to "Companion cards"; walls say หน้า, editor says การ์ด; `copy-pro.ts` "handle" vs "link name"; consolidate `copy-sell.ts sell.pro`, `copy-pro-public.ts metaDescription` and the หนึ่ง/สอง/สาม numbering into one file | ☐ | C10 #10; D4, O9, D2 requests |
| P34 | Editorial sweep: `editorial-rules.test.ts` to sweep `BROWSE_COPY` and `ONBOARDING_COPY`; Mint's bio "daytime/กลางวัน" (`content/cards.ts`); "favours"; Auntie Nok "05:30"; Thai numerals and arrow-free labels on `/pro` (copy is James's) | ☐ | D3, D4, O9, C10 #7, D1 |
| P35 | Design-system fix list in files D1 did not own (brief section 9): `home-picker.tsx` `data-today`; tokens in browse, card, sell, pro, story CSS; Clerk appearance variables in `clerk-shell.tsx`; 2-up deck from 1100px; the ink language disc keep-or-quiet | ☐ (disc 🔒 James) | D1; `DESIGN-SYSTEM-2026-09-24.md` §9 |
| P36 | Tablet/desktop re-audit after the merge: home 820 wraps and 1440 is one viewport; browse 820 label vs axis and 1440 empty track; `.sy-an-chat` height cuts the chip row at 390; `--t-read` chat token inside the story tile at 390; `/pro` 390 length; day state of the new home/sell/pro pieces | ☐ | R5 audit, D3, D2 open issues |
| P37 | Onboarding follow-ups: shoot the signed-in pixels (fix the walker's `Clerk.loaded` wait or sign in with the S6 test user); `/me` "slip received, waiting" from `lib/pro/requests.ts`; `/join` to `/sell` redirect; editor step counter keep or revert (James); `CardTile` `source` prop for `?s=sell` / `?s=pro` | ☐ (counter 🔒 James) | O9 open issues 1 to 4; D2 |
| P38 | Kathy follow-ups: wire `system` as a function in `packages/modules/scheduled-interactions/src/chat.ts` (activates `PROMPT_ADDENDA`, WO-7), then Gemini few-shots in `PROMPT_ADDENDA.gemini` and compare on the battery; a Thai example without a summarizing particle plus "copy the nickname exactly" (เรียบร้อย / เพลอย slips); greeting-after-opener confirmation (James); WO-1 clock line behind a cache breakpoint | ☐ | K6 §"needs a change" + open issues; §9.70 (f) |
| P39 | Battery baseline DONE 24 Sept (Gemini 28/54 pass, 72 msgs; Haiku 19/29 demo-weight pass, 39 msgs); remaining: the other 33 Haiku scenarios (about $0.65), then read `apps/paiduay/trust-reports/battery-2026-09-24-*.md`, rank failures by demo weight, feed the prompt | 🔄 2026-09-24 | T7; partial logs `scratchpad/wave1/t7-*.log` (Gemini 28 ok / 22 fail, Haiku 27 ok / 10 fail at the cut) |
| P40 | Deploy follow-ups: the first deploy through the new pipeline is the test, time the second; demo apps' `next.config` honor `NEXT_SKIP_TYPECHECK`; `lib/photo/store.ts:123` `turbopackIgnore`; prune the 58 GB builder cache (James); flip paiduay standalone after the throwaway test (James); off-VPS builder + registry + credentials (James) | ☐ (three 🔒 James) | P8; `apps/paiduay/docs/DEPLOY-FAST.md` |
| P41 | The kit ships as placeholders: pre-render Band for demo cards at publish time, lazy for Plate/Split; kit gallery visuals; downloadable kit images carry no AI label in the caption text | ☐ | C10 #8; D3 not-done |
| P42 | Housekeeping: delete Clerk DEV test user `o9.wave1+clerk_test@example.com` if it exists; two scratch webchat threads `p_ploy_3621850d…` and `p_ploy_35550396…` in the dev DB; browse band shows only the next free day (week strip per row) | ☐ | O9, K6, D4 |
| P43 | Design direction: James glances at the two static mockups, A "the hour as the page" and B "the poster wall" (`apps/paiduay/docs/design/mockups/`); neither applied, the refined identity shipped | 🔒 James | D1; §9.70 (a) |
| P44 | Builder phase 1: Pro "Look" sheet (layout, color, ground, block order/hide, photo move + zoom), free users may save + preview, locked elements by construction | ✅ 2026-09-25 | commit `dece342`, deployed 01:01; §9.72 (a) to (c); real-phone check pending |
| P45 | Art direction wave: named bar + per-page briefs, foundation + home rebuilt; page agents on /browse /pro /sell /story /p /c kit /me (wave 3b) | ✅ 2026-09-25 (critic pass running) | commit `074a85d`, deployed 02:38; §9.72 (d) (h); `apps/paiduay/docs/design/ART-DIRECTION-2026-09-25.md` |
| P46 | James: approve screen name Frink (Look sheet); DRAFT label "วันหยุด / Day off" on home; shorter English AI caption for small photos | 🔒 James | §9.72 (c) (d) |
| P14 | Name + domain decision (paiduay.com registered by someone else 2024; pueandee.com free) | 🔒 | James |

### Decisions/inputs only James can provide (the 🔒 keys)

0. **🚨 TOP UP ANTHROPIC API CREDITS** (2026-08-06: balance exhausted; every live AI reply 503s in every app — demos are dead until this is done).
1. ~~**Storage for dev video** (O1): MinIO via Docker locally, or a real S3/R2 bucket?~~ **RESOLVED 2026-07-18: MinIO** (`46.247.108.78:9000`, creds in `.env` `MINIO_*`). O1 built + live-verified against it (§9.33). The S3 seam is endpoint-agnostic, so swapping to R2/S3 for production later is a `.env` change only.
2. **VPS credentials** (O12): host, provider, domain.
3. **LINE developer account** (O15): free, ~15 min to create.
4. **THB in demo screenshots** (W2): accept / re-seed neutral currency (recommended) / crop.
5. **Website content v1 verdict** (W1) + brand capitalization + CTA + audience (all parked in the website state doc).
6. **Business calls, no session needed:** D13 first cash-cow vertical + partner; pricing.

### How to order (copy-paste examples)

> "Read 00_TOC_TRACKER_REMAINING_WORK_OPUS_FABLE.md. Do F4 and F10."
> "Read 00_TOC_TRACKER_REMAINING_WORK_OPUS_FABLE.md. You are Opus: execute O2 per the protocol."
> "Read 00_TOC_TRACKER_REMAINING_WORK_OPUS_FABLE.md. Status?" (→ answer from §1 tables, then stop)

---

## 2. Standing instructions to future-me (any model, every session)

1. **Autonomy first, but discuss freely.** Once James orders a task, attempt it end-to-end autonomously (his standing autonomous-build mode: readiness check → implement → verify live → test → spec §9 → commit). BUT — his explicit instruction for this file: **if you have any question, doubt, or a better suggestion, DISCUSS IT WITH HIM. Don't be shy.** He strongly prefers a short discussion over a silently-wrong assumption. Blocking questions (credentials, environment) → ask immediately; design doubts → propose + ask; everything else → decide, record in §9, mention in the summary.
2. **Boot sequence for a fresh session:** repo `CLAUDE.md` auto-loads → read this file's §1 → read the ordered task's row in §3/§4/§5 → follow its "Full detail" pointers. For build orders (O-series) also follow `docs/handoff/60-opus-execution-protocol.md`. For website tasks read `docs/website/00-website-brainstorm-state.md` first.
3. **Update THIS file** at task start (🔄 + date) and task end (✅ + date + evidence pointer, e.g. commit hash or spec §9 number). Keep §1 tables in sync. If your work creates NEW tasks (F-designs always do), add rows with fresh IDs and pointers.
4. **Coordination hazards (cost real time before):** never run two test gates simultaneously (shared remote Postgres; fixtures corrupt — protocol §3). Parallel sessions can't see each other's spec §9 numbering — renumber at merge. The shared DB intermittently stalls new connections (`handoff/20` §3.13) — re-run the file alone, don't "fix" the kernel.
5. **Definition of done** is CLAUDE.md's: typecheck + tests green at root, flow exercised live, §9 updated, committed, failures reported honestly. Plus: this tracker updated.
6. **Keep `apps/demo` working end-to-end at all times** — it is the sales asset.

---

## 3. FABLE menu — full detail

*(Each = one design work-product: spec §9 entries + module sheets/work orders so Opus can build without Fable. Session bundling suggestion: F1 | F2+F3 | F4+F5 | F6+F7+F8 | F9+F10+F11.)*

- **F1 — Billing & entitlements contract (closes D12).** Subscription FACTS as records (plan/trial/renewal/cancel — the §9.32 payments-facts move applied to recurring money), billing-provider plug seam (Stripe Billing, manual, regional rails), and the kernel **entitlements seam** (plan → feature gates, where enforced). Output: §9 entries + `billing` module sheet + entitlement-check contract. Unlocks: SaaS archetype, O9, F10, self-serve monetization of every generated app. Full context: `docs/foundation/02-kernel-spec.md` §8/§9.28, `docs/handoff/10` §9.
- **F2 — Composer archetype layer.** App archetypes (back-office+chat, marketplace, storefront, SaaS site, content site) as `factory:create-app` inputs; contract for how modules contribute public pages per archetype; template organization. Read first: `packages/factory`, spec §9.21/§9.30, the Cameo-mint learnings if O4 is done. Output: §9 design + composer work orders.
- **F3 — Upgrade/regeneration policy.** How generated apps absorb kernel/module updates (version pinning, regenerate-and-diff, protected regions, migration rollout ordering). Output: §9 design + ops work order. Read: spec §9.21 ("NOT in v1"), `packages/factory`.
- **F4 — Availability/calendar design.** Slots, recurrence, working hours, timezones, conflicts; how it composes with `scheduled-interactions` and staff-rota (sheet 09). Deliberately deferred until now (`handoff/10` §5.7). Output: §9 design + sheet upgrade or new sheet.
- **F5 — Gap-12 create/edit forms.** `dataSchema` (zod) → generic create/edit form in the shell, same descriptor philosophy as `listColumns`. Shell contract change → needs its own §9 entry. Context: authoring guide gap 12, spec §9.26.
- **F6 — Reporting-copilot design.** AI natural-language Q&A over tenant data: query-tool allowlist design, injection safety, cross-module dashboard contract. Protocol §7 reserves this design for frontier. Context: sheet `12-reporting-copilot.md` + spec §4.3.
- **F7 — Outbox / post-commit event tier.** Today ALL bus handlers run inside the publisher's tx (deliberate, spec §9.12-era). Notifications/webhooks need after-commit delivery: outbox table, dispatcher job, at-least-once semantics + dedupe guidance (see §9.26's unguarded-overdue note). Contract change → frontier.
- **F8 — Notifications routing design.** One design for operator + customer notifications: event → notification rules (code, not manifest — D8), channel adapters (email/LINE), per-tenant config, digesting. Supersedes backlog item O14's simple v0. After F7.
- **F9 — Storefront archetype sheets.** Cart + guest checkout (guest grants ARE guest checkout), `order` lifecycle, fulfillment facts; reuses catalog/payments/inventory (O5). Output: 1–2 module sheets + archetype notes for F2.
- **F10 — Content/membership archetype sheets.** `content` module (posts/pages, draft→published lifecycle, public loaders per §9.30) + `membership` module (on F1's billing contract). Unlocks creator platforms, courses, paywalled sites.
- **F11 — Bulk thin orders.** (a) Vertical content packs: one meta-work-order + per-industry data files (clinic, salon, gym, dentist, repair, …) — each pack = manifest + grounding + catalog seed; (b) ops runbooks: per-client provisioning (mint→deploy→domain→seed), backup/restore, migration rollout. Cheap to write, high sales value.
- **F12 — Cameo mint by Fable** = O4, listed here because Fable-preferred (first public/portal surfaces; template drift; security edges). Not required — O4's written order suffices for Opus.
- **F13 — Website copy revision.** Apply James's verdicts from W1 against the a16z bar (`docs/website/README.md` editorial rules). Voice quality is where the model tier shows.

## 4. OPUS menu — full detail

*(All are complete written work orders. Execute per `docs/handoff/60-opus-execution-protocol.md`. Record deviations in spec §9; mark sheet BUILT; update this file.)*

**Cameo arc (O1, O2, O3, O4 all ✅ BUILT 2026-07-18 — the full stack is minted + live-verified; James reviews next):**
- **O1 — documents-files:** ✅ **BUILT 2026-07-18** (spec §9.33). `packages/modules/documents-files` — storage seam over kernel `attachments` (no table, no migration); LocalDisk + S3/MinIO providers; route-streamed + presigned-video upload modes; Files tab on `booking/quote/invoice/task/lead`; routes `/api/files`. 6 acceptance tests (LocalDisk) + a live S3 round-trip against MinIO (`46.247.108.78:9000`). Sheet `11-documents-files.md` + §9.31 amendment were the order.
- **O2 — marketplace-listings:** ✅ **BUILT 2026-07-18** (spec §9.34). `packages/modules/marketplace-listings` — `mkt_listings` table (migrated), staff code API + portal self-edit (§9.29) + two public loaders `listing.browse`/`listing.profile` (§9.30), factory `marketplaceListingsModule({ resolveSampleUrl? })`. 8 acceptance tests (real DB). NOT composed into `apps/demo` (marketplace ≠ wellness vertical; the `/admin/listings` page + composition land with the Cameo mint, O4). Known follow-up: no write-path sets `sample_attachment_id` yet (see §9.34).
- **O3 — marketplace-orders + settlementBridge:** ✅ **BUILT 2026-07-18** (spec §9.35). `packages/modules/marketplace-orders` — `video_request` record machine (no table), portal + guest write paths (§9.29), two stale-guard jobs, and `marketplaceSettlementBridge({ feePercent, paymentProvider })` minting payment→payout facts. 6 acceptance tests (real DB, full flow incl. idempotent replay + guest revoke + expiry). NOT composed into `apps/demo`; the request route, talent portal, guest playback page + composition are the Cameo mint (O4).
- **O4 — Cameo MVP mint:** ✅ **BUILT 2026-07-18** (spec §9.36). `apps/cameo-demo` — public browse/profile/request → guest order+playback, talent portal (login, accept/decline/deliver with MinIO upload), seed (staff + 4 talents, mixed THB/USD), multi-currency display toggle. Live-verified end-to-end on real MinIO via `apps/cameo-demo/scripts/verify.ts` (self-cleaning). Functional slice per James; deferred to his review: visual design, staff admin, talent sample-upload (the O2 gap), real PSP. Run: `pnpm --filter cameo-demo db:seed` then `pnpm --filter cameo-demo dev` (port 3201); needs `KERNEL_STORAGE=s3` (MinIO) in `.env`. **Docs: `docs/cameo/` (README=strategy, business.md, technical.md, ai-quickstart.md — read ai-quickstart first if you're a fresh session).**

**SMB catalog (💤 sheets in `docs/handoff/modules/`, build when pulled):** O5=`06-inventory-lite`, O6=`07-messaging-campaigns` (STOP-middleware gap may need a §9 proposal), O7=`09-staff-rota`, O8=`10-forms-intake`, O9=`13-loyalty-membership` (better after F1), O10=`14-expenses-lite`, O11=`15-reviews-feedback`.

**Standing backlog (`docs/handoff/20-technical-context.md` §7, full detail there):** O12=deploy (item 2; 🔒 VPS), O13=inbox+takeover (item 3), O14=operator notifications v0 (item 4; the F8 design supersedes later), O15=LINE (item 5; 🔒 account), O16=widget (item 6), O17=pgvector (§5 checklist), O18=Langfuse tracer, O19=i18n, O20=shell transition RBAC (item 10), O21=test-fixture prefixes per checkout (small; protocol §3 hazard reducer), O27=composer mints don't build (item 17; found by O22).

## 5. WEBSITE thread — full detail

State + all decisions: `docs/website/00-website-brainstorm-state.md` (read first). Content: `docs/website/blocks/` + `pages/` + `assets-shotlist.md` + `preview.html`. Rules: `docs/website/README.md` (editorial rules incl. the a16z bar — binding for every word).
- **W1:** James reads v1 (all files marked `draft v1 — wording open`). → feeds F13.
- **W2:** decide THB question (shot list ⚑ section), run the demo, capture shots 1–6 per `assets-shotlist.md`.
- **W3:** design/visual session (typography/color/layout; deliberately deferred by James — do NOT start uninvited).
- **W4:** static build + DNS + `hello@thonglor.my` receiving (the 24-hour path; content is already launch-ready by rule).

## 5b. PAIDUAY thread — full detail

**2026-09-24 22:50, design wave 1 (P28, follow-ups P29 to P43).** Ten file-owned agents ran in parallel on James's six standing wishes (status §6) plus a design pass, each with a 25-minute-class time box and a report in the session scratchpad; an integrator merges, commits and deploys through the new pipeline. Decisions: refine inside the identity (no rebrand; two bolder mockups drawn, not applied), cards stay below the browse deck (§9.62 b), one left rail on `/story` at every width, provenance printed on the card plate, the opener is the first characters of every Kathy reply with no greeting in front of it, the em dash is guidance-out, standalone stays off until tested, `/story` copy is not touched (James's words). Everything is in spec §9.70 with what was and was not verified.

**2026-09-17 — the USABLE-MVP sprint, Wave 1 (P19).** James: "usable" = a Thai freelancer from his tweet creates her card alone on a phone, gets link + kit, edits later; first revenue ASAP. His calls that day: ≤ 7 concurrent agents, Fable liberally; Clerk for owners (keys found in another project), LINE via Clerk later, Instagram skipped; revenue as proposed (free card + Pro ฿499 once / 12 months by PromptPay slip, manual approval); **all domains public now** (wildcard + apex, rollback recorded), temp domain kept. Seven file-owned agents from `apps/paiduay/docs/MVP-BRIEF.md`; integration fixed one import cycle (pro module) and two screen-name collisions. Spec §9.58. Waves 2–3 (QA critic on the new flow, v3 quality lift, SEO, docs) follow the same day.

**2026-09-10 23:25 → 09-11 — the CARD pivot (P17) + the plans shelf (P18).** James on v3: direction correct, quality to lift. He then asked for the more basic product first: **base = about.me + linktree but better** (static, photo-first, links, image kit; no dynamic data yet); **advanced = base + interaction** (the existing `/p/[slug]`). Use case: DM sellers on X/Threads who advertise with one AI image. Sign-up/login/claim deferred. Built from `apps/paiduay/docs/CARD-BRIEF.md` + `lib/card-model.ts` by file-owned Fable agents; the plans shelf (`docs/paiduay/plans/`) was written in parallel to use the quota window; the 5-hour session limit cut the fleet at ~00:15, finishers completed it after the 02:20 reset. Spec §9.57.

**2026-09-10 evening — the radical redesign (P16).** James rejected the v2 pass as "a mere re-skin … a normal WordPress template" with no visitor path. Reflection: the page grammar was the template, nobody owned the journey, it was judged on a desktop. Reset: `apps/paiduay/docs/RADICAL-BRIEF.md` → four phone-first prototypes in parallel (`docs/prototypes/`) + `docs/paiduay/design/CONVERSION-RESEARCH.md` → critic (`CRITIQUE.md`) → the pick (person-first's page + picker-first's time mechanic + story-first's bar + moment-first's sentence) → one Fable journey-owner built home → browse → profile → request sheet → receptionist sheet; support agents restyled portal/login/admin, poster + OG cards, policy, and added `/join`. Design record: `docs/paiduay/design/DESIGN-v3.md`; contracts kept: `apps/paiduay/docs/KEEP-CONTRACTS.md`; spec §9.56. James's decisions unchanged: logomark, domain, revenue model, age floor, public flip. Next candidates: widget restyle to v3 (P17), self-serve onboarding (P10).

Opened 2026-09-10 in the main Fable session after James rejected the safety/trust-first proposal as "not high-impact" and set the north star to **money (customers, fundraise) / commercial value**, with website design/typography as a must and bilingual out of the box. Direction he gave: solve (1) the provider's presentation problem (the about.me job), (2) a marketplace, (3) marketplace + matchmaking on one platform; free page first, paid extras / commission later; he may adopt the name if it is good. Guardrails still stand: no outreach scheduling; public flip / domain / name are his. Architecture and every build decision: spec §9.51. Artifacts: `apps/paiduay` (the app), `apps/paiduay-design/` (design system + mockups + screenshots), `apps/paiduay-content/` (bilingual content staging). Chunk 1 = P1–P9; James checks, then P10+.

## 6. Done ledger (compressed — evidence: `git log` + spec §9)

2026-07-11 kernel thin slice (§9.10–17) · 07-12 kernel v2 composition + sales-documents + composer + theme (§9.18–22) · 07-14 gaps closed + catalog + contacts-crm + tasks-workflow + spend guards, Opus protocol validated (§9.23–27) · 07-17 website content kernel v1 (`docs/website/`) · 07-17 internet-business expansion: designs (§9.28–32), identity + public sockets BUILT, payments BUILT (commits `b14c308`/`754c167`/`45aed93`/`f7da06d`) · 07-18 **Full Cameo arc BUILT (O1–O4):** documents-files (§9.33) + marketplace-listings (§9.34) + marketplace-orders + settlement bridge (§9.35) + **`apps/cameo-demo` mint, live-verified end-to-end on MinIO (§9.36)**. Awaiting James's review.

## 7. Maintenance rules for this file

1. One row per task in §1; full detail lives in §3–§5 or the pointed-to files — never duplicate whole specs here.
2. Flip statuses in BOTH §1 and the detail section; stamp dates; done rows get an evidence pointer (commit/§9/file).
3. New work → new ID in the right series (F/O/W), added to §1 + detail section. Finished F-designs must add the Opus tasks they created.
4. Update the "Last updated" line at top. If this file and spec §9 ever disagree, §9 wins — then fix this file.
5. Keep §1 short enough that James never needs to scroll past it for a status check.
