Audit marketing
Metricless front door to the FORSVN slop detector — judge marketing copy before it ships. `audit` scans an artifact or the whole tree for AI-slop antipatterns → a severity-grouped 'reads like AI?' report with named rule IDs and a routed fix per finding. `polish` chains audit → fixers → a conservative re-verify gate that reverts any fix weakening a claim/number/CTA. Detect ≠ fix; human-owned. Not for code review (review-work), new copy (write-copy), or metrics/CRO (evaluate-*).From its SKILL.md
npx -y skills add hungv47/meta-skills --skill audit-marketingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 14 stars14 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.3 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
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.
| First word | Flow | Loads |
|---|---|---|
audit (or none) | one-shot, metricless scan → severity-grouped report. NEVER fixes. | references/audit-flow.md |
polish | audit → dispatch fixers (Route C) → re-verify gate → land decision_state: pending. Max 2 rounds. | references/polish-flow.md |
Category→fixer routing: references/fix-routing.md. The re-verify exit gate: references/reverify-gate.md. Mode + shared protocols: references/_shared/mode-resolver.md, references/_shared/quality-feedback-protocol.md.
Before Starting
- Mode (
references/_shared/mode-resolver.md): defaultstandard. A single named artifact →fastis fine; a whole-treepolish→ keepstandard(the re-verify gate is non-negotiable regardless of mode). - Confirm the scanner exists:
forsvn-slop/scan.ts. If absent, this skill cannot run a real scan — reportNEEDS_CONTEXTnaming S1/S2 as the missing dependency. - The advisory LLM-critic tier (S6) is optional. If its agent isn't present, deterministic-only is a complete, authoritative run — the report notes
advisory tier not run.
Artifact Contract
- Path:
docs/forsvn/artifacts/meta/records/[YYYY-MM-DD]-audit-marketing-<slug>.md(dated, immutable per-run) - Lifecycle:
snapshot— accumulates, never overwritten - Frontmatter + body:
references/report-template.md— carriesskill,id,type: record,keywords,stack: meta,review_surface,verb,rounds,score_before/score_after,verdict,provenance. Score/rounds live HERE, never inverdicts.tsv. Passesvalidate-artifacts --strict.
Anti-Patterns
- Auto-fixing on the agent channel, or writing
decision_state: approved/ averdicts.tsvrow — forbidden (human-owned review). - Treating a clean scan as proof of quality, or any single antipattern instance as auto-fail — only the explicit
blockrules + the denylist are zero-tolerance; everything else is threshold-gated in the registry, not here. - Flagging a quoted testimonial, a regulated-industry legal disclaimer, or an intentional bad-example block — the FP guards exempt them; the report must not.
- Confidently auto-fixing a cross-artifact rule (
mkt-cta-bait-and-switch,mkt-persuasion-no-social-proof) when the paired artifact isn't in scope → route to a human-review note instead. - Looping past 2 rounds — a draft that won't clean in 2 is flagged for the operator as a possible structural problem, not looped.
Completion Status
- DONE —
audit: zero findings across all targets.polish: all Accepted findings fixed + verified. - DONE_WITH_CONCERNS —
audit: findings reported (the normal case — audit never fixes).polish: some findings rolled back to Deferred, or the 2-round cap hit. - BLOCKED —
polish: a denylist finding is unresolved after 2 rounds. (auditnever blocks a write — it reports.) - NEEDS_CONTEXT — the scanner (S1/S2) isn't present, or the named target can't be resolved.
What ships with it: 10 files
62.5 KB alongside SKILL.md, 1 of them executable
references/
- audit-flow.md4.0 KB
- fix-routing.md3.0 KB
- noise-filter.md14.7 KB
- polish-flow.md3.9 KB
- report-template.md4.8 KB
- reverify-gate.md3.3 KB
- _shared/mode-resolver.md11.0 KB
- _shared/quality-feedback-protocol.md8.9 KB
scripts/
- log-critic-override.tsruns6.0 KB
- routing.yaml2.9 KB