Spec Studio

Projections fan out from one graph without becoming truth stores

spec:consumers.projections-modelDomain Model · epicready floor ready

Packs: pack:self-hosting-v1

Design: no design entries · no pinned declarations · 2 decisions

Findings: no errors, no warnings

specs/consumers/projections-model.sdp.md

No open questions and no blocking questions; implementation binding present, verifier binding present, and expected-outcome oracle none.

Intent
outcome
Give agents and humans consumer-specific views while preserving the repository as the only canonical source.
Model
projection line 18 · specs/consumers/projections-model.sdp.md:18
A pure, disposable, regenerable function of the graph that produces a consumer artifact without becoming a second source of truth.
diagnostic publication posture line 19 · specs/consumers/projections-model.sdp.md:19
After extraction succeeds, a projection publishes its honestly labelled graph view even when validation reports errors, and returns the validation exit code so findings remain both visible and nonzero.
curated graph line 20 · specs/consumers/projections-model.sdp.md:20
The part of the one derived graph that carries declared intent and anchored bindings, kept sparse by curation; the impact graph's inferred structure remains distinct.
reader line 21 · specs/consumers/projections-model.sdp.md:21
The thin typed front door that decodes graph joins and taxonomy once, returns composable data, and persists nothing.
curation line 22 · specs/consumers/projections-model.sdp.md:22
The deliberate difference between the sparse curated graph and the exhaustive code-structure surface spec:consumers.impact-graph designs; it is not drift.
discipline line 23 · specs/consumers/projections-model.sdp.md:23
A filter that selects or groups Specs by kind or section; it is not a phase to pass through.
Verification

