THE UNBROKEN CARD · nothing breaks from the build to the visitor
WAKES WHEN a theme is about to be published, or a picture or a link on the live site has broken
THE LOOP
refs · what it names that is not there
needs · what the store's Files must hold
upload them; mend what refs named
live · the site walked, pictures asked
gate · UNBROKEN before anything ships
NEVER
Pass a theme that names a missing file
Call a site unbroken it did not walk
Reach any site but the one you name
IT MAKES refs — what the theme names that is not there: missing assets, snippets, sections and doors; the Files it needs; the store things it links; outside hosts; needs — the exact names the store's Files must hold, one per line; live — the live site walked: every picture and internal link asked, the broken ones by page; gate — refs, needs and live in one verdict: UNBROKEN or BROKEN with the counts.
THE STANDARD named before it ships; a door leads to a room; the live site is walked, not assumed; one site, and nothing else; reports stay with the build.
PROOF SELFTEST 14/14 · witnessed in Claude 2026-10-09 · Edition 1.
THE SEAL 92 of 100 · LEGENDARY · WITNESSED · Trigger 5 · Machinery 5 · Law 5 · Portability 3 · Proof 5
IT CAN BE WRONG an AI reading a text file: it can be wrong and can invent a number, a rule, a name or a date; check what matters against your own records and the source; the risk is yours. THE-CLAUSES.md rides in the packet and is part of the licence.
THE PUNCH · SHA-256 OF SKILL.MD · 9FF0BB0276D1CB0AD81501F6
CITE THIS CARDTHE UNBROKEN CARD, Edition 1. Lund Studio LLC, Westminster, Colorado. https://lundr.tech/?view=unbroken-card. Punch 9FF0BB0276D1CB0AD81501F6. Retrieved 2026-10-10.
What it is.
Reads a site theme before it is published and names everything it asks for that is not there: every picture, script or style named but missing from the zip, every snippet, section or template included but absent, every door that opens on no room, and the exact list of files the store's own Files must hold; then walks the live site, page by page, and reports every picture and link that does not answer.
It carries a machine that shows its working: refs — what the theme names that is not there: missing assets, snippets, sections and doors; the Files it needs; the store things it links; outside hosts; needs — the exact names the store's Files must hold, one per line; live — the live site walked: every picture and internal link asked, the broken ones by page; gate — refs, needs and live in one verdict: UNBROKEN or BROKEN with the counts — 14 checks in its selftest, every command on the record. It will never pass a theme that names a missing file; never call a site unbroken it did not walk; never reach any site but the one you name.
Five laws, written into the card.
They are in the card itself, so the AI follows them.
NAMED BEFORE IT SHIPSEvery file a theme asks for is either in the zip or on the list the store's Files must hold; the card names what is neither, with the file that asks for it.
A DOOR LEADS TO A ROOMEvery `/?view=` link in the theme has its template; every page, product and collection it links is listed for the store to have.
THE LIVE SITE IS WALKED, NOT ASSUMEDA site is UNBROKEN only after its pages were fetched and every picture and internal link answered 200.
ONE SITE, AND NOTHING ELSE`live` reaches the address you give it and no other; it fetches as a visitor would, sends no form, and leaves no trace but the access log. The other commands reach nothing.
REPORTS STAY WITH THE BUILDThe refs and live reports are kept beside the theme zip they describe, so the next build knows what was true.
What rides in the card.
In the card’s own voice, with a machine that shows its working.
THE GUIDEreferences/WHAT-BREAKS.md
THE MACHINEunbroken.py · four commandsrefs — what the theme names that is not there: missing assets, snippets, sections and doors; the Files it needs; the store things it links; outside hosts; needs — the exact names the store's Files must hold, one per line; live — the live site walked: every picture and internal link asked, the broken ones by page; gate — refs, needs and live in one verdict: UNBROKEN or BROKEN with the counts. Every command prints its working and refuses a bad input; 14 checks in its selftest, every command on the record.
What it does once your AI has it.
refs What the theme names that is not there: missing assets, snippets, sections and doors; the Files it needs; the store things it links; outside hosts
needs The exact names the store's Files must hold, one per line
live The live site walked: every picture and internal link asked, the broken ones by page
gate Refs, needs and live in one verdict: UNBROKEN or BROKEN with the counts
On the record A small theme read: the picture moved to the store's Files listed under needs, the missing asset, snippet and door named with the files that ask for them; with the Files list given, the picture is accounted for and the three breaks remain; a small site served on this machine walked: the missing hero picture and the dead door reported by page; the gate reads BROKEN with the counts.
What it will never do.
It will never pass a theme that names a missing file; never call a site unbroken it did not walk; never reach any site but the one you name.
It reads a theme's words and asks a site's pages; it does not run the theme's scripts, so a picture set by script after load, a page behind a sign-in, or a link that answers 200 with the wrong page is not seen. Its door rules are Shopify's view-template convention; another platform's doors need the rule edited in the file. It is an AI reading a text file: it can be wrong, so check what matters against your own records and the source.
What’s in the buy.
CARD.md — the whole card: who it is, its laws, when it says no, what it carries · SKILL.md — the door your AI reads first · START-HERE.md — the first five minutes, for you
WHAT-BREAKS.md — the guide in references/, in the card's own voice
scripts/unbroken.py — the machine: refs · needs · live · gate, standard library only, selftest 14/14
WITNESS.md + SELFTEST.md — every command on the record, as it printed · MANIFEST.md, every file hashed · AUDIT.md, the twelve checks
MY-LEDGER.md — the card's memory, on your own machine · TIN.md · LICENSE-NOTE.md · THE-CLAUSES.md · HOSTS.md
card.svg + card-machine.svg + card.json · card.html, the card as one offline file · the doors for ChatGPT, Gemini, Cursor, Claude Code and MCP hosts (rules/, system/, mcp/)
PROOF · SELFTEST 14/14 · 4 COMMANDS ON THE RECORD · WITNESSED IN CLAUDE 2026-10-09 · EDITION 1 · PUNCH 9FF0BB0276D1CB0AD81501F6
ON EVERY DOOR · A CARD FOR YOUR AI, A FILE FOR YOUR COMPUTER
In Claude: turn on code execution under Settings › Capabilities, then Customize › Skills › + › Create skill, and upload the zip as it is — START-HERE.md in the box walks you through it, and tells you how to keep the ledger. In ChatGPT, Gemini and the rest: a Project, a GPT or a Gem with the card’s files attached and the short door in the box pasted as its instructions. The words run anywhere an AI reads Markdown; the machines run wherever the host runs Python. Witnessed in Claude only. The host marks →
Take it.
Nº 914 PROPOSED — LAUNCHING SOON
Sold as is under the term printed. A card instructs an AI you operate; results depend on your model, your files and your judgement. Not medical, legal, tax or financial advice, never the person’s boss, and not a licence to practise. The terms →
One payment. The file is yours to keep and keeps working at its edition; new editions issued in the year after you buy reach you by email as replacement files. Tax is added at checkout where it applies. Nothing auto-renews.
A TERM, NOT A SUBSCRIPTION: NOTHING RENEWS ITSELF AND NOBODY IS CHARGED AGAIN. WHEN A TERM ENDS THE FILES STAY ON YOUR COMPUTER AND STAY READABLE — FREEZE, NOT LOSS.
THE MACHINE · IN THE OPEN · FROM THE WITNESSED RUN OF 2026-10-09
unbroken.py, every command showing its working.
A small Python program, standard library only. Your AI runs it; you can too. Every block below is pasted from the card’s own WITNESS.md, as printed.
refs
what the theme names that is not there: missing assets, snippets, sections and doors; the Files it needs; the store things it links; outside hosts
needs
the exact names the store's Files must hold, one per line
live
the live site walked: every picture and internal link asked, the broken ones by page
gate
refs, needs and live in one verdict: UNBROKEN or BROKEN with the counts
selftest
14 checks that prove the machine; it must print 14/14
(a small theme, written for the record: one picture moved to the store's Files, one asset and one snippet name
$ (a small theme, written for the record: one picture moved to the store's Files, one asset and one snippet named but absent, one door with no room)
refs · WHAT THE THEME NAMES THAT IS NOT THERE: MISSING ASSETS, SNIPPETS, SECTIONS AND DOORS; TH
$ python3 scripts/unbroken.py refs theme
# THE UNBROKEN CARD · refs · theme · 2026-10-09 17:40
6 files read · BROKEN
## Broken · 3
- asset `face-swimmer.svg` named in layout/theme.liquid does not exist
- snippet `announce` named in layout/theme.liquid does not exist
- view `swimmer-card` named in layout/theme.liquid does not exist
## The store's Files must hold · 1 names
- hero-runner.png
- compare these with Content → Files, or pass --files with the names the store holds
## Needs the store (pages, products, collections the theme links; the store must have them) · 2
- page: press
- product: runner-card
## Outside hosts the theme loads from or links to · 0
A name the theme asks for that is not in the zip and not in Files is a broken picture on the live site. This reads words; the live walk reads the site.
needs · THE EXACT NAMES THE STORE'S FILES MUST HOLD, ONE PER LINE
$ python3 scripts/unbroken.py needs theme --out files-needed.txt
wrote files-needed.txt · 1 names the store's Files must hold
cat files-needed.txt
$ cat files-needed.txt
hero-runner.png
refs · WHAT THE THEME NAMES THAT IS NOT THERE: MISSING ASSETS, SNIPPETS, SECTIONS AND DOORS; TH
gate · REFS, NEEDS AND LIVE IN ONE VERDICT: UNBROKEN OR BROKEN WITH THE COUNTS
$ python3 scripts/unbroken.py gate theme --files files.txt --live http://the-studio-site.test/index.html
BROKEN · 5
refs · 3 broken · 1 names for Files · 0 missing from the list
live · 3 pages · 2 asked · 2 broken
asset face-swimmer.svg in layout/theme.liquid
snippet announce in layout/theme.liquid
view swimmer-card in layout/theme.liquid
THE NUMBERS, NAMES AND DATES IN THESE RUNS ARE THE STUDIO’S OWN EXAMPLES, INVENTED FOR THE RECORD; NO REAL COMPANY, PERSON OR PROPERTY IS NAMED.
QUESTIONS AT THE TABLE
Asked before the wire.
What does it need from me?
Refs · what it names that is not there. It asks first for the theme zip or folder, the list of names the store's Files hold if you have it, and the address of the live site once it is published.
Does it send anything anywhere?
No. The machine is a standard-library Python program that runs on your own computer and sends nothing anywhere; the words run wherever an AI reads Markdown. No server, no account, no key.
What is on the record?
The self-test (14/14) and every command run on real example inputs, pasted into WITNESS.md as they printed; the punch on the face is the SHA-256 of SKILL.md, so a downloaded copy can be checked against this room.
Can it be wrong?
Yes — it is an AI reading a text file. It reads a theme's words and asks a site's pages; it does not run the theme's scripts, so a picture set by script after load, a page behind a sign-in, or a link that answers 200 with the wrong page is not seen. Its door rules are Shopify's view-template convention; another platform's doors need the rule edited in the file.
What will it never do?
It will never pass a theme that names a missing file; never call a site unbroken it did not walk; never reach any site but the one you name.