Spec Studio

Agents script a visible typed graph

spec:consumers.agent-surfaceUse Case / Behavior · epicready floor ready

Changed since the base graph base da4b141: altitude

Base input: schema 0.11.0, 405 Specs.

Packs: pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/consumers/agent-surface.sdp.md

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

Agents arrive with a question, and a command for each question would repeat the graph's semantics. The reader and the evaluation sink let a body return the conclusion its caller needs.

Intent
outcome
Let an agent obtain and compose graph context without rebuilding joins or navigating a fixed verb wall.
Behavior
rule line 20 · specs/consumers/agent-surface.sdp.md:20
The agent surface exposes the typed graph through two entrances, the exported reader and the sdp q evaluation sink; the schema is the contract and agents script the graph directly.
rule line 21 · specs/consumers/agent-surface.sdp.md:21
The reader constructs decoded joins and claim taxonomy once, then returns plain composable data without persisting graph state.
rule line 22 · specs/consumers/agent-surface.sdp.md:22
Entry adapters bridge strings, files, and changesets to curated graph context; file-level blast radius names coverage-unknown files rather than implying exhaustive reach.
rule.demandMap line 23 · specs/consumers/agent-surface.sdp.md:23
An agent arrives holding a concept string, a file it is editing, or the changeset a diff touches, and not the Spec id it is looking for, so the surface is designed around those entry points rather than around lookup by id.

spec:consumers.agent-surface.demand-map-entries · enabled

rule.entryAdapters line 24 · specs/consumers/agent-surface.sdp.md:24
The string entry is findByConcept, the file entry is byFile, and the changeset entry is blastRadius, whose answer names every coverage-unknown changed file rather than dropping it into silence.

spec:consumers.agent-surface.demand-map-entries · enabled

rule.noSymbolEntry line 25 · specs/consumers/agent-surface.sdp.md:25
The surface offers no symbol entry: bySymbol would need the exhaustive symbol reach the impact graph defers, and the adapter is absent rather than stubbed so its absence cannot read as a landed capability.

spec:consumers.agent-surface.demand-map-entries · enabled

rule.growByRecipe line 26 · specs/consumers/agent-surface.sdp.md:26
Past those entry adapters the surface grows by recipe and not by verb: a join is frozen into the reader only when a second machine consumer needs it and hand-rolled attempts get it wrong, and every other question stays a body an agent scripts.

no example exercises it

3 unkeyed rules.

Verifying examples

One body reaches every entry point the demand map names, and no symbol entry · spec:consumers.agent-surface.demand-map-entries · ready floor ready

Executable Spec

Given an extraction root the front door derives in process on the invocation
Given the agent holds the concept {concept: "backorder"}, the file {file: "src/create-order.ts"}, and a changeset that also touches the unrecorded file {unrecordedFile: "src/price-book.ts"}
When the agent scripts a body {body: "reaching every entry point the demand map names"} through the front door
Then the front door exits {exitCode: 0} with an empty error stream
Then the concept entry answers with the spec {conceptSpecId: "spec:orders.order-management"}
Then the file entry answers with the spec {fileSpecId: "spec:orders.create-order"}
Then the changeset entry answers with the impacted spec {changesetSpecId: "spec:orders.create-order"}
Then the surface offers a symbol entry: {symbolEntry: false}

Open example

A scripted body returns claim-decoded context, pre-shaped by the body · spec:consumers.agent-surface.scripted-context-body · ready floor ready

Executable Spec

Given an extraction root the front door derives in process on the invocation
Given the corpus binds the spec {specId: "spec:orders.create-order"} to one anchored verifier and one declared-only verifier
When the agent scripts a body {body: "composing that spec's verifier bindings"} through the front door
Then the front door exits {exitCode: 0} with an empty error stream
Then the printed answer is exactly the body's pre-shaped return {printedAnswer: "spec:orders.create-order.empty-cart is a declared verifier · spec:orders.create-order.valid-cart is an enabled verifier"}
Then the anchored verifier {anchoredVerifierId: "spec:orders.create-order.valid-cart"} decodes as enabled while the declared-only verifier {declaredVerifierId: "spec:orders.create-order.empty-cart"} does not

Open example

Example space

Given an extraction root the front door derives in process on the invocation
Given the corpus binds the spec {specId:string} to one anchored verifier and one declared-only verifier
Given the agent holds the concept {concept:string}, the file {file:string}, and a changeset that also touches the unrecorded file {unrecordedFile:string}
When the agent scripts a body {body:"composing that spec's verifier bindings"|"reaching every entry point the demand map names"} through the front door
Then the front door exits {exitCode:number} with an empty error stream
Then the printed answer is exactly the body's pre-shaped return {printedAnswer:string}
Then the anchored verifier {anchoredVerifierId:string} decodes as enabled while the declared-only verifier {declaredVerifierId:string} does not
Then the concept entry answers with the spec {conceptSpecId:string}
Then the file entry answers with the spec {fileSpecId:string}
Then the changeset entry answers with the impacted spec {changesetSpecId:string}
Then the surface offers a symbol entry: {symbolEntry:boolean}
Verification

