Spec Studio

Every view run rewrites the view wholesale

spec:consumers.wholesale-view-rewriteBusiness Rule · featureready floor ready

Changed since the base graph base b5e0a8b: behavior.rules[2]; behavior.rules[5]; rule.portablePublication; rule.safeCleanup

Base input: schema 0.12.0, 456 Specs.

Packs: pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/consumers/wholesale-view-rewrite.sdp.md

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

Intent
outcome
Guarantee that whatever a reader finds in the view directory was produced by the last run over the current source.
Rule
rule line 18 · specs/consumers/wholesale-view-rewrite.sdp.md:18
A view run rewrites the view wholesale: no page written by an earlier run survives a later one, so a Spec that left the corpus leaves no page behind.
rule line 19 · specs/consumers/wholesale-view-rewrite.sdp.md:19
Pages are written to a temporary sibling of the view directory, the previous directory is removed, and the temporary is renamed into place — one rename, so no half-written view is ever readable and no temporary survives a completed run.
rule line 20 · specs/consumers/wholesale-view-rewrite.sdp.md:20
A run that cannot produce a current view removes the stale one when its output parent remains safe instead of leaving it readable as current: an absent view is honest, a stale view is not.
rule.buildInvalidates line 21 · specs/consumers/wholesale-view-rewrite.sdp.md:21
Before extraction, the shared build removes generated/design-review/, generated/census/, generated/mermaid/ and generated/gherkin/, each with its temporary sibling, so a run that fails before rendering leaves no view behind; a removal failure refuses the build before extraction. Every command that enters this build, including validate and its watch runs and every publisher, has this invalidation effect, so a sibling root the command does not publish stays absent until a later publication. The Studio's root is removed beside these four, as spec:consumers.spec-studio.publisher#rule.buildInvalidates states.

no example exercises it

rule line 22 · specs/consumers/wholesale-view-rewrite.sdp.md:22
Under --check-clean the view is rendered twice from the same graph and the run refuses when the two renders diverge, removing the view it could not certify.
rule line 23 · specs/consumers/wholesale-view-rewrite.sdp.md:23
Validation findings never withhold the view; publication refusals remain separate. A run whose checks report findings still writes the current view and returns the checks' own exit code, because the view is where those findings are read in context.
rule.portablePublication line 25 · specs/consumers/wholesale-view-rewrite.sdp.md:25
A case-insensitive page-path collision refuses the publisher's whole page set, names both ids and paths, removes its stale live and temporary roots when their parents are safe, and exits 1 regardless of validation's exit code. Renderers retain their page names and bytes.

no example exercises it

rule.safeCleanup line 26 · specs/consumers/wholesale-view-rewrite.sdp.md:26
Publication and failure cleanup recheck the physical output parent before each mutation; an escaping, unresolvable or linked generated/ parent is refused without cleanup through it.

no example exercises it

5 unkeyed rules.

Verifying examples

A build that never renders still takes the old view down · spec:consumers.wholesale-view-rewrite.build-invalidates-view · ready floor ready

Executable Spec

Given an extraction root holding {corpus: "one authored spec"} and a stale view page {stalePage: "spec/probe.departed.md"}
Given the stale page is planted {planted: "before the run"}
When the {command: "build"} command runs at that root
Then the run exits {exitCode: 0}
Then the view directory survives: {viewSurvives: false}
Then the stale page survives: {staleSurvives: false}
Then a temporary view sibling survives: {temporarySurvives: false}

Open example

A run that cannot produce a current view leaves no view at all · spec:consumers.wholesale-view-rewrite.failed-run-view-removed · ready floor ready

Executable Spec

Given an extraction root holding {corpus: "one authored spec the extractor refuses"} and a stale view page {stalePage: "spec/probe.departed.md"}
Given the stale page is planted {planted: "after the build has invalidated the view"}
When the {command: "view"} command runs at that root
Then the run exits {exitCode: 1}
Then the view directory survives: {viewSurvives: false}
Then the stale page survives: {staleSurvives: false}
Then a temporary view sibling survives: {temporarySurvives: false}

