Spec Studio

CI run records are joined to verifiers in a view

spec:observation.run-evidenceUse Case / Behavior · featureready floor ready

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

Design: 7 design entries · 5 pinned declarations · 1 decision

Findings: no errors, no warnings

specs/observation/run-evidence.sdp.md

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

The original design put test reports in the graph and used passing runs to mark verification. The Protocol keeps run verdicts in CI. A resolving verifier binding confers has-verifier; showing a recorded run beside that binding confers no delivery fact. Runtime observation against a measurable target is a separate concern carried by the runtime overlay.

An adopter that keeps CI run reports needs to read them beside verifier bindings as a separately named input. Recipe 45 reads them, and the Studio admits them as one of its two named inputs. The view identifies each run by its own fields and its commit, and distinguishes evidence from a test file from a verdict for one anchored verifier. Test reporters write a test's file as an absolute path or a path from the directory they ran in, so the join reads a path's end as well as the whole path. The freshness question records what remains unsettled about comparing a run with the source being read.

Intent
problem
A reader who wants to know whether a bound verifier passed has to leave the Protocol's views for CI, and an adopter that keeps run records has no view that shows them beside the binding without mistaking them for a delivery fact.
outcome
Show a verifier's recorded runs beside its binding in a view, labelled as external input with its commit, while the graph keeps recording only that the binding exists.

Open questions

  • non-blocking · question.freshness line 28 · specs/observation/run-evidence.sdp.md:28 · How does a view say a run is stale: by its commit against the commit being read, or by whether the bound files changed between the two?Decider: ownerProvisional: Display the run and source commit identifiers when they differ, as the differing-commit rule requires; whether freshness also follows changes to bound files remains open.
Behavior
rule.graphUntouched line 33 · specs/observation/run-evidence.sdp.md:33
Run records are an input a view reads beside the graph, named by the caller; the graph never holds them, and no node, edge or delivery fact derives from them.

spec:observation.run-evidence.absolute-path-joins · enabled, spec:observation.run-evidence.unanchored-file-unjoined · enabled

rule.fileGrain line 34 · specs/observation/run-evidence.sdp.md:34
A run record joins every verifier whose test anchor sits in the test file the record names, because the file is the binding grain of both anchor forms; each test name in the record shows as a row under that verifier. The join is at file grain: a result is evidence from the verifier's file, never the result of that verifier, because a file may hold several suites and a filtered run may exercise only one.

spec:observation.run-evidence.absolute-path-joins · enabled

rule.ctrfInput line 35 · specs/observation/run-evidence.sdp.md:35
The Protocol reads run records in the Common Test Report Format, CTRF, an open JSON schema with reporters for the common test runners, passed to a view as a recipe parameter. A record joins only when its reporter fills CTRF's optional filePath field, and an adopter with records of another shape maps them into CTRF itself.

spec:observation.run-evidence.absolute-path-joins · enabled

rule.pathNormalization line 36 · specs/observation/run-evidence.sdp.md:36
A record's file path joins a test anchor's file when, with each backslash written as a slash and a leading ./ removed, it equals that file or ends with a slash followed by that file; when several anchored files match, the longest joins.

spec:observation.run-evidence.absolute-path-joins · enabled

rule.unjoinedReported line 37 · specs/observation/run-evidence.sdp.md:37
A record that names no file path, or a file that holds no test anchor, is reported as unjoined with its reason, never dropped, and an input that is not a CTRF report is reported with its problem while the other inputs still join.

spec:observation.run-evidence.unanchored-file-unjoined · enabled

rule.commitField line 38 · specs/observation/run-evidence.sdp.md:38
A run's commit is CTRF's results.environment.commit, and a run without one reads not recorded; given the commit being read, the recipe says for each run whether its commit is that commit, and never says the run is fresh or stale.

no example exercises it

rule line 39 · specs/observation/run-evidence.sdp.md:39
A view shows each run beside the verifiers anchored in its file, with its result, its commit and the input it came from, labelled as external run evidence from that file and never as has-verifier, implemented or a pass verdict for one verifier.
rule line 40 · specs/observation/run-evidence.sdp.md:40
A run whose commit differs from the commit being read shows both commits, so a reader sees how old it is.
rule.studioInput line 41 · specs/observation/run-evidence.sdp.md:41
The Design Review stays a function of the graph alone and shows no run; run evidence appears only in a view that explicitly admits records as external input: recipe 45, and the Studio built with run records, which shows them on its runs page, in its tests lens and on the Spec pages of the Specs their files verify.