Verifier bindings

  • spec:consumers.agent-surface.demand-map-entries · One body reaches every entry point the demand map names, and no symbol entry · declared · example enabled · specs/consumers/agent-surface.demand-map-entries.sdp.md

    External run evidence from test/self-hosting-consumers.test.ts

    Test anchors: test:protocol.agent-surface.demand-map-entries, test:protocol.agent-surface.scripted-context-body, test:protocol.reader.changeset-entry, test:protocol.reader.concept-entry, test:protocol.reader.file-entry. Specs verified by those bindings: spec:consumers.agent-surface, spec:consumers.agent-surface.demand-map-entries, spec:consumers.agent-surface.scripted-context-body, spec:consumers.reader, spec:consumers.reader.changeset-entry, spec:consumers.reader.concept-entry, spec:consumers.reader.file-entry.

    Run 1: external run evidence from vitest 4.1.10

    Build: CI 380 · Branch: feature/roadmap-and-slices-v0 · Commit: 34909918bf0be0e849959644401797191cae379f · Start: 2026-10-22T17:40:31.456Z · Stop: 2026-10-22T17:42:16.171Z

    NameSuiteResultDuration
    executes the bound example against a fresh worldA scripted body returns claim-decoded context, pre-shaped by the body (spec:consumers.agent-surface.scripted-context-body)passed55.03 ms
    executes the bound example against a fresh worldOne body reaches every entry point the demand map names, and no symbol entry (spec:consumers.agent-surface.demand-map-entries)passed23.29 ms
    executes the bound example against a fresh worldA concept recorded only inside a Spec's sections is still reached, and the field is named (spec:consumers.reader.concept-entry)passed12.65 ms
    executes the bound example against a fresh worldA source file reaches the Spec its binding names, and a carrier reaches its own Spec (spec:consumers.reader.file-entry)passed11.95 ms
    executes the bound example against a fresh worldA changeset names what it reaches, why, and what it cannot see (spec:consumers.reader.changeset-entry)passed18.11 ms
  • spec:consumers.agent-surface.scripted-context-body · A scripted body returns claim-decoded context, pre-shaped by the body · declared · example enabled · specs/consumers/agent-surface.scripted-context-body.sdp.md

Example space

  • specId · string · declared by the corpus binds the spec {specId} to one anchored verifier and one declared-only verifier
  • concept · string · declared by the agent holds the concept {concept}, the file {file}, and a changeset that also touches the unrecorded file {unrecordedFile}
  • file · string · declared by the agent holds the concept {concept}, the file {file}, and a changeset that also touches the unrecorded file {unrecordedFile}
  • unrecordedFile · string · declared by the agent holds the concept {concept}, the file {file}, and a changeset that also touches the unrecorded file {unrecordedFile}
  • body · "composing that spec's verifier bindings" | "reaching every entry point the demand map names" · declared by the agent scripts a body {body} through the front door

Bound points

ExamplespecIdconceptfileunrecordedFilebody
spec:consumers.agent-surface.demand-map-entriesunbound"backorder""src/create-order.ts""src/price-book.ts""reaching every entry point the demand map names"
spec:consumers.agent-surface.scripted-context-body"spec:orders.create-order"unboundunboundunbound"composing that spec's verifier bindings"

Oracle binding: none

Coverage

specId: "spec:orders.create-order" · spec:consumers.agent-surface.scripted-context-body · not enumerable

concept: "backorder" · spec:consumers.agent-surface.demand-map-entries · not enumerable

file: "src/create-order.ts" · spec:consumers.agent-surface.demand-map-entries · not enumerable

unrecordedFile: "src/price-book.ts" · spec:consumers.agent-surface.demand-map-entries · not enumerable

body
Declared valueExamples
"composing that spec's verifier bindings"spec:consumers.agent-surface.scripted-context-body
"reaching every entry point the demand map names"spec:consumers.agent-surface.demand-map-entries

Unbound

Design view

Requirement drawing

Requirement drawing for spec:consumers.agent-surface

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