Open example

A page the build's invalidation never saw still does not survive the swap · spec:consumers.wholesale-view-rewrite.late-stale-page · ready floor ready

Executable Spec

Given an extraction root holding {corpus: "one authored spec"} and a stale view page {stalePage: "spec/probe.departed.md"}
Given the stale page is planted {planted: "after the build has invalidated the view"}
When the {command: "view"} command runs at that root
Then the run exits {exitCode: 0}
Then the view directory survives: {viewSurvives: true}
Then the view holds the current page {currentPage: "index.md"}
Then the stale page survives: {staleSurvives: false}
Then a temporary view sibling survives: {temporarySurvives: false}

Open example

A page from an earlier run does not survive the next one · spec:consumers.wholesale-view-rewrite.stale-page-removed · ready floor ready

Executable Spec

Given an extraction root holding {corpus: "one authored spec"} and a stale view page {stalePage: "spec/probe.departed.md"}
Given the stale page is planted {planted: "before the run"}
When the {command: "view"} command runs at that root
Then the run exits {exitCode: 0}
Then the view directory survives: {viewSurvives: true}
Then the view holds the current page {currentPage: "index.md"}
Then the stale page survives: {staleSurvives: false}
Then a temporary view sibling survives: {temporarySurvives: false}

Open example

Example space

Given an extraction root holding {corpus:"one authored spec"|"one authored spec the extractor refuses"} and a stale view page {stalePage:string}
Given the stale page is planted {planted:"before the run"|"after the build has invalidated the view"}
When the {command:"view"|"build"} command runs at that root
Then the run exits {exitCode:number}
Then the view directory survives: {viewSurvives:boolean}
Then the view holds the current page {currentPage:string}
Then the stale page survives: {staleSurvives:boolean}
Then a temporary view sibling survives: {temporarySurvives:boolean}
Verification

