Spec Studio

A ready Spec rests only on settled dependencies

spec:validation.typed-dependency-floorBusiness Rule · storyready floor ready

Packs: pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/validation/typed-dependency-floor.sdp.md

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

A decidedBy target at defined is a complete decision record awaiting ratification. Requiring ready of that target would make a shaped Spec's ready statement wait on registry ratification; the floor instead lets a shaped Spec state ready while its decision awaits the owner.

Intent
problem
A ready statement needs a settled basis across refines, dependsOn, constrainedBy, and decidedBy. Omitting any of these relations would let a Spec state ready while a dependency still stands below defined.
outcome
Refuse a ready statement while any Spec it depends on, through any typed dependency, stands below defined.
Rule
rule line 19 · specs/validation/typed-dependency-floor.sdp.md:19
The ready floor's target clause reads every typed dependency the Spec declares. Each resolving refines, dependsOn, constrainedBy, and decidedBy target itself states at least defined. The clause reads stated readiness, so a dependent does not inherit a target's own floor failure.
rule line 20 · specs/validation/typed-dependency-floor.sdp.md:20
The threshold is defined for all four typed dependencies.
rule line 21 · specs/validation/typed-dependency-floor.sdp.md:21
The clause stays kind-blind and reads resolving targets only. An unresolved target remains the relation-resolution clause's failure, never a second one.
rule line 22 · specs/validation/typed-dependency-floor.sdp.md:22
A Spec naming itself as a typed dependency is read like any other resolving target, by its own stated readiness.
rule line 23 · specs/validation/typed-dependency-floor.sdp.md:23
verifies and supersedes stay outside the clause. A verifier's rung is independent of the Spec it verifies, and a replacement decision does not rest on the record it supersedes.
rule line 24 · specs/validation/typed-dependency-floor.sdp.md:24
An unsettled fact is stated the way any unsettled truth is. A constraint Spec that records a blocking open question clears at most scoped. When it states a rung below defined, a Spec bounded by it may state defined if its own floor clears, but cannot lawfully state ready.
rule line 25 · specs/validation/typed-dependency-floor.sdp.md:25
The floor keeps one target clause, typed-dependency-targets-are-defined, in src/validate/readiness-floor.ts. Its parent spec:validation.readiness-floor states the same target bound. A failure of the clause names every target that breaks it.

7 unkeyed rules.

Verifying examples

Missing targets fail relation resolution once · spec:validation.typed-dependency-floor.missing-targets · ready floor ready

Executable Spec

Given the typed dependency matrix {matrix: "missing-targets"}
When the reader checks the readiness floor
Then the matrix reports {targetFailures: 0} target failures and {resolutionFailures: 6} resolution failures and {questionFailures: 0} blocking question failures

Open example

Every relation reads the four stated target rungs · spec:validation.typed-dependency-floor.relation-rungs · ready floor ready

Executable Spec

Given the typed dependency matrix {matrix: "relation-rungs"}
When the reader checks the readiness floor
Then the matrix reports {targetFailures: 24} target failures and {resolutionFailures: 0} resolution failures and {questionFailures: 0} blocking question failures

Open example

Target floor failures do not propagate across dependencies · spec:validation.typed-dependency-floor.stated-readiness · ready floor ready

Executable Spec

Given the typed dependency matrix {matrix: "stated-readiness"}
When the reader checks the readiness floor
Then the matrix reports {targetFailures: 64} target failures and {resolutionFailures: 0} resolution failures and {questionFailures: 4} blocking question failures

Open example

An unsettled constraint bounds ready but permits defined · spec:validation.typed-dependency-floor.unsettled-fact · ready floor ready

Executable Spec

Given the typed dependency matrix {matrix: "unsettled-fact"}
When the reader checks the readiness floor
Then the matrix reports {targetFailures: 1} target failures and {resolutionFailures: 0} resolution failures and {questionFailures: 1} blocking question failures

Open example

Example space

Given the typed dependency matrix {matrix:"relation-rungs"|"missing-targets"|"unsettled-fact"|"stated-readiness"}
When the reader checks the readiness floor
Then the matrix reports {targetFailures:number} target failures and {resolutionFailures:number} resolution failures and {questionFailures:number} blocking question failures
Verification

