Spec Studio

The Studio reads two named inputs beside the graph, a base graph and run records

spec:consumers.spec-studio.data.inputsContract · storyready floor ready

Packs: pack:self-hosting-v1, pack:spec-studio-v1

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

Findings: no errors, no warnings

specs/consumers/spec-studio.data.inputs.sdp.md

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

Two inputs may ride beside the graph: the graph an earlier commit wrote, so a page can show what changed since, and CI run records, so a reviewer reads what ran beside the verifier bindings. Each is named on the command line and on every page that shows it, and neither answers in the graph's name. Without them the page set is what the graph alone writes.

Intent
outcome
Let the Studio's build read a base graph and run records beside the graph, each named where it shows, while the graph alone writes the page set when neither is given.
Contract
rule.namedInputs line 25 · specs/consumers/spec-studio.data.inputs.sdp.md:25
Beside the graph the build reads at most two inputs, each named on the command line: a base graph, the graph object sdp build wrote at an earlier commit, which reaches recipe 35 as params.base; and run records, each one Common Test Report Format document, which reach recipe 45 as params.runs. The build reads neither in any other way.

spec:consumers.spec-studio.data.inputs.both-given · enabled, spec:consumers.spec-studio.data.inputs.graph-only · enabled

rule.inputFlags line 26 · specs/consumers/spec-studio.data.inputs.sdp.md:26
The studio verb also takes --base PATH, naming the base graph, a JSON file sdp build wrote; --base-label TEXT, the words that name the base graph on its pages; and --runs PATH, naming one run record, a JSON file in the Common Test Report Format, repeatable, the records keeping the order of their flags. --base-label without --base, or --base given twice, is refused.

spec:consumers.spec-studio.data.inputs.both-given · enabled

rule.inputPlacement line 27 · specs/consumers/spec-studio.data.inputs.sdp.md:27
Before extraction or output cleanup, the command refuses an input path that the build could write or remove, including a path beneath a projection root and an alias resolving to such a path; it reports the flag and path, exits 1 and changes no file.

no example exercises it

rule.unreadableInput line 28 · specs/consumers/spec-studio.data.inputs.sdp.md:28
An input file that cannot be read or does not hold JSON refuses the run before extraction, with exit 1 and one line on stderr naming the flag and the path; a JSON value a recipe cannot read shows on its page as that recipe's diagnostics.

no example exercises it

rule.inputPages line 29 · specs/consumers/spec-studio.data.inputs.sdp.md:29
An input adds pages and page sections, never a data file: the base graph adds diff.html and the changed-since-base sections of the Spec and Pack pages, and run records add runs.html and the run rows of the tests lens and the verification panels.

spec:consumers.spec-studio.data.inputs.both-given · enabled, spec:consumers.spec-studio.data.inputs.graph-only · enabled

rule.inputNaming line 30 · specs/consumers/spec-studio.data.inputs.sdp.md:30
A page that shows an input names it in words, the base graph by its label when it was given one, its schema version and its Spec count, and a run as spec:consumers.spec-studio.runs-page names it; no page holds an input's path.

spec:consumers.spec-studio.data.inputs.both-given · enabled

rule.inputsNeverGraph line 31 · specs/consumers/spec-studio.data.inputs.sdp.md:31
An input never becomes graph data, a delivery fact, a finding, a rung or a verdict: no page counts a run toward a binding, and no difference from the base moves a rung.

spec:consumers.spec-studio.data.inputs.both-given · enabled

rule.inputsUntouched line 32 · specs/consumers/spec-studio.data.inputs.sdp.md:32
A run leaves every input file byte-identical.

no example exercises it

rule.sameInputsSameBytes line 33 · specs/consumers/spec-studio.data.inputs.sdp.md:33
Without inputs the page set is the one the graph alone writes; with them, the same graph and the same input bytes and labels write the same page set, byte for byte, and a value an input carries, such as a run's commit and times, shows only on the pages that name that input.

