{
  "meta": {
    "title": "Seeing like a model: the context audit",
    "essayUrl": "https://jakelawrence.xyz/blog/seeing-like-a-model",
    "measuredAt": "2026-07-27",
    "license": "CC-BY-4.0",
    "doctrineSource": "https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models",
    "bytesPerToken": 4.1,
    "note": "Every byte a Claude Code session loads into context before touching a file in this repo, classified atom by atom. Byte counts are measured, not estimated; every share and total here re-derives from the atoms (guarded in CI). This is the machine-readable twin of the essay's live audit board."
  },
  "kinds": {
    "geography": {
      "label": "Geography",
      "color": "var(--color-blue)",
      "definition": "Facts about this repo an agent cannot infer from general capability: which Supabase project is which, what the seeder feeds, what pkill does to the shell that runs you.",
      "doctrine": "keep"
    },
    "policy": {
      "label": "Policy",
      "color": "var(--color-yellow)",
      "definition": "Owner values and house standards. Choices, not hedges: red lines, the page-experience bar, American English, where Tailwind may live.",
      "doctrine": "keep"
    },
    "pointer": {
      "label": "Pointers",
      "color": "var(--color-green)",
      "definition": "Progressive disclosure: references that load a deeper doc on demand instead of inlining it. The Docs column of the domain map, the env-var table pointer.",
      "doctrine": "keep"
    },
    "judgment": {
      "label": "Judgment",
      "color": "var(--color-orange)",
      "definition": "Guidance already phrased as judgment rather than prohibition (\"behind main is normal, not an emergency\"). The doctrine's target state.",
      "doctrine": "keep"
    },
    "distrust": {
      "label": "Distrust",
      "color": "var(--color-red)",
      "definition": "Capability worst-case-proofing: hedges, repeated rules, anti-pattern lists that restate rules stated elsewhere. Ages out as models improve.",
      "doctrine": "cut"
    }
  },
  "files": [
    {
      "file": "CLAUDE.md",
      "bytes": 57834
    },
    {
      "file": ".claude/rules/red-lines.md",
      "bytes": 1320
    },
    {
      "file": ".claude/rules/page-experience.md",
      "bytes": 3845
    },
    {
      "file": ".claude/rules/nextjs-react19-conventions.md",
      "bytes": 3793
    }
  ],
  "totals": {
    "corpusBytes": 66792,
    "corpusTokensEst": 16291,
    "byKind": {
      "geography": 52671,
      "policy": 7921,
      "pointer": 4259,
      "judgment": 1062,
      "distrust": 879
    },
    "byFile": {
      "CLAUDE.md": 57834,
      ".claude/rules/red-lines.md": 1320,
      ".claude/rules/page-experience.md": 3845,
      ".claude/rules/nextjs-react19-conventions.md": 3793
    },
    "scarBytes": 4996,
    "doctrineCut": {
      "totalBytes": 66792,
      "cutBytes": 879,
      "keptBytes": 65913,
      "cutShare": 0.013160258713618398
    }
  },
  "atoms": [
    {
      "id": "claude-preamble",
      "source": "CLAUDE.md",
      "section": "title",
      "label": "The title line",
      "gloss": "Names the file an agent guide.",
      "kind": "geography",
      "scar": false,
      "bytes": 34
    },
    {
      "id": "stack-core",
      "source": "CLAUDE.md",
      "section": "Stack",
      "label": "The stack, in five bullets",
      "gloss": "Next.js 15, React 19, no TypeScript, Supabase, Vitest. Facts a fresh session needs before its first edit.",
      "kind": "geography",
      "scar": false,
      "bytes": 209
    },
    {
      "id": "stack-tailwind-scope",
      "source": "CLAUDE.md",
      "section": "Stack",
      "label": "Where Tailwind may live",
      "gloss": "Utilities scoped to games, research, weather; Bauhaus tokens everywhere else. A design choice, stated as one.",
      "kind": "policy",
      "scar": false,
      "bytes": 366
    },
    {
      "id": "supabase-two-projects",
      "source": "CLAUDE.md",
      "section": "Two Supabase projects",
      "label": "The two-database map",
      "gloss": "Main project for site content, a separate one for exam prep: refs, wiring, which scripts touch which.",
      "kind": "geography",
      "scar": false,
      "bytes": 439
    },
    {
      "id": "supabase-never-write",
      "source": "CLAUDE.md",
      "section": "Two Supabase projects",
      "label": "\"Never write to one... (read this twice)\"",
      "gloss": "The hedge on top of the map. The map is geography; the all-caps energy around it is distrust of the reader.",
      "kind": "distrust",
      "scar": false,
      "bytes": 135
    },
    {
      "id": "run-commands",
      "source": "CLAUDE.md",
      "section": "Run / test / build",
      "label": "The command inventory",
      "gloss": "dev, lint, test, build, seeders, audits, per-surface release builders. The repo's verbs.",
      "kind": "geography",
      "scar": false,
      "bytes": 2027
    },
    {
      "id": "ops-harness",
      "source": "CLAUDE.md",
      "section": "Run / test / build",
      "label": "The ops harness, and the pkill warning",
      "gloss": "Start and stop the prod server only via the PID-file scripts; kill-by-name kills the agent's own shell.",
      "kind": "geography",
      "scar": true,
      "scarNote": "Sessions self-killed with exit 144 by pkill-ing the dev server they shared a process group with.",
      "bytes": 538
    },
    {
      "id": "seed-or-invisible",
      "source": "CLAUDE.md",
      "section": "Run / test / build",
      "label": "Content is invisible until seeded",
      "gloss": "The App Router reads Supabase, not the repo's seed files; the auto-seed workflow and the read fallback exist because content once silently failed to ship.",
      "kind": "geography",
      "scar": true,
      "scarNote": "Merged PRs edited seed JSON and the live site did not change; two safety nets now guard the gap.",
      "bytes": 1532
    },
    {
      "id": "pre-commit",
      "source": "CLAUDE.md",
      "section": "Run / test / build",
      "label": "What the pre-commit hook does",
      "gloss": "Essay-site sync, drift checks, a Tailwind leak check. Plus one hedge: \"don't bypass it.\"",
      "kind": "geography",
      "scar": false,
      "bytes": 320
    },
    {
      "id": "domain-map",
      "source": "CLAUDE.md",
      "section": "Domain map",
      "label": "The domain map: 98 route rows",
      "gloss": "Route by route, what lives there, who may see it, which tables it reads. The gazetteer. Nearly three quarters of the whole constitution by weight.",
      "kind": "geography",
      "scar": false,
      "bytes": 39773
    },
    {
      "id": "domain-map-docs-col",
      "source": "CLAUDE.md",
      "section": "Domain map",
      "label": "The Docs column",
      "gloss": "Every row ends in a pointer to its deep-dive under docs/surfaces/. The load-on-demand half of the table.",
      "kind": "pointer",
      "scar": false,
      "bytes": 3184
    },
    {
      "id": "surface-doc-convention",
      "source": "CLAUDE.md",
      "section": "Surface docs",
      "label": "New surfaces document themselves elsewhere",
      "gloss": "A new surface gets a new doc file plus one table row; never append large sections to CLAUDE.md.",
      "kind": "policy",
      "scar": true,
      "scarNote": "The file once grew to 225 KB and became the repo's number-one merge hotspot; the convention is the fix.",
      "bytes": 256
    },
    {
      "id": "rules-dir-fact",
      "source": "CLAUDE.md",
      "section": "Surface docs",
      "label": ".claude/rules auto-loads",
      "gloss": "Anything placed there is paid for by every session. A fact about the machinery, not a preference.",
      "kind": "geography",
      "scar": false,
      "bytes": 100
    },
    {
      "id": "heddle-dir-fact",
      "source": "CLAUDE.md",
      "section": "Surface docs",
      "label": "docs/heddle is parsed by a drift check",
      "gloss": "App docs placed there break the issue-mirror gate. Machinery, again.",
      "kind": "geography",
      "scar": false,
      "bytes": 100
    },
    {
      "id": "surface-docs-rest",
      "source": "CLAUDE.md",
      "section": "Surface docs",
      "label": "Read the surface doc first",
      "gloss": "Posture, schemas, and trust invariants live in docs/surfaces/<name>.md, loaded when you touch that surface.",
      "kind": "pointer",
      "scar": false,
      "bytes": 259
    },
    {
      "id": "branch-hygiene",
      "source": "CLAUDE.md",
      "section": "Concurrent sessions & branch hygiene",
      "label": "Behind main is physics, not failure",
      "gloss": "Merge once before the PR, never loop rebases, registry conflicts resolve keep-both. Written as judgment, not prohibition.",
      "kind": "judgment",
      "scar": true,
      "scarNote": "Sessions once treated \"behind main\" as an emergency and burned tokens re-rebasing into the same conflict.",
      "bytes": 1062
    },
    {
      "id": "auth-core",
      "source": "CLAUDE.md",
      "section": "Auth (NextAuth v5)",
      "label": "The auth config split",
      "gloss": "Edge-safe config for middleware, full config for handlers, JWT sessions, adapter schema. Pure wiring facts.",
      "kind": "geography",
      "scar": false,
      "bytes": 1099
    },
    {
      "id": "email-identities",
      "source": "CLAUDE.md",
      "section": "Auth (NextAuth v5)",
      "label": "One send path, per-surface From identities",
      "gloss": "Every email resolves its From line from a tested registry so no surface's brand leaks onto another's mail.",
      "kind": "geography",
      "scar": true,
      "scarNote": "A court display name in the global EMAIL_FROM once branded every site email \"City of Josephine, TX.\"",
      "bytes": 1608
    },
    {
      "id": "env-pointer",
      "source": "CLAUDE.md",
      "section": "Auth (NextAuth v5)",
      "label": "Env vars live in docs/ENV.md",
      "gloss": "The full table loads on demand instead of riding along in every session.",
      "kind": "pointer",
      "scar": false,
      "bytes": 224
    },
    {
      "id": "bauhaus-facts",
      "source": "CLAUDE.md",
      "section": "Bauhaus theme",
      "label": "Where the theme lives",
      "gloss": "CSS variables in globals.css, JS tokens in tokens.js, dark mode via a data attribute.",
      "kind": "geography",
      "scar": false,
      "bytes": 348
    },
    {
      "id": "bauhaus-tailwind-repeat",
      "source": "CLAUDE.md",
      "section": "Bauhaus theme",
      "label": "The Tailwind rule, stated again",
      "gloss": "The same scoping rule already stated in Stack, restated with a \"Don't.\" Repetition is the distrust-era tell.",
      "kind": "distrust",
      "scar": false,
      "bytes": 168
    },
    {
      "id": "enrichment-pipeline",
      "source": "CLAUDE.md",
      "section": "Enrichment pipeline",
      "label": "The five enrichment sub-agents",
      "gloss": "Auditor, blog, content, linker, metadata, and the shared client infra they run on.",
      "kind": "geography",
      "scar": false,
      "bytes": 717
    },
    {
      "id": "playtest-facts",
      "source": "CLAUDE.md",
      "section": "Playtest",
      "label": "The two-rung games QA harness",
      "gloss": "A nightly LLM smoke and a deterministic per-PR gate, both at a mobile viewport with software WebGL.",
      "kind": "geography",
      "scar": false,
      "bytes": 1819
    },
    {
      "id": "playtest-invariants",
      "source": "CLAUDE.md",
      "section": "Playtest",
      "label": "The oracle the gate judges against",
      "gloss": "Nothing overlays the dock, the board fills the viewport, 3D actually drew, the console is clean. A standard, chosen.",
      "kind": "policy",
      "scar": false,
      "bytes": 405
    },
    {
      "id": "american-english",
      "source": "CLAUDE.md",
      "section": "Conventions pointers",
      "label": "American English everywhere",
      "gloss": "color, favorite, gray, -ize. The owner is from Chicago; the site sounds like it.",
      "kind": "policy",
      "scar": false,
      "bytes": 263
    },
    {
      "id": "conventions-pointers",
      "source": "CLAUDE.md",
      "section": "Conventions pointers",
      "label": "Pointers to the deeper rulebooks",
      "gloss": "Coding conventions, the page-experience standard, theme and schema skills: named, not inlined.",
      "kind": "pointer",
      "scar": false,
      "bytes": 592
    },
    {
      "id": "wnt-sync-targets",
      "source": "CLAUDE.md",
      "section": "What not to touch",
      "label": "The synced essay dirs are build artifacts",
      "gloss": "Two public/ trees are written by the sync script; edits there are silently overwritten. Edit the sources.",
      "kind": "geography",
      "scar": false,
      "bytes": 204
    },
    {
      "id": "wnt-hook",
      "source": "CLAUDE.md",
      "section": "What not to touch",
      "label": "The git hook is managed",
      "gloss": "npm prepare owns .git/hooks/pre-commit.",
      "kind": "geography",
      "scar": false,
      "bytes": 53
    },
    {
      "id": "red-lines",
      "source": ".claude/rules/red-lines.md",
      "section": "whole file",
      "label": "The four red lines",
      "gloss": "What never leaves the site through any channel, and the module that enforces it on every outbound path. Values, wired.",
      "kind": "policy",
      "scar": false,
      "bytes": 1320
    },
    {
      "id": "four-pillars",
      "source": ".claude/rules/page-experience.md",
      "section": "Page experience standard",
      "label": "Link-heavy, multimedia-rich, audio-friendly, visual",
      "gloss": "Every page audited against four pillars before it is done. The house bar, ratified.",
      "kind": "policy",
      "scar": false,
      "bytes": 1857
    },
    {
      "id": "signature-standard",
      "source": ".claude/rules/page-experience.md",
      "section": "Signature interaction standard",
      "label": "One interaction that makes a reader stop",
      "gloss": "Flagships owe a bespoke moment, reduced-motion safe and accessible by construction.",
      "kind": "policy",
      "scar": false,
      "bytes": 1988
    },
    {
      "id": "conv-language",
      "source": ".claude/rules/nextjs-react19-conventions.md",
      "section": "Language",
      "label": "JSX, not TypeScript",
      "gloss": "The build is not configured for .ts and the tooling assumes JS. A fact about this repo, not a hedge.",
      "kind": "geography",
      "scar": false,
      "bytes": 443
    },
    {
      "id": "conv-app-router",
      "source": ".claude/rules/nextjs-react19-conventions.md",
      "section": "App Router",
      "label": "Server-component-first",
      "gloss": "Push \"use client\" to leaves, fetch at request time, metadata via exports. House patterns.",
      "kind": "policy",
      "scar": false,
      "bytes": 669
    },
    {
      "id": "conv-styling",
      "source": ".claude/rules/nextjs-react19-conventions.md",
      "section": "Styling",
      "label": "The Tailwind rule, a third time",
      "gloss": "Bauhaus tokens by default, Tailwind in its scoped routes, no CSS modules. The canonical statement of a rule the corpus makes three times.",
      "kind": "policy",
      "scar": false,
      "bytes": 497
    },
    {
      "id": "conv-images",
      "source": ".claude/rules/nextjs-react19-conventions.md",
      "section": "Images",
      "label": "next/image and inline SVG",
      "gloss": "Raster through next/image, icons as themable inline SVG.",
      "kind": "policy",
      "scar": false,
      "bytes": 300
    },
    {
      "id": "conv-component-org",
      "source": ".claude/rules/nextjs-react19-conventions.md",
      "section": "Component organization",
      "label": "Where components live",
      "gloss": "layout/, sections/, custom/, or co-located with the route.",
      "kind": "geography",
      "scar": false,
      "bytes": 342
    },
    {
      "id": "conv-data-layer",
      "source": ".claude/rules/nextjs-react19-conventions.md",
      "section": "Data layer",
      "label": "The data seams",
      "gloss": "Which module is the service-role client, which is anon, and that new tables get an accessor module.",
      "kind": "geography",
      "scar": false,
      "bytes": 699
    },
    {
      "id": "conv-tests",
      "source": ".claude/rules/nextjs-react19-conventions.md",
      "section": "Tests",
      "label": "Vitest, co-located",
      "gloss": "Where tests live and how they run.",
      "kind": "geography",
      "scar": false,
      "bytes": 267
    },
    {
      "id": "conv-anti-patterns",
      "source": ".claude/rules/nextjs-react19-conventions.md",
      "section": "Anti-patterns to flag",
      "label": "The anti-pattern list",
      "gloss": "Six items, every one restating a rule already stated elsewhere in the corpus. The purest distrust-era block in the repo: the doctrine deletes it on sight.",
      "kind": "distrust",
      "scar": false,
      "bytes": 576
    }
  ]
}