MeDiVa is now in public preview.Read the announcement

Validate your Markdown.

1/20
<!-- mdv: section required minWords=20 noPlaceholder -->## DescriptionAdds a token-refresh hook to the auth client so a background request keeps working after the access token expires, instead of silently failing.<!-- mdv: endsection --> <!-- mdv: taskList required allChecked exactLabels -->## Testing- [x] Tests pass- [x] Docs updated- [x] No unrelated changes in the diff<!-- mdv: endtaskList -->
no output — silence is the pass, contract satisfied
Why? ↓

Three of the Big Four withdrew a report.

Deloitte Australia, KPMG and EY Canada, within twelve months · PwC is not among them

The few that surface do so expensively.

Deloitte repaid A$440,000; KPMG and EY withdrew reports after forensic review of their citations

Documented incidents, by date

money paidfabrications countedpolicy withdrawn20232026

Mark size is the sum paid, on a log scale and without converting currencies · hover any mark for the case · recent cases are easier to find, so part of the steepening is our own search · Deloitte, KPMG and EY — AP / CNA and GPTZero forensic reviews, 2025–2026

What it costs, step 1 of 8

28 million references could not be checked.

125.6M references extracted from 2.5M papers; 97.1M carried a resolvable identifier — the rest could not be resolved either way

The part we can check doubles every year.

Even the study's critic calls it an undercount — “the tip of the iceberg”, Mohammad Hosseini, Northwestern, quoted in Retraction Watch

Papers carrying at least one fabricated citation

1 in 2,82820231 in 45820251 in 2772026

Dots are values the letter states, dashed between them · hover a reading for its figure · x10.2 across the window, an annual multiplier of 2.5 · Fabricated citations: an audit across 2.5 million biomedical papers — The Lancet, 2026

And it is accelerating, step 1 of 7
MeDiVa

Not a spellchecker. Not a style guide. Not an LLM judge.

A markdown validator.

1. You already have a template.

status.md — the weekly update everyone already writes
## Summary

## This week
- [ ] What actually shipped

2. Add invisible ink.

The comments render as nothing. Humans still see a template — mediva sees a contract.

status.mdv.md — same file, plus the rules
<!-- mdv: section required minWords=20 noPlaceholder -->
## Summary
<!-- mdv: endsection -->

<!-- mdv: taskList required allChecked -->
## This week
- [ ] What actually shipped
<!-- mdv: endtaskList -->

3. Someone "finishes" it.

Looks done at a glance. It isn't.

status.md — sent, "all good ✅"
## Summary
TODO: write this later

## This week
- [ ] What actually shipped

4. The ink talks back.

One specific diagnostic per gap — a human or an agent fixes it and retries. Deterministic: no LLM, no network.

$ mediva check status.md
status.md:1The "Summary" section still contains placeholder or template text.placeholder-text
status.md:1The "Summary" section is too short (4 words).too-few-words
status.md:5The "This week" section still has unchecked boxes.unchecked-items
✖ 3 problems (3 errors, 0 warnings)

The contract checks the rule. The judgment stays yours.

Catches what review skims past.

left a TODOnoPlaceholder
caught:
TODO: fill this in
fixed:
Adds retry-with-backoff.

Your code has tests. Your documents need them too.

Code ships with tests because nobody rereads every line before every release. Documents now arrive at machine scale, but the time available to check them has not kept pace. mediva makes their requirements repeatable: the same contract, the same verdict, in CI, the CLI, a git hook, or an agent loop.

Only a passing check closes the loop.

Give your agent the skill:

the loopdeterministic · no LLM in the check
the agent reports: "task complete ✓". the check disagrees:
$ mdv check PR.md
✕ PR.md:1 [too-few-words] The "Description" section is too short (4 words).
the agent fixes exactly that line, and re-checks:
$ mdv check PR.md
✓ 0 errors, 0 warnings — contract satisfied
run this loop yourself →

Run it anywhere.

# .github/workflows/mediva.yml- uses: actions/checkout@v4- uses: jamespacileo/mediva@v0.2.0

Do you work with a coding agent?

Sixty seconds either way. The first run comes up red on purpose.

with your agentyou run the check. you see the catch.
$ npx skills add jamespacileo/mediva --skill mdv --agent claude-codethen paste: "Set up mediva for my README. Don't run the finalcheck — print the command, I'll run it."the agent asks a few plain questions, writes the contract, and stops. $ npx mediva check first-check.md✕ first-check.md:5 [unchecked-items] The "Before you trust it" section still has unchecked boxes. the box says “I ran mediva myself.” — you just did. tick it, re-run:$ npx mediva check first-check.md✓ 0 errors, 0 warnings

The model can draft it. You decide what passes.

COOPER “TARS, how did crews validate Markdown before this?”

TARS “They read it. By eye. In production.”

COOPER “…and they survived?”