Verifier bindings

  • test:protocol.projections-model.publication · projection publication tests verify regeneration and diagnostic exit codes · anchored · test anchor binding present · test/cli.test.ts:58

    External run evidence from test/cli.test.ts

    Test anchors: test:protocol.engine-provenance, test:protocol.extraction-determinism, test:protocol.projections-model.publication, test:protocol.regenerability, test:protocol.validate-watch. Specs verified by those bindings: spec:consumers.engine-provenance, spec:consumers.projections-model, spec:consumers.validate-watch, spec:extraction.determinism, spec:extraction.regenerability.

    Run 2: external run evidence from vitest 4.1.10

    Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:34:02.446Z · Stop: 2026-10-31T15:34:13.552Z

    NameSuiteResultDuration
    prints the exact help text for no argssdp clipassed1.29 ms
    points operators to the shipped on-ramps and Protocol corpussdp clipassed1.43 ms
    describes both anchor forms and non-failing warnings in helpsdp clipassed0.3 ms
    prints the exact help text for --helpsdp clipassed0.13 ms
    builds the checkout-v1 example: writes graph, contracts, and registrar manifest atomicallysdp clipassed94.65 ms
    invalidates an existing Design Review when build replaces its source graphsdp clipassed52.16 ms
    views the self-hosting corpus from the default repository rootsdp clipassed8248.75 ms
    renders contracts warnings through the one formatter and counts them in the summarysdp clipassed7.08 ms
    withholds case-colliding contract paths with a warning: graph kept, nothing gatessdp clipassed3.43 ms
    passes --check-clean on the example (determinism self-check through the CLI)sdp clipassed33.16 ms
    end-to-end determinism self-check: delete generated/, rebuild, byte-identicalsdp clipassed118.69 ms
    fails clean on a root that is not a directory: one line, exit 1, never a stack tracesdp clipassed0.33 ms
    rejects an unknown option: one line, exit 1, nothing runssdp clipassed0.1 ms
    accepts repeatable --exclude paths for buildsdp clipassed3.72 ms
    accepts repeatable --exclude paths for validatesdp clipassed3.24 ms
    accepts repeatable --exclude paths for viewsdp clipassed3.85 ms
    uses the identical normalized exclusions in both --check-clean extractionssdp clipassed4.99 ms
    refuses invalid --exclude path "" before build writessdp clipassed0.98 ms
    refuses invalid --exclude path "." before build writessdp clipassed0.35 ms
    refuses invalid --exclude path "./explorations" before build writessdp clipassed0.38 ms
    refuses invalid --exclude path "explorations/" before build writessdp clipassed0.22 ms
    refuses invalid --exclude path "/explorations" before build writessdp clipassed0.24 ms
    refuses invalid --exclude path "../x" before build writessdp clipassed0.19 ms
    refuses invalid --exclude path "a/../b" before build writessdp clipassed0.17 ms
    refuses invalid --exclude path "a//b" before build writessdp clipassed0.2 ms
    refuses invalid --exclude path "a\\b" before build writessdp clipassed0.27 ms
    refuses a missing --exclude operand before build writessdp clipassed0.32 ms
    names a flag supplied as an --exclude operand before build writessdp clipassed0.19 ms
    documents repeatable --exclude paths in helpsdp clipassed0.07 ms
    rejects a second root argument: one line, exit 1, nothing runssdp clipassed0.18 ms
    notes an empty authored model: zero spec files still builds and exits 0, but says where it lookedsdp clipassed0.69 ms
    renders a finding's location exactly once, from the structured fields: file:line — [severity]sdp clipassed2.5 ms
    renders a Gherkin parser failure through the public CLIsdp clipassed1.39 ms
    exits 1, writes nothing, and removes a stale graph.json on a hard-error corpussdp clipassed2.31 ms
    fails build on an integer-like design key holding a static valuesdp clipassed1.28 ms
    fails build on an integer-like design key holding a non-static valuesdp clipassed1.08 ms
    fails build on an integer-like design key holding a methodsdp clipassed1.13 ms
    fails build on an integer-like design key holding an accessorsdp clipassed1.24 ms
    fails --check-clean on a diverging second extraction: exit 1, the stale graph.json removedsdp clipassed11.55 ms
    fails --check-clean on a diverging second contract generation: exit 1, no artifact survivessdp clipassed22.86 ms
    owns the contracts tree wholesale: with nothing to generate, a stale contracts dir is removedsdp clipassed3.68 ms
    reconciles a registrar sibling that a later generation no longer owessdp clipassed22.86 ms
    fails --check-clean on registrar-byte drift and removes the uncertified known setsdp clipassed28.79 ms
    passes --check-clean without a prior manifest when no registrars are owedsdp clipassed4.32 ms
    fails --check-clean on registrar manifest whitespace driftsdp clipassed29.21 ms
    fails --check-clean on registrar manifest ignored property driftsdp clipassed31.67 ms
    removes graph, contracts, manifest, and registrar siblings after a staged write failuresdp clipassed22.06 ms
    fails clean when extraction throws past discovery: one line, exit 1, the stale graph.json removedsdp clipassed0.66 ms
    fails clean when generated exists as a file: one line each for build and view, never a stack tracesdp clipassed5.79 ms
    names the survivor when a recovery-path removal is denied: a stale artifact never silently reads as currentsdp clipassed0.68 ms
    stops a build when an existing Design Review cannot be invalidatedsdp clipassed4.61 ms
    fails clean when the checks throw: one line, exit 1, the built graph.json stayssdp clipassed3.07 ms
    suppresses the empty-model note when spec files were found but none reified — a failed file is not an absent onesdp clipassed1.66 ms
    treats a root of only ordinary .feature files as an empty authored model, not a missing-identity errorsdp clipassed0.79 ms
    suppresses the empty-model note when a failed .sdp.gherkin finding.file matches the carrier suffix predicatesdp clipassed1.05 ms
    builds a mixed root with one .sdp.gherkin carrier and ignores the ordinary .feature siblingsdp clipassed1.31 ms
    removes the temp twin on a failed build and a failed view — no partial .tmp artifact survivessdp clipassed9.5 ms
    recognizes the published-bin path: a .bin-style symlink resolves to the entry modulesdp clipassed0.46 ms
    exits 0 quietly on a stdout EPIPE and stays fatal for any other stream errorsdp clipassed0.59 ms
    validates the example: exit 0, the artifact written, and no warningsdp clipassed33.69 ms
    gates on the checks, not the build: a clean-building broken link validates to exit 1 with the artifact keptsdp clipassed3.21 ms
    short-circuits the checks on extraction hard errors: validate keeps build semanticssdp clipassed1.86 ms
    prints help plus an unknown-command errorsdp clipassed0.13 ms
    views the example: validate + the Design Review written, with no warningsdp clipassed36.21 ms
    owns the view directory wholesale: a stale page does not survive a re-rendersdp clipassed22.43 ms
    regenerates the view byte-identically: delete generated/, re-view, same bytessdp clipassed27.89 ms
    writes the view even when checks fail: findings render in it, the exit code is validate'ssdp clipassed2.42 ms
    keeps build semantics on extraction hard errors: no graph, no view, stale view removedsdp clipassed2.16 ms
    fails view --check-clean on a diverging second render: exit 1, the stale view removedsdp clipassed5.69 ms
    fails clean when the render throws: one line on stderr, exit 1, the stale view removedsdp clipassed3.22 ms
    closes the compiled watch process with exit 0 after operator SIGINTsdp validate --watchpassed282.58 ms
    documents --watch as a validate-only authoring loopsdp validate --watchpassed0.21 ms
    rejects --watch on build with a named error and no watchersdp validate --watchpassed0.14 ms
    rejects --watch on view with a named error and no watchersdp validate --watchpassed0.06 ms
    rejects --watch on census with a named error and no watchersdp validate --watchpassed0.05 ms
    rejects --watch on mermaid with a named error and no watchersdp validate --watchpassed0.04 ms
    rejects --watch on gherkin with a named error and no watchersdp validate --watchpassed0.04 ms
    rejects --watch on import with a named error and no watchersdp validate --watchpassed0.17 ms
    rejects --watch on new with a named error and no watchersdp validate --watchpassed0.26 ms
    rejects --watch on q with a named error and no watchersdp validate --watchpassed0.19 ms
    rejects --watch --check-clean with a named error and no watchersdp validate --watchpassed0.09 ms
    installs the watcher before the first validation cyclesdp validate --watchpassed5.11 ms
    catches an edit during the first cycle with exactly one coalesced rerunsdp validate --watchpassed5.98 ms
    coalesces a burst during an active cycle into exactly one rerunsdp validate --watchpassed5.82 ms
    prints validation findings and keeps watching until abort exits 0sdp validate --watchpassed3.27 ms
    ignores generated, dist, node_modules, coverage, dot directories, and configured excludessdp validate --watchpassed5.91 ms
    coalesces production-shaped events from later turns into one pending rerunsdp validate --watchpassed8.15 ms
    does not natively subscribe to excluded or generated subtreessdp validate --watchpassed67.57 ms
    routes a native watcher error through a typed channel and closes oncesdp validate --watchpassed5.53 ms
    clean-repo determinism: the full pipeline at a different absolute path is byte-identicalnot recordedpassed74.32 ms
    prints one line naming the package version and the recorded commit, and exits 0sdp --versionpassed0.47 ms
    names the commit unknown when the build recorded none or recorded something elsesdp --versionpassed0.36 ms
    reads the version from the package manifest two directories above the CLI modulesdp --versionpassed0.31 ms
    documents --version and --params in the usage textsdp --versionpassed0.11 ms
    records the checked-out commit at build time, or unknown when git cannot name onesdp --versionpassed10.75 ms
    publishes the commit the build step reads from git beside the CLIsdp --versionpassed1.23 ms
    builds commit metadata from a substituted git archive extracted without .gitsdp --versionpassed38.4 ms
    uses only a full archive commit when git gives none, keeping git firstsdp --versionpassed2.05 ms
    answers from the compiled CLI with the commit its build recorded beside itsdp --versionpassed283.46 ms
    runs recipe 4 as shipped, its changed files passed with --params @PATHa shipped recipe file through the compiled CLIpassed345.78 ms
  • test:protocol.projections-model.reader · reader tests verify composable graph joins without persistence · anchored · test anchor binding present · test/reader.test.ts:35

    External run evidence from test/reader.test.ts

    Test anchors: test:protocol.projections-model.reader. Specs verified by those bindings: spec:consumers.projections-model.

    Run 1: external run evidence from vitest 4.1.10

    Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z

    NameSuiteResultDuration
    exposes authored open-section and model-term order in a Spec contextthe reader — the thin typed loader behind the agent surface > flat accessorspassed5.39 ms
    carries owned prose in spec summaries and contextsthe reader — the thin typed loader behind the agent surface > flat accessorspassed1.32 ms
    summarizes every spec with the decode done once: display label, recomputed facts, packs, derived readinessthe reader — the thin typed loader behind the agent surface > flat accessorspassed8.13 ms
    summarizes packs and exposes the full findings — the holes beside the assertions (JS-E2)the reader — the thin typed loader behind the agent surface > flat accessorspassed1.97 ms
    finds narrative and owned section descriptionsthe reader — the thin typed loader behind the agent surface > findByConcept — the grep→graph bridge from a stringpassed0.58 ms
    matches ids first, then titles/labels, then section prose — deterministic, never fuzzythe reader — the thin typed loader behind the agent surface > findByConcept — the grep→graph bridge from a stringpassed1.7 ms
    reaches the domain vocabulary: a model term key is content, not structurethe reader — the thin typed loader behind the agent surface > findByConcept — the grep→graph bridge from a stringpassed1.04 ms
    matches an anchor label, case-insensitively — label tier before prose tierthe reader — the thin typed loader behind the agent surface > findByConcept — the grep→graph bridge from a stringpassed1.21 ms
    never matches section structure keys: a query naming a shape key finds only contentthe reader — the thin typed loader behind the agent surface > findByConcept — the grep→graph bridge from a stringpassed1.08 ms
    returns nothing for an empty querythe reader — the thin typed loader behind the agent surface > findByConcept — the grep→graph bridge from a stringpassed0.97 ms
    maps a spec file to the spec authored therethe reader — the thin typed loader behind the agent surface > byFile — the grep→graph bridge from a filepassed1.3 ms
    maps a source file through its bindings to the specs they satisfy (./-prefix normalized)the reader — the thin typed loader behind the agent surface > byFile — the grep→graph bridge from a filepassed0.99 ms
    maps the oracle's file through its models binding to the spec it models — no blind spotthe reader — the thin typed loader behind the agent surface > byFile — the grep→graph bridge from a filepassed0.92 ms
    maps a test file through its anchor to the example it verifiesthe reader — the thin typed loader behind the agent surface > byFile — the grep→graph bridge from a filepassed1.08 ms
    answers honestly for a file the graph records nothing atthe reader — the thin typed loader behind the agent surface > byFile — the grep→graph bridge from a filepassed0.95 ms
    reaches the bound spec and its one-hop neighborhood with the connecting edges namedthe reader — the thin typed loader behind the agent surface > blastRadius — file-level impact, coverage-unknown honest (`06` §2)passed1.97 ms
    treats a changed spec file as direct impact (no binding in the reason)the reader — the thin typed loader behind the agent surface > blastRadius — file-level impact, coverage-unknown honest (`06` §2)passed0.98 ms
    treats a changed pack manifest as pack impact with the members at risk via belongsTothe reader — the thin typed loader behind the agent surface > blastRadius — file-level impact, coverage-unknown honest (`06` §2)passed3.99 ms
    surfaces an unanchored changed file as coverage-unknown, never silently droppedthe reader — the thin typed loader behind the agent surface > blastRadius — file-level impact, coverage-unknown honest (`06` §2)passed1.02 ms
    normalizes, dedupes, and sorts the changed-file listthe reader — the thin typed loader behind the agent surface > blastRadius — file-level impact, coverage-unknown honest (`06` §2)passed1.04 ms
    joins relations, bindings, recomputed facts, and the spec's findings in one answerthe reader — the thin typed loader behind the agent surface > specContext — the irreducible per-spec joinpassed1.27 ms
    decodes a test anchor as an enabled verifier binding with its source locationthe reader — the thin typed loader behind the agent surface > specContext — the irreducible per-spec joinpassed5.83 ms
    decodes the oracle binding — existence with its source location, never contentthe reader — the thin typed loader behind the agent surface > specContext — the irreducible per-spec joinpassed1.61 ms
    decodes a rule-kind oracle through the shared example-space predicatethe reader — the thin typed loader behind the agent surface > specContext — the irreducible per-spec joinpassed0.55 ms
    fails closed on off-contract or competing oracle edgesthe reader — the thin typed loader behind the agent surface > specContext — the irreducible per-spec joinpassed2.5 ms
    carries the oracle's file into blast radius through the models bindingthe reader — the thin typed loader behind the agent surface > specContext — the irreducible per-spec joinpassed0.9 ms
    returns undefined for an id the graph does not holdthe reader — the thin typed loader behind the agent surface > specContext — the irreducible per-spec joinpassed0.68 ms
    names the scoped dependency of a Spec stating defined at the next rung, readythe reader — the thin typed loader behind the agent surface > nextRungFailures — the unmet clauses of the rung above the floor reachedpassed0.71 ms
    has no next-rung failure when the same dependency states defined and ready derivesthe reader — the thin typed loader behind the agent surface > nextRungFailures — the unmet clauses of the rung above the floor reachedpassed2.86 ms
    reads the rung above the floor reached, not the rung above the stated onethe reader — the thin typed loader behind the agent surface > nextRungFailures — the unmet clauses of the rung above the floor reachedpassed0.4 ms
    reads idea as the next rung when no rung derives, and nothing for an unratified kindthe reader — the thin typed loader behind the agent surface > nextRungFailures — the unmet clauses of the rung above the floor reachedpassed0.56 ms
    lists members with their decode and the verifier gaps, ready ones as the priority slicethe reader — the thin typed loader behind the agent surface > packContext — the pack reviewed as a unit (JS-E4, JS-G4)passed2.68 ms
    excludes ready and below-ready decisions from gaps while preserving non-decision orderthe reader — the thin typed loader behind the agent surface > packContext — the pack reviewed as a unit (JS-E4, JS-G4)passed0.74 ms
    flags a ready member without a verifier as the priority gapthe reader — the thin typed loader behind the agent surface > packContext — the pack reviewed as a unit (JS-E4, JS-G4)passed0.46 ms
    answers membership the same from the list and from the belongsTo edges, and the validator names a graph where they disagreethe reader — the thin typed loader behind the agent surface > packContext — the pack reviewed as a unit (JS-E4, JS-G4)passed0.88 ms
    returns undefined for a non-pack idthe reader — the thin typed loader behind the agent surface > packContext — the pack reviewed as a unit (JS-E4, JS-G4)passed0.64 ms
    exposes recomputed delivery facts, never stated ones — the divergence stays a findingthe reader — the thin typed loader behind the agent surface > honesty over foreign producerspassed0.37 ms
    never decodes an anchored verifies edge from a non-Anchor source as the enabling test bindingthe reader — the thin typed loader behind the agent surface > honesty over foreign producerspassed0.55 ms
    never decodes an off-contract verifies edge from an anchor-bound example as enabledthe reader — the thin typed loader behind the agent surface > honesty over foreign producerspassed0.51 ms
    never confers has-verifier from an anchor-bound non-example verifier — the kind gate of the shared enabled-example rulethe reader — the thin typed loader behind the agent surface > honesty over foreign producerspassed0.42 ms
    keys the verifier by first carrier on a duplicate-id graph — decode and derived facts agreethe reader — the thin typed loader behind the agent surface > honesty over foreign producerspassed0.64 ms
    carries the claim through impact answers — machine-derived reach is marked, never promotedthe reader — the thin typed loader behind the agent surface > honesty over foreign producerspassed0.52 ms
    lists the units that reference a Spec beside its implementations, with role and locationthe reader — the thin typed loader behind the agent surface > the binding grain: references and unlinked code unitspassed0.71 ms
    never confers a delivery fact through referencesthe reader — the thin typed loader behind the agent surface > the binding grain: references and unlinked code unitspassed0.41 ms
    carries layer and context on a component's binding rowthe reader — the thin typed loader behind the agent surface > the binding grain: references and unlinked code unitspassed0.31 ms
    reaches a referenced Spec from a source filethe reader — the thin typed loader behind the agent surface > the binding grain: references and unlinked code unitspassed0.34 ms
    returns an identity-only unit with an empty Spec listthe reader — the thin typed loader behind the agent surface > the binding grain: references and unlinked code unitspassed3.34 ms
    traverses references as a binding, naming the edge type and its claimthe reader — the thin typed loader behind the agent surface > the binding grain: references and unlinked code unitspassed0.49 ms
    lists changed units with no Spec linkage as unlinked, never coverage-unknown or droppedthe reader — the thin typed loader behind the agent surface > the binding grain: references and unlinked code unitspassed0.42 ms
    keeps a file holding only an identity-only unit out of coverage-unknown and out of impactthe reader — the thin typed loader behind the agent surface > the binding grain: references and unlinked code unitspassed0.25 ms
    reports nothing unlinked when every changed unit has a Spec linkagethe reader — the thin typed loader behind the agent surface > the binding grain: references and unlinked code unitspassed0.8 ms
    never mutates the graph and answers identically across fresh readersthe reader — the thin typed loader behind the agent surface > purity and determinismpassed5.69 ms
  • test:protocol.projections-model.rendering · graph-only rendering tests verify pure disposable projection pages · anchored · test anchor binding present · test/design-review.test.ts:36

    External run evidence from test/design-review.test.ts

    Test anchors: test:protocol.projections-model.rendering. Specs verified by those bindings: spec:consumers.projections-model.

    Run 1: external run evidence from vitest 4.1.10

    Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z

    NameSuiteResultDuration
    labels the index as diagnostic when the real reader reports validation errorsthe generated Design Reviewpassed28.28 ms
    publishes the real diagnostic Design Review and returns nonzerothe generated Design Reviewpassed12.54 ms
    renders the self-hosting spec narrative from the graphthe generated Design Reviewpassed1.17 ms
    renders every owned description as escaped prose and omits absent prose artifactsthe generated Design Reviewpassed1.58 ms
    reads no authored Markdown source while projecting graph and Reader valuesthe generated Design Reviewpassed1.64 ms
    renders the committed self-hosting corpus byte-identically at two absolute rootsthe generated Design Reviewpassed8688.68 ms
    rejects swapped prose semantically even when the wrong graph renders deterministicallythe generated Design Reviewpassed2.73 ms
    percent-encodes source link targets on Spec and Pack headers and every bindingthe generated Design Reviewpassed25.35 ms
    percent-encodes page link targets on the index and detail pagesthe generated Design Reviewpassed17.39 ms
    golden correctness oracle: the renderer produces the right view, page set and bytesthe generated Design Reviewpassed1.15 ms
    renders authored entry order in lists and the Model tablethe generated Design Reviewpassed0.9 ms
    re-rendering from the same graph is byte-identical (a pure projection)the generated Design Reviewpassed19.07 ms
    renders byte-identically when graph node insertion order differsthe generated Design Reviewpassed0.96 ms
    escapes Markdown text fields and open-section stringsthe generated Design Reviewpassed0.66 ms
    speaks binding language, never liveness: bindings present/none, observation not trackedthe generated Design Reviewpassed0.28 ms
    distinguishes the enabled verifier from the unenabled one — the claim cues travel alongthe generated Design Reviewpassed0.16 ms
    keeps the incomplete trace in bindings without a below-ready warningthe generated Design Reviewpassed0.19 ms
    locates a deliberate finding through structured Primitive fieldsthe generated Design Reviewpassed16.7 ms
    shows what a verifier covers on its own page (JS-G2: from the test back to the spec)the generated Design Reviewpassed0.23 ms
    renders bound example steps naturally while preserving typed parent vocabularythe generated Design Reviewpassed0.22 ms
    renders a test-anchor verifier as the enabled binding only along its contract rowthe generated Design Reviewpassed1.36 ms
    names the off-contract claim, never a missing anchor, when a bound example's edge is off-contractthe generated Design Reviewpassed0.6 ms
    renders the pack as a review unit with the verifier gaps surfacedthe generated Design Reviewpassed0.14 ms
    raises the derived-readiness banner only in the dishonest directionthe generated Design Reviewpassed0.99 ms
    names an unresolved relation target instead of linking itthe generated Design Reviewpassed0.41 ms
    lists the referencing units with file and line, and the reference confers no bindingthe generated Design Reviewpassed8.09 ms
    shows a component row's layer and contextthe generated Design Reviewpassed0.57 ms