spec:consumers.spec-studio.data.inputs.both-given · enabled, spec:consumers.spec-studio.data.inputs.graph-only · enabled

0 unkeyed rules.

Verifying examples

Both inputs add their pages, named, and the same inputs write the same bytes · spec:consumers.spec-studio.data.inputs.both-given · ready floor ready

Executable Spec

Given an extraction root holding a Pack and its member Specs
Given the studio command is given the base graph {base: "an earlier graph of the root"} and the run records {runs: "one CTRF report"}
When the studio command runs twice with those inputs
Then the two runs wrote byte-identical files: {byteIdentical: true}
Then the page set holds the diff page: {diffPage: true}
Then the page set holds the runs page: {runsPage: true}
Then every page that shows an input names it and holds no input path: {inputsNamed: true}

Open example

Without inputs the page set is the graph's alone · spec:consumers.spec-studio.data.inputs.graph-only · ready floor ready

Executable Spec

Given an extraction root holding a Pack and its member Specs
Given the studio command is given the base graph {base: "none"} and the run records {runs: "none"}
When the studio command runs twice with those inputs
Then the two runs wrote byte-identical files: {byteIdentical: true}
Then the page set holds the diff page: {diffPage: false}
Then the page set holds the runs page: {runsPage: false}
Then every page that shows an input names it and holds no input path: {inputsNamed: true}

Open example

Example space

Given an extraction root holding a Pack and its member Specs
Given the studio command is given the base graph {base:"none"|"an earlier graph of the root"} and the run records {runs:"none"|"one CTRF report"}
When the studio command runs twice with those inputs
Then the two runs wrote byte-identical files: {byteIdentical:boolean}
Then the page set holds the diff page: {diffPage:boolean}
Then the page set holds the runs page: {runsPage:boolean}
Then every page that shows an input names it and holds no input path: {inputsNamed:boolean}
Design
studioInputs line 36 · specs/consumers/spec-studio.data.inputs.sdp.md:36
{ base?: { graph: unknown; label: string | null }; runs: unknown[] }, the inputs the command hands the build: base absent without a base graph, runs the run records in the order the command names them and empty without any.

no citation recorded

baseName line 37 · specs/consumers/spec-studio.data.inputs.sdp.md:37
{ label: string | null; schemaVersion: string; specs: number }, how a page names the base graph: the label the command gave or null, the base graph's schemaVersion, and its count of Spec nodes.

no citation recorded

Verification

