audit-marketing
Installation
SKILL.md
Audit-Marketing — Is This Slop? (the pre-ship verdict)
The on-demand + whole-tree front door to the marketing-antipattern registry. Sits on the deterministic floor (forsvn-slop/scan.ts, S2) and the shared registry (registry/antipatterns.mjs, S1) and wires them into the two human-facing verbs /forsvn audit and /forsvn polish. Routing in routing.yaml.
Core: would a sharp marketer say this reads like AI — and which named tell proves it?
This is the deliberate path. The always-on annotate-only nudge on every save is the S3 hook (hooks/post-artifact-slop-scan.mjs), a separate seam.
Critical Gates — load first
- Detect ≠ fix (D-25).
auditNEVER edits the audited artifact.polishedits but landsdecision_state: pending— there is NO accept-tool on the agent channel; only the human approves on/forsvn:review. Never writedecision_state: approved; never append to.forsvn/learning/verdicts.tsv. - The scanner is the only detector. Every finding's id/severity/tier/fixSkill comes from
scan.ts --json(which reads the S1 registry). Never invent a rule id; never hand-judge severity. Vocabulary ismkt-*ids +block | warn | nit— neverrule:copy-*/warning|advisory. - Noise-filter before report-write. Every finding passes
noise-filter.md: Layer-1 real-vs-fake (drop FPs), then Layer-2 Accepted / Rejected / Deferred. Noise gate: ≥5 findings & 0block→ collapse nits to one Rejected line. - The re-verify gate is conservative-by-construction (polish). A fix is accepted ONLY if the severity-weighted score strictly improves AND the firing rule is gone AND no new finding appears AND the Post-Humanize Regression Check passes (entities/URLs/numbers/prices/dates/claims/CTA unchanged). Any doubt → roll back the section, re-state Deferred. Authority is asymmetric: one confident wrong fix that weakens a claim costs far more than a missed tell. Max 2 rounds.
- Block-severity ≠ denylist. Ten rules are
block(top of the report); only the tiny D-26 denylist —mkt-claim-fabricated-precision+ the locked-brand-token/no-gradient analog — escalates/polishto BLOCKED. The other eight block rules are annotate-only.
Sub-commands
First word selects the flow (Impeccable sub-command model); no arg → audit the whole tree. Sub-commands don't re-invoke the parent.