Skip to content

Fix claim-guard false positives, rename the offer, drop plumbing language - #9

Merged
nish3451 merged 9 commits into
mainfrom
fix/claim-guard-negated-mentions
Aug 7, 2026
Merged

Fix claim-guard false positives, rename the offer, drop plumbing language#9
nish3451 merged 9 commits into
mainfrom
fix/claim-guard-negated-mentions

Conversation

@nish3451

@nish3451 nish3451 commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

What

Makes npm test green (it was already failing on main) and removes the plumbing metaphor from buyer-facing copy.

Claim guard

Two rules flagged text that forbids a claim as though it made one.

clauseBoundary splits on : . ! ? ; and conjunctions, not commas, so No 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:

  • risk-flag rule reads a clause whole, so a prohibition-opening clause is dropped
  • generic rule strips guaranteeGuardrail first, so that clause is kept — a promise can still hide after the disclaimer

That second half matters. An earlier, wider exemption made the suite pass by also letting Neither results are guaranteed, placement is guaranteed through. The adversarial cases in test-active-operator-surfaces plant exactly that, and they still fail the guard as intended.

Offer rename

7-Day Website Revenue Leak Fix SprintThe 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, leakFragment are 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/ and docs/, so artifacts regenerated on a machine holding local client data always read as stale.

~/.codex/automations/tinystudio-retention-checkups/automation.toml was missing on this host, which is machine state rather than a code defect.

Verification

  • npm test green
  • claim guard exits 0 on the repo, adversarial promises still caught
  • check-product-truth and test-active-operator-surfaces pass

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Renamed the active service to The Website Correction.
    • Updated customer-facing deliverables and guidance to use fault map terminology.
    • Standardized fault-based language across audits, reports, sales materials, workflows, and generated outputs.
  • Bug Fixes

    • Improved outbound claim-safety checks for more accurate handling of clause-level restrictions.
  • Documentation

    • Updated benchmarks, historical references, service descriptions, and supporting materials with the new naming and terminology.

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.
@greptile-apps

greptile-apps Bot commented Aug 6, 2026

Copy link
Copy Markdown

Too many files changed for review (128 files, 100 file limit).

Bypass the limit by tagging @greptile-apps to review.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: fe8de134-21f1-4f40-80ac-101183f1c45f

📥 Commits

Reviewing files that changed from the base of the PR and between 06206b4 and 1f36fbc.

📒 Files selected for processing (14)
  • MEMORY.md
  • PRODUCT.md
  • growth-brain/README.md
  • growth-brain/agency-operating-model.md
  • growth-brain/build-roadmap.md
  • growth-brain/loom-audit-script.md
  • growth-brain/retention/client-health-score.md
  • growth-brain/sales/pricing-rules.md
  • growth-brain/sales/sales-call-script.md
  • scripts/draft-loom-recording-script.mjs
  • scripts/lib/client-scaffold.mjs
  • scripts/lib/service-artifacts.mjs
  • scripts/test-active-operator-surfaces.mjs
  • scripts/test-service-engine.mjs

📝 Walkthrough

Walkthrough

The 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.

Changes

Website Correction terminology migration

