{
  "$schema": "https://zachshallbetter.com/projections.json",
  "model": "Foundations of Computational Interaction — Projection Contract (Contracts v1.0.0-structure.1)",
  "target_model": {
    "name": "The Archive",
    "of_record": "https://zach-core.vercel.app/api/v1",
    "contract": "zach-core/src/archive/contract.ts",
    "note": "One declared model-of-record (entries, relations, media, the Semantic Article Field). Every projection below maps selected state/semantics from it into an accessible representation."
  },
  "separations": "model commitments ≠ state ≠ operational semantics ≠ projection ≠ host representation ≠ interpretation ≠ behavior. The archive owns model/state/semantics; this client owns projection/representation; interpretation and behavior are not asserted from the runtime.",
  "non_claims": "https://zachshallbetter.com/methodology",
  "projections": [
    {
      "id": "dom-article",
      "target": "A published article entry (title, body markdown, Semantic Article Field).",
      "representation": "HTML/CSS reading page at /writing/:slug, with the field engine as an ambient layer.",
      "mapping": "Markdown → HTML (marked + custom renderer, Shiki highlight, figure-from-alt); field JSON → concept rail, section receipts, TOC roles.",
      "preserved": [
        "prose text and order",
        "heading structure",
        "links",
        "code",
        "the argument’s section roles and concepts"
      ],
      "transformed": [
        "markdown → HTML",
        "headings → anchored, role-annotated sections",
        "force id → accent color"
      ],
      "omitted": [
        "raw markdown source",
        "draft/unlisted entries",
        "private data fields"
      ],
      "introduced": [
        "visual salience (accent, motion)",
        "TOC ordering",
        "reading-time estimate",
        "generative cover when none set"
      ],
      "operations": [
        "read",
        "navigate",
        "share-selection",
        "switch Read/Map/Field/Receipts modes",
        "owner: edit (authenticated)"
      ],
      "observer_assumptions": [
        "sighted or AT user; reduced-motion honored (motion is never required for meaning)",
        "English",
        "a modern browser"
      ],
      "intended_use": "Reading and citing an essay. Not a dataset; not a claim about reader comprehension.",
      "uncertainty": "The Semantic Article Field and accent are model-generated (see data.generated on the entry); prose is authored.",
      "failure_conditions": [
        "field JSON absent → renders as clean prose",
        "engine disabled/reduced-motion → static representation",
        "unknown slug → 404 or 301 via slug alias"
      ]
    },
    {
      "id": "field-canvas",
      "target": "Selected page elements as bodies in a particle field (fundamental-engine).",
      "representation": "A Canvas underlay (render: \"dots\") coupling DOM bodies and field density.",
      "mapping": "data-body/force tokens + Semantic Article Field roles → engine bodies, formations, and threads.",
      "preserved": [
        "coupling relations between elements",
        "section-role → formation mapping"
      ],
      "transformed": [
        "content salience → physical accent/motion"
      ],
      "omitted": [
        "textual content itself (the canvas carries no readable text)"
      ],
      "introduced": [
        "motion",
        "ambient accent journey",
        "reciprocal feedback (density/coherence/…)"
      ],
      "operations": [
        "observe",
        "perturb via scroll/hover/pointer"
      ],
      "observer_assumptions": [
        "motion-tolerant; fully omitted under prefers-reduced-motion",
        "no information is exclusive to the canvas"
      ],
      "intended_use": "An ambient, decorative-but-meaningful rendering of coupling. Never the sole carrier of information.",
      "uncertainty": "Physical parameters are designed, not measured (engine TruthMode: designed/semantic).",
      "failure_conditions": [
        "reduced-motion or no-canvas → not drawn; the DOM projection is the accessible equivalent"
      ]
    },
    {
      "id": "semantic-field-json",
      "target": "The Semantic Article Field (data.field) of an article.",
      "representation": "<script type=\"application/json\" id=\"articleField\"> inlined on the article page.",
      "mapping": "data.field → JSON verbatim (archetype, thesis, concepts, sections[role,receipt,claim,weight], relationships, relatedArticles).",
      "preserved": [
        "the full semantic structure of the article"
      ],
      "transformed": [],
      "omitted": [
        "prose body (kept in the DOM projection)"
      ],
      "introduced": [],
      "operations": [
        "read",
        "parse",
        "drive the field/concept UI"
      ],
      "observer_assumptions": [
        "a client (script or agent) that can parse JSON"
      ],
      "intended_use": "Let the page and agents read the argument’s structure. relatedArticles is a TYPED similarity profile (per-item shared concepts + reason), not a scalar score.",
      "uncertainty": "Model-generated; provenance in the entry’s data.generated.",
      "failure_conditions": [
        "absent for heading-less or ungenerated entries"
      ]
    },
    {
      "id": "json-ld",
      "target": "Entry + author identity.",
      "representation": "schema.org JSON-LD (BlogPosting/CreativeWork + BreadcrumbList + Person/WebSite graph).",
      "mapping": "entry fields → schema.org properties; author → a single linked @id identity.",
      "preserved": [
        "title, dates, author, keywords, canonical URL, section"
      ],
      "transformed": [
        "tags → keywords string",
        "entry → BlogPosting"
      ],
      "omitted": [
        "body prose (headline+description only)",
        "the Semantic Article Field"
      ],
      "introduced": [
        "a normalized author/publisher identity graph"
      ],
      "operations": [
        "read by search engines and agents"
      ],
      "observer_assumptions": [
        "a schema.org consumer"
      ],
      "intended_use": "Search and social understanding. Not a behavioral or comprehension claim.",
      "uncertainty": "Descriptions may be model-generated (see data.generated).",
      "failure_conditions": [
        "none load-bearing; the page renders without it"
      ]
    },
    {
      "id": "llms-txt",
      "target": "The site index for AI agents.",
      "representation": "text/plain Markdown at /llms.txt (llmstxt.org) and full corpus at /llms-full.txt.",
      "mapping": "live archive → curated link index (llms.txt) or full concatenated text (llms-full.txt), with explicit attribution.",
      "preserved": [
        "titles, summaries, canonical URLs",
        "full body text (llms-full)"
      ],
      "transformed": [
        "entries → Markdown link list / concatenated document"
      ],
      "omitted": [
        "private/draft entries",
        "visual/interactive layers"
      ],
      "introduced": [
        "attribution and citation guidance",
        "curated section ordering"
      ],
      "operations": [
        "read",
        "ingest",
        "cite"
      ],
      "observer_assumptions": [
        "an AI agent or crawler; expected to attribute to the author and link the canonical URL"
      ],
      "intended_use": "Agent ingestion and citation. Explicitly welcomed (see /robots.txt).",
      "uncertainty": "On-demand from the archive; some summaries are model-generated.",
      "failure_conditions": [
        "projects/experiments currently sourced from a legacy path pending archive-drive migration"
      ]
    },
    {
      "id": "rss",
      "target": "Published on-site articles.",
      "representation": "RSS 2.0 at /rss.xml with full-content <content:encoded>.",
      "mapping": "articles → feed items (plain-marked HTML body, no Shiki).",
      "preserved": [
        "title, link, date, tags, full body"
      ],
      "transformed": [
        "markdown → plain HTML (reader-styled elsewhere)"
      ],
      "omitted": [
        "the field engine and semantic layer",
        "off-site/unlisted entries"
      ],
      "introduced": [
        "syndication attribution footer"
      ],
      "operations": [
        "subscribe",
        "read",
        "syndicate"
      ],
      "observer_assumptions": [
        "a feed reader"
      ],
      "intended_use": "Reading and syndication. Not analytics.",
      "uncertainty": "On-demand from the archive.",
      "failure_conditions": [
        "none load-bearing"
      ]
    },
    {
      "id": "sitemap",
      "target": "All indexable URLs.",
      "representation": "XML sitemap at /sitemap.xml.",
      "mapping": "static routes + on-site articles + project detail pages → <url> entries with lastmod.",
      "preserved": [
        "URL set and last-modified dates"
      ],
      "transformed": [
        "entries → URLs"
      ],
      "omitted": [
        "content, private/off-site entries"
      ],
      "introduced": [],
      "operations": [
        "crawl"
      ],
      "observer_assumptions": [
        "a search crawler"
      ],
      "intended_use": "Crawl discovery.",
      "uncertainty": "On-demand; project URLs from a legacy path pending migration.",
      "failure_conditions": [
        "none load-bearing"
      ]
    },
    {
      "id": "rest-api",
      "target": "The archive itself.",
      "representation": "JSON REST at https://zach-core.vercel.app/api/v1 (entries, entries/:slug, search, timeline, collections, admin/*).",
      "mapping": "the model-of-record → JSON, with public reads scoped to public/unlisted, non-deleted.",
      "preserved": [
        "the entry model (types, relations, media, field, provenance)"
      ],
      "transformed": [
        "DB rows → mapped JSON entries"
      ],
      "omitted": [
        "private/draft entries on public reads",
        "internal columns"
      ],
      "introduced": [
        "pagination, cursors, cache tags"
      ],
      "operations": [
        "read",
        "search",
        "owner: create/update/delete/restore, relations, gallery, generate-field"
      ],
      "observer_assumptions": [
        "an HTTP/JSON client; write operations require an owner token"
      ],
      "intended_use": "The canonical read/write contract. Documented at zach-core/docs/agent-access.md + OpenAPI.",
      "uncertainty": "None for reads; generated fields carry data.generated provenance.",
      "failure_conditions": [
        "404 for unknown/deleted/private entries; 401 for unauthorized writes"
      ]
    }
  ]
}