Verifier bindings

  • spec:consumers.spec-studio.data.inputs.both-given · Both inputs add their pages, named, and the same inputs write the same bytes · declared · example enabled · specs/consumers/spec-studio.data.inputs.both-given.sdp.md

    External run evidence from test/studio-s4.test.ts

    Test anchors: test:protocol.run-absolute, test:protocol.run-external, test:protocol.run-unjoined, test:protocol.studio-graph-only, test:protocol.studio-inputs-both-given, test:protocol.studio-stamp-apart. Specs verified by those bindings: spec:consumers.spec-studio.data.inputs, spec:consumers.spec-studio.data.inputs.both-given, spec:consumers.spec-studio.data.inputs.graph-only, spec:consumers.spec-studio.runs-page, spec:consumers.spec-studio.runs-page.external-evidence, spec:consumers.spec-studio.sharing, spec:consumers.spec-studio.sharing.stamp-written-apart, spec:observation.run-evidence, spec:observation.run-evidence.absolute-path-joins, spec:observation.run-evidence.unanchored-file-unjoined.

    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
    recipe 45 joins normalized paths, preserves records and graph facts, and diagnoses other inputsnot recordedpassed32.43 ms
    renders external run evidence with result rows, metadata, diagnostics and conditional navigationnot recordedpassed64.35 ms
    reads repeated --runs before extraction and leaves input bytes untouchednot recordedpassed65.17 ms
    stamps apart, touches no page, refuses bad sources and removes the stamp on rebuildnot recordedpassed33.53 ms
    executes the bound example against a fresh worldA test whose reporter wrote an absolute path joins its anchored file (spec:observation.run-evidence.absolute-path-joins)passed6.06 ms
    executes the bound example against a fresh worldA test in a file with no test anchor is reported as unjoined (spec:observation.run-evidence.unanchored-file-unjoined)passed7.32 ms
    executes the bound example against a fresh worldThe runs page shows a run as external evidence from a test file (spec:consumers.spec-studio.runs-page.external-evidence)passed10.49 ms
    executes the bound example against a fresh worldWithout inputs the page set is the graph's alone (spec:consumers.spec-studio.data.inputs.graph-only)passed26.8 ms
    executes the bound example against a fresh worldBoth inputs add their pages, named, and the same inputs write the same bytes (spec:consumers.spec-studio.data.inputs.both-given)passed76.23 ms
    executes the bound example against a fresh worldThe stamp is written beside the page set, and a later build removes it (spec:consumers.spec-studio.sharing.stamp-written-apart)passed31.42 ms
    the stamp links source locations only after an HTTP stamp loads, encoding path segmentsnot recordedpassed4.11 ms
    recipe 45 picks the longest suffix and scopes through enabled examples at file grainnot recordedpassed8.33 ms
    ships a reusable preview, disabled by default, and deploys its own pull requests with runs and diffnot recordedpassed8.77 ms
    the tests lens counts file results once per Spec and names every run inputnot recordedpassed22.51 ms
    the Pack sentence keeps the graph's binding limit and positively names external evidencenot recordedpassed19.64 ms
    run metadata labels build and branch, and absent fields read not recordednot recordedpassed0.51 ms
    unjoined records escape outside names and explain both reason codes in wordsnot recordedpassed8.74 ms
    run files show the file alone, bindings and Suite, with one header per runnot recordedpassed8.99 ms
    recipe 45 does not join a suffix inside a path segmentnot recordedpassed3.02 ms
    stamp defaults to unknown and a stamped page set passes check-cleannot recordedpassed30.07 ms
    every reusable preview job's permissions fit the CI caller's grantnot recordedpassed15.2 ms
    PR checks and preview stamps name the same default merge checkoutnot recordedpassed7.86 ms
    preview download is optional and cancelled or skipped checks do not call itnot recordedpassed7.96 ms
    deploy checks the enabled Pages source before writing: gh-pagesnot recordedpassed28.99 ms
    deploy checks the enabled Pages source before writing: mainnot recordedpassed34.99 ms
    deploy checks the enabled Pages source before writing: disablednot recordedpassed11.65 ms
    deploy succeeds only once Pages publishes the pushed commit: an unrelated errored build is newestnot recordedpassed127.2 ms
    deploy succeeds only once Pages publishes the pushed commit: a retried build follows an errored onenot recordedpassed62.59 ms
    deploy succeeds only once Pages publishes the pushed commit: the build errorsnot recordedpassed40.96 ms
    deploy succeeds only once Pages publishes the pushed commit: the commit is never builtnot recordedpassed902.58 ms
    deploy succeeds only once Pages publishes the pushed commit: the answer arrives after the waitnot recordedpassed1531.29 ms
    preview still stamps and uploads rendered pages when evidence is absent and validation failsnot recordedpassed92.59 ms
    places external file rows under their verifier and renders shared files oncenot recordedpassed41.84 ms
    accepts the preview workflow's base and run flags togethernot recordedpassed22.06 ms
    formats external run durations to at most two decimals on every pagenot recordedpassed21.61 ms
  • spec:consumers.spec-studio.data.inputs.graph-only · Without inputs the page set is the graph's alone · declared · example enabled · specs/consumers/spec-studio.data.inputs.graph-only.sdp.md

