{
  "schema": "tiffany.systems/schema/deferred/1.0.0",
  "note": "Components that were designed and deliberately not built. Each entry records the condition that would change the decision. A sophisticated component that adds failure modes without a demonstrated need is a liability, not a feature.",
  "deferred": [
    {
      "component": "Request-time function to normalise unknown-path 404s",
      "problem": "A request to an unknown path returns the hosting layer's native 404 rather than Tiffany's JSON error envelope.",
      "invariant": "A client can tell an error from a success and is never misled about what a response means.",
      "simplest_adequate_mechanism": "Document the boundary: the error contract governs errors returned by implemented Tiffany endpoints, and unknown paths are the host's to answer. Tell clients to treat any non-200 as an error and not to assume the body is JSON.",
      "why_deferred": "The only benefit is cosmetic uniformity of a response no Tiffany endpoint produces. The cost is the first request-time executable surface on a site whose integrity properties — deterministic output, reproducible builds, no runtime attack surface, offline verifiability — all depend on having none. A runtime layer whose entire job is re-dressing someone else's 404 has not earned that.",
      "activate_when": "A request-time layer exists for a reason that stands on its own — authentication, or an endpoint that can genuinely fail. Normalising 404s would then be a small addition to something already justified, rather than the justification itself."
    },
    {
      "component": "Transparency log / Merkle-rooted release checkpoints",
      "problem": "Detect silent rewriting or equivocation about what was published.",
      "invariant": "A published version cannot change without detection.",
      "simplest_adequate_mechanism": "A committed digest lock checked in the build, with the published digest on every page.",
      "why_deferred": "One publisher, one build path, no external replications yet. A log would add key management, availability and monitoring failure modes while detecting nothing the lock does not already stop.",
      "activate_when": "A second independent publisher can write, or an external party depends on detecting equivocation between what different readers were served."
    },
    {
      "component": "Signing key hierarchy and attestations",
      "problem": "Prove who authorised a release.",
      "invariant": "Publication authority is attributable.",
      "simplest_adequate_mechanism": "Authorisation recorded in the record and in version control history.",
      "why_deferred": "Signatures would attest to a single operator signing their own work, which adds a compromise and rotation surface without adding an independent assurance.",
      "activate_when": "Publication authority is delegated to a software agent, or a second party gains release authority."
    },
    {
      "component": "Full typed evidence/claim knowledge graph",
      "problem": "Traverse relationships across many claims.",
      "invariant": "Downstream impact of a withdrawal is discoverable.",
      "simplest_adequate_mechanism": "Typed dependency references plus precomputed blast-radius and dependency queries.",
      "why_deferred": "A graph store answers questions nobody can ask yet at one claim identity, and would become the primary UX, which is exactly what the review forbade.",
      "activate_when": "Cross-claim dependencies exceed what the precomputed queries can answer, or a claim depends on another claim's version."
    },
    {
      "component": "Public graph query API",
      "problem": "Let external parties ask arbitrary questions.",
      "invariant": "No private data is reachable; no query exhausts the service.",
      "simplest_adequate_mechanism": "Bounded typed queries as precomputed static documents.",
      "why_deferred": "An execution surface with a complexity budget, an exhaustion attack and a data-reachability risk, in exchange for questions not yet asked.",
      "activate_when": "An external replicator asks for a question the bounded set cannot express, twice."
    },
    {
      "component": "SciBOM (scientific bill of materials)",
      "problem": "Full dependency inventory per finding.",
      "invariant": "Every input to a finding is enumerable.",
      "simplest_adequate_mechanism": "Typed dependencies with pinned digests on each claim version.",
      "why_deferred": "The fixture has three dependencies. A separate BOM format would be ceremony around a list that already exists in the record.",
      "activate_when": "A finding depends on a build environment or model lineage that cannot be expressed as pinned dependency references."
    },
    {
      "component": "Accounts, API keys, rate limits, entitlements",
      "problem": "Attribute and meter machine access.",
      "invariant": "Credentials never become scientific authority.",
      "simplest_adequate_mechanism": "Anonymous static endpoints with no authentication surface at all.",
      "why_deferred": "Everything published is public. An auth system would create a credential store, a breach surface and a privileged path to protect, guarding nothing.",
      "activate_when": "A non-public tier exists, or abuse makes anonymous access unworkable."
    },
    {
      "component": "External replication gateway",
      "problem": "Accept replication submissions from third parties.",
      "invariant": "External evidence is a separate object with its own provenance.",
      "simplest_adequate_mechanism": "Challenge contracts, published, answerable by anyone out of band.",
      "why_deferred": "An intake pipeline needs quarantine, malware scanning, licence review and identity before a first submission exists.",
      "activate_when": "A third party executes a published challenge contract and asks where to send the evidence."
    },
    {
      "component": "Grounded laboratory assistant",
      "problem": "Let readers ask questions in natural language.",
      "invariant": "No generated prose may strengthen a claim or change a status.",
      "simplest_adequate_mechanism": "Progressive-depth pages and bounded queries over the same records.",
      "why_deferred": "An assistant over one fixture claim would be a demonstration of an assistant, not of a laboratory; the prompt-injection surface through ingested metadata is real and the benefit is currently zero.",
      "activate_when": "There are enough published claims that navigation, not comprehension, is the reader's bottleneck."
    },
    {
      "component": "Zero-knowledge and selective disclosure",
      "problem": "Prove properties of private evidence without revealing it.",
      "invariant": "Protected material stays protected.",
      "simplest_adequate_mechanism": "Sanitised provenance attestations with digests and a declared completeness level.",
      "why_deferred": "No concrete disclosure need exists. Cryptographic complexity added speculatively is a failure mode looking for an occasion.",
      "activate_when": "A specific releasable property of a specific unreleasable artifact must be proven to a specific party."
    },
    {
      "component": "Federation and preservation mirrors",
      "problem": "Survive this site's disappearance.",
      "invariant": "Published records remain verifiable independently.",
      "simplest_adequate_mechanism": "Portable self-describing bundles with digests and a documented canonicalization.",
      "why_deferred": "Mirroring an empty scientific index federates nothing. The bundle format is the part that has to be right first, and it exists now.",
      "activate_when": "A real finding is published, or a preservation partner is identified."
    },
    {
      "component": "Module and dataset registries, release downloads",
      "problem": "Distribute software and data.",
      "invariant": "Released bytes are immutable and verifiable.",
      "simplest_adequate_mechanism": "Not needed yet; the artifact manifest pattern generalises to it.",
      "why_deferred": "There is nothing authorised for release. Building a registry now would hard-code today's assumptions about things that do not exist.",
      "activate_when": "A module or dataset is cleared for public release."
    },
    {
      "component": "Database, search index, server-side rendering",
      "problem": "Scale and query the corpus.",
      "invariant": "Evidence stays verifiable when infrastructure fails.",
      "simplest_adequate_mechanism": "Static generation from records in version control.",
      "why_deferred": "At this corpus size a database would add an availability dependency and a tamper surface to a corpus that fits in a directory.",
      "activate_when": "The corpus stops fitting a full-rebuild-per-change model."
    }
  ]
}
