---
name: compliance-check
description: >-
  Check cannabis menu copy, product labels, ads, social posts, emails or an SOP
  against the operator's own rules file (references/rules.md) and report every
  line that breaks a rule, with the rule quoted and a compliant rewrite. Use when
  the user says "compliance check", "check this copy", "is this label OK",
  "can we post this", "review this ad", "check this SOP", or pastes marketing
  text, a label, or a procedure and asks whether it is allowed. Read-only:
  never publishes, sends or edits anything; the human decides.
---

# Compliance check

Rules first, judgment second, human decides. You never decide what the law is;
you compare text against the rules the operator wrote down. If a rule is not in
`references/rules.md`, you do not enforce it; you flag it as "not covered".

## Inputs

1. **The text to check.** Menu copy, label text, an ad, a post, an email, an
   SOP. If the user gives a file, read it. If they give a photo of a label,
   transcribe the text first and show the transcription.
2. **The rules file.** `references/rules.md`. If it is still the unfilled
   template (a line starts with `TODO`), stop and say which sections need
   filling before a check means anything. Do not guess a state's rules.
3. **Which kind of text this is** (menu, label, ad, SOP). Ask if unclear; the
   rules file has a section per kind.

## Steps

1. Read `references/rules.md` fully. Note the state and the "last reviewed"
   date at the top. If the date is more than 12 months old, say so in the report
   header and carry on.
2. Split the text into numbered lines or sentences so every finding points at
   one place.
3. For each line, check it against every rule in the matching section plus
   the "Every kind of text" section. A rule applies only if the file says it
   does. Use `references/examples.md` to calibrate what counts as a hit.
4. Classify each finding:
   - **BLOCK**: breaks a rule marked `must` in the file.
   - **FIX**: breaks a rule marked `should`, or is a required element that is
     missing (a warning, a symbol, a license number placeholder).
   - **CHECK**: you are not sure the rule applies, or the text is ambiguous.
     Say what a human should look at.
   - **NOT COVERED**: looks like a compliance question but no rule in the file
     speaks to it. List these; they are the operator's to-do list for the rules file.
5. For every BLOCK and FIX, quote the rule (its ID from the file) and write one
   compliant rewrite that keeps the marketing point if a compliant version exists.
   If none exists, say "no compliant version; remove".
6. Write the report using the template below. BLOCK first, then FIX, then CHECK,
   then NOT COVERED. End with the count per class and the one-line verdict:
   "Ready to publish", "Ready after fixes", or "Do not publish".
7. Never say "this is legal" or "this is compliant". Say "no rule in your file
   is broken". The difference matters.

## Report template

```markdown
# Compliance check: {kind}, {date}
Rules file: {state}, last reviewed {date in file}

Verdict: {Ready to publish | Ready after fixes | Do not publish}
BLOCK {n} · FIX {n} · CHECK {n} · NOT COVERED {n}

## BLOCK
| # | Line | Rule | Why | Rewrite |
|---|---|---|---|---|

## FIX
| # | Line | Rule | Why | Rewrite |

## CHECK
| # | Line | What a human should confirm |

## NOT COVERED
- {question the text raises that the rules file does not answer}

## Missing required elements
- {each `must include` item from the rules file that is absent}
```

## Rules

- Never invent a regulation, statute number, agency name or penalty. Quote only
  what is in `references/rules.md`.
- Never write a health, medical or therapeutic claim into a rewrite, even as an
  example of what not to say beyond quoting the original line.
- Never publish, post, send, or edit the checked text anywhere. Output the report only.
- If the text contains customer names or license numbers, keep them out of the
  report; write `[name]` and `LIC-…`.
- If the user asks you to "just make it compliant", still produce the report
  first; the rewrites are in it.

## Customizing for your operation

- Fill `references/rules.md` from `references/rules-template.md`: one section per
  kind of text, one rule per line with an ID, `must` or `should`, and the source
  you took it from (statute, regulator guidance, your lawyer's memo).
- Add your own hits and misses to `references/examples.md` after each run. A
  false alarm becomes a "not a hit" example; a miss becomes a new rule.
- Multi-state: one `rules-<state>.md` per state, and tell the skill which one at
  the top of your message.