Layer / File(s) Summary
Offer and workflow source contracts
AGENT_WORKFLOW.md, README.md, PRODUCT.md, MEMORY.md, growth-brain/*, docs/*, specs/*
The offer is renamed to The Website Correction. Leak maps, leaks, and revenue leak loops are renamed to fault maps, faults, and revenue fault loops.
Generators and validation contracts
scripts/check-*.mjs, scripts/export-*.mjs, scripts/lib/*, scripts/prepare-*.mjs, scripts/draft-*.mjs
Generators, parsers, readiness checks, proof checks, and client exports now read and emit fault-based fields, labels, placeholders, and offer names.
Retired surfaces and contract fixtures
scripts/retired/*, scripts/test-*.mjs, scripts/update-market-proof-looms.mjs
Retired exporters, smoke-test fixtures, contract tests, and proof-update checks now expect fault terminology and the renamed offer.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • nish3451/tinystudio-in#8: Both modify clause-level claim and guarantee filtering in scripts/check-outbound-claim-safety.mjs.
  • nish3451/TinyStudio.io#11: Both reframe website leak terminology as website fault terminology across offer and appraisal copy.
  • nish3451/tinystudio-in#12: Both modify scripts/draft-loom-recording-script.mjs, although this pull request changes terminology.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the claim-guard fix, offer rename, and removal of plumbing language described in the pull request objectives.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/claim-guard-negated-mentions

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Remove 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 win

Recognize negative contractions in forbidsMention.

forbidsMention accepts Do not mention guaranteed revenue, but not Don'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 win

Restore the checklist meaning.

fault into is not grammatical and does not state that implementation details must remain outside the specification. Use direct wording such as No 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 win

Remove the duplicate article from the offer name.

Line 5 renders the The Website Correction. Remove the outer the.

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 win

Remove the duplicate article from the offer name.

Line 3 renders the The Website Correction. The product name already starts with The.

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 win

Remove the duplicate article from the offer name.

Line 3 renders the The Website Correction. Remove the outer the.

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 win

Remove 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 win

Use the canonical offer name without an extra article.

The Website Correction already contains the article The. The current text produces the The Website Correction and a 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 win

Use the canonical offer name in a grammatical phrase.

The Website Correction already contains the article The. The phrase for one The Website Correction is 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 win

Fix the display-name grammar before regenerating this artifact.

config.offerName is The Website Correction. This claim renders a human-reviewed The Website Correction. The same mismatch affects scripts/draft-sales-call-prep.mjs Lines 131 and 157 and scripts/draft-recording-sharpness-brief.mjs Line 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 win

Remove the remaining plumbing wording from the generated delivery artifact.

Lines 227-228 rename the section to Top Faults, but fillDelivery() still emits What 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:. Keep startup.topLeak if 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 win

Migrate legacy Top Leaks sections before writing.

createIfMissing() preserves existing deliverables/delivery.md files, and replaceSection() matches headings exactly. A legacy ## Top Leaks section therefore remains while a new ## Top Faults section 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 win

Keep 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, add specific leak to placeholderPattern and 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 win

Remove the remaining leak wording.

The proof-delta item now uses fault, but the Before row at Line 29 still says leaking. Replace leaking with 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 win

Migrate persisted teleprompter state for the renamed keys.

qualityKey() and noteKey() derive per-record keys from data-quality and data-note, but the top-level storage keys stay unchanged. Existing ...::leak entries remain unread as ...::fault. The page then shows unchecked quality and empty notes, and isQualityApproved() 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 win

Correct the offer sentence and remove the retired duration.

a human-reviewed The Website Correction is ungrammatical. Line 17 also retains seven-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 win

Reject legacy fault placeholders in every outbound gate.

If legacy prospect folders can exist, reject or migrate [specific leak] and blank Specific leak: values in prospect-readiness.mjs and reply-worthy-proof.mjs. The proof score can still reach 8/10 when the legacy fault check is the only failure, so prepare-prospect-send.mjs continues.

🤖 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 win

Remove 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 win

Use 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 win

Remove the literal article before config.offerName.

config.offerName is The Website Correction, so the current output says “makes the The Website Correction feel.” Remove the before 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 win

Remove 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 validated day0.offerName value 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 win

Read 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 win

Remove 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 win

Remove 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 win

Remove the duplicated article in the product name.

Line 5 renders “for the The Website Correction”. The is 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 win

Remove 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 win

Remove seven-day offer references from active buyer-facing paths.

scripts/retired/check-growth-brain-kit.mjs is not an active gate, but its recording-notes fixture is copied into send-package.md by scripts/prepare-prospect-send.mjs. Active generators also emit seven-day copy in scripts/create-prospect-audit.mjs, scripts/prepare-prospect-call-booked.mjs, scripts/prepare-prospect-close-package.mjs, and growth-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 win

Update the completed task to the canonical offer name.

This task still records 7-Day Site Revenue Fault Sprint, while the active offer is The 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 win

Use the canonical singular offer name.

The Website Corrections does 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 win

Fix 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 value

Align the retired checker with the four-field quality contract.

The recording-quality gates already require fault, impact, fix, and ask. This checker only checks notes.fault and notes.ask, so it cannot detect regressions in the impact or fix requirements.

🤖 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

📥 Commits

Reviewing files that changed from the base of the PR and between 24e516a and 06206b4.

📒 Files selected for processing (129)
  • .agents/skills/speckit-specify/SKILL.md
  • AGENT_WORKFLOW.md
  • MEMORY.md
  • PRODUCT.md
  • README.md
  • TASKS.md
  • docs/evidence/design-system-proving-lab/business-packets/ridge-gutter-roofcare-auckland/approval-packet.todo.md
  • docs/evidence/design-system-proving-lab/proving-lab-report.md
  • docs/evidence/design-system-proving-lab/search-briefs/ridge-gutter-roofcare-auckland.mobbin-todo.md
  • docs/strategy/first-14-days.md
  • docs/strategy/growth-brain-agency-plan.md
  • docs/strategy/market-parity-benchmark-2026.md
  • growth-brain/README.md
  • growth-brain/agency-operating-model.md
  • growth-brain/agents/marketing-agent-workbench.md
  • growth-brain/agents/product-page-fixer.md
  • growth-brain/build-roadmap.md
  • growth-brain/client-brain-template/website-notes.md
  • growth-brain/delivery-template.md
  • growth-brain/delivery/client-communication-cadence.md
  • growth-brain/delivery/implementation-handoff-template.md
  • growth-brain/loom-audit-script.md
  • growth-brain/offer.md
  • growth-brain/ops/11-10-proof-run.md
  • growth-brain/ops/agency-config.json
  • growth-brain/ops/competitive-proof-matrix.html
  • growth-brain/ops/competitive-proof-matrix.md
  • growth-brain/ops/historical/full-stack-growth-map.html
  • growth-brain/ops/historical/full-stack-growth-map.md
  • growth-brain/ops/historical/value-retention-stress-test.md
  • growth-brain/ops/live-metrics.md
  • growth-brain/ops/market-parity-readiness.md
  • growth-brain/ops/proof-library.md
  • growth-brain/ops/sender-setup-guide.html
  • growth-brain/ops/sender-setup-guide.md
  • growth-brain/optimization/10x-opportunity-register.md
  • growth-brain/outreach-tracker.md
  • growth-brain/positioning/message-house.md
  • growth-brain/positioning/tangible-improvement-moat.md
  • growth-brain/prospecting/warm-network-scripts.md
  • growth-brain/quality/readiness-gates.md
  • growth-brain/quality/search-trust-layer.md
  • growth-brain/quality/sprint-acceptance-checklist.md
  • growth-brain/retention/case-study-template.md
  • growth-brain/retention/client-health-score.md
  • growth-brain/retention/outsized-value-retention-system.md
  • growth-brain/retention/weekly-growth-desk-playbook.md
  • growth-brain/sales/buyer-room-template.md
  • growth-brain/sales/follow-up-sequences.md
  • growth-brain/sales/managed-it-one-page-offer.html
  • growth-brain/sales/managed-it-one-page-offer.md
  • growth-brain/sales/one-page-offer.md
  • growth-brain/sales/pricing-rules.md
  • growth-brain/sales/proposal-template.md
  • growth-brain/sales/sales-call-script.md
  • growth-brain/sales/value-calculator.md
  • growth-brain/sprint-checklist.md
  • growth-brain/strategy/full-stack-growth-offer-ladder.md
  • growth-brain/verticals/accounting-bookkeeping.md
  • growth-brain/verticals/dental-medspa-clinics.md
  • growth-brain/verticals/home-services.md
  • growth-brain/verticals/managed-it-cybersecurity.md
  • growth-brain/weekly-report-template.md
  • growth-brain/workflows/README.md
  • growth-brain/workflows/client-sprint-workflow.md
  • growth-brain/workflows/conversion-audit-workflow.md
  • growth-brain/workflows/daily-sales-workflow.md
  • growth-brain/workflows/full-stack-growth-desk-workflow.md
  • growth-brain/workflows/human-review-service-engine.md
  • growth-brain/workflows/lead-scoring-workflow.md
  • growth-brain/workflows/loom-audit-workflow.md
  • growth-brain/workflows/weekly-client-value-loop.md
  • scripts/check-agency-defaults.mjs
  • scripts/check-client-readiness.mjs
  • scripts/check-client-weekly-report.mjs
  • scripts/check-human-service-kit.mjs
  • scripts/check-market-parity-readiness.mjs
  • scripts/check-market-proof-run.mjs
  • scripts/check-outbound-claim-safety.mjs
  • scripts/check-outbound-send-readiness.mjs
  • scripts/check-product-truth.mjs
  • scripts/create-prospect-audit.mjs
  • scripts/draft-client-kickoff.mjs
  • scripts/draft-loom-recording-script.mjs
  • scripts/draft-recording-sharpness-brief.mjs
  • scripts/draft-sales-call-prep.mjs
  • scripts/export-client-channel-readiness.mjs
  • scripts/export-client-delivery-cockpit.mjs
  • scripts/export-client-repeatable-workflow.mjs
  • scripts/export-client-weekly-report.mjs
  • scripts/export-daily-money-mission.mjs
  • scripts/export-full-stack-growth-map.mjs
  • scripts/export-lead-scoring-cockpit.mjs
  • scripts/export-market-benchmark.mjs
  • scripts/export-market-learning-review.mjs
  • scripts/export-market-proof-cockpit.mjs
  • scripts/export-market-proof-run.mjs
  • scripts/export-owned-product-case-studies.mjs
  • scripts/export-owned-startup-proof-capture.mjs
  • scripts/export-proof-library.mjs
  • scripts/export-recording-cockpit.mjs
  • scripts/export-recording-rehearsal-check.mjs
  • scripts/export-recording-teleprompter.mjs
  • scripts/lib/agency-config.mjs
  • scripts/lib/canonical-service-copy.mjs
  • scripts/lib/client-scaffold.mjs
  • scripts/lib/prospect-readiness.mjs
  • scripts/lib/reply-worthy-proof.mjs
  • scripts/lib/service-artifacts.mjs
  • scripts/prepare-prospect-batch-send.mjs
  • scripts/prepare-prospect-call-booked.mjs
  • scripts/prepare-prospect-close-package.mjs
  • scripts/prepare-prospect-send.mjs
  • scripts/retired/check-growth-brain-kit.mjs
  • scripts/retired/export-client-facing-dashboard.mjs
  • scripts/retired/export-value-retention-stress-test.mjs
  • scripts/show-growth-command-center.mjs
  • scripts/snapshot-prospect-page.mjs
  • scripts/test-active-offer-projection.mjs
  • scripts/test-active-operator-surfaces.mjs
  • scripts/test-client-readiness-contract.mjs
  • scripts/test-outbound-send-readiness.mjs
  • scripts/test-sales-intake-contract.mjs
  • scripts/test-service-engine.mjs
  • scripts/update-market-proof-looms.mjs
  • skills/revenue-page-conversion-audit/SKILL.md
  • specs/001-growth-brain-agency/spec.md
  • specs/001-growth-brain-agency/tasks.md
  • specs/002-autonomous-service-engine/spec.md

Comment thread docs/strategy/first-14-days.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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ 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;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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.

Comment on lines +149 to +157
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."

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ 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.

Comment on lines +313 to +314
<input type="checkbox" data-quality="fault" data-path="${escapeHtml(prospect.path)}" />
<span>Visible fault</span>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ 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.

Comment on lines +559 to +562
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])

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ 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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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.

Suggested change
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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ 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.

Suggested change
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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment on lines +561 to +562
assertExactKeys(entry, ["fault", "impact", "priority", "evidenceIds"], `agent work leakMap.items[${index}]`)
checkNonPlaceholderFields(entry, `agent work leakMap.items[${index}]`, ["fault", 10, 1200, "impact", 10, 1200])

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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.
@nish3451

nish3451 commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator Author

Overseer review (Opus 5, 2026-08-07 morning shift) — two findings, one fixed on this branch, one blocking.

1. Fixed here (pushed as f9dbf61). The language sweep was a blind word replacement and it broke buyer-facing copy in 12 places:

  • the **The Website Correction** — double article in MEMORY.md, PRODUCT.md, README.md, growth-brain/README.md, agency-operating-model.md, build-roadmap.md, loom-audit-script.md, client-health-score.md, pricing-rules.md, and twice in sales-call-script.md. Two of those are things a buyer actually reads: the call script line "The The Website Correction is a $1,000 founder pilot…" and the approval email "Thanks for approving the The Website Correction."
  • .agents/skills/speckit-specify/SKILL.md: "No implementation details fault into specification." That leak was the ordinary verb, never the offer metaphor. Restored.

The rename itself is right; only the mechanical application was wrong. Lesson for the next sweep: a name that already carries The needs the preceding article dropped, and a word-boundary replace still has to be read for sense afterwards.

2. Blocking, and not this PR's fault. npm test is red on this branch today and was green yesterday, because scripts/test-active-operator-surfaces.mjs compares regenerated artifacts against trackedArtifactDate — the Generated: line committed into growth-brain/ops/proof-library.md (currently 2026-08-06). Five artifacts (sender-setup-guide.md/.html, competitive-proof-matrix.md/.html, market-parity-benchmark-2026.md) come back stamped with the real date instead of the fixture date and trip staleGeneratedArtifacts with "generated after queue as-of date".

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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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})

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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]) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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.
@nish3451
nish3451 merged commit 255e3de into main Aug 7, 2026
2 of 3 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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]);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant