Scripting Skill · Revamp Dossier

scripter-polishAlgorithmic script quality check — scans every script for forbidden words, AI patterns, em-dashes, numeral consistency, structural gaps, and mechanism-reveal violations. Binary pass/fail. No subjective calls.

Owner: Pipeline — fires as part of /ad-polish after ad-scripter-write · for Asel · 2026-06-11
What it does

scripter-polish is the final gate before a script goes to filming. It runs 18 deterministic checks — forbidden word scan, AI pattern detection, em-dash strip, numeral consistency, structural element counts, economy of language, mechanism-reveal compliance, Social Proof Bridge (SPB) verification, and word count — and returns a binary verdict: PRODUCTION READY or not. The canonical forbidden-word list lives here (all other scripting skills reference it). Tier 4, the expert-specific layer, is populated upstream by ad-autopsy via the Supabase view active_launch_learnings_for_<expert>, section = 'forbidden' — scripter-polish loads it live at Step 0C before every run. Step 6 is the mechanism-reveal protection check: at TEASER level, no element names, no step counts, and no sequence language are permitted. scripter-polish is wrapped by /ad-polish and is the skill that catches what the writing model's own self-certification misses.

Why this skill matters — the self-cert gap

In the 2026-06-10 depth eval, the ad-scripter-write construction log self-certified zero em-dashes on both test scripts. scripter-polish's deterministic STEP 1 scan found 4 in sw-tc001 and 6 in sw-tc005 — all in spoken AMELIA lines. A model's inline self-check cannot be treated as a QA gate. This skill is the catch.

01 Model routing — deterministic-first

This is the most deterministic skill in the system. The large majority of checks are plain code — string matching, regex, and arithmetic. No model decides whether a word is forbidden.

TaskModelWhy
Forbidden-word scan, all tiers including Tier 4 (Step 1)Plain code — no language modelString matching and regex against fixed word lists. Zero-false-negative bar. A language model adds hallucination risk and latency with no accuracy gain. The code decides; the model does not.
Forbidden pattern detection, P1–P18 (Step 1)Plain code — no language modelRegex matching against 18 fixed pattern rules. Deterministic by design.
Literary-verb list and copula-avoidance list checks (Step 2)Plain code — no language modelExact-string matching against fixed replacement tables. No inference needed.
Required element counts — internal dialogue, specific numbers, timeframes, sustainability language (Step 3)Plain code — no language modelCounting and arithmetic. The model never counts.
Sentence-type distribution and conversational-marker counts (Step 4)Plain code — no language modelTokenisation and classification against fixed rules. Deterministic.
Word count per section (Step 8)Plain code — no language modelArithmetic.
Tier 4 dynamic forbidden-word view pull (Step 0C)Haiku 4.5 (claude-haiku-4-5) via OpenRouterMechanical read from a structured Supabase view. No synthesis. Cheapest capable model. HALT if view is unreachable — never proceed with an incomplete forbidden list.
Symmetry check nuance — borderline "natural speech" instances (Step 2)Sonnet 4.6 (claude-sonnet-4-6) via OpenRouterThe deterministic count finds the instances; Sonnet judges whether a borderline case qualifies as natural speech (the explicit exception in the rule). Model is called only on ambiguous hits.
Economy of language — redundancy and sentence necessity (Step 5)Sonnet 4.6 (claude-sonnet-4-6) via OpenRouterRequires reading for meaning. Bounded task — one script at a time.
Mechanism-reveal protection assessment (Step 6)Sonnet 4.6 → Opus 4.8 (claude-opus-4-8) escalation via OpenRouterStart with Sonnet for standard scripts. Escalate to Opus 4.8 when the script contains novel reveal language, ambiguous partial reveals, or the mechanism-specific word count is close to threshold. The consequence of a missed over-reveal is high — model choice follows the risk.
Social Proof Bridge (SPB) quality assessment (Step 7)Sonnet 4.6 (claude-sonnet-4-6) via OpenRouterChecks against 4 fixed criteria with copy-reading context. Sonnet is sufficient.
Voice fidelity exception — copula avoidance check against Voice Book (Step 2)Sonnet 4.6 (claude-sonnet-4-6) via OpenRouterReads expert_profile and compares against the found instance. One-shot comparison per flag. Exception applies only if the expert literally uses the phrasing in the Voice Book.