Verifier bindings

  • spec:validation.typed-dependency-floor.missing-targets · Missing targets fail relation resolution once · declared · example enabled · specs/validation/typed-dependency-floor.missing-targets.sdp.md

    External run evidence from test/self-hosting-typed-dependency.test.ts

    Test anchors: test:protocol.typed-dependency-floor.missing-targets, test:protocol.typed-dependency-floor.relation-rungs, test:protocol.typed-dependency-floor.stated-readiness, test:protocol.typed-dependency-floor.unsettled-fact. Specs verified by those bindings: spec:validation.typed-dependency-floor, spec:validation.typed-dependency-floor.missing-targets, spec:validation.typed-dependency-floor.relation-rungs, spec:validation.typed-dependency-floor.stated-readiness, spec:validation.typed-dependency-floor.unsettled-fact.

    Run 1: external run evidence from vitest 4.1.10

    Build: CI 380 · Branch: feature/roadmap-and-slices-v0 · Commit: 34909918bf0be0e849959644401797191cae379f · Start: 2026-10-22T17:40:31.456Z · Stop: 2026-10-22T17:42:16.171Z

    NameSuiteResultDuration
    executes the bound example against a fresh worldEvery relation reads the four stated target rungs (spec:validation.typed-dependency-floor.relation-rungs)passed19 ms
    executes the bound example against a fresh worldMissing targets fail relation resolution once (spec:validation.typed-dependency-floor.missing-targets)passed1.85 ms
    executes the bound example against a fresh worldAn unsettled constraint bounds ready but permits defined (spec:validation.typed-dependency-floor.unsettled-fact)passed1.36 ms
    executes the bound example against a fresh worldTarget floor failures do not propagate across dependencies (spec:validation.typed-dependency-floor.stated-readiness)passed43.6 ms
  • spec:validation.typed-dependency-floor.relation-rungs · Every relation reads the four stated target rungs · declared · example enabled · specs/validation/typed-dependency-floor.relation-rungs.sdp.md
  • spec:validation.typed-dependency-floor.stated-readiness · Target floor failures do not propagate across dependencies · declared · example enabled · specs/validation/typed-dependency-floor.stated-readiness.sdp.md
  • spec:validation.typed-dependency-floor.unsettled-fact · An unsettled constraint bounds ready but permits defined · declared · example enabled · specs/validation/typed-dependency-floor.unsettled-fact.sdp.md

Example space

  • matrix · "relation-rungs" | "missing-targets" | "unsettled-fact" | "stated-readiness" · declared by the typed dependency matrix {matrix}

Bound points

Oracle binding: present · oracle:protocol.typed-dependency-floor · test/self-hosting-typed-dependency.test.ts:51

Coverage

Unbound

  • matrix: None
Design view

Requirement drawing

Requirement drawing for spec:validation.typed-dependency-floor
The diagram as text
  • spec:validation.typed-dependency-floor: A ready Spec rests only on settled dependencies · declared Spec
  • spec:validation.typed-dependency-floor.missing-targets: Missing targets fail relation resolution once · declared Spec
  • spec:validation.typed-dependency-floor.relation-rungs: Every relation reads the four stated target rungs · declared Spec
  • spec:validation.typed-dependency-floor.stated-readiness: Target floor failures do not propagate across dependencies · declared Spec
  • spec:validation.typed-dependency-floor.unsettled-fact: An unsettled constraint bounds ready but permits defined · declared Spec
  • spec:validation.readiness-floor: Stated readiness must clear its floor · declared Spec
  • impl:protocol.typed-dependency-floor: checks stated readiness across all four typed dependencies · anchored code · src/validate/readiness-floor.ts:347
  • oracle:protocol.typed-dependency-floor: expected readiness failures by typed dependency matrix · anchored oracle binding · test/self-hosting-typed-dependency.test.ts:51
  • test:protocol.typed-dependency-floor.missing-targets: verifies unresolved targets fail resolution once · anchored test binding · binding present · test/self-hosting-typed-dependency.test.ts:320
  • test:protocol.typed-dependency-floor.relation-rungs: verifies six relations across four target rungs · anchored test binding · binding present · test/self-hosting-typed-dependency.test.ts:313
  • test:protocol.typed-dependency-floor.stated-readiness: verifies stated target readiness and kind blindness · anchored test binding · binding present · test/self-hosting-typed-dependency.test.ts:334
  • test:protocol.typed-dependency-floor.unsettled-fact: verifies blocking questions and bounded readiness · anchored test binding · binding present · test/self-hosting-typed-dependency.test.ts:327
  • spec:validation.typed-dependency-floor refines spec:validation.readiness-floor · declared
  • spec:validation.typed-dependency-floor.missing-targets refines spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.missing-targets verifies spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.relation-rungs refines spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.relation-rungs verifies spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.stated-readiness refines spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.stated-readiness verifies spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.unsettled-fact refines spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.unsettled-fact verifies spec:validation.typed-dependency-floor · declared
  • impl:protocol.typed-dependency-floor satisfies spec:validation.typed-dependency-floor · anchored
  • oracle:protocol.typed-dependency-floor models spec:validation.typed-dependency-floor · anchored
  • test:protocol.typed-dependency-floor.missing-targets verifies spec:validation.typed-dependency-floor.missing-targets · anchored
  • test:protocol.typed-dependency-floor.relation-rungs verifies spec:validation.typed-dependency-floor.relation-rungs · anchored
  • test:protocol.typed-dependency-floor.stated-readiness verifies spec:validation.typed-dependency-floor.stated-readiness · anchored
  • test:protocol.typed-dependency-floor.unsettled-fact verifies spec:validation.typed-dependency-floor.unsettled-fact · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: requirementDiagram. Chosen syntax: flowchart TB because models, folds require exact labels unavailable in requirement syntax.