Example space

  • base · "none" | "an earlier graph of the root" · declared by the studio command is given the base graph {base} and the run records {runs}
  • runs · "none" | "one CTRF report" · declared by the studio command is given the base graph {base} and the run records {runs}

Bound points

Examplebaseruns
spec:consumers.spec-studio.data.inputs.both-given"an earlier graph of the root""one CTRF report"
spec:consumers.spec-studio.data.inputs.graph-only"none""none"

Oracle binding: present · oracle:protocol.studio-inputs · test/studio-s4.test.ts:417

Coverage

Unbound

  • base: None
  • runs: None
Design view

Requirement drawing

Requirement drawing for spec:consumers.spec-studio.data.inputs
Requirement drawing for spec:consumers.spec-studio.data.inputssatisfies · anchoredsatisfies · anchoredsatisfies · anchoredmodels · anchoredrefines · declaredrefines, verifies · declaredrefines, verifies · declaredverifies · anchoredverifies · anchoredIntended Specsspec:consumers.spec-studio.data.inputsThe Studio reads two namedinputs beside the graph, abase graph and run records…consumers.spec-studio.data.inputsdeclared SpecDeclared verifying examplesspec:consumers.spec-studio.data.inputs.both-givenBoth inputs add theirpages, named, and the sameinputs write the same bytes…consumers.spec-studio.data.inputs.both-givendeclared Specspec:consumers.spec-studio.data.inputs.graph-onlyWithout inputs the page setis the graph's alone…consumers.spec-studio.data.inputs.graph-onlydeclared SpecSatisfying or referencingunitsimpl:protocol.studio-base-inputreads named Studio basegraphs and run inputs…protocol.studio-base-inputanchored codeimpl:protocol.studio-commandvalidates and renders theStudio with independentbyte checks and diagnosticexit codes…protocol.studio-commandanchored codeimpl:protocol.studio-inputsnamed base graph and runinput contractimpl:protocol.studio-inputsanchored codeTest or oracle bindingsoracle:protocol.studio-inputsoracle:protocol.studio-inputsoracle:protocol.studio-inputsanchored oracle bindingtest:protocol.studio-graph-onlytest:protocol.studio-graph-only…protocol.studio-graph-onlyanchored test binding ·binding presenttest:protocol.studio-inputs-both-giventest:protocol.studio-inputs-both-given…protocol.studio-inputs-both-givenanchored test binding ·binding presentOutside the selected setspec:consumers.spec-studio.dataThe Studio renders from thereader's values and embedsonly what its script reads…consumers.spec-studio.datadeclared Spec
The diagram as text
  • spec:consumers.spec-studio.data.inputs: The Studio reads two named inputs beside the graph, a base graph and run records · declared Spec
  • spec:consumers.spec-studio.data.inputs.both-given: Both inputs add their pages, named, and the same inputs write the same bytes · declared Spec
  • spec:consumers.spec-studio.data.inputs.graph-only: Without inputs the page set is the graph's alone · declared Spec
  • spec:consumers.spec-studio.data: The Studio renders from the reader's values and embeds only what its script reads · declared Spec
  • impl:protocol.studio-base-input: reads named Studio base graphs and run inputs · anchored code · src/cli/studio-inputs.ts:9
  • 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-inputs: named base graph and run input contract · anchored code · src/projections/studio/inputs.ts:1
  • oracle:protocol.studio-inputs: oracle:protocol.studio-inputs · anchored oracle binding · test/studio-s4.test.ts:417
  • test:protocol.studio-graph-only: test:protocol.studio-graph-only · anchored test binding · binding present · test/studio-s4.test.ts:434
  • test:protocol.studio-inputs-both-given: test:protocol.studio-inputs-both-given · anchored test binding · binding present · test/studio-s4.test.ts:464
  • spec:consumers.spec-studio.data.inputs refines spec:consumers.spec-studio.data · declared
  • spec:consumers.spec-studio.data.inputs.both-given refines spec:consumers.spec-studio.data.inputs · declared
  • spec:consumers.spec-studio.data.inputs.both-given verifies spec:consumers.spec-studio.data.inputs · declared
  • spec:consumers.spec-studio.data.inputs.graph-only refines spec:consumers.spec-studio.data.inputs · declared
  • spec:consumers.spec-studio.data.inputs.graph-only verifies spec:consumers.spec-studio.data.inputs · declared
  • impl:protocol.studio-base-input satisfies spec:consumers.spec-studio.data.inputs · anchored
  • impl:protocol.studio-command satisfies spec:consumers.spec-studio.data.inputs · anchored
  • impl:protocol.studio-inputs satisfies spec:consumers.spec-studio.data.inputs · anchored
  • oracle:protocol.studio-inputs models spec:consumers.spec-studio.data.inputs · anchored
  • test:protocol.studio-graph-only verifies spec:consumers.spec-studio.data.inputs.graph-only · anchored
  • test:protocol.studio-inputs-both-given verifies spec:consumers.spec-studio.data.inputs.both-given · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: requirementDiagram. Chosen syntax: flowchart TB because models require exact labels unavailable in requirement syntax.