Verifier bindings

  • spec:consumers.wholesale-view-rewrite.build-invalidates-view · A build that never renders still takes the old view down · declared · example enabled · specs/consumers/wholesale-view-rewrite.build-invalidates-view.sdp.md

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

    Test anchors: test:protocol.binding-language-views.bound-spec-page, test:protocol.binding-language-views.pack-member-table, test:protocol.derived-readiness-banner.dishonest-divergence, test:protocol.derived-readiness-banner.honest-headroom, test:protocol.derived-readiness-banner.idea-floor-unmet, test:protocol.design-review.pure-projection, test:protocol.diagnostic-rendering.composed-location, test:protocol.diagnostic-rendering.table-cell-location, test:protocol.wholesale-view-rewrite.build-invalidates-view, test:protocol.wholesale-view-rewrite.failed-run-view-removed, test:protocol.wholesale-view-rewrite.late-stale-page, test:protocol.wholesale-view-rewrite.stale-page-removed. Specs verified by those bindings: spec:consumers.binding-language-views, spec:consumers.binding-language-views.bound-spec-page, spec:consumers.binding-language-views.pack-member-table, spec:consumers.derived-readiness-banner, spec:consumers.derived-readiness-banner.dishonest-divergence, spec:consumers.derived-readiness-banner.honest-headroom, spec:consumers.design-review, spec:consumers.design-review.pure-projection, spec:consumers.wholesale-view-rewrite, spec:consumers.wholesale-view-rewrite.build-invalidates-view, spec:consumers.wholesale-view-rewrite.failed-run-view-removed, spec:consumers.wholesale-view-rewrite.late-stale-page, spec:consumers.wholesale-view-rewrite.stale-page-removed, spec:validation.diagnostic-rendering, spec:validation.diagnostic-rendering.composed-location, spec:validation.diagnostic-rendering.table-cell-location.

    Run 1: external run evidence from vitest 4.1.10

    Build: CI 433 · Branch: fix/second-review-pass · Commit: 6375b6e431a7cf885a49befec76d7876cd3e538c · Start: 2026-11-04T07:12:23.076Z · Stop: 2026-11-04T07:15:49.695Z

    NameSuiteResultDuration
    executes the bound example against a fresh worldThe view is the graph read twice, and the corpus is untouched by reading it (spec:consumers.design-review.pure-projection)passed141.87 ms
    executes the bound example against a fresh worldAn overstated rung raises the banner and names the clause that refused (spec:consumers.derived-readiness-banner.dishonest-divergence)passed3.19 ms
    executes the bound example against a fresh worldA rung the structure overshoots renders as information, not as a banner (spec:consumers.derived-readiness-banner.honest-headroom)passed1.81 ms
    renders a Spec whose idea floor is unmet with no rung and a below-idea bannernot recordedpassed1.26 ms
    executes the bound example against a fresh worldA fully bound Spec renders binding language on the page and in the index (spec:consumers.binding-language-views.bound-spec-page)passed2.81 ms
    executes the bound example against a fresh worldThe Pack member table speaks the page's binding language, not a shorthand (spec:consumers.binding-language-views.pack-member-table)passed2.98 ms
    executes the bound example against a fresh worldA page from an earlier run does not survive the next one (spec:consumers.wholesale-view-rewrite.stale-page-removed)passed17.79 ms
    executes the bound example against a fresh worldA page the build's invalidation never saw still does not survive the swap (spec:consumers.wholesale-view-rewrite.late-stale-page)passed10.96 ms
    executes the bound example against a fresh worldA run that cannot produce a current view leaves no view at all (spec:consumers.wholesale-view-rewrite.failed-run-view-removed)passed6.92 ms
    executes the bound example against a fresh worldA build that never renders still takes the old view down (spec:consumers.wholesale-view-rewrite.build-invalidates-view)passed9.25 ms
    executes the bound example against a fresh worldOne finding, three location shapes, one composition rule (spec:validation.diagnostic-rendering.composed-location)passed1.13 ms
    executes the bound example against a fresh worldThe same three location shapes, rendered as table cells (spec:validation.diagnostic-rendering.table-cell-location)passed0.73 ms
  • spec:consumers.wholesale-view-rewrite.failed-run-view-removed · A run that cannot produce a current view leaves no view at all · declared · example enabled · specs/consumers/wholesale-view-rewrite.failed-run-view-removed.sdp.md
  • spec:consumers.wholesale-view-rewrite.late-stale-page · A page the build's invalidation never saw still does not survive the swap · declared · example enabled · specs/consumers/wholesale-view-rewrite.late-stale-page.sdp.md
  • spec:consumers.wholesale-view-rewrite.stale-page-removed · A page from an earlier run does not survive the next one · declared · example enabled · specs/consumers/wholesale-view-rewrite.stale-page-removed.sdp.md
  • test:protocol.cli-write-boundaries · anchored · test anchor binding present · test/cli-write-boundaries.test.ts:292

    External run evidence from test/cli-write-boundaries.test.ts

    Test anchors: test:protocol.cli-write-boundaries. Specs verified by those bindings: spec:consumers.design-review, spec:consumers.gherkin-view, spec:consumers.mermaid-view, spec:consumers.projections-model, spec:consumers.wholesale-view-rewrite, spec:extraction.build-pipeline.

    Run 1: external run evidence from vitest 4.1.10

    Build: CI 433 · Branch: fix/second-review-pass · Commit: 6375b6e431a7cf885a49befec76d7876cd3e538c · Start: 2026-11-04T07:12:23.076Z · Stop: 2026-11-04T07:15:49.695Z

    NameSuiteResultDuration
    replaces a stale 'symbolic' link at 'graph.json' without touching its targetbuild write boundariespassed67.45 ms
    replaces a stale 'hard' link at 'graph.json' without touching its targetbuild write boundariespassed13.17 ms
    replaces a stale 'symbolic' link at 'imports.json' without touching its targetbuild write boundariespassed18.95 ms
    replaces a stale 'hard' link at 'imports.json' without touching its targetbuild write boundariespassed10.38 ms
    replaces a stale 'symbolic' link at 'registrars.json' without touching its targetbuild write boundariespassed19.24 ms
    replaces a stale 'hard' link at 'registrars.json' without touching its targetbuild write boundariespassed12.84 ms
    routes a successful build's ordinary removals and writes through the filesystem hooksbuild write boundariespassed19.14 ms
    names an unresolvable output parent when generated is a dangling linkbuild write boundariespassed1.24 ms
    refuses a staging link planted after stale removalbuild write boundariespassed4.94 ms
    build refuses an escaping generated parent before writing or cleanupbuild write boundariespassed5.03 ms
    view refuses an escaping generated parent before writing or cleanupbuild write boundariespassed4.29 ms
    census refuses an escaping generated parent before writing or cleanupbuild write boundariespassed4.86 ms
    mermaid refuses an escaping generated parent before writing or cleanupbuild write boundariespassed4.19 ms
    gherkin refuses an escaping generated parent before writing or cleanupbuild write boundariespassed6.19 ms
    studio refuses an escaping generated parent before writing or cleanupbuild write boundariespassed4.04 ms
    generate refuses an escaping generated parent before writing or cleanupbuild write boundariespassed3.87 ms
    vault refuses an escaping generated parent before writing or cleanupbuild write boundariespassed5.04 ms
    stamp refuses an escaping generated parent before writing or cleanupbuild write boundariespassed11.13 ms
    keeps the named root in ordinary command outputexplicit symlinked watch rootpassed5.6 ms
    validate starts and reruns through the named rootexplicit symlinked watch rootpassed17.86 ms
    studio starts and reruns through the named rootexplicit symlinked watch rootpassed88.19 ms
    vault starts and reruns through the named rootexplicit symlinked watch rootpassed35.65 ms
    view refuses case-colliding pages and removes stale outputportable projection publicationpassed10.23 ms
    mermaid refuses case-colliding pages and removes stale outputportable projection publicationpassed7.15 ms
    gherkin refuses case-colliding pages and removes stale outputportable projection publicationpassed10.32 ms
    stamp replaces a symbolic link without modifying its targetpublication boundary regressionspassed4.1 ms
    stamp replaces a hard link without modifying its targetpublication boundary regressionspassed3.74 ms
    a stamp that fails after staging leaves no staging file in the page setpublication boundary regressionspassed1.83 ms
    view recovery preserves outside output after a parent swappublication boundary regressionspassed6.23 ms
    census recovery preserves outside output after a parent swappublication boundary regressionspassed6.21 ms
    mermaid recovery preserves outside output after a parent swappublication boundary regressionspassed5.59 ms
    gherkin recovery preserves outside output after a parent swappublication boundary regressionspassed5.64 ms
    studio recovery preserves outside output after a parent swappublication boundary regressionspassed5.11 ms
    vault recovery preserves outside output after a parent swappublication boundary regressionspassed5 ms
    generate recovery preserves outside output after a parent swappublication boundary regressionspassed6.75 ms
    build refuses inside-link generated identitypublication boundary regressionspassed2.93 ms
    build refuses replaced-directory generated identitypublication boundary regressionspassed2.58 ms
    vault refuses a default vault linked outside the root but allows an explicit outside vaultpublication boundary regressionspassed9.03 ms
    generate refuses a default vault linked outside the root but allows an explicit outside vaultpublication boundary regressionspassed23.26 ms
    vault holds a default vault linked inside the root to the placement rules where it resolvespublication boundary regressionspassed11.29 ms
    generate holds a default vault linked inside the root to the placement rules where it resolvespublication boundary regressionspassed28.31 ms
    projection suite refuses a linked generated parent (check-clean: false)publication boundary regressionspassed65.78 ms
    projection suite refuses a linked generated parent (check-clean: true)publication boundary regressionspassed47.87 ms
    package artifacts unlink stale staging links and refuse linked recipe directoriespublication boundary regressionspassed1.5 ms
    package artifacts refuse a linked recipe directory before stale cleanupnot recordedpassed0.78 ms
    watch leaves outside bytes unchanged after direct-empty parent swapnot recordedpassed12.49 ms
    watch leaves outside bytes unchanged after direct-managed parent swapnot recordedpassed15.69 ms
    watch leaves outside bytes unchanged after checkout-empty parent swapnot recordedpassed77.25 ms
    watch leaves outside bytes unchanged after checkout-managed parent swapnot recordedpassed117.05 ms
    watch leaves outside bytes unchanged after studio-direct parent swapnot recordedpassed12.8 ms

