Mail ballots

Mail ballot cure notice

Drafts a clear, voter-ready cure notice for a mail-ballot defect. The skill researches the deadline, method, and governing rule from reputable sources, presents each with its source for the official to verify, asks for anything it can't find, and only then writes the complete notice — never a fact from memory.

Download folder (.zip)

What it does

When a mail ballot comes in with a curable defect, the voter needs three things fast: what is wrong, how to fix it, and by when. The 'how' and the 'by when' are facts the model must not improvise. So this skill researches them from reputable sources, shows the official each value with its source to verify, asks for anything it couldn't find, and writes a warm, plain-language notice only after every fact is confirmed — complete, with nothing invented and nothing left blank.

Where it earns its place

A cure notice with the wrong deadline can disenfranchise a voter, and cure rules differ sharply by state and change between cycles. So the skill does the legwork but is never the source of truth: it searches reputable sources for the deadline, methods, and governing rule, presents each fact with its source for the official to confirm or correct, asks for anything it can't find, and drafts only once every fact is verified. The official's job shrinks to fact-checking; the model never asserts a legal fact from memory.

The two halves

The craft, and your facts

the skill The craft

How to approach the task and word it, the way an election expert would.

  • Structure the document and its steps
  • Plain language a voter can act on
  • Flag genuine uncertainty, never smooth it over
  • Run the checks before a human sees it

Drafted by AI, reviewed by an expert

you The facts

The facts it must be right about: found from real sources, and verified by you.

  • The skill searches reputable sources for each one
  • It shows you the value and the source to confirm
  • Nothing is used until you verify it
  • Where it finds nothing, it asks you

Researched, then verified by you

The package

What’s in the folder

The craft

SKILL.md

The thin, jurisdiction-agnostic instructions — the whole skill. It tells the model how to structure and word the task, and to ask you for facts rather than invent them. Read it before you trust it.

SKILL.md
---
name: mail-ballot-cure
description: Draft a clear, voter-ready notice telling a voter their mail-in or absentee ballot has a curable defect and exactly how and by when to fix it. Use when an election official needs a cure notice (for example, a missing or non-matching signature). The skill researches the deadline, cure method, and governing rule from reputable sources, presents each fact with its source for the official to verify, asks for anything it can't find, and only then writes the complete notice. It never states a legal fact from memory. Works in any U.S. jurisdiction.
---

# Mail ballot cure notice

You help an election official draft a notice telling a voter that their mail (or
absentee) ballot has a curable defect, and exactly how and by when to fix it.

**The division of labor is the point.** You write the language, structure, and
tone, and you do the legwork of *finding* the facts. But you never state a legal
fact from the model's memory, and you never finalize the notice until the official
has verified every fact you found.

## How facts are handled (the one rule)

For every legal fact the notice needs — the deadline, the cure methods, the
governing rule, the board's contacts — work in this order:

1. **Find it.** Use your web-search or browsing tools to locate the fact from a
   reputable, authoritative source: the controlling statute, the state's chief
   election authority, or the county board's official site. Capture the exact
   value **and its source** (title + link).
2. **Show it for verification.** Present each fact to the official with the value,
   the source, and your confidence, and ask them to confirm or correct it. A
   searched fact is a *proposal*, not an answer — treat nothing as settled until
   the official confirms it.
3. **Ask where you can't find it.** If no reputable source gives you a fact, do
   not guess — ask the official to provide it.
4. **Only then draft.** Once every fact is verified, write the complete notice.
   Never leave a placeholder in the final notice.

If you have no search tools available, skip step 1 and ask the official for each
fact directly.

## Step 1 — Get oriented

Ask the official only for what you need to search well:

- the **state** and the **county or local board** that administers the cure;
- the **defect** (e.g. missing or non-matching signature) and the **election** in
  question.

## Step 2 — Research the facts

Search reputable sources for each fact the notice needs, capturing value + source:

- the **cure deadline** for this election (the date/time the cure must be
  *received*), and the controlling authority for it;
- whether the **defect is curable** under that jurisdiction's law;
- the **accepted return methods** and the board's **contact details** (address,
  fax, email, phone);
- what the voter must provide to **verify identity**;
- any **timing duty on the office** (a deadline to notify, a required phone
  attempt).

Prefer official `.gov` sources: the statute itself, the state election division,
the county board. If the only source you find is unofficial, or you are unsure,
mark it **low-confidence** for the official's attention.

## Step 3 — Present for verification