Decisions

No decision record named.

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.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.studio-base-input · reads named Studio base graphs and run inputs · src/cli/studio-inputs.ts:9

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

    Uses

    None.

  • impl:protocol.studio-command · validates and renders the Studio with independent byte checks and diagnostic exit codes · src/cli/studio-command.ts:106

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

    Uses

    None.

  • impl:protocol.studio-inputs · named base graph and run input contract · src/projections/studio/inputs.ts:1

    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.spec-studio.data.inputs
The diagram as text
  • spec:consumers.design-diff: Designs are compared between a base commit and the working tree at entry grain
  • spec:consumers.spec-studio.data: The Studio renders from the reader's values and embeds only what its script reads
  • spec:consumers.spec-studio.data.inputs: The Studio reads two named inputs beside the graph, a base graph and run records
  • spec:consumers.spec-studio.data.inputs.both-given: Both inputs add their pages, named, and the same inputs write the same bytes
  • spec:consumers.spec-studio.data.inputs.graph-only: Without inputs the page set is the graph's alone
  • spec:consumers.spec-studio.diff-page: The diff page shows what changed in the design since a base graph
  • spec:consumers.spec-studio.publisher: sdp studio publishes the Studio as one page set
  • spec:consumers.spec-studio.register-input: An outside register is a named Studio input, so a cited token links to its entry
  • spec:consumers.spec-studio.runs-page: The runs page shows the run records the build was given, joined to test files
  • spec:consumers.studio-on-ramp: The Studio skill teaches agents to publish, share and read the Spec Studio
  • spec:extraction.determinism: Committed source derives byte-identical output
  • spec:observation.run-evidence: CI run records are joined to verifiers in a view
  • spec:consumers.spec-studio.data.inputs constrainedBy spec:extraction.determinism · declared
  • spec:consumers.spec-studio.data.inputs dependsOn spec:consumers.design-diff · declared — the base graph input is the design diff's base
  • spec:consumers.spec-studio.data.inputs dependsOn spec:consumers.spec-studio.publisher · declared — each input is named by a flag of the studio verb
  • spec:consumers.spec-studio.data.inputs dependsOn spec:observation.run-evidence · declared — the run records input is read only as run evidence
  • spec:consumers.spec-studio.data.inputs refines spec:consumers.spec-studio.data · declared
  • spec:consumers.spec-studio.diff-page dependsOn spec:consumers.spec-studio.data.inputs · declared — the base graph reaches the page as the build's named base input
  • spec:consumers.spec-studio.register-input dependsOn spec:consumers.spec-studio.data.inputs · declared — the register joins the base graph and the run records as a named input
  • spec:consumers.spec-studio.runs-page dependsOn spec:consumers.spec-studio.data.inputs · declared — the run records reach the page as the build's named runs input
  • spec:consumers.studio-on-ramp dependsOn spec:consumers.spec-studio.data.inputs · declared — the skill teaches the base graph and run records and where they may lie
  • spec:consumers.spec-studio.data.inputs.both-given refines spec:consumers.spec-studio.data.inputs · declared
  • spec:consumers.spec-studio.data.inputs.graph-only refines spec:consumers.spec-studio.data.inputs · declared
  • spec:consumers.spec-studio.data.inputs.both-given verifies spec:consumers.spec-studio.data.inputs · declared
  • spec:consumers.spec-studio.data.inputs.graph-only verifies spec:consumers.spec-studio.data.inputs · 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