Design view

Requirement drawing

Requirement drawing for spec:consumers.projections-model

Shown as text: this drawing exceeds the height budget of 2000 pixels after folding.

The diagram as text
  • spec:consumers.projections-model: Projections fan out from one graph without becoming truth stores · declared Spec
  • spec:consumers.agent-surface: Agents script a visible typed graph · declared Spec
  • spec:consumers.capability-map: The capability map reads every epic and its refinement descendants · declared Spec
  • spec:consumers.census-page: Census renders the runtime taxonomy without becoming a registry · declared Spec
  • spec:consumers.command-line: Every verb answers --help, and one verb writes every projection root · declared Spec
  • spec:consumers.design-diff: Designs are compared between a base commit and the working tree at entry grain · declared Spec
  • spec:consumers.design-review: Design Review renders graph context without becoming a gate · declared Spec
  • spec:consumers.edit-model: Views compose scoped intent instead of patching canonical source · declared Spec · no satisfying binding
  • spec:consumers.gherkin-view: Gherkin view renders any Spec as a disposable read shape · declared Spec
  • spec:consumers.impact-graph: Mechanical code structure stays inferred and apart from curated intent · declared Spec
  • spec:consumers.mermaid-view: Mermaid renders bounded one-hop and Pack diagrams without becoming a graph browser · declared Spec
  • spec:consumers.obsidian-vault: An Obsidian vault lets a person iterate on designs from the one graph · declared Spec
  • spec:consumers.projections-model.roadmap-views: Roadmap views read releases, baselines and phases from git and the graph · declared Spec · no satisfying binding
  • spec:consumers.reference-projection: A reference projection serves a reader outside the repository · declared Spec · no satisfying binding
  • spec:consumers.review-perspectives: A Pack is read from a named perspective · declared Spec
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph · declared Spec
  • spec:consumers.structural-mermaid: Mermaid diagrams can be rooted at code units · declared Spec · no satisfying binding
  • spec:decisions.mcp-deferred: MCP integration remains deferred · declared Spec
  • spec:decisions.shipped-projections-frozen: The shipped projections stay frozen · declared Spec
  • spec:observation.run-evidence: CI run records are joined to verifiers in a view · declared Spec
  • spec:consumers.agent-surface.demand-map-entries: One body reaches every entry point the demand map names, and no symbol entry · declared Spec
  • spec:consumers.agent-surface.scripted-context-body: A scripted body returns claim-decoded context, pre-shaped by the body · declared Spec
  • spec:consumers.command-line.generate-check-failure: A root that fails its check is removed while sdp generate writes the others · declared Spec
  • spec:consumers.command-line.generate-writes-every-root: One run of sdp generate leaves all five roots current · declared Spec
  • spec:consumers.command-line.verb-help-touches-nothing: A publisher's --help prints its help and touches no root · declared Spec
  • spec:consumers.design-review.pure-projection: The view is the graph read twice, and the corpus is untouched by reading it · declared Spec
  • spec:consumers.obsidian-vault.changed-note-refused: A generated note a person changed refuses the regeneration and keeps the edit · declared Spec
  • spec:consumers.obsidian-vault.failed-extraction-keeps-notes: A failed extraction keeps the notes and says so on the index · declared Spec
  • spec:consumers.obsidian-vault.failed-extraction-recovered: The run after a failed extraction passes the guard and restores the index · declared Spec
  • spec:consumers.obsidian-vault.fresh-vault: A fresh vault is written the same way twice and every link resolves · declared Spec
  • spec:consumers.obsidian-vault.hidden-file-refused: A person's file under a temporary's name refuses the regeneration · declared Spec
  • spec:consumers.obsidian-vault.interrupted-run-recovered: A run after a stopped synchronization finishes it · declared Spec
  • spec:consumers.obsidian-vault.person-notes-survive: A regeneration removes a note that left the graph and keeps a person's notes · declared Spec
  • spec:consumers.obsidian-vault.unknown-note-refused: A note a person wrote inside the generated folder refuses the regeneration · declared Spec
  • spec:consumers.obsidian-vault.vault-in-build-path-refused: A vault directory the build removes refuses the run and keeps a person's notes · declared Spec
  • spec:observation.run-evidence.absolute-path-joins: A test whose reporter wrote an absolute path joins its anchored file · declared Spec
  • spec:observation.run-evidence.unanchored-file-unjoined: A test in a file with no test anchor is reported as unjoined · declared Spec
  • spec:consumers.agent-surface.answer-shapes: Recipe answers fit an agent's context and explain their misses · declared Spec
  • spec:consumers.agent-surface.authoring-recipes: Authoring questions stay executable graph recipes · declared Spec
  • spec:consumers.agent-surface.evaluation-sink: The evaluation sink runs one body and prints its return · declared Spec
  • spec:consumers.agent-surface.recipe-parameters: Recipes take parameters as data and ship as runnable files · declared Spec
  • spec:consumers.agent-surface.register-recipes: Register questions stay executable graph recipes · declared Spec
  • spec:consumers.binding-language-views: Views speak binding language, never the internal fact name · declared Spec
  • spec:consumers.context-bundle: A context bundle is composed per invocation within a stated budget · declared Spec
  • spec:consumers.derived-readiness-banner: Derived readiness renders beside the stated rung and warns in one direction · declared Spec
  • spec:consumers.design-review.pack-design-page: A Pack page shows where the Pack's design stands · declared Spec
  • spec:consumers.engine-provenance: The CLI names the engine that produced a result · declared Spec
  • spec:consumers.impact-graph.curation-assist: File-level imports show where curation is missing · declared Spec
  • spec:consumers.impact-graph.symbol-reach: Exhaustive symbol reach waits for a language-neutral identity · declared Spec
  • spec:consumers.intent-composition: Composed intent hands off on one proposal shape · declared Spec
  • spec:consumers.obsidian-vault.bases: A Pack's members and the standing queries are tables over the reader's values · declared Spec
  • spec:consumers.obsidian-vault.iteration: A design pass is followed and answered from the vault · declared Spec
  • spec:consumers.obsidian-vault.notes: Every Spec, Pack, code unit and keyed term is a note, and every relation is a link · declared Spec
  • spec:consumers.reader: The reader bridges agent entry points to composable graph context · declared Spec
  • spec:consumers.reading-on-ramp: The reading skill teaches agents to query the graph · declared Spec
  • spec:consumers.spec-studio.capability-map-page: The capability map page makes refinement readable by epic · declared Spec
  • spec:consumers.spec-studio.cited-line-text: A pinned declaration shows the words of each test line that cites it · declared Spec
  • spec:consumers.spec-studio.components: The Studio's custom elements each hold one view the build renders · declared Spec
  • spec:consumers.spec-studio.data: The Studio renders from the reader's values and embeds only what its script reads · declared Spec
  • spec:consumers.spec-studio.diff-page: The diff page shows what changed in the design since a base graph · declared Spec
  • spec:consumers.spec-studio.export: A Pack exports as one file, and every page prints as a document · declared Spec
  • spec:consumers.spec-studio.glossary-page: The glossary page lists every term the corpus's Specs define · declared Spec
  • spec:consumers.spec-studio.lenses: Five lenses read the graph as Packs, capabilities, architecture, tests and evidence · declared Spec
  • spec:consumers.spec-studio.navigation: Every page of the page set is reached from the top navigation and the index · declared Spec
  • spec:consumers.spec-studio.owner-queue: The owner queue page orders the statements and questions only a person can settle · declared Spec
  • spec:consumers.spec-studio.pack-page: A Pack page shows the Pack's design as one card per member · declared Spec
  • spec:consumers.spec-studio.publisher: sdp studio publishes the Studio as one page set · declared Spec
  • spec:consumers.spec-studio.register-input: An outside register is a named Studio input, so a cited token links to its entry · declared Spec
  • spec:consumers.spec-studio.registers: The corpus's registers are pages a reviewer opens from a link · declared Spec
  • spec:consumers.spec-studio.responsive: The Studio reads on a phone as on a desktop · declared Spec
  • spec:consumers.spec-studio.roadmap-page: The roadmap page shows the upcoming work in priority order, split by what it needs · declared Spec
  • spec:consumers.spec-studio.runs-page: The runs page shows the run records the build was given, joined to test files · declared Spec
  • spec:consumers.spec-studio.sharing: A Studio build is stamped and shared from a static host · declared Spec
  • spec:consumers.spec-studio.shell: The Studio's shell frames every page with navigation, a rail and a canvas · declared Spec
  • spec:consumers.spec-studio.slice-page: A slice page shows a Pack's design as one whole · declared Spec
  • spec:consumers.spec-studio.spec-page: A Spec page shows one Spec in collapsible panels, in a fixed order · declared Spec
  • spec:consumers.wholesale-view-rewrite: Every view run rewrites the view wholesale · declared Spec
  • spec:decisions.agent-front-door: The agent front door is one evaluation sink over the exported reader · declared Spec
  • spec:decisions.agent-surface-scripts-graph: Agents script the visible graph · declared Spec
  • spec:decisions.anchor-binding-grain: Bindings are optional, plural, and may reference a design · declared Spec
  • spec:decisions.architectural-annotation: Architectural significance is annotated where it is realized · declared Spec
  • spec:decisions.authored-entry-order: The Design Review renders open-section entries as a list · declared Spec
  • spec:decisions.epics-of-any-kind: Capability epics keep kind independent of altitude · declared Spec
  • spec:decisions.pack-design-page: The Design Review's Pack page presents the Pack's design · declared Spec
  • spec:decisions.question-key-rendering: The Design Review shows an open question's key · declared Spec
  • spec:decisions.studio-html-surface: The Studio renders HTML, and the HTML stays derived · declared Spec
  • spec:decisions.studio-web-components: The Studio is built from custom elements, not a framework · declared Spec
  • spec:decisions.vault-owned-folder: The vault's generator owns one folder and synchronizes it · declared Spec
  • spec:validation.corpus-rules: Corpus-authored rules run on the one validation path · declared Spec
  • component:protocol.projections: read-only output, layout and owned publication · anchored code · src/projections/design-review.ts:29
  • impl:protocol.adopter-help: SDP_HELP_TEXT indexes the shipped skills, recipe catalog, schema, walkthrough, glossary and specs/ by package-relative path · anchored code · src/cli/help.ts:167
  • impl:protocol.agent-surface-cli: CLI verb dispatcher and agent-surface front of the package CLI · anchored code · src/cli/sdp.ts:94
  • impl:protocol.build-args: shared build arguments and corpus-rule inputs · anchored code · src/cli/build-args.ts:11
  • impl:protocol.capability-map-recipe: asserts realization of The capability map in docs/agent-surface/recipes.md · anchored code · test/recipes.test.ts:7602
  • impl:protocol.census-page: renders the derived census and runtime taxonomy projection · anchored code · src/projections/census.ts:21
  • impl:protocol.census-page-cli: publishes the census through the explicit sdp census surface · anchored code · src/cli/census-command.ts:66
  • impl:protocol.design-diff-recipe: realizes the design diff in the shipped recipe catalog · anchored code · test/iteration-recipes.test.ts:27
  • impl:protocol.design-review: renders the contextual Design Review projection · anchored code · src/projections/design-review.ts:44
  • impl:protocol.design-review-codec: shared Design Review Markdown paths and links · anchored code · src/projections/design-review-markdown.ts:3
  • impl:protocol.generate-command: prepares all prior roots before one shared build and publishes with each verb's checks · anchored code · src/cli/generate-command.ts:34
  • impl:protocol.gherkin-kind-policy: shared Gherkin kind-refusal and loss explanations · anchored code · src/extract/gherkin-kind-honesty.ts:6
  • impl:protocol.gherkin-view: renders a generated Gherkin-shaped READ projection of any Spec · anchored code · src/projections/gherkin-view.ts:19
  • impl:protocol.gherkin-view-cli: publishes the Gherkin view through the explicit sdp gherkin surface · anchored code · src/cli/gherkin-command.ts:66
  • impl:protocol.mermaid-view: renders bounded Spec one-hop and Pack membership diagrams · anchored code · src/projections/mermaid.ts:14
  • impl:protocol.mermaid-view-cli: publishes Mermaid through the explicit sdp mermaid surface · anchored code · src/cli/mermaid-command.ts:82
  • impl:protocol.perspective-filter-recipe: realizes the perspective filter in the shipped recipe catalog · anchored code · test/iteration-recipes.test.ts:753
  • impl:protocol.projections-model: pure generated projection page contract · anchored code · src/projections/design-review.ts:16
  • impl:protocol.reader: typed graph queries, entry adapters and context joins · anchored code · src/reader/reader.ts:687
  • impl:protocol.run-evidence-recipe: asserts realization of Run evidence in docs/agent-surface/recipes.md · anchored code · test/recipes.test.ts:7277
  • impl:protocol.studio-command: validates and renders the Studio with independent byte checks and diagnostic exit codes · anchored code · src/cli/studio-command.ts:106
  • impl:protocol.studio-data: assembles reader contexts, Pack totals, rails and search records for static pages · anchored code · src/projections/studio/data.ts:279
  • impl:protocol.studio-frame: renders Studio navigation, page rails and composing controls · anchored code · src/projections/studio/pages/frame.ts:6
  • impl:protocol.studio-intent-panel: gathers ordered intents under the page-root storage key and partitions their hand-off · anchored code · src/studio-elements/intent-panel.ts:51
  • impl:protocol.studio-intent-panel-element: displays gathered requests and writes copy selections or local download links · anchored code · src/studio-elements/intent-panel-element.ts:14
  • impl:protocol.studio-runs-page: renders readable CTRF inputs, file results, unjoined records and diagnostics · anchored code · src/projections/studio/pages/runs-page.ts:6
  • impl:protocol.typescript-imports: TypeScript file imports and barrel reach for external curation input · anchored code · src/adapters/typescript-imports.ts:7
  • impl:protocol.vault-command: validates after vault preflight and retains prior notes behind a failed-extraction index · anchored code · src/cli/vault-command.ts:191
  • impl:protocol.vault-notes: renders reader contexts, declared relations and keyed terms as linked notes · anchored code · src/projections/vault/notes.ts:45
  • impl:protocol.vault-sync: guards every owned entry and records transitional hashes before atomic file replacement · anchored code · src/projections/vault/sync.ts:98
  • oracle:protocol.command-line: oracle:protocol.command-line · anchored oracle binding · test/self-hosting-command-line.test.ts:69
  • oracle:protocol.run-evidence: oracle:protocol.run-evidence · anchored oracle binding · test/studio-s4.test.ts:284
  • oracle:protocol.vault: oracle:protocol.vault · anchored oracle binding · test/vault-examples.test.ts:140
  • test:protocol.agent-surface.demand-map-entries: the demand-map point verifies the three entry points and the absent symbol entry · anchored test binding · binding present · test/self-hosting-consumers.test.ts:253
  • test:protocol.agent-surface.scripted-context-body: the scripted-body point verifies the front door's claim-decoded, pre-shaped return · anchored test binding · binding present · test/self-hosting-consumers.test.ts:244
  • test:protocol.capability-map: test:protocol.capability-map · anchored test binding · binding present · test/recipes.test.ts:7610
  • test:protocol.census-page: verifies census taxonomy, findings, and structural-binding projection · anchored test binding · binding present · test/census.test.ts:150
  • test:protocol.command-line.generate-check-failure: test:protocol.command-line.generate-check-failure · anchored test binding · binding present · test/self-hosting-command-line.test.ts:186
  • test:protocol.command-line.generate-writes-every-root: test:protocol.command-line.generate-writes-every-root · anchored test binding · binding present · test/self-hosting-command-line.test.ts:180
  • test:protocol.command-line.verb-help-touches-nothing: test:protocol.command-line.verb-help-touches-nothing · anchored test binding · binding present · test/self-hosting-command-line.test.ts:192
  • test:protocol.consumers.obsidian-vault.changed-note-refused: test:protocol.consumers.obsidian-vault.changed-note-refused · anchored test binding · binding present · test/vault-examples.test.ts:674
  • test:protocol.consumers.obsidian-vault.failed-extraction-keeps-notes: test:protocol.consumers.obsidian-vault.failed-extraction-keeps-notes · anchored test binding · binding present · test/vault-examples.test.ts:702
  • test:protocol.consumers.obsidian-vault.failed-extraction-recovered: test:protocol.consumers.obsidian-vault.failed-extraction-recovered · anchored test binding · binding present · test/vault-examples.test.ts:712
  • test:protocol.consumers.obsidian-vault.fresh-vault: test:protocol.consumers.obsidian-vault.fresh-vault · anchored test binding · binding present · test/vault-examples.test.ts:653
  • test:protocol.consumers.obsidian-vault.hidden-file-refused: test:protocol.consumers.obsidian-vault.hidden-file-refused · anchored test binding · binding present · test/vault-examples.test.ts:681
  • test:protocol.consumers.obsidian-vault.interrupted-run-recovered: test:protocol.consumers.obsidian-vault.interrupted-run-recovered · anchored test binding · binding present · test/vault-examples.test.ts:695
  • test:protocol.consumers.obsidian-vault.person-notes-survive: test:protocol.consumers.obsidian-vault.person-notes-survive · anchored test binding · binding present · test/vault-examples.test.ts:660
  • test:protocol.consumers.obsidian-vault.unknown-note-refused: test:protocol.consumers.obsidian-vault.unknown-note-refused · anchored test binding · binding present · test/vault-examples.test.ts:667
  • test:protocol.consumers.obsidian-vault.vault-in-build-path-refused: test:protocol.consumers.obsidian-vault.vault-in-build-path-refused · anchored test binding · binding present · test/vault-examples.test.ts:688
  • test:protocol.curation-imports: test:protocol.curation-imports · anchored test binding · binding present · test/curation-imports.test.ts:17
  • test:protocol.design-diff-recipe: test:protocol.design-diff-recipe · anchored test binding · binding present · test/iteration-recipes.test.ts:34
  • test:protocol.design-review.pure-projection: the pure-projection point verifies the view's own law over a whole-pipeline root · anchored test binding · binding present · test/self-hosting-projections.test.ts:303
  • test:protocol.gherkin-view: verifies the generated Gherkin-shaped READ projection · anchored test binding · binding present · test/gherkin-view.test.ts:20
  • test:protocol.mermaid-view: verifies bounded deterministic Mermaid projection and publication · anchored test binding · binding present · test/mermaid-render.test.ts:20
  • test:protocol.perspective-filter-recipe: test:protocol.perspective-filter-recipe · anchored test binding · binding present · test/iteration-recipes.test.ts:760
  • test:protocol.projections-model.publication: projection publication tests verify regeneration and diagnostic exit codes · anchored test binding · binding present · test/cli.test.ts:58
  • test:protocol.projections-model.reader: reader tests verify composable graph joins without persistence · anchored test binding · binding present · test/reader.test.ts:35
  • test:protocol.projections-model.rendering: graph-only rendering tests verify pure disposable projection pages · anchored test binding · binding present · test/design-review.test.ts:36
  • test:protocol.roadmap-priority: checks Pack priority extraction, comparison and Studio change notes · anchored test binding · binding present · test/roadmap-priority.test.ts:44
  • test:protocol.run-absolute: test:protocol.run-absolute · anchored test binding · binding present · test/studio-s4.test.ts:346
  • test:protocol.run-unjoined: test:protocol.run-unjoined · anchored test binding · binding present · test/studio-s4.test.ts:353
  • test:protocol.studio-intent-handoff: test:protocol.studio-intent-handoff · anchored test binding · binding present · test/studio-s5.test.ts:407
  • test:protocol.studio-publisher: test:protocol.studio-publisher · anchored test binding · binding present · test/studio-publisher.test.ts:26
  • spec:consumers.agent-surface refines spec:consumers.projections-model · declared
  • spec:consumers.agent-surface.answer-shapes refines spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.authoring-recipes refines spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.demand-map-entries refines spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.demand-map-entries verifies spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.evaluation-sink refines spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.recipe-parameters refines spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.register-recipes refines spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.scripted-context-body refines spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.scripted-context-body verifies spec:consumers.agent-surface · declared
  • spec:consumers.binding-language-views refines spec:consumers.design-review · declared
  • spec:consumers.capability-map refines spec:consumers.projections-model · declared — the capability map projects authored refinement without introducing a grouping
  • spec:consumers.census-page refines spec:consumers.projections-model · declared
  • spec:consumers.command-line refines spec:consumers.projections-model · declared — one verb publishes every projection root from one graph
  • spec:consumers.command-line.generate-check-failure refines spec:consumers.command-line · declared
  • spec:consumers.command-line.generate-check-failure verifies spec:consumers.command-line · declared
  • spec:consumers.command-line.generate-writes-every-root refines spec:consumers.command-line · declared
  • spec:consumers.command-line.generate-writes-every-root verifies spec:consumers.command-line · declared
  • spec:consumers.command-line.verb-help-touches-nothing refines spec:consumers.command-line · declared
  • spec:consumers.command-line.verb-help-touches-nothing verifies spec:consumers.command-line · declared
  • spec:consumers.context-bundle refines spec:consumers.agent-surface · declared
  • spec:consumers.derived-readiness-banner refines spec:consumers.design-review · declared
  • spec:consumers.design-diff refines spec:consumers.projections-model · declared
  • spec:consumers.design-review refines spec:consumers.projections-model · declared
  • spec:consumers.design-review.pack-design-page refines spec:consumers.design-review · declared
  • spec:consumers.design-review.pure-projection refines spec:consumers.design-review · declared
  • spec:consumers.design-review.pure-projection verifies spec:consumers.design-review · declared
  • spec:consumers.edit-model refines spec:consumers.projections-model · declared
  • spec:consumers.engine-provenance refines spec:consumers.command-line · declared — the version flag is one more answer the command line gives an adopter
  • spec:consumers.gherkin-view refines spec:consumers.projections-model · declared
  • spec:consumers.impact-graph refines spec:consumers.projections-model · declared
  • spec:consumers.impact-graph.curation-assist refines spec:consumers.impact-graph · declared
  • spec:consumers.impact-graph.symbol-reach refines spec:consumers.impact-graph · declared
  • spec:consumers.intent-composition refines spec:consumers.edit-model · declared
  • spec:consumers.mermaid-view refines spec:consumers.projections-model · declared
  • spec:consumers.obsidian-vault refines spec:consumers.projections-model · declared — a projection for a person who iterates on designs in a notes app
  • spec:consumers.obsidian-vault.bases refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.changed-note-refused refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.changed-note-refused verifies spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.failed-extraction-keeps-notes refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.failed-extraction-keeps-notes verifies spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.failed-extraction-recovered refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.failed-extraction-recovered verifies spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.fresh-vault refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.fresh-vault verifies spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.hidden-file-refused refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.hidden-file-refused verifies spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.interrupted-run-recovered refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.interrupted-run-recovered verifies spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.iteration refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.notes refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.person-notes-survive refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.person-notes-survive verifies spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.unknown-note-refused refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.unknown-note-refused verifies spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.vault-in-build-path-refused refines spec:consumers.obsidian-vault · declared
  • spec:consumers.obsidian-vault.vault-in-build-path-refused verifies spec:consumers.obsidian-vault · declared
  • spec:consumers.projections-model.roadmap-views refines spec:consumers.projections-model · declared
  • spec:consumers.reader refines spec:consumers.agent-surface · declared
  • spec:consumers.reading-on-ramp refines spec:consumers.agent-surface · declared
  • spec:consumers.reference-projection refines spec:consumers.projections-model · declared
  • spec:consumers.review-perspectives refines spec:consumers.projections-model · declared
  • spec:consumers.spec-studio refines spec:consumers.projections-model · declared
  • spec:consumers.spec-studio.capability-map-page refines spec:consumers.capability-map · declared — the page is the capability map's reading for a person
  • spec:consumers.spec-studio.cited-line-text refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.components refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.data refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.diff-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.export refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.glossary-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.lenses refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.navigation refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.owner-queue refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.pack-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.publisher refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.register-input refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.registers refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.responsive refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.roadmap-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.runs-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.sharing refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.shell refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.slice-page refines spec:consumers.spec-studio · declared
  • spec:consumers.spec-studio.spec-page refines spec:consumers.spec-studio · declared
  • spec:consumers.structural-mermaid refines spec:consumers.projections-model · declared
  • spec:consumers.wholesale-view-rewrite refines spec:consumers.design-review · declared
  • spec:decisions.agent-front-door refines spec:consumers.agent-surface · declared
  • spec:decisions.agent-surface-scripts-graph refines spec:consumers.agent-surface · declared
  • spec:decisions.anchor-binding-grain refines spec:decisions.shipped-projections-frozen · declared — carves out the Design Review's Referenced by list and the census References table
  • spec:decisions.architectural-annotation refines spec:decisions.shipped-projections-frozen · declared — carves out the census Roles, Layers and Contexts tables and the role, layer and context on the Design Review's code unit rows
  • spec:decisions.authored-entry-order refines spec:consumers.design-review · declared
  • spec:decisions.authored-entry-order refines spec:decisions.shipped-projections-frozen · declared — carves out how the Design Review renders open-section entries, as a list in authored order
  • spec:decisions.epics-of-any-kind refines spec:consumers.capability-map · declared — settles which Specs the capability map reads as epics
  • spec:decisions.mcp-deferred refines spec:consumers.projections-model · declared
  • spec:decisions.pack-design-page refines spec:decisions.shipped-projections-frozen · declared — carves out the Pack page, which renders the Pack design
  • spec:decisions.question-key-rendering refines spec:consumers.design-review · declared
  • spec:decisions.question-key-rendering refines spec:decisions.shipped-projections-frozen · declared — carves out one change, an open question's key shown before its text
  • spec:decisions.shipped-projections-frozen refines spec:consumers.projections-model · declared
  • spec:decisions.studio-html-surface refines spec:consumers.spec-studio · declared
  • spec:decisions.studio-web-components refines spec:consumers.spec-studio · declared
  • spec:decisions.vault-owned-folder refines spec:consumers.obsidian-vault · declared — settles which files the vault's generator owns and how it regenerates them
  • spec:observation.run-evidence refines spec:consumers.projections-model · declared — run records inform a view without becoming graph facts
  • spec:observation.run-evidence.absolute-path-joins refines spec:observation.run-evidence · declared
  • spec:observation.run-evidence.absolute-path-joins verifies spec:observation.run-evidence · declared
  • spec:observation.run-evidence.unanchored-file-unjoined refines spec:observation.run-evidence · declared
  • spec:observation.run-evidence.unanchored-file-unjoined verifies spec:observation.run-evidence · declared
  • spec:validation.corpus-rules refines spec:consumers.agent-surface · declared — a corpus scripts the graph through the evaluation sink to report its own findings
  • component:protocol.projections satisfies spec:consumers.projections-model · anchored
  • impl:protocol.adopter-help satisfies spec:consumers.command-line · anchored
  • impl:protocol.agent-surface-cli satisfies spec:consumers.agent-surface · anchored
  • impl:protocol.agent-surface-cli satisfies spec:consumers.command-line · anchored
  • impl:protocol.build-args satisfies spec:consumers.command-line · anchored
  • impl:protocol.capability-map-recipe satisfies spec:consumers.capability-map · anchored
  • impl:protocol.census-page satisfies spec:consumers.census-page · anchored
  • impl:protocol.census-page-cli satisfies spec:consumers.census-page · anchored
  • impl:protocol.design-diff-recipe satisfies spec:consumers.design-diff · anchored
  • impl:protocol.design-review satisfies spec:consumers.design-review · anchored
  • impl:protocol.design-review-codec satisfies spec:consumers.design-review · anchored
  • impl:protocol.generate-command satisfies spec:consumers.command-line · anchored
  • impl:protocol.gherkin-kind-policy satisfies spec:consumers.gherkin-view · anchored
  • impl:protocol.gherkin-view satisfies spec:consumers.gherkin-view · anchored
  • impl:protocol.gherkin-view-cli satisfies spec:consumers.gherkin-view · anchored
  • impl:protocol.mermaid-view satisfies spec:consumers.mermaid-view · anchored
  • impl:protocol.mermaid-view-cli satisfies spec:consumers.mermaid-view · anchored
  • impl:protocol.perspective-filter-recipe satisfies spec:consumers.review-perspectives · anchored
  • impl:protocol.projections-model satisfies spec:consumers.projections-model · anchored
  • impl:protocol.reader satisfies spec:consumers.agent-surface · anchored
  • impl:protocol.run-evidence-recipe satisfies spec:observation.run-evidence · anchored
  • impl:protocol.studio-command satisfies spec:consumers.spec-studio · anchored
  • impl:protocol.studio-data satisfies spec:consumers.spec-studio · anchored
  • impl:protocol.studio-frame satisfies spec:consumers.spec-studio · anchored
  • impl:protocol.studio-intent-panel references spec:consumers.edit-model · anchored
  • impl:protocol.studio-intent-panel-element references spec:consumers.edit-model · anchored
  • impl:protocol.studio-runs-page satisfies spec:observation.run-evidence · anchored
  • impl:protocol.typescript-imports satisfies spec:consumers.impact-graph · anchored
  • impl:protocol.vault-command satisfies spec:consumers.obsidian-vault · anchored
  • impl:protocol.vault-notes satisfies spec:consumers.obsidian-vault · anchored
  • impl:protocol.vault-sync satisfies spec:consumers.obsidian-vault · anchored
  • oracle:protocol.command-line models spec:consumers.command-line · anchored
  • oracle:protocol.run-evidence models spec:observation.run-evidence · anchored
  • oracle:protocol.vault models spec:consumers.obsidian-vault · anchored
  • test:protocol.agent-surface.demand-map-entries verifies spec:consumers.agent-surface.demand-map-entries · anchored
  • test:protocol.agent-surface.scripted-context-body verifies spec:consumers.agent-surface.scripted-context-body · anchored
  • test:protocol.capability-map verifies spec:consumers.capability-map · anchored
  • test:protocol.census-page verifies spec:consumers.census-page · anchored
  • test:protocol.command-line.generate-check-failure verifies spec:consumers.command-line.generate-check-failure · anchored
  • test:protocol.command-line.generate-writes-every-root verifies spec:consumers.command-line.generate-writes-every-root · anchored
  • test:protocol.command-line.verb-help-touches-nothing verifies spec:consumers.command-line.verb-help-touches-nothing · anchored
  • test:protocol.consumers.obsidian-vault.changed-note-refused verifies spec:consumers.obsidian-vault.changed-note-refused · anchored
  • test:protocol.consumers.obsidian-vault.failed-extraction-keeps-notes verifies spec:consumers.obsidian-vault.failed-extraction-keeps-notes · anchored
  • test:protocol.consumers.obsidian-vault.failed-extraction-recovered verifies spec:consumers.obsidian-vault.failed-extraction-recovered · anchored
  • test:protocol.consumers.obsidian-vault.fresh-vault verifies spec:consumers.obsidian-vault.fresh-vault · anchored
  • test:protocol.consumers.obsidian-vault.hidden-file-refused verifies spec:consumers.obsidian-vault.hidden-file-refused · anchored
  • test:protocol.consumers.obsidian-vault.interrupted-run-recovered verifies spec:consumers.obsidian-vault.interrupted-run-recovered · anchored
  • test:protocol.consumers.obsidian-vault.person-notes-survive verifies spec:consumers.obsidian-vault.person-notes-survive · anchored
  • test:protocol.consumers.obsidian-vault.unknown-note-refused verifies spec:consumers.obsidian-vault.unknown-note-refused · anchored
  • test:protocol.consumers.obsidian-vault.vault-in-build-path-refused verifies spec:consumers.obsidian-vault.vault-in-build-path-refused · anchored
  • test:protocol.curation-imports verifies spec:consumers.impact-graph · anchored
  • test:protocol.design-diff-recipe verifies spec:consumers.design-diff · anchored
  • test:protocol.design-review.pure-projection verifies spec:consumers.design-review.pure-projection · anchored
  • test:protocol.gherkin-view verifies spec:consumers.gherkin-view · anchored
  • test:protocol.mermaid-view verifies spec:consumers.mermaid-view · anchored
  • test:protocol.perspective-filter-recipe verifies spec:consumers.review-perspectives · anchored
  • test:protocol.projections-model.publication verifies spec:consumers.projections-model · anchored
  • test:protocol.projections-model.reader verifies spec:consumers.projections-model · anchored
  • test:protocol.projections-model.rendering verifies spec:consumers.projections-model · anchored
  • test:protocol.roadmap-priority verifies spec:consumers.design-diff · anchored
  • test:protocol.run-absolute verifies spec:observation.run-evidence.absolute-path-joins · anchored
  • test:protocol.run-unjoined verifies spec:observation.run-evidence.unanchored-file-unjoined · anchored
  • test:protocol.studio-intent-handoff verifies spec:consumers.edit-model · anchored
  • test:protocol.studio-publisher verifies spec:consumers.spec-studio · anchored