The diagram as text
  • spec:consumers.agent-surface: Agents script a visible typed graph · 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.demand-map-entries: One body reaches every entry point the demand map names, and no symbol entry · 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.agent-surface.scripted-context-body: A scripted body returns claim-decoded context, pre-shaped by the body · declared Spec
  • spec:consumers.context-bundle: A context bundle is composed per invocation within a stated budget · 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: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:validation.corpus-rules: Corpus-authored rules run on the one validation path · declared Spec
  • spec:consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run: The shipped dependency-cycles file fails a rules run on a cycle · declared Spec
  • spec:consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run: The shipped address-resolution file fails a rules run on an address that names no entry · declared Spec
  • spec:consumers.agent-surface.evaluation-sink.exported-evaluator: A script holding a graph runs a shipped recipe through the exported evaluator · declared Spec
  • spec:consumers.agent-surface.evaluation-sink.recipe-call: A body calls a shipped recipe and returns its answer unchanged · declared Spec
  • spec:consumers.agent-surface.evaluation-sink.unknown-recipe: A call to a recipe the catalog does not hold fails the body · declared Spec
  • spec:consumers.context-bundle.oversized-member-named: A member larger than the budget is named, and no part is returned · declared Spec
  • spec:consumers.context-bundle.parts-cover-the-pack: A Pack too large for one bundle reads whole in parts · declared Spec
  • spec:consumers.reader.changeset-entry: A changeset names what it reaches, why, and what it cannot see · declared Spec
  • spec:consumers.reader.concept-entry: A concept recorded only inside a Spec's sections is still reached, and the field is named · declared Spec
  • spec:consumers.reader.file-entry: A source file reaches the Spec its binding names, and a carrier reaches its own Spec · declared Spec
  • spec:validation.corpus-rules.copies-contain-changes: A rules file that empties its graph leaves the next file's graph whole · declared Spec
  • spec:validation.corpus-rules.error-finding-fails: An error from a corpus rule fails validation and leaves the Protocol's line alone · declared Spec
  • spec:validation.corpus-rules.malformed-finding-fails: A finding with no subject fails its rules file · declared Spec
  • spec:validation.corpus-rules.params-edit-starts-a-cycle: Editing a parameter file starts a cycle that reads the new parameters · declared Spec
  • spec:validation.corpus-rules.rules-edit-starts-a-cycle: Rewriting a rules file under node_modules starts a cycle that runs the new body · declared Spec
  • spec:validation.corpus-rules.unreadable-params-fail-one-file: A parameter file that stops being JSON fails only its own rules file, and the watcher runs on · declared Spec
  • spec:validation.corpus-rules.warning-finding-informs: A warning from a corpus rule informs and passes · declared Spec
  • spec:consumers.projections-model: Projections fan out from one graph without becoming truth stores · declared Spec
  • spec:consumers.agent-surface.address-and-cycle-recipes: Address resolution and dependency cycles stay executable graph recipes · declared Spec
  • spec:consumers.agent-surface.design-recipes: Design work reads its answers from catalog recipes · declared Spec
  • spec:consumers.pack-design: The Pack context carries the Pack's design · declared Spec
  • spec:consumers.studio-on-ramp: The Studio skill teaches agents to publish, share and read the Spec Studio · declared Spec
  • spec:consumers.vault-on-ramp: The vault skill teaches agents to keep an Obsidian vault of the graph · declared Spec
  • spec:validation.architecture-constraints: Declared architecture rules are checked against anchored structure · declared Spec
  • spec:validation.external-registers: A corpus checks the register tokens its prose cites · declared Spec
  • api:protocol.evaluate-body: evaluates bodies and shipped recipes over one in-memory reader, graph and report · anchored code · src/reader/evaluate-body.ts:120
  • component:protocol.reader: the typed graph contract and body evaluator · anchored code · src/reader/reader.ts:671
  • 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.answer-shape-recipes: asserts realization of the catalog's compact and detailed answers · anchored code · test/recipes.test.ts:6214
  • impl:protocol.authoring-grammar-recipes: asserts the authoring grammar's realization in docs/agent-surface/recipes.md · anchored code · test/recipes.test.ts:6597
  • impl:protocol.authoring-recipes: asserts realization of the shipped authoring recipe catalog · anchored code · test/recipes.test.ts:335
  • impl:protocol.build-artifacts: the build step that writes each catalog recipe to dist/recipes and records the build commit beside the CLI · anchored code · src/cli/build-artifacts.ts:182
  • impl:protocol.build-pipeline-query: runQuery reads one body, derives the graph once for the reader, raw graph and report, and prints the return or refuses on stderr · anchored code · src/cli/q-command.ts:212
  • impl:protocol.context-bundle-recipe: realizes the context bundle in the shipped recipe catalog · anchored code · test/iteration-recipes.test.ts:765
  • impl:protocol.corpus-rule-runner: runs selected corpus rules and separates their failures · anchored code · src/cli/corpus-rules.ts:65
  • impl:protocol.corpus-rules: runs copied rule bodies after Protocol validation and composes the separate corpus report, output and exit · anchored code · src/cli/validate-view-command.ts:79
  • impl:protocol.parameter-codec: decodes recipe parameters and refuses duplicate keys · anchored code · src/cli/params.ts:121
  • impl:protocol.query-params: reads --params as JSON data and injects it as the sink's fourth binding, params · anchored code · src/cli/q-command.ts:71
  • impl:protocol.reader: typed graph queries, entry adapters and context joins · anchored code · src/reader/reader.ts:687
  • impl:protocol.reading-on-ramp: asserts realization of the shipped graph-reading skill document · anchored code · test/skills.test.ts:662
  • impl:protocol.recipe-parameters-catalog: asserts realization of the catalog recipes that read their parameter from params · anchored code · test/recipes.test.ts:4405
  • impl:protocol.register-recipes: asserts realization of the shipped register recipes · anchored code · test/recipes.test.ts:2057
  • impl:protocol.validate-watch: watches carrier directories and coalesces events into a pending validation rerun · anchored code · src/cli/validate-watch.ts:591
  • oracle:protocol.consumers.agent-surface.evaluation-sink: oracle:protocol.consumers.agent-surface.evaluation-sink · anchored oracle binding · test/reach-examples.test.ts:92
  • oracle:protocol.context-bundle-parts: oracle:protocol.context-bundle-parts · anchored oracle binding · test/self-hosting-bundle-parts.test.ts:55
  • oracle:protocol.corpus-rules-watch: oracle:protocol.corpus-rules-watch · anchored oracle binding · test/reach-examples.test.ts:247
  • oracle:protocol.reader-entry-map: expected reader outcome for each graph entry mode · anchored oracle binding · test/self-hosting-consumers.oracle.ts:8
  • 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.answer-shape-recipes: test:protocol.answer-shape-recipes · anchored test binding · binding present · test/recipes.test.ts:6220
  • test:protocol.authoring-recipes: recipe checks verify promotion preflight, the verifier audit and the lower ladder · anchored test binding · binding present · test/recipes.test.ts:341
  • test:protocol.consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run: test:protocol.consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run · anchored test binding · binding present · test/reach-examples.test.ts:430
  • test:protocol.consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run: test:protocol.consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run · anchored test binding · binding present · test/reach-examples.test.ts:438
  • test:protocol.consumers.agent-surface.evaluation-sink.exported-evaluator: test:protocol.consumers.agent-surface.evaluation-sink.exported-evaluator · anchored test binding · binding present · test/reach-examples.test.ts:416
  • test:protocol.consumers.agent-surface.evaluation-sink.recipe-call: test:protocol.consumers.agent-surface.evaluation-sink.recipe-call · anchored test binding · binding present · test/reach-examples.test.ts:404
  • test:protocol.consumers.agent-surface.evaluation-sink.unknown-recipe: test:protocol.consumers.agent-surface.evaluation-sink.unknown-recipe · anchored test binding · binding present · test/reach-examples.test.ts:410
  • test:protocol.context-bundle-recipe: test:protocol.context-bundle-recipe · anchored test binding · binding present · test/iteration-recipes.test.ts:772
  • test:protocol.context-bundle.oversized-member-named: test:protocol.context-bundle.oversized-member-named · anchored test binding · binding present · test/self-hosting-bundle-parts.test.ts:148
  • test:protocol.context-bundle.parts-cover-the-pack: test:protocol.context-bundle.parts-cover-the-pack · anchored test binding · binding present · test/self-hosting-bundle-parts.test.ts:115
  • test:protocol.evaluation-sink: front-door checks verify how the sink takes a body, prints its return and refuses · anchored test binding · binding present · test/cli-q.test.ts:81
  • test:protocol.query-answer-shapes: test:protocol.query-answer-shapes · anchored test binding · binding present · test/cli-q.test.ts:730
  • test:protocol.query-params: front-door checks verify --params as the fourth binding and its refusals · anchored test binding · binding present · test/cli-q.test.ts:509
  • test:protocol.reader.changeset-entry: the changeset-entry point verifies impact reasons, at-risk edges, and coverage-unknown · anchored test binding · binding present · test/self-hosting-consumers.test.ts:516
  • test:protocol.reader.concept-entry: the concept-entry point verifies the string bridge and the field it names · anchored test binding · binding present · test/self-hosting-consumers.test.ts:498
  • test:protocol.reader.file-entry: the file-entry point verifies both halves of the file bridge · anchored test binding · binding present · test/self-hosting-consumers.test.ts:507
  • test:protocol.reading-on-ramp: skill-asset checks verify the graph-reading on-ramp · anchored test binding · binding present · test/skills.test.ts:669
  • test:protocol.recipe-parameters: recipe checks verify parameters passed as data and the shipped recipe files · anchored test binding · binding present · test/recipes.test.ts:4411
  • test:protocol.register-recipes: recipe checks verify the register recipes · anchored test binding · binding present · test/recipes.test.ts:2068
  • test:protocol.validation.corpus-rules.copies-contain-changes: test:protocol.validation.corpus-rules.copies-contain-changes · anchored test binding · binding present · test/self-hosting-corpus-checks.test.ts:318
  • test:protocol.validation.corpus-rules.error-finding-fails: test:protocol.validation.corpus-rules.error-finding-fails · anchored test binding · binding present · test/self-hosting-corpus-checks.test.ts:325
  • test:protocol.validation.corpus-rules.malformed-finding-fails: test:protocol.validation.corpus-rules.malformed-finding-fails · anchored test binding · binding present · test/self-hosting-corpus-checks.test.ts:332
  • test:protocol.validation.corpus-rules.params-edit-starts-a-cycle: test:protocol.validation.corpus-rules.params-edit-starts-a-cycle · anchored test binding · binding present · test/reach-examples.test.ts:454
  • test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle: test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle · anchored test binding · binding present · test/reach-examples.test.ts:448
  • test:protocol.validation.corpus-rules.unreadable-params-fail-one-file: test:protocol.validation.corpus-rules.unreadable-params-fail-one-file · anchored test binding · binding present · test/reach-examples.test.ts:460
  • test:protocol.validation.corpus-rules.warning-finding-informs: test:protocol.validation.corpus-rules.warning-finding-informs · anchored test binding · binding present · test/self-hosting-corpus-checks.test.ts:339
  • spec:consumers.agent-surface refines spec:consumers.projections-model · declared
  • spec:consumers.agent-surface.address-and-cycle-recipes refines spec:consumers.agent-surface.register-recipes · declared
  • spec:consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run refines spec:consumers.agent-surface.address-and-cycle-recipes · declared
  • spec:consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run verifies spec:consumers.agent-surface.address-and-cycle-recipes · declared
  • spec:consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run verifies spec:validation.corpus-rules · declared
  • spec:consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run refines spec:consumers.agent-surface.address-and-cycle-recipes · declared
  • spec:consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run verifies spec:consumers.agent-surface.address-and-cycle-recipes · declared
  • spec:consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run verifies spec:validation.corpus-rules · 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.design-recipes refines spec:consumers.agent-surface.register-recipes · declared
  • spec:consumers.agent-surface.evaluation-sink refines spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.evaluation-sink.exported-evaluator refines spec:consumers.agent-surface.evaluation-sink · declared
  • spec:consumers.agent-surface.evaluation-sink.exported-evaluator verifies spec:consumers.agent-surface.evaluation-sink · declared
  • spec:consumers.agent-surface.evaluation-sink.recipe-call refines spec:consumers.agent-surface.evaluation-sink · declared
  • spec:consumers.agent-surface.evaluation-sink.recipe-call verifies spec:consumers.agent-surface.evaluation-sink · declared
  • spec:consumers.agent-surface.evaluation-sink.unknown-recipe refines spec:consumers.agent-surface.evaluation-sink · declared
  • spec:consumers.agent-surface.evaluation-sink.unknown-recipe verifies spec:consumers.agent-surface.evaluation-sink · 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.context-bundle refines spec:consumers.agent-surface · declared
  • spec:consumers.context-bundle.oversized-member-named refines spec:consumers.context-bundle · declared
  • spec:consumers.context-bundle.oversized-member-named verifies spec:consumers.context-bundle · declared
  • spec:consumers.context-bundle.parts-cover-the-pack refines spec:consumers.context-bundle · declared
  • spec:consumers.context-bundle.parts-cover-the-pack verifies spec:consumers.context-bundle · declared
  • spec:consumers.pack-design refines spec:consumers.reader · declared
  • spec:consumers.reader refines spec:consumers.agent-surface · declared
  • spec:consumers.reader.changeset-entry refines spec:consumers.reader · declared
  • spec:consumers.reader.changeset-entry verifies spec:consumers.reader · declared
  • spec:consumers.reader.concept-entry refines spec:consumers.reader · declared
  • spec:consumers.reader.concept-entry verifies spec:consumers.reader · declared
  • spec:consumers.reader.file-entry refines spec:consumers.reader · declared
  • spec:consumers.reader.file-entry verifies spec:consumers.reader · declared
  • spec:consumers.reading-on-ramp refines spec:consumers.agent-surface · declared
  • spec:consumers.studio-on-ramp refines spec:consumers.reading-on-ramp · declared — a Studio page is a person's reading of the one graph, and the skill sends an agent from a page to the graph behind it
  • spec:consumers.vault-on-ramp refines spec:consumers.reading-on-ramp · declared — a vault note is a person's reading of the one graph, and the skill turns what the person writes beside it into checked edits
  • spec:decisions.agent-front-door refines spec:consumers.agent-surface · declared
  • spec:decisions.agent-surface-scripts-graph refines spec:consumers.agent-surface · declared
  • spec:validation.architecture-constraints refines spec:validation.corpus-rules · declared — the architecture walk is a corpus-selected rule over anchored structure
  • spec:validation.corpus-rules refines spec:consumers.agent-surface · declared — a corpus scripts the graph through the evaluation sink to report its own findings
  • spec:validation.corpus-rules.copies-contain-changes refines spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.copies-contain-changes verifies spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.error-finding-fails refines spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.error-finding-fails verifies spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.malformed-finding-fails refines spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.malformed-finding-fails verifies spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.params-edit-starts-a-cycle refines spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.params-edit-starts-a-cycle verifies spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.rules-edit-starts-a-cycle refines spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.rules-edit-starts-a-cycle verifies spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.unreadable-params-fail-one-file refines spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.unreadable-params-fail-one-file verifies spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.warning-finding-informs refines spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.warning-finding-informs verifies spec:validation.corpus-rules · declared
  • spec:validation.external-registers refines spec:validation.corpus-rules · declared — external-register checks run as corpus-selected rules
  • api:protocol.evaluate-body satisfies spec:consumers.agent-surface.evaluation-sink · anchored
  • component:protocol.reader satisfies spec:consumers.reader · anchored
  • impl:protocol.agent-surface-cli satisfies spec:consumers.agent-surface · anchored
  • impl:protocol.answer-shape-recipes satisfies spec:consumers.agent-surface.answer-shapes · anchored
  • impl:protocol.authoring-grammar-recipes references spec:consumers.agent-surface.answer-shapes · anchored
  • impl:protocol.authoring-recipes satisfies spec:consumers.agent-surface.authoring-recipes · anchored
  • impl:protocol.build-artifacts satisfies spec:consumers.agent-surface.recipe-parameters · anchored
  • impl:protocol.build-pipeline-query satisfies spec:consumers.agent-surface.evaluation-sink · anchored
  • impl:protocol.context-bundle-recipe satisfies spec:consumers.context-bundle · anchored
  • impl:protocol.corpus-rule-runner satisfies spec:validation.corpus-rules · anchored
  • impl:protocol.corpus-rules satisfies spec:validation.corpus-rules · anchored
  • impl:protocol.parameter-codec satisfies spec:consumers.agent-surface.recipe-parameters · anchored
  • impl:protocol.query-params satisfies spec:consumers.agent-surface.recipe-parameters · anchored
  • impl:protocol.reader satisfies spec:consumers.reader · anchored
  • impl:protocol.reader satisfies spec:consumers.agent-surface · anchored
  • impl:protocol.reader references spec:consumers.agent-surface.answer-shapes · anchored
  • impl:protocol.reading-on-ramp satisfies spec:consumers.reading-on-ramp · anchored
  • impl:protocol.recipe-parameters-catalog satisfies spec:consumers.agent-surface.recipe-parameters · anchored
  • impl:protocol.register-recipes satisfies spec:consumers.agent-surface.register-recipes · anchored
  • impl:protocol.validate-watch satisfies spec:validation.corpus-rules · anchored
  • oracle:protocol.consumers.agent-surface.evaluation-sink models spec:consumers.agent-surface.evaluation-sink · anchored
  • oracle:protocol.context-bundle-parts models spec:consumers.context-bundle · anchored
  • oracle:protocol.corpus-rules-watch models spec:validation.corpus-rules · anchored
  • oracle:protocol.reader-entry-map models spec:consumers.reader · 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.answer-shape-recipes verifies spec:consumers.agent-surface.answer-shapes · anchored
  • test:protocol.authoring-recipes verifies spec:consumers.agent-surface.authoring-recipes · anchored
  • test:protocol.consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run verifies spec:consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run · anchored
  • test:protocol.consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run verifies spec:consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run · anchored
  • test:protocol.consumers.agent-surface.evaluation-sink.exported-evaluator verifies spec:consumers.agent-surface.evaluation-sink.exported-evaluator · anchored
  • test:protocol.consumers.agent-surface.evaluation-sink.recipe-call verifies spec:consumers.agent-surface.evaluation-sink.recipe-call · anchored
  • test:protocol.consumers.agent-surface.evaluation-sink.unknown-recipe verifies spec:consumers.agent-surface.evaluation-sink.unknown-recipe · anchored
  • test:protocol.context-bundle-recipe verifies spec:consumers.context-bundle · anchored
  • test:protocol.context-bundle.oversized-member-named verifies spec:consumers.context-bundle.oversized-member-named · anchored
  • test:protocol.context-bundle.parts-cover-the-pack verifies spec:consumers.context-bundle.parts-cover-the-pack · anchored
  • test:protocol.evaluation-sink verifies spec:consumers.agent-surface.evaluation-sink · anchored
  • test:protocol.query-answer-shapes verifies spec:consumers.agent-surface.evaluation-sink · anchored
  • test:protocol.query-answer-shapes verifies spec:consumers.agent-surface.recipe-parameters · anchored
  • test:protocol.query-params verifies spec:consumers.agent-surface.recipe-parameters · anchored
  • test:protocol.reader.changeset-entry verifies spec:consumers.reader.changeset-entry · anchored
  • test:protocol.reader.concept-entry verifies spec:consumers.reader.concept-entry · anchored
  • test:protocol.reader.file-entry verifies spec:consumers.reader.file-entry · anchored
  • test:protocol.reading-on-ramp verifies spec:consumers.reading-on-ramp · anchored
  • test:protocol.recipe-parameters verifies spec:consumers.agent-surface.recipe-parameters · anchored
  • test:protocol.register-recipes verifies spec:consumers.agent-surface.register-recipes · anchored
  • test:protocol.validation.corpus-rules.copies-contain-changes verifies spec:validation.corpus-rules.copies-contain-changes · anchored
  • test:protocol.validation.corpus-rules.error-finding-fails verifies spec:validation.corpus-rules.error-finding-fails · anchored
  • test:protocol.validation.corpus-rules.malformed-finding-fails verifies spec:validation.corpus-rules.malformed-finding-fails · anchored
  • test:protocol.validation.corpus-rules.params-edit-starts-a-cycle verifies spec:validation.corpus-rules.params-edit-starts-a-cycle · anchored
  • test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle verifies spec:validation.corpus-rules.rules-edit-starts-a-cycle · anchored
  • test:protocol.validation.corpus-rules.unreadable-params-fail-one-file verifies spec:validation.corpus-rules.unreadable-params-fail-one-file · anchored
  • test:protocol.validation.corpus-rules.warning-finding-informs verifies spec:validation.corpus-rules.warning-finding-informs · anchored

