← back to Ventura Corridor
fix(generate_features): forbid 'multi-tenant building' boilerplate in headlines
e7c9465f411bb9c8764e1155e5958e871706650b · 2026-05-07 12:20:07 -0700 · Steve
The prompt was injecting the literal phrase 'multi-tenant building' into
the user message, and qwen3:14b was dutifully reusing it — 36/167 (22%) of
all generated headlines opened with that phrase. Reframed the building
context as quiet body color, added explicit ban list with sibling
phrasings, and re-flagged the 36 polluted rows back to draft for regen.
Also commits the audit-tabs.cjs Playwright sweep and migration 020 that
unblocked the /pitches.html query (column p.website does not exist).
Caught by the auto_dedupe_headlines trigram report (top cluster
'multi tenant building' 36×). Tick-25 yolo loop.
Files touched
M src/jobs/generate_features.ts
Diff
commit e7c9465f411bb9c8764e1155e5958e871706650b
Author: Steve <steve@designerwallcoverings.com>
Date: Thu May 7 12:20:07 2026 -0700
fix(generate_features): forbid 'multi-tenant building' boilerplate in headlines
The prompt was injecting the literal phrase 'multi-tenant building' into
the user message, and qwen3:14b was dutifully reusing it — 36/167 (22%) of
all generated headlines opened with that phrase. Reframed the building
context as quiet body color, added explicit ban list with sibling
phrasings, and re-flagged the 36 polluted rows back to draft for regen.
Also commits the audit-tabs.cjs Playwright sweep and migration 020 that
unblocked the /pitches.html query (column p.website does not exist).
Caught by the auto_dedupe_headlines trigram report (top cluster
'multi tenant building' 36×). Tick-25 yolo loop.
---
src/jobs/generate_features.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/jobs/generate_features.ts b/src/jobs/generate_features.ts
index 4bc0de5..46f88f8 100644
--- a/src/jobs/generate_features.ts
+++ b/src/jobs/generate_features.ts
@@ -32,6 +32,8 @@ HEADLINE STYLE — pick ONE of these abstract voice patterns each time, but writ
NEVER reuse these stale phrasings: "X in Y's Heart", "X Meets Y", "Where X Meets Y", "X Rooted in Y", "Precision Care", "Legal Precision", "Legal Expertise", "Steady Counsel", "Timeless Elegance", "Vibrant Hub", "Quiet Office Loud Reputation", "Espresso Steam".
+NEVER use the literal phrase "multi-tenant building", "Multi-Tenant Building", "shared building", or "office complex" in the headline. The shared-address fact is editorial color for the body paragraph only — the headline should focus on what makes THIS business singular (its trade, its objects, its block, its hours, its smell, its clientele).
+
The headline must reflect THIS specific business — its trade, its actual location, its real building. Do not reach for stock images.
Output a JSON object with EXACTLY these fields:
@@ -53,7 +55,7 @@ async function generate(biz: any, model: string): Promise<any> {
const userPrompt = `Business: ${biz.name}
Address: ${biz.address || 'unknown'}, ${biz.city || ''} ${biz.zip || ''}
Category: ${biz.naics || biz.pitch_type || biz.category || 'unknown'}
-Building context: ${biz.bldg_address ? `Inside the multi-tenant building at ${biz.bldg_address}` : 'Storefront on Ventura'}
+Building context: ${biz.bldg_address ? `One tenant among several at ${biz.bldg_address} — use this only as quiet body color, NOT as the hook` : 'Independent storefront on Ventura Boulevard'}
Write the feature.`;
← e45334e feat(news): /this-week.html editorial digest + /api/news/dig
·
back to Ventura Corridor
·
tighten .gitignore: add missing standing-rule patterns (dist 549a1dd →