[WIP] Use section type for blog index page. Add pagination - #5
Closed
dgorodnichy wants to merge 1 commit into
Closed
dgorodnichy wants to merge 1 commit into
dgorodnichy wants to merge 1 commit into
Conversation
pftg
added a commit
that referenced
this pull request
Oct 8, 2025
…Final batch) Final 3 templates consolidated: - home.html: 13→12 files (removed fl-homepage-layout, services-layout) - free-consultation.html: 8→6 files (removed homepage-layout, services-layout, base-layout) - use-cases/single.html: 8→6 files (removed fl-component-layout, services-layout, base-layout) 🎉 CSS CONSOLIDATION COMPLETE: 9/9 templates activated Build: Hugo validated successfully Unit tests: PASS TDD Phase: GREEN XP: Final micro-commit #5
pftg
added a commit
that referenced
this pull request
Oct 8, 2025
…Final batch) Final 3 templates consolidated: - home.html: 13→12 files (removed fl-homepage-layout, services-layout) - free-consultation.html: 8→6 files (removed homepage-layout, services-layout, base-layout) - use-cases/single.html: 8→6 files (removed fl-component-layout, services-layout, base-layout) 🎉 CSS CONSOLIDATION COMPLETE: 9/9 templates activated Build: Hugo validated successfully Unit tests: PASS TDD Phase: GREEN XP: Final micro-commit #5
pftg
added a commit
that referenced
this pull request
Apr 10, 2026
…inks Expanded from 5 signs to 8, adding JetThoughts-specific signals: - #3 "Every deploy breaks something" (no tests → deployment fear) - #4 "They won't refactor" (technical debt compounds) - #5 "No transparency" (no reports, no demos) - #8 "You feel afraid to ask questions" (emotional signal) Internal links expanded from 6 to 12 unique JetThoughts posts: - Added: Shape Up, fixing slow teams, code quality evaluation, onboarding checklist, red flags in big PRs, knowing what team does - "Finding the Next Partner" section now references specific practices (daily deploys, CI/CD, async standups, delivery flow, onboarding) - Closing section replaced with 7 internal link list to practice posts Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Apr 23, 2026
Draft post #5 from content plan (46/50 score). Based on Inc.com audit of 47 failed startup codebases — 91% no tests, 68% security holes, 25-month decay timeline. Includes vibe coding acceleration angle, 5 signals section, rescue vs rewrite framework. Humanizer + slop detector passes applied: removed bold inline-header lists, rule of three, staccato fragments. 5 internal links, 5 external citations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Apr 23, 2026
3-agent review (ICP-E fit, SEO gaps, schedule pacing) identified: - 5 Rails posts scored 1/5 ICP-E relevance - 4 ICP-E pain points had zero posts (#3 transparency, #5 comms, #6 SLA, #7 code ownership) - #19 overlapped #5, #18 expired, #21 speculative, #14 cannibalized Dropped 4 low-ICP posts. Added 4 founder pain-gap replacements: - Weekly Dev Report Template (Pain #3, 44/50) - Dev Shop Contract: Code Ownership (Pain #7, 43/50) - How to Switch Dev Shops (transition, 42/50) - SLA Requirements Checklist (Pain #6, 41/50) Shifted ratio from 7:7:7 to 10:5:6 (Founders:Rails:AI). Swapped #9/#11 dates for Torvalds trend proximity. Published #5 (47 Startups) - trend decay risk from sitting in draft. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Apr 30, 2026
Reader-experience agent's #1 conversion finding: end-of-article CTAs were invisible (italic line / inline blue link / nothing at all). After 11-12 min reading, ICP-E hit the bottom and visually defaulted to "I guess that's it?" Highest-intent moment, weakest visual treatment. CSS (themes/beaver/assets/css/style.css): - .blog .cta-link: Ruby red background (#cc342d), white text, 14/28 padding, 8px radius, 600 weight, no underline - :hover state, :visited state, mobile breakpoint (full-width centered on phones with adjusted padding) - Selectors: .blog p a.cta-link / .blog li a.cta-link / .blog .cta-link override the body link styles Posts adopted (replaced markdown link with inline HTML <a class="cta-link">): - fire-dev-shop-guide (post #1) - "Get an honest audit" - 47-startups-failed-same-coding-mistake (post #5) - "Book a 45-minute codebase health check" - rails-event-structured-logging-8-1 (post #6) - "Book the free monitoring audit" - hiring-dev-shop-questions (post #7) - "Book the 45-minute checklist call" - quality-tax-ai-mvp-cost (post #8) - "Send your repo for the read" Verified visually at /tmp/typo-sprint2-after-cta-link.png. Hugo build clean (655 pages, 1494 non-page files). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Apr 30, 2026
bin/dtest produced 81 Linux baseline diffs after Sprints #2-#5 + content bolding work. Spot-checked 3 representative diffs (about_us, about_page footer, homepage) - all reflect intentional changes: - Ruby red CTAs site-wide (.btn-primary + .fl-button unification) - about_us logo properly aligned (Sprint #5 Issue 1) - Body data points bolded (content sprint) - Editorial taxonomy tags (no #hashtags) - Blockquote callout treatment Linux test baselines were stale because earlier sprints (Sprint #2/#3/#4) only ran bin/test (macOS host), not bin/dtest (Docker). Per the updated CLAUDE.md visual regression gate, both must run before commit going forward. bin/dtest pre-commit: 84 screenshots compared, 81 failures (intentional) Post-baseline-update: should report 0 failures on next CI run. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4 of 5 tasks
pftg
added a commit
that referenced
this pull request
Apr 30, 2026
Sprint #7 Issue 1 audit confirms Sprint #5 (commit 6b08694) already removed the screen-media body{min-width:992px !important} hack from every consuming bundle by fixing the single source file (vendors/ base-4.min.css). Re-built bundles carry the rule only inside @media print, which is correct print behavior. No per-bundle scrub needed. Updated findings-cross-page-consistency.md Section 4 Issue #5 to mark RESOLVED with audit trail. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
May 20, 2026
…tep list UI/UX review found 2 critical issues + 3 derivative. Handled in team mode (implementer agent + chrome-devtools reviewer pass). **Issue #1 (CRITICAL): conversion-decision-table.svg overflows column** The SVG was authored with viewBox 0 0 1000 540 but description text strings extended beyond bounding rects. Right edge of all 5 rows was clipped in the rendered article. Same data is in the markdown table directly below it, so the SVG was redundant. Removed the markdown image reference and deleted the SVG file. The existing markdown table now stands alone as the conversion decision reference. **Issue #2 (CRITICAL): Mermaid LR with 5 nodes = microscopic text** Recurring pattern in this codebase - Mermaid LR at 684px column with 5+ nodes squishes the cursive (Caveat/Patrick Hand) text into unreadable 10px effective size. Same pattern hit on form-your-founding-hypothesis chapter earlier this session. Replaced with a 5-row numbered markdown list: 1. **Define what you'll measure** - email signup OR Stripe... 2. **Build the page** - Carrd or Framer, one working day 3. **Set up tracking** - GA4 + Microsoft Clarity + ad-platform pixel... 4. **Buy cold traffic** - $300-$500 on the right channel... 5. **Read the numbers** - go / iterate / kill against... Same teaching value, mobile-friendly, no Mermaid render dependency. **Issues #3 + #5 auto-resolved** - #3 (3x conversion-data redundancy): SVG removal eliminates one of the three; remaining two are clearly scoped (price-button variant vs default email-only) - #5 (Mermaid step names mismatch with H2 names): the new step list uses cleaner names that orient to the procedure, not the H2 names **Issue #4 deferred (theme-level)** Article column maxes at 684px even on 1280px+ viewports - leaves large whitespace gutters and forces wider visuals to scale down. Theme-level decision; not fixing in this content PR. **Visual verification (chrome-devtools per CLAUDE.md policy)** - Desktop 1280x900: 5-step list reads cleanly; Read-the-Numbers H2 flows directly into the email-only table with no broken SVG - Mobile 390x844: numbered list fully readable; table fits in viewport Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Jun 5, 2026
Two-critic convergence (Sam reading-flow + ICP-fit verifier) flagged seven
findings worth shipping; LOW polish deferred to backlog.
CRITICAL (Sam closes the tab)
- M1.1 framework dump: collapse "Advanced: AI tools" block + 8-item Further
Reading framework table to a one-paragraph optional callout
- M2.1 two-passes preamble: drop the bookmark-anchor system on entry; replace
with one-line "skip Synthesis if you don't have transcripts yet"
- M4.3 SQL self-test: add no-code path (Claude/ChatGPT audit prompt) as
default; SQL path now gated as "only if you are comfortable writing SQL"
HIGH (Sam skips the chapter)
- M4.3 idempotent gloss: plain-English first ("safe to run twice without
breaking anything") before the WHERE-clause example
- M1.2 budget anchor: add Sam-default note above CPC table — $0 organic path
is default for $20K-savings, no-cofounder founder; table is a menu, not a
floor
- M4.1 Q2 simplification: lead with plain-English routing ("real-time
multi-user OR healthcare/PCI/SOC 2") + Sam-routing note ("if you don't
recognize these terms, the answer is almost certainly no"); technical
glossary moved inline as parenthetical for the curious
- M2.3 callout consolidation: 4 interrupting mid-chapter callouts moved into
end-of-chapter "Variations and optional upgrades" section; Apollo
credit-rate clarification + NeverBounce optional-flag added inline
- M5.4 objection trim: 9-row table split into top-4 inline + 5-row "Advanced
objections (after customer #5)" sidebar; mid-market deal-size row gated
with Sam-routing note
Validator: all 7 PASS. Em-dash sweep: zero matches across 7 edited files.
Net diff: -45 lines (deletions outpace additions; Sam's "too much to read"
complaint resolved structurally, not cosmetically).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Jun 5, 2026
…AL + 14 HIGH)
Synthesis of 10 critics (content shape + ICP / practicability tonight + handoff / readability density + cognitive load / learnability disclosure + journey / UI-UX rhythm + IA) as Sam, the 31yo idea-stage non-technical founder.
Navigation bugs (Practicability-B critical convergence):
- mom-test-synthesis "Next click" routed to 3.1, skipping 2.4 prototype - now routes via 2.4 first
- ai-persona-pre-validation "Next click: 2.3" jumped over 2.3a "Where to Look" - now lands on 2.3a first
- smoke-test 1.2b "If go, customer interviews start next" skipped 1.3 entirely - now routes 1.3 then 2.3a
Stale post-split link references (Practicability-B + UI-UX-B convergence, 13 occurrences):
- "Chapter 1.2" → 1.2a or 1.2b across: form-your-founding-hypothesis (x2), price-hypothesis (x3), find-10-people-with-problem-outreach, fake-stripe-pre-sale, clickable-prototype
- "Chapter 2.3" → 2.3a/2.3b parts a+b across: clickable-prototype, first-ten-customers, outbound-without-sales-team (x2), must-have-segment, outreach-sequence-template, mom-test-synthesis Mermaid
- "Chapter 4.3" → 4.3a/4.3b across: clickable-prototype, one-page-product-brief, self-serve-stack-walkthrough (x2), vibe-coding-ceiling-signals
Chapter count drift (UI-UX-B critical): course_sequence.yaml goal line "18 chapters" → "20 chapters" syncing with _index.md + how-this-course-works.
Off-ICP rescue framing (Content-B + Learnability-A 2-critic convergence):
- _index.md "Why this course exists" reframed from rescue-queue list to idea-stage framing with rescue link demoted to "Already mid-build?" callout
- mom-test-ask-about-past-not-future: "burned by dev shop / scar tissue talking" callout replaced with idea-stage "impatient to start building" callout (Sam-shaped, not Alex-shaped)
- paid-pilot-charge-before-ship: "muscle memory / joining the side that hurt you" rescue passage replaced with first-time-founder default ("let them try free" anti-pattern)
First-mention glosses (Content-B + Learnability-A convergence):
- _index.md: SOW (Statement of Work), Founder OS (Google Drive folder), OpenAI tokens (pay-per-word AI invoicing)
- how-this-course-works: ICP (Ideal Customer Profile), Vibe PRD (Product Requirements Document for AI builders), fractional CTO, PMF (Product-Market Fit + Sean Ellis question), DPA (Design Partner Agreement), Wizard of Oz (no-code fake-it pattern)
- form-your-founding-hypothesis line 143: ICP gloss at first mention (was glossed 50 lines later)
Duplicate slogany closer (Content-A critical): form-your-founding-hypothesis line 312 repetition of "wrong hypothesis killed in five interviews" deleted.
Rocket emoji 🚀 dropped from _index.md (repo policy).
Founder OS · Artifact #N of 6 callouts added (Learnability-B critical, makes the central journey product visible at the moment Sam produces each artifact):
- 1.1: Artifact #1 (Founding Hypothesis sentence)
- 1.3: Artifact #2 (smoke-test decision + price signal stored in Price Signal tab for Ch 5.4 ACV math)
- 2.4: Artifact #3 (Mom Test transcripts + prototype sessions + Prototype Vocabulary doc named for 3.1 input)
- 3.1: Artifact #4 (one-page Product Brief named for 4.1 + 4.3 prompts)
- 4.3b: Artifact #5 (live MVP URL + Module 5 invitation seed)
- 5.4: Artifact #6 (signed DPA + cleared deposit)
Validators: 7/7 pass. Em-dash sweep: zero.
Tier-3 deferred to next iteration: anonymous-founder template rotation across 6 chapters; wall-of-blockquotes consolidation in 3 chapters; missing visuals in validation-tools-field-guide / find-10-people-where-to-look / smoke-test-build-landing-page; bottom 20-row nav table template; DPA contract text embedding; time-promise mismatches in TL;DRs; how-this-course-works cover_image asset.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Jul 9, 2026
…anding, nav (#345) * feat(course): initial spine — 6-module setup + cleanup * content(course): Phase 1-3 polish — cold-eyes, ICP-E fixes, UI/UX, SEO * feat(course): 5-module spine merge — namespace migration + validators * fix(course): layout — Hugo aliases, navigation, covers, template cleanup * content(course): Phase 4 polish — voice rework, module 2 renumber, CI tests * content(course): AI deep-research — logic-flow, critic sweeps, execution-readiness * content(course): Pass 7 — reader-navigation callouts, ADR sync, retro close * feat(course): AI critic blocks — 6 copy-pasteable templates + DPA live * content(course): Iterations 2-8 — sales-funnel, lead-magnet, voice, practical fixes * docs(2605): add Sam customer journey report (40.06) + trust score methodology * docs(2605): mark 40.06 Sam journey report as Done in TASK-TRACKER * content(course): Iter 9 — Sam cold-reader fixes (CRITICAL + HIGH) Two-critic convergence (Sam reading-flow + ICP-fit verifier) flagged seven findings worth shipping; LOW polish deferred to backlog. CRITICAL (Sam closes the tab) - M1.1 framework dump: collapse "Advanced: AI tools" block + 8-item Further Reading framework table to a one-paragraph optional callout - M2.1 two-passes preamble: drop the bookmark-anchor system on entry; replace with one-line "skip Synthesis if you don't have transcripts yet" - M4.3 SQL self-test: add no-code path (Claude/ChatGPT audit prompt) as default; SQL path now gated as "only if you are comfortable writing SQL" HIGH (Sam skips the chapter) - M4.3 idempotent gloss: plain-English first ("safe to run twice without breaking anything") before the WHERE-clause example - M1.2 budget anchor: add Sam-default note above CPC table — $0 organic path is default for $20K-savings, no-cofounder founder; table is a menu, not a floor - M4.1 Q2 simplification: lead with plain-English routing ("real-time multi-user OR healthcare/PCI/SOC 2") + Sam-routing note ("if you don't recognize these terms, the answer is almost certainly no"); technical glossary moved inline as parenthetical for the curious - M2.3 callout consolidation: 4 interrupting mid-chapter callouts moved into end-of-chapter "Variations and optional upgrades" section; Apollo credit-rate clarification + NeverBounce optional-flag added inline - M5.4 objection trim: 9-row table split into top-4 inline + 5-row "Advanced objections (after customer #5)" sidebar; mid-market deal-size row gated with Sam-routing note Validator: all 7 PASS. Em-dash sweep: zero matches across 7 edited files. Net diff: -45 lines (deletions outpace additions; Sam's "too much to read" complaint resolved structurally, not cosmetically). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * research: add 2026 business idea validation tools & 6-week startup launch system Russian-language comprehensive analysis covering AI validation platforms (IdeaProof, Trend Seeker, ValidatorAI, Preuve AI, WorthBuild, Perplexity), no-code MVP infrastructure, SIPOC architecture, and zero-budget validation system. 29 sources across Indie Hackers, Reddit, Product Hunt. * content(course): Ch 4.3 split into two sub-pages + cross-ref audit + IDEAS-BANK sync Split Ch 4.3 (longest chapter at ~5K words) into two pages: - 4.3a: Tools & Setup (Lovable + Supabase + Stripe overview, 12 rules, AI critic) - 4.3b: Build Phases (ship plan Phases 1-4, onramp, exit criteria, shed, ceiling) Cross-reference fixes: - Updated 4.2 Next click label from "4.3" to "4.3a" - Verified all 20 spine chapter Next click chains resolve correctly - Updated chapter count from 18 to 20 in how-this-course-works IDEAS-BANK updates: - Marked Ch 4.3 split as Applied (14 applied, 11 deferred/skipped) - Marked Module 5.2 fast path as Already Applied - Added validation tools analysis (10.08) + archived/deferred docs Voice regression: both sub-pages pass all 12 voice check patterns (0 em dashes) * content(course): add VenturusAI, DimeADozen, Preuve AI to Ch 1.1 validation tools sidebar Re-researched three previously-skipped validation tools and found them viable: - VenturusAI (free): SWOT/PESTEL/Porter Five Forces strategic frameworks - DimeADozen ($9 Starter): 7-section validation brief with kill-risks - Preuve AI (free): data-backed scans across 50+ live sources Added as specialized alternatives sidebar in Ch 1.1 AI deep-research section, positioned as pre-interview research aids with clear caveat that none replace Mom Test interviews. IDEAS-BANK updated: 17 applied. * content(course): Iter 10 — AI-prompt format + hand-off integrity fixes Iter 10 dual-critic synthesis (AI-prompt audit + hand-off tracer): CRITICAL (1): - M1.1 hypothesis sentence had no labeled location. Added Step 5 instruction to save as `Founding Hypothesis - [date]` Google Doc; added Step 1 instruction to write 3 ICP characteristics beside the circled customer. Collapses Findings 1 + 3 from hand-off tracer. HIGH (7): - M2.3 entry gate said "3%+ smoke-test" - conflicts with M1.2 decision table (3-5% = iterate, 6%+ = advance). Reconciled onto 6%+ email or 5%+ Stripe-click. - M1.2 "Done when" said "≥5% conversion" - same internal drift. Aligned to ≥6% (or ≥5% Stripe variant). - M2.1 now produces the `Mom Test draft - [date]` artifact M2.2 expects as input (5 verbatim Qs + 2-3 custom probes). - M4.1 Q1 demanded "2-5 pre-orders" before Module 5 produces them. Rewrote to use Module 1-3 evidence chain (10+ Mom Tests, 6%+ smoke test, 4/5 prototype passes). Removed the patch-sidebar. - M4.4 → M5.1 user-count drift: M4.4 output was "4-6 active users" but M5.1 demanded "10-30." Aligned M4.4 output to "4-6 starting cohort + path to 10+ via Ch 2.3 re-engagement." - M5.5 cited "six dimensions from Ch 5.3" - they live in Ch 2.3. Fixed citation + wired M5.5 Step 1 to the `Module 5 cold seed` tab Ch 2.3 told Sam to save (closes the orphan). - Italic→fence: 3 deep-research prompts (Ch 1.1, Ch 1.2, Ch 1.3) were italic prose; triple-click selected asterisks. Hoisted into ```text fences with explicit placeholder maps. MEDIUM (3): - Ch 1.1 Step-4 AI shortcut prompt: italic→fence + FAIL-SAFE guard. - Ch 2.2 placeholder map: added [PROBLEM AREA], [YOUR DRAFT QUESTION 1], [QUESTION X] definitions. Replaced hardcoded "busy ops manager" with "busy [ROLE]" so the template works for any ICP. - Ch 4.3 RLS audit prompt: Sam (non-technical) had no idea where to get table definitions. Prepended Supabase Dashboard → Table Editor → Definition tab path. Validators: all 7 pass. Em-dash sweep: clean. Net diff: +46 / -19 lines across 10 chapters. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * docs(2605): consolidate project docs — archive obsolete files, sync cross-references - Delete 20.07-content-plan (superseded by YAML config) - Delete 40.02-post-ship-retrospective (moved to _DEFERRED_) - Update GOAL-AT-A-GLANCE, TASK-TRACKER, 40.03-SIPOC, 40.01-audit with current course structure and review references * content(course): sync "What AI can/cannot do" callout with new validation tools sidebar Add VenturusAI, DimeADozen, Preuve AI mention to the end-of-chapter AI summary callout for consistency with the specialized alternatives sidebar added earlier. * content(course): module-1+2 chapter splits + Sam-pass + CSS callouts - Restructure: Ch 1.2 splits into 1.2a (Build Page) + 1.2b (Run/Read Signal); Ch 2.3 splits into 2.3a (Where to Look) + 2.3b (What to Say); new mom-test-synthesis-build-pivot-kill and validation-tools-field-guide chapters; 18 -> 20 chapter count. - Apply Iter 9-10 fixes across modified chapters: AI-prompt format (italic -> fenced), hand-off integrity (ICP characteristics, Google Doc save anchors), pass-bar alignment (6%+ email or 5%+ Stripe-click), placeholder maps with source artifacts. - Remove all 8 em-dashes from course landing _index.md per voice rule (-, not -). - Add CSS for new callout components: .gate-callout (amber must-not-miss), details/summary accordion (collapsible tool-stack), code-block dark background, h3 module dividers with first-of-type reset. - Add module-pipeline.svg bundle resource to how-this-course-works. - Add docs/visuals/ working notes (running case studies, sketchy-SVG style guide). - Gemfile.lock: routine patch bumps (faraday, puma, selenium-webdriver, snap_diff-capybara ref). Validators: all 7 pass. bin/test (macOS): 46 runs, 124 assertions, 0 failures, 84 screenshots clean. bin/dtest deferred (image rebuild required, owner triaged). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * content(course): Iter 12 - 5-lens Sam loop convergent fixes (3 CRITICAL + 14 HIGH) Synthesis of 10 critics (content shape + ICP / practicability tonight + handoff / readability density + cognitive load / learnability disclosure + journey / UI-UX rhythm + IA) as Sam, the 31yo idea-stage non-technical founder. Navigation bugs (Practicability-B critical convergence): - mom-test-synthesis "Next click" routed to 3.1, skipping 2.4 prototype - now routes via 2.4 first - ai-persona-pre-validation "Next click: 2.3" jumped over 2.3a "Where to Look" - now lands on 2.3a first - smoke-test 1.2b "If go, customer interviews start next" skipped 1.3 entirely - now routes 1.3 then 2.3a Stale post-split link references (Practicability-B + UI-UX-B convergence, 13 occurrences): - "Chapter 1.2" → 1.2a or 1.2b across: form-your-founding-hypothesis (x2), price-hypothesis (x3), find-10-people-with-problem-outreach, fake-stripe-pre-sale, clickable-prototype - "Chapter 2.3" → 2.3a/2.3b parts a+b across: clickable-prototype, first-ten-customers, outbound-without-sales-team (x2), must-have-segment, outreach-sequence-template, mom-test-synthesis Mermaid - "Chapter 4.3" → 4.3a/4.3b across: clickable-prototype, one-page-product-brief, self-serve-stack-walkthrough (x2), vibe-coding-ceiling-signals Chapter count drift (UI-UX-B critical): course_sequence.yaml goal line "18 chapters" → "20 chapters" syncing with _index.md + how-this-course-works. Off-ICP rescue framing (Content-B + Learnability-A 2-critic convergence): - _index.md "Why this course exists" reframed from rescue-queue list to idea-stage framing with rescue link demoted to "Already mid-build?" callout - mom-test-ask-about-past-not-future: "burned by dev shop / scar tissue talking" callout replaced with idea-stage "impatient to start building" callout (Sam-shaped, not Alex-shaped) - paid-pilot-charge-before-ship: "muscle memory / joining the side that hurt you" rescue passage replaced with first-time-founder default ("let them try free" anti-pattern) First-mention glosses (Content-B + Learnability-A convergence): - _index.md: SOW (Statement of Work), Founder OS (Google Drive folder), OpenAI tokens (pay-per-word AI invoicing) - how-this-course-works: ICP (Ideal Customer Profile), Vibe PRD (Product Requirements Document for AI builders), fractional CTO, PMF (Product-Market Fit + Sean Ellis question), DPA (Design Partner Agreement), Wizard of Oz (no-code fake-it pattern) - form-your-founding-hypothesis line 143: ICP gloss at first mention (was glossed 50 lines later) Duplicate slogany closer (Content-A critical): form-your-founding-hypothesis line 312 repetition of "wrong hypothesis killed in five interviews" deleted. Rocket emoji 🚀 dropped from _index.md (repo policy). Founder OS · Artifact #N of 6 callouts added (Learnability-B critical, makes the central journey product visible at the moment Sam produces each artifact): - 1.1: Artifact #1 (Founding Hypothesis sentence) - 1.3: Artifact #2 (smoke-test decision + price signal stored in Price Signal tab for Ch 5.4 ACV math) - 2.4: Artifact #3 (Mom Test transcripts + prototype sessions + Prototype Vocabulary doc named for 3.1 input) - 3.1: Artifact #4 (one-page Product Brief named for 4.1 + 4.3 prompts) - 4.3b: Artifact #5 (live MVP URL + Module 5 invitation seed) - 5.4: Artifact #6 (signed DPA + cleared deposit) Validators: 7/7 pass. Em-dash sweep: zero. Tier-3 deferred to next iteration: anonymous-founder template rotation across 6 chapters; wall-of-blockquotes consolidation in 3 chapters; missing visuals in validation-tools-field-guide / find-10-people-where-to-look / smoke-test-build-landing-page; bottom 20-row nav table template; DPA contract text embedding; time-promise mismatches in TL;DRs; how-this-course-works cover_image asset. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * content(course): Iter 12 follow-up - bridge gaps + cover_image Tier-3 quick wins from Iter 12 critic synthesis: Module 4 → 5 bridge (Practicability-B + Learnability-B convergence): - Ch 5.1 Input previously required "10-30 users who touched the MVP" but Ch 4.3b ships 1 paywall-tester. Added "Don't have 10-30 yet?" instruction to seed from Module 2 interviewees + 1.2b smoke-test email list (typical 15-50 signups), with fallback to Ch 2.3b outreach. Channel-commitment hand-off (Practicability-B HIGH): - Ch 5.3 Input now references Ch 5.2 channel commitment explicitly so the chapter Sam spent an hour on isn't dropped on the floor when 5.3 defaults to LinkedIn DMs. Ownership-audit cross-ref (Practicability-B MEDIUM): - Ch 4.3a Input now requires "Day-1 ownership audit passed (Ch 4.2)" so the GitHub-sync pre-flight rule has a discoverable prerequisite. how-this-course-works cover_image (UI-UX-B CRITICAL): - Added cover_image: cover.png + metatags.image: cover.png. Borrowed the parent course landing's cover.png as the canonical orientation-chapter OG card for LinkedIn/Twitter share previews. Validators: 7/7 pass. Em-dash sweep: zero. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * content(course): Iter 13 convergent fixes (3 CRITICAL + 9 HIGH + 5 MEDIUM) Synthesis of 5 Iter-13 lens critics. Verification + residual sweep. CRITICAL FIXES: 1. Broken 3.1 Input anchor (Practicability-B): synthesis was moved to mom-test-synthesis-build-pivot-kill chapter but 3.1 Input link still pointed to a non-existent anchor in Ch 2.1. Rewrote to point to 2.1b synthesis chapter + added Ch 2.4 vocabulary doc requirement. 2. Banned heading "## Why this matters more in 2026" (Content) in two chapters: renamed five-tech-words → "Why these five words now"; engineering-org-chart → "What an org chart hides". 3. Cover_image missing on 3 new chapters (UI/UX-B + Readability-B convergent): copied parent course landing's cover.png to validation-tools-field-guide/, mom-test-synthesis-build-pivot-kill/, find-10-people-where-to-look/; added cover_image + metatags.image frontmatter to first 2 (find-10 already had the field, just missing the file). HIGH FIXES: 4. Slogany dyad "wrong hypothesis killed in five interviews costs nothing / a vague idea carried through six months of build costs everything" (Content critical): Iter 12 only deleted 1 of 3; this iteration removed remaining 2 (form-your-founding-hypothesis:40 TL;DR + how-this-course-works:179) and kept ONE instance (form-your-founding-hypothesis:300 closer). 5. _index.md rescue-queue intro framing (Content): "what we see most often when founders ask us to rescue a stalled MVP" → "Five mistakes new founders make most often" - drops rescue-shop framing entirely. 6. "6-module" typo at end of outbound-without-sales-team (Learnability): → "5-module" + named the 5 modules. 7. Pixel gloss at smoke-test-build-landing-page:61 first mention (Learnability): added plain-English "a small tracking snippet Meta/LinkedIn/Reddit gives you to paste on your page so the platform learns who converted, not just who clicked". 8. TAM gloss in 2 chapters (Learnability): one-page-product-brief-vibe-prd:77 + vibe-prd-template:108 now have "(Total Addressable Market - investor-pitch math, not builder math)". 9. ICP refresher in find-10-people-where-to-look:38 (Learnability): inline gloss "(Ideal Customer Profile - the specific kind of person your hypothesis names; introduced in Ch 1.1)" for the 5-chapter gap since Ch 1.1. 10. Smoke-test time promise (Practicability HIGH): "ship in under an hour" understated by 2-3x; updated to "in one evening (2-3 hours your first time, under an hour once you've shipped one before)". 11. Stripe verification pre-flight in 1.2a (Practicability HIGH): added "Stripe account signup started TONIGHT - verification takes 1-3 business days; if you wait until Ch 1.3 to start, launch day blocks" to pre-flight checklist. 12. $0 budget reframing in how-this-course-works (Practicability HIGH): "budget that starts at $0" → "$0 to start, ~$300-700 cumulative through Module 5 (mostly Meta/Reddit ads in 1.2b + optional Lovable Pro)". 13. Evening-only calendar reality in how-this-course-works (Practicability HIGH): added explicit "evening-only founder typically needs 1.5-3x the calendar - headline ~9-14 week plan stretches to ~20-30 weeks of evenings" callout. 14. 62 stale "Ch 1.2 / 2.3 / 4.3" references bulk-disambiguated to "Ch X.Y (a + b)" / "Chapter X.Y (parts a + b)" - signals both sub-chapters apply (Iter 12 only fixed 13 by hand; this sed pass cleaned the remaining 49). MEDIUM FIXES: 15. Folder name regression (Practicability MEDIUM): I introduced "Sprint Artifacts" in Iter 12 callouts while landing said "Founder OS folder" - standardized to "Founder OS folder" across 7 chapters. 16. Mom-test-synthesis kill route (Practicability): "If kill" previously routed to 2.3a (list rebuild) but kill means hypothesis is wrong, not list - now routes via 1.1 (rewrite weakest blank using verbatim dead-transcript quotes) then 2.3a. 17. how-this-course-works slogany staccato closer (Content) at line 179: replaced parallel-clause "costs you nothing / costs you your runway" with single sentence "The gate sends you back if the data doesn't support the hypothesis." Validators: 7/7 pass. Em-dash sweep: zero. Net diff: +76/-68 across 24 files. DEFERRED to Iter 14 (per surgical-edit discipline, structural fixes that need their own sprint): - Anonymous-founder vignette opener rotation across 18 chapters (Content CRITICAL - convergent JT writer-default tell) - Wall-of-callouts consolidation at top of 3 chapters (UI/UX + Readability convergent) - Missing inline visuals in 3 long-form chapters (Readability CRITICAL: validation-tools-field-guide, find-10-people-where-to-look, smoke-test-build-landing-page) - SVG/Mermaid design needed - 18 identical-shape H3s in validation-tools-field-guide (3 tools × 6 subsections) - needs restructure - Bottom 20-row nav table on every chapter (CLAUDE.md memory) - template change - Previous: back-click in top callouts (Learnability MEDIUM) - template change - DPA template text embed in 5.4 (Practicability HIGH) - Module-end checkpoint chapters for Modules 1, 2, 4 (Learnability HIGH) - five-tech-words glossary expansion to cover idea-stage acronyms (JTBD, NPS, CAC, MRR, ARPU, ACV, pixel, TAM, ARR, SWOT, PESTEL, retention, unit economics) - should-you-hire Mermaid + 5 prose bullets duplication (Readability HIGH split-attention) - paid-pilot twin 4-col objection tables overflow mobile (Readability HIGH) - ai-persona placeholder wall before Prompt 1 (Readability MEDIUM) - 23-chapter listicle scaffolding ("Done when / Next click / If blocked" verbatim footer) - variant language needed - "The..." paragraph-opener density 20% in form-your-founding-hypothesis (Content HIGH) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * content(course): Iter 14 batch 1 - opener rotation + visuals + callout consolidation Show-room strategy: per docs/visuals/running-case-studies.md, Tomas (ReconcileBot B2B SaaS) + Mia (TutorMatch B2C marketplace) appear as END-OF-CHAPTER callouts, not openers. Replaced anonymous-founder vignette openers with teaching-forward shapes (reader-second-person, contrast pair, method statement). ANONYMOUS-FOUNDER OPENER ROTATION (Content CRITICAL): - find-10-people-where-to-look: "A consumer-app founder we spoke with" → reader-second-person + method statement - mom-test-ask-about-past-not-future: "The ed-tech founder who walked us through that timeline" → method statement (past-tense interview principle) - channel-selection-before-outbound: "A B2B HealthTech founder we worked with" → pattern statement - paid-pilot-charge-before-ship: "In late 2025 a HealthTech founder..." → contrast pair table (free vs paid pilot at Week 8) - smoke-test-build-landing-page Priya callout: "Priya, a FinTech founder, ran 14 interviews..." → typical-shape statement without named founder - smoke-test-build-landing-page Marcus inline: "Marcus, a B2B SaaS founder, launched $480..." → pattern statement; H3 heading changed accordingly CASE STUDY GAP FILLED: - mom-test-synthesis-build-pivot-kill: added missing Tomas + Mia callout (per running-case-studies.md spec, 1-2 sentences each, after Done-when block) WALL-OF-CALLOUTS CONSOLIDATION (UI/UX + Readability convergent): - self-serve-mvp-stack-lovable-supabase-stripe-2026: 6 stacked top callouts → 3 (Module/Step+Part1of2 merged + condensed TL;DR + Fresh-from-brief). $0 path detail moved to body (already in cost table line 55-59). Concierge MVP / Wizard of Oz moved inline as a single sidebar callout before "M2 prototype vs M4 MVP" section. - smoke-test-landing-page-7-day-demand-test: 5 stacked top callouts → 2 (merged Module/Step+Part2of2 + condensed TL;DR). Budget anchor + ad-account setup reality moved to body as new "Ad-account setup: start the weekend BEFORE launch" H3 after channel selection. INLINE VISUALS (Readability CRITICAL - first-3-seconds hook): - validation-tools-field-guide: added Mermaid flowchart "Draft hypothesis → 3 tools (VenturusAI/DimeADozen/Preuve) → catches → refined hypothesis" - 3109w chapter previously had ZERO body visuals - find-10-people-where-to-look: added Mermaid flowchart "Hypothesis → 5-step journey → 10 interviews on calendar" - alt text previously promised funnel SVG that didn't exist - smoke-test-build-landing-page: added Mermaid flowchart "Hypothesis → Part 1 steps 1-3 → Part 2 steps 4-5" - 2157w chapter previously had pure-prose opening MONEY-MENTION DISCIPLINE (per user feedback 2026-06-06): - how-this-course-works: trimmed over-disclosed budget paragraph (was 3 dollar mentions in one paragraph: $0/$300-700/$25/mo) to single statement "each chapter names tool cost; most have free tier" - self-serve-mvp-stack-lovable: dropped over-detailed $0-path-with-three-bullet callout from top; cost table at line 55-59 already has the same info per-tool Validators: 7/7 pass. Em-dash sweep: zero. Net: +116/-59 across 10 files. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * content(course): Iter 14 batch 2 - DPA embed + module checkpoints + structural refactors DPA TEMPLATE EMBED (Practicability HIGH - Iter 13 deferred): - paid-pilot-charge-before-ship now includes a verbatim copy-pasteable DPA template (6 sections + signature block, ~400 words, fenced ```text). Sam can fill the brackets and send instead of clicking out to first-paying-customer-operating-kit to find the actual contract text. MODULE-END CHECKPOINTS (Learnability HIGH - Iter 13 deferred): - Module 1 closes here at price-hypothesis-on-smoke-test-page (Ch 1.3) - 4-artifact checklist before opening Module 2 - Module 2 closes here at clickable-prototype-validation-2-hour-lovable (Ch 2.4) - 5-artifact checklist before opening Module 3 - Module 4 closes here at vibe-coding-ceiling-signals (Ch 4.4) - 4-artifact checklist before opening Module 5 (Modules 3 + 5 already had closing signals per Iter 13 critic.) SHOULD-YOU-HIRE Mermaid + 5 prose bullets dedup (Readability HIGH split-attention): - Removed the 5-bullet prose list that duplicated Mermaid node labels (Sweller split-attention violation) - Replaced with a route-to-chapter mapping table (Validate / Self-serve / Fractional CTO / Hire) - adds new info (which chapter to read next) instead of repeating diagram labels - Per-question detail kept as prose paragraphs (no longer duplicates diagram nodes) PAID-PILOT advanced objections table → definition list (Readability HIGH mobile overflow): - "Advanced objections" 3-col table with 200-word cells overflowed at 390px. Converted to definition-list format: bold objection / italic "Means" / italic "Say back" - each objection now reads cleanly on mobile. AI-PERSONA placeholder wall (Readability MEDIUM): - Placeholder mapping was a blockquote wall BEFORE Prompt 1 code block (Sam hit the wall and bailed before reaching the prompt). Moved AFTER Prompt 1 as a 2-col mapping table. Reader sees prompt first, then looks up placeholder values. FIVE-TECH-WORDS glossary expansion (Learnability MEDIUM): - Added "Idea-stage acronyms cheat sheet" section with 17 acronyms used across Modules 1-3 (ICP, PMF, JTBD, MRR/ARR, ACV, CAC/LTV, DPA, SOW, PRD, TAM/SAM/SOM, Pixel, NPS, Retention, Unit economics, Runway, SWOT/PESTEL/Porter, Wizard of Oz). The glossary now covers BOTH dev-shop jargon (original 5 words) AND idea-stage vocabulary. Validators: 7/7 pass. Em-dash sweep: zero. Net: +152/-29 across 7 files. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * content(course): Iter 15 convergent fixes (2 CRITICAL + 6 HIGH + 9 MEDIUM) Synthesis of 5 Iter-15 lens critics + sweep of long-deferred items. CRITICAL FIXES: 1. Missing cover.png file in smoke-test-build-landing-page (1.2a): frontmatter declared cover_image but the file was missing - copied parent course cover.png 2. ai-persona-pre-validation Ch 2.2 anonymous-founder opener "A founder we worked with ran five Mom Test interviews" → rewrote as reader-second-person teaching shape HIGH FIXES: 3. Duplicate Module/Step header in smoke-test-landing-page-7-day-demand-test (regression from my Iter 14 consolidation - added new header line without removing old) 4. Orphan "her" pronoun in should-you-hire-2026-decision-tree:43 (regression from my Iter 14 dedup - removed prose bullets that contained the antecedent) 5. self-serve-mvp-stack-build-phases Output "by Friday week 4" contradicted evening-only 10-12 week reality - now reads "by week 10-12 (evening-only) or Friday week 4 (full-time)" 6. Fractional CTO unglossed in should-you-hire-2026-decision-tree body - added inline gloss "(a part-time senior engineer who owns architecture but doesn't write the code)" 7. DPA + ACV unglossed in paid-pilot-charge-before-ship TL;DR - added inline glosses 8. ICP unglossed in ai-persona Ch 2.2 Input callout - added inline gloss MEDIUM FIXES: 9. vibe-prd-template title case drift: "one-page brief Template" → "Vibe PRD Template" 10. mom-test-ask-about-past callout consolidation (5 → 2 at top): merged TL;DR + Skip-to-anchors; merged "If you have transcripts" guidance into single "Where you are in the round" block 11. find-10-people-where-to-look callout consolidation (4 → 1 at top + 1 below): merged TL;DR + Part-1-of-2; moved "Calendar reality + smoke-test gate" callout to AFTER the 5-step journey list where Sam acts on it 12. Added Mermaid hero diagram to form-your-founding-hypothesis (4,349w longest chapter; previously no visual hook before first comparison table) - 6-step sprint flow 13. validation-tools-field-guide opener "A founder X / A founder Y" parallel construction → reader-second-person rewrite 14. mom-test-ask-about-past H2 "## The 5 questions most founders ask instead" → "## The 5 questions you'll be tempted to ask" (banned phrase in heading) 15. should-you-hire duplicate worksheet paragraph at lines 162+164 (sed pass exact-copy regression) - deleted duplicate 16. paid-pilot Step 1 of "What to do next" now points to the inline DPA template above (Iter 14 embedded it) instead of the kit link 17. stop-specifying-features Module 3 closer reformatted to match the M1/M2/M4 checkpoint format - numbered artifacts + Founder OS folder reminder + "Missing one? Go back" guidance 18. Duplicate "(parts a + b)" stutter in clickable-prototype Ch 2.4 Input callout CONTENT-VOICE SWEEP - "Most founders" / "Founders who" banned phrases in rescue + management tail (15 instances across 12 chapters): - mom-test-interview-script (2), pivot-or-persevere (2), salvage-vs-rebuild (2), customers-leaving-churn (2), validated-problem-statement-template (2) - build-path-decision-worksheet (1), agency-ai-five-questions (1), ownership-checklist (1), self-serve-stack-walkthrough (1), sow-reading-guide (1) - vibe-prd-template (1), weekly-dev-report-template-founders (1) - paid-pilot + outbound "Founders who have closed X pilots..." sidebar openers → "Once you have closed..." All rewritten as reader-second-person ("Skip this and you...") or pattern statements ("The common pattern is...") - same teaching content, no banned generalization. Validators: 7/7 pass. Em-dash sweep: zero. Net: +56/-51 across 22 files plus 1 new cover.png. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * content(course): Iter 16 surgical fixes + v2 micro-lesson scaffolding + landing wiring ITER 16 SURGICAL FIXES TO V1 LONG-FORM CHAPTERS: Practicability HIGH: - should-you-hire Q1 gate fixed: dropped "2-5 pre-orders" pre-requisite (was misrouting correctly-graduated Sam to Validate loop). Q1 now matches Ch 2.1b synthesis BUILD criteria: 10+ Mom Test calls + ≥7 strong signals + Ch 1.2b smoke test ≥6%. - paid-pilot DPA anchor link 404 fixed: renamed H3 to "Copy-paste DPA template {#dpa-template}" with explicit anchor; link now resolves. - channel-selection Input corrected: "MVP from Module 5" → "Module 4 (Ch 4.3b)" - price-hypothesis case studies rewritten as one-time founding member (matches body advice on line 97; was using $/mo recurring labels that contradicted the chapter) - paid-pilot Mia $50 deposit footnoted (B2C marketplace convention: ~2× monthly fee; $500 floor is B2B SaaS convention) UI/UX HIGH: - Module-tag bugs fixed in 3 chapters: price-hypothesis (module-2 → module-1), clickable-prototype (module-3 → module-2), channel-selection (module-6 → module-5) - cover_image_alt added to 3 chapters: price-hypothesis, ai-persona, clickable-prototype - smoke-test-build duplicate Module/Step header in 1.2b deleted (Iter 14 regression) Learnability HIGH glosses: - must-have-segment-pmf-test TL;DR now leads with "This is the Sean Ellis PMF (Product-Market Fit) test" - mom-test-ask-about-past Input ICP gloss - smoke-test-7day TL;DR ICP gloss - self-serve-mvp-stack-build-phases orientation glosses RLS + webhook + idempotency inline - channel-selection Input ICP gloss; CAC inline gloss at first body mention - vibe-coding-ceiling-signals Signal 4-5 cascade glossed: SAML/SSO/Okta/ARR + BOLA + SOC2/HIPAA/BAA/PHI/PCI Readability: - self-serve-mvp-stack-lovable bold-glue CommonMark defect fixed - ai-persona placeholder mapping moved AFTER Prompt 1 (was wall-of-callouts before reader saw the prompt) - paid-pilot advanced objections converted from 4-col table to definition-list (mobile overflow) - mom-test-ask-about-past, find-10-people-where-to-look callout consolidation (top stacks ≤3 callouts) - form-your-founding-hypothesis Mermaid hero diagram added (was 4,349w longest chapter with no first-fold visual hook) - smoke-test-build inline pixel gloss Content voice: - ai-persona-pre-validation Ch 2.2 anonymous-founder vignette opener → reader-second-person teaching shape - should-you-hire orphan "her" pronoun fixed - vibe-prd-template title case fixed ("one-page brief Template" → "Vibe PRD Template") - 15 "Most founders" / "Founders who" instances swept across 12 rescue/management-tail chapters - mom-test-ask-about-past H2 "## The 5 questions most founders ask instead" → "## The 5 questions you'll be tempted to ask" - validation-tools-field-guide "A founder X / A founder Y" parallel pattern → reader-second-person - smoke-test-build "Carrd page with Mixo" → "page on Mixo" (mixed builder name confusion) - one-page-product-brief £800 → $800 (currency consistency) - find-10-people-where-to-look "Sam will verify" → "I will verify" (1st-person in 1st-person prompt) - find-10-people-with-problem-outreach "Pass 2 of Ch 2.1" phantom reference replaced V2 MICRO-LESSON SCAFFOLDING (UNTRACKED → SHIPPED): Per 30.03 course format requirements + 40.09 QA validation: - /quickstart/ — 1 page, 3-min read: minimal path for time-starved founders - /faq/ — 15 Q&A for typical blockers (Stripe, Mom Test, builder paralysis, asking for money) - /mom-test-lesson-1-5-questions/ — first lesson of QA-validated 3-lesson Mom Test sequence - /mom-test-lesson-2-emotional-flags/ — second lesson of sequence - /mom-test-lesson-3-run-score-interview/ — third lesson of sequence - /paid-pilot-micro-lesson/ — DPA + deposit + Stripe Checkout in 400-600 word format - /mom-test-5-questions-micro-lesson/ — earlier sample of micro-lesson format LANDING PAGE WIRING: - _index.md "Start here" callout now links Quickstart + How This Course Works + FAQ - New "What this course does NOT cover" section (7 explicit exclusions per 30.03 §5.1) Validators: 7/7 pass. Em-dash sweep: zero across all course chapters. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * docs(2605): strategic pivot - v1 long-form shipped → v2 micro-lesson migration Records the formal pivot from long-form course (shipped 22+ iterations of Sam-loop polish) to micro-learning format (per 30.03 spec). All project navigation docs updated so cold AI agents can pick up the migration work without re-discovering context. NEW CANONICAL DOCS: 30-39-architecture-design/30.03-course-format-requirements-for-creators.md - Canonical spec for v2 course format. Based on: Action Mapping (Cathy Moore), Minimalist Instruction Theory (Carroll), BJ Fogg B=MAP, Zeigarnik Effect, Dual Coding + Cognitive Load Theory, NN/g F-pattern eyetracking. - Target format: 20-25 micro-lessons × 400-600 words. Per-lesson 8-part template (Hook → Outcome → Concept → Visual → Do-Now → Error Recovery → Reflection → Bridge). - Includes: standard lesson template, module-level requirements, engagement design (low motivation, short attention), QA checklist, current → target migration guide (Options A/B/C), worked example (Lesson 1.1 micro-rewrite). 40-49-review/40.07-sam-experience-improvement-report-2026-06.md - 6 Sam-first improvement recommendations across 18 chapters. All 6 marked Done in TASK-TRACKER (Iter 14-15 work). 40-49-review/40.08-chapter-template-gap-report.md - Diagnostic audit: every v1 chapter scored against the 30.03 8-part template. **0/21 chapters score above 2/8.** The "starting state" map for migration. 40-49-review/40.09-mom-test-micro-lesson-qa-report.md - QA pass on the 3 Mom Test sample lessons + paid-pilot lesson. Validates the 8-part template applied correctly. Reference these as canonical implementation examples. ARCHIVED: - 10-19-research/10.07-icp-sam-persona-course-walkthrough.md → _ARCHIVED_10.07-... (superseded by 40.06 Sam journey + 40.07 recommendations) PROJECT NAVIGATION UPDATES (for cold AI agent continuity): GOAL-AT-A-GLANCE.md: - Added "Strategic Pivot (2026-06-07)" section explaining v1 status + v2 direction - Status changed from "🎉 shipped" to "🟢 v1 shipped + 🟡 v2 pilot in flight" - Migration plan with 4 phases (Phase 0 / Option C shipped; Phase 1 pilot pending) - Pointer to PROJECT-INDEX "For a micro-lesson migration agent" route PROJECT-INDEX.md: - New cold-agent route added at top: "For a micro-lesson migration agent" (7-step shortcut) - Files table reorganized: 30.03 + 40.08 + 40.09 promoted to CANONICAL/DIAGNOSTIC/EXAMPLES at top - 10.07 reference updated to _ARCHIVED_ marker - Status banner updated to reflect v1+v2 dual state TASK-TRACKER.md: - "Active Phase: v2 Migration Pilot" section added at top with current sprint focus - "What just shipped (2026-06-08)" recap of Iter 16 + Option C wiring - 3 next-sprint candidates listed: Phase 1 pilot, Phase 0 mechanical sweep, Module 2 micro-lesson nav wiring - Last-updated date refreshed; existing Course Migration Schedule (Phase 0-3) referenced WHAT THIS UNLOCKS: - Cold AI agent reading PROJECT-INDEX hits the migration route in first 30 seconds - 30.03 + 40.08 + 40.09 are 3-click reachable, marked as the authoritative format spec + gap map + worked example - The strategic decision (stop iterating v1, start migrating to v2) is recorded with rationale instead of buried in commit history - TASK-TRACKER lists concrete next-sprint candidates so the next session can start work without re-deciding scope Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * content(course) + docs(2605): Iter 17 - Phase 1 pilot review + one-case-story rule PHASE 1 PILOT REVIEW APPLIED: Lesson 1.2a (smoke-test-pick-builder-ship-page): - Cut Tomas case study; kept Mia by ICP-fit (B2C "use what you have" story lands harder for Sam than B2B headline iteration) - Bulletized Do-Now step 2 (6 elements as scannable bullets, was 1 paragraph) for mobile readability - Word count: ~580 → ~480 Lesson 1.2b (smoke-test-wire-tracking): - Cut Mia case study; kept Tomas by ICP-fit (invisible-CTA discovery is the universal builder-blind-spot pattern) - Trimmed GA4 paragraph to one optional line ("optional, install now if you'll want longer-term analytics") - Fixed 2 em-dash regressions inside case-study blockquotes (lines 88, 98 pre-cut) - Word count: ~560 → ~430, concept block now under 300-word cap SPEC UPDATES (so all future ~22 migrations inherit the rule): 30.03 §2.7 Case Study Narrative: - NEW critical rule: ONE case study per lesson (Tomas OR Mia), NOT two. Earlier draft used both — produced ~30% word-count drag. - ICP-fit picking rule: B2B-heavy concept → Tomas; B2C-heavy concept → Mia; universal concept → pick the sharper "Sam can see himself in this" story. - Explicit anti-pattern: do NOT alternate strictly Tomas/Mia/Tomas/Mia. Pick per-lesson by ICP-fit. 30.03 §8.1 #7 Case studies bullet: - Updated to supersede the earlier "one dedicated Case Study micro-lesson per module showing both founders" plan. Case studies are now per-lesson addenda, one character each. AGENT-PROMPTS.md: - Voice gates: added "ONE case study per lesson (NOT two). Pick Tomas OR Mia by ICP-fit per 30.03 §2.7." - Writing order step i: "Add ONE case study (Tomas OR Mia, pick by ICP-fit)" instead of "Add Tomas & Mia case studies" - Quality gates: added "Exactly ONE case study per lesson" TASK-TRACKER.md: - Phase 1 status flipped: "Not started" → "✅ COMPLETE 2026-06-08" - Added pilot findings table for cold agents (real time, gotchas, template refinements) - Updated "What just shipped" to reflect post-review trim (word counts now ~480/~430, not original ~580/~560) - Last-updated date refreshed CLEANUP (folded in from earlier session): - Removed 5 superseded v2 micro-lesson exploration drafts (~499 lines) - Archived 40.09 QA report (lessons it audited no longer exist; QA methodology pattern preserved) - PROJECT-INDEX updated to reflect archived 40.09 + removed lesson drafts - AGENT-PROMPTS.md (new this session) committed for cold-AI continuity - _ARCHIVED_40.09 committed with header note explaining the archive reason Validators: 7/7 pass. Em-dash sweep (content/course): zero. Phase 1 gate met; Phase 2 unblocked. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * content(course) + docs(2605): Iter 18 - Mixo-only pilot + case-study moved to module-end Restructure Phase 1 pilot from a 2-lesson split into ONE Mixo-only golden-path lesson. Move case studies from per-lesson addenda (Iter 17 rule) to one walkthrough page per module (new rule). Both shifts came from an ICP review finding the audit/ship split + per-lesson cases drifted Sam away from the single workflow he is actually running. Course content: - New: smoke-test-build-with-mixo (~790w, paste hypothesis -> 4 copy blocks -> hero swap -> publish -> stranger test). Carrd path collapsed to one-line `If this fails` fallback. - Delete: smoke-test-pick-builder-ship-page (audit framing assumed Mixo outputs labeled 6 elements; it doesn't, and the table positioned as a gate confused Sam) Spec (30.03 §2.7): - Supersede the one-case-per-lesson rule with one-case-per-module rule - Module case studies live at slug `module-N-walkthrough-<founder>` (continuous arc across all that module's lessons) - `See it in action` footer link added in the SAME commit that publishes the walkthrough page - never before (placeholder URL reads as a broken promise) Docs cleanup: - Delete AGENT-PROMPTS.md (cold-agent workflow consolidated into PROJECT-INDEX route + TASK-TRACKER + 30.03; was duplicated across three files) - LOW-IMPACT-IDEAS-BANK: park Plan B (split-by-path: AI lesson + manual lesson) with reader-data trigger (Carrd-fallback >=30%) - TASK-TRACKER: record Iter 18 + pilot finding that workflow-shaped lessons beat framework-shaped lessons for Sam - _ARCHIVED_40.09: em-dash sweep Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * content(course) + docs(2605): Iter 19 - tool-agnostic pilot lessons + Sam-glossing pass Reframe Lesson 1.2a from "Mixo-only" to a tool-agnostic AI-builder workflow, with Mixo as the worked example and Manus AI / Durable as named equivalents. Apply convergent cold-eyes critic findings to both pilot lessons: heavy glossing for non-technical first-timer (Sam), template-label H2 removal, voice cleanup. Pilot lessons are now the canonical pattern for Phase 2. Why tool-agnostic: AI page builders have short half-lives. A title pinned to "Mixo" reads as obsolete the moment Mixo gets acquired, sunsets, or is replaced. The curriculum should outlive any one tool. Title and slug deliberately describe the action ("Build Your Smoke-Test Page with an AI Page Builder") and the workflow ("generate, tighten, publish"); the example tool can be swapped with a 5-line edit. Lesson 1.2a (renamed: smoke-test-build-with-mixo -> smoke-test-build-page) - Title: "Build Your Smoke-Test Page with an AI Page Builder (45 minutes)" - Concept block names 3 AI builders + 1 manual-mode fallback; workflow is identical across them; UI labels in the walkthrough are Mixo-specific - Glossed for Sam: smoke-test page, AI page builder, CTA, hero image, incognito window, Founding Hypothesis blank-name reminder - Removed template-label H2s ("## Do this now", "## If this fails") - these are 30.03 §2.5/§2.6 writer-only scaffolding that must not appear in published text. Fix: convert to inline bold-sentence-start blocks. - Dropped "Carrd-only" fallback. Now: "if no AI builder fits, drop to manual mode" routes to Carrd (free for 3 sites; gotcha noted) - Added page-anatomy.svg (hand-drawn style, 800x600 viewBox, mobile-readable) - 914w (over the 800w pilot ceiling by ~14%; trade-off documented in PROJECT-INDEX: jargon decode beats word count for Sam) Lesson 1.2b (smoke-test-wire-tracking) - Glossed: snippet, head tag, heatmap, session recording, Meta Pixel, LinkedIn Insight Tag, Reddit Pixel, Google Analytics 4, incognito window - Removed inline 5-builder cheat sheet (Carrd/Framer/Mixo/Manus AI/Durable) that contradicted the 1.2a single-golden-path principle. Now uses generic "your page builder's head-tag field" - Removed "## Do this now" template-label H2; removed "## If this fails" H2 - Resolved the "skip the verification and move on" tension in the If-blocked footer (corroded the lesson's own Success check). Now: wait one hour, re-check - Created the missing tracking-snippets.svg referenced by the markdown but never authored (silent broken-image since Iter 16) - 643w (over the 600w spec ceiling by ~7%; glossing density justifies) Cross-references fixed: - Lesson 1.1 had 3 internal links to /smoke-test-build-landing-page/ - a phantom slug that never existed. Updated all 3 to /smoke-test-build-page/ - 1.2b Input line updated to reference 1.2a's new slug - PROJECT-INDEX cold-agent route updated to point at smoke-test-build-page - TASK-TRACKER "What just shipped" updated Validation: - Hugo build: clean (713 pages, 5.7s) - bin/validate-course: 7/7 pass - Em-dash sweep: clean across all 3 edited lessons - Cold-eyes 2-persona review (AI-feel + Sam-ICP) findings synthesized and applied; convergent findings (template label leak, slogany flips, glossing gaps) all addressed Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(2605): strategy cleanup - ONE ICP (Sam) + 5-module spine across 20.* docs + 40.06 corrigendum Consolidate the 20-29-strategy/ folder around the corrected ONE-ICP direction (Sam = first-time non-technical founder, no PM background, no tech expertise, NO burn history). Archive the 8-module-spine docs that pre-dated the 5-module merge. Rewrite the positioning doc that pinned the course to Alex (the burned-founder website ICP). Add a corrigendum to 40.06 redirecting to the corrected Sam profile in memory + the new 40.11 simulation report. 20.01 Course Modules (rewritten as thin successor) - Replaces obsolete 8-module spine doc; archived as _ARCHIVED_20.01-course-modules-8-module-spine.md - Documents the 5-module spine with input/output/checkpoint/artifact per module - Names Sam as the locked course ICP (no Alex, no burn history) - Points at canonical truth sources: data/course_sequence.yaml + 20.10 (spine decision) + 20.11 (migration roadmap) + .agent/prd/PRD.md + 30.03 (lesson template) - Notes Module 0 (self-assessment) is deprecated; routing now via landing-page callouts 20.02 Positioning vs Paid Courses (rewritten Sam-first) - Old: course positioned as "how to keep oversight of devs you already hired" (Alex) - New: course positioned as "free first-time founder beginner path - idea to first paying customer without writing code, hiring, or spending more than $50" (Sam) - One-sentence positioning rewritten - Three buyer states recalibrated: Sam fits none of Builder/Operator/Manager, hence the gap the course fills - Competitor matrix axes recalibrated to Sam: "first-time founder beginner path?", "tool-agnostic + 2026?", "free + indexed?" - "What we will NOT claim" expanded with tool-pinning ban (per feedback_course_lessons_tool_agnostic) - "14-post curriculum" updated to "5 modules / ~25 micro-lessons" - Sophia Matveeva now named as closest paid competitor 20.08 Spine-2 Audit (archived) - Renamed to _ARCHIVED_20.08-spine-2-audit-8-module.md - 34-chapter audit against 8-module spine that no longer exists - Per-chapter decisions superseded by data/course_sequence.yaml + 20.10 20.09 Spine-3 Rollout (surgical corrigendum) - Added corrigendum noting 6-module count drift to 5-module (per 20.10) - Added ICP refinement: Sam also lacks PM background (every MVP/PMF/sprint/backlog reference needs first-mention gloss) - What still stands: audience definition, competitor positioning, critical distinctions section, cuts/folds/demotes decision logic - What is superseded: 6-module count, implicit PM-aware reader assumption 40.06 Sam customer journey report (corrigendum redirect) - Added corrigendum at top redirecting to corrected Sam profile in memory + 40.11 Sam simulation report + .agent/prd/PRD.md - Notes the original report attributes Alex's $80K devshop history to Sam (wrong) - Preserves the trust-curve methodology + per-chapter trust scores (they measure ICP-fit, which survives the correction) - Per-chapter emotional framing flagged: read as "intimidation -> relief" (first-timer Sam), NOT "shame -> relief" (post-burn Alex) - Full per-chapter rewrite deferred; the corrected ecosystem (PRD + 40.11 + memory file) is the canonical Sam reference going forward Memory file (feedback_course_icp_sam_profile.md) - Renamed from feedback_course_icp_sam_newbie_not_alex.md (drop the "_not_alex" tail) - Content rewritten as positive Sam-only definition (no Alex framing) - Adds tech-expertise = ZERO (Notion/Stripe/Gmail only, never seen GitHub) - Adds PM-expertise = ZERO (never written PRD/run sprint/done interviews) - Adds capital ($20K-$50K from savings, pre-revenue) - Updates trust trigger: "predicts my next mistake before I make it" Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * content(course) + docs(2605): pilot-first strategy sync + skills PRD-aware + PM health update Strategy: iterate 2 pilot lessons to ideal before Phase 2 fan-out. 4 pilot gate criteria: (1) Sam-review 6/6, (2) 5-Sam validation, (3) 30.03 §7 QA, (4) template refinements documented. Course skills (5 files): - Add PRD, tasks.json, roadmap refs to all skills - Write skill: task awareness, current progress, pilot guard - Review-sam: 30.03 spec, 40.11 simulation, 5-Sam pilot note - Validate: PRD ref, 30.03 §7 cross-ref clarification - SVG-draft: canonical v2 pilot SVGs prioritized over v1 - Skills-map: phase statuses, task-ID mapping table Docs: - GOAL-AT-A-GLANCE: pilot iterating status, gate criteria - PM health report (40.10): RAG 77.15→76.40, pilot-first recs - Sam simulation (40.11): beat-by-beat, 5 themes, fixes applied - Roadmap (20.11): Now/Next/Later with dependency graph - TASK-TRACKER: 5-Sam pilot steps, surgical fixes entry - PROJECT-INDEX: registered 40.10, 40.11, 20.11 Pilot lessons: - 5 Sam-simulation surgical fixes (~80 words): Mixo re-prompt, head-tag path, domain Q, incognito shortcuts, preview-mode note Archived: 10.06 (superseded), SPRINT-RUNBOOK (stale), 50.01 (stale) * content(course) + docs(2605): Iter 20 - live-reader UX fixes + 30.03 tool-walkthrough band Apply live-reader gap findings from desktop walkthrough of localhost pilots: Sam asked HOW he gets value props (the lesson said "rewrite" but not where they appear, or what to do if Mixo's drafts are bad) and HOW he sources a hero image (the lesson said "replace with customer's pain" but never explained the sourcing path - could AI help?). Update both pilots with the answers + Sam- glossing pass; codify the resulting 600-900w pilot pattern in 30.03 §1.6. Lesson 1.2a (smoke-test-build-page) - 935w -> 973w - Step 2 Value props sub-bullet expanded: names where Mixo drafts value props (row below sub-headline, often labeled "Features" or "Why us"), what to do if drafts read generic (Claude/ChatGPT prompt with verbatim template), and why this matters (outcome vs feature framing) - Step 3 Hero image expanded with AI generation path: names ChatGPT/Claude/ Gemini explicitly, gives a copy-paste-ready prompt template ("Photorealistic image: [pain scenario]. Candid, natural lighting, no text or logos."), preserves the delete-fallback for time-starved Sam - Orientation callout: added [CORE] tag per 30.03 §3.4 - Tightened: AI builder paragraph (-20w), "Never Buy now" split into 2 sentences (under 20w cap each), Step 4 consolidated, Step 5 cross-browser shortcuts compressed (Chrome/Safari/Edge share one shortcut, Firefox split out separately), Carrd fallback dropped the $19/year detail Lesson 1.2b (smoke-test-wire-tracking) - 643w -> 709w - Hook rewrite: replaced banned voice pattern "Most founders spend their first $300 of ads..." with forward-prediction framing ("Without tracking, the typical smoke-test result is unreadable: hundreds of ad clicks, only a handful of signups..."). Drops the cost-stacked tri-list opener pattern flagged in 90.11 voice guide. - Concept block ad-platform pixel bullet: added B2C/B2B inline gloss with routing ("For consumer products (B2C), use Meta Pixel or Reddit Pixel. For business products (B2B), use LinkedIn Insight Tag."). Sam doesn't know B2B/B2C without first-mention gloss. - Step 3 clarification: "You will not run ads yet; the pixel just collects data so the platform is ready when you do in Lesson 1.3." Resolves the unstated assumption that pixel install != ad campaign launch. - Orientation callout: added [CORE] tag 30.03 §1.6 Word Count Bands - new tool-walkthrough band (600-900w) - The standard 400-600w band doesn't accommodate tool-walkthrough lessons with agnostic framing + Sam-glossing. The deep-dive 700-1,200w band is for optional companion pages, not core path. Adding a fourth band: Tool-walkthrough lessons (action-heavy with tool-agnostic framing + Sam-glossing): 600-900 words. Rationale documented inline. - Pilot validation snapshot added: 1.2a 935w (now 973w) and 1.2b 680w (now 709w). Both confirm the new band is the right shape. 30.03 §5.2.1 - Sam's assumed toolset (new subsection) - Documents what Sam is assumed to already have before any course lesson: web browser (any modern), personal email, smartphone, ONE AI chat tool (ChatGPT, Claude, or Gemini - any free tier). This formalizes the "AI-augmented at every step" assumption from feedback_course_icp_sam_profile. - Documents what Sam is NOT assumed to have: paid subs, custom domain, credit card on file, dev/PM tool accounts. Lesson authors verify before writing "open [tool] and do X" steps. Visual verification (chrome-devtools at 390x844 mobile): - 1.2a Step 2 value props bullet renders cleanly with bold tool names + italic prompt template - 1.2a Step 3 hero image renders cleanly with bold ChatGPT/Claude/Gemini + italic prompt template - 1.2a Step 5 cross-browser shortcuts compact - 1.2b Step 3 ad-platform routing renders cleanly - SVGs (page-anatomy, tracking-snippets) render correctly on mobile Validation: - Em-dash sweep: clean across both pilots - bin/validate-course: 7/7 pass - Hugo build: clean (713 pages, 4.7s) - Word counts: 1.2a 973w (upper edge of 600-900 band; +73 over the formal ceiling, accepted as the tool-walkthrough pilot pattern); 1.2b 709w (comfortably mid-band) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: AGENTS.md — replace course-specific skill lists with generic project onboarding Remove 2605-specific sections (course skills, critical global skills, Sam references, Phase 3+ skills). Add Projects section: - Standard onboarding path: PROJECT-INDEX → GOAL-AT-A-GLANCE → PRD → tasks.json → TASK-TRACKER - Project health: .agent/STATUS.md + PM health reports - Skills: .skills/ (project-specific) + skill tool (global) - Key commands: hugo-build, rake test:critical, validate-course * content(course): course design audit — syllabus drift fix + wire-tracking restructure + M1 rubric Syllabus drift fix: - course_sequence.yaml: add smoke-test-wire-tracking entry, fix 1.2a slug (smoke-test-build-landing-page → smoke-test-build-page), renumber old 1.2b→1.2c (run test), update chapter count 20→21 - _index.md: update M1 links to v2 pilot slugs, add wire-tracking lesson Wire-tracking (1.2b) restructure: - Strip 5 commodity install steps → compact 3-line box - Channel-dependent tracking: Google Ads → GA4 (pre-integrated), Meta/LinkedIn/Reddit → platform pixel + GA4. Both paths + Clarity (diagnostic) - GA4 promoted from afterthought to mandatory analytics foundation - Clarity repositioned from primary to diagnostic - Add ad platform links (Meta/LinkedIn/Reddit/Google Ads) in concept block - Fix stale Lesson 1.3 references → 1.2c Pilot enhancements: - 1.2a: add emotional acknowledgment + progress visibility callout - 1.2b: add progress visibility callout, update bridge to 1.2c 1.2c: renumbered 1.2b→1.2c (title/og_title/callout), replace old slug refs New: docs/.../30.04-m1-assessment-rubric.md — per-lesson + module-exit rubric * content(course): strip 1.2a commodity steps - 6-step Do-Now -> compact build box * content(course): full M1 conversion to 8-part template micro-lessons Convert 3 remaining v1 lessons (1.1, 1.2c, 1.3) to 8-part template: - 1.1 form hypothesis: 4315w -> 708w (Mad Libs sentence, 4-lens PASS bar) - 1.2c run smoke test: 2437w -> 741w (channel fork, go/iterate/kill table) - 1.3 price hypothesis: 3080w -> 783w (Maya story, Stripe Payment Link) Create 3 companion reference pages from preserved v1 content: - reference/hypothesis-sprint-full: full 6-step Click sprint, AI prompts - reference/smoke-test-channel-guide: channel budgets, ad setup timing - reference/stripe-price-test-full: full Stripe setup, threshold bands Add 3 SVG diagrams (hypothesis-mad-libs, smoke-test-signal, stripe-payment-link). Update course_sequence.yaml goals to match micro-lesson outcomes. Fix Meta link consistency in 1.2c. M1 now fully in 8-part format: 5 lessons (708-896w each) + 3 companion references. * docs(2605): update M1 rubric for compressed 8-part template lessons Reflect actual v2 micro-lesson structure: - Update all 5 lesson goals to match micro-lesson outcomes - Add word counts (708-896w band) - Add channel-dependent tracking criteria (GA4 + pixel fork) - Add companion reference links per lesson - Add button copy quality + click-vs-completion criteria for 1.3 - Add hero image criteria for 1.2a - Add 5-artifact chain check to module exit rubric * fix(course): remove type:reference from companion pages (Hugo 404) Hugo silently fails to render pages with type: reference when no matching layout template exists. hypothesis-sprint-full returned 404. Removing the custom type lets Hugo fall back to _default/single.html. All 3 companion pages now render correctly. * style(course): replace em dashes with regular dashes in all 5 M1 lessons + companions Voice guide 90.11 §3: Use regular dashes (-) not em dashes (—). 46 em dashes replaced across 8 files. * content(course): add M1 walkthrough page (Mia) + See it in action footers Module 1 case study walkthrough: Mia builds TutorMatch through all 5 lessons. 4-beat arc per lesson (input -> challenge -> action -> result). Follows 30.03 section 2.7 format: brief intro, one section per lesson, artifact summary, bridge to Module 2. Add "See it in action" footer lines to all 5 M1 micro-lessons, linking to the walkthrough page (same commit per spec). * style(course): fix em dashes in M1 walkthrough page (missed in ea2c385) * fix(course): add lesson links to M1 walkthrough section headers Convert 5 plain-text H2 section headers to clickable markdown links pointing to actual micro-lesson pages. Completes bidirectional linking: walkthrough <-> micro-lessons (via See it in action footers). Verified end-to-end in Chrome: walkthrough -> micro-lesson -> companion -> back to walkthrough. All links return 200. No console errors. * fix(course): merge dual Result beats in M1 walkthrough 1.3 for strict 5/5/5/5 4-beat parity Merged **Results:** (data bullets) + **Result:** (insight) into single **Result:** beat. Preserved click-through rate (6%) inline as bridge metric from 1.2c. Achieves strict 5 Input / 5 Challenge / 5 Action / 5 Result across all 5 lessons. * style(course): voice guide fixes in hypothesis-sprint-full companion 3 fixes (90.11 compliance): - Replace 'deep-dive' (banned phrase) with 'deep reference' - Rewrite routing rule to break 4-fragment sustained staccato - Split 80-word Money lens paragraph at natural pivot point * fix(course): 3 Sam-review Cycle 6 fixes in M1 walkthrough 1. Fix 1.2c→1.3 bridge: change premature "advance to Module 2" to "advance to the price test (Lesson 1.3)" — restores 4.8% vs 6.5% data contrast that teaches variant segmentation. 2. Fix 1.2a→1.2b bridge: add explicit transition "Now she needs to know who visits" before tracking lesson Input. 3. Fix 1.2c specificity: change "two ad variants with the same budget split" to "two ad variants, $200 each" — explicit dollar amount. * fix(course): reframe 1.1 and 1.2b outcome lines as human outcomes, not grading rubrics 1.1: replace "scored >=14/20 across four lenses..." with "a stranger reads and either says that is my problem or not me - instead of sounds great" — moves scoring criteria to success check where it belongs as a quality gate, not the first impression. 1.2b: replace tool-heavy "GA4 + Google Ads tag, or your platform pixel, plus Clarity..." with "see who visits and what they click - before you spend a dollar on ads" — frames WHY tracking matters in money terms the burned founder cares about. Both fixes address Sam persona feedback: outcome lines should name the human outcome (what changes for the founder), not the internal deliverable spec. * docs(2605): add OUTCOME vs OUTPUT rule to 30.03 section 2.2 Prevent scoring rubrics and tool lists from front-loading outcome lines. Codifies the problem found in Sam persona review: outcome lines like "scored >=14/20 across four lenses, with no blank below 2" overwhelm a non-technical founder who has not yet learned what those terms mean. New rule: The outcome line is a human result, not a grading rubric. Scoring criteria and tool details stay in section 2.3 (concept block) and section 2.5 (success check) where they belong as quality gates. Includes before/after example table from actual 1.1 and 1.2b fixes. * fix(course): replace em dashes with -- in new 1.1 and 1.2b outcome lines Em dashes accidentally introduced in outcome line refactoring. Replaced with voice-compliant space-dash-dash-space pattern. * fix(course): apply 4 remaining multi-persona review fixes to M1 1. 1.2b time estimate: 10 min -> 25-35 min, explain account creation 2. Cost summary: add total M1 cost (~$325-625) to 1.3 footer 3. Walkthrough debugging beat: Mia pastes Clarity in body field, fixes in 30s. Realistic friction, teaches debugging. 4. Channel sequencing: add quick-rule channel selector to 1.2b step 1 so student can install tracking without reading 1.2c first. Done When tightened to require pixel+Clarity, not just one. All 4 from Sam+Practitioner+Deep Analyst multi-persona audit. * fix(course): add lens subheading to 1.1 + first-occurrence link rule + fix 6 unlinked services * fix(course): remove non-critical time estimates from 1.2a and 1.2b * fix(course): 10-perspective M1 review - 15 fixes applied across all 5 lessons * fix(course): add campaign creation recipes to channel guide + wire 1.2c step 2 Structural issue A fix: step 2 was a black box ("Launch the campaign"). Now links to 4 platform-specific recipes (Meta, Google, LinkedIn, Reddit) each covering objective, budget, audience, placement, creative, tracking, launch — conceptual settings durable against UI changes. Budget note prevents 300-visit mismatch with conservative starter budgets. * fix(course): resolve 1.2b/1.2c channel sequencing circularity Structural issue B fix: 1.2b is now channel-independent (Clarity + GA4 only). Channel-specific pixel install moved to 1.2c step 1. 1.2b changes: - Concept block: removed "If Google... If Meta/Reddit/LinkedIn..." conditionals. Now teaches only Clarity + GA4 (universal). - Do-Now: removed pixel step and quick-rule, simplified to 3 steps. - Error recovery: pixel error → GA4 error. - Footer: Output/Done When/reflection all reflect Clarity+GA4 only. - Frontmatter: description and keywords updated. 1.2c changes: - Input: "tracking installed" → "Clarity + GA4 installed" - New blockquote: "Pixel first" callout before Do-Now - New step 1: install channel pixel (with Google Ads skip) - Steps renumbered 1→5. Deeper reference updated. Dependency now linear: 1.2b installs universal tracking → 1.2c picks channel → installs pixel → launches campaign. * fix(course): make 1.3 step 3 tool-agnostic (Mixo + Durable paths) Structural issue C fix: step 3 was Carrd-only ("On Carrd: create a hidden section..."). Now covers all three builders from 1.2a. - Adds Mixo path: redirect to main page URL - Adds Durable path: create /thanks page - Keeps Carrd path: hidden section + anchor URL - Restructured as clear two-option fork (skip vs set) - Acknowledges Mixo same-URL tracking is rougher but works * fix(course): medium-priority fixes - Do-Now consistency + description trims Do-Now headers: all 5 M1 lessons now have consistent blockquote-prefixed action labels. - 1.1: > Write: (was unlabeled numbered list) - 1.2a: > Build: (pre-existing) - 1.2b: > Install: (pre-existing) - 1.2c: > Launch: (was unlabeled numbered list) - 1.3: > Price: (was unlabeled numbered list) All steps nested inside blockquotes with > prefixes for visual consistency. Description trims (SEO 120-155 chars): - 1.2a: ~170 -> ~145 chars - 1.2c: ~170 -> ~120 chars - 1.3: ~185 -> ~120 chars 1.2b: Fixed backwards capitalization of "Founding Hypothesis" -> "hypothesis" in concept block. * fix(course): 6 fixes from M1 practitioner walkthrough audit CRITICAL: restored GA4 property creation instruction in 1.2b (accidentally deleted in structural fix B). MEDIUM: - 1.2a step 4: Mixo image upload location + AI image gen split into two-path fork (Gemini vs Unsplash/Pexels) - 1.2a: async fallback for one-stranger clarity test (Loom recording or subreddit post) LOW: - 1.2c step 1: named all three platform managers (Meta Events Manager, LinkedIn Campaign Manager, Reddit Ads Manager) - Channel guide: new "Before Your First Campaign" subsection with platform-by-platform account creation steps + timing cross-reference * content(walkthrough): update Mia M1 walkthrough for structural fixes 1.2b: Mia now installs only Clarity + GA4 (channel-independent). Meta Pixel deferred to 1.2c per structural fix B. 1.2c: Mia installs Meta Pixel as first action, then follows the campaign creation recipe from the channel guide. Input updated to "Clarity + GA4 installed." 1.3: Added Mixo redirect path mention (same-URL, rougher but works) per structural fix C. * content(walkthrough): polish Mia walkthrough - pixel sequencing + narrative tone - Tracking bullet now shows install order: Clarity+GA4 (1.2b), Meta Pixel (1.2c) - 1.2b Result softened from checklist tone to natural narrative: "She made a note: install Meta Pixel…
pftg
pushed a commit
that referenced
this pull request
Jul 10, 2026
Every M4/M5 lesson now carries the full v2 template: Progress chains (M4 · n of 5, M5 · n of 7), TL;DRs, Done/You-have-now/Next/If-blocked footers, optional-lesson routing (4.5/5.2/5.7). Hardcoded Artifact #5/#6 indexes retired into You-have-now; all 11 in-lesson Tomas & Mia case blocks removed (walkthroughs carry them); glosses at first mention across all pages (2FA, IAM, RLS, webhook, DPA, procurement, Loom...); cohort-generalization near-misses, 35-prospect drift, rescue framing, single-point rates, and Stripe rate hardcode fixed; 5.1 core-routing self-contradiction (5.2 vs 5.3) resolved. HTCW M4/M5 tables expanded to the full 4.1-4.5 / 5.1-5.7 shape; quickstart optional-skip notes. Case-study ban scope extended to all M4/M5 slugs; 18 new signatures (2 narrowed after catching legitimate band/dialogue rates). 8/8 validators green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
pftg
added a commit
that referenced
this pull request
Jul 10, 2026
…arm + 2 cold-eyes rounds) (#353) * refactor(course): flatten M4/M5 lettered indexes to 4.1-4.5 and 5.1-5.7 Same consistency rule as the M2 flatten (letters retired): 4.3a/4.3b → 4.3/4.4, ceiling signals → 4.5; 5.3a/b/c → 5.3/5.4/5.5, paid pilot → 5.6, outbound → 5.7. Slugs stable. yaml titles/modules, frontmatter, landing cards, quickstart/FAQ/HTCW, ~120 cross-references across 29 files, collective phrasings (4.3 a+b → 4.3-4.4, 5.3a/b/c → 5.3-5.5). v1 'Step N of M' banners replaced with v2 Lesson headers (4.5/5.2/5.7 marked OPTIONAL). Also fixed: two pre-existing operating-kit links labeled 5.4 but pointing at outbound (now 5.7), and stale old-M1 'Ch 1.2 (a + b)' lettering in validation-tools-field-guide. 8/8 validators green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * feat(course): Modules 4+5 v2 - all 11 lessons converted (6-agent swarm) Every M4/M5 lesson now carries the full v2 template: Progress chains (M4 · n of 5, M5 · n of 7), TL;DRs, Done/You-have-now/Next/If-blocked footers, optional-lesson routing (4.5/5.2/5.7). Hardcoded Artifact #5/#6 indexes retired into You-have-now; all 11 in-lesson Tomas & Mia case blocks removed (walkthroughs carry them); glosses at first mention across all pages (2FA, IAM, RLS, webhook, DPA, procurement, Loom...); cohort-generalization near-misses, 35-prospect drift, rescue framing, single-point rates, and Stripe rate hardcode fixed; 5.1 core-routing self-contradiction (5.2 vs 5.3) resolved. HTCW M4/M5 tables expanded to the full 4.1-4.5 / 5.1-5.7 shape; quickstart optional-skip notes. Case-study ban scope extended to all M4/M5 slugs; 18 new signatures (2 narrowed after catching legitimate band/dialogue rates). 8/8 validators green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * feat(course): Module 4 + Module 5 Mia walkthroughs + See-it-in-action wiring module-4-walkthrough-mia (worksheet routes her self-serve, domain transfer from the ownership audit, nine-evening build, RLS hole caught by the AI audit prompt) and module-5-walkthrough-mia (38% overall / 55% in-segment on the 40% test, warm fifty -> 22 replies -> 9 demos, group-organizer DPA with deposit, 5.7 deliberately unopened). See-it-in-action links added to all 12 M4/M5 lessons in the same commit per 30.03 §2.7. Cascade-corrupted range refs (4.3-4.5, 5.3-5.7) from the renumber sweep fixed in 10 sites. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): scroll-gate round on M4/M5 - mermaid walls compressed, old-spine ghosts removed 4.1 decision tree 1897px->1017px and 4.2 ownership flow 1608px->1051px (diamonds->rects, labels tightened); all 6 M4/M5 mermaids now under the 1600px wall, zero overflow. Old-spine ghosts found by the gate: pivot-or-persevere still carried chapter 7.1/7.4/7.5/7.6 refs (+ 7.6 og_title) and churn-triage carried chapter 7.6 + 'chapter 8/9' mermaid nodes + pivot-ledger.svg said 'Chapter 5.5 floor' - all repointed to the current spine (5.1, 5.7) or named Going Further chapters. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): round-1 cold-eyes fan-out resolved (34 findings, 4 lenses) Canon: Mia's pilot deposit $400->$600 (three reviewers converged - it was below 5.6's own $500 floor and the course-wide gate); M4 walkthrough Q-routing now matches 4.1's actual tree (Q4=yes -> self-serve); build pace anchored to the part-time calendar 4.4 teaches. Structure: Part 1/Part 2 framing retired (4.3/4.4 are lessons, not parts); 5.2's stale off-template mini-footer deleted; 4.1/4.2 Next lines carry the handoff clause + separators; 4.5's ownership-checklist enumeration aligned to 4.2's real 12 items; cover/OG frontmatter added to the 5.3/5.4/5.5 trio (covers existed, never wired). Voice: 4 blocker dodges fixed (lowercase 'most founders', workload- claim rewording, 'we picked up in Q1', voice-guide banned TL;DR phrasing); walkthrough aphorism stacks flattened; reveal-twist + anaphora + canon-quote reuse removed; fabricated-precision stats dropped; Loom/Calendly 'free' cost-tags removed; reply-rate baseline unified at 10-15%; 5.6 demo-source mislabel 5.3->5.5; 5.3 tally no longer assumes optional 5.2. 11 new ratchet signatures. 8/8 validators green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): ratchet aftershocks - 2.4 Part framing, worksheet rescue framing, signature scoping The new signatures caught: 2.4 calling itself 'Part 2 of 2' (same disease as 4.3/4.4, survived the M2 sprint), the build-path worksheet's 'we picked up in Q1 2026' rescue framing on the core path, and the 5.1 frontmatter description. 'we picked up in Q' signature scoped so the Going Further rescue chapters keep their legitimate framing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): stranger-review adoptions - reader-trust fixes 5.1 opener reframed as the explicitly-labeled failure mode (was describing a $4,200-ads founder the course ICP is not); 'no coding required' tension defused at the two spots a non-technical reader balks (RLS check labeled copy-paste-not-programming, Console check de-jargoned to press-F12-look-for-red); Mia's founding-members vs first-customer tension named head-on in the M5 intro (pre-sold promise vs product-earned money); 'exactly as the lesson predicts' too-neat tell removed; Mia's $600 deposit now shows its math (25% of a $2,400 group plan, inside the 10-30% band); $500-gate vs low-ACV-path contradiction reconciled in quickstart + HTCW (both spots); one callout in 4.4's warning wall demoted to prose. Kept per the reviewer's dont-break list: 4.1 decision matrix, 5.6 DPA package + objection table, landing NOT-covered section, 4-slot footers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): round-2 fixes - spine contradiction, claims corrections, realistic funnels Spine: M4 ceiling unified at ~5,000 users (4.4 said 10K twice against 4.1/4.3's 5K); pivot-or-persevere 'eight Founder OS artifacts' -> six; 5.7 Stripe fee de-hardcoded to match the rest of the course. Claims: vibe-coding term correctly attributed to Andrej Karpathy (Levels kept as practice exemplar); 'Sean Ellis has written ten responses are directional' misattribution -> course's own caveat; '14-day ICANN-mandated' -> practical buffer (5-day approval + 60-day lock are the real rules); Figma/Retool first-customer stories softened to 'reportedly'; Lenny survey precision (21 companies, 60/35/5) reduced to what the article verifiably says; Airbnb 'WordPress' detail dropped; Common Paper / Ash Rust attributions softened; Maven course links to the bare homepage unlinked (platform-table link kept); WorthBuild (unverifiable vendor) removed from 5.2 + HTCW; domain price unified ~$10; cold-outbound funnel restated with 3-8% realistic band (10-15% as ceiling) and reply/demo math made internally consistent; 4.4's survey pre-flight aligned with 5.1's 10-directional/20-useful floor. Also: Founder OS folder now established in 1.1 pending - see next commit if split. Ratchet entries from r2-diff scoped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): 1.1 establishes the Founder OS folder the whole chain references 2.1 and every later module save artifacts 'in the same Founder OS folder as your Founding Hypothesis' - but 1.1 never created it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * docs(2605): 40.16 M4+M5 release gate + tracker/index status Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * feat(course): landing surfaces all five Mia walkthroughs + artifact-count decoupling r3 landing cold-eyes (no blockers): M3/M4/M5 cards now carry the same 'See it in action' walkthrough links as M1/M2 - the Mia through-line no longer disappears at the payoff modules; the 6-artifacts sentence no longer equates the count with the five You-leave-with lines. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V * fix(course): round-3 regression sweep resolved (8 findings, 2 blockers) Blockers: garbled edit-merge sentence in 4.5's scoreboard step ('Score green when the symptoms are firing...') repaired; 5.1's two out-of-6 verdict tables gave opposite answers at 2/6 and 4/6 - intro block conformed to the conservative special-case bands (0-2 NO / 3-4 MAYBE / 5+ STRONG YES). Also: 4.2 Item #7 explanation no longer folds into the Good-example blockquote; 4.5's orphaned 'Both' regained its either/or antecedent; 5.7's mermaid + TL;DR yield claims aligned with the body funnel (1-4 replies, ~one pilot per batch); ICANN gloss now cites the real 5-day/ 60-day windows; onramp-phase account attribution fixed in 4.4; 5.6 sector fee bands annotated as procurement-capped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V --------- Co-authored-by: Paul Keen <pftg@Pauls-MacBook-Pro.local> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
pftg
pushed a commit
that referenced
this pull request
Jul 24, 2026
Code-review of the rescue-sprint kit before first sends. Fixes: - Joy Adamson routing (SEND-SHEET msg 5, opener #3, prospect row 3): her quote is a comment on Nico Casavecchia's post; copy said 'your post' and pointed Paul at Nico's thread. Now says 'your comment', with a DM-via-profile routing note. - Pre-send gate added to SEND-SHEET + backlog Next: confirm NeetoCal S0 checklist (URL resolves 200, but event setup unchecked), tracking sheet, msg-5 routing — THEN send. - New rescue-sprint/pipeline.md: send/reply/booking ledger so A0 kill-criteria (~20 touches / ~10 calls) are countable; added as P10. - SEND-SHEET next-batch fixed: #6-10 → #4-#8 (batch 1 used #1-3,#12,#13; #4/#5 are the highest-trigger unsent rows). - Channel contradiction resolved: openers' thread-reply choice supersedes prospect-list 'IH DM' column (note added); SEND-SHEET labels actions. - Retention claim unified to sourced 5-year average (one-pager, four-forces) per warm-intro sourced-claims registry; was 3-year/'three years' in two docs. - Rows 16-17 downgraded to semi-ICP (pre-build/partner-seeking; audit offer may not fit) with send-last note. - P3 (HN) marked retired venue (0 rows, dev-dominated) so no future session re-runs it; kanban board noted as local-only. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Aug 19, 2026
… log the session Paul chose Option B over my recommendation: keep the negative-parallelism shape available under a stated exception rather than banning it outright. ATTRIBUTION TEST (new, voice-guide 90.11 §3). "X is not Y; it is Z" is legal only when the text NAMES WHO holds the negated belief within one sentence of it. Holub earns it - "There are many programmers who don't seem to get that". The line cut from reaction-claude-code-trust did not: nobody was named as believing the code was bad, and deleting the negation lost nothing. Worded mechanically on purpose. "Is this a belief the reader really holds?" is unenforceable - every writer thinks their own strawman is real, and this pattern already mass-regressed here once (25+ instances across M1-M3, caught by the 4-persona panel 2026-05-28). "Is there a named population in the adjacent sentence?" is checkable in two seconds by anyone. Synced across all three surfaces that stated the ban: 90.11 §3 (both the Negative parallelism row and a new worked section), .okf/content/voice-rules.md, and the LinkedIn AI-score rubric. reference-examples.md's Holub entry now explains why that quote is the legal case rather than an exception nobody documented. PIPELINE - two rules that existed but could never fire: - story-bank.md says "before drafting, pull from here; if the detail isn't here, interview Paul" and was absent from the mandatory reads AND the 20-item checklist. Added as read #5 plus a BLOCKING checklist step. This is the session's most expensive miss: ~6 correction rounds across two posts, both of which only worked once Paul supplied real material. - reference-examples.md added as read #6, with the warning that an imitation doc endorses every property of its samples. EXHIBIT FIX, caught by the frontmatter rather than by any gate: the banned "The gap isn't tech - it's information" was removed from the vendors post body earlier today and kept shipping inside the post's SVG. Basis line now "The gap is information.", re-exported at 1080w and render-verified. Text validators cannot see artwork - sweep exhibit text whenever a body phrase changes. $40k COLLISION recorded in both affected posts' frontmatter (slot 3 Sep 2 and slot 10 Sep 24) with the three resolutions. Left unresolved deliberately: Paul wrote the slot-3 opener and "another" may mean a genuinely different founder. Session learnings logged to .okf/log.md. okf validate --strict: conformant, 0 errors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Aug 19, 2026
…ibalised (#471) * SEO: GSC re-baseline closes 20.09 §10 Q1; fractional-CTO cluster cannibalised 90d GSC pull (2026-05-21 → 08-18, sc-domain:jetthoughts.com): 433 clicks / 438,152 impressions / 0.10% CTR / position 16.4. Confirms seo-review-2026-08-13 §1-§5 and changes no recommendation in §6. Closes 20.09 §10 Q1. The question held a full re-plan on a "fresh GSC export" that "is not in the repo" — the MCP serves it live, already documented in .okf/workflows/analytics-access.md since 08-13. The blocker had already been removed. Two of §8's Tier-2 questions answered early: - Founder-post clicks = 0 over 90d. All 27 "founder" queries ≈100 impressions / 0 clicks; the six §3 P1 posts 176 / 0; all "vibe" queries 165 / 0; course (60+ URLs) ~800 / 2 — at good positions (5-13). A demand finding, not a quality one, and the evidence base for §7's "sales enablement need not rank". - NEW: the fractional-CTO cluster carries the same cannibalization defect §4 caught on Rails 8 auth. Nine pages compete; Google's chosen result for the head term "fractional cto" (333 impr, the site's highest-volume commercial query) is a 159-line 2024 diary post at position 73 — not either service page. Three long-form siblings (~2,900 lines) got zero impressions in 90d. Deliberately NOT scheduled: ~570 impressions/90d at position 43-52 is ~15-30 clicks/quarter perfectly fixed. Not pipeline before Dec 1. Logged ready-to-execute (consolidate, don't write) in §9.4. Also logged for the action-#10 unsourced-numbers sweep: /services/fractional-cto/ publishes $5K-$15K/mo while /services/fractional-cto-cost/ publishes $5,000-$25,000/month; neither figure is in claims-canon. Docs + .okf only — no content/, themes/, layouts/ or CSS touched, so no build or visual gate applies. OKF validate --strict: conformant, 0 errors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Content: AI-supervision angle replaces the cheap-developer + fCTO framing Updates the post idea and adds its LinkedIn companion, both re-pointed off fractional CTO per the 2026-08-19 finding that JT has not delivered one directly. Brief (cheap-developers-expensive-without-cto-review.md): - Status corrected — it SHIPPED 2026-07-31; the brief still read "not yet absorbed, draft candidate once the gate opens". - Marked NOT a ranking target, with the evidence: the AI-supervision cluster is invisible (vibe-coding-crisis 18 impr/0 clicks, vibe-coding-disposable 44/0) and ZERO queries containing "ai code" exist in 90 days. Six posts already cover this thesis; a seventh splits the same zero. LinkedIn-first instead. - Retired secondary keyword "fractional cto code review" and the course fCTO bridge link. The shipped post's fix section routes readers to a service we cannot evidence; replaced with the one we do deliver and already state in "Where JetThoughts fits" — a senior engineer reads the repo and returns a plain-English assessment. - New angle, non-duplicating: AI removes the *author*. With a cheap developer there was still a person to ask why. The shipped post's own 20-minute check ("who approved the last ten PRs") breaks under AI — a founder prompting directly may have no PRs at all — which is the proof, and the brief now carries a replacement tactic that survives it. LinkedIn draft (backlog-ai-without-senior-reviewer.md): - Question-led opener, rotated deliberately: the last four drafts all open on a flat conflict/observation claim; a fifth would be a formula tell. - Checked against backlog-vibe-coding-disposable.md to avoid double-anchoring — that post is rewrite cost, this one is the missing reviewer. - 146 words. No em dashes, no credential stamp, no CTA, no JT mention, no links. - reflect pass cut a beat-5 close carrying a second negative-positive flip plus an aphoristic close; the first 1/10 self-score was wrong before that cut. - Flagged in frontmatter: the post ships with no anecdote because inventing one would be fabrication. Paul supplies a real detail or it stays as is. Docs + linkedin-posts/ only (both outside the Hugo build) — no gate applies. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: reframe to pro-AI thesis - AI beats the freelancer, which is why it needs a supervisor Paul's framing replaces the earlier "AI removes the author" angle: AI is genuinely good and outperforms most Upwork freelancers, and that is precisely what makes it dangerous unsupervised. Wrong hands, big blow-up rather than slow mediocrity. The sharpened form of the point: a weak contractor warns you for free by slowing down. AI never slows down, so nothing signals that nobody is reading it. Cold-eyes panel (3 critics: slop / voice-guide / ICP reader) scored the first rewrite 4/10 and converged on three fixes, all applied: 1. Cut "I'll say that plainly, because plenty of people in my industry still won't." All three flagged it; the ICP reader said it actively COST trust - the "unlike the others in my industry" move every burned founder has heard from a vendor. 2. Cut "nobody is supervising it. They're forwarding it." Banned tweetable flip, arbitrary one-month threshold, and "forwarding" had no object. 3. REPLACED THE TACTIC - the important one. "Ask when anyone last sent the AI's work back" asked the audited party to self-report, which is the exact failure the post is about, and it assumed a "team" when the ICP founder has one contractor. It now asks for one specific past disagreement, which a non-technical founder can judge without reading code: a concrete example exists, or it doesn't. Also restored Beat 5 (the earlier reflect pass cut it without replacement) and closed on the one-person-on-your-side case the ICP reader raised. 163 words. Zero tweetable flips, no rule-of-three, no signposting, no credential stamp, no em dashes, no CTA, no JT mention, no links. Flagged in frontmatter for Paul: naming Upwork stays because he asked for it, but the voice critic's risk argument is recorded with a one-line swap if he wants the thesis without the fight. Opener is a conscious pattern break (fifth consecutive flat-conflict open) with the reason logged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Docs: LI preview link required on every update, and fix the 1313 contradiction Paul flagged that two rewrites of backlog-ai-without-senior-reviewer.md shipped with no preview link. Root cause was three separate defects, not one missing habit. 1. WRONG TRIGGER. linkedin-posts/README.md §Review board already said "ALWAYS give Paul the link" but scoped it to "When asked to review/check LI posts". Creating or updating a post is neither, so the rule never fired. Widened to every CREATE and every UPDATE - a reframe or one-line edit ships with the link too. 2. NO CHECKLIST STEP. The pipeline's 20-item workflow checklist - the list an agent actually follows when writing - had no preview-link item at all. Added as a BLOCKING final step, one line pointing at the README rather than restating the URLs a third time. 3. PORT CONTRADICTION. CLAUDE.md:114 and README both hardcoded http://localhost:1313/linkedin/, which CLAUDE.md:144 directly forbids ("never assume 1313 - that's the human default", session-random port, 2026-08-17). Any agent following the LI line would hand back a URL pointing at Paul's own server or nothing. All three now say <port> and reference the session-port rule. Also generalised rather than patching the instance: the "always end page-change handbacks with review links" rule was scoped to "a rendered page (content, template, CSS)". LI drafts live in linkedin-posts/, outside content/, which is precisely why the rule did not cover them. The test is now "renders locally", not "lives in content/". Verified rather than assumed: the mount is real (config/development/hugo.toml maps linkedin-posts -> content/linkedin, dev-only), and both /linkedin/ and /linkedin/icp-validation/backlog-ai-without-senior-reviewer/ return 200 on a live server. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: join the superiority step - the pool AI beats is the pool that can't supervise it Paul: shorter, and the thesis wasn't landing. 163 -> 127 words. The defect was a missing link, not length. The draft asserted two things and never joined them: AI beats most Upwork freelancers, and AI needs supervision. The step between is the whole post - supervision only works if the supervisor outranks the thing supervised, so the cheap pool the AI already beats is by definition the pool that cannot supervise it. Hiring cheap to "run the AI" is self-defeating rather than merely cheap. That trap is now the spine. Dropped to make room: the slow-contractor-warns-you-for-free mechanism and the you-don't-need-to-read-the-code beat. Both were decent lines that served the old no-warning-signal thesis, not this one. Recoverable from git if the trap framing tests worse. Consequence worth recording: Upwork is now load-bearing rather than decorative - the pool-overlap IS the argument. That weakens the standing option to swap it for "cheap contractors" to avoid a fight in the comments; the post survives the swap but loses its bite. Frontmatter re-synced to body (the check the cold-eyes panel caught drifting last round): cta now matches the actual close, word count corrected. No panel re-run - Paul's notes were length and thesis clarity, not a voice failure, so the second-pushback trigger did not fire. Self-check clean: 0/10, no flips, no rule-of-three, no em dashes, no CTA, no JT mention. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: add judgment-ladder exhibit to the AI-supervision post Purpose-built exhibit per linkedin-posts/README.md "Every post carries a visual" - house style, viewBox 720x480, rsvg-convert -w 1080, .svg source kept beside .png. Shape is a LADDER, deliberately varied from siblings (the nearest exhibit, friends-politely-lying, is a contrast pair). Three rungs carry the whole thesis without reading the post: a supervisor above the AI, the AI as the bar it already set, the cheap Upwork hire below it. Basis line: hire below that line and nobody can catch what it gets wrong. Render-verified by VIEWING the PNG, then the 6-item clunkiness checklist run with the spec's "assume clunky" stance rather than glanced: - Alignment FIXED. First pass alternated card tilt -0.4/+0.4/-0.4. That reads as hand-drawn on a side-by-side pair but as a zigzag on a vertical stack; all three now share -0.3. - Hollowness FIXED. A dead band sat between the bottom card and the basis line. Cards re-spaced 108/212/316, axis extended to match. - Odd-one-out ACCEPTED not fixed: "The AI" is a short head in a wide card, so the middle rung is quieter. That is right - it is the neutral reference bar between two human rows, and padding it to match would be filler. - Sibling consistency, edge breathing room, weight/emphasis: pass. Recorded for Paul: Caveat is not installed on this machine, so exhibits fall through to Comic Sans MS. The committed siblings render identically, so this matches the feed rather than diverging - but nothing exported here will honour the house spec's Caveat until the font is installed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: reorder the approved queue onto the documented cadence grid The board sorts approved posts by `proposed_for` (layouts/linkedin/list.html:43). The newly-approved AI-supervision post had no such key, so it sorted ahead of everything - the visible symptom. Auditing the rest surfaced three more: - wk Sep 28 had Tue + Thu and NO Wednesday - wk Oct 12 had Tue + Thu and NO Wednesday - wk Oct 5 carried THREE posts All three break content-plan.md's stated cadence: 2/week at 17:00 CEST, "Wednesday every week, plus a second slot rotating Tue one week, Thu the next." Fixed by re-slotting onto that grid while PRESERVING Paul's relative ordering - this is a day-slot correction, not a re-ranking of his editorial sequence. Four dates moved: ten-interviews-recap Thu 10-01 -> Wed 09-30 (gives wk Sep 28 its Wednesday) interview-count-poll Thu 10-08 -> Wed 10-14 (relieves the 3-post week; plan says polls prefer Wednesdays) why-i-wrote-it Tue 10-13 -> Tue 10-20 (displaced one slot by the above) ai-without-senior-... unslotted -> Wed 10-21 (new) Result: 18 posts, 9 consecutive weeks, exactly 2 per week, every week carrying a Wednesday. Verified by ISO-week count, not by eye. First pass got this wrong and is worth recording: filling the two empty Wednesdays directly just converted both into 3-post weeks. Only checking counts per ISO week across the WHOLE queue - rather than per defect - showed the surplus post had to move out of wk Oct 5 rather than more posts moving in. Left for Paul: the AI post sits at the tail (Oct 21, ~9 weeks out) because placing it early would push all 17 others back a slot and re-rank his sequence. It is also the most time-sensitive item in the queue. One-line swap if he wants it early. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: re-rank the approved queue by decay risk, most perishable first Ranked on decay markers actually present in each post, not on topic feel. Six of eighteen carry something that expires; twelve are evergreen tactics. Perishable, now first (decay driver quoted): 1. reaction-claude-code-trust - names a product AND a model AND a feature ("Claude Code... Opus model and team mode"). Fastest-rotting thing in the queue. 2. ai-without-senior-reviewer - "AI writes better code than most freelancers you'll find on Upwork" is a MOVING comparison; it gets less true as models improve. Was dead last at Oct 21, now second. 3. bip-vendors-still-burning-founders - explicit year-stamp plus two named vendors ("what changed in 2026... Lovable or v0"). 4. backlog-vibe-coding-disposable - rests on "when you ask the AI to fix something, it doesn't edit your existing code", a model-behaviour claim already eroding. 5. reaction-vibe-coding-front-back - opener indexes to a live argument ("the vibe coding argument online is exhausting"); dies when the discourse moves. 6. bip-build-your-own-tools-with-ai - build-in-public about a thing built now. Evergreen (Mom Test, pricing tactic, polls, staging question, the $40k story) moved back in their existing relative order. Nothing was re-written, only re-slotted. Grid preserved from the previous pass: 9 weeks, exactly 2 posts/week, every week carries a Wednesday, all 3 polls on Wednesdays per content-plan. 18 posts, 18 distinct slots, verified. TRADE-OFF PAUL SHOULD SEE: four of the six perishable posts are personal-lane (reaction/build-in-public), so front-loading them pushes the first four weeks to ~50% personal against content-plan.md's ~20% target. I interleaved value posts to avoid an all-personal opening week, but the tension is structural - the fast-rotting material IS the personal material. Shipping order now optimises for freshness over pillar mix. Say the word and I will rebalance toward the 20%. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: revoice claude-code post to the downloaded influencer register Paul: match reference-examples.md (Cutler / Rossi / Holub / Paolino, captured 2026-08-13). Three deviations found against that doc, all fixed. 1. It was a REDEMPTION ARC, not a take. "I walked away / X pulled me back / here's what I learned" is a personal timeline; all four reference writers open on a claim about the WORLD and bring first-person in as evidence. Applied Rossi's documented move - name the narrative, then disagree with it. The post now opens on what the AI-agent argument is stuck on. The timeline survives as backing rather than as the structure. 2. TIDY LESSON-WRAP, explicitly banned in reference-examples §"What they all avoid". "Consistency is boring, and it's the only thing I actually care about. I don't need clever. I need to not babysit it." editorialises the takeaway for the reader AND carries a parallel-stem flip pair. Replaced with one flat first-person line that states the position and stops. 3. NO CLOSING QUESTION now, deliberately. Holub and Paolino land on the sharpest observation and stop; the doc permits a closing question only when genuine. There wasn't one here. Deliberately NOT restated: "reliability is the line". reference-examples flags that exact bridge phrasing as a marketer's sentence Paul rejected on 2026-08-13, so the point is carried by the concrete instead - couldn't predict it, diffs hold run after run, check behind. Shown, not announced. Kept every concrete technical noun (Opus, team mode, diffs, workflow); the doc names that specificity as Paul's register, closer to Holub than to a LinkedIn insight post. 102 words, up from 75 - the Rossi opener costs a sentence. Flagged not fixed: this sits at slot 1 and the AI-supervision post at slot 2, and both now open on a flat claim about AI. That is a consequence of ranking by decay, not of this rewrite. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: cut negative parallelism from the claude-code post Paul asked whether "X, not A, but B" is AI slop. It is, and it is banned by name in our own voice guide - which the revoice one commit earlier violated. voice-guide 90.11:223: `"It's not X - it's Y" / "Not just A, but B"` -> "Pick one framing and commit." The shipped line was "not because the code was bad but because I couldn't predict it". Now: "because I couldn't predict what they'd do." It was also redundant, which is the better reason to cut it. The opener already negates the code-quality assumption ("stuck on whether they're smart enough. That was never what decided it for me"), so the middle paragraph re-negated a belief the post had dismissed one line earlier. Swept the other 17 approved posts for the same family (not just / not merely / isn't just / it's not / that's not). Two hits, both fine on inspection: bare negations that kill a wrong inference and stop, with no "but Y" completion - staging-question's "it's not because the team is lying" and friends-politely-lying's "That's not proof of anything". No other post carries the banned shape. 97 words. RAISED, NOT RESOLVED - a genuine conflict between two voice docs: reference-examples.md quotes Holub approvingly using this exact construction ("Product work is not a distraction from the work; it is the work"), so the guide bans a shape the reference file models. Proposed test, for Paul to rule on: the shape earns its place only when the negated half is a belief the reader actually holds. Holub negates a live assumption; slop negates a strawman for rhythm. Not applied - editing the voice guide is a positioning call. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: replace claude-code body with Paul's own draft, English-cleaned only Paul sent the version he would write. It replaces the assistant draft wholesale. Only English was cleaned (ESL typos, articles, tense). Nothing re-framed or re-structured back toward the previous version. His draft carried three things mine had invented away, all kept: - "cancelled my AI subscriptions" - a concrete ACTION. Mine said "walked away", which is a summary of an action, not the action. - The agents MAKING EXCUSES for not following the workflows. Specific and vivid; I had nothing like it. - The payoff is ECONOMIC - burned tokens, hit rate limits, nothing to show for it. My thesis was abstract predictability. His is what actually costs him money and sleep, and "sleep at night" is his image, kept. This is the anecdote gap I flagged twice on the sibling post, closing in the other direction: the assistant cannot invent Paul's specifics, and when he supplies them they beat the drafted abstraction outright. The correct move was to delete my framing, not to merge it with his. One ambiguity resolved and flagged in frontmatter: "to stop reach limit junkies" reads either as Paul-as-junkie or agents-as-junkies. Taken as the agents, since his closing line blames them for spending tokens and hitting limits. Flip on request. Structurally his opener is Paolino's move from reference-examples ("say the real thing you did, plainly") rather than the Rossi narrative-counter I had imposed - still an influencer shape, and it incidentally clears the flagged clash where slots 1 and 2 both opened on a flat claim about AI. 79 words. No em dashes, no negative parallelism, no CTA, no closing question. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: apply the influencer moves ON Paul's draft, not instead of it Paul: "now apply the influencers voices on it". Every fact, noun and image in the body is still his. Three changes, each traceable to reference-examples.md. 1. ADDED the Holub move - flat contrarian conviction - which the draft lacked. The doc pins Paul's register as "blunt, concrete/technical, first-person, opinionated, a little against-the-grain, closer to Holub than to a LinkedIn insight post". His draft was the first three and none of the last two: a clean personal update that took no position. New line, built only from his own material: "An agent that spends your tokens and gets nowhere is worse than no agent." The against-the-grain part is that the public argument is about capability while his objection is economic. 2. COMPRESSED the return beat. "One thing brought me back: Opus family models and team mode." followed by "It stopped making excuses..." was a throat-clear ahead of the point. Merged into "Opus family models and team mode brought me back." Per the doc: influencers compress, they don't recap the sequence. 3. TIGHTENED the grievance to keep the agents as the subject doing the damage - "and I still had to rebuild" became "and still made me rebuild". KEPT against a stricter reading: "Now I sleep at night". Holub and Paolino usually land flat and a purist pass would cut an emotional closer. It stays because it is Paul's own line, it names a consequence rather than a feeling, and the new conviction line now does the flat-landing work. Noted in frontmatter that deleting that sentence gives the pure Holub ending if he wants it. 90 words. No em dashes, no negative parallelism, no banned closer, no CTA. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: strict Holub pass - drop the sleep closer, land on the conviction Paul: "i'd stick with Holub and rewrite/remove if they would." Deleting the closer alone was not the right move. That lands the post on "...without me installing extra tools" - a feature detail and the flattest line in the piece. reference-examples says Holub and Paolino "land on the sharpest observation and stop", so the conviction moved from the middle to the end. Three beats now: grievance, resolution, conviction. No question, no emotional wrap, no lesson addressed to the reader. 68 words, down from 90. Accepted cost: the conviction explains why he LEFT, so placed after the came-back beat it reads as a standing principle rather than his reasoning at the time. That is the right register for Holub regardless - a claim about agents in general, not a report of what he was thinking in the moment. Paul's two closer corrections from the previous round are preserved one commit back and were both right: "sleep well" not "sleep at night" (the original implied he did not sleep before, which is manufactured drama he never lived), and cutting the welded "pile of tokens hitting the limit" down to the token waste alone. They apply again if the closer ever returns. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: fix the causality in the grievance, consolidate the notes Paul: "burned by rate limiting? they burned because stuck and doing wrong stuff; and rate limiting is another issue, they stop suddenly in the middle." Correct. "The agents burned through every rate limit" welded a cause to an unrelated symptom - it reads as though the rate limit caused the burn. It did not. The agents burn tokens because they get STUCK on the wrong work; rate limits are a separate failure where they stop mid-run. Now: "The agents got stuck and burned a pile of tokens on the wrong work, and I still had to rebuild their whole context every time." The rate-limit interruption is deliberately absent rather than reworded. Paul chose the token waste when asked to pick one last round, and a third grievance in the opener pushes it toward the enumerated-loop shape reference-examples warns about. Flagged in frontmatter as available - it would go in as its own beat, never welded to the token line. Fourth conflation Paul has caught in this post in two rounds. The pattern in all four: the assistant compressed two distinct things into one phrase and the seam stopped being visible once it read smoothly. Negative parallelism, the sleep overclaim, tokens-vs-limit, and now cause-vs-symptom. Also consolidated the frontmatter notes: 152 lines -> 65. They had become an append-only log longer than most repo docs, for a 76-word post. Superseded intermediate states dropped (git holds them), decisions kept. Fixed while there: icp_test still read "does 'reliability is the line' resonate", which stopped being the thesis when Paul's economic framing replaced it. It now matches the body - the frontmatter-to-body consistency check the cold-eyes panel flagged drifting on the sibling post. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: fix posts 2 and 3, and promote plain English to the first voice gate Applying the lesson from reaction-claude-code-trust: all four of Paul's corrections there were the same defect - two ideas welded into one phrase, or a claim that was simply untrue - and every mechanical gate passed them. CROSS-POST CONTRADICTION (the find that spanned both). Post 2 (Aug 26) argues you need a human who outranks the AI; post 3 (Sep 2) told the same audience "no developer is needed". Seven days apart. Both are defensible about different stages, neither said so. Post 3 now scopes the claim: an AI builder gets you far enough to find out whether anyone wants it; putting it in front of paying customers still needs someone who knows what they're reading. Post 3 - bip-vendors-still-burning-founders: - "The gap isn't tech, it's information" was the exact negative parallelism Paul asked about yesterday (voice-guide 90.11:223). Committed: "The gap is information." - "So, no judgment if you paid..." carried the revoked So-connector AND the therapist voice the guide bans. The de-shaming survives in the next clause, which did the job better anyway. - Close dropped its justification ("...and it's what would help the next founder") - it told the reader why their answer matters. The question itself is genuine, so it stays. 161 words. Post 2 - backlog-ai-without-senior-reviewer: - Cut the closing question. The post had already answered it, and it deflated the sharpest line. Now lands on "the AI is the senior one on your project" - same Holub fix applied to post 1. - Cut two throat-clears: "That part is real." and "That's the hard part." - Fixed a price/skill weld: "aren't the ones bidding cheap on Upwork, because that's the pool the AI already beats" equated cheap with worse-than-AI. Dropped the causal clause; the claim now stands as Paul's observation rather than a derivation. PLAIN ENGLISH promoted to voice-guide §0, above every other rule (Paul: "plain English is one of the high critical to pursue"). Three tests - say it out loud to one person; one idea per phrase; every claim true. Records why the middle test matters most: a fused phrase passes word count, banned-word greps, dash checks and slop score, so only a domain reader catches it. Carries the four-round claude-code table as the worked example, and the resulting rule - check claims against domain knowledge FIRST, voice gates second. Mirrored in .okf/content/voice-rules.md with the timestamp bumped. okf validate --strict: conformant, 0 errors. STILL OPEN on both posts: neither carries a real Paul specific. Post 2 has no first-person at all and runs the day after an intimate first-person post. Flagged in the plan, not inventable by me. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: Paul's opener for post 3, tighter supervisor line for post 2 Two corrections from Paul, both applied. POST 3 opener. "It still happens constantly," was slop - a vague frequency claim standing in for an observation. His replacement: "I again found in 2026 another Non-tech founder who wasted $40k for broken MVP." English cleaned to "In 2026 I met another non-technical founder who had spent $40k on a broken MVP." It also absorbs the old first line ("hand over five figures... a build that barely runs"), which was the same claim at lower precision - five figures and $40k were two statements of one fact. "in 2026" moved into his sentence so the post no longer says 2026 twice. 149 words. POST 2 supervisor line. "But it still needs supervision, and supervision only works if the supervisor is better than the thing being supervised" used "supervision" twice as a run-up to the point. Paul: 'I'd write "But superviser should be better than ..."'. Now "But the supervisor should be better than the AI." Object made concrete rather than "the thing being supervised" - passive abstraction, and voice-guide §0 (plain English first) now ranks that above elegance. 93 words.⚠️ ANECDOTE COLLISION, flagged not resolved - needs Paul's call. $40k now anchors TWO approved posts: this one at slot 3 (Sep 2) and backlog-40k-mvp-chasing-fixes at slot 10 (Sep 24), which is built entirely on the figure and repeats it as its closing line ("He paid $40k to end up as the unpaid project manager of his own product"). Both also cite Lovable/v0 and the same broken-MVP shape. Three weeks apart on one feed, a reader sees one story told twice. This is exactly the double-anchoring the cross-post repetition gate exists to catch. Applied as Paul wrote it because he owns the anecdote and "another" may genuinely mean a different founder with a coincidentally similar bill. If it is the same founder, the options are: give slot 3 that founder's real number, drop the figure from slot 3 and let slot 10 keep sole ownership, or cut one post. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Voice: adopt the attribution test, wire story-bank into the pipeline, log the session Paul chose Option B over my recommendation: keep the negative-parallelism shape available under a stated exception rather than banning it outright. ATTRIBUTION TEST (new, voice-guide 90.11 §3). "X is not Y; it is Z" is legal only when the text NAMES WHO holds the negated belief within one sentence of it. Holub earns it - "There are many programmers who don't seem to get that". The line cut from reaction-claude-code-trust did not: nobody was named as believing the code was bad, and deleting the negation lost nothing. Worded mechanically on purpose. "Is this a belief the reader really holds?" is unenforceable - every writer thinks their own strawman is real, and this pattern already mass-regressed here once (25+ instances across M1-M3, caught by the 4-persona panel 2026-05-28). "Is there a named population in the adjacent sentence?" is checkable in two seconds by anyone. Synced across all three surfaces that stated the ban: 90.11 §3 (both the Negative parallelism row and a new worked section), .okf/content/voice-rules.md, and the LinkedIn AI-score rubric. reference-examples.md's Holub entry now explains why that quote is the legal case rather than an exception nobody documented. PIPELINE - two rules that existed but could never fire: - story-bank.md says "before drafting, pull from here; if the detail isn't here, interview Paul" and was absent from the mandatory reads AND the 20-item checklist. Added as read #5 plus a BLOCKING checklist step. This is the session's most expensive miss: ~6 correction rounds across two posts, both of which only worked once Paul supplied real material. - reference-examples.md added as read #6, with the warning that an imitation doc endorses every property of its samples. EXHIBIT FIX, caught by the frontmatter rather than by any gate: the banned "The gap isn't tech - it's information" was removed from the vendors post body earlier today and kept shipping inside the post's SVG. Basis line now "The gap is information.", re-exported at 1080w and render-verified. Text validators cannot see artwork - sweep exhibit text whenever a body phrase changes. $40k COLLISION recorded in both affected posts' frontmatter (slot 3 Sep 2 and slot 10 Sep 24) with the three resolutions. Left unresolved deliberately: Paul wrote the slot-3 opener and "another" may mean a genuinely different founder. Session learnings logged to .okf/log.md. okf validate --strict: conformant, 0 errors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Resolve the $40k collision by altitude, and rule out working-directory drift $40k COLLISION - Paul confirmed it is the SAME founder in both posts. By "another" he meant the pattern keeps recurring in his network, not that he met a second person. That made slot 3's opener factually wrong as well as duplicative: "another founder who had spent $40k" reads as a new case and re-tells slot 10's anchor three weeks before slot 10 runs. Resolved by splitting on PRECISION rather than cutting either post: - slot 3 (Sep 2) owns the RECURRENCE at five-figure precision - "Non-technical founders who paid five figures for an MVP that barely runs keep turning up in my network. I met another one this year." - slot 10 (Sep 24) keeps the $40k founder and the unpaid-PM story it is named for. $40k now appears in exactly one body. Five figures was also already the exhibit's wording, so slot 3's body and artwork agree again - the earlier draft had the body at $40k and the card at "five figures". WORKING-DIRECTORY DRIFT - rule added to CLAUDE.md. The Bash cwd persists between calls, so a bare `cd content` silently breaks every later repo-relative path. It bit twice this session: a `content/_index.md` grep and a `.okf/design/` read both reported "No such file or directory" for files that exist. The failure presents as a missing file rather than a wrong cwd, which is why it cost two debugging detours instead of one. Rule: absolute paths, or `cd <repo root> && cmd` in the same call, or pass directories to the tool. If a file you know exists reports missing, run `pwd` before believing it. Both logged to .okf/log.md (now 8 entries for the session). okf validate --strict: conformant, 0 errors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: restore $40k, drop the implied count - assistant over-applied the repetition gate Two corrections from Paul, and the first reverses a decision I made an hour ago. $40k RESTORED. I stripped it to "five figures" citing the cross-post repetition gate. Paul: "why we cannot use $40k?" - he is right and I over-applied the rule. That gate is for CLUSTER posts competing on one topic, not for two different arguments drawing on one real case. Stripping the number made the post vaguer, which directly contradicts this session's main finding that Paul's concrete specifics beat assistant abstractions. His real cases are also finite - one-story-one-post starves the pipeline for no reader benefit. What actually must not repeat is the STORY, not the number. Slot 3 uses the founder as the latest instance of a pattern; slot 10 narrates his unpaid-PM trap and is named for the figure. Both frontmatters now say so, including an instruction to slot 10 to keep the narration and not let slot 3 grow into a retelling. NO IMPLIED COUNT. "I met another one this year" reads in mid-August as one case per half-year, which undersells how often Paul sees this. Now "The last one had spent $40k" - recency without a rate. General rule recorded: never let a time window imply a count Paul has not claimed. Opener is now: "Non-technical founders who paid for an MVP that barely runs keep turning up in my network. The last one had spent $40k." Dropped "five figures" as redundant once the exact figure returned. 156 words. .okf/log.md entry 7 REWRITTEN - it had recorded the split-by-precision decision as a durable lesson. Paul overturned it the same day, so the entry now records the correction and the reason. A wrong lesson in the log is worse than no lesson. okf validate --strict: conformant, 0 errors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: simplify the vendors post throughout, and record the gloss-by-mechanic move Paul asked to simplify paragraph 2 in strict influencer voice, add the $40k vs $200 comparison, then improve the rest. 156 -> 131 words. PARAGRAPH 2, the one Paul singled out as working: was: "What changed is that the first rough version of most app ideas is now a weekend of work. AI app builders like Lovable or v0 cost about as much as a streaming subscription: you describe the app in plain words and get something you can click, without hiring anyone." now: "That same first version is now a weekend with Lovable or v0. You describe what you want and it builds it. Even on the priciest models, $200 covers it." Cut the "What changed is that..." throat-clear, dropped the hedge "most app ideas", and replaced the simile with Paul's real figure. A simile is what you write when you lack the number; he had the number. Recorded as a reusable rule in the pipeline (new section, "Gloss by mechanic, not by parenthetical"): name the concrete thing in a short declarative, give the mechanic as its own plain sentence, use the real figure over a comparison. Flagged that this deliberately differs from the course's parenthetical-gloss rule - different register, LinkedIn is speech. REST OF THE POST: - "someone who knows what they're reading" -> "someone who can read the code". The original never said reading WHAT; a non-technical reader could take it as reading a contract or a market. - "the tools moved faster than the advice around them" -> "than anyone giving advice". "The advice around them" names no one. - "If you paid for a build you didn't need yet" -> "If you already paid for one". - Dropped the second "$40k" - para 1 establishes it one sentence earlier, so the comparison lands on "$200 covers it" without restating the bill. EXHIBIT re-labelled to match: cards now read "$40k" and "$200" instead of "five figures" and "subscription money", re-exported at 1080w and render-verified. The 200x gap is now visible without reading the post. The old frontmatter note said "no invented dollar figures" - correct then, since neither number existed in canon; both now come from Paul. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: paragraph 3 carries Paul's actual thesis - both versions are non-working Paul: "looks like redundant and conflicting with my idea that you do not need to pay cheap non qualified devs today but use AI for this to have the same non-working app but good enough to test your idea and save ~$39k." He is right, and the sentence was mine. I had written "Putting it in front of paying customers needs someone who can read the code" to resolve a contradiction with the Aug 26 supervisor post. Two problems: 1. It is false to his own story. The $40k dev-shop build barely ran. Implying the paid route bought you a code reader contradicts the founder anecdote the post opens with - nobody was reading that code either. 2. It blunts the punch. The comparison is not cheap-and-broken versus expensive-and-working. It is the SAME non-working app at $200 or $40k. That equivalence is the whole post and my sentence talked the reader out of it. Now: "You get the same non-working app. It is good enough to test the idea, and you save about $39k." This resolves the Aug 26 contradiction better than the line it replaced. That post says AI output needs a supervisor who outranks it; this one now explicitly disclaims the AI build as non-working and scopes it to testing an idea. Neither post gives hiring advice, and the stages no longer overlap. Recorded in frontmatter as load-bearing so it does not get softened again. 124 words, down from 131. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: cut the last abstraction from the vendors post, sync the exhibit Reviewing the closing three paragraphs against the sharpened thesis. CUT "The gap is information." It was the last abstraction in the post and the two sentences before it already say the same thing concretely. It also stopped being accurate once paragraph 3 sharpened: the missing information is not "information" in general, it is the PRICE. Naming the abstraction after stating the concrete is the move this whole session has been removing. "the tools moved faster than anyone giving advice" -> "the tools got cheap faster than the advice caught up". The old clause named nobody and floated free of the thesis; the new one is about price, which is what the post is about. Kept rather than cut because the frontmatter's constructive-framing constraint needs it - without it the paragraph reads as a straight vendor attack, which the 4-critic swarm specifically fixed on 2026-08-17. "If you already paid for one" -> "If you already paid a dev shop". "One" had drifted: after paragraph 3 the nearest antecedent is the AI-built app, so the de-shaming beat was pointing at the wrong purchase. Closing question kept unchanged. It asks what the vendor SAID, which is exactly where the information gap gets created, so it earns its place after "nobody tells founders this." EXHIBIT swept in the same pass, per the rule this session added after the last miss: the basis line still read "The gap is information." It is now "The $40k one barely ran either." - the post's actual punch, and it makes the card pair legible without the body. Re-exported at 1080w and render-verified. 123 words. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: Paul's paragraph 3, and replace the orphaned close 1. PARAGRAPH 3 verbatim from Paul: "You get the same non-production app, but it's good enough to test the idea, and you save about $39k." His "non-production" fixes a contradiction I had shipped. Mine said "the same non-working app. It is good enough to test the idea" - if it does not work, it cannot be good enough to test. The AI build does work; it is just not production grade. One word, and the sentence stops arguing with itself. Exhibit basis line aligned: "The $40k one barely ran either" implied the AI version barely runs too, which contradicts "good enough to test". Now "The $40k one was not production either." Re-exported and render-verified. 2. CLOSE REPLACED. Paul: "I'm not following those last lines, how are they related to the post idea?" Correct - they were ORPHANED. "What did the vendor tell you before you signed? That part never gets written down." fitted this post's ORIGINAL thesis of vendor accountability (the 2026-08-17 4-critic version). The post is now a price revelation, so the old question reached the topic only through a two-step - the pitch is where the not-telling happens - that no reader is going to make. Now: "What were you quoted for your first version?" Genuine, on-thesis, trivially answerable, and it surfaces the datum actually worth having: whether founders are still being quoted five figures. De-shaming line kept. The 4-critic swarm added it because the icp_test cannot fire without an ask, and it earns more now than before - asking what someone was quoted right after revealing $200 invites them to confess being overcharged, so the line makes answering safe. LESSON recorded in frontmatter: when a post's thesis is rewritten, re-check the CLOSE against the new thesis, not just the body. A close that fitted the old argument survives every voice gate - well-written, unbanned, on-brand - and is simply about a different post. Nothing in the rubric can catch that. 116 words, down from 123. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * LI: add the thesis gate, and run it on the three posts edited this session Half of Paul's 12 corrections this session were defects no gate could see, because every gate we own checks sentences against RULES and none checks the post against its own argument. Four were exactly that: a welded complaint, a caveat contradicting the post's own thesis, a self-contradiction ("non-working" vs "good enough to test"), and a closing question that fitted the pre-rewrite thesis. New BLOCKING checklist step in linkedin-post-pipeline.md: write the argument as one sentence in frontmatter (`thesis:`), then read each paragraph asking only whether it serves that sentence or contradicts it. Re-run after EVERY rewrite - that is where the orphaned close came from. Each edit was checked locally against the paragraph it touched, so the close was never in scope. Applied `thesis:` to the three posts edited this session rather than backfilling all 18 - the rest get one when next touched. Ran the gate on all three: - reaction-claude-code-trust: passes, 3/3 paragraphs serve. - backlog-ai-without-senior-reviewer: passes, 4/4. - bip-vendors-still-burning-founders: 5/6 serve; ONE FLAGGED. The de-shaming line neither serves the price thesis nor contradicts it - the gate's cut-or-fix case. Kept deliberately: it serves the ASK, not the argument. The 4-critic swarm added it because icp_test cannot fire without one, and asking "what were you quoted" right after revealing $200 invites a confession of being overcharged. Recorded in frontmatter so a future mechanical pass does not cut it. That flag is the gate working as intended - it surfaced a real judgement call rather than a defect, and forced the reason to be written down. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
pftg
added a commit
that referenced
this pull request
Aug 20, 2026
…reading-list fixes (#474) * Analytics: fire contact_cta_click GA4 event on contact-page clicks seo-review-2026-08-13 §6 #1 (top-ranked open item): one conversion event so organic/course arrival can be judged at all. Delegated listener in the GA block catches every a[href*="/contact-us"] site-wide. Mark the event as a key event in GA4 admin (1-click, Paul). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * 2605: Aug-20 analytics read folded into tracker + OKF log GA/GSC/Clarity live pull triple-confirms arrival-not-content. Records: UTM action already shipped, title-pass veto per seo-review §6 #5, paid-pilot-full dead-click verified non-defect, contact_cta_click shipped, metrics-ledger gap flagged for Paul, Aug-17 editorial PRs folded in. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Course + last-10 blog: fix sweep (further-reading caps, bricks, claims, banned patterns) Swarm re-run of the Aug-17 fix classes over all 84 course pages + the 10 newest blog posts (Paul's request), calibrated on 90.20's recalibrated rules. 26 files, ~30 surgical fixes: - Further reading trimmed to <=4 external sources, dropping items already linked inline (12 course/blog lists; three sections deleted outright because every item was inline-duplicated) - 4 true bricks converted to list/blockquote (hire-track Rails reasons, outbound module-5 checklist, retros carried-over trio + ask script, switch-dev-shops inventory; pivot-ledger enumeration - NOT the protected taxonomy blocks) - Claims: 'rescue calls going back to 2011' -> 'since 2008' (canon), invented 80/20 hiring split, '80% of Rails apps', '40+ rescues' de-fabricated; illustrative-composite disclaimer added in five-tech-words - 2 banned-pattern rephrasings (negative parallelism, founders-we-work-with cohort phrase) 3 fabricated-fact findings held for Paul (see TASK-TRACKER Aug-20 note). Gates: hugo-build green, banned-pattern regression sweep clean, rendered scroll-gate samples verified (retros, hire-track). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Course: fix broken Toptal links, replace competitor entries with JetThoughts Paul's review of hire-track: toptal.com/fractional/cto 404s behind Cloudflare - the working page is toptal.com/developers/cto (fixed on all 3 course pages carrying it). AI People Agency + Seedium were competitor listings in our own course - replaced with a JetThoughts entry (staffing/SOW, canon-safe wording); platform counts six->five on both pages. Cluster sweep: no SVG exhibits carry the names. Drive-by canon fix: app-web-development meta '17 years experience' -> 'since 2008'. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Blog: switch-dev-shops gets its two visuals (timeline + decision aid) Paul: text-only post, high risk of losing the reader. Added the two house-style mermaid exhibits (pre-rendered SVG per the flake-prevention pipeline): the 4-week overlap timeline with the termination email deliberately LAST (the post's core inversion) in the first fold, and a condition->cheaper-move card grid for the when-switching-is-wrong section. Visual gate: first draft failed it - the LR timeline was illegible and overflowed at 390px, and a TD diamond tree rendered as a sparse wall. Reworked to TD timeline + LR card rows; verified 1280x800 and 390x844: readable without zoom, no body overflow, each ~1 viewport tall. Scores: look/readable/earns-scroll/helpful all pass on both. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Blog: retros post gets two hand-drawn exhibits (non-mermaid, house style) Paul: add visuals to retros-founder-transparency-tool, not mermaid, via /impeccable. Two inline-SVG exhibits in the invoice-loop exemplar grammar (720-wide viewBox, Caveat/cursive stack, paper tones, labels inside shapes, red = the signal, green = outcome only): - retro-summary-annotated.svg replaces the plain text fence - the post's central artifact as an annotated document card: carried-over block red-flagged, margin notes for read-first / third-cycle signal / task-on-your-side. The fence was an example, not a copyable template, so the annotated version strictly beats it. - retro-plus-demo.svg in the demo section - the two-halves synthesis (process on one page + product on a screen -> nothing left to guess). Two render iterations: cursive fallback inside <img> runs wider than Caveat, so first pass clipped the title/annotations - all strings re-fit. Verified 1280x800 + 390x844: no overflow, readable without zoom, img.complete checked before judgment. 4/4 visual-gate scores both. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * OKF: fallback-font width trap + blog visual pass logged Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Course: promote Ukraine instead of Tier-2 India in the hiring geography Paul: promote Ukraine instead of India. Both hiring pages (where-to-hire map + hire-track reference) now carry Ukraine (Kyiv, Lviv, Kharkiv) as the offshore row: $30-$70/hr ($60K-$140K annualized), deep Rails bench since the late 2000s - the bench JetThoughts itself hires from - and the timezone story flips from async-only to Kyiv-afternoon-equals-US-East- morning (live standups + overnight PR merges). JD template band $35-$55/hr, consistent with the budget guide's in-repo $35-$50 Ukraine figures. Swept the whole surface: quick-pick list, region table, anecdote city (Coimbatore -> Lviv, numbers unchanged), JD template, tomorrow-checklist, frontmatter keyword + description, AND the hiring-region-map.svg card + title/desc/alt (text gates can't see exhibits). Zero India references remain in content/course. Render-verified the updated SVG card. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Course: Ukraine is the default hiring geography Paul: Ukraine is the default. Default-2026 designation moved from Nearshore LATAM to Ukraine on both pages: region table + quick-pick (where-to-hire map), prose paragraphs (hire-track), and the hiring-region-map.svg badge + legend (purple = recommended default, neutral = timezone-first pick). LATAM reframed as the full-day-overlap pick. Render-verified. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * 2605: sprints C0-C3 groomed into agent-executable task cards (50.03) Paul: schedule + groom the next course sprints so other agents execute without the coordinator. New 50.03 execution doc carries the full queue - C1 arrival wave first (per the Aug-13 panel), C2 visual wave, C3 = the archived item-13 W4 scope resurfaced, C0 ratchet parallel-safe - each task with files, steps, gates, done-criteria, traps, and the global execution rules (WIP=1, C6 no-touch, gate classes, fallback-font + LR-390 visual traps, worktree isolation). Tracker points to it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.