Decisions

  • MCP integration remains deferred

    MCP integration is deferred until a concrete caller establishes its boundary and contract.

  • The shipped projections stay frozen

    Re-specifying the shipped Design Review, census, Mermaid, or Gherkin projection is refused. These four projections are the ruled read surfaces over the one graph. A later decision Spec that supersedes this one replaces the ruling whole; a decision Spec that refines this one narrows it for one projection or one rendering and leaves the rest frozen. Either passes the ADR three-part test.

Runtime
  • component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · context protocol

    Uses

    • component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:192 · layer application · context protocol
    • component:protocol.graph · the one graph and its semantic decisions · src/graph/schema.ts:34 · layer domain · context protocol
    • component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · context protocol
    • component:protocol.notation · the leaf step codec · src/notation/slots.ts:261 · layer domain · context protocol
    • component:protocol.reader · the typed graph contract and body evaluator · src/reader/reader.ts:671 · layer application · context protocol
    • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol
  • impl:protocol.projections-model · pure generated projection page contract · src/projections/design-review.ts:16

    Component: component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · context protocol

    Uses

    None.

Runtime observation: not tracked.

Evidence

Runtime observation: not tracked.

Build attestations: not tracked.

Deployments: not tracked.

Bills of materials: not tracked.

Impact
Relations of spec:consumers.projections-model
The diagram as text
  • spec:consumers.agent-surface: Agents script a visible typed graph
  • spec:consumers.capability-map: The capability map reads every epic and its refinement descendants
  • spec:consumers.census-page: Census renders the runtime taxonomy without becoming a registry
  • spec:consumers.command-line: Every verb answers --help, and one verb writes every projection root
  • spec:consumers.design-diff: Designs are compared between a base commit and the working tree at entry grain
  • spec:consumers.design-review: Design Review renders graph context without becoming a gate
  • spec:consumers.edit-model: Views compose scoped intent instead of patching canonical source
  • spec:consumers.gherkin-view: Gherkin view renders any Spec as a disposable read shape
  • spec:consumers.impact-graph: Mechanical code structure stays inferred and apart from curated intent
  • spec:consumers.mermaid-view: Mermaid renders bounded one-hop and Pack diagrams without becoming a graph browser
  • spec:consumers.obsidian-vault: An Obsidian vault lets a person iterate on designs from the one graph
  • spec:consumers.projections-model: Projections fan out from one graph without becoming truth stores
  • spec:consumers.projections-model.roadmap-views: Roadmap views read releases, baselines and phases from git and the graph
  • spec:consumers.reference-projection: A reference projection serves a reader outside the repository
  • spec:consumers.review-perspectives: A Pack is read from a named perspective
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph
  • spec:consumers.structural-mermaid: Mermaid diagrams can be rooted at code units
  • spec:decisions.mcp-deferred: MCP integration remains deferred
  • spec:decisions.shipped-projections-frozen: The shipped projections stay frozen
  • spec:observation.run-evidence: CI run records are joined to verifiers in a view
  • spec:consumers.projections-model decidedBy spec:decisions.mcp-deferred · declared — MCP integration waits for a concrete caller to establish its boundary and contract
  • spec:consumers.projections-model decidedBy spec:decisions.shipped-projections-frozen · declared
  • spec:consumers.agent-surface refines spec:consumers.projections-model · declared
  • spec:consumers.capability-map refines spec:consumers.projections-model · declared — the capability map projects authored refinement without introducing a grouping
  • spec:consumers.census-page refines spec:consumers.projections-model · declared
  • spec:consumers.command-line refines spec:consumers.projections-model · declared — one verb publishes every projection root from one graph
  • spec:consumers.design-diff refines spec:consumers.projections-model · declared
  • spec:consumers.design-review refines spec:consumers.projections-model · declared
  • spec:consumers.edit-model refines spec:consumers.projections-model · declared
  • spec:consumers.gherkin-view refines spec:consumers.projections-model · declared
  • spec:consumers.impact-graph refines spec:consumers.projections-model · declared
  • spec:consumers.mermaid-view refines spec:consumers.projections-model · declared
  • spec:consumers.obsidian-vault refines spec:consumers.projections-model · declared — a projection for a person who iterates on designs in a notes app
  • spec:consumers.projections-model.roadmap-views refines spec:consumers.projections-model · declared
  • spec:consumers.reference-projection refines spec:consumers.projections-model · declared
  • spec:consumers.review-perspectives refines spec:consumers.projections-model · declared
  • spec:consumers.spec-studio refines spec:consumers.projections-model · declared
  • spec:consumers.structural-mermaid refines spec:consumers.projections-model · declared
  • spec:decisions.mcp-deferred refines spec:consumers.projections-model · declared
  • spec:decisions.shipped-projections-frozen refines spec:consumers.projections-model · declared
  • spec:observation.run-evidence refines spec:consumers.projections-model · declared — run records inform a view without becoming graph facts
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: flowchart. Chosen syntax: labelled flowchart, preserving exact relations, claims and folds.