no example exercises it

2 unkeyed rules.

Verifying examples

A test whose reporter wrote an absolute path joins its anchored file · spec:observation.run-evidence.absolute-path-joins · ready floor ready

Executable Spec

Given a CTRF report whose test {testName: "renders the page"} names the file {filePath: "/home/runner/work/repo/repo/test/page.test.ts"} and reports the result {status: "passed"}
Given the graph holds a test anchor in the file {anchorFile: "test/page.test.ts"} that verifies {specId: "spec:probe.page"}
When recipe 45 reads the report
Then the test joins the file {joinedFile: "test/page.test.ts"}
Then the test is unjoined for the reason {reason: "none"}
Then the delivery facts of the verified Spec are unchanged: {factsUnchanged: true}

Open example

A test in a file with no test anchor is reported as unjoined · spec:observation.run-evidence.unanchored-file-unjoined · ready floor ready

Executable Spec

Given a CTRF report whose test {testName: "counts the rows"} names the file {filePath: "test/other.test.ts"} and reports the result {status: "failed"}
Given the graph holds a test anchor in the file {anchorFile: "test/page.test.ts"} that verifies {specId: "spec:probe.page"}
When recipe 45 reads the report
Then the test joins the file {joinedFile: ""}
Then the test is unjoined for the reason {reason: "noTestAnchor"}
Then the delivery facts of the verified Spec are unchanged: {factsUnchanged: true}

Open example

Example space

Given a CTRF report whose test {testName:string} names the file {filePath:string} and reports the result {status:"passed"|"failed"|"skipped"}
Given the graph holds a test anchor in the file {anchorFile:string} that verifies {specId:string}
When recipe 45 reads the report
Then the test joins the file {joinedFile:string}
Then the test is unjoined for the reason {reason:"none"|"noFilePath"|"noTestAnchor"}
Then the delivery facts of the verified Spec are unchanged: {factsUnchanged:boolean}
Design
runsRecipe line 44 · specs/observation/run-evidence.sdp.md:44
recipe 45, run evidence, takes params.runs, one CTRF report or a list of them in input order, required; params.commit, the commit being read, optional; and params.spec, a Spec id, optional, which keeps only the files whose test anchors verify that Spec directly or through an enabled example. It returns { inputs, diagnostics, totals, files, unjoined }, and { diagnostics } alone when params.runs is missing or holds no report it can read.
ctrfFields line 45 · specs/observation/run-evidence.sdp.md:45
the recipe reads reportFormat and specVersion; results.tool.name and version; results.summary with tests, passed, failed, skipped, pending, other, start and stop; results.environment with commit, branchName, buildName and buildNumber; and per test name, status, duration, filePath and suite; it reads no other field. A readable CTRF report has reportFormat: "CTRF" and a specVersion, as the CTRF schema requires; a report missing either produces a run diagnostic and contributes no run rows.
runInput line 46 · specs/observation/run-evidence.sdp.md:46
{ index: number; tool: string | null; toolVersion: string | null; specVersion: string; commit: string | null; branch: string | null; build: string | null; start: number | null; stop: number | null; summary: { tests: number; passed: number; failed: number; skipped: number; pending: number; other: number }; sameCommit: boolean | null }, one per readable report, index its position from 0, build the build name and number joined by a space, and sameCommit null without params.commit or without a run commit.

no citation recorded

runFile line 47 · specs/observation/run-evidence.sdp.md:47
{ file: string; anchors: { id: string; verifies: string[] }[]; specs: string[]; results: { input: number; name: string; suite: string | null; status: string; duration: number | null }[] }, one per anchored test file a record joins, sorted by file, specs the Specs its anchors verify directly or through an enabled example, sorted, and results in input order and then record order, suite the record's suite path joined by > , and duration the recorded milliseconds without rounding; a view formats that number for display.

no citation recorded

unjoinedRow line 48 · specs/observation/run-evidence.sdp.md:48
{ input: number; name: string; filePath: string | null; status: string; reason: "noFilePath" | "noTestAnchor" }, in input order and then record order.

