Spec Studio

The runs page shows a run as external evidence from a test file

spec:consumers.spec-studio.runs-page.external-evidenceExample / Scenario · storyready floor ready

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

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

Findings: no errors, no warnings

specs/consumers/spec-studio.runs-page.external-evidence.sdp.md

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

Intent
outcome
Execute the runs page on one report: the run named by its tool, its results under the test file they join, and no page saying a Spec or a verifier passed.
assumptions
  • The world writes a root with one Spec and one test file holding a specTest anchor that verifies it, writes one CTRF report whose three tests name that file, two passed and one failed, builds the page set with the report as run records, and reads the runs page, then the tests lens and the Spec page for any sentence saying that the Spec or the verifier passed.
Behavior

Examples

Given one CTRF report whose tool is {tool: "vitest"} at version {version: "3.2.4"}, and whose tests in an anchored test file {passed: 2} passed and {failed: 1} failed
When the build renders the runs page
Then the run's heading reads {heading: "Run 1: external run evidence from vitest 3.2.4"}
Then the page lists {rows: 3} results under that test file
Then a page says that a Spec or a verifier passed: {verdict: false}
Verification

Verifier bindings

  • test:protocol.run-external · anchored · test anchor binding present · test/studio-s4.test.ts:380

    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 2: external run evidence from vitest 4.1.10

    Build: CI 439 · Branch: docs/articles-refresh-1 · Commit: 61576184ea9f39b7f91c51fef5ff991b0bf2d0e6 · Start: 2026-11-04T07:59:39.962Z · Stop: 2026-11-04T08:03:39.928Z

    NameSuiteResultDuration
    recipe 45 joins normalized paths, preserves records and graph facts, and diagnoses other inputsnot recordedpassed69.67 ms
    renders external run evidence with result rows, metadata, diagnostics and conditional navigationnot recordedpassed84.97 ms
    reads repeated --runs before extraction and leaves input bytes untouchednot recordedpassed116.31 ms
    stamps apart, touches no page, refuses bad sources and removes the stamp on rebuildnot recordedpassed87.69 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)passed11.8 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)passed12.06 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)passed21.87 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)passed70.61 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)passed124.05 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)passed60.95 ms
    the stamp links source locations only after an HTTP stamp loads, encoding path segmentsnot recordedpassed8.05 ms
    recipe 45 picks the longest suffix and scopes through enabled examples at file grainnot recordedpassed13.53 ms
    ships a reusable preview, disabled by default, and deploys its own pull requests with runs and diffnot recordedpassed17.38 ms
    the tests lens counts file results once per Spec and names every run inputnot recordedpassed37.44 ms
    the Pack sentence keeps the graph's binding limit and positively names external evidencenot recordedpassed29.77 ms
    run metadata labels build and branch, and absent fields read not recordednot recordedpassed0.71 ms
    unjoined records escape outside names and explain both reason codes in wordsnot recordedpassed18.61 ms
    run files show the file alone, bindings and Suite, with one header per runnot recordedpassed17.78 ms
    recipe 45 does not join a suffix inside a path segmentnot recordedpassed4.29 ms
    stamp defaults to unknown and a stamped page set passes check-cleannot recordedpassed67.56 ms
    every reusable preview job's permissions fit the CI caller's grantnot recordedpassed19.42 ms
    PR checks and preview stamps name the same default merge checkoutnot recordedpassed16.05 ms
    preview download is optional and cancelled or skipped checks do not call itnot recordedpassed16.59 ms
    deploy checks the enabled Pages source before writing: gh-pagesnot recordedpassed21.31 ms
    deploy checks the enabled Pages source before writing: mainnot recordedpassed25.62 ms
    deploy checks the enabled Pages source before writing: disablednot recordedpassed12.32 ms
    deploy succeeds only once Pages publishes the pushed commit: an unrelated errored build is newestnot recordedpassed111.37 ms
    deploy succeeds only once Pages publishes the pushed commit: a retried build follows an errored onenot recordedpassed37.58 ms
    deploy succeeds only once Pages publishes the pushed commit: the build errorsnot recordedpassed41.82 ms
    deploy succeeds only once Pages publishes the pushed commit: the commit is never builtnot recordedpassed735.47 ms
    deploy succeeds only once Pages publishes the pushed commit: the answer arrives after the waitnot recordedpassed1540.55 ms
    preview still stamps and uploads rendered pages when evidence is absent and validation failsnot recordedpassed130.42 ms
    places external file rows under their verifier and renders shared files oncenot recordedpassed61.71 ms
    accepts the preview workflow's base and run flags togethernot recordedpassed56.64 ms
    formats external run durations to at most two decimals on every pagenot recordedpassed18.88 ms
    preview stamps only this invocation's page set: malformed-runsnot recordedpassed800.83 ms
    preview stamps only this invocation's page set: escaping-parentnot recordedpassed53.99 ms
    preview stamps only this invocation's page set: fresh-findingsnot recordedpassed1732.01 ms
Design view

Requirement drawing

  • Satisfying or referencing units: no recorded binding.
Requirement drawing for spec:consumers.spec-studio.runs-page.external-evidence
The diagram as text
  • spec:consumers.spec-studio.runs-page.external-evidence: The runs page shows a run as external evidence from a test file · declared Spec
  • spec:consumers.spec-studio.runs-page: The runs page shows the run records the build was given, joined to test files · declared Spec
  • test:protocol.run-external: test:protocol.run-external · anchored test binding · binding present · test/studio-s4.test.ts:380
  • spec:consumers.spec-studio.runs-page.external-evidence refines spec:consumers.spec-studio.runs-page · declared
  • spec:consumers.spec-studio.runs-page.external-evidence verifies spec:consumers.spec-studio.runs-page · declared
  • test:protocol.run-external verifies spec:consumers.spec-studio.runs-page.external-evidence · 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

No implementation neighborhood recorded.

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.runs-page.external-evidence
  • E2: verifies · declared
The diagram as text
  • spec:consumers.spec-studio.runs-page: The runs page shows the run records the build was given, joined to test files
  • spec:consumers.spec-studio.runs-page.external-evidence: The runs page shows a run as external evidence from a test file
  • spec:consumers.spec-studio.runs-page.external-evidence refines spec:consumers.spec-studio.runs-page · declared
  • spec:consumers.spec-studio.runs-page.external-evidence verifies spec:consumers.spec-studio.runs-page · 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

No Spec rests on this Spec.

Relations

Relation and directionOther endClaimReasonExercised keys
refines · outgoingThe runs page shows the run records the build was given, joined to test files
spec:consumers.spec-studio.runs-page · resolves
declaredNoneNone
verifies · outgoingThe runs page shows the run records the build was given, joined to test files
spec:consumers.spec-studio.runs-page · resolves
declaredNonenamesEachRun, externalEvidence, runSections

Bindings

Implementation binding: none

Design reference: none

Verifier binding: present

  • test:protocol.run-external · anchored · test/studio-s4.test.ts:380 · 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.