All model calls go through OpenRouter. Every call is logged to the agent_run audit trail with model ID, provider, and cost. No Fable 5 — this is a QA gate, not a generation or ceiling one-shot task.

02 The spec

What goes in, and exactly what comes out.

InputWhat it is
Draft scriptThe output of ad-scripter-write for the current concept card. Must include scene-by-section structure (Hook, Transition, Struggle, Turning Point, Insight, Training + Social Proof Bridge, Call to Action) with guru dialogue clearly labelled.
Construction log (Pioneer mode only — V1.1)The self-check log produced by ad-scripter-write in Pioneer mode. scripter-polish cross-checks the log's self-certifications against its own deterministic scan. The 2026-06-10 eval showed this cross-check is not optional — the construction log's em-dash self-cert was wrong on both test scripts.
Expert namespaceThe expert identifier that partitions all Supabase data — e.g. 'ida' for Amelia Fenmore (IDA — Interior Design Academy). Used to load the correct expert_profile and the correct Tier 4 forbidden-word view at Steps 0B and 0C.
Tier 4 forbidden words (dynamic)Loaded live from the Supabase view active_launch_learnings_for_<expert>, section = 'forbidden'. These are expert-specific and campaign-specific terms that ad-autopsy wrote after analysing recent winner/loser patterns. They sit on top of Tiers 1–3. The skill HALTs if this view is unreachable — running with an incomplete forbidden list is not acceptable.
Mechanism reveal levelTEASER, PARTIAL REVEAL, or OVER-REVEAL — set by the operator at concept-card approval. Governs how strictly Step 6 enforces the mechanism-protection rules. TEASER is the default for Pioneer mode.

QA Report — the output artifact

Returned by scripter-polish after every run. One report per script.
FieldWhat it means
forbidden_word_countTotal count of forbidden words found across Tiers 1, 1B, 2, 3, 3B, and 4. Zero is required for a passing verdict. For each hit: the word, the tier, the exact quote from the script, and the suggested replacement.
forbidden_pattern_countTotal count of AI patterns found across patterns P1–P18. Zero is required. For each hit: pattern ID, the exact quote, and the required fix. P2 (Binary Contrast) allows a maximum of 1 per script — natural speech can occasionally use this construction; more than 1 is an AI signal.
em_dash_checkCount of typographic em-dashes (—) found in guru spoken lines. The deterministic pattern scan checks for these as part of STEP 1. Pass = zero em-dashes in spoken dialogue. This is the check that caught 4 violations in sw-tc001 and 6 in sw-tc005 when the construction log self-certified clean.
numeral_checkVerification that all numbers in spoken guru lines are written as numerals, not words. Pass = zero spelled-out quantities. The eval found "four days a week" and "Twenty years of experience" as violations in sw-tc005 — a script that used numerals for equivalent counts elsewhere.
structural_checkPass/fail summary for Steps 2–5 combined: symmetry count (max 1), literary verb count (0), copula-avoidance count (0), CTA structure (all 5 required elements present), internal dialogue count (4–6), specific numbers (3+), specific timeframes (3+), sustainability language (1+), connected sentence ratio (~60%), conversational markers (3+), question tags (1–2), redundancies (0), unnecessary sentences (0).
format_adherenceWord count per section and total. Total target: 180–240 words. If out of range, identifies which section to adjust.
mechanism_reveal_complianceStep 6 result. At TEASER level: zero element names, zero step counts, zero sequence language (no "First… Second… Third", no "3 things", no "in sequence", no "Step 1/2/3"). Mechanism-specific word count check: if "order", "sequence", "step(s)", "system(s)" plus any named elements total more than 3, flagged for revision. The eval's hg-warm A9 finding (where Hook 4 named 3 steps in sequence and self-certified "TEASER level") confirms why this check cannot be a self-cert.
spb_checkSocial Proof Bridge (SPB) verification (Step 7). Mandatory in all formats. Location: Section 6 (Training Intro), 40–60 words. All 4 required elements must be present: (1) parallel journey ("I was in [name]'s shoes" or equivalent), (2) specific struggle with a number (dollar amount or time wasted), (3) brief "how I figured it out" (5–10 words), (4) social proof number with qualified audience named.
verdictBinary: PRODUCTION READY (18/18 checks passed) · MINOR REVISIONS (16–17 passed) · MAJOR REVISIONS (fewer than 16 passed). No partial credit. No subjective assessment. Every FAIL must be fixed and the full scorecard re-run before the script is released.
agent_run_idThe Supabase agent_run row ID for this polish run. Stamped on every output row so the full run — inputs, findings, model calls, cost — can be traced back from any downstream use of the QA report.

