problemThe CLI names the engine that produced a result
spec:consumers.engine-provenanceChanged since the base graph base da4b141: relation.refines:spec:consumers.command-line
Base input: schema 0.11.0, 405 Specs.
Packs: pack:design-management-v1, pack:self-hosting-v1
Design: 1 design entry · 1 pinned declaration · no decisions
Findings: no errors, no warnings
specs/consumers/engine-provenance.sdp.md
No open questions and no blocking questions; implementation binding present, verifier binding present, and expected-outcome oracle none.
Intent
- An adopter pinned to a build of the Protocol needs to name that build: the package version alone does not change between commits, so when a check changes with no Spec changed, nothing tells the engine moving from the corpus moving.
outcome- Let
sdp --versionname the package version and the commit the build came from, without putting either into the graph.
Behavior
ruleline 22 ·specs/consumers/engine-provenance.sdp.md:22sdp --versionprints one line,sdp <version> (<commit>), and exits 0. The version is the package's own version; the commit is the full hash the build was made from, orunknownwhen the build could not read one; a build from a checkout with uncommitted changes names the commit checked out when it ran.ruleline 23 ·specs/consumers/engine-provenance.sdp.md:23- The build records the commit in a file beside the compiled CLI, and the CLI reads that file; it never runs git at run time.
ruleline 24 ·specs/consumers/engine-provenance.sdp.md:24- The build reads the commit from git first. When git gives no full commit, it reads the archive's substituted commit file; a full commit there names the archived revision, and an absent, unsubstituted or malformed file leaves the commit
unknown. ruleline 25 ·specs/consumers/engine-provenance.sdp.md:25- Neither the version nor the commit enters the graph, a projection or a generated contract, so a derived artifact stays a function of the corpus alone.
4 unkeyed rules.
Design
archiveCommitline 28 ·specs/consumers/engine-provenance.sdp.md:28.git-archive-commitcontains$Format:%H$in a checkout and is markedexport-substin.gitattributes, so git archives carry their full commit. The build reads the trimmed file only as a full Git object name, never as a command or an abbreviated hash.no citation recorded
Verification
Verifier bindings
- test:protocol.engine-provenance · version checks verify the engine provenance line and the build's commit record · anchored · test anchor binding present ·
test/cli.test.ts:2371External run evidence from
test/cli.test.tsTest 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 380 · Branch: feature/roadmap-and-slices-v0 · Commit: 34909918bf0be0e849959644401797191cae379f · Start: 2026-10-22T17:42:16.533Z · Stop: 2026-10-22T17:42:27.785Z
Name Suite Result Duration prints the exact help text for no args sdp cli passed 1.39 ms points operators to the shipped on-ramps and Protocol corpus sdp cli passed 1.4 ms describes both anchor forms and non-failing warnings in help sdp cli passed 0.33 ms prints the exact help text for --help sdp cli passed 0.14 ms builds the checkout-v1 example: writes graph, contracts, and registrar manifest atomically sdp cli passed 92.85 ms invalidates an existing Design Review when build replaces its source graph sdp cli passed 51.1 ms views the self-hosting corpus from the default repository root sdp cli passed 8406.8 ms renders contracts warnings through the one formatter and counts them in the summary sdp cli passed 6.91 ms withholds case-colliding contract paths with a warning: graph kept, nothing gates sdp cli passed 3.45 ms passes --check-clean on the example (determinism self-check through the CLI) sdp cli passed 28.36 ms end-to-end determinism self-check: delete generated/, rebuild, byte-identical sdp cli passed 106.14 ms fails clean on a root that is not a directory: one line, exit 1, never a stack trace sdp cli passed 0.32 ms rejects an unknown option: one line, exit 1, nothing runs sdp cli passed 0.1 ms accepts repeatable --exclude paths for build sdp cli passed 3.25 ms accepts repeatable --exclude paths for validate sdp cli passed 3.57 ms accepts repeatable --exclude paths for view sdp cli passed 4.61 ms uses the identical normalized exclusions in both --check-clean extractions sdp cli passed 4.99 ms refuses invalid --exclude path "" before build writes sdp cli passed 0.75 ms refuses invalid --exclude path "." before build writes sdp cli passed 0.21 ms refuses invalid --exclude path "./explorations" before build writes sdp cli passed 0.27 ms refuses invalid --exclude path "explorations/" before build writes sdp cli passed 0.16 ms refuses invalid --exclude path "/explorations" before build writes sdp cli passed 0.19 ms refuses invalid --exclude path "../x" before build writes sdp cli passed 0.18 ms refuses invalid --exclude path "a/../b" before build writes sdp cli passed 0.13 ms refuses invalid --exclude path "a//b" before build writes sdp cli passed 0.12 ms refuses invalid --exclude path "a\\b" before build writes sdp cli passed 0.21 ms refuses a missing --exclude operand before build writes sdp cli passed 0.28 ms names a flag supplied as an --exclude operand before build writes sdp cli passed 0.19 ms documents repeatable --exclude paths in help sdp cli passed 0.06 ms rejects a second root argument: one line, exit 1, nothing runs sdp cli passed 0.16 ms notes an empty authored model: zero spec files still builds and exits 0, but says where it looked sdp cli passed 0.59 ms renders a finding's location exactly once, from the structured fields: file:line — [severity] sdp cli passed 2.19 ms renders a Gherkin parser failure through the public CLI sdp cli passed 1.24 ms exits 1, writes nothing, and removes a stale graph.json on a hard-error corpus sdp cli passed 1.87 ms fails build on an integer-like design key holding a static value sdp cli passed 1.25 ms fails build on an integer-like design key holding a non-static value sdp cli passed 1.05 ms fails build on an integer-like design key holding a method sdp cli passed 1.09 ms fails build on an integer-like design key holding an accessor sdp cli passed 1.22 ms fails --check-clean on a diverging second extraction: exit 1, the stale graph.json removed sdp cli passed 7.21 ms fails --check-clean on a diverging second contract generation: exit 1, no artifact survives sdp cli passed 18.15 ms owns the contracts tree wholesale: with nothing to generate, a stale contracts dir is removed sdp cli passed 2.71 ms reconciles a registrar sibling that a later generation no longer owes sdp cli passed 19.57 ms fails --check-clean on registrar-byte drift and removes the uncertified known set sdp cli passed 26.76 ms passes --check-clean without a prior manifest when no registrars are owed sdp cli passed 3.91 ms fails --check-clean on registrar manifest whitespace drift sdp cli passed 26 ms fails --check-clean on registrar manifest ignored property drift sdp cli passed 26.54 ms removes graph, contracts, manifest, and registrar siblings after a staged write failure sdp cli passed 19.02 ms fails clean when extraction throws past discovery: one line, exit 1, the stale graph.json removed sdp cli passed 0.6 ms fails clean when generated exists as a file: one line each for build and view, never a stack trace sdp cli passed 5.38 ms names the survivor when a recovery-path removal is denied: a stale artifact never silently reads as current sdp cli passed 0.56 ms stops a build when an existing Design Review cannot be invalidated sdp cli passed 1.62 ms fails clean when the checks throw: one line, exit 1, the built graph.json stays sdp cli passed 2.52 ms suppresses the empty-model note when spec files were found but none reified — a failed file is not an absent one sdp cli passed 1.52 ms treats a root of only ordinary .feature files as an empty authored model, not a missing-identity error sdp cli passed 0.65 ms suppresses the empty-model note when a failed .sdp.gherkin finding.file matches the carrier suffix predicate sdp cli passed 1.01 ms builds a mixed root with one .sdp.gherkin carrier and ignores the ordinary .feature sibling sdp cli passed 0.88 ms removes the temp twin on a failed build and a failed view — no partial .tmp artifact survives sdp cli passed 8.95 ms recognizes the published-bin path: a .bin-style symlink resolves to the entry module sdp cli passed 0.43 ms exits 0 quietly on a stdout EPIPE and stays fatal for any other stream error sdp cli passed 0.53 ms validates the example: exit 0, the artifact written, and no warning sdp cli passed 28.78 ms gates on the checks, not the build: a clean-building broken link validates to exit 1 with the artifact kept sdp cli passed 2.67 ms short-circuits the checks on extraction hard errors: validate keeps build semantics sdp cli passed 1.64 ms prints help plus an unknown-command error sdp cli passed 0.13 ms views the example: validate + the Design Review written, with no warning sdp cli passed 33.87 ms owns the view directory wholesale: a stale page does not survive a re-render sdp cli passed 15.8 ms regenerates the view byte-identically: delete generated/, re-view, same bytes sdp cli passed 24.79 ms writes the view even when checks fail: findings render in it, the exit code is validate's sdp cli passed 2.06 ms keeps build semantics on extraction hard errors: no graph, no view, stale view removed sdp cli passed 1.87 ms fails view --check-clean on a diverging second render: exit 1, the stale view removed sdp cli passed 6.53 ms fails clean when the render throws: one line on stderr, exit 1, the stale view removed sdp cli passed 2.71 ms closes the compiled watch process with exit 0 after operator SIGINT sdp validate --watch passed 299.82 ms documents --watch as a validate-only authoring loop sdp validate --watch passed 0.19 ms rejects --watch on build with a named error and no watcher sdp validate --watch passed 0.18 ms rejects --watch on view with a named error and no watcher sdp validate --watch passed 0.06 ms rejects --watch on census with a named error and no watcher sdp validate --watch passed 0.05 ms rejects --watch on mermaid with a named error and no watcher sdp validate --watch passed 0.05 ms rejects --watch on gherkin with a named error and no watcher sdp validate --watch passed 0.04 ms rejects --watch on import with a named error and no watcher sdp validate --watch passed 0.17 ms rejects --watch on new with a named error and no watcher sdp validate --watch passed 0.2 ms rejects --watch on q with a named error and no watcher sdp validate --watch passed 0.18 ms rejects --watch --check-clean with a named error and no watcher sdp validate --watch passed 0.12 ms installs the watcher before the first validation cycle sdp validate --watch passed 4.45 ms catches an edit during the first cycle with exactly one coalesced rerun sdp validate --watch passed 5.23 ms coalesces a burst during an active cycle into exactly one rerun sdp validate --watch passed 4.92 ms prints validation findings and keeps watching until abort exits 0 sdp validate --watch passed 2.68 ms ignores generated, dist, node_modules, coverage, dot directories, and configured excludes sdp validate --watch passed 5.24 ms coalesces production-shaped events from later turns into one pending rerun sdp validate --watch passed 7.83 ms does not natively subscribe to excluded or generated subtrees sdp validate --watch passed 69.25 ms routes a native watcher error through a typed channel and closes once sdp validate --watch passed 3.1 ms clean-repo determinism: the full pipeline at a different absolute path is byte-identical not recorded passed 67.67 ms prints one line naming the package version and the recorded commit, and exits 0 sdp --version passed 0.49 ms names the commit unknown when the build recorded none or recorded something else sdp --version passed 0.33 ms reads the version from the package manifest two directories above the CLI module sdp --version passed 0.38 ms documents --version and --params in the usage text sdp --version passed 0.14 ms records the checked-out commit at build time, or unknown when git cannot name one sdp --version passed 11.15 ms publishes the commit the build step reads from git beside the CLI sdp --version passed 0.9 ms builds commit metadata from a substituted git archive extracted without .git sdp --version passed 64.59 ms uses only a full archive commit when git gives none, keeping git first sdp --version passed 0.68 ms answers from the compiled CLI with the commit its build recorded beside it sdp --version passed 327.1 ms runs recipe 4 as shipped, its changed files passed with --params @PATH a shipped recipe file through the compiled CLI passed 363.4 ms
Design view
Requirement drawing
- Declared verifying examples: no declared verifying example.
The diagram as text
- spec:consumers.engine-provenance: The CLI names the engine that produced a result · declared Spec
- spec:consumers.command-line: Every verb answers --help, and one verb writes every projection root · declared Spec
- 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.engine-provenance-cli: prints sdp version and the commit parsed from the build-info file beside the compiled CLI · anchored code ·
src/cli/sdp.ts:102 - test:protocol.engine-provenance: version checks verify the engine provenance line and the build's commit record · anchored test binding · binding present ·
test/cli.test.ts:2371 - spec:consumers.engine-provenance refines spec:consumers.command-line · declared — the version flag is one more answer the command line gives an adopter
- impl:protocol.build-artifacts satisfies spec:consumers.engine-provenance · anchored
- impl:protocol.engine-provenance-cli satisfies spec:consumers.engine-provenance · anchored
- test:protocol.engine-provenance verifies spec:consumers.engine-provenance · anchored
Mermaid source
Copyable source; the Studio draws static SVG.
Preferred and chosen syntax: requirementDiagram; exact refines, satisfies and verifies, with claim words in nodes and per-edge comments.
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
impl:protocol.build-artifacts· the build step that writes each catalog recipe to dist/recipes and records the build commit beside the CLI ·src/cli/build-artifacts.ts:182Component:
component:protocol.cli· entry points, shared build and publication ·src/cli/build-command.ts:32· layer edge · context protocol Uses
None.
impl:protocol.engine-provenance-cli· prints sdp version and the commit parsed from the build-info file beside the compiled CLI ·src/cli/sdp.ts:102Component:
component:protocol.cli· entry points, shared build and publication ·src/cli/build-command.ts:32· 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
- E3: constrainedBy · declared
The diagram as text
- spec:consumers.adopter-on-ramp: An adopter learns graph homes, carrier grammar and shipped paths from the on-ramps
- spec:consumers.command-line: Every verb answers --help, and one verb writes every projection root
- spec:consumers.engine-provenance: The CLI names the engine that produced a result
- spec:consumers.spec-studio.sharing: A Studio build is stamped and shared from a static host
- spec:extraction.determinism: Committed source derives byte-identical output
- spec:consumers.engine-provenance constrainedBy spec:extraction.determinism · declared
- spec:consumers.engine-provenance dependsOn spec:consumers.adopter-on-ramp · declared — an adopter pinned to a build asks the CLI the adopter on-ramp points it to which build it runs
- 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.spec-studio.sharing dependsOn spec:consumers.engine-provenance · 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
- refines · spec:consumers.command-line · stated ready, floor ready
- dependsOn · spec:consumers.adopter-on-ramp · stated ready, floor ready
- constrainedBy · spec:extraction.determinism · stated ready, floor ready
Rested on by
Distance 1
- spec:consumers.spec-studio.sharing
Implementing units
impl:protocol.stamp-command·src/cli/stamp-command.ts:8impl:protocol.studio-preview-workflow·test/studio-s4.test.ts:742impl:protocol.studio-stamp·src/studio-elements/stamp.ts:30
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.sharing.stamp-written-apart
Distance 2
- spec:consumers.spec-studio.sharing.stamp-written-apart
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-stamp-apart
- spec:consumers.spec-studio.shell
Implementing units
impl:protocol.studio-code-spans·src/projections/studio/pages/code-spans.ts:9impl:protocol.studio-frame·src/projections/studio/pages/frame.ts:6impl:protocol.studio-html·src/projections/studio/pages/html.ts:8impl:protocol.studio-text·src/projections/studio/pages/text.ts:7
Referencing units
None.
Enabled verifiers: test:protocol.studio-pages
- spec:consumers.spec-studio.spec-page
Implementing units
impl:protocol.studio-requirement-view·src/projections/studio/pages/requirement-view.ts:8impl:protocol.studio-spec-page·src/projections/studio/pages/spec-page.ts:201impl:protocol.studio-spec-structure·src/projections/studio/pages/spec-structure.ts:44
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.spec-page.cited-declaration, test:protocol.studio-architecture-maturity-requirement, test:protocol.studio-panels
- spec:consumers.studio-on-ramp
Implementing units
impl:protocol.studio-on-ramp·test/skills.test.ts:1693
Referencing units
None.
Enabled verifiers: test:protocol.studio-on-ramp
Distance 3
- spec:consumers.spec-studio.export
Implementing units
impl:protocol.studio-diagram-element·src/studio-elements/diagram.ts:23impl:protocol.studio-expander·src/studio-elements/expander.ts:16impl:protocol.studio-pack-export·src/projections/studio/pages/export-page.ts:35impl:protocol.studio-pack-page·src/projections/studio/pages/pack-page.ts:68
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.export.self-contained, test:protocol.studio-intent-handoff
- spec:consumers.spec-studio.index-page
Implementing units
impl:protocol.studio-index-page·src/projections/studio/pages/index-page.ts:8
Referencing units
None.
Enabled verifiers: test:protocol.studio-pages
- spec:consumers.spec-studio.navigation
Implementing units
impl:protocol.studio-frame·src/projections/studio/pages/frame.ts:6impl:protocol.studio-index-page·src/projections/studio/pages/index-page.ts:8
Referencing units
None.
Enabled verifiers: test:protocol.studio-navigation, test:protocol.studio-roadmap-page
- spec:consumers.spec-studio.owner-queue
Implementing units
impl:protocol.studio-owner-queue·src/projections/studio/pages/queue-page.ts:9
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.owner-queue.dependency-first
- spec:consumers.spec-studio.pack-page
Implementing units
impl:protocol.studio-pack-page·src/projections/studio/pages/pack-page.ts:68
Referencing units
None.
Enabled verifiers: test:protocol.roadmap-priority, test:protocol.studio-pages
- spec:consumers.spec-studio.page-elements
Implementing units
component:protocol.studio-elements·src/studio-elements/index.ts:13impl:protocol.studio-copy·src/studio-elements/copy.ts:22impl:protocol.studio-expander·src/studio-elements/expander.ts:16impl:protocol.studio-filter·src/studio-elements/filter.ts:25impl:protocol.studio-search-form·src/studio-elements/search.ts:18impl:protocol.studio-search-results·src/studio-elements/search-results.ts:95impl:protocol.studio-stamp·src/studio-elements/stamp.ts:30
Referencing units
None.
Enabled verifiers: test:protocol.studio-copy-source, test:protocol.studio-page-elements
- spec:consumers.spec-studio.registers
Implementing units
impl:protocol.studio-registers·src/projections/studio/pages/registers-page.ts:47
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.registers.blocking-first
- spec:consumers.spec-studio.roadmap-page
Implementing units
impl:protocol.studio-roadmap-page·src/projections/studio/pages/roadmap-page.ts:168
Referencing units
None.
Enabled verifiers: test:protocol.studio-roadmap-page
- spec:consumers.spec-studio.search
Implementing units
impl:protocol.studio-concept-match·src/reader/concept-match.ts:43impl:protocol.studio-search-page·src/projections/studio/pages/search-page.ts:5impl:protocol.studio-search-results·src/studio-elements/search-results.ts:95
Referencing units
None.
Enabled verifiers: test:protocol.studio-concept-match, test:protocol.studio-page-elements, test:protocol.studio-pages
- spec:consumers.spec-studio.spec-page.cited-declaration
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-cited-declaration
- spec:consumers.spec-studio.spec-page.core
Implementing units
impl:protocol.studio-spec-page·src/projections/studio/pages/spec-page.ts:201
Referencing units
None.
Enabled verifiers: test:protocol.studio-pages
- spec:consumers.spec-studio.verification-panels
Implementing units
impl:protocol.studio-run-rows·src/projections/studio/pages/run-rows.ts:69impl:protocol.studio-verification-panels·src/projections/studio/pages/spec-verification.ts:74
Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.verification-panels.rule-coverage, test:protocol.studio-panels
Distance 4
- spec:consumers.spec-studio.capability-map-page
Implementing units
impl:protocol.studio-capabilities-page·src/projections/studio/pages/capabilities-page.ts:78impl:protocol.studio-filter·src/studio-elements/filter.ts:25impl:protocol.studio-frame·src/projections/studio/pages/frame.ts:6impl:protocol.studio-index-page·src/projections/studio/pages/index-page.ts:8
Referencing units
None.
Enabled verifiers: test:protocol.studio-capabilities
- spec:consumers.spec-studio.cited-line-text
Implementing units
None.
Referencing units
None.
Enabled verifiers: None
Packs: pack:roadmap, pack:self-hosting-v1
- spec:consumers.spec-studio.diagram-kinds.mermaid-source
Implementing units
impl:protocol.studio-diagram-source·src/projections/studio/diagrams/mermaid.ts:13impl:protocol.studio-diagrams·src/projections/studio/diagrams/svg.ts:73
Referencing units
None.
Enabled verifiers: test:protocol.studio-diagram-core
- spec:consumers.spec-studio.export.self-contained
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-export-contained
- spec:consumers.spec-studio.owner-queue.dependency-first
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-queue-dependency-first
- spec:consumers.spec-studio.pack-page.maturity-map
Implementing units
impl:protocol.studio-maturity-map·src/projections/studio/pages/maturity-map.ts:7
Referencing units
None.
Enabled verifiers: test:protocol.studio-architecture-maturity-requirement, test:protocol.studio-panels
- spec:consumers.spec-studio.registers.blocking-first
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-registers-blocking-first
- spec:consumers.spec-studio.slice-page
Implementing units
impl:protocol.studio-slice-page·src/projections/studio/pages/slice-page.ts:25
Referencing units
None.
Enabled verifiers: test:protocol.studio-slice-page
- spec:consumers.spec-studio.verification-panels.rule-coverage
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-rule-coverage
Relations
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| constrainedBy · outgoing | Committed source derives byte-identical outputspec:extraction.determinism · resolves | declared | None | None |
| dependsOn · outgoing | An adopter learns graph homes, carrier grammar and shipped paths from the on-rampsspec:consumers.adopter-on-ramp · resolves | declared | an adopter pinned to a build asks the CLI the adopter on-ramp points it to which build it runs | None |
| refines · outgoing | Every verb answers --help, and one verb writes every projection rootspec:consumers.command-line · resolves | declared | the version flag is one more answer the command line gives an adopter | None |
| dependsOn · incoming | A Studio build is stamped and shared from a static hostspec:consumers.spec-studio.sharing · resolves | declared | None | None |
Bindings
Implementation binding: present
impl:protocol.build-artifacts· the build step that writes each catalog recipe to dist/recipes and records the build commit beside the CLI ·src/cli/build-artifacts.ts:182· role publisher · component component:protocol.cli· layer edge · context protocolimpl:protocol.engine-provenance-cli· prints sdp version and the commit parsed from the build-info file beside the compiled CLI ·src/cli/sdp.ts:102· role projection · component component:protocol.cli· layer edge · context protocol
Design reference: none
Verifier binding: present
- test:protocol.engine-provenance · version checks verify the engine provenance line and the build's commit record · anchored ·
test/cli.test.ts:2371· 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.