Decisions

No decision record named.

Runtime
  • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol

    Uses

  • impl:protocol.typed-dependency-floor · checks stated readiness across all four typed dependencies · src/validate/readiness-floor.ts:347

    Component: component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · 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:validation.typed-dependency-floor
The diagram as text
  • spec:consumers.adopter-on-ramp: An adopter learns graph homes, carrier grammar and shipped paths from the on-ramps
  • spec:consumers.readiness-planner: The readiness planner orders the statements a person can make
  • spec:consumers.roadmap: A roadmap orders the next bodies of work, and the graph says what each still needs
  • spec:model.relations: Specs declare typed directed relations
  • spec:validation.next-rung-floor: The floor names what blocks the floor's next rung
  • spec:validation.readiness-floor: Stated readiness must clear its floor
  • spec:validation.typed-dependency-floor: A ready Spec rests only on settled dependencies
  • spec:validation.typed-dependency-floor.missing-targets: Missing targets fail relation resolution once
  • spec:validation.typed-dependency-floor.relation-rungs: Every relation reads the four stated target rungs
  • spec:validation.typed-dependency-floor.stated-readiness: Target floor failures do not propagate across dependencies
  • spec:validation.typed-dependency-floor.unsettled-fact: An unsettled constraint bounds ready but permits defined
  • spec:validation.typed-dependency-floor dependsOn spec:model.relations · declared
  • spec:validation.typed-dependency-floor refines spec:validation.readiness-floor · declared
  • spec:consumers.adopter-on-ramp dependsOn spec:validation.typed-dependency-floor · declared
  • spec:consumers.readiness-planner dependsOn spec:validation.typed-dependency-floor · declared — the order reads the four typed relations the ready floor reads
  • spec:consumers.roadmap dependsOn spec:validation.typed-dependency-floor · declared — what an entry rests on is read through the relations the ready floor reads
  • spec:validation.next-rung-floor dependsOn spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.missing-targets refines spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.relation-rungs refines spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.stated-readiness refines spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.unsettled-fact refines spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.missing-targets verifies spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.relation-rungs verifies spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.stated-readiness verifies spec:validation.typed-dependency-floor · declared
  • spec:validation.typed-dependency-floor.unsettled-fact verifies spec:validation.typed-dependency-floor · 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 · outgoingSpecs declare typed directed relations
spec:model.relations · resolves
declaredNoneNone
refines · outgoingStated readiness must clear its floor
spec:validation.readiness-floor · resolves
declaredNoneNone
dependsOn · incomingAn adopter learns graph homes, carrier grammar and shipped paths from the on-ramps
spec:consumers.adopter-on-ramp · resolves
declaredNoneNone
dependsOn · incomingThe readiness planner orders the statements a person can make
spec:consumers.readiness-planner · resolves
declaredthe order reads the four typed relations the ready floor readsNone
dependsOn · incomingA roadmap orders the next bodies of work, and the graph says what each still needs
spec:consumers.roadmap · resolves
declaredwhat an entry rests on is read through the relations the ready floor readsNone
dependsOn · incomingThe floor names what blocks the floor's next rung
spec:validation.next-rung-floor · resolves
declaredNoneNone
refines · incomingMissing targets fail relation resolution once
spec:validation.typed-dependency-floor.missing-targets · resolves
declaredNoneNone
refines · incomingEvery relation reads the four stated target rungs
spec:validation.typed-dependency-floor.relation-rungs · resolves
declaredNoneNone
refines · incomingTarget floor failures do not propagate across dependencies
spec:validation.typed-dependency-floor.stated-readiness · resolves
declaredNoneNone
refines · incomingAn unsettled constraint bounds ready but permits defined
spec:validation.typed-dependency-floor.unsettled-fact · resolves
declaredNoneNone
verifies · incomingMissing targets fail relation resolution once
spec:validation.typed-dependency-floor.missing-targets · resolves
declaredNoneNone
verifies · incomingEvery relation reads the four stated target rungs
spec:validation.typed-dependency-floor.relation-rungs · resolves
declaredNoneNone
verifies · incomingTarget floor failures do not propagate across dependencies
spec:validation.typed-dependency-floor.stated-readiness · resolves
declaredNoneNone
verifies · incomingAn unsettled constraint bounds ready but permits defined
spec:validation.typed-dependency-floor.unsettled-fact · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.typed-dependency-floor · checks stated readiness across all four typed dependencies · src/validate/readiness-floor.ts:347 · role validator · component component:protocol.validate · layer domain · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: present

  • oracle:protocol.typed-dependency-floor · expected readiness failures by typed dependency matrix · test/self-hosting-typed-dependency.test.ts:51

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.