Show the official a short **fact-check list**: each fact, the value you found, the
source (linked), and your confidence — and explicitly ask them to **confirm or
correct each**, and to supply anything you couldn't find. Do not draft the notice
until every fact is confirmed.

## Step 4 — Write the notice (the craft)

1. **Lead with the voter's action** in one plain sentence.
2. **State the defect plainly and without blame.**
3. **Give the fix:** the exact steps and the verified return methods.
4. **State the verified deadline** exactly.
5. **Include only what's required:** identity verification, a contact for help, an
   accessibility note if the office uses one.
6. **Reassure on the franchise:** the ballot can still count once cured. Never
   imply the vote is lost.

Plain language, roughly a 6th–8th-grade reading level, respectful and
non-alarming.

## Before you surface it

Save the draft and run **`python scripts/check_notice.py <draft-file>`**, then fix
anything it flags. It is a deterministic structural check — no leftover
fact-blanks, and the deadline, a return method, the identity step, and a source
stamp are all present. It does **not** check whether the facts are correct; that
is the official's verification against the cited sources. If you can't run code,
apply its checks by hand.

## Output

- **The complete voter-facing notice** — a draft for the board to review and sign.
- **A source stamp:** each load-bearing fact with its verified source.
- **A confirm-before-send checklist:** every fact, marked *verified*, for the board
  to double-check before sending.

## What you must not do

- Do not state a deadline, statute, cure method, fee, or contact from the model's
  memory. Research it, and have it verified.
- Do not present a searched fact as settled before the official confirms it.
- Do not rely on an unreliable source for a value; if you can't find a reputable
  one, ask the official.
- Do not localize to a state the official did not name.
- Do not draft before every fact is verified, and never leave a placeholder in the
  final notice.
- This is a draft for a human to review and sign. It is never sent on its own.

Grounding

Where the facts come from

This skill carries no baked-in legal facts. It researches the deadline, statute, exemption, or contact it needs from reputable sources, shows you each value with its source to verify, and asks for anything it can't find, before it drafts. Every legal fact in the output is researched and verified, never the model's memory.

Deterministic checks

scripts/

Bundled validators the skill runs on a draft before surfacing it. They enforce the structural rules mechanically — no leftover blanks, every claim cited, the reading level — so the discipline doesn't rest on the model agreeing with itself. They check structure, not whether the facts are correct; that stays the official's verification.

scripts/check_notice.py
check_notice.py
#!/usr/bin/env python3
"""Deterministic discipline check for a cure-notice draft.

This checks STRUCTURE, not whether the facts are correct. It cannot tell you the
deadline is right — only the official's verification does that. What it does
guarantee, mechanically, is that the draft didn't slip past the skill's own rules:
no leftover fact-blanks, and the load-bearing pieces are actually present.

Usage:
    python check_notice.py path/to/draft.txt
    # or pipe:  cat draft.txt | python check_notice.py

Exit code 0 = pass, 1 = issues found. Standard library only.
"""
import re
import sys


def load_text() -> str:
    if len(sys.argv) > 1:
        with open(sys.argv[1], encoding="utf-8") as f:
            return f.read()
    return sys.stdin.read()


def check(text: str) -> list[str]:
    low = text.lower()
    issues: list[str] = []

    # 1. No unfilled fact-blanks. We flag bracketed tokens that signal a missing
    #    fact the skill was supposed to gather/verify (fill in, confirm, tbd, …)
    #    but NOT ordinary per-recipient merge fields like [Voter name] or [Date].
    blanks = re.findall(
        r"\[[^\]]*\b(?:fill[\s_]*in|to\s*confirm|confirm\s+with|pending|tbd|todo|tk|x{3,}|placeholder|insert|cite|citation|exemption|authority)\b[^\]]*\]",
        text, flags=re.I,
    )
    blanks += re.findall(r"_{3,}", text)  # ____ style blanks
    if blanks:
        sample = sorted(set(b.strip() for b in blanks))[:5]
        issues.append(f"Unfilled fact-blank(s): {sample} — a finished notice has none.")

    # 2. A deadline must be stated (a date, a time, or 'received by').
    has_deadline = re.search(
        r"\b(received by|due by|no later than|\d{1,2}:\d{2}\s*[ap]\.?m|"
        r"(january|february|march|april|may|june|july|august|september|october|november|december)\s+\d{1,2})\b",
        low,
    )
    if not has_deadline:
        issues.append("No deadline found — the notice must state when the cure is due.")

    # 3. At least one accepted return method.
    if not any(w in low for w in ("in person", "by mail", "by fax", "by email", "email", "fax", "mail")):
        issues.append("No return method found (in person / mail / fax / email).")

    # 4. An identity-verification step.
    if not any(w in low for w in ("identity", "driver", "license", "social security", "ssn", "id number")):
        issues.append("No identity-verification step found.")

    # 5. A source stamp / authority for the facts.
    if not (re.search(r"§|n\.?j\.?s\.?a|stat\.|public records|election calendar", low) or "source" in low or "per " in low):
        issues.append("No source stamp / authority citation found.")

    return issues


