[object Object]

← 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

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 →