Example space

  • corpus · "one authored spec" | "one authored spec the extractor refuses" · declared by an extraction root holding {corpus} and a stale view page {stalePage}
  • stalePage · string · declared by an extraction root holding {corpus} and a stale view page {stalePage}
  • planted · "before the run" | "after the build has invalidated the view" · declared by the stale page is planted {planted}
  • command · "view" | "build" · declared by the {command} command runs at that root

Bound points

ExamplecorpusstalePageplantedcommand
spec:consumers.wholesale-view-rewrite.build-invalidates-view"one authored spec""spec/probe.departed.md""before the run""build"
spec:consumers.wholesale-view-rewrite.failed-run-view-removed"one authored spec the extractor refuses""spec/probe.departed.md""after the build has invalidated the view""view"
spec:consumers.wholesale-view-rewrite.late-stale-page"one authored spec""spec/probe.departed.md""after the build has invalidated the view""view"
spec:consumers.wholesale-view-rewrite.stale-page-removed"one authored spec""spec/probe.departed.md""before the run""view"

Oracle binding: none

Coverage

stalePage: "spec/probe.departed.md" · spec:consumers.wholesale-view-rewrite.build-invalidates-view, spec:consumers.wholesale-view-rewrite.failed-run-view-removed, spec:consumers.wholesale-view-rewrite.late-stale-page, spec:consumers.wholesale-view-rewrite.stale-page-removed · not enumerable

