Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
5061dfd
fix(sales): stop interpolating the offer name directly after the arti…
nish3451 Aug 11, 2026
5ee9e89
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
2b8db35
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
9e6b262
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
509c2ed
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
217a5fa
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
7003f02
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
addbe53
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
d31a2f2
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
76e25c9
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
16fa003
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 12, 2026
88adbfc
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
edf4f95
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
5174d03
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
2236d19
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
a876428
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
a101c0b
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
95d28d2
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
d559788
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
dfe9bc3
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
5f471e5
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
ba4a8b0
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
a1a0e38
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 13, 2026
647ac38
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
9d9c38e
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
ced6248
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
a31b0bf
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
296016f
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
2558869
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
56e8db7
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
e691782
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
2f5c391
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
9025776
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
b93cc7e
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
2a96604
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
ad7a01f
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
bb145cb
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
bc85c49
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 14, 2026
57f7d41
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
ea00ba3
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
99fb388
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
07673d7
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
97034bd
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
532fd62
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
23bcb6c
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
412e125
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
8823500
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
b39cec2
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
6febf4c
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
62a345d
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
ce15dd9
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
6ec7872
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
5c0c738
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 15, 2026
ad519e1
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 17, 2026
eb92344
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 17, 2026
447ad1e
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 17, 2026
28b40cb
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 17, 2026
e42321a
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 17, 2026
b457a4b
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 17, 2026
9057d12
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 17, 2026
d05093d
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 18, 2026
d6fed74
Merge branch 'main' into fix/operator-copy-offer-article
nish3451 Aug 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions scripts/check-product-truth.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,21 @@ for (const path of activeGeneratorSources) {
}
}

for (const path of [
"scripts/draft-sales-call-prep.mjs",
Comment on lines +252 to +253

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 Check every active generator for doubled offer articles

This hard-coded subset leaves active offer-copy generators such as create-prospect-audit.mjs, prepare-prospect-close-package.mjs, and export-proof-library.mjs unchecked, even though they are already listed in activeGeneratorSources and interpolate offerName. If any of those emits the ${config.offerName}, the product-truth gate still passes while producing the same "the The Website Correction" regression this guard is intended to prevent; apply the check across activeGeneratorSources (plus any relevant libraries) instead.

Useful? React with 👍 / 👎.

"scripts/draft-recording-sharpness-brief.mjs",
"scripts/draft-loom-recording-script.mjs",
"scripts/draft-client-kickoff.mjs",
"scripts/draft-prospect-message.mjs",
"scripts/lib/canonical-service-copy.mjs",
"scripts/lib/client-scaffold.mjs"
]) {
const content = existsSync(path) ? readFileSync(path, "utf8") : ""
if (/\b(?:the|The)\s*\$\{(?:config|FOUNDER_PILOT|day0)\.offerName\}/.test(content)) {

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 Cover adjective-qualified offer-name regressions

The guard only matches when ${...offerName} immediately follows the, so it does not protect the fifth regression fixed by this commit: restoring the exact one-page ${config.offerName} scope in draft-prospect-message.mjs still lets check-product-truth.mjs pass. Any descriptor inserted between the article and the interpolation similarly bypasses the gate and can regenerate awkward copy containing the ... The Website Correction; add an output assertion or a pattern covering the adjective-qualified form.

Useful? React with 👍 / 👎.

failures.push(`${path}: offer name is interpolated directly after the article 'the'`)
}
}

for (const [path, requiredPatterns] of [
[
"scripts/draft-sales-call-prep.mjs",
Expand Down
2 changes: 1 addition & 1 deletion scripts/draft-client-kickoff.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ const approvalOwner = day0.approvalOwner;
const highestLeveragePage = field(sprintPlan, "Highest-leverage page:", "choose the highest-leverage page");
const sprint = `**${day0.offerName}**\n\nIncluded: ${config.includedDeliverables.join(", ")}.`;
const timingAndPrice = `- Day 0: ${day0.day0StartedAt}\n- Working-day deadline: ${day0.deadlineAt}\n- Clock rule: ${config.dayZeroRule}\n- Founder pilot ${pilotPosition} of ${FOUNDER_PILOT.capacity}: **${founderPilotPrice}**.`;
const approvalOpening = `Thanks for approving the ${config.offerName}. Day 0 is recorded and the service is paid.`;
const approvalOpening = `Thanks for approving ${config.offerName}. Day 0 is recorded and the service is paid.`;

const kickoff = `# ${name} Kickoff Message

Expand Down
2 changes: 1 addition & 1 deletion scripts/draft-loom-recording-script.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ const script = `# ${metadata.name} Loom Recording Script

## Goal

Record a 2-3 minute cold audit that names one clear fault and positions the ${config.offerName} as the obvious next step.
Record a 2-3 minute cold audit that names one clear fault and positions ${config.offerName} as the obvious next step.

## Before Recording

Expand Down
2 changes: 1 addition & 1 deletion scripts/draft-prospect-message.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ if (stage === "sent" || stage.startsWith("followup-")) {
body = appendEmailComplianceFooter(`Worth sending the exact ${mainPage} structure I would use for this?`);
} else if (pending?.step === "day-5") {
subject = `Re: Quick audit for ${name}`;
body = appendEmailComplianceFooter(`Quick bump. The main thing I would fix first is ${leakFragment}. If useful, I can send the exact one-page ${config.offerName} scope.`);
body = appendEmailComplianceFooter(`Quick bump. The main thing I would fix first is ${leakFragment}. If useful, I can send the exact one-page scope for ${config.offerName}.`);
} else if (pending?.step === "day-10") {
subject = `Re: Quick audit for ${name}`;
body = appendEmailComplianceFooter(`Closing the loop here. I still think ${mainPage} is leaving clarity on the table. Happy to revisit if this becomes a priority.`);
Expand Down
2 changes: 1 addition & 1 deletion scripts/draft-recording-sharpness-brief.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ Use this before recording. The job is not to sound clever. The job is to make on
4. Credibility: ${proof[0] || "use only visible proof from the live page"}
5. Solution: ${firstFix}
6. Proof: ${proof[1] || contrast}
7. CTA: Offer the ${config.offerName} at ${price} without promising revenue, rankings, ROAS, or lift.
7. CTA: Offer ${config.offerName} at ${price} without promising revenue, rankings, ROAS, or lift.

## So-What Chain

Expand Down
2 changes: 1 addition & 1 deletion scripts/draft-sales-call-prep.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ ${payback}

## Close

"The ${FOUNDER_PILOT.offerName} is exactly a ${founderPilotPrice()} for one highest-leverage page. Human reviewers gate the claims and client-facing work. You receive the fault map, rewrite or redesign, one implementation pass or dev-ready handoff, search-trust basics, before/after proof, Loom, measurement plan, one client revision, and 14-day implementation tracking. Day 0 starts after payment, context, and named approval and implementation owners."
"${FOUNDER_PILOT.offerName} is exactly a ${founderPilotPrice()} for one highest-leverage page. Human reviewers gate the claims and client-facing work. You receive the fault map, rewrite or redesign, one implementation pass or dev-ready handoff, search-trust basics, before/after proof, Loom, measurement plan, one client revision, and 14-day implementation tracking. Day 0 starts after payment, context, and named approval and implementation owners."

## Guardrails

Expand Down