Spec Studio

The tests lens shows how far each Spec's verification reaches

spec:consumers.spec-studio.lenses.testsUse Case / Behavior · storyready floor ready

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

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

Findings: no errors, no warnings

specs/consumers/spec-studio.lenses.tests.sdp.md

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

A verifier binding states that a verifier exists, and pass and fail stay in CI, so the lens shows bindings and coverage. It shows a run result only when the build was given run records, and then as evidence from a test file, never as a verdict on a Spec.

Intent
outcome
Let a person see, for every Spec, whether a verifier is bound, which keyed rules an example exercises, and which example-space values no example binds.
Behavior
rule.coverageRows line 27 · specs/consumers/spec-studio.lenses.tests.sdp.md:27
The lens lists one row per Spec that is not an example, in id order: its verifier binding as present or none, with its verifiers and how many are enabled; its keyed rules with how many an enabled example exercises, from recipe 34; its unkeyed rules, counted apart because the graph cannot tell which examples exercise a rule with no key; and, when it owns an example space, its uncovered values and the examples that leave a slot unbound, from recipe 44. Each row links to the verification panel of the Spec's page. A space with no enumerable slot is not measurable, whether or not it has examples; otherwise it is uncovered when any enumerable value has no example and covered when all enumerable values have examples. Non-enumerable slots do not affect a mixed space's classification.

spec:consumers.spec-studio.lenses.tests.coverage-row · enabled

Cited at

  • Test line · test/studio-s1.test.ts:433 · test:protocol.studio-tests-coverage-row
rule.bindingsOnly line 28 · specs/consumers/spec-studio.lenses.tests.sdp.md:28
The lens shows verifier bindings and states no run result of its own; with the run records input, a row adds how many of the results recipe 45 joins from its verifiers' test files passed, failed, were skipped, pending or other, labelled as external run evidence from those files and never as a verdict on the Spec or on one verifier.

no example exercises it

rule.filters line 29 · specs/consumers/spec-studio.lenses.tests.sdp.md:29
Filters narrow the rows by verifier binding, by whether a keyed rule goes unexercised, by example-space classification (covered, uncovered, not measurable or no space), and by Pack, and the section says how many rows it shows; without script every row shows.

no example exercises it

Cited at

  • Test line · test/studio-s1.test.ts:434 · test:protocol.studio-tests-coverage-row
rule.testsSummary line 30 · specs/consumers/spec-studio.lenses.tests.sdp.md:30
The page opens with sentences the build counts from the recipes' answers: the Specs with and without a verifier binding, the keyed rules exercised and unexercised, the unkeyed rules, the example spaces with an uncovered value, and, with run records, the inputs it names.

no example exercises it

0 unkeyed rules.

Verifying examples

A Spec's row on the tests lens counts its exercised keyed rules · spec:consumers.spec-studio.lenses.tests.coverage-row · ready floor ready

Executable Spec

Given a Spec with {keyed: 2} keyed rules and {unkeyed: 1} unkeyed rules
Given an example bound to a test anchor that exercises {exercised: 1} of those keyed rules
When the build renders the tests lens
Then the Spec's row reads {coverage: "1 of 2 keyed rules exercised"}
Then the Spec's row reads its verifier binding as {binding: "present"}

Open example

Example space

Given a Spec with {keyed:number} keyed rules and {unkeyed:number} unkeyed rules
Given an example bound to a test anchor that exercises {exercised:number} of those keyed rules
When the build renders the tests lens
Then the Spec's row reads {coverage:string}
Then the Spec's row reads its verifier binding as {binding:"present"|"none"}
UI
testsPage line 33 · specs/consumers/spec-studio.lenses.tests.sdp.md:33
in order, the page title Tests, the summary sentences, the filter bar, and the rows, each a line that wraps on a narrow screen.
coverageRow line 34 · specs/consumers/spec-studio.lenses.tests.sdp.md:34
the Spec's title linked to its page's verification panel, its id as code, then as plain text: verifier binding present or none with <n> verifiers, <m> enabled, <e> of <k> keyed rules exercised, <u> unkeyed rules, and <v> uncovered values when its example space has an enumerable slot, or not measurable when it has a space with no enumerable slot; with run records, external run evidence: and the count of each result.
filterBar line 35 · specs/consumers/spec-studio.lenses.tests.sdp.md:35
one labelled select per filter, each listing any and the values the rows hold, and a line saying how many of all rows show.
Verification