Unbound

  • corpus: None
  • stalePage: None
  • planted: None
  • command: None
Design view

Requirement drawing

Requirement drawing for spec:consumers.wholesale-view-rewrite
The diagram as text
  • spec:consumers.wholesale-view-rewrite: Every view run rewrites the view wholesale · declared Spec
  • spec:consumers.wholesale-view-rewrite.build-invalidates-view: A build that never renders still takes the old view down · declared Spec
  • spec:consumers.wholesale-view-rewrite.failed-run-view-removed: A run that cannot produce a current view leaves no view at all · declared Spec
  • spec:consumers.wholesale-view-rewrite.late-stale-page: A page the build's invalidation never saw still does not survive the swap · declared Spec
  • spec:consumers.wholesale-view-rewrite.stale-page-removed: A page from an earlier run does not survive the next one · declared Spec
  • spec:consumers.design-review: Design Review renders graph context without becoming a gate · declared Spec
  • impl:protocol.build-pipeline-emit: stages build outputs, checks determinism and invalidates projections · anchored code · src/cli/build-command.ts:285
  • impl:protocol.wholesale-view-rewrite: publishes each Design Review as one wholesale temporary-directory replacement · anchored code · src/cli/validate-view-command.ts:127
  • test:protocol.cli-write-boundaries: test:protocol.cli-write-boundaries · anchored test binding · binding present · test/cli-write-boundaries.test.ts:292
  • test:protocol.wholesale-view-rewrite.build-invalidates-view: the build point verifies the up-front invalidation on a command that renders no view · anchored test binding · binding present · test/self-hosting-projections.test.ts:1064
  • test:protocol.wholesale-view-rewrite.failed-run-view-removed: the failed-run point verifies that an uncertifiable view is removed, not left readable · anchored test binding · binding present · test/self-hosting-projections.test.ts:1032
  • test:protocol.wholesale-view-rewrite.late-stale-page: the late-page point verifies that the swap itself evicts what invalidation missed · anchored test binding · binding present · test/self-hosting-projections.test.ts:996
  • test:protocol.wholesale-view-rewrite.stale-page-removed: the stale-page point verifies the wholesale rewrite of the view directory · anchored test binding · binding present · test/self-hosting-projections.test.ts:960
  • spec:consumers.wholesale-view-rewrite refines spec:consumers.design-review · declared
  • spec:consumers.wholesale-view-rewrite.build-invalidates-view refines spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.build-invalidates-view verifies spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.failed-run-view-removed refines spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.failed-run-view-removed verifies spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.late-stale-page refines spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.late-stale-page verifies spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.stale-page-removed refines spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.stale-page-removed verifies spec:consumers.wholesale-view-rewrite · declared
  • impl:protocol.build-pipeline-emit satisfies spec:consumers.wholesale-view-rewrite · anchored
  • impl:protocol.wholesale-view-rewrite satisfies spec:consumers.wholesale-view-rewrite · anchored
  • test:protocol.cli-write-boundaries verifies spec:consumers.wholesale-view-rewrite · anchored
  • test:protocol.wholesale-view-rewrite.build-invalidates-view verifies spec:consumers.wholesale-view-rewrite.build-invalidates-view · anchored
  • test:protocol.wholesale-view-rewrite.failed-run-view-removed verifies spec:consumers.wholesale-view-rewrite.failed-run-view-removed · anchored
  • test:protocol.wholesale-view-rewrite.late-stale-page verifies spec:consumers.wholesale-view-rewrite.late-stale-page · anchored
  • test:protocol.wholesale-view-rewrite.stale-page-removed verifies spec:consumers.wholesale-view-rewrite.stale-page-removed · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: requirementDiagram. Chosen syntax: flowchart TB because folds 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:31 · 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:671 · layer application · context protocol
    • component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:197 · 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:697 · layer application · context protocol
    • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:76 · layer domain · context protocol
  • impl:protocol.build-pipeline-emit · stages build outputs, checks determinism and invalidates projections · src/cli/build-command.ts:285

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

    Uses

    None.

  • impl:protocol.wholesale-view-rewrite · publishes each Design Review as one wholesale temporary-directory replacement · src/cli/validate-view-command.ts:127

    Component: component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:31 · 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.wholesale-view-rewrite
  • E5: verifies · declared (4 unit edges)