Decisions

Runtime
  • component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:32 · layer edge · context protocol

    Uses

    • component:protocol.adapters · external runtime and source adapters · src/adapters/vitest.ts:23 · layer adapter · context protocol
    • component:protocol.codegen · contracts and registrar output · src/codegen/contracts.ts:633 · layer application · context protocol
    • 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.import · canonical conversion with a fidelity boundary · src/import/import.ts:45 · layer application · context protocol
    • component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · context protocol
    • component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · 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
  • component:protocol.reader · the typed graph contract and body evaluator · src/reader/reader.ts:671 · layer application · context protocol

    Uses

    • 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.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol
  • impl:protocol.agent-surface-cli · CLI verb dispatcher and agent-surface front of the package CLI · src/cli/sdp.ts:94

    Component: component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:32 · layer edge · context protocol

    Uses

    None.

  • impl:protocol.reader · typed graph queries, entry adapters and context joins · src/reader/reader.ts:687

    Component: component:protocol.reader · the typed graph contract and body evaluator · src/reader/reader.ts:671 · layer application · context protocol

    Uses

    • impl:protocol.delivery-facts · computes delivery facts from resolving binding edges · src/graph/delivery-facts.ts:65
    • impl:protocol.next-rung-floor · evaluates the floor for a target rung and names the targets that break a dependency · src/validate/readiness-floor.ts:603

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.agent-surface
  • E5: verifies · declared (2 unit edges)