Final polished script

Returned alongside the QA report after Step 10 (fix application and re-run)
FieldWhat it means
metadata blockFormat, runtime estimate, word count, polish status (PRODUCTION READY / MINOR REVISIONS / MAJOR REVISIONS).
Scenes 1–7Hook, Transition, Struggle, Turning Point, Insight, Training + Social Proof Bridge, Call to Action — each with stage directions and guru dialogue. All forbidden words and patterns replaced. Em-dashes removed from spoken lines. Numbers in numerals.
production notesFormat notes, B-roll needs, pacing. These are preserved from ad-scripter-write output — scripter-polish does not rewrite them.
verification block18/18 scorecard, word count, forbidden words = 0, patterns = 0, SPB complete. Required before the script passes to /ad-log.

03 Live output example real findings representative wrapper

Caption: The QA report wrapper below is representative — scripter-polish was not run as its own arm in the 2026-06-10 depth eval. The forbidden-word and em-dash findings are real: lifted verbatim from the eval's assertion grading of sw-tc001 (Skill arm A) in REPORT.md §3. The numeral finding is from sw-tc005 (Skill arm B), attributed separately. The 2026-06-10 eval found zero forbidden-word hits across all four arms — the real signal in this eval is the em-dash catch, not forbidden words.

QA REPORT — sw-tc001 (IDA / Amelia Fenmore, Pioneer mode, 2026-06-10 eval)
AGENT RUN
  agent_name:       scripter-polish
  expert_namespace: ida
  triggered_by:     pipeline (/ad-polish)
  status:           partial → MINOR REVISIONS

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 0C  TIER 4 FORBIDDEN WORDS LOADED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Source: active_launch_learnings_for_ida, section='forbidden'
  Entries loaded: 0  (no IDA autopsy run completed yet — Tier 4 empty, expected)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 1  FORBIDDEN WORD SCAN  [b-real: eval assertion §3/sw-tc001]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Tier 1 hits:   0
  Tier 1B hits:  0
  Tier 2 hits:   0
  Tier 3 hits:   0
  Tier 3B hits:  0
  Tier 4 hits:   0
  TOTAL:         0  →  CHECK 1 / 1B: PASS

STEP 1  FORBIDDEN PATTERNS P1–P18
  Patterns found: 0
  →  CHECK 2: PASS

STEP 1  EM-DASH CHECK (spoken AMELIA lines)  [b-real: eval assertion A10 §3/sw-tc001]
  Em-dashes found in spoken lines: 4  →  CHECK: FAIL

  Hit 1: "...it's too late to start something new — I want you to hear this."
  Hit 2: "And none of it works — because none of it accounts for the one thing..."
  Hit 3: "It's built around one skill your life experience makes you better at — not worse."
  Hit 4: "James — 15 years in IT, now $8,000 a month working 4 days a week."

  NOTE: Construction log self-certified zero em-dashes. That certification was wrong.
        Deterministic character scan catches what the model's inline self-check misses.
  Fix:  Replace each em-dash with a natural pause marker or rewrite the clause.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 2  TOO POLISHED SYNDROME
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Symmetry count:        1  →  CHECK 3: PASS  (max 1)
  Literary verbs:        0  →  CHECK 4: PASS
  Copula constructions:  0  →  CHECK 4B: PASS
  CTA structure (5 required elements present): YES  →  CHECK 5: PASS

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 3  REQUIRED ELEMENT COUNTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Internal dialogue (target 4–6):    5  →  CHECK 6: PASS
  Specific numbers (min 3):          6  →  CHECK 7: PASS
  Specific timeframes (min 3):       4  →  CHECK 8: PASS
  Sustainability language (min 1):   1  →  CHECK 9: PASS