The diagram as text
  • spec:consumers.census-page: Census renders the runtime taxonomy without becoming a registry
  • spec:consumers.command-line: Every verb answers --help, and one verb writes every projection root
  • spec:consumers.design-review: Design Review renders graph context without becoming a gate
  • spec:consumers.gherkin-view: Gherkin view renders any Spec as a disposable read shape
  • spec:consumers.mermaid-view: Mermaid renders bounded one-hop and Pack diagrams without becoming a graph browser
  • spec:consumers.obsidian-vault: An Obsidian vault lets a person iterate on designs from the one graph
  • spec:consumers.spec-studio.publisher: sdp studio publishes the Studio as one page set
  • spec:consumers.wholesale-view-rewrite: Every view run rewrites the view wholesale
  • spec:consumers.wholesale-view-rewrite.build-invalidates-view: A build that never renders still takes the old view down
  • spec:consumers.wholesale-view-rewrite.failed-run-view-removed: A run that cannot produce a current view leaves no view at all
  • spec:consumers.wholesale-view-rewrite.late-stale-page: A page the build's invalidation never saw still does not survive the swap
  • spec:consumers.wholesale-view-rewrite.stale-page-removed: A page from an earlier run does not survive the next one
  • spec:extraction.determinism: Committed source derives byte-identical output
  • spec:consumers.wholesale-view-rewrite dependsOn spec:extraction.determinism · declared — check-clean refuses when two renders of one graph differ
  • spec:consumers.wholesale-view-rewrite refines spec:consumers.design-review · declared
  • spec:consumers.census-page dependsOn spec:consumers.wholesale-view-rewrite · declared — the shared build invalidates the projection roots before this publisher renders
  • spec:consumers.command-line dependsOn spec:consumers.wholesale-view-rewrite · declared — each root the verb writes is written and invalidated as every view run's is
  • spec:consumers.gherkin-view dependsOn spec:consumers.wholesale-view-rewrite · declared — the shared build invalidates the projection roots before this publisher renders
  • spec:consumers.mermaid-view dependsOn spec:consumers.wholesale-view-rewrite · declared — the shared build invalidates the projection roots before this publisher renders
  • spec:consumers.obsidian-vault dependsOn spec:consumers.wholesale-view-rewrite · declared — the shared build's invalidation removes the five projection roots and never the vault
  • spec:consumers.spec-studio.publisher dependsOn spec:consumers.wholesale-view-rewrite · declared — the Studio's root is written, invalidated and certified the way the shipped roots are
  • spec:consumers.wholesale-view-rewrite.build-invalidates-view refines spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.failed-run-view-removed refines spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.late-stale-page refines spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.stale-page-removed refines spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.build-invalidates-view verifies spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.failed-run-view-removed verifies spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.late-stale-page verifies spec:consumers.wholesale-view-rewrite · declared
  • spec:consumers.wholesale-view-rewrite.stale-page-removed verifies spec:consumers.wholesale-view-rewrite · 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