The diagram as text
  • spec:consumers.agent-surface: Agents script a visible typed graph
  • spec:consumers.agent-surface.answer-shapes: Recipe answers fit an agent's context and explain their misses
  • spec:consumers.agent-surface.authoring-recipes: Authoring questions stay executable graph recipes
  • spec:consumers.agent-surface.demand-map-entries: One body reaches every entry point the demand map names, and no symbol entry
  • spec:consumers.agent-surface.evaluation-sink: The evaluation sink runs one body and prints its return
  • spec:consumers.agent-surface.recipe-parameters: Recipes take parameters as data and ship as runnable files
  • spec:consumers.agent-surface.register-recipes: Register questions stay executable graph recipes
  • spec:consumers.agent-surface.scripted-context-body: A scripted body returns claim-decoded context, pre-shaped by the body
  • spec:consumers.context-bundle: A context bundle is composed per invocation within a stated budget
  • spec:consumers.projections-model: Projections fan out from one graph without becoming truth stores
  • spec:consumers.reader: The reader bridges agent entry points to composable graph context
  • spec:consumers.reading-on-ramp: The reading skill teaches agents to query the graph
  • spec:decisions.agent-front-door: The agent front door is one evaluation sink over the exported reader
  • spec:decisions.agent-surface-scripts-graph: Agents script the visible graph
  • spec:validation.corpus-rules: Corpus-authored rules run on the one validation path
  • spec:consumers.agent-surface decidedBy spec:decisions.agent-front-door · declared
  • spec:consumers.agent-surface decidedBy spec:decisions.agent-surface-scripts-graph · declared
  • spec:consumers.agent-surface refines spec:consumers.projections-model · declared
  • spec:validation.corpus-rules dependsOn spec:consumers.agent-surface · 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.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.context-bundle refines spec:consumers.agent-surface · declared
  • spec:consumers.reader refines spec:consumers.agent-surface · declared
  • spec:consumers.reading-on-ramp refines spec:consumers.agent-surface · 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:validation.corpus-rules refines spec:consumers.agent-surface · declared — a corpus scripts the graph through the evaluation sink to report its own findings
  • spec:consumers.agent-surface.demand-map-entries verifies spec:consumers.agent-surface · declared
  • spec:consumers.agent-surface.scripted-context-body verifies spec:consumers.agent-surface · declared
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

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingThe agent front door is one evaluation sink over the exported reader
spec:decisions.agent-front-door · resolves
declaredNoneNone
decidedBy · outgoingAgents script the visible graph
spec:decisions.agent-surface-scripts-graph · resolves
declaredNoneNone
refines · outgoingProjections fan out from one graph without becoming truth stores
spec:consumers.projections-model · resolves
declaredNoneNone
dependsOn · incomingCorpus-authored rules run on the one validation path
spec:validation.corpus-rules · resolves
declaredNoneNone
refines · incomingRecipe answers fit an agent's context and explain their misses
spec:consumers.agent-surface.answer-shapes · resolves
declaredNoneNone
refines · incomingAuthoring questions stay executable graph recipes
spec:consumers.agent-surface.authoring-recipes · resolves
declaredNoneNone
refines · incomingOne body reaches every entry point the demand map names, and no symbol entry
spec:consumers.agent-surface.demand-map-entries · resolves
declaredNoneNone
refines · incomingThe evaluation sink runs one body and prints its return
spec:consumers.agent-surface.evaluation-sink · resolves
declaredNoneNone
refines · incomingRecipes take parameters as data and ship as runnable files
spec:consumers.agent-surface.recipe-parameters · resolves
declaredNoneNone
refines · incomingRegister questions stay executable graph recipes
spec:consumers.agent-surface.register-recipes · resolves
declaredNoneNone
refines · incomingA scripted body returns claim-decoded context, pre-shaped by the body
spec:consumers.agent-surface.scripted-context-body · resolves
declaredNoneNone
refines · incomingA context bundle is composed per invocation within a stated budget
spec:consumers.context-bundle · resolves
declaredNoneNone
refines · incomingThe reader bridges agent entry points to composable graph context
spec:consumers.reader · resolves
declaredNoneNone
refines · incomingThe reading skill teaches agents to query the graph
spec:consumers.reading-on-ramp · resolves
declaredNoneNone
refines · incomingThe agent front door is one evaluation sink over the exported reader
spec:decisions.agent-front-door · resolves
declaredNoneNone
refines · incomingAgents script the visible graph
spec:decisions.agent-surface-scripts-graph · resolves
declaredNoneNone
refines · incomingCorpus-authored rules run on the one validation path
spec:validation.corpus-rules · resolves
declareda corpus scripts the graph through the evaluation sink to report its own findingsNone
verifies · incomingOne body reaches every entry point the demand map names, and no symbol entry
spec:consumers.agent-surface.demand-map-entries · resolves
declaredNonedemandMap, entryAdapters, noSymbolEntry
verifies · incomingA scripted body returns claim-decoded context, pre-shaped by the body
spec:consumers.agent-surface.scripted-context-body · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.agent-surface-cli · CLI verb dispatcher and agent-surface front of the package CLI · src/cli/sdp.ts:94 · role service · component component:protocol.cli · layer edge · context protocol
  • impl:protocol.reader · typed graph queries, entry adapters and context joins · src/reader/reader.ts:687 · role reader · component component:protocol.reader · layer application · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.