STEP 4  SENTENCE FLOW
  Connected sentences (~60%):  62%   →  CHECK 10: PASS
  Conversational markers (3+):  4    →  CHECK 11: PASS
  Question tags (1–2):          1    →  CHECK 12: PASS

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 5  ECONOMY OF LANGUAGE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Redundancies:          0  →  CHECK 13: PASS
  Unnecessary sentences: 0  →  CHECK 14: PASS

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 6  MECHANISM-REVEAL PROTECTION  (reveal level: TEASER)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Mechanism-specific word count: 2 ("approach" x2)
  Element names present: 0
  Step counts or sequence language: 0
  TEASER threshold (max 3): within limit
  →  CHECK 15: PASS

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 7  SOCIAL PROOF BRIDGE (SPB) VERIFICATION
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Location: Section 6 (Training Intro)  ✓
  Word count: 47 words  ✓  (target 40–60)
  (1) Parallel journey present: YES
  (2) Specific struggle + number present: YES  ("$8,000 a month")
  (3) How figured it out (5–10 words): YES
  (4) Social proof number + qualified audience: YES  ("3 designers")
  →  CHECK 16: PASS

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 8  WORD COUNT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Hook: 28 | Transition: 18 | Struggle: 35 | Turning Point: 32
  Insight: 28 | Training+SPB: 47 | CTA: 28
  TOTAL: 216 words  (target 180–240)  →  WORD COUNT: PASS

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 9  FINAL SCORECARD
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Check  1   Forbidden Words (Tier 1)         0 found     PASS
  Check  1B  Forbidden Words (Tier 1B Ext.)   0 found     PASS
  Check  2   Forbidden Patterns (P1–P18)      0 found     PASS
  Check  3   Symmetry                         1 found     PASS
  Check  4   Literary Verbs                   0 found     PASS
  Check  4B  Copula Avoidance                 0 found     PASS
  Check  5   CTA Structure                    5/5 present PASS
  Check  6   Internal Dialogue                5 found     PASS
  Check  7   Specific Numbers                 6 found     PASS
  Check  8   Timeframes                       4 found     PASS
  Check  9   Sustainability Language          1 found     PASS
  Check 10   Connected Sentences              62%         PASS
  Check 11   Conversational Markers           4 found     PASS
  Check 12   Question Tags                    1 found     PASS
  Check 13   Redundancies                     0           PASS
  Check 14   Unnecessary Sentences            0           PASS
  Check 15   Mechanism Protection (TEASER)    no viol.    PASS
  Check 16   Social Proof Bridge              4/4 elem.   PASS
  Word Count                                  216 words   PASS

  SCORE: 17/18 (em-dash check = FAIL, not yet a standalone scorecard check —
         tracked via STEP 1 pattern scan; see improvement queue)

  VERDICT: MINOR REVISIONS
  Required: remove 4 em-dashes from AMELIA spoken lines, re-run scorecard.
  Note: eval also flagged missing CTA phrase "free training" (assertion A6) and
        absent Direct Truth Bridge "Here's the truth" / "Honestly" (VF2).
        Both are ad-scripter-write improvement items, not scripter-polish fails.

AGENT RUN CLOSED  status: partial  status_detail: em-dash violations found; fixes required before re-run
How to read it: Each step runs in order. The first thing that fails stops the script from advancing — no partial approvals. The key story in this report is the em-dash section: the construction log said clean; the deterministic character scan said four violations. Those are the exact lines from the real sw-tc001 Skill arm output (assertion A10, REPORT.md §3). Everything after Step 1 shows what a clean scan looks like so you can see the contrast. The final verdict column maps 1-to-1 to the 18-check scorecard in the skill definition. Numeral note: The numeral check (sw-tc005, Skill arm B) found "four days a week" and "Twenty years of experience" spelled out in the same script that used numerals for equivalent counts. That finding belongs to sw-tc005/S12, not sw-tc001 — it is a separate script, attributed separately here to avoid confusion.

04 Glossary

Every abbreviation spelled out in full. Every term grounded in context.