no citation recorded

runDiagnostic line 49 · specs/observation/run-evidence.sdp.md:49
{ input: number | null; problem: string }, for a missing params.runs, with input null, or for an input that is not an object, has no results.tests list, lacks reportFormat or specVersion, or names a reportFormat other than CTRF.

no citation recorded

runTotals line 50 · specs/observation/run-evidence.sdp.md:50
{ inputs: number; tests: number; joined: number; unjoined: number; files: number; specs: number }, counting the readable reports, every test they hold, the tests joined and unjoined, the files joined, and the distinct Specs those files verify.

no citation recorded

Verification

Verifier bindings

  • spec:observation.run-evidence.absolute-path-joins · A test whose reporter wrote an absolute path joins its anchored file · declared · example enabled · specs/observation/run-evidence.absolute-path-joins.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:observation.run-evidence.unanchored-file-unjoined · A test in a file with no test anchor is reported as unjoined · declared · example enabled · specs/observation/run-evidence.unanchored-file-unjoined.sdp.md

Example space

  • testName · string · declared by a CTRF report whose test {testName} names the file {filePath} and reports the result {status}
  • filePath · string · declared by a CTRF report whose test {testName} names the file {filePath} and reports the result {status}
  • status · "passed" | "failed" | "skipped" · declared by a CTRF report whose test {testName} names the file {filePath} and reports the result {status}
  • anchorFile · string · declared by the graph holds a test anchor in the file {anchorFile} that verifies {specId}
  • specId · string · declared by the graph holds a test anchor in the file {anchorFile} that verifies {specId}

Bound points

ExampletestNamefilePathstatusanchorFilespecId
spec:observation.run-evidence.absolute-path-joins"renders the page""/home/runner/work/repo/repo/test/page.test.ts""passed""test/page.test.ts""spec:probe.page"
spec:observation.run-evidence.unanchored-file-unjoined"counts the rows""test/other.test.ts""failed""test/page.test.ts""spec:probe.page"

Oracle binding: present · oracle:protocol.run-evidence · test/studio-s4.test.ts:284

Coverage

testName: "renders the page" · spec:observation.run-evidence.absolute-path-joins; "counts the rows" · spec:observation.run-evidence.unanchored-file-unjoined · not enumerable

filePath: "/home/runner/work/repo/repo/test/page.test.ts" · spec:observation.run-evidence.absolute-path-joins; "test/other.test.ts" · spec:observation.run-evidence.unanchored-file-unjoined · not enumerable

anchorFile: "test/page.test.ts" · spec:observation.run-evidence.absolute-path-joins, spec:observation.run-evidence.unanchored-file-unjoined · not enumerable

specId: "spec:probe.page" · spec:observation.run-evidence.absolute-path-joins, spec:observation.run-evidence.unanchored-file-unjoined · not enumerable

Unbound

  • testName: None
  • filePath: None
  • status: None
  • anchorFile: None
  • specId: None
Design view

Requirement drawing