Verifier bindings

  • spec:consumers.spec-studio.lenses.tests.coverage-row · A Spec's row on the tests lens counts its exercised keyed rules · declared · example enabled · specs/consumers/spec-studio.lenses.tests.coverage-row.sdp.md

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

    Test anchors: test:protocol.studio-architecture-planned-apart, test:protocol.studio-coverage-literal, test:protocol.studio-coverage-number, test:protocol.studio-diagram-folds-context, test:protocol.studio-diagram-folds-layer, test:protocol.studio-diagram-within-bound, test:protocol.studio-lenses, test:protocol.studio-tests-coverage-row. Specs verified by those bindings: spec:consumers.agent-surface.example-space-coverage, spec:consumers.agent-surface.example-space-coverage.number-not-enumerable, spec:consumers.agent-surface.example-space-coverage.uncovered-literal, spec:consumers.spec-studio.data.recipe-answers, spec:consumers.spec-studio.diagrams, spec:consumers.spec-studio.diagrams.folds-by-context, spec:consumers.spec-studio.diagrams.folds-by-layer, spec:consumers.spec-studio.diagrams.within-bound, spec:consumers.spec-studio.lenses, spec:consumers.spec-studio.lenses.architecture, spec:consumers.spec-studio.lenses.architecture.planned-apart, spec:consumers.spec-studio.lenses.evidence, spec:consumers.spec-studio.lenses.packs, spec:consumers.spec-studio.lenses.tests, spec:consumers.spec-studio.lenses.tests.coverage-row.

    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
    bounds and folds 12 componentsStudio diagramspassed30.61 ms
    bounds and folds 45 componentsStudio diagramspassed7.71 ms
    bounds and folds 50 componentsStudio diagramspassed18.03 ms
    keeps every edge in an open text fallbackStudio diagramspassed2.56 ms
    orders grid contexts and layers and wraps cells within the fixed width budgetStudio diagramspassed4.7 ms
    draws planned-use edges dashed independently of planned box outlinesStudio diagramspassed0.78 ms
    checks the edge bound even when boxes fitStudio diagramspassed0.69 ms
    places folded contexts and layers in their own bands below the gridStudio diagramspassed4.25 ms
    places outgoing relation bands above the subject and folds ties in relation orderStudio diagramspassed10.09 ms
    folds trace relation groups and leaves member overflow as textStudio diagramspassed3.04 ms
    keeps recipe and diagram edges in code-unit order under forced Czech collationStudio lensespassed129.74 ms
    publishes all five ordered lenses and honest evidence without scriptStudio lensespassed41.5 ms
    reads verifier binding from the delivery fact and gives absent coverage its own filter valueStudio lensespassed17.84 ms
    labels a primitive-only space with no examples not measurable and hides it under coveredStudio lensespassed27.26 ms
    classifies 'number' with points [ '1' ] and mixed=false as 'not-measurable'Studio lensespassed17.82 ms
    classifies 'string' with points [ '"a"' ] and mixed=false as 'not-measurable'Studio lensespassed11.69 ms
    classifies 'boolean' with points [ 'true' ] and mixed=false as 'not-measurable'Studio lensespassed13.27 ms
    classifies '"a"|"b"' with points [] and mixed=false as 'uncovered'Studio lensespassed6.82 ms
    classifies '"a"|"b"' with points [ '"a"' ] and mixed=false as 'uncovered'Studio lensespassed7.04 ms
    classifies '"a"|"b"' with points [ '"a"', '"b"' ] and mixed=false as 'covered'Studio lensespassed20.44 ms
    classifies '"a"|"b"' with points [ '"a"' ] and mixed=true as 'uncovered'Studio lensespassed19.79 ms
    classifies '"a"|"b"' with points [ '"a"', '"b"' ] and mixed=true as 'covered'Studio lensespassed23.06 ms
    renders member subjects, code spans, used-by counts, differences and empty componentsStudio lensespassed16.1 ms
    describes evidence sources as not trackedStudio lensespassed2.69 ms
    executes the bound example against a fresh worldAn architecture within the bound draws in one diagram, the same bytes twice (spec:consumers.spec-studio.diagrams.within-bound)passed18.43 ms
    executes the bound example against a fresh worldAn architecture over the bound folds by context (spec:consumers.spec-studio.diagrams.folds-by-context)passed11.36 ms
    executes the bound example against a fresh worldOne context over the bound folds by layer (spec:consumers.spec-studio.diagrams.folds-by-layer)passed11.28 ms
    executes the bound example against a fresh worldA component design no anchor realizes draws planned beside the built one (spec:consumers.spec-studio.lenses.architecture.planned-apart)passed21.54 ms
    executes the bound example against a fresh worldA Spec's row on the tests lens counts its exercised keyed rules (spec:consumers.spec-studio.lenses.tests.coverage-row)passed20.54 ms
    executes the bound example against a fresh worldA literal no example binds is reported uncovered, and an unbound child is named (spec:consumers.agent-surface.example-space-coverage.uncovered-literal)passed5.25 ms
    executes the bound example against a fresh worldA number slot is not enumerable and reports no uncovered value (spec:consumers.agent-surface.example-space-coverage.number-not-enumerable)passed3.13 ms
    reuses the build's reader and validation findings during Studio recipe evaluationnot recordedpassed3.65 ms
    documents the component and member fields recipe 17 addsnot recordedpassed1.47 ms
    evaluates each shipped recipe once for its assigned parameters and shares Pack totals, with base falsenot recordedpassed18.31 ms
    evaluates each shipped recipe once for its assigned parameters and shares Pack totals, with base truenot recordedpassed15.91 ms
    keeps label lines bounded and orders member depths numerically with outside units lastnot recordedpassed1.76 ms
    labels planned uses, reports unreadable designs and keeps unknown structure visiblenot recordedpassed9.16 ms
    gives unstated context and layer folds addressable text descriptionsnot recordedpassed1.11 ms
    names a single edge relation once in the legend and preserves its text equivalentnot recordedpassed1.76 ms
    names solid and planned uses once without repeating edge labelsnot recordedpassed0.58 ms