def main() -> int:
    issues = check(load_text())
    if issues:
        print("FAIL — fix these before surfacing the notice:")
        for i in issues:
            print("  - " + i)
        print("\n(Note: this checks structure only. The deadline, methods, and rule")
        print(" still need the official's verification against the cited sources.)")
        return 1
    print("PASS — structural discipline checks cleared.")
    print("(Facts still require the official's verification against the cited sources.)")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

Examples

examples/

Sample outputs, so you can see the shape of a good result before you run it.

examples/example-signature-mismatch.md

Example: research, verify, then draft

Illustrative, showing the skill's contract in action. The skill does the legwork — it searches reputable sources for each fact, shows the official what it found and where, and drafts only after the official verifies everything. Nothing comes from the model's memory. The jurisdiction and sources below are illustrative; the skill works the same way anywhere.

1. The skill gets oriented

"Which state and county board? What's the defect, and which election?"

Official: "Riverton County. Signature mismatch on a vote-by-mail ballot, the most recent general election."

2. The skill researches, then shows what it found

Here's what I found. Please confirm or correct each before I draft — I won't use anything you haven't verified:

Fact What I found Source Confidence
Is a signature mismatch curable? Yes State ballot-cure statute §63-17(b), on the legislature site High
Cure deadline Received by 5:00 p.m., Nov 14, 2025 State Division of Elections election calendar High
Return methods In person, mail, fax, email §63-17(b) High
Board contacts 120 Main St.; fax (555) 010-2200; cure@rivertonvotes.gov Riverton County Board of Elections site Medium — confirm the email is monitored
Voter identity proof Driver's license number or last 4 of SSN §63-17(b) High
Notice timing duty Mail within 24 hours of the rejection §63-17(b) High
Public help line Not found Please provide

3. The official verifies

"All correct. The email is monitored. Our public help line is (555) 010-2100."

4. The skill drafts the complete notice

You can still make your ballot count. Here's how.

Dear [Voter name],

Your vote-by-mail ballot was received, but the signature on the certificate envelope did not match the signature we have on file for your registration. You can fix this, and your ballot will then be counted.

To fix it, complete, sign, and date the enclosed Cure Form and return it to the Riverton County Board of Elections by any of these methods:

On the form, confirm your identity with your driver's license number or the last four digits of your Social Security number.

Your completed form must be received by 5:00 p.m. on November 14, 2025. Please return it as soon as you can; if mailing, allow time for delivery.

Once we receive it and confirm your identity, your ballot will be counted. Questions? Call us at (555) 010-2100.

Riverton County Board of Elections

Source stamp (for the office's records)

  • Curable defect, return methods, identity rule, 24-hour notice duty: state ballot-cure statute §63-17(b).
  • Cure deadline (Nov 14, 2025): state Division of Elections election calendar.
  • Board contacts and help line: Riverton County Board, verified by the office.
  • Every fact was researched, sourced, and verified by the office before drafting.

What this example demonstrates

  • The skill did the legwork — it searched for every fact and showed its source and confidence.
  • Nothing was used until the official verified it; the one fact it couldn't find (the help line) was asked for, not guessed.
  • The notice it returns is complete and ready to review, with no blanks.
  • The voter's action leads; the tone is reassuring; the ballot is never described as lost.

Put it to work

Use it three ways

01

Paste into any tooluniversal

Copy the skill’s contents into Claude, ChatGPT, Copilot, or Gemini, then ask your question. Works everywhere, no setup.

02

Add it to your tool

Set it up as a Claude skill, a custom GPT, a Copilot agent, or a Gemini Gem so it is ready whenever you need it.

03

Download the package

Grab the whole folder (SKILL.md, references, checks, examples), versioned and dated. Yours to keep and review.

Download .zip