Fix claim-guard false positives, rename the offer, drop plumbing language - #9
Conversation
Both scanner paths flagged text that forbids a claim as though it made it. - agentWorkClaimRiskFlags path pushed findings without consulting allowedGuardrail, which the rule path below it already did. - genericGuarantee only stripped guaranteeGuardrail, which recognises "do not promise/guarantee" but not "do not mention guaranteed ...", so the bare word survived and tripped the rule. Neither change weakens detection of an actual promise: the exemption is per-clause and only applies to clauses that are themselves prohibitions.
'buyer promise' next to a change verb trips the outbound claim guard. Describing a promise is not making one, but the shape is worth avoiding in copy that reaches a buyer, so the wording changes rather than the guard.
The test regenerates these in a temp repo containing only scripts/, growth-brain/, contracts/ and docs/ — no clients/ or prospects/. Artifacts regenerated on a machine that has local client data therefore diverge and read as stale. Regenerated the six affected files in a matching clean tree.
Offer name drops the plumbing metaphor: '7-Day Website Revenue Leak Fix
Sprint' becomes 'The 7-Day Website Correction' across config, generators,
surfaces and the two lowercase product-truth regexes.
The claim-guard exemption is deliberately narrow: only an instruction that
forbids stating a claim ('do not mention', 'will not promise') is exempt.
The broad allowedGuardrail was wrong here because it also matched
'We guarantee 20 leads, with no guarantees beyond that', which the
operator-surfaces test plants precisely to prove it stays caught.
Same rule the public pages already follow: no 7-day commitment in buyer-facing language. The offer is The Website Correction.
clauseBoundary splits on : . ! ? ; and conjunctions, not commas, so 'No revenue, ranking, or sales-volume guarantees' arrives as one clause and read as a promise once the risk-flag rule saw it whole. Two clause sets, because the rules need different things. The risk-flag rule reads a clause whole, so a prohibition-opening clause is dropped. The generic rule strips guaranteeGuardrail first, so that clause is kept: a promise can still hide after the disclaimer, which is what 'Neither results are guaranteed, placement is guaranteed' plants and what the earlier, wider exemption let through.
Prose only, with word boundaries that skip camelCase: leakMap, LeakLoop and leakFragment are internal identifiers that never reach a client, and renaming them would risk the suite for no buyer benefit. The roofcare reference packet keeps its leaks, which are literal. 120 files. npm test green.
|
Too many files changed for review (128 files, 100 file limit). Bypass the limit by tagging |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (14)
📝 WalkthroughWalkthroughThe pull request renames the active offer to The Website Correction and changes leak terminology to fault terminology across source documents, generated outputs, validation scripts, proof workflows, and test fixtures. It also updates generated dates and improves outbound claim-safety clause filtering. ChangesWebsite Correction terminology migration
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
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)
scripts/prepare-prospect-close-package.mjs (1)
220-224: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winRemove the remaining 7-day buyer-facing reference.
The generated proposal still says
By the end of 7 days. This PR explicitly removes 7-day offer references, but this close package still exposes one. Replace it with approved wording that does not name seven days.Proposed wording
-By the end of 7 days, ${name} receives: +By completion of the implementation period, ${name} receives:🤖 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 `@scripts/prepare-prospect-close-package.mjs` around lines 220 - 224, Update the generated proposal wording in the Sprint Outcome section of prepare-prospect-close-package.mjs to remove the buyer-facing “By the end of 7 days” reference, replacing it with approved wording that does not mention seven days while preserving the outcome description.
🟡 Minor comments (29)
scripts/check-outbound-claim-safety.mjs-17-17 (1)
17-17: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winRecognize negative contractions in
forbidsMention.
forbidsMentionacceptsDo not mention guaranteed revenue, but notDon't mention guaranteed revenue. The latter reaches the generic-guarantee check and produces the false positive this filter must prevent.Add contraction variants and test both ASCII and typographic apostrophes.
Proposed fix
-const forbidsMention = /\b(?:do(?:es)? not|will not|shall not|won't|never|avoid)\s+(?:mention|say|write|use|claim|state|imply|suggest|reference|promise|guarantee)\b/i; +const forbidsMention = /\b(?:do(?:es)? not|don['’]?t|doesn['’]?t|will not|shall not|won't|never|avoid)\s+(?:mention|say|write|use|claim|state|imply|suggest|reference|promise|guarantee)\b/i;🤖 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 `@scripts/check-outbound-claim-safety.mjs` at line 17, Update the forbidsMention pattern to recognize negative contractions such as “don't mention” alongside existing negation forms, supporting both ASCII and typographic apostrophes. Add or update tests covering both apostrophe variants and confirm these phrases bypass the generic-guarantee check..agents/skills/speckit-specify/SKILL.md-171-171 (1)
171-171: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRestore the checklist meaning.
fault intois not grammatical and does not state that implementation details must remain outside the specification. Use direct wording such asNo implementation details are included in the specification.🤖 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 @.agents/skills/speckit-specify/SKILL.md at line 171, Update the checklist item in SKILL.md to use grammatical wording that clearly states implementation details are excluded from the specification, such as “No implementation details are included in the specification.”growth-brain/build-roadmap.md-5-5 (1)
5-5: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the duplicate article from the offer name.
Line 5 renders
the The Website Correction. Remove the outerthe.Proposed copy fix
-Only work that helps sell, deliver, prove, or retain the **The Website Correction** for one highest-leverage page: +Only work that helps sell, deliver, prove, or retain **The Website Correction** for one highest-leverage page:As stated in the PR objectives, the exact offer name is The Website Correction.
🤖 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 `@growth-brain/build-roadmap.md` at line 5, Update the line 5 sentence to remove the outer article before the offer name, so it renders exactly “The Website Correction” rather than “the The Website Correction”; preserve the rest of the sentence unchanged.growth-brain/README.md-3-3 (1)
3-3: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the duplicate article from the offer name.
Line 3 renders
the The Website Correction. The product name already starts withThe.Proposed copy fix
-This folder powers one human-reviewed managed service: the **The Website Correction**. +This folder powers one human-reviewed managed service: **The Website Correction**.As stated in the PR objectives, the exact offer name is The Website Correction.
🤖 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 `@growth-brain/README.md` at line 3, Update the offer description in the README so it uses the exact product name “The Website Correction” once, removing the duplicated leading “The” while preserving the surrounding sentence.growth-brain/agency-operating-model.md-3-3 (1)
3-3: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the duplicate article from the offer name.
Line 3 renders
the The Website Correction. Remove the outerthe.Proposed copy fix
-TinyStudio currently operates one human-reviewed managed service: the **The Website Correction** for one highest-leverage page. +TinyStudio currently operates one human-reviewed managed service: **The Website Correction** for one highest-leverage page.As stated in the PR objectives, the exact offer name is The Website Correction.
🤖 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 `@growth-brain/agency-operating-model.md` at line 3, Update the offer description near “TinyStudio currently operates” to remove the outer article, so the exact offer name appears only as “The Website Correction.”docs/strategy/market-parity-benchmark-2026.md-64-64 (1)
64-64: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the extra quantifier from the offer name.
Line 64 renders
one The Website Correction. Use the exact offer name directly.Proposed copy fix
-- The first three clients receive exactly the $1,000 founder pilot for one The Website Correction. +- The first three clients receive exactly the $1,000 founder pilot for **The Website Correction**.As stated in the PR objectives, the exact offer name is The Website Correction.
🤖 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/strategy/market-parity-benchmark-2026.md` at line 64, Update the offer wording in the founder pilot sentence to use the exact name “The Website Correction” directly, removing the preceding “one” quantifier.growth-brain/loom-audit-script.md-12-16 (1)
12-16: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUse the canonical offer name without an extra article.
The Website Correctionalready contains the articleThe. The current text producesthe The Website Correctionanda human-reviewed The Website Correction. Update these sentences before using the script for buyer-facing outreach.Proposed wording
-6. Invite the founder to the **The Website Correction**. +6. Invite the founder to **The Website Correction**. -"If this is useful, TinyStudio can fix this one highest-leverage page through a human-reviewed The Website Correction. The first 3 clients receive the $1,000 founder pilot. It includes the fault map, rewrite or redesign, one implementation pass or dev-ready handoff, search-trust basics, before/after proof, Loom, measurement plan, one revision, and 14-day implementation tracking. Day 0 starts after payment, context, an approval owner, and an implementation owner are ready. Client delay pauses the clock. There are no revenue, ranking, ROAS, conversion, booked-call, or sales-volume guarantees." +"If this is useful, TinyStudio can fix this one highest-leverage page through TinyStudio's human-reviewed service, **The Website Correction**. The first 3 clients receive the $1,000 founder pilot. It includes the fault map, rewrite or redesign, one implementation pass or dev-ready handoff, search-trust basics, before/after proof, Loom, measurement plan, one revision, and 14-day implementation tracking. Day 0 starts after payment, context, an approval owner, and an implementation owner are ready. Client delay pauses the clock. There are no revenue, ranking, ROAS, conversion, booked-call, or sales-volume guarantees." -If it is useful, I can send the exact scope for TinyStudio's human-reviewed The Website Correction. A person reviews fit and every client-facing claim. +If it is useful, I can send the exact scope for TinyStudio's human-reviewed service, **The Website Correction**. A person reviews fit and every client-facing claim.Also applies to: 28-28
🤖 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 `@growth-brain/loom-audit-script.md` around lines 12 - 16, Update the buyer-facing offer references in the “Close” section and the earlier invitation sentence to use the canonical name “The Website Correction” without adding an extra article, avoiding phrases such as “the The Website Correction” or “a human-reviewed The Website Correction.”growth-brain/ops/competitive-proof-matrix.md-64-64 (1)
64-64: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUse the canonical offer name in a grammatical phrase.
The Website Correctionalready contains the articleThe. The phrasefor one The Website Correctionis malformed. Rephrase it without changing the configured offer name.Proposed wording
-- The first three clients receive exactly the $1,000 founder pilot for one The Website Correction. +- The first three clients receive exactly the $1,000 founder pilot for one engagement under The Website Correction.🤖 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 `@growth-brain/ops/competitive-proof-matrix.md` at line 64, Rephrase the sentence containing “The Website Correction” so it uses the configured offer name unchanged while forming a grammatically correct phrase; remove the redundant standalone article before the offer name.growth-brain/ops/proof-library.md-45-45 (1)
45-45: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winFix the display-name grammar before regenerating this artifact.
config.offerNameisThe Website Correction. This claim rendersa human-reviewed The Website Correction. The same mismatch affectsscripts/draft-sales-call-prep.mjsLines 131 and 157 andscripts/draft-recording-sharpness-brief.mjsLine 222. Rephrase the source templates around the display name, then regenerate this file.Proposed source-template fix
- | TinyStudio runs a human-reviewed ${config.offerName} for one highest-leverage page with a fault map, rewrite or redesign, implementation pass or handoff, proof, measurement plan, one client revision, and 14-day implementation tracking. | growth-brain/offer.md | yes | + | TinyStudio runs ${config.offerName}, a human-reviewed service for one highest-leverage page with a fault map, rewrite or redesign, implementation pass or handoff, proof, measurement plan, one client revision, and 14-day implementation tracking. | growth-brain/offer.md | yes |🤖 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 `@growth-brain/ops/proof-library.md` at line 45, Rephrase the source templates in draft-sales-call-prep.mjs and draft-recording-sharpness-brief.mjs so the display name “The Website Correction” is not preceded by the grammatically incompatible article “a”; preserve the configured offer name, then regenerate proof-library.md from those templates.scripts/export-owned-startup-proof-capture.mjs-227-228 (2)
227-228: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winRemove the remaining plumbing wording from the generated delivery artifact.
Lines 227-228 rename the section to
Top Faults, butfillDelivery()still emitsWhat is leaking:at Line 221. The generated document therefore mixes the new terminology with the retired wording.Change the label to
What is the fault:. Keepstartup.topLeakif the internal identifier must remain compatible.Proposed copy fix
- `- What is leaking: ${startup.topLeak}`, + `- What is the fault: ${startup.topLeak}`,🤖 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 `@scripts/export-owned-startup-proof-capture.mjs` around lines 227 - 228, Update fillDelivery() to replace the generated label “What is leaking:” with “What is the fault:”, while preserving startup.topLeak as the internal identifier for compatibility.
227-228: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winMigrate legacy
Top Leakssections before writing.
createIfMissing()preserves existingdeliverables/delivery.mdfiles, andreplaceSection()matches headings exactly. A legacy## Top Leakssection therefore remains while a new## Top Faultssection is appended. Normalize the legacy heading before replacement.🤖 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 `@scripts/export-owned-startup-proof-capture.mjs` around lines 227 - 228, Update the delivery markdown preparation flow before the Top Faults replaceSection call to normalize any legacy “Top Leaks” heading to “Top Faults,” then perform replacement using replaceSection. Preserve existing content while ensuring legacy sections are migrated rather than leaving both headings.scripts/check-outbound-send-readiness.mjs-81-81 (1)
81-81: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winKeep retired placeholders blocked during migration.
The readiness check accepts
[specific leak], and the regression test covers only[add Loom link]. If legacy packages remain supported, addspecific leaktoplaceholderPatternand test both legacy and current tokens.🤖 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 `@scripts/check-outbound-send-readiness.mjs` at line 81, Update placeholderPattern in the outbound readiness check to also reject the legacy “[specific leak]” token while retaining all current placeholders. Extend the regression coverage to verify both the legacy token and the existing “[add Loom link]” token are blocked.growth-brain/positioning/tangible-improvement-moat.md-13-13 (1)
13-13: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the remaining leak wording.
The proof-delta item now uses
fault, but theBeforerow at Line 29 still saysleaking. Replaceleakingwith fault-based wording so this source document does not reintroduce the retired terminology.🤖 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 `@growth-brain/positioning/tangible-improvement-moat.md` at line 13, Update the “Before” row in the proof-delta content to replace “leaking” with fault-based wording, consistent with the existing “fault” terminology. Remove all remaining leak-related wording in this source document without changing other content.scripts/export-recording-teleprompter.mjs-114-115 (1)
114-115: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winMigrate persisted teleprompter state for the renamed keys.
qualityKey()andnoteKey()derive per-record keys fromdata-qualityanddata-note, but the top-level storage keys stay unchanged. Existing...::leakentries remain unread as...::fault. The page then shows unchecked quality and empty notes, andisQualityApproved()blocks batch export. Add a one-time migration or intentionally version the storage.Also applies to: 132-133
🤖 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 `@scripts/export-recording-teleprompter.mjs` around lines 114 - 115, Update the teleprompter initialization and persistence flow around qualityKey() and noteKey() to migrate existing per-record storage entries from the old leak-derived keys to the renamed fault-derived keys before rendering or evaluating records. Preserve the existing top-level storage keys, make the migration one-time and safe when the destination already exists, and ensure isQualityApproved() reads the migrated state for batch export.growth-brain/prospecting/warm-network-scripts.md-9-17 (1)
9-17: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winCorrect the offer sentence and remove the retired duration.
a human-reviewed The Website Correctionis ungrammatical. Line 17 also retainsseven-day sprint, which conflicts with the PR objective. Use the canonical offer name as a noun phrase and remove the duration.Proposed copy fix
-I am opening the first 3 slots for TinyStudio's **$1,000 founder pilot**: a human-reviewed The Website Correction. +I am opening the first 3 slots for TinyStudio's **$1,000 founder pilot**: **The Website Correction**, with human review. -Hey [Name], I am offering a human-reviewed seven-day sprint for one highest-leverage page. +Hey [Name], I am offering **The Website Correction**, a human-reviewed sprint for one highest-leverage page.🤖 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 `@growth-brain/prospecting/warm-network-scripts.md` around lines 9 - 17, Update the opening offer sentence to use “The Website Correction” as a grammatical noun phrase, and revise the Founder message to remove the retired “seven-day” duration while preserving the remaining offer details.scripts/lib/prospect-readiness.mjs-42-42 (1)
42-42: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winReject legacy fault placeholders in every outbound gate.
If legacy prospect folders can exist, reject or migrate
[specific leak]and blankSpecific leak:values inprospect-readiness.mjsandreply-worthy-proof.mjs. The proof score can still reach 8/10 when the legacy fault check is the only failure, soprepare-prospect-send.mjscontinues.🤖 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 `@scripts/lib/prospect-readiness.mjs` at line 42, Update the legacy placeholder validation in prospect-readiness.mjs and reply-worthy-proof.mjs to reject both “[specific leak]” and blank “Specific leak:” values, alongside the existing fault checks. Ensure these failures propagate into the outbound gating decision so prepare-prospect-send.mjs cannot continue when the legacy leak placeholder is the only unmet requirement.growth-brain/retention/client-health-score.md-3-3 (1)
3-3: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the duplicate article from the status note.
The line renders “not part of the The Website Correction.” Use “not part of The Website Correction.”
🤖 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 `@growth-brain/retention/client-health-score.md` at line 3, Update the status note’s retained-client scoring sentence to remove the duplicate article, changing “the The Website Correction” to “The Website Correction” while preserving the rest of the note.growth-brain/retention/case-study-template.md-3-3 (1)
3-3: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUse grammatical wording for the canonical offer name.
The sentence renders “the human-reviewed The Website Correction.” Keep the canonical name, but identify it as an offer.
Proposed wording
-... the human-reviewed **The Website Correction** for one highest-leverage page ... +... the human-reviewed offer, **The Website Correction**, for one highest-leverage page ...🤖 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 `@growth-brain/retention/case-study-template.md` at line 3, Update the sentence in the case-study template to retain the canonical “The Website Correction” name while identifying it grammatically as an offer, avoiding the awkward “the human-reviewed The Website Correction” construction.scripts/draft-loom-recording-script.mjs-194-194 (1)
194-194: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the literal article before
config.offerName.
config.offerNameisThe Website Correction, so the current output says “makes the The Website Correction feel.” Removethebefore the interpolation.Proposed fix
-... makes the ${config.offerName} feel like the obvious next step. +... makes ${config.offerName} feel like the obvious next step.🤖 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 `@scripts/draft-loom-recording-script.mjs` at line 194, Remove the literal “the” immediately before the ${config.offerName} interpolation in the cold audit prompt so offer names that already include an article render grammatically.scripts/lib/client-scaffold.mjs-183-183 (1)
183-183: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the duplicate article in the kickoff message.
The canonical value is
The Website Correction, so the current message renders “approving the The Website Correction.” Use the validatedday0.offerNamevalue without the extra article.Proposed fix
-Thanks for approving the The Website Correction and completing the Day 0 prerequisites. +Thanks for approving ${day0.offerName} and completing the Day 0 prerequisites.🤖 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 `@scripts/lib/client-scaffold.mjs` at line 183, Update the kickoff message in the relevant scaffold logic to remove the hardcoded “The” before the validated day0.offerName value, so the rendered text contains only the canonical offer name and no duplicate article.scripts/export-client-weekly-report.mjs-132-132 (1)
132-132: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winRead legacy headings before applying fallbacks.
Pre-migration artifacts use
"Top Leaks"and"Revenue Leak Loop". The current lookups ignore these headings, so regeneration can discard existing revenue-loop rows and emit default rows. Read the legacy headings as fallbacks, with the new headings preferred, or migrate existing artifacts before regeneration.🤖 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 `@scripts/export-client-weekly-report.mjs` at line 132, Update the lookup assigning topLeak near firstFilledTableRow to prefer the current "Top Faults" heading while falling back to the legacy "Top Leaks" and "Revenue Leak Loop" headings, preserving existing rows during regeneration instead of emitting defaults.growth-brain/sales/follow-up-sequences.md-17-17 (1)
17-17: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winRemove the stale 7-day offer reference.
Line 17 still says “7-day sprint scope”. Use the canonical offer name and omit the 7-day reference.
Suggested copy
-"Quick bump. The main thing I would fix first is [specific fault]. If useful, I can send the 7-day sprint scope." +"Quick bump. The main thing I would fix first is [specific fault]. If useful, I can send the scope for The Website Correction."This follows the PR objective to remove 7-day buyer-facing references.
🤖 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 `@growth-brain/sales/follow-up-sequences.md` at line 17, Update the follow-up message in the sequence template to replace “7-day sprint scope” with the canonical offer name, removing all 7-day buyer-facing wording while preserving the rest of the message.growth-brain/sales/proposal-template.md-27-27 (1)
27-27: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winRemove the duplicated article in the proposal copy.
Line 27 renders “The The Website Correction”. Remove the extra leading article.
-The **The Website Correction** includes: +**The Website Correction** includes:🤖 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 `@growth-brain/sales/proposal-template.md` at line 27, Update the “The Website Correction” heading in proposal-template.md to remove the duplicated leading article, so it renders exactly once.growth-brain/sales/pricing-rules.md-5-5 (1)
5-5: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winRemove the duplicated article in the product name.
Line 5 renders “for the The Website Correction”.
Theis already part of the canonical offer name.-The first 3 clients receive exactly the **$1,000 founder pilot** for the **The Website Correction**. +The first 3 clients receive exactly the **$1,000 founder pilot** for **The Website Correction**.🤖 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 `@growth-brain/sales/pricing-rules.md` at line 5, Update the offer description in pricing-rules.md to remove the extra article before the canonical product name, so it reads “for The Website Correction” while preserving the rest of the founder pilot terms.growth-brain/sales/sales-call-script.md-55-55 (1)
55-55: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winRemove the duplicated article in the closing script.
Line 55 renders “The The Website Correction”. Remove the extra leading article before the canonical name.
-"The The Website Correction is a $1,000 founder pilot for one highest-leverage page. ... +"The Website Correction is a $1,000 founder pilot for one highest-leverage page. ...🤖 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 `@growth-brain/sales/sales-call-script.md` at line 55, In the closing script sentence, remove the duplicated leading “The” so the offer name is rendered as “The Website Correction,” while preserving the rest of the pricing and pilot terms unchanged.scripts/retired/check-growth-brain-kit.mjs-598-598 (1)
598-598: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winRemove seven-day offer references from active buyer-facing paths.
scripts/retired/check-growth-brain-kit.mjsis not an active gate, but its recording-notes fixture is copied intosend-package.mdbyscripts/prepare-prospect-send.mjs. Active generators also emit seven-day copy inscripts/create-prospect-audit.mjs,scripts/prepare-prospect-call-booked.mjs,scripts/prepare-prospect-close-package.mjs, andgrowth-brain/sales/follow-up-sequences.md. Replace these references and update the retired smoke-test fixture and assertion to use the canonical The Website Correction copy.🤖 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 `@scripts/retired/check-growth-brain-kit.mjs` at line 598, Replace seven-day sprint/offer language in the active buyer-facing generators and follow-up sequence with the canonical “The Website Correction” copy. Update the recording-notes fixture in check-growth-brain-kit.mjs and its mission assertion to validate that same canonical wording, preserving the retired smoke test’s existing coverage.specs/001-growth-brain-agency/tasks.md-5-5 (1)
5-5: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the completed task to the canonical offer name.
This task still records
7-Day Site Revenue Fault Sprint, while the active offer isThe Website Correction. Keeping the retired name in the completed task list makes the source documentation inconsistent and preserves a 7-day reference.Proposed fix
-- [x] Add the 7-Day Site Revenue Fault Sprint offer. +- [x] Add the offer **The Website Correction**.🤖 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 `@specs/001-growth-brain-agency/tasks.md` at line 5, Update the completed task entry for the site revenue fault sprint to use the canonical offer name “The Website Correction,” removing the retired “7-Day Site Revenue Fault Sprint” wording and its 7-day reference.growth-brain/workflows/daily-sales-workflow.md-5-5 (1)
5-5: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUse the canonical singular offer name.
The Website Correctionsdoes not match the active offer name,The Website Correction. Update this buyer-facing workflow so operators do not copy inconsistent offer text into outreach.Proposed fix
-Create enough high-quality conversations to close the first 1-3 paid human-reviewed **The Website Corrections** with founder-led Managed IT/MSP/cybersecurity companies. Every invitation is for one highest-leverage page. +Create enough high-quality conversations to close the first 1-3 paid engagements for the human-reviewed offer **The Website Correction** with founder-led Managed IT/MSP/cybersecurity companies. Every invitation is for one highest-leverage page.🤖 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 `@growth-brain/workflows/daily-sales-workflow.md` at line 5, Update the buyer-facing workflow text in the conversation goal to use the canonical singular offer name “The Website Correction” instead of “The Website Corrections,” while preserving the rest of the outreach guidance.scripts/export-market-benchmark.mjs-230-230 (1)
230-230: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winFix the generated offer wording.
Line 230 emits
for one The Website Correction, which is grammatically invalid. Use a countable phrase that preserves the offer name.Proposed wording
- - The first three clients receive exactly the $1,000 founder pilot for one The Website Correction. + - The first three clients receive exactly the $1,000 founder pilot for a single engagement under The Website Correction.🤖 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 `@scripts/export-market-benchmark.mjs` at line 230, Update the generated offer wording at the line emitting the founder pilot description so it uses a grammatical countable phrase while preserving the offer name “The Website Correction,” replacing the invalid “for one The Website Correction” phrasing.
🧹 Nitpick comments (1)
scripts/retired/check-growth-brain-kit.mjs (1)
586-587: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low valueAlign the retired checker with the four-field quality contract.
The recording-quality gates already require
fault,impact,fix, andask. This checker only checksnotes.faultandnotes.ask, so it cannot detect regressions in theimpactorfixrequirements.🤖 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 `@scripts/retired/check-growth-brain-kit.mjs` around lines 586 - 587, Update the validation condition in the retired checker around the teleprompter and mission checks to require all four quality-note fields: fault, impact, fix, and ask. Add the missing impact and fix checks for both relevant content strings while preserving the existing qualityNotes and fault/ask validation and failure message.
🤖 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 `@docs/strategy/first-14-days.md`:
- Line 5: Update the planning step to replace “Site Revenue Fault Sprints” with
the canonical offer name “The Website Correction,” matching the naming used in
PRODUCT.md, MEMORY.md, and README.md.
In `@docs/strategy/growth-brain-agency-plan.md`:
- Line 11: Align the growth plan’s offer references with the active contract:
replace “7-Day Site Revenue Fault Sprint” with “The Website Correction” and
update the first-sale pricing to exactly $1,000 for the first three founder
pilots. If this document is intended to remain historical, label it accordingly
and ensure it is excluded from active sales surfaces.
In `@scripts/check-outbound-claim-safety.mjs`:
- Line 39: Update effectiveClauses and its sentence-splitting logic so
sentence-boundary information is preserved, allowing the governed prohibition to
reset before each new sentence. Ensure “No revenue guarantees. Guaranteed
placement.” does not carry the prohibition into the second clause, and add a
regression test covering this case.
In `@scripts/create-prospect-audit.mjs`:
- Around line 149-157: Update the generated buyer copy in the close section and
the operator guidance around the relevant prompt to remove all “7-day” wording.
Use ${config.offerName} (The Website Correction) or otherwise duration-free
language in both outputs, preserving the existing offer details and
call-to-action.
In `@scripts/export-daily-money-mission.mjs`:
- Around line 313-314: Update the quality and note state handling around
qualityKey(), noteKey(), and the hydration/save logic to migrate existing
path::leak entries to path::fault before reading or persisting operator state.
Preserve existing approvals and proof notes, avoid overwriting migrated data,
and keep the unchanged storage namespaces at the existing storage code.
In `@scripts/lib/service-artifacts.mjs`:
- Around line 559-562: Update the agent-work output schema around the
leakMap.items validation to account for the new required fault field: either
bump WORK_PACKET_VERSION from 5 or implement migration for persisted version-5
outputs. Propagate the chosen schema change through all producers, fixtures, and
replay paths, and retain leakMap only if it remains an intentional internal
identifier.
In `@scripts/test-client-readiness-contract.mjs`:
- Line 70: The retiredTruth pattern in assertNarrowGeneratedClient must continue
detecting “Tangible Revenue Leak Sprint” alongside the existing “Tangible
Revenue Fault Sprint” variant. Restore both legacy spellings and include any
documented 7-day variants still used in repository sources, without removing the
current retired-terminology checks.
In `@specs/001-growth-brain-agency/spec.md`:
- Line 5: Update the offer name in the specification, replacing “7-Day Site
Revenue Fault Sprint” with the active contract name “The Website Correction.”
Search the entire specification for remaining 7-day references and remove or
update them consistently.
---
Outside diff comments:
In `@scripts/prepare-prospect-close-package.mjs`:
- Around line 220-224: Update the generated proposal wording in the Sprint
Outcome section of prepare-prospect-close-package.mjs to remove the buyer-facing
“By the end of 7 days” reference, replacing it with approved wording that does
not mention seven days while preserving the outcome description.
---
Minor comments:
In @.agents/skills/speckit-specify/SKILL.md:
- Line 171: Update the checklist item in SKILL.md to use grammatical wording
that clearly states implementation details are excluded from the specification,
such as “No implementation details are included in the specification.”
In `@docs/strategy/market-parity-benchmark-2026.md`:
- Line 64: Update the offer wording in the founder pilot sentence to use the
exact name “The Website Correction” directly, removing the preceding “one”
quantifier.
In `@growth-brain/agency-operating-model.md`:
- Line 3: Update the offer description near “TinyStudio currently operates” to
remove the outer article, so the exact offer name appears only as “The Website
Correction.”
In `@growth-brain/build-roadmap.md`:
- Line 5: Update the line 5 sentence to remove the outer article before the
offer name, so it renders exactly “The Website Correction” rather than “the The
Website Correction”; preserve the rest of the sentence unchanged.
In `@growth-brain/loom-audit-script.md`:
- Around line 12-16: Update the buyer-facing offer references in the “Close”
section and the earlier invitation sentence to use the canonical name “The
Website Correction” without adding an extra article, avoiding phrases such as
“the The Website Correction” or “a human-reviewed The Website Correction.”
In `@growth-brain/ops/competitive-proof-matrix.md`:
- Line 64: Rephrase the sentence containing “The Website Correction” so it uses
the configured offer name unchanged while forming a grammatically correct
phrase; remove the redundant standalone article before the offer name.
In `@growth-brain/ops/proof-library.md`:
- Line 45: Rephrase the source templates in draft-sales-call-prep.mjs and
draft-recording-sharpness-brief.mjs so the display name “The Website Correction”
is not preceded by the grammatically incompatible article “a”; preserve the
configured offer name, then regenerate proof-library.md from those templates.
In `@growth-brain/positioning/tangible-improvement-moat.md`:
- Line 13: Update the “Before” row in the proof-delta content to replace
“leaking” with fault-based wording, consistent with the existing “fault”
terminology. Remove all remaining leak-related wording in this source document
without changing other content.
In `@growth-brain/prospecting/warm-network-scripts.md`:
- Around line 9-17: Update the opening offer sentence to use “The Website
Correction” as a grammatical noun phrase, and revise the Founder message to
remove the retired “seven-day” duration while preserving the remaining offer
details.
In `@growth-brain/README.md`:
- Line 3: Update the offer description in the README so it uses the exact
product name “The Website Correction” once, removing the duplicated leading
“The” while preserving the surrounding sentence.
In `@growth-brain/retention/case-study-template.md`:
- Line 3: Update the sentence in the case-study template to retain the canonical
“The Website Correction” name while identifying it grammatically as an offer,
avoiding the awkward “the human-reviewed The Website Correction” construction.
In `@growth-brain/retention/client-health-score.md`:
- Line 3: Update the status note’s retained-client scoring sentence to remove
the duplicate article, changing “the The Website Correction” to “The Website
Correction” while preserving the rest of the note.
In `@growth-brain/sales/follow-up-sequences.md`:
- Line 17: Update the follow-up message in the sequence template to replace
“7-day sprint scope” with the canonical offer name, removing all 7-day
buyer-facing wording while preserving the rest of the message.
In `@growth-brain/sales/pricing-rules.md`:
- Line 5: Update the offer description in pricing-rules.md to remove the extra
article before the canonical product name, so it reads “for The Website
Correction” while preserving the rest of the founder pilot terms.
In `@growth-brain/sales/proposal-template.md`:
- Line 27: Update the “The Website Correction” heading in proposal-template.md
to remove the duplicated leading article, so it renders exactly once.
In `@growth-brain/sales/sales-call-script.md`:
- Line 55: In the closing script sentence, remove the duplicated leading “The”
so the offer name is rendered as “The Website Correction,” while preserving the
rest of the pricing and pilot terms unchanged.
In `@growth-brain/workflows/daily-sales-workflow.md`:
- Line 5: Update the buyer-facing workflow text in the conversation goal to use
the canonical singular offer name “The Website Correction” instead of “The
Website Corrections,” while preserving the rest of the outreach guidance.
In `@scripts/check-outbound-claim-safety.mjs`:
- Line 17: Update the forbidsMention pattern to recognize negative contractions
such as “don't mention” alongside existing negation forms, supporting both ASCII
and typographic apostrophes. Add or update tests covering both apostrophe
variants and confirm these phrases bypass the generic-guarantee check.
In `@scripts/check-outbound-send-readiness.mjs`:
- Line 81: Update placeholderPattern in the outbound readiness check to also
reject the legacy “[specific leak]” token while retaining all current
placeholders. Extend the regression coverage to verify both the legacy token and
the existing “[add Loom link]” token are blocked.
In `@scripts/draft-loom-recording-script.mjs`:
- Line 194: Remove the literal “the” immediately before the ${config.offerName}
interpolation in the cold audit prompt so offer names that already include an
article render grammatically.
In `@scripts/export-client-weekly-report.mjs`:
- Line 132: Update the lookup assigning topLeak near firstFilledTableRow to
prefer the current "Top Faults" heading while falling back to the legacy "Top
Leaks" and "Revenue Leak Loop" headings, preserving existing rows during
regeneration instead of emitting defaults.
In `@scripts/export-market-benchmark.mjs`:
- Line 230: Update the generated offer wording at the line emitting the founder
pilot description so it uses a grammatical countable phrase while preserving the
offer name “The Website Correction,” replacing the invalid “for one The Website
Correction” phrasing.
In `@scripts/export-owned-startup-proof-capture.mjs`:
- Around line 227-228: Update fillDelivery() to replace the generated label
“What is leaking:” with “What is the fault:”, while preserving startup.topLeak
as the internal identifier for compatibility.
- Around line 227-228: Update the delivery markdown preparation flow before the
Top Faults replaceSection call to normalize any legacy “Top Leaks” heading to
“Top Faults,” then perform replacement using replaceSection. Preserve existing
content while ensuring legacy sections are migrated rather than leaving both
headings.
In `@scripts/export-recording-teleprompter.mjs`:
- Around line 114-115: Update the teleprompter initialization and persistence
flow around qualityKey() and noteKey() to migrate existing per-record storage
entries from the old leak-derived keys to the renamed fault-derived keys before
rendering or evaluating records. Preserve the existing top-level storage keys,
make the migration one-time and safe when the destination already exists, and
ensure isQualityApproved() reads the migrated state for batch export.
In `@scripts/lib/client-scaffold.mjs`:
- Line 183: Update the kickoff message in the relevant scaffold logic to remove
the hardcoded “The” before the validated day0.offerName value, so the rendered
text contains only the canonical offer name and no duplicate article.
In `@scripts/lib/prospect-readiness.mjs`:
- Line 42: Update the legacy placeholder validation in prospect-readiness.mjs
and reply-worthy-proof.mjs to reject both “[specific leak]” and blank “Specific
leak:” values, alongside the existing fault checks. Ensure these failures
propagate into the outbound gating decision so prepare-prospect-send.mjs cannot
continue when the legacy leak placeholder is the only unmet requirement.
In `@scripts/retired/check-growth-brain-kit.mjs`:
- Line 598: Replace seven-day sprint/offer language in the active buyer-facing
generators and follow-up sequence with the canonical “The Website Correction”
copy. Update the recording-notes fixture in check-growth-brain-kit.mjs and its
mission assertion to validate that same canonical wording, preserving the
retired smoke test’s existing coverage.
In `@specs/001-growth-brain-agency/tasks.md`:
- Line 5: Update the completed task entry for the site revenue fault sprint to
use the canonical offer name “The Website Correction,” removing the retired
“7-Day Site Revenue Fault Sprint” wording and its 7-day reference.
---
Nitpick comments:
In `@scripts/retired/check-growth-brain-kit.mjs`:
- Around line 586-587: Update the validation condition in the retired checker
around the teleprompter and mission checks to require all four quality-note
fields: fault, impact, fix, and ask. Add the missing impact and fix checks for
both relevant content strings while preserving the existing qualityNotes and
fault/ask validation and failure message.
🪄 Autofix
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: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: e67a1893-ec15-4fdc-9353-a96f5aa503dc
📒 Files selected for processing (129)
.agents/skills/speckit-specify/SKILL.mdAGENT_WORKFLOW.mdMEMORY.mdPRODUCT.mdREADME.mdTASKS.mddocs/evidence/design-system-proving-lab/business-packets/ridge-gutter-roofcare-auckland/approval-packet.todo.mddocs/evidence/design-system-proving-lab/proving-lab-report.mddocs/evidence/design-system-proving-lab/search-briefs/ridge-gutter-roofcare-auckland.mobbin-todo.mddocs/strategy/first-14-days.mddocs/strategy/growth-brain-agency-plan.mddocs/strategy/market-parity-benchmark-2026.mdgrowth-brain/README.mdgrowth-brain/agency-operating-model.mdgrowth-brain/agents/marketing-agent-workbench.mdgrowth-brain/agents/product-page-fixer.mdgrowth-brain/build-roadmap.mdgrowth-brain/client-brain-template/website-notes.mdgrowth-brain/delivery-template.mdgrowth-brain/delivery/client-communication-cadence.mdgrowth-brain/delivery/implementation-handoff-template.mdgrowth-brain/loom-audit-script.mdgrowth-brain/offer.mdgrowth-brain/ops/11-10-proof-run.mdgrowth-brain/ops/agency-config.jsongrowth-brain/ops/competitive-proof-matrix.htmlgrowth-brain/ops/competitive-proof-matrix.mdgrowth-brain/ops/historical/full-stack-growth-map.htmlgrowth-brain/ops/historical/full-stack-growth-map.mdgrowth-brain/ops/historical/value-retention-stress-test.mdgrowth-brain/ops/live-metrics.mdgrowth-brain/ops/market-parity-readiness.mdgrowth-brain/ops/proof-library.mdgrowth-brain/ops/sender-setup-guide.htmlgrowth-brain/ops/sender-setup-guide.mdgrowth-brain/optimization/10x-opportunity-register.mdgrowth-brain/outreach-tracker.mdgrowth-brain/positioning/message-house.mdgrowth-brain/positioning/tangible-improvement-moat.mdgrowth-brain/prospecting/warm-network-scripts.mdgrowth-brain/quality/readiness-gates.mdgrowth-brain/quality/search-trust-layer.mdgrowth-brain/quality/sprint-acceptance-checklist.mdgrowth-brain/retention/case-study-template.mdgrowth-brain/retention/client-health-score.mdgrowth-brain/retention/outsized-value-retention-system.mdgrowth-brain/retention/weekly-growth-desk-playbook.mdgrowth-brain/sales/buyer-room-template.mdgrowth-brain/sales/follow-up-sequences.mdgrowth-brain/sales/managed-it-one-page-offer.htmlgrowth-brain/sales/managed-it-one-page-offer.mdgrowth-brain/sales/one-page-offer.mdgrowth-brain/sales/pricing-rules.mdgrowth-brain/sales/proposal-template.mdgrowth-brain/sales/sales-call-script.mdgrowth-brain/sales/value-calculator.mdgrowth-brain/sprint-checklist.mdgrowth-brain/strategy/full-stack-growth-offer-ladder.mdgrowth-brain/verticals/accounting-bookkeeping.mdgrowth-brain/verticals/dental-medspa-clinics.mdgrowth-brain/verticals/home-services.mdgrowth-brain/verticals/managed-it-cybersecurity.mdgrowth-brain/weekly-report-template.mdgrowth-brain/workflows/README.mdgrowth-brain/workflows/client-sprint-workflow.mdgrowth-brain/workflows/conversion-audit-workflow.mdgrowth-brain/workflows/daily-sales-workflow.mdgrowth-brain/workflows/full-stack-growth-desk-workflow.mdgrowth-brain/workflows/human-review-service-engine.mdgrowth-brain/workflows/lead-scoring-workflow.mdgrowth-brain/workflows/loom-audit-workflow.mdgrowth-brain/workflows/weekly-client-value-loop.mdscripts/check-agency-defaults.mjsscripts/check-client-readiness.mjsscripts/check-client-weekly-report.mjsscripts/check-human-service-kit.mjsscripts/check-market-parity-readiness.mjsscripts/check-market-proof-run.mjsscripts/check-outbound-claim-safety.mjsscripts/check-outbound-send-readiness.mjsscripts/check-product-truth.mjsscripts/create-prospect-audit.mjsscripts/draft-client-kickoff.mjsscripts/draft-loom-recording-script.mjsscripts/draft-recording-sharpness-brief.mjsscripts/draft-sales-call-prep.mjsscripts/export-client-channel-readiness.mjsscripts/export-client-delivery-cockpit.mjsscripts/export-client-repeatable-workflow.mjsscripts/export-client-weekly-report.mjsscripts/export-daily-money-mission.mjsscripts/export-full-stack-growth-map.mjsscripts/export-lead-scoring-cockpit.mjsscripts/export-market-benchmark.mjsscripts/export-market-learning-review.mjsscripts/export-market-proof-cockpit.mjsscripts/export-market-proof-run.mjsscripts/export-owned-product-case-studies.mjsscripts/export-owned-startup-proof-capture.mjsscripts/export-proof-library.mjsscripts/export-recording-cockpit.mjsscripts/export-recording-rehearsal-check.mjsscripts/export-recording-teleprompter.mjsscripts/lib/agency-config.mjsscripts/lib/canonical-service-copy.mjsscripts/lib/client-scaffold.mjsscripts/lib/prospect-readiness.mjsscripts/lib/reply-worthy-proof.mjsscripts/lib/service-artifacts.mjsscripts/prepare-prospect-batch-send.mjsscripts/prepare-prospect-call-booked.mjsscripts/prepare-prospect-close-package.mjsscripts/prepare-prospect-send.mjsscripts/retired/check-growth-brain-kit.mjsscripts/retired/export-client-facing-dashboard.mjsscripts/retired/export-value-retention-stress-test.mjsscripts/show-growth-command-center.mjsscripts/snapshot-prospect-page.mjsscripts/test-active-offer-projection.mjsscripts/test-active-operator-surfaces.mjsscripts/test-client-readiness-contract.mjsscripts/test-outbound-send-readiness.mjsscripts/test-sales-intake-contract.mjsscripts/test-service-engine.mjsscripts/update-market-proof-looms.mjsskills/revenue-page-conversion-audit/SKILL.mdspecs/001-growth-brain-agency/spec.mdspecs/001-growth-brain-agency/tasks.mdspecs/002-autonomous-service-engine/spec.md
| TinyStudio is not a generic AI agency. It is a Growth Brain operator. | ||
|
|
||
| The client does not buy "AI". They buy a 7-Day Site Revenue Leak Sprint that turns their scattered business context into better page copy, ad ideas, email drafts, competitor awareness, and a weekly learning loop. | ||
| The client does not buy "AI". They buy a 7-Day Site Revenue Fault Sprint that turns their scattered business context into better page copy, ad ideas, email drafts, competitor awareness, and a weekly learning loop. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Align this plan with the active offer contract.
This file still advertises 7-Day Site Revenue Fault Sprint and a $750-$2,500 first-sale range. The canonical offer is The Website Correction, and the first three clients are exact $1,000 founder pilots. Update these entries or mark this document as historical and exclude it from active sales surfaces.
Also applies to: 35-35
🤖 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/strategy/growth-brain-agency-plan.md` at line 11, Align the growth
plan’s offer references with the active contract: replace “7-Day Site Revenue
Fault Sprint” with “The Website Correction” and update the first-sale pricing to
exactly $1,000 for the first three founder pilots. If this document is intended
to remain historical, label it accordingly and ensure it is excluded from active
sales surfaces.
| const inherits = governed && !opens && !hasOwnPredicate.test(clause); | ||
| const skip = forbidsMention.test(clause) || inherits || (opens && dropProhibitionOpeners); | ||
| if (!skip) kept.push(clause); | ||
| if (/[.!?]\s*$/.test(clause)) governed = false; |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Reset prohibition scope at sentence boundaries.
Line 122 removes sentence terminators during split. Line 39 can then never clear governed.
For No revenue guarantees. Guaranteed placement., the second clause inherits the prohibition and is removed from both scans. It has no hasOwnPredicate match, so the generic-guarantee rule does not flag it.
Preserve delimiters when splitting, or pass boundary metadata to effectiveClauses. Add this case as a regression test.
Proposed fix
-const clauseBoundary = /[:.!?;]|\b(?:and|but|however|yet|although|though|while|whereas|still|nevertheless|nonetheless)\b/i;
+const clauseBoundary = /(?<=[:.!?;])|\b(?:and|but|however|yet|although|though|while|whereas|still|nevertheless|nonetheless)\b/i;
...
- if (/[.!?]\s*$/.test(clause)) governed = false;
+ if (/[:.!?;]\s*$/.test(clause)) governed = false;Also applies to: 122-128
🤖 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 `@scripts/check-outbound-claim-safety.mjs` at line 39, Update effectiveClauses
and its sentence-splitting logic so sentence-boundary information is preserved,
allowing the governed prohibition to reset before each new sentence. Ensure “No
revenue guarantees. Guaranteed placement.” does not carry the prohibition into
the second clause, and add a regression test covering this case.
| 3. Specific fault: | ||
| 4. Why it matters: ${hook} | ||
| 5. Competitor/reference contrast: | ||
| 6. First fix: | ||
| 7. Sprint pitch: ${config.offerName} | ||
|
|
||
| ## Close | ||
|
|
||
| "If useful, I can fix this one highest-leverage page in a human-reviewed 7-day sprint with a leak map, rewrite or redesign, implementation pass or dev-ready handoff, proof, measurement plan, and 14-day implementation tracking." | ||
| "If useful, I can fix this one highest-leverage page in a human-reviewed 7-day sprint with a fault map, rewrite or redesign, implementation pass or dev-ready handoff, proof, measurement plan, and 14-day implementation tracking." |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Remove the remaining 7-day wording from generated buyer copy.
Line 157 still describes a human-reviewed 7-day sprint, and Line 282 still tells the operator to explain the 7-day sprint. The new offer contract is The Website Correction and removes 7-day references. Use ${config.offerName} or duration-free wording in both outputs.
Proposed fix
- "If useful, I can fix this one highest-leverage page in a human-reviewed 7-day sprint with a fault map, rewrite or redesign, implementation pass or dev-ready handoff, proof, measurement plan, and 14-day implementation tracking."
+ "If useful, I can fix this one highest-leverage page through ${config.offerName}, with a fault map, rewrite or redesign, implementation pass or dev-ready handoff, proof, measurement plan, and 14-day implementation tracking."
- Show one visible fault in under 2 minutes, then explain the 7-day sprint in one clear ask.
+ Show one visible fault in under 2 minutes, then explain ${config.offerName} in one clear ask.Also applies to: 282-282
🤖 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 `@scripts/create-prospect-audit.mjs` around lines 149 - 157, Update the
generated buyer copy in the close section and the operator guidance around the
relevant prompt to remove all “7-day” wording. Use ${config.offerName} (The
Website Correction) or otherwise duration-free language in both outputs,
preserving the existing offer details and call-to-action.
| <input type="checkbox" data-quality="fault" data-path="${escapeHtml(prospect.path)}" /> | ||
| <span>Visible fault</span> |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Migrate existing operator state when renaming leak to fault.
qualityKey() and noteKey() use the data-quality and data-note values from Line 313 and Line 331. The storage namespaces remain unchanged at Line 642 through Line 645. Existing path::leak entries therefore do not hydrate at Line 766 through Line 770. The next save writes only path::fault entries, so prior approval checks and proof notes become inaccessible and can be overwritten.
Migrate the old keys to the new names, or version the storage and make the reset explicit.
Also applies to: 331-332
🤖 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 `@scripts/export-daily-money-mission.mjs` around lines 313 - 314, Update the
quality and note state handling around qualityKey(), noteKey(), and the
hydration/save logic to migrate existing path::leak entries to path::fault
before reading or persisting operator state. Preserve existing approvals and
proof notes, avoid overwriting migrated data, and keep the unchanged storage
namespaces at the existing storage code.
| assert(Array.isArray(leakMap.items) && leakMap.items.length >= 1 && leakMap.items.length <= 12, "agent work fault map must contain 1-12 items") | ||
| leakMap.items.forEach((entry, index) => { | ||
| assertExactKeys(entry, ["leak", "impact", "priority", "evidenceIds"], `agent work leakMap.items[${index}]`) | ||
| checkNonPlaceholderFields(entry, `agent work leakMap.items[${index}]`, ["leak", 10, 1200, "impact", 10, 1200]) | ||
| assertExactKeys(entry, ["fault", "impact", "priority", "evidenceIds"], `agent work leakMap.items[${index}]`) | ||
| checkNonPlaceholderFields(entry, `agent work leakMap.items[${index}]`, ["fault", 10, 1200, "impact", 10, 1200]) |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
# Expect a version bump or explicit migration, plus migrated producers and fixtures.
rg -n -C 4 'WORK_PACKET_VERSION|AGENT_WORK_CONTRACT|DELIVERABLE_FIELDS|validateAgentWorkOutput' .
rg -n -C 3 'leakMap|\bleak\b|\bfault\b' .Repository: nish3451/tinystudio-in
Length of output: 50381
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- working tree summary ---'
git status --short
printf '%s\n' '--- relevant diff summary ---'
git diff --stat -- scripts/lib/service-artifacts.mjs scripts/test-service-engine.mjs
git diff --unified=8 -- scripts/lib/service-artifacts.mjs scripts/test-service-engine.mjs | sed -n '1,260p'
printf '%s\n' '--- version and migration references ---'
rg -n -C 3 'WORK_PACKET_VERSION|schemaVersion|packetVersion|migrat|legacy|upgrade' scripts specs data --glob '*.mjs' --glob '*.json' --glob '*.md' | sed -n '1,320p'
printf '%s\n' '--- exact leak-map producers and consumers ---'
rg -n -C 5 'deliverables\.leakMap|leakMap:|items:\s*\[|["'\'']leak["'\'']|["'\'']fault["'\'']' scripts specs data --glob '*.mjs' --glob '*.json' --glob '*.md' | sed -n '1,420p'Repository: nish3451/tinystudio-in
Length of output: 50378
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' '--- reviewed commit ---'
git rev-parse HEAD
git show --no-ext-diff --format='format:%H%n%P%n%s' --no-renames HEAD | sed -n '1,6p'
printf '%s\n' '--- contract change versus parent ---'
git diff --no-ext-diff --no-renames HEAD^ HEAD -- scripts/lib/service-artifacts.mjs scripts/test-service-engine.mjs | sed -n '1,320p'
printf '%s\n' '--- queue persistence and replay path ---'
rg -n -C 8 'targetIgnoredPath|agentWorkPaths|readJson\(outputPath\)|validateAgentWorkOutput|atomicWriteJson|agent-work' scripts/lib scripts --glob '*.mjs' | sed -n '1,420p'
printf '%s\n' '--- all service-artifact schema references ---'
rg -n -C 4 'WORK_PACKET_VERSION|AGENT_WORK_CONTRACT|schemaVersion === WORK_PACKET_VERSION|deliverables\.leakMap|leakMap\.items|items:.*fault|items:.*leak' scripts --glob '*.mjs' | sed -n '1,420p'Repository: nish3451/tinystudio-in
Length of output: 50378
Version or migrate the agent-work output schema.
WORK_PACKET_VERSION remains 5, but leakMap.items[*].leak now requires fault. The queue validates persisted outputs, so existing version-5 outputs will fail exact-key validation. Bump the version or migrate those outputs, and update all producers, fixtures, and replay paths. Keep leakMap only if it is an intentional internal identifier.
🤖 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 `@scripts/lib/service-artifacts.mjs` around lines 559 - 562, Update the
agent-work output schema around the leakMap.items validation to account for the
new required fault field: either bump WORK_PACKET_VERSION from 5 or implement
migration for persisted version-5 outputs. Propagate the chosen schema change
through all producers, fixtures, and replay paths, and retain leakMap only if it
remains an intentional internal identifier.
| function assertNarrowGeneratedClient(root) { | ||
| for (const path of retiredPaths) eq(existsSync(join(root, path)), false) | ||
| const retiredTruth = /Tangible Revenue Leak Sprint|30[- ]day (?:action )?plan|Weekly Growth Desk|Full-Stack Growth Desk|rewrite\/redesign|rewritten and redesigned|ad angles? and email\/sms|ads and email\/sms/i | ||
| const retiredTruth = /Tangible Revenue Fault Sprint|30[- ]day (?:action )?plan|Weekly Growth Desk|Full-Stack Growth Desk|rewrite\/redesign|rewritten and redesigned|ad angles? and email\/sms|ads and email\/sms/i |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Retain detection for the retired leak terminology.
This replacement removes Tangible Revenue Leak Sprint from retiredTruth. Generated content containing that retired offer can now pass assertNarrowGeneratedClient. Keep both legacy variants, and include the documented 7-day spellings if they are still present in repository sources.
Proposed fix
- const retiredTruth = /Tangible Revenue Fault Sprint|30[- ]day (?:action )?plan|Weekly Growth Desk|Full-Stack Growth Desk|rewrite\/redesign|rewritten and redesigned|ad angles? and email\/sms|ads and email\/sms/i
+ const retiredTruth = /Tangible Revenue (?:Leak|Fault) Sprint|7-Day (?:Site|Website) Revenue (?:Leak|Fault)(?: Fix)? Sprint|30[- ]day (?:action )?plan|Weekly Growth Desk|Full-Stack Growth Desk|rewrite\/redesign|rewritten and redesigned|ad angles? and email\/sms|ads and email\/sms/i📝 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.
| const retiredTruth = /Tangible Revenue Fault Sprint|30[- ]day (?:action )?plan|Weekly Growth Desk|Full-Stack Growth Desk|rewrite\/redesign|rewritten and redesigned|ad angles? and email\/sms|ads and email\/sms/i | |
| const retiredTruth = /Tangible Revenue (?:Leak|Fault) Sprint|7-Day (?:Site|Website) Revenue (?:Leak|Fault)(?: Fix)? Sprint|30[- ]day (?:action )?plan|Weekly Growth Desk|Full-Stack Growth Desk|rewrite\/redesign|rewritten and redesigned|ad angles? and email\/sms|ads and email\/sms/i |
🤖 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 `@scripts/test-client-readiness-contract.mjs` at line 70, The retiredTruth
pattern in assertNarrowGeneratedClient must continue detecting “Tangible Revenue
Leak Sprint” alongside the existing “Tangible Revenue Fault Sprint” variant.
Restore both legacy spellings and include any documented 7-day variants still
used in repository sources, without removing the current retired-terminology
checks.
| ## User Outcome | ||
|
|
||
| Nish can sell and deliver the first 7-Day Site Revenue Leak Sprint without waiting for SaaS, a redesigned website, or a large team. | ||
| Nish can sell and deliver the first 7-Day Site Revenue Fault Sprint without waiting for SaaS, a redesigned website, or a large team. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Replace the retired offer name in the feature specification.
This line still defines the offer as 7-Day Site Revenue Fault Sprint. The active contract is The Website Correction, and the migration removes 7-day references. Update this line and the remaining 7-day references in the specification before merging.
Proposed fix
-Nish can sell and deliver the first 7-Day Site Revenue Fault Sprint without waiting for SaaS, a redesigned website, or a large team.
+Nish can sell and deliver **The Website Correction** to the first client without waiting for SaaS, a redesigned website, or a large team.📝 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.
| Nish can sell and deliver the first 7-Day Site Revenue Fault Sprint without waiting for SaaS, a redesigned website, or a large team. | |
| Nish can sell and deliver **The Website Correction** to the first client without waiting for SaaS, a redesigned website, or a large team. |
🤖 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 `@specs/001-growth-brain-agency/spec.md` at line 5, Update the offer name in
the specification, replacing “7-Day Site Revenue Fault Sprint” with the active
contract name “The Website Correction.” Search the entire specification for
remaining 7-day references and remove or update them consistently.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 06206b4c75
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const opens = opensProhibition.test(clause); | ||
| if (opens) governed = true; | ||
| const inherits = governed && !opens && !hasOwnPredicate.test(clause); | ||
| const skip = forbidsMention.test(clause) || inherits || (opens && dropProhibitionOpeners); |
There was a problem hiding this comment.
Keep promises outside a prohibition in scope
When a prohibition and a real promise occur in the same clause, forbidsMention.test(clause) causes the entire clause to be skipped. Because clauseBoundary does not split on commas, I checked that adding Do not mention rankings, we guarantee 20 qualified leads. to growth-brain/offer.md makes this checker exit successfully, allowing an unsafe outbound claim through. Exempt only the negated span rather than dropping the whole clause.
Useful? React with 👍 / 👎.
| assertExactKeys(entry, ["fault", "impact", "priority", "evidenceIds"], `agent work leakMap.items[${index}]`) | ||
| checkNonPlaceholderFields(entry, `agent work leakMap.items[${index}]`, ["fault", 10, 1200, "impact", 10, 1200]) |
There was a problem hiding this comment.
Version the agent-work field rename
Existing tinystudio.agent-work-output v5 artifacts contain leakMap.items[].leak, but this now requires fault while WORK_PACKET_VERSION and outputSchema remain v5. For any in-progress service record prepared before this deployment, review-queue.mjs revalidates the persisted artifact here, rejects it as having unexpected fields, and blocks the queue despite the artifact still matching its declared schema version. Bump the contract version with migration handling, or accept the legacy field.
Useful? React with 👍 / 👎.
| <span>Leak note</span> | ||
| <textarea data-note="leak" data-path="${escapeHtml(prospect.path)}" placeholder="What exact visible leak did the Loom show?"></textarea> | ||
| <span>Fault note</span> | ||
| <textarea data-note="fault" data-path="${escapeHtml(prospect.path)}" placeholder="What exact visible fault did the Loom show?"></textarea> |
There was a problem hiding this comment.
Migrate persisted recording-note keys
For operators who already entered Loom quality data in the generated teleprompter, local storage holds this field under <path>::leak; changing data-note to fault makes the unchanged restore logic look up <path>::fault and display a blank note after regeneration. The corresponding checkbox key was renamed the same way, so partially completed recording sessions lose both persisted values unless the old keys are migrated or used as fallbacks.
Useful? React with 👍 / 👎.
The rename sweep left "the **The Website Correction**" in 12 places,
including a sales call script line and the client approval email
("Thanks for approving the The Website Correction"), and turned the
speckit checklist's ordinary verb into nonsense: "No implementation
details fault into specification".
Article dropped where the offer name already carries "The"; the
checklist verb restored to "leak", which was never the offer metaphor.
|
Overseer review (Opus 5, 2026-08-07 morning shift) — two findings, one fixed on this branch, one blocking. 1. Fixed here (pushed as
The rename itself is right; only the mechanical application was wrong. Lesson for the next sweep: a name that already carries 2. Blocking, and not this PR's fault. That means the repository verification gate self-breaks at midnight every day, and it is what is holding #10 and #11 red as well — not three separate defects. The existing backlog item "Restore a green repository verification gate…" owns it; I have added this root-cause lead to it. Holding endorsement on this PR until that gate is green, so main does not inherit a red suite. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f9dbf615a8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const inherits = governed && !opens && !hasOwnPredicate.test(clause); | ||
| const skip = forbidsMention.test(clause) || inherits || (opens && dropProhibitionOpeners); | ||
| if (!skip) kept.push(clause); | ||
| if (/[.!?]\s*$/.test(clause)) governed = false; |
There was a problem hiding this comment.
Reset prohibition inheritance at sentence boundaries
Because line.split(clauseBoundary) removes the punctuation delimiters, this reset condition can never see the ./!/? that ended the preceding clause. Consequently, after an opening prohibition, a later sentence without one of the limited hasOwnPredicate tokens is skipped: the checker exits successfully for No revenue guarantees. Guaranteed rankings available. even though the second sentence is an outbound guarantee. Preserve boundary information or reset governed when crossing sentence punctuation.
Useful? React with 👍 / 👎.
|
|
||
| export const CLIENT_SCAFFOLD_VERSION = 1 | ||
| export const FOUNDER_PILOT = Object.freeze({offerName: "7-Day Website Revenue Leak Fix Sprint", offerPriceUsd: 1000, pricingCohort: "founder-pilot", capacity: 3}) | ||
| export const FOUNDER_PILOT = Object.freeze({offerName: "The Website Correction", offerPriceUsd: 1000, pricingCohort: "founder-pilot", capacity: 3}) |
There was a problem hiding this comment.
Preserve existing Day 0 records across the offer rename
For every paid or in-progress client whose persisted service-day0.json was created before this rename, offerName still contains 7-Day Website Revenue Leak Fix Sprint. Changing the canonical constant immediately makes assertFounderPilotRecord reject those records, and buildQueue calls that validation while reading persisted Day 0 state, so existing service records cannot advance or resume. Migrate or accept the legacy name for records that already started rather than invalidating them in place.
Useful? React with 👍 / 👎.
| const outboundFiles = new Set(["next-message.md", "send-package.md", "outreach.md", "reply-package.md", "call-booked-package.md", "close-package.md"]); | ||
| const optOutPattern = /\b(reply no|do not follow up|unsubscribe|opt out|ignore me)\b/i; | ||
| const placeholderPattern = /\[(?:add Loom link|link|specific leak|Name)\]|Here is the Loom:\s*$/i; | ||
| const placeholderPattern = /\[(?:add Loom link|link|specific fault|Name)\]|Here is the Loom:\s*$/i; |
There was a problem hiding this comment.
Continue rejecting the legacy send placeholder
When an existing send package was generated before this terminology change and still contains [specific leak], this narrowed regex no longer recognizes it. A send-package.md containing that literal placeholder and otherwise valid opt-out text now makes send:check report pass, allowing unfinished copy onto the outbound path. Match both the legacy and new placeholder until persisted packages are migrated.
Useful? React with 👍 / 👎.
| } | ||
| const content = readFileSync(path, "utf8") | ||
| for (const pattern of [/Tangible Revenue Leak Sprint/i, /30[- ]day (?:action )?plan/i, /Weekly Growth Desk|Full-Stack Growth Desk|Operator[- ]Led Growth Pod|operator pod/i, /rewrite\/redesign|rewritten and redesigned/i, /ad angles? and email\/sms|ads and email\/sms/i]) { | ||
| for (const pattern of [/Tangible Revenue Fault Sprint/i, /30[- ]day (?:action )?plan/i, /Weekly Growth Desk|Full-Stack Growth Desk|Operator[- ]Led Growth Pod|operator pod/i, /rewrite\/redesign|rewritten and redesigned/i, /ad angles? and email\/sms|ads and email\/sms/i]) { |
There was a problem hiding this comment.
Keep the former offer name in the stale-truth gate
This is a denylist of retired generator language, so renaming its entry along with the active terminology removes protection against the actual former phrase Tangible Revenue Leak Sprint. If an active generator retains or reintroduces that old offer, product:truth now passes it; the updated test fixtures likewise only exercise the invented Fault variant. Keep the legacy Leak pattern, optionally alongside the new variant.
Useful? React with 👍 / 👎.
| ## Run These Fresh In Mobbin Pro MCP | ||
|
|
||
| - niche: home-service roof cleaning, gutter clearing, leak checks, and seasonal maintenance service marketing website homepage quote CTA landing page website inspiration | ||
| - niche: home-service roof cleaning, gutter clearing, fault checks, and seasonal maintenance service marketing website homepage quote CTA landing page website inspiration |
There was a problem hiding this comment.
Restore the roof leak-check search term
When this pending Mobbin research task is executed, fault checks changes the actual roofcare service being researched rather than merely renaming the agency's diagnostic artifact. The canonical business data still defines this niche as roof cleaning, gutter clearing, leak checks, and seasonal maintenance, so the new query is both inconsistent with its source packet and less likely to retrieve relevant roof-leak service references. Keep leak checks for this domain-specific search.
Useful? React with 👍 / 👎.
…ard branch Resolves the one overlapping line in draft-loom-recording-script.mjs by keeping the fault rename and main's guard-safe 'positions ... as' phrasing.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1f36fbc26b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ? ["1", actionPlan[1], `Measures ${actionPlan[3]}`, actionPlan[2], localIsoDate()] | ||
| : ["1", "", "", "", ""]; | ||
| const existingRevenueLeakRows = filledTableRows(existingReport, "Revenue Leak Loop", [1, 2, 3, 4]); | ||
| const existingRevenueLeakRows = filledTableRows(existingReport, "Revenue Fault Loop", [1, 2, 3, 4]); |
There was a problem hiding this comment.
Preserve rows under the legacy weekly-report heading
For any client whose report predates this terminology sweep, existingReport still stores its completed table under ## Revenue Leak Loop. This lookup therefore returns no rows, after which the exporter writes fallback rows under the new heading and overwrites the report, discarding operator-entered before/fix/value/next-action data. Read both headings or migrate the section before rewriting the file.
Useful? React with 👍 / 👎.
What
Makes
npm testgreen (it was already failing onmain) and removes the plumbing metaphor from buyer-facing copy.Claim guard
Two rules flagged text that forbids a claim as though it made one.
clauseBoundarysplits on: . ! ? ;and conjunctions, not commas, soNo revenue, ranking, or sales-volume guarantees.arrives as one whole clause and the risk-flag rule read it as a promise.The fix uses two clause sets, because the rules need different things:
guaranteeGuardrailfirst, so that clause is kept — a promise can still hide after the disclaimerThat second half matters. An earlier, wider exemption made the suite pass by also letting
Neither results are guaranteed, placement is guaranteedthrough. The adversarial cases intest-active-operator-surfacesplant exactly that, and they still fail the guard as intended.Offer rename
7-Day Website Revenue Leak Fix Sprint→ The Website Correction, across config, generators, surfaces and the two lowercase product-truth regexes. No 7-day reference in buyer-facing language.Language sweep
Prose only, word boundaries that skip camelCase.
leakMap,LeakLoop,leakFragmentare internal identifiers that never reach a client. The roofcare reference packet keeps its leaks, which are literal.Also
Tracked operator artifacts regenerated in a clean tree. They are generated in a temp repo containing only
scripts/,growth-brain/,contracts/anddocs/, so artifacts regenerated on a machine holding local client data always read as stale.~/.codex/automations/tinystudio-retention-checkups/automation.tomlwas missing on this host, which is machine state rather than a code defect.Verification
npm testgreencheck-product-truthandtest-active-operator-surfacespass🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Bug Fixes
Documentation