Example space

  • keyed · number · declared by a Spec with {keyed} keyed rules and {unkeyed} unkeyed rules
  • unkeyed · number · declared by a Spec with {keyed} keyed rules and {unkeyed} unkeyed rules
  • exercised · number · declared by an example bound to a test anchor that exercises {exercised} of those keyed rules

Bound points

Oracle binding: present · oracle:protocol.studio-tests · test/studio-s1.test.ts:760

Coverage

keyed: 2 · spec:consumers.spec-studio.lenses.tests.coverage-row · not enumerable

unkeyed: 1 · spec:consumers.spec-studio.lenses.tests.coverage-row · not enumerable

exercised: 1 · spec:consumers.spec-studio.lenses.tests.coverage-row · not enumerable

Unbound

  • keyed: None
  • unkeyed: None
  • exercised: None
Design view

Requirement drawing

Requirement drawing for spec:consumers.spec-studio.lenses.tests
The diagram as text
  • spec:consumers.spec-studio.lenses.tests: The tests lens shows how far each Spec's verification reaches · declared Spec
  • spec:consumers.spec-studio.lenses.tests.coverage-row: A Spec's row on the tests lens counts its exercised keyed rules · declared Spec
  • spec:consumers.spec-studio.lenses: Five lenses read the graph as Packs, capabilities, architecture, tests and evidence · declared Spec
  • impl:protocol.studio-tests-lens: renders shared rule and example-space coverage with filters and verifier bindings · anchored code · src/projections/studio/pages/tests-page.ts:34
  • oracle:protocol.studio-tests: oracle:protocol.studio-tests · anchored oracle binding · test/studio-s1.test.ts:760
  • test:protocol.studio-tests-coverage-row: test:protocol.studio-tests-coverage-row · anchored test binding · binding present · test/studio-s1.test.ts:769
  • spec:consumers.spec-studio.lenses.tests refines spec:consumers.spec-studio.lenses · declared
  • spec:consumers.spec-studio.lenses.tests.coverage-row refines spec:consumers.spec-studio.lenses.tests · declared
  • spec:consumers.spec-studio.lenses.tests.coverage-row verifies spec:consumers.spec-studio.lenses.tests · declared
  • impl:protocol.studio-tests-lens satisfies spec:consumers.spec-studio.lenses.tests · anchored
  • oracle:protocol.studio-tests models spec:consumers.spec-studio.lenses.tests · anchored
  • test:protocol.studio-tests-coverage-row verifies spec:consumers.spec-studio.lenses.tests.coverage-row · 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.studio-tests-lens · renders shared rule and example-space coverage with filters and verifier bindings · src/projections/studio/pages/tests-page.ts:34

    Component: component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · context protocol

    Uses

    None.