Rests on

Rested on by

Distance 1

Distance 2

Distance 3

Distance 4

Distance 5

Distance 6

Distance 7

Distance 8

Distance 9

Distance 10

Distance 11

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingMCP integration remains deferred
spec:decisions.mcp-deferred · resolves
declaredMCP integration waits for a concrete caller to establish its boundary and contractNone
decidedBy · outgoingThe shipped projections stay frozen
spec:decisions.shipped-projections-frozen · resolves
declaredNoneNone
refines · incomingAgents script a visible typed graph
spec:consumers.agent-surface · resolves
declaredNoneNone
refines · incomingThe capability map reads every epic and its refinement descendants
spec:consumers.capability-map · resolves
declaredthe capability map projects authored refinement without introducing a groupingNone
refines · incomingCensus renders the runtime taxonomy without becoming a registry
spec:consumers.census-page · resolves
declaredNoneNone
refines · incomingEvery verb answers --help, and one verb writes every projection root
spec:consumers.command-line · resolves
declaredone verb publishes every projection root from one graphNone
refines · incomingDesigns are compared between a base commit and the working tree at entry grain
spec:consumers.design-diff · resolves
declaredNoneNone
refines · incomingDesign Review renders graph context without becoming a gate
spec:consumers.design-review · resolves
declaredNoneNone
refines · incomingViews compose scoped intent instead of patching canonical source
spec:consumers.edit-model · resolves
declaredNoneNone
refines · incomingGherkin view renders any Spec as a disposable read shape
spec:consumers.gherkin-view · resolves
declaredNoneNone
refines · incomingMechanical code structure stays inferred and apart from curated intent
spec:consumers.impact-graph · resolves
declaredNoneNone
refines · incomingMermaid renders bounded one-hop and Pack diagrams without becoming a graph browser
spec:consumers.mermaid-view · resolves
declaredNoneNone
refines · incomingAn Obsidian vault lets a person iterate on designs from the one graph
spec:consumers.obsidian-vault · resolves
declareda projection for a person who iterates on designs in a notes appNone
refines · incomingRoadmap views read releases, baselines and phases from git and the graph
spec:consumers.projections-model.roadmap-views · resolves
declaredNoneNone
refines · incomingA reference projection serves a reader outside the repository
spec:consumers.reference-projection · resolves
declaredNoneNone
refines · incomingA Pack is read from a named perspective
spec:consumers.review-perspectives · resolves
declaredNoneNone
refines · incomingThe Spec Studio is a static HTML workbench over the one graph
spec:consumers.spec-studio · resolves
declaredNoneNone
refines · incomingMermaid diagrams can be rooted at code units
spec:consumers.structural-mermaid · resolves
declaredNoneNone
refines · incomingMCP integration remains deferred
spec:decisions.mcp-deferred · resolves
declaredNoneNone
refines · incomingThe shipped projections stay frozen
spec:decisions.shipped-projections-frozen · resolves
declaredNoneNone
refines · incomingCI run records are joined to verifiers in a view
spec:observation.run-evidence · resolves
declaredrun records inform a view without becoming graph factsNone

Bindings

Implementation binding: present

  • component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · role projection · layer edge · context protocol
  • impl:protocol.projections-model · pure generated projection page contract · src/projections/design-review.ts:16 · role contract · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.projections-model.publication · projection publication tests verify regeneration and diagnostic exit codes · anchored · test/cli.test.ts:58 · test anchor
  • test:protocol.projections-model.reader · reader tests verify composable graph joins without persistence · anchored · test/reader.test.ts:35 · test anchor
  • test:protocol.projections-model.rendering · graph-only rendering tests verify pure disposable projection pages · anchored · test/design-review.test.ts:36 · test anchor

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.