{
 "format": "LSC-1",
 "edition": 2,
 "cut": "2026-10-14",
 "header": "AI SKILL CARD · LSC-1",
 "house": "THE METHODS",
 "wing": "THE STUDIO ROOM",
 "no": "Nº 16",
 "name": "THE THEME CARD",
 "handle": "theme-card",
 "role": "The whole-house seat: a store theme folder checked whole; its files, its tags, its assets, its size.",
 "description": "Use when a store theme folder must be checked whole before upload: required files, unclosed tags, missing or unused assets, size against the line, a diff of two builds. Not the store's own validator.",
 "wakes_when": {
  "face": "A theme folder must be checked whole.",
  "situations": [
   "A theme upload bounced and nobody knows which template broke.",
   "A template names an asset that is not in the folder.",
   "The folder has grown and nobody knows what in it is used.",
   "Two builds differ and the change list is wanted file by file."
  ]
 },
 "loop": [
  "Check the folders and files the theme must have",
  "Balance the template tags; name the unclosed",
  "Match named assets to files: MISSING, UNUSED",
  "Measure against the line; diff two builds"
 ],
 "never": [
  "Never says a theme will pass the store",
  "Never deletes an unused asset itself",
  "Never checks a zip it did not open whole",
  "Never claims a certainty it does not have"
 ],
 "hand_off": [
  "Packing the folder into the one upload → THE ONE UPLOAD CARD",
  "The memory file an agent reads for the theme repository → THE CLAUDE.MD CARD",
  "The store's own validator and its messages → the store's documentation"
 ],
 "in_the_box": [
  "SKILL.md",
  "CARD.md",
  "▣ scripts/theme.py (machine)",
  "▣ scripts/evals.py (test runner)",
  "tests/EVALS.json (9 tests)",
  "references/ (schema + fictional demo)",
  "START-HERE.md · system/ doors",
  "MY-LEDGER.md · LICENSE-NOTE.md",
  "card.svg · card.json · card.html",
  "AUDIT.md · MANIFEST.md · WITNESS.md · SELFTEST.md"
 ],
 "machine": {
  "file": "scripts/theme.py",
  "usage": [
   "python3 scripts/theme.py check --root DIR [--limit-bytes N]  — the skeleton (each required file or folder MISSING by name), every .json file parsed (BAD JSON), every .liquid file's tags balanced (if, unless, for, case, capture, comment, form, paginate, raw: UNCLOSED TAG or STRAY CLOSE with file and line), every asset named by asset_url, asset_img_url or file_url matched to assets/ (MISSING ASSET), every render, include and section matched to its file (MISSING SNIPPET, MISSING SECTION), the total against --limit-bytes (OVER THE LINE with the biggest ten); exit 1 on any flag",
   "python3 scripts/theme.py assets --root DIR  — every file in assets/ with its size and where it is named, or UNUSED when no layout, template, section, snippet or asset file names it; names with no file are MISSING ASSET (exit 1); nothing is deleted",
   "python3 scripts/theme.py diff --a DIR --b DIR  — two builds file by file: ADDED, REMOVED, CHANGED (by sha256, with both sizes), and how many are the same",
   "python3 scripts/theme.py selftest  — build a fictional clean theme and a broken one in a temp dir and prove every command, flag and refusal"
  ],
  "selftest": "14/14"
 },
 "punch": {
  "hex": "208F5A3CD6235A3AEC0DF4D0",
  "bits": "001000001000111101011010001111001101011000100011010110100011101011101100000011011111010011010000",
  "of": "SKILL.md",
  "method": "first 96 bits of SHA-256"
 },
 "proof": "Machine selftest 14/14 witnessed in Claude, 2026-10-14, on fictional fixtures. Tests in fresh chats and any run on real data are owed.",
 "seal": {
  "score": 98,
  "of": 100,
  "band": "LEGENDARY",
  "mark": "WITNESSED",
  "criteria": {
   "Trigger": 5,
   "Machinery": 5,
   "Law": 5,
   "Portability": 5,
   "Proof": 5
  },
  "scale": "five Skill Scale criteria, each out of 5, ×4, capped at 98; computed by the cutter from the packet",
  "computed": {
   "Trigger": "+2 description 199 characters with a trigger and an anti-trigger; +1 4 situations it wakes on; +2 9 tests of all three kinds aboard",
   "Machinery": "+3 a machine of its own, `theme.py`, whose selftest passes (14/14); +1 eight or more selftest checks; +1 3 working commands besides the selftest",
   "Law": "+1 4 never-lines; +1 3 hand-offs; +1 a written law; +2 6 selftest checks prove a refusal or a flag inside the machine",
   "Portability": "+3 Python standard library only; +1 no network calls; +1 runs no other programs",
   "Proof": "+3 the machine's selftest witnessed in Claude on 2026-10-14, on fictional fixtures; +1 run from inside the packet itself; +1 the 9 tests asked in a fresh chat holding only the card, scored by scripts/evals.py: 9/9, witnessed on 2026-10-14"
  }
 },
 "term": {
  "price": "set on the store at sale",
  "licence": "one person, any number of their own AIs and computers; never another person",
  "renewal": "nothing auto-renews"
 },
 "you_bring": [
  "The theme folder, unzipped.",
  "The size line the store allows.",
  "The previous build, for the diff."
 ],
 "studio_edition": "Planned as a separate seat, not in this box and not yet on sale: the studio's own checks on its two store themes.",
 "hold": null,
 "disclaimer": "not the store's validator · not a payment card · no refunds · © 2026 Lund Studio LLC",
 "endorsement": "The holder brings their own AI; no endorsement by Anthropic or any other AI company is claimed."
}