Relations

Relation and directionOther endClaimReasonExercised keys
constrainedBy · outgoingCommitted source derives byte-identical output
spec:extraction.determinism · resolves
declaredNoneNone
dependsOn · outgoingDesigns are compared between a base commit and the working tree at entry grain
spec:consumers.design-diff · resolves
declaredthe base graph input is the design diff's baseNone
dependsOn · outgoingsdp studio publishes the Studio as one page set
spec:consumers.spec-studio.publisher · resolves
declaredeach input is named by a flag of the studio verbNone
dependsOn · outgoingCI run records are joined to verifiers in a view
spec:observation.run-evidence · resolves
declaredthe run records input is read only as run evidenceNone
refines · outgoingThe Studio renders from the reader's values and embeds only what its script reads
spec:consumers.spec-studio.data · resolves
declaredNoneNone
dependsOn · incomingThe diff page shows what changed in the design since a base graph
spec:consumers.spec-studio.diff-page · resolves
declaredthe base graph reaches the page as the build's named base inputNone
dependsOn · incomingAn outside register is a named Studio input, so a cited token links to its entry
spec:consumers.spec-studio.register-input · resolves
declaredthe register joins the base graph and the run records as a named inputNone
dependsOn · incomingThe runs page shows the run records the build was given, joined to test files
spec:consumers.spec-studio.runs-page · resolves
declaredthe run records reach the page as the build's named runs inputNone
dependsOn · incomingThe Studio skill teaches agents to publish, share and read the Spec Studio
spec:consumers.studio-on-ramp · resolves
declaredthe skill teaches the base graph and run records and where they may lieNone
refines · incomingBoth inputs add their pages, named, and the same inputs write the same bytes
spec:consumers.spec-studio.data.inputs.both-given · resolves
declaredNoneNone
refines · incomingWithout inputs the page set is the graph's alone
spec:consumers.spec-studio.data.inputs.graph-only · resolves
declaredNoneNone
verifies · incomingBoth inputs add their pages, named, and the same inputs write the same bytes
spec:consumers.spec-studio.data.inputs.both-given · resolves
declaredNonenamedInputs, inputFlags, inputPages, inputNaming, inputsNeverGraph, sameInputsSameBytes
verifies · incomingWithout inputs the page set is the graph's alone
spec:consumers.spec-studio.data.inputs.graph-only · resolves
declaredNonenamedInputs, inputPages, sameInputsSameBytes

Bindings

Implementation binding: present

  • impl:protocol.studio-base-input · reads named Studio base graphs and run inputs · src/cli/studio-inputs.ts:9 · role codec · component component:protocol.cli · layer edge · context protocol
  • impl:protocol.studio-command · validates and renders the Studio with independent byte checks and diagnostic exit codes · src/cli/studio-command.ts:106 · role publisher · component component:protocol.cli · layer edge · context protocol
  • impl:protocol.studio-inputs · named base graph and run input contract · src/projections/studio/inputs.ts:1 · role contract · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: present

  • oracle:protocol.studio-inputs · test/studio-s4.test.ts:417

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.