feat(course): Module 2 (Validate the Problem) v2 — template, Mia walkthrough, gatekeeper fixes#351
Conversation
…plate First slice of the Module 2 rework, matching the template Module 1 shipped with in #345: - headers: "Module 2 · Step N of 4" (which miscounted the 5 chapters as 4) → "Module 2 · Lesson 2.x · [CORE]" with 2.2 labeled [OPTIONAL] - Progress lines added, chaining M2 · 1-5 of 5 with accumulating "Results so far" from Module 1 artifacts through scored interviews - "After this lesson you will be able to:" outcome line added to all 5 - footers unified to Done / You have now / Next / If blocked, with the You-have-now line accumulating artifacts like Module 1's - 2.3a opener "Most non-technical founders start with the same move" reworded (banned cohort-generalization pattern) Remaining on this branch: Module 2 Mia walkthrough + See-it-in-action lines, cross-page consistency pass, cold-eyes review loop. Gates: bin/hugo-build validators pass; bin/rake test:critical green (46 runs, 0 failures; 84 screenshots, no diffs). Em-dash and banned-pattern sweeps clean on all 5 edited chapters. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
TASK-TRACKER, PROJECT-INDEX, GOAL-AT-A-GLANCE were 2-3 weeks stale (pre-merge status, old 1.2a/b/c lesson labels, "pilot in flight"). Now: course merged + live via PR #345 (squash 90216d2); M1 fully v2 as lessons 1.1-1.5 with four review rounds resolved; chapter count is shortcode-derived (24 today, never hardcoded); covers say "20+ chapters" / "All free"; obsolete deferred items closed (v1/v2 status callouts dropped, cover regen done differently); active phase = M2 v2 migration on branch module-2-validate-the-problem with template alignment landed (48552e7). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New module-2-walkthrough-mia continues the M1 composite story through Module 2, consistent with every number the lessons teach: 5 past-tense questions drafted per 2.1 (her hypothetical first draft matches the lesson's broken-question table); one bad question caught in the 2.2 persona rehearsal; 30-name list read out of the same communities the Vermont-mother post came from; 5-a-day outreach naming specific posts, ten calls booked (2.3a/b); 8 of 10 clear the ≥7/10 real-past-spend gate with one self-broken interview scored 3/10; the Money and location notebook questions from M1 both close (parents pay $70-120/session; specialty-first search confirmed); 2.4 prototype 4-of-5 pass with the fail producing the finding (price belongs on the profile) and the customer vocabulary for Module 3. Wiring (same commit per 30.03 §2.7): italic See-it-in-action line added to all 5 M2 lessons; M1 walkthrough's "Next: Module 2" now points at the new page; landing M2 card gains the walkthrough link. Gates: bin/hugo-build validators pass; bin/rake test:critical green (46 runs, 0 failures; 84 screenshots, no diffs); production link sweep clean; em-dash/banned-pattern sweeps clean on the new page. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…esolved Four independent gate reports (cold-eyes, ICP, claims, consolidated) converged on the same defects; every BLOCKER and MAJOR is fixed: - deleted all 6 in-lesson "Case Study: Tomas & Mia" blocks (30.03 §2.7: case studies live only at the module-end walkthrough; the blocks also contradicted the new walkthrough's numbers) - unified the build/pivot/kill gate to the canonical 7+/4-6/<4 in 2.4's combined decision matrix and the interview script (both previously used <5 = KILL with an undefined band); synthesis page now states the score≥7 ≡ real-past-spend equivalence so orientation-page phrasing is the same gate - synthesis page: proper "Module 2 · Synthesis · [CORE]" header, Progress line, 4-slot footer (was legacy 3-slot with "After Step 1" mislabel); 2.1's post-interview routing now goes synthesis-first - outreach-sequence-template fully rewritten as the true 2.3b companion (was a stale pre-split artifact: Calendly vs NeetoCal, Clay/Apollo 80-120-row lists vs 30 hand-picked names, $200-500 credit-card persona, "30 founders I've already spoken to" scripted lie, "Module 0" ref, 5%/2% bands). Now: Day-0/3/7 messages with honest first-round and experienced bump variants, LinkedIn/Reddit/waitlist openers, NeetoCal copy, tracking columns - Gmail-only, Sam-priced - dead links fixed: YC how-to-talk-to-users 404 (5 lessons), yannklis (dead domain), Lenny 404, designkit 404, Google sending-limits 404; vps-template phantom #synthesis anchors, PDF/SVG claim, Module 3->2 and Module 4->3 mislabels; script's ed-tech-story promise dropped - claims/voice sweep: Lovable/IdeaProof/ValidatorAI/Apollo/Perplexity/ Maze/panel price hardcodes -> capability language; unsourced precision (3-5x, 70%+ show, 8-12%, 60%+, 200%-better, reply-band conflicts) -> first-party framed or qualitative; "Most founders" x3 + slogany flips reworded; Pushshift (restricted API) dropped; unspaced hyphen-dashes fixed; 2.2's 4-column tracker -> 3 columns (375px rule); Lovable gloss deduped; fractional-CTO reviewer refs -> founder-peer; currency normalized to $; walkthrough's 11-booked/10-run gap explained; quickstart/HTCW "2-hour" prototype figures dropped; 30.03 line 243 updated (M2 walkthrough founder = Mia) Gates: bin/hugo-build 7 validators pass; bin/rake test:critical green (46 runs, 0 failures; 84 screenshots, no diffs); production link sweep clean; em-dash/banned-pattern sweeps clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…hesis anchors Reviewer re-verification of 83bcb14 confirmed all 5 fix clusters and caught one defect the genericization sweep introduced: 2.4's Lovable gloss read "Free trial; . No coding required." after the price removal - now "Free trial available." Also retargeted the 5 Module 3-5 links still pointing at 2.1's removed #synthesis anchor to the synthesis page (pre-existing, but they point into Module 2 so they ride this sprint). Gates: bin/hugo-build validators pass; bin/rake test:critical green (46 runs, 0 failures; 84 screenshots, no diffs). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 49 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (23)
📝 WalkthroughWalkthroughModule 2 was restructured into lessons 2.3–2.6, adding transcript synthesis and clickable prototype chapters. Lesson content, outreach templates, navigation, a Mia walkthrough, supporting course references, project records, and a banned-string validator were updated. ChangesModule 2 curriculum and lesson flow
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant CourseIndex
participant InterviewLessons
participant SynthesisLesson
participant PrototypeLesson
participant Module3Brief
CourseIndex->>InterviewLessons: route through lessons 2.1–2.4
InterviewLessons->>SynthesisLesson: provide interview transcripts
SynthesisLesson->>PrototypeLesson: route build decisions to lesson 2.6
PrototypeLesson->>Module3Brief: pass validated problem and prototype findings
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…overs
Sub-lettered indexes (2.3a/2.3b) read as A/B alternatives, carried no
information the Progress chain didn't, contradicted Module 1's flattened
1.1-1.5 precedent, and left the mandatory Synthesis gate without a number
("between 4 and 5 of 5"). Now: 2.1 Mom Test · 2.2 AI Personas [OPTIONAL] ·
2.3 Where to Look · 2.4 What to Say · 2.5 Synthesis · 2.6 Prototype.
- renumbered across all lesson titles/headers/Progress chains (n of 6),
yaml (synthesis added to the prev/next sequence as Chapter 2.5 - spine
count now derives 25 via course-stat), landing card (2.5 gets its own
row, synthesis removed from the templates line), quickstart, HTCW table,
and every cross-reference course-wide ("Ch 2.3 (a + b)" → "Ch 2.3-2.4",
prototype refs 2.4 → 2.6, synthesis 2.1b → 2.5)
- Chrome re-review of all M2 pages at 1280x800 caught two lessons (2.3,
2.5) shipping a stale copy of the pre-#345 landing cover ("18 chapters",
"14 free"); both replaced with purpose-made lesson covers in the family
style (30-name-list card; decision-gate card with 7+/4-6/<4 bands),
rendered 2x + Lanczos, alt texts updated
- verified via headless audit: all 8 M2 pages 200, headers 2.1-2.6
correct, zero stale letters, all images resolve, mermaid renders,
no horizontal overflow
- all M2 pages confirmed draft: false (publish-ready)
Gates: bin/hugo-build 7 validators pass (incl. title-yaml-match on the
renumber); bin/rake test:critical green (46 runs, 0 failures; 84
screenshots, no diffs); production link sweep clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Residual from the claims sweep - the 2.2 copy was fixed, the Chapter 0 tool-stack row still named specific frontier models. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fresh zero-context review after the 2.1-2.6 flatten found the exact
predicted failure mode: prose written against the old order. All fixed:
- 2.1's post-interview line routed readers straight to the prototype
(old next-chapter), skipping the 2.5 decision gate - now scores-first
- 2.6's exit-artifact table credited "Ch 2.1 synthesis" and ranged
"Ch 2.1-2.4" for artifacts its own chapter produces (now 2.5 / 2.1-2.6);
adjacent stale You-have-now recap now names 2.5 and 2.6 correctly
- vps-template: garbled mid-sentence fragment ("or ./mom-test-...))")
rewritten; spliced ../ URL cleaned
- walkthrough gets a proper Lesson 2.5 section (the synthesis pass was
the only lesson not modeled); description updated; gate verdict now
named as BUILD on the 7+/4-6/under-4 scale
- 2.5: doubled <hr> removed; See-it-in-action line added (only sibling
missing it); landing M2 card leave-line now names the build/pivot/kill
decision
Reviewer confirmed the data layer (yaml, prev/next chain, gate
consistency, links, anchors, voice) fully clean - these were the last
prose stragglers.
Gates: bin/hugo-build validators pass; bin/rake test:critical green
(46 runs, 0 failures; 84 screenshots, no diffs).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Root cause of review churn (7 rounds, each finding new defects): fixed defects could silently return and edits re-created old classes - nothing ratcheted. New validator 8 checks data/course_banned_strings.yaml (17 seed signatures from this cycle's review rounds) on every build; every future review fix adds its signature in the same commit. First run caught 3 live 'Most founders' instances human rounds missed - fixed. Unit tests updated (31 runs green); all 8 validators + critical suite green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 7
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
test/unit/course_validators_test.rb (1)
347-365: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winAdd
banned-string-ratchetto the asserted validator names.The test asserts
assert_equal 8and checks 7 of 8 names, but omitsassert_includes names, "banned-string-ratchet". A rename or swap of the 8th validator would pass silently as long as the count stays 8.🐛 Proposed fix
assert_includes names, "year-stamp-fabrication" + assert_includes names, "banned-string-ratchet" end🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/unit/course_validators_test.rb` around lines 347 - 365, Add an assertion for "banned-string-ratchet" to the validator name checks in test_run_all_returns_eight_results, ensuring all eight expected validators are explicitly verified.
🟡 Minor comments (16)
content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/index.md-50-50 (1)
50-50: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix subject–verb agreement.
Because “founder” is singular,
inheritshould beinherits.Proposed fix
-A non-technical founder typically inherit the daily standup ritual without ever being told what good looks like. +A non-technical founder typically inherits the daily standup ritual without ever being told what good looks like.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/index.md` at line 50, Fix the subject–verb agreement in the opening sentence by changing “inherit” to “inherits” for the singular subject “A non-technical founder.”content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/index.md-37-37 (1)
37-37: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix subject–verb agreement.
Because “founder” is singular,
learnshould belearns.Proposed fix
-A non-technical founder often learn engineering vocabulary under pressure, mid-meeting, with a bill on the table. +A non-technical founder often learns engineering vocabulary under pressure, mid-meeting, with a bill on the table.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/index.md` at line 37, Fix the subject–verb agreement in the opening paragraph: update “A non-technical founder often learn” to use the singular verb “learns.”content/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/index.md-33-43 (1)
33-43: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winKeep the callouts as continuous blockquotes.
The blank lines at Lines 42 and 249 trigger MD028 and may render the subsequent
Skip thisandAdvancedcontent outside the intended callouts. Prefix those blank lines with>or remove them.Also applies to: 248-250
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/index.md` around lines 33 - 43, Fix the Markdown blockquote continuity in the lesson content by removing the blank lines or adding a `>` marker at the affected gaps near the `Skip this if you've interviewed before.` and `Advanced` callouts, ensuring each callout remains a continuous blockquote and passes MD028.Source: Linters/SAST tools
content/course/tech-for-non-technical-founders-2026/mom-test-ask-about-past-not-future/index.md-32-42 (1)
32-42: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winKeep these callouts as continuous blockquotes.
The blank lines at Lines 39, 41, and 196 trigger MD028 and can cause the following text to render outside the intended callout. Replace each blank line with
>or remove it.Also applies to: 193-197
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/mom-test-ask-about-past-not-future/index.md` around lines 32 - 42, Fix the broken continuous blockquotes in the lesson content by replacing the blank lines at the referenced callout sections, including the area around “Where you are in the round” and lines 193–197, with standalone “>” markers or removing the blank lines. Preserve all callout text and ensure each blockquote renders as one continuous block.Source: Linters/SAST tools
content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md-39-39 (1)
39-39: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix the blank line inside the blockquote.
Remove the blank line or prefix it with
>so the callout remains one valid blockquote.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md` at line 39, Remove the blank line within the blockquote in the course content, or prefix that line with “>” so the entire callout remains a single valid blockquote.Source: Linters/SAST tools
content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md-40-42 (1)
40-42: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix the blank lines inside blockquotes.
Remove the blank lines or prefix them with
>so these callouts render as continuous blockquotes.Also applies to: 130-130, 386-386
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md` around lines 40 - 42, Remove blank lines within the blockquote callouts in the Markdown content, including the sections around the TL;DR and the locations referenced at lines 130 and 386; either delete the empty lines or prefix them with > so each callout renders as one continuous blockquote.Source: Linters/SAST tools
content/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/index.md-39-41 (1)
39-41: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix the blank lines inside the blockquote.
Remove the blank lines or prefix them with
>to keep the introductory callout as one valid blockquote.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/index.md` around lines 39 - 41, Fix the blockquote formatting around the TL;DR callout by removing blank lines inside the blockquote or prefixing those lines with “>”, keeping the entire introductory callout as one continuous blockquote.Source: Linters/SAST tools
content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md-203-203 (1)
203-203: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the stray quote in the Reddinbox entry.
The rendered sentence currently contains
Reddinbox / " These tools..., which is visibly malformed.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md` at line 203, Remove the stray double quote after the Reddinbox link in the monitoring tools paragraph, leaving the sentence to continue directly with “These tools surface the threads faster.”content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.md-39-43 (1)
39-43: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix the blank lines inside the blockquote.
Remove the blank lines or prefix them with
>so the introductory callout remains valid Markdown.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.md` around lines 39 - 43, Remove the blank lines between the blockquoted TL;DR and Part 2 paragraphs in the introductory callout, or prefix those lines with “>” so the entire callout remains a valid contiguous Markdown blockquote.Source: Linters/SAST tools
content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md-387-387 (1)
387-387: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winClarify that 7+ is a count threshold, not a score for every transcript.
“10 interview transcripts scored 7+/10 strong signal” reads as though all ten transcripts scored at least 7, conflicting with the documented 7-of-10 gate. State that ten transcripts were scored and at least seven met the strong-signal threshold.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md` at line 387, The Module 2 completion checklist in the closing statement must clarify the interview gate: replace “10 interview transcripts scored 7+/10 strong signal” with wording that indicates ten transcripts were scored and at least seven met the 7+/10 strong-signal threshold, consistent with the documented 7-of-10 requirement.content/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/index.md-125-125 (1)
125-125: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix the blank line inside the blockquote.
Remove the blank line or prefix it with
>so the closing callout remains valid Markdown.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/index.md` at line 125, Remove the blank line within the blockquote near the “If blocked” guidance, or prefix that line with “>”, so the callout remains valid Markdown.Source: Linters/SAST tools
content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md-129-129 (1)
129-129: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix the malformed Lovable pricing sentence.
The bold sentence ends with a period, followed by lowercase
and, producing broken prose. Join the clauses with a dash/comma or start a new sentence withPaid plans.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md` at line 129, Fix the malformed pricing prose in the “Practical Lovable onramp” paragraph by removing the period before “and” and joining the clauses correctly, or by starting a new sentence with “Paid plans”; preserve the existing meaning about paid plans being optional for this chapter.content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md-199-199 (1)
199-199: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winSoften the citation claim. Perplexity Pro and Gemini Deep Research are citation-oriented, but they don’t guarantee a source link for every individual claim. Rephrase this as “typically return citations” and keep the spot-check reminder.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md` at line 199, In the “Upgrade the AI ICP map prompt with a deep-research tool” section, soften the citation claim for Perplexity Pro and Gemini Deep Research by replacing “return real-source citations for every claim” with wording that says they typically return citations, while preserving the reminder to spot-check each proposed community and collect reusable quote snippets.content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/index.md-81-81 (1)
81-81: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winKeep the booking guidance aligned with the interview script.
“Book 30 minutes, ask for 20 - the good calls run long” conflicts with the script’s bounded format: 20 minutes of talking, 5 minutes for scoring, and “Do not go over.” Replace this with explicit wrap-up/scoring buffer guidance so callers do not normalize overruns.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/index.md` at line 81, The duration guidance conflicts with the bounded interview format. Replace the “book 30 minutes, ask for 20” wording in the outreach sequence with explicit guidance to reserve 20 minutes for the conversation and 5 minutes afterward for scoring and wrap-up, emphasizing that calls should not run over.content/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/index.md-65-65 (1)
65-65: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winAlign the section heading with the updated source chapter.
Line 63 still says “Chapter 2.1 synthesis,” while this line links to Ch 2.5. Update one of them so the template has a single authoritative chapter number.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/index.md` at line 65, Align the chapter reference in the surrounding section heading with the linked validated problem statement in the “What goes in it” guidance, ensuring both use the same authoritative chapter number.content/course/tech-for-non-technical-founders-2026/vibe-prd-template/index.md-27-27 (1)
27-27: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUpdate the stale synthesis chapter label.
The link points to the synthesis page, but the text still says “Chapter 2.1.” Use the current chapter number, likely Ch 2.5, consistently with the revised Module 2 structure.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@content/course/tech-for-non-technical-founders-2026/vibe-prd-template/index.md` at line 27, Update the Chapter 2.1 label in the synthesis link description within the Vibe PRD template to the current Chapter 2.5 designation, keeping the existing link target unchanged.
🧹 Nitpick comments (2)
test/unit/course_validators_test.rb (1)
347-388: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd dedicated tests for the banned-string ratchet validator.
No test verifies that
check_banned_stringsactually detects a banned string, tests scope filtering, or exercises the missing-YAML fallback. The existingtest_missing_yaml_file_does_not_crashdoesn't cover this validator's missing-file path due to the hardcodedratchet_path(see related comment inlib/course_validators.rb). A bug in the validator's regex, string matching, or scope logic would go undetected.As per coding guidelines, new tests in
test/unit/should be behavior-focused — these would test the observable behavior (violation reported vs. not) without coupling to internals.♻️ Example test cases
# ── Validator 8: banned-string regression ratchet ────────────────────── def test_banned_strings_detects_violation File.write("#{`@tmpdir`}/data/course_banned_strings.yaml", YAML.dump({ "banned" => [{ "string" => "Most founders", "reason" => "test ban" }] })) write_course_chapter(slug: "ch1", title: "1.1 · Test", body: "Most founders skip this step.\n") result = CourseValidators.run_all.find { |r| r.name == "banned-string-ratchet" } refute result.passed, "Banned string should be detected" assert result.violations.any? { |v| v.include?("Most founders") } end def test_banned_strings_scope_filters_by_directory File.write("#{`@tmpdir`}/data/course_banned_strings.yaml", YAML.dump({ "banned" => [{ "string" => "banned phrase", "reason" => "scoped", "scope" => "module-1-" }] })) write_course_chapter(slug: "module-1-lesson", title: "1.1 · Test", body: "This has banned phrase here.\n") write_course_chapter(slug: "module-2-lesson", title: "2.1 · Test", body: "This has banned phrase here too.\n") result = CourseValidators.run_all.find { |r| r.name == "banned-string-ratchet" } refute result.passed assert result.violations.any? { |v| v.include?("module-1-lesson") } refute result.violations.any? { |v| v.include?("module-2-lesson") } end def test_banned_strings_missing_yaml_passes FileUtils.rm_f("#{`@tmpdir`}/data/course_banned_strings.yaml") write_course_chapter(slug: "ch1", title: "1.1 · Test", body: "Content.\n") result = CourseValidators.run_all.find { |r| r.name == "banned-string-ratchet" } assert result.passed, "Missing banned-strings YAML should not crash" end🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/unit/course_validators_test.rb` around lines 347 - 388, Add behavior-focused tests for the banned-string-ratchet result returned by CourseValidators.run_all: verify a configured phrase produces a violation containing the phrase, scope filtering reports only matching chapter slugs, and a missing banned-strings YAML file passes without crashing. Place these alongside the existing run_all tests and identify the validator by its result name, "banned-string-ratchet".Source: Coding guidelines
lib/course_validators.rb (1)
343-367: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winExtract
BANNED_STRINGS_PATHas a class constant for test isolation.
ratchet_pathis hardcoded as a local variable, unlikeYAML_PATH,COURSE_DIR, andALL_BLOG_DIRwhich are class constants overridden in test setup. This means tests read the realdata/course_banned_strings.yamlfrom the project root instead of a temp fixture. Consequences:
test_missing_yaml_file_does_not_crashremoves#{@tmpdir}/databut the validator still finds the real file — the missing-file fallback path is never exercised for this validator.- Tests pass only because test content (
"Content.\n") doesn't match any of the 17 real banned strings. Adding a future banned string that matches test content would silently break tests.♻️ Proposed fix
YAML_PATH = "data/course_sequence.yaml" + BANNED_STRINGS_PATH = "data/course_banned_strings.yaml" ALL_BLOG_DIR = "content/blog"def check_banned_strings violations = [] - ratchet_path = "data/course_banned_strings.yaml" - if File.exist?(ratchet_path) - entries = YAML.load_file(ratchet_path).fetch("banned", []) + if File.exist?(BANNED_STRINGS_PATH) + entries = YAML.load_file(BANNED_STRINGS_PATH).fetch("banned", []) course_chapters.each do |path|And in
test/unit/course_validators_test.rbsetup/teardown:`@orig_yaml_path` = CourseValidators::YAML_PATH + `@orig_banned_strings_path` = CourseValidators::BANNED_STRINGS_PATHsilence_warnings do CourseValidators.const_set(:COURSE_DIR, "#{`@tmpdir`}/content/blog") CourseValidators.const_set(:ALL_BLOG_DIR, "#{`@tmpdir`}/content/blog") CourseValidators.const_set(:YAML_PATH, "#{`@tmpdir`}/data/course_sequence.yaml") + CourseValidators.const_set(:BANNED_STRINGS_PATH, "#{`@tmpdir`}/data/course_banned_strings.yaml") endsilence_warnings do CourseValidators.const_set(:COURSE_DIR, `@orig_course_dir`) CourseValidators.const_set(:ALL_BLOG_DIR, `@orig_all_blog_dir`) CourseValidators.const_set(:YAML_PATH, `@orig_yaml_path`) + CourseValidators.const_set(:BANNED_STRINGS_PATH, `@orig_banned_strings_path`) end🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@lib/course_validators.rb` around lines 343 - 367, Extract the hardcoded ratchet path in check_banned_strings into a class constant named BANNED_STRINGS_PATH, and use that constant instead of the local "data/course_banned_strings.yaml" value. Update test setup and teardown to override and restore BANNED_STRINGS_PATH alongside YAML_PATH, COURSE_DIR, and ALL_BLOG_DIR so tests use the temporary fixture and exercise the missing-file fallback.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md`:
- Around line 352-353: Resolve the overlapping outcomes in the decision matrix
by adding an explicit precedence rule or revising the conditions so each result
maps to exactly one route. Update the matrix near the “KILL” and “STOP, don't
proceed to M3” rows, prioritizing the appropriate action when both conditions
are true.
In
`@content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.md`:
- Line 40: The TL;DR outreach math overstates the expected result from 30
messages. Update the recommendation and related conversion figures in the TL;DR
and corresponding section to align 20–30% replies with roughly 50% attendance,
or explicitly identify 10 interviews as a best-case outcome.
- Line 135: Replace the unsupported absolute claims in the opener sentence with
qualified language, such as stating that it often outperforms colder variants
and may be among the strongest examples in the chapter.
In
`@content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md`:
- Line 174: Correct the final table-cell reference in the PMF test lesson so the
visible chapter/lesson label matches the destination
`/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/`;
update either the label or URL consistently, using the surrounding table row as
the edit location.
In
`@content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md`:
- Line 98: The self-serve gate conflicts with the Q1 definition because it omits
the required Ch 2.6 prototype criterion. Update the paragraph beginning “Pick
this path when” to include the current Ch 2.6 successful prototype-run
requirement, ensuring the gate matches the decision matrix; alternatively,
remove that requirement from Q1 so both rules are consistent.
In
`@content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/index.md`:
- Around line 53-55: Keep the validation requirement consistent throughout the
template: either change the new “one advisor plus one peer” guidance back to two
advisors, or update the sign-off fields and all downstream instructions to
explicitly accept one advisor and one peer, including their respective
signatures.
In
`@docs/projects/2605-tech-for-non-technical-founders/30-39-architecture-design/30.03-course-format-requirements-for-creators.md`:
- Line 385: Update the Module 2 “Validate” row to match the revised core-path
sequence: replace “2.4 Prototype” with “2.5 Synthesis” and “2.6 Clickable
Prototype,” and add the required build/pivot/kill decision step, matching the
ordering and naming in the course sequence definition.
---
Outside diff comments:
In `@test/unit/course_validators_test.rb`:
- Around line 347-365: Add an assertion for "banned-string-ratchet" to the
validator name checks in test_run_all_returns_eight_results, ensuring all eight
expected validators are explicitly verified.
---
Minor comments:
In
`@content/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/index.md`:
- Around line 33-43: Fix the Markdown blockquote continuity in the lesson
content by removing the blank lines or adding a `>` marker at the affected gaps
near the `Skip this if you've interviewed before.` and `Advanced` callouts,
ensuring each callout remains a continuous blockquote and passes MD028.
In
`@content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md`:
- Around line 40-42: Remove blank lines within the blockquote callouts in the
Markdown content, including the sections around the TL;DR and the locations
referenced at lines 130 and 386; either delete the empty lines or prefix them
with > so each callout renders as one continuous blockquote.
- Line 387: The Module 2 completion checklist in the closing statement must
clarify the interview gate: replace “10 interview transcripts scored 7+/10
strong signal” with wording that indicates ten transcripts were scored and at
least seven met the 7+/10 strong-signal threshold, consistent with the
documented 7-of-10 requirement.
- Line 129: Fix the malformed pricing prose in the “Practical Lovable onramp”
paragraph by removing the period before “and” and joining the clauses correctly,
or by starting a new sentence with “Paid plans”; preserve the existing meaning
about paid plans being optional for this chapter.
In
`@content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md`:
- Line 39: Remove the blank line within the blockquote in the course content, or
prefix that line with “>” so the entire callout remains a single valid
blockquote.
- Line 203: Remove the stray double quote after the Reddinbox link in the
monitoring tools paragraph, leaving the sentence to continue directly with
“These tools surface the threads faster.”
- Line 199: In the “Upgrade the AI ICP map prompt with a deep-research tool”
section, soften the citation claim for Perplexity Pro and Gemini Deep Research
by replacing “return real-source citations for every claim” with wording that
says they typically return citations, while preserving the reminder to
spot-check each proposed community and collect reusable quote snippets.
In
`@content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.md`:
- Around line 39-43: Remove the blank lines between the blockquoted TL;DR and
Part 2 paragraphs in the introductory callout, or prefix those lines with “>” so
the entire callout remains a valid contiguous Markdown blockquote.
In
`@content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/index.md`:
- Line 37: Fix the subject–verb agreement in the opening paragraph: update “A
non-technical founder often learn” to use the singular verb “learns.”
In
`@content/course/tech-for-non-technical-founders-2026/mom-test-ask-about-past-not-future/index.md`:
- Around line 32-42: Fix the broken continuous blockquotes in the lesson content
by replacing the blank lines at the referenced callout sections, including the
area around “Where you are in the round” and lines 193–197, with standalone “>”
markers or removing the blank lines. Preserve all callout text and ensure each
blockquote renders as one continuous block.
In
`@content/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/index.md`:
- Around line 39-41: Fix the blockquote formatting around the TL;DR callout by
removing blank lines inside the blockquote or prefixing those lines with “>”,
keeping the entire introductory callout as one continuous blockquote.
- Line 125: Remove the blank line within the blockquote near the “If blocked”
guidance, or prefix that line with “>”, so the callout remains valid Markdown.
In
`@content/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/index.md`:
- Line 65: Align the chapter reference in the surrounding section heading with
the linked validated problem statement in the “What goes in it” guidance,
ensuring both use the same authoritative chapter number.
In
`@content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/index.md`:
- Line 81: The duration guidance conflicts with the bounded interview format.
Replace the “book 30 minutes, ask for 20” wording in the outreach sequence with
explicit guidance to reserve 20 minutes for the conversation and 5 minutes
afterward for scoring and wrap-up, emphasizing that calls should not run over.
In
`@content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/index.md`:
- Line 50: Fix the subject–verb agreement in the opening sentence by changing
“inherit” to “inherits” for the singular subject “A non-technical founder.”
In
`@content/course/tech-for-non-technical-founders-2026/vibe-prd-template/index.md`:
- Line 27: Update the Chapter 2.1 label in the synthesis link description within
the Vibe PRD template to the current Chapter 2.5 designation, keeping the
existing link target unchanged.
---
Nitpick comments:
In `@lib/course_validators.rb`:
- Around line 343-367: Extract the hardcoded ratchet path in
check_banned_strings into a class constant named BANNED_STRINGS_PATH, and use
that constant instead of the local "data/course_banned_strings.yaml" value.
Update test setup and teardown to override and restore BANNED_STRINGS_PATH
alongside YAML_PATH, COURSE_DIR, and ALL_BLOG_DIR so tests use the temporary
fixture and exercise the missing-file fallback.
In `@test/unit/course_validators_test.rb`:
- Around line 347-388: Add behavior-focused tests for the banned-string-ratchet
result returned by CourseValidators.run_all: verify a configured phrase produces
a violation containing the phrase, scope filtering reports only matching chapter
slugs, and a missing banned-strings YAML file passes without crashing. Place
these alongside the existing run_all tests and identify the validator by its
result name, "banned-string-ratchet".
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 6f87b6f0-dfdd-4379-a9b4-4db8352e95a1
⛔ Files ignored due to path filters (2)
content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/cover.pngis excluded by!**/*.pngcontent/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/cover.pngis excluded by!**/*.png
📒 Files selected for processing (39)
content/course/tech-for-non-technical-founders-2026/_index.mdcontent/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/index.mdcontent/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.mdcontent/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.mdcontent/course/tech-for-non-technical-founders-2026/faq/index.mdcontent/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.mdcontent/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.mdcontent/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.mdcontent/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/index.mdcontent/course/tech-for-non-technical-founders-2026/how-this-course-works/index.mdcontent/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/index.mdcontent/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/index.mdcontent/course/tech-for-non-technical-founders-2026/mom-test-ask-about-past-not-future/index.mdcontent/course/tech-for-non-technical-founders-2026/mom-test-interview-script/index.mdcontent/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/index.mdcontent/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.mdcontent/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/index.mdcontent/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.mdcontent/course/tech-for-non-technical-founders-2026/outreach-sequence-template/index.mdcontent/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/index.mdcontent/course/tech-for-non-technical-founders-2026/quickstart/index.mdcontent/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.mdcontent/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.mdcontent/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.mdcontent/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/index.mdcontent/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/index.mdcontent/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/index.mdcontent/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/index.mdcontent/course/tech-for-non-technical-founders-2026/vibe-prd-template/index.mddata/course_banned_strings.yamldata/course_sequence.yamldocs/projects/2605-tech-for-non-technical-founders/30-39-architecture-design/30.03-course-format-requirements-for-creators.mddocs/projects/2605-tech-for-non-technical-founders/40-49-review/40.12-m2-release-gate-2026-07-09.mddocs/projects/2605-tech-for-non-technical-founders/40-49-review/40.13-retrospective-review-churn-2026-07-10.mddocs/projects/2605-tech-for-non-technical-founders/GOAL-AT-A-GLANCE.mddocs/projects/2605-tech-for-non-technical-founders/PROJECT-INDEX.mddocs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.mdlib/course_validators.rbtest/unit/course_validators_test.rb
| | Under 4 of 10 scored ≥7 | (any) | **KILL** - the problem is too weak for this ICP. Return to Ch 1.1 with a different customer or problem blank rewritten. | | ||
| | (any) | 0-1 of 5 passed | **STOP, don't proceed to M3** - the solution shape is fundamentally wrong; return to Ch 2.1 | |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Resolve the overlapping decision-matrix outcomes.
A result with fewer than four strong interview signals and 0–1 prototype passes matches both rows: one says KILL and restart at Ch 1.1, while the other says STOP and return to Ch 2.1. Add an explicit precedence rule or split the conditions so learners receive one deterministic route.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md`
around lines 352 - 353, Resolve the overlapping outcomes in the decision matrix
by adding an explicit precedence rule or revising the conditions so each result
maps to exactly one route. Update the matrix near the “KILL” and “STOP, don't
proceed to M3” rows, prioritizing the appropriate action when both conditions
are true.
| > "You signed up for the waitlist on [page] last Tuesday - up for a 20-minute call?" | ||
|
|
||
| Reply rates on that opener run 60%+ - the highest in this whole chapter. | ||
| That opener out-performs every cold variant - the person already raised a hand - the highest in this whole chapter. |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Replace the unsupported absolute performance claim.
“Out-performs every cold variant” and “the highest in this whole chapter” cannot be established from the surrounding guidance. Use a qualified statement such as “often outperforms colder variants.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@content/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/index.md`
at line 135, Replace the unsupported absolute claims in the opener sentence with
qualified language, such as stating that it often outperforms colder variants
and may be among the strongest examples in the chapter.
| | **You built for the wrong segment** | The product works, but the people you onboarded do not have the pain. Your Q5 slice shows: one segment is at 55%, the rest are at 5%. | Stop selling to the audience and start selling to the segment. | [Chapter 5.3a](/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/) personal-network outreach to the right segment. | | ||
| | **You built the right thing, but it is not finished** | The Q3 verbatims are hedged ("it is nice to have," "I would use it if it had X"). The main benefit answers lack conviction. | Go back into the build and finish the thing. | Schedule a [Friday demo](/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/) with the next release. | | ||
| | **The pain is real, but your product is not the relief** | The Q4 verbatims name a workaround that is already 80% of the job (a spreadsheet, an existing tool, a person they pay). | Either niche into the 20% the workaround does not cover, or pivot. | [Chapter 2.1](/course/tech-for-non-technical-founders-2026/mom-test-ask-about-past-not-future/#synthesis-write-down-what-you-heard-decide-whats-next) validated-problem statement. | | ||
| | **The pain is real, but your product is not the relief** | The Q4 verbatims name a workaround that is already 80% of the job (a spreadsheet, an existing tool, a person they pay). | Either niche into the 20% the workaround does not cover, or pivot. | [Chapter 2.1](/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/) validated-problem statement. | |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Correct the chapter label or destination URL.
The link points to mom-test-synthesis-build-pivot-kill, which is Lesson 2.5, but the visible label says “Chapter 2.1.” This sends readers to the right-looking artifact under the wrong lesson reference and breaks the revised numbering contract.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md`
at line 174, Correct the final table-cell reference in the PMF test lesson so
the visible chapter/lesson label matches the destination
`/course/tech-for-non-technical-founders-2026/mom-test-synthesis-build-pivot-kill/`;
update either the label or URL consistently, using the surrounding table row as
the edit location.
| ### 2. Self-serve build ([The Self-Serve MVP Stack](/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/)) | ||
|
|
||
| Pick this path when the problem is validated (10+ Mom Test interviews with ≥7 strong-signal scores per the Ch 2.1b synthesis rubric + a Ch 1.4 smoke test that cleared the 6%+ "Promising" band - pre-orders and paid pilots are produced LATER in Module 5, do not require them as the gate), the scope is one workflow for one persona, and the backend requirements are simple - no real-time collaboration, no complex refund flows, no compliance scope. | ||
| Pick this path when the problem is validated (10+ Mom Test interviews with ≥7 strong-signal scores per the Ch 2.5 synthesis rubric + a Ch 1.4 smoke test that cleared the 6%+ "Promising" band - pre-orders and paid pilots are produced LATER in Module 5, do not require them as the gate), the scope is one workflow for one persona, and the backend requirements are simple - no real-time collaboration, no complex refund flows, no compliance scope. |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Make the self-serve gate match the decision matrix.
This paragraph permits self-serve after interviews and the smoke test, while the Q1 definition below still requires a successful prototype run. The two rules can route the same founder differently. Add the current Ch 2.6 prototype criterion here, or remove it from Q1.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/index.md`
at line 98, The self-serve gate conflicts with the Q1 definition because it
omits the required Ch 2.6 prototype criterion. Update the paragraph beginning
“Pick this path when” to include the current Ch 2.6 successful prototype-run
requirement, ensuring the gate matches the decision matrix; alternatively,
remove that requirement from Q1 so both rules are consistent.
| |---|---|---| | ||
| | M1 (Hypothesis & Smoke Test) | 1.1 Hypothesis, 1.2a Build page, 1.2b Run test, 1.3 Price test | Validation tools field guide | | ||
| | M2 (Validate) | 2.1 Mom Test, 2.3a Find people, 2.3b Outreach, 2.4 Prototype | 2.2 AI Personas | | ||
| | M2 (Validate) | 2.1 Mom Test, 2.3 Find people, 2.4 Outreach, 2.4 Prototype | 2.2 AI Personas | |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Update the Module 2 core-path numbering.
This row still lists 2.4 Prototype, but the revised sequence defines 2.5 as synthesis and 2.6 as the clickable prototype. It also omits the required build/pivot/kill decision step, leaving this architecture guidance inconsistent with data/course_sequence.yaml:79-86.
Proposed correction
-| M2 (Validate) | 2.1 Mom Test, 2.3 Find people, 2.4 Outreach, 2.4 Prototype | 2.2 AI Personas |
+| M2 (Validate) | 2.1 Mom Test, 2.3 Find people, 2.4 Outreach, 2.5 Synthesis, 2.6 Prototype | 2.2 AI Personas |📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| | M2 (Validate) | 2.1 Mom Test, 2.3 Find people, 2.4 Outreach, 2.4 Prototype | 2.2 AI Personas | | |
| | M2 (Validate) | 2.1 Mom Test, 2.3 Find people, 2.4 Outreach, 2.5 Synthesis, 2.6 Prototype | 2.2 AI Personas | |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@docs/projects/2605-tech-for-non-technical-founders/30-39-architecture-design/30.03-course-format-requirements-for-creators.md`
at line 385, Update the Module 2 “Validate” row to match the revised core-path
sequence: replace “2.4 Prototype” with “2.5 Synthesis” and “2.6 Clickable
Prototype,” and add the required build/pivot/kill decision step, matching the
ordering and naming in the course sequence definition.
Card 5 rect ends at y=890 but the viewBox was 880 tall, cutting the card's bottom border (user-reported screenshot). Extended to 910. Swept all course SVGs for the same content-past-viewBox defect - this was the only instance. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mom-test-script.svg background rect kept the old 880 height after the viewBox fix - Q5 card overhung the panel. Both now 910 (user-reported). 40.14 records the verified fan-out findings (65: 20 MAJOR/34 MINOR/11 NIT, 69 agents, adversarially verified) for the fix loop. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
External reader review triaged: adopted (1) expectation-setting - first interviews will be awkward and you will accidentally pitch; normalized by pointing at Mia's own 3/10 first call in the walkthrough; (2) the no-story interviewee failure mode - end politely at 10 minutes and count it as [customer]-blank data. Deferred: downloadable cheat sheet (already tracked as the P1 PDF-templates backlog item; Interview Script page is the printable card until then). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Second external review triaged. Most 'watch out' items were already covered (politeness bias :127, generic-persona failure signal :214, false-confidence warning :231, rehearsal-validates-questions-not-business) - confirming the page. Adopted the two genuinely new pieces: (1) GIGO gets an action, not just a warning - can't write 3 distinct personas -> route back to 1.1 and tighten the [customer] blank; (2) Objection Tracker gains the emotional-prep framing - having sat with an objection in rehearsal, you take notes instead of getting defensive and pitching when a real customer raises it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Four more external reviews triaged (2.3, 2.4, 2.5, 2.6). Nearly all points confirmed existing content (pattern-vs-average, pre-order test, silent observation, be-human-first etiquette, throwaway discipline). Adopted the two genuinely new pieces: (1) 2.3 perfectionism time-box - day three still polishing the list means stop; 25 good rows now beat 30 perfect rows next week; (2) 2.4 outreach-anxiety reframe - you ask people about their own expertise, more are flattered than bothered. Skipped: 2.5 'why now' timing factor (gate scope expansion - backlog candidate). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…view-flow diagram Six parallel fixers with disjoint file ownership worked the full 40.14 punch list; every finding FIXED or skipped-with-reason (stale/other-owner): - M1 boundary: 1.1 no longer instructs pitching the hypothesis in interviews (Module 2 uses it to pick who/what, never read aloud); 1.4's Promising band restores the 1.4→1.5→2.1 spine; "3 ICP characteristics from Ch 1.1" softened everywhere to deriving from the [customer] blank (which 1.1 actually produces) - 2.5/2.6 routing seams: BUILD routes through 2.6 then 3.1 in flowchart, body, and template checkbox; KILL has ONE destination (1.1 → 2.3) across flowchart/body/Next; 2.6's Input/Progress now carry 2.5's decision + validated problem statement - wrong instructions: 2.6 step 1 uses its own 3-screen prompt (was 2.2's persona prompt); 2.4's Output books calls (no phantom transcripts); FAQ's binary "Directional KILL" now the 7+/4-6/<4 gate - sweep damage: Reddinbox fragment and orphaned Lovable clause rewritten; "Sam" persona leak removed (2.6 + ratchet caught 2 more in M3/M4 chapters); "47-button" fake-specific broken across 2 files - claims/consistency: Stripe Tax false "launching Q1 2026" claim fixed; Apollo credit hardcodes → capability language; session-length and pre-order-count contradictions unified; HTCW M2 time honest (~3-5 wks); yaml 2.4 goal closes the funnel arithmetic - interview-flow mermaid compressed 1881px → 971px (Q2-Q5 collapsed to one node, diamonds → compact rects) per the 2x-viewport rule Ratchet grew 17 → 25 signatures; the new entries immediately caught 3 instances outside M2 scope (fixed). Out-of-scope note: "Artifact #N of 6" labels in 3.1/4.3b/5.4 renumber in their module sprints. Gates: all 8 validators pass; bin/rake test:critical green (46 runs, 0 failures; 84 screenshots, no diffs); production link sweep clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
TASK-TRACKER/PROJECT-INDEX/GOAL-AT-A-GLANCE updated: M2 v2 migration complete (flattened 2.1-2.6, walkthrough, all review rounds closed, regression ratchet live, 8 reader-review adoptions); 40.14 marked ALL FIXED; carry-forwards recorded (artifact-label renumbering in M3-M5 sprints, word-band decision, 'why now' backlog idea). Next stream: M3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The 2.4 goal update (30-name list -> 10 booked interviews, expand-if-thin) was applied in the working tree during the M2 sprint but never committed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Supersedes the stale '2 chapters -> ~3 micro-lessons' plan: 1:1 lesson mapping (no splits), Mia walkthrough, vibe-prd-template companion alignment, 5 known defects pre-listed, 40.06-grounded content improvements in/out of scope, 40.13 ratchet discipline + ordered gates. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
I1-I3 from 40.06 friction (3.2 hook reframe, AI-critic manual fallback, explicit Done gate); I4-I5 from documented content-organization rules (2-forks decision table, first-fold hero check). Each with exact landing spot, wired into the ordered steps; backlog rows closed by the sprint noted. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GYRU9wGepomJo5hSuqtu7V
Summary
Brings Module 2 (Validate the Problem) to the same v2 standard Module 1 shipped at in #345: template alignment, the Module 2 Mia walkthrough, a full multi-gatekeeper review loop, and every BLOCKER/MAJOR finding resolved with independent re-verification.
What's in the sprint (6 commits)
Lesson 2.x · [CORE/OPTIONAL]headers (old "Step N of 4" miscounted 5 chapters), Progress chain M2 · 1-5 of 5 with accumulating results, "After this lesson you will be able to" outcome lines, Done/You-have-now/Next/If-blocked footers.module-2-walkthrough-mia) — continues the M1 composite story with every number consistent with the lessons it exercises (8 of 10 clear the ≥7/10 gate; her M1 Money and location notebook questions both close); See-it-in-action lines wired into all 5 lessons, the M1 walkthrough, and the landing card in the same commit.40.12(4 independent gate reports: cold-eyes, ICP, claims, consolidated — all converged).outreach-sequence-templatefully rewritten from a stale 233-line funded-founder tool-stack artifact into a 95-line true 2.3b companion (Gmail + NeetoCal, honest bump variants); synthesis page got proper header/Progress/4-slot footer; 5 dead external links fixed; volatile price hardcodes → capability language; fabricated-precision stats → first-party or qualitative; "Most founders" ×3 + slogany flips reworded; 4-column mobile table fixed; currency normalized.Verification
bin/hugo-build— all 7 course validators passbin/rake test:criticalgreen on every commit (46 runs, 0 failures; 84 visual-regression screenshots, no diffs)Known, deliberately out of scope (tracked in 40.12): the word-count band gap vs the 30.03 spec (pre-existing, needs a split-or-waiver decision), and Module 3-5 in-lesson case-study blocks (their modules' sprints).
🤖 Generated with Claude Code
Summary by CodeRabbit