Requirement drawing for spec:observation.run-evidence
Requirement drawing for spec:observation.run-evidencesatisfies · anchoredsatisfies · anchoredmodels · anchoredrefines · declaredrefines, verifies · declaredrefines, verifies · declaredverifies · anchoredverifies · anchoredIntended Specsspec:observation.run-evidenceCI run records are joinedto verifiers in a view…observation.run-evidencedeclared SpecDeclared verifying examplesspec:observation.run-evidence.absolute-path-joinsA test whose reporter wrotean absolute path joins itsanchored file…observation.run-evidence.absolute-path-joinsdeclared Specspec:observation.run-evidence.unanchored-file-unjoinedA test in a file with notest anchor is reported asunjoined…observation.run-evidence.unanchored-file-unjoineddeclared SpecSatisfying or referencingunitsimpl:protocol.run-evidence-recipeasserts realization of Runevidence indocs/agent-surface/recipes.md…protocol.run-evidence-recipeanchored codeimpl:protocol.studio-runs-pagerenders readable CTRFinputs, file results,unjoined records anddiagnostics…protocol.studio-runs-pageanchored codeTest or oracle bindingsoracle:protocol.run-evidenceoracle:protocol.run-evidence…protocol.run-evidenceanchored oracle bindingtest:protocol.run-absolutetest:protocol.run-absolute…protocol.run-absoluteanchored test binding ·binding presenttest:protocol.run-unjoinedtest:protocol.run-unjoined…protocol.run-unjoinedanchored test binding ·binding presentOutside the selected setspec:consumers.projections-modelProjections fan out fromone graph without becomingtruth stores…consumers.projections-modeldeclared Spec
The diagram as text
  • spec:observation.run-evidence: CI run records are joined to verifiers in a view · declared Spec
  • spec:observation.run-evidence.absolute-path-joins: A test whose reporter wrote an absolute path joins its anchored file · declared Spec
  • spec:observation.run-evidence.unanchored-file-unjoined: A test in a file with no test anchor is reported as unjoined · declared Spec
  • spec:consumers.projections-model: Projections fan out from one graph without becoming truth stores · declared Spec
  • impl:protocol.run-evidence-recipe: asserts realization of Run evidence in docs/agent-surface/recipes.md · anchored code · test/recipes.test.ts:7277
  • impl:protocol.studio-runs-page: renders readable CTRF inputs, file results, unjoined records and diagnostics · anchored code · src/projections/studio/pages/runs-page.ts:6
  • oracle:protocol.run-evidence: oracle:protocol.run-evidence · anchored oracle binding · test/studio-s4.test.ts:284
  • test:protocol.run-absolute: test:protocol.run-absolute · anchored test binding · binding present · test/studio-s4.test.ts:346
  • test:protocol.run-unjoined: test:protocol.run-unjoined · anchored test binding · binding present · test/studio-s4.test.ts:353
  • spec:observation.run-evidence refines spec:consumers.projections-model · declared — run records inform a view without becoming graph facts
  • spec:observation.run-evidence.absolute-path-joins refines spec:observation.run-evidence · declared
  • spec:observation.run-evidence.absolute-path-joins verifies spec:observation.run-evidence · declared
  • spec:observation.run-evidence.unanchored-file-unjoined refines spec:observation.run-evidence · declared
  • spec:observation.run-evidence.unanchored-file-unjoined verifies spec:observation.run-evidence · declared
  • impl:protocol.run-evidence-recipe satisfies spec:observation.run-evidence · anchored
  • impl:protocol.studio-runs-page satisfies spec:observation.run-evidence · anchored
  • oracle:protocol.run-evidence models spec:observation.run-evidence · anchored
  • test:protocol.run-absolute verifies spec:observation.run-evidence.absolute-path-joins · anchored
  • test:protocol.run-unjoined verifies spec:observation.run-evidence.unanchored-file-unjoined · 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

Runtime
  • 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.run-evidence-recipe · asserts realization of Run evidence in docs/agent-surface/recipes.md · test/recipes.test.ts:7277

    Uses

    None.

  • impl:protocol.studio-runs-page · renders readable CTRF inputs, file results, unjoined records and diagnostics · src/projections/studio/pages/runs-page.ts:6

    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:observation.run-evidence
The diagram as text
  • spec:consumers.agent-surface.recipe-parameters: Recipes take parameters as data and ship as runnable files
  • spec:consumers.projections-model: Projections fan out from one graph without becoming truth stores
  • 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.lenses.tests: The tests lens shows how far each Spec's verification reaches
  • 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.verification-panels: The panels for examples, targets, verifiers and evidence
  • spec:decisions.binding-not-liveness: Bindings state existence, not liveness
  • spec:extraction.delivery-facts: Resolving bindings confer direct delivery facts
  • spec:observation.run-evidence: CI run records are joined to verifiers in a view
  • spec:observation.run-evidence.absolute-path-joins: A test whose reporter wrote an absolute path joins its anchored file
  • spec:observation.run-evidence.unanchored-file-unjoined: A test in a file with no test anchor is reported as unjoined
  • spec:protocol.roadmap-replaces-plans: The Protocol reads its next work from its roadmap and keeps its delivery record in git and its pull requests
  • spec:observation.run-evidence decidedBy spec:decisions.binding-not-liveness · declared
  • spec:observation.run-evidence dependsOn spec:consumers.agent-surface.recipe-parameters · declared — the caller passes run records to the recipe as data
  • spec:observation.run-evidence dependsOn spec:extraction.delivery-facts · declared — the view reads verifier bindings while leaving their delivery facts unchanged
  • spec:observation.run-evidence refines spec:consumers.projections-model · declared — run records inform a view without becoming graph facts
  • 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.lenses.tests dependsOn spec:observation.run-evidence · declared — with run records, a row adds the results recipe 45 joins from its verifiers' files
  • spec:consumers.spec-studio.runs-page dependsOn spec:observation.run-evidence · declared — the page renders the run evidence recipe 45 joins from the run records
  • spec:consumers.spec-studio.verification-panels dependsOn spec:observation.run-evidence · declared — with run records, a verifier's row adds the results recipe 45 joins from its test file
  • spec:protocol.roadmap-replaces-plans dependsOn spec:observation.run-evidence · declared — an arc's acceptance reads run records as evidence from test files at their recorded commit
  • spec:observation.run-evidence.absolute-path-joins refines spec:observation.run-evidence · declared
  • spec:observation.run-evidence.unanchored-file-unjoined refines spec:observation.run-evidence · declared
  • spec:observation.run-evidence.absolute-path-joins verifies spec:observation.run-evidence · declared
  • spec:observation.run-evidence.unanchored-file-unjoined verifies spec:observation.run-evidence · declared
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: flowchart. Chosen syntax: labelled flowchart, preserving exact relations, claims and folds.