dependsOn · outgoingCommitted source derives byte-identical output
spec:extraction.determinism · resolves
declaredcheck-clean refuses when two renders of one graph differNone
refines · outgoingDesign Review renders graph context without becoming a gate
spec:consumers.design-review · resolves
declaredNoneNone
dependsOn · incomingCensus renders the runtime taxonomy without becoming a registry
spec:consumers.census-page · resolves
declaredthe shared build invalidates the projection roots before this publisher rendersNone
dependsOn · incomingEvery verb answers --help, and one verb writes every projection root
spec:consumers.command-line · resolves
declaredeach root the verb writes is written and invalidated as every view run's isNone
dependsOn · incomingGherkin view renders any Spec as a disposable read shape
spec:consumers.gherkin-view · resolves
declaredthe shared build invalidates the projection roots before this publisher rendersNone
dependsOn · incomingMermaid renders bounded one-hop and Pack diagrams without becoming a graph browser
spec:consumers.mermaid-view · resolves
declaredthe shared build invalidates the projection roots before this publisher rendersNone
dependsOn · incomingAn Obsidian vault lets a person iterate on designs from the one graph
spec:consumers.obsidian-vault · resolves
declaredthe shared build's invalidation removes the five projection roots and never the vaultNone
dependsOn · incomingsdp studio publishes the Studio as one page set
spec:consumers.spec-studio.publisher · resolves
declaredthe Studio's root is written, invalidated and certified the way the shipped roots areNone
refines · incomingA build that never renders still takes the old view down
spec:consumers.wholesale-view-rewrite.build-invalidates-view · resolves
declaredNoneNone
refines · incomingA run that cannot produce a current view leaves no view at all
spec:consumers.wholesale-view-rewrite.failed-run-view-removed · resolves
declaredNoneNone
refines · incomingA page the build's invalidation never saw still does not survive the swap
spec:consumers.wholesale-view-rewrite.late-stale-page · resolves
declaredNoneNone
refines · incomingA page from an earlier run does not survive the next one
spec:consumers.wholesale-view-rewrite.stale-page-removed · resolves
declaredNoneNone
verifies · incomingA build that never renders still takes the old view down
spec:consumers.wholesale-view-rewrite.build-invalidates-view · resolves
declaredNoneNone
verifies · incomingA run that cannot produce a current view leaves no view at all
spec:consumers.wholesale-view-rewrite.failed-run-view-removed · resolves
declaredNoneNone
verifies · incomingA page the build's invalidation never saw still does not survive the swap
spec:consumers.wholesale-view-rewrite.late-stale-page · resolves
declaredNoneNone
verifies · incomingA page from an earlier run does not survive the next one
spec:consumers.wholesale-view-rewrite.stale-page-removed · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.build-pipeline-emit · stages build outputs, checks determinism and invalidates projections · src/cli/build-command.ts:285 · role service · component component:protocol.cli · layer edge · context protocol
  • impl:protocol.wholesale-view-rewrite · publishes each Design Review as one wholesale temporary-directory replacement · src/cli/validate-view-command.ts:127 · role publisher · component component:protocol.cli · layer edge · 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.