TermIn full / what it means
Tier 1AI Giveaway Words (Tier 1 of the forbidden-word list) — Words that sound like machine-generated copy: "journey", "navigate", "embark", "delve", "dive", "unleash", "unlock", "leverage", "utilize", "elevate", "harness", "realm", "fascinating", "profound", "groundbreaking", "revolutionary", "innovative", "disruptive", "insights", "tapestry", "craft" (as verb), "blueprint", "paradigm", "unprecedented", "beacon". Zero allowed in any script.
Tier 1BExtended AI Vocabulary (Tier 1B of the forbidden-word list) — A second layer of AI giveaways, shared with the copy-humanizer skill: "garner", "interplay", "intricacies", "landscape" (abstract), "pivotal", "showcase" (verb), "underscore" (verb), "testament", "enduring", "vibrant", "rich" (figurative), "nestled", "renowned", "breathtaking", "align with", "fostering", "enhance" (generic filler), "valuable" (generic filler). Zero allowed.
Tier 2Formal or Literary Words (Tier 2 of the forbidden-word list) — Words that feel written, not spoken: "moreover", "furthermore", "consequently", "ultimately", "essentially", "optimize", "implement", "seamlessly", "effortlessly", "streamline", "robust", "comprehensive", "cutting-edge", "state-of-the-art", "empower". Zero allowed.
Tier 3 / 3BToo-Polished Words and AI Transitional Phrases (Tiers 3 and 3B) — Tier 3 are words that sound like a copywriter, not a person: "resigning", "dictate", "pursuing", "contemplating", "endeavoring", "commencing", "capability", "vision" (abstract). Tier 3B are the AI transitional clichés: "and everything changed", "everything changed", "changed everything", "that changed everything", "then everything shifted", "and that's when everything clicked". Fix: replace with the specific consequence — "My income doubled in 6 months" not "everything changed." Zero allowed.
Tier 4Dynamic Expert-Specific Forbidden Words (Tier 4) — Loaded live from the Supabase view active_launch_learnings_for_<expert>, section = 'forbidden', before every scan. These are terms that ad-autopsy identified as problematic in recent winning/losing ads for the specific expert (e.g. IDA — Interior Design Academy). They sit on top of the static Tier 1–3 lists. Tier 4 is empty by default until ad-autopsy runs and writes entries. scripter-polish HALTs if the view is unreachable — running with an incomplete list is not acceptable.
P1–P18Forbidden Patterns P1 through P18 — 18 structural AI-writing patterns detected by regex in Step 1. Examples: P1 (Through-Not Binary: "through [X], not [Y]"), P2 (Binary Contrast: "It wasn't [X]. It was [Y]."), P4 (Triple Repetition: same structure × 3 with periods), P6 (Imagine Opener), P14 (Most People generalisations), P18 (Numbered Formula Hook: "[N] steps/ways/secrets to [outcome]"). Max for P2 is 1 per script; all others are zero-tolerance.
Em-dashEm-dash (—) — The long typographic dash character. In spoken ad scripts, an em-dash in a guru dialogue line is an AI writing pattern — natural speech does not "write" in dashes. The deterministic character scan in Step 1 flags all em-dashes in AMELIA or guru spoken lines. The 2026-06-10 eval found 4 in sw-tc001 and 6 in sw-tc005, both self-certified as zero by the writing skill's own construction log.
TEASERTEASER (Mechanism-Reveal Level) — The default reveal setting for Pioneer mode scripts. At TEASER level, the ad is allowed to say there is a method and that it works — but no element names, no step counts, and no sequence language. The viewer cannot reconstruct the method from the ad alone. Forbidden at TEASER level: "3 things you learn in sequence", "First you do X, then Y", "Phase 1/2/3", "Step 1/2/3". Allowed: "the approach", "what was missing", "what I discovered", "the method", "something nobody showed me".
PARTIAL REVEALPARTIAL REVEAL (Mechanism-Reveal Level) — Names one concrete element without naming the sequence, the step count, or the other elements. Example: "There's one internal system that has to be addressed first" (names category, not the system). Used as a testing variable alongside TEASER scripts — the idea is "if step 1 is this smart, I need the rest." Max 2–3 per batch.
OVER-REVEALOVER-REVEAL (Mechanism-Reveal Level) — Names 2 or more elements and their order, or names the step count. Example: "6-step drainage protocol — first the liver, then the kidneys, then the bowels." Forbidden in new scripts. Existing filmed over-reveals should test in-market to generate comparison data against new TEASER/PARTIAL scripts — do not replicate the pattern.
SPBSocial Proof Bridge (SPB) — A mandatory 40–60 word block in Section 6 (Training Intro) of every script. Must contain all 4 elements: (1) a parallel journey statement, (2) a specific struggle anchored to a number, (3) a brief "how I figured it out" (5–10 words), and (4) a social proof number with a named qualified audience. scripter-polish Step 7 checks all 4 elements are present. Skipping the SPB is never allowed in any format.
PT / HPrimary Text (PT) and Headlines (H) — The Meta ad copy fields that appear in the feed alongside the video. In the IDA (Interior Design Academy) creative system, PT and Headlines are soft wrappers — compliant, low-key, never written as sales letters. scripter-polish does not run the full 18-check scan on PT/H copy — that is ad-compliance territory.
IDAInterior Design Academy (IDA) — The expert identity for Amelia Fenmore, an interior-design business coach. The expert namespace in all IDA Supabase rows is 'ida'. Cold Meta ads drive TOF (Top of Funnel — cold traffic, people who have never seen Amelia's content before) audiences to a free training, which converts to booked sales calls. IDA is the primary expert for which scripter-polish currently runs in production.
Voice BookVoice Book (Expert Voice Book) — The Layer 2 expert profile artifact, built by ad-voice-profile and stored as the current expert_profile row in Supabase. scripter-polish reads the Voice Book at Step 0B to enable voice fidelity checks — including the copula avoidance exception ("if the expert literally uses this phrasing in the Voice Book"). The old name "Layer 3 calibration" or "L3 calibration" is deprecated — do not use it.
CTACall to Action (CTA) — Section 7 of every ad script. scripter-polish checks that all 5 required CTA elements are present: 3 or more varied benefit sentences (each with a different opener), a qualifier ("This is for you if…"), a reassurance ("Even if…" / "Without…"), an empowering bridge ("That's what I want to help you with"), and a warm close ("Click below and I'll see you there").
SupabaseSupabase (database platform) — The PostgreSQL-based database that hosts the SKL ad creative system data layer. scripter-polish reads from Supabase at Steps 0A (open agent_run), 0B (read expert_profile), and 0C (load Tier 4 forbidden words). The skill writes to Supabase to close the agent_run row at the end of every run. Agents read Supabase views only — never Fibery, Drive, or repo files at runtime.
agent_runagent_run (Supabase audit table) — The cross-cutting table that records every agent run. scripter-polish opens an agent_run row before any scan (Step 0A) and closes it at the end with status = success / partial / failed / halted and a status_detail note. The run ID is stamped on every output row. HALT if Supabase is unreachable at startup — never treat an infrastructure failure as an empty result.
HermesHermes (autonomous background agent layer) — The always-on agent system that maintains the Supabase data layer. Curator-Hermes, Voice-Hermes, Sales-Hermes, and Scout-Hermes run continuously or daily to keep the swipe library, competitor intelligence, and performance views current. scripter-polish does not trigger Hermes — it reads from Hermes-maintained views.
FiberyFibery (project management and creative entity tracker) — The system of record for all IDA creative entities, their production status, and their Meta performance data. Hermes agents pull Fibery data into Supabase views. scripter-polish never reads Fibery directly at runtime — it reads Supabase views only.
OpenRouterOpenRouter (model routing proxy) — The API gateway through which all language model calls in the system are routed. Provides unified billing, model switching, and per-call logs (model ID, provider, cost) that feed the agent_run audit trail. All scripter-polish model calls (Haiku 4.5, Sonnet 4.6, Opus 4.8) go through OpenRouter.
HITLHuman in the Loop (HITL) — The operator approval gate at every pipeline stage. In the ad creative pipeline (V1), no skill executes autonomously — the operator approves at every gate. scripter-polish is the last automated gate before the operator approves the final script for /ad-log and /ad-brief.
CPBCCost Per Booked Call (CPBC) — How much money was spent on Meta ads to get one person to book a sales call with Amelia Fenmore. The primary success metric for IDA cold traffic. Used by ad-autopsy when deciding which patterns to write to the Tier 4 forbidden-word view that scripter-polish reads at Step 0C.