Rests on

Rested on by

Distance 1

Distance 2

Distance 3

Distance 4

Distance 5

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingBindings state existence, not liveness
spec:decisions.binding-not-liveness · resolves
declaredNoneNone
dependsOn · outgoingRecipes take parameters as data and ship as runnable files
spec:consumers.agent-surface.recipe-parameters · resolves
declaredthe caller passes run records to the recipe as dataNone
dependsOn · outgoingResolving bindings confer direct delivery facts
spec:extraction.delivery-facts · resolves
declaredthe view reads verifier bindings while leaving their delivery facts unchangedNone
refines · outgoingProjections fan out from one graph without becoming truth stores
spec:consumers.projections-model · resolves
declaredrun records inform a view without becoming graph factsNone
dependsOn · incomingThe Studio reads two named inputs beside the graph, a base graph and run records
spec:consumers.spec-studio.data.inputs · resolves
declaredthe run records input is read only as run evidenceNone
dependsOn · incomingThe tests lens shows how far each Spec's verification reaches
spec:consumers.spec-studio.lenses.tests · resolves
declaredwith run records, a row adds the results recipe 45 joins from its verifiers' filesNone
dependsOn · incomingThe runs page shows the run records the build was given, joined to test files
spec:consumers.spec-studio.runs-page · resolves
declaredthe page renders the run evidence recipe 45 joins from the run recordsNone
dependsOn · incomingThe panels for examples, targets, verifiers and evidence
spec:consumers.spec-studio.verification-panels · resolves
declaredwith run records, a verifier's row adds the results recipe 45 joins from its test fileNone
dependsOn · incomingThe Protocol reads its next work from its roadmap and keeps its delivery record in git and its pull requests
spec:protocol.roadmap-replaces-plans · resolves
declaredan arc's acceptance reads run records as evidence from test files at their recorded commitNone
refines · incomingA test whose reporter wrote an absolute path joins its anchored file
spec:observation.run-evidence.absolute-path-joins · resolves
declaredNoneNone
refines · incomingA test in a file with no test anchor is reported as unjoined
spec:observation.run-evidence.unanchored-file-unjoined · resolves
declaredNoneNone
verifies · incomingA test whose reporter wrote an absolute path joins its anchored file
spec:observation.run-evidence.absolute-path-joins · resolves
declaredNonegraphUntouched, fileGrain, ctrfInput, pathNormalization
verifies · incomingA test in a file with no test anchor is reported as unjoined
spec:observation.run-evidence.unanchored-file-unjoined · resolves
declaredNonegraphUntouched, unjoinedReported

Bindings

Implementation binding: present

  • impl:protocol.run-evidence-recipe · asserts realization of Run evidence in docs/agent-surface/recipes.md · test/recipes.test.ts:7277
  • impl:protocol.studio-runs-page · renders readable CTRF inputs, file results, unjoined records and diagnostics · src/projections/studio/pages/runs-page.ts:6 · role projection · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: present

  • oracle:protocol.run-evidence · test/studio-s4.test.ts:284

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.