Runtime observation: not tracked.

Evidence

Runtime observation: not tracked.

Build attestations: not tracked.

Deployments: not tracked.

Bills of materials: not tracked.

Impact
Relations of spec:consumers.spec-studio.lenses.tests
The diagram as text
  • spec:consumers.agent-surface.example-space-coverage: Example spaces report which values their examples cover
  • spec:consumers.spec-studio.lenses: Five lenses read the graph as Packs, capabilities, architecture, tests and evidence
  • spec:consumers.spec-studio.lenses.tests: The tests lens shows how far each Spec's verification reaches
  • spec:consumers.spec-studio.lenses.tests.coverage-row: A Spec's row on the tests lens counts its exercised keyed rules
  • spec:decisions.binding-not-liveness: Bindings state existence, not liveness
  • spec:decisions.verification-posture-not-realization: Verification mode states posture, not realization
  • spec:model.rule-keys: A rule or flow entry may carry a key that addresses it
  • spec:observation.run-evidence: CI run records are joined to verifiers in a view
  • spec:consumers.spec-studio.lenses.tests decidedBy spec:decisions.binding-not-liveness · declared
  • spec:consumers.spec-studio.lenses.tests decidedBy spec:decisions.verification-posture-not-realization · declared
  • spec:consumers.spec-studio.lenses.tests dependsOn spec:consumers.agent-surface.example-space-coverage · declared — a row reads its example space's uncovered values from recipe 44
  • spec:consumers.spec-studio.lenses.tests dependsOn spec:model.rule-keys · declared — rule coverage counts the keyed rules examples exercise
  • 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.lenses.tests refines spec:consumers.spec-studio.lenses · declared
  • spec:consumers.spec-studio.lenses.tests.coverage-row refines spec:consumers.spec-studio.lenses.tests · declared
  • spec:consumers.spec-studio.lenses.tests.coverage-row verifies spec:consumers.spec-studio.lenses.tests · 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

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingBindings state existence, not liveness
spec:decisions.binding-not-liveness · resolves
declaredNoneNone
decidedBy · outgoingVerification mode states posture, not realization
spec:decisions.verification-posture-not-realization · resolves
declaredNoneNone
dependsOn · outgoingExample spaces report which values their examples cover
spec:consumers.agent-surface.example-space-coverage · resolves
declareda row reads its example space's uncovered values from recipe 44None
dependsOn · outgoingA rule or flow entry may carry a key that addresses it
spec:model.rule-keys · resolves
declaredrule coverage counts the keyed rules examples exerciseNone
dependsOn · outgoingCI run records are joined to verifiers in a view
spec:observation.run-evidence · resolves
declaredwith run records, a row adds the results recipe 45 joins from its verifiers' filesNone
refines · outgoingFive lenses read the graph as Packs, capabilities, architecture, tests and evidence
spec:consumers.spec-studio.lenses · resolves
declaredNoneNone
refines · incomingA Spec's row on the tests lens counts its exercised keyed rules
spec:consumers.spec-studio.lenses.tests.coverage-row · resolves
declaredNoneNone
verifies · incomingA Spec's row on the tests lens counts its exercised keyed rules
spec:consumers.spec-studio.lenses.tests.coverage-row · resolves
declaredNonecoverageRows

Bindings

Implementation binding: present

  • impl:protocol.studio-tests-lens · renders shared rule and example-space coverage with filters and verifier bindings · src/projections/studio/pages/tests-page.ts:34 · role projection · component component:protocol.projections · layer edge · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: present

  • oracle:protocol.studio-tests · test/studio-s1.test.ts:760

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.