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

  1. Detect ≠ fix (D-25). audit NEVER edits the audited artifact. polish edits but lands decision_state: pending — there is NO accept-tool on the agent channel; only the human approves on /forsvn:review. Never write decision_state: approved; never append to .forsvn/learning/verdicts.tsv.
  2. 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 is mkt-* ids + block | warn | nit — never rule:copy-* / warning|advisory.
  3. 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 & 0 block → collapse nits to one Rejected line.
  4. 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.
  5. 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 /polish to 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.

Installs
3
GitHub Stars
12
First Seen
3 days ago
audit-marketing — hungv47/meta-skills