Spec Studio

Each kind carries its own evidence

spec:validation.kind-evidenceBusiness Rule · featureready floor ready

Packs: pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/validation/kind-evidence.sdp.md

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

Intent
outcome
State what a Spec of each kind must show before its readiness floor accepts the evidence clauses.
Rule
rule line 19 · specs/validation/kind-evidence.sdp.md:19
Each kind names its natural evidence: the scoped rung requires that evidence present, and the defined rung requires it complete wherever the kind defines a stronger form. This table is the whole kind-aware story — there is no second overlay mechanism.
rule line 20 · specs/validation/kind-evidence.sdp.md:20
behavior, workflow, and contract share one row. Evidence is present with rules, examples, flows, or constraints — inline, or promoted onto a refining child or a constrainedBy constraint. Evidence is complete with rules and/or examples, inline or promoted; constraints alone do not suffice.
rule line 21 · specs/validation/kind-evidence.sdp.md:21
A rule converges across the two rungs: its statement is its evidence, because a rule's content is its statement.
rule line 22 · specs/validation/kind-evidence.sdp.md:22
An example shows evidence present with an examples entry, prose acceptable. It shows evidence complete with at least one structured given/when/then entry whose every used step is fully bound, the concreteness law, and belongs compatibly to any example space its parent owns.
rule line 23 · specs/validation/kind-evidence.sdp.md:23
A constraint shows evidence present with a non-empty constraints section, and complete when every entry carries a machine-readable target.
rule line 24 · specs/validation/kind-evidence.sdp.md:24
A model converges on non-empty terms: a vocabulary either has terms or it does not.
rule line 25 · specs/validation/kind-evidence.sdp.md:25
A decision shows evidence present once its decision section is there — context and alternatives may precede the choice — and complete once the chosen option is written.
rule line 26 · specs/validation/kind-evidence.sdp.md:26
The contract kind uses the behavior-family evidence row; the Contract carrier heading reifies into behavior and is not a separate typed section.
rule line 27 · specs/validation/kind-evidence.sdp.md:27
Promoted evidence carries an honesty bound. A promoted child counts only when it is a rule or example Spec that itself clears its own kind's present cell, and a constrainedBy edge counts only when it resolves to a constraint Spec carrying its constraints — promotion moves content out, so an empty stub child is not a promotion and confers nothing.
rule line 28 · specs/validation/kind-evidence.sdp.md:28
The rows are monotonic, promotion-neutral, and converge honestly where a kind has no stronger form; those three bounds belong to the decision this Spec is shaped by and to the carried-evidence decision, and are not restated as law here.
rule line 29 · specs/validation/kind-evidence.sdp.md:29
The evidence table in src/validate/readiness-floor.ts is the row set's code-level source of truth and the realizing entrypoint; the rows stated here and that table are one law read twice, so any disagreement between them is drift to resolve on one side.

11 unkeyed rules.

Verifying examples

A Gherkin example with an unbound used slot fails its stated readiness floor · spec:carrier.gherkin-authoring.unbound-ready-refused · ready floor ready

Executable Spec

Given the Gherkin fixture corpus {probe: "unbound-ready"}
When the fixture corpus is extracted and validated
Then validation reports {findingCount: 3} findings
Then the report contains finding {findingId: "honesty/readiness-floor"}
Then the graph contains the Spec {specId: "spec:fixture.unbound-ready"} with kind {specKind: "example"}

Open example

Constraints alone stop short of complete behavior evidence · spec:validation.kind-evidence.constraints-alone · ready floor ready

Executable Spec

Given the graph holds a {kind: "behavior"} spec {specId: "spec:probe.constraints-alone"} stating readiness {readiness: "defined"}
Given its only evidence is {evidence: "a constraints entry carrying a target"}
When the graph is validated
Then the report names {findingId: "honesty/readiness-floor"} at severity {severity: "error"}
Then the finding names the unmet floor clause {clauseId: "kind-evidence-complete"}
Then the report holds {errorCount: 1} errors

Open example

An empty promoted child confers no evidence · spec:validation.kind-evidence.empty-promoted-child · ready floor ready

Executable Spec

Given the graph holds a {kind: "behavior"} spec {specId: "spec:probe.empty-promotion"} stating readiness {readiness: "scoped"}
Given its only evidence is {evidence: "an empty promoted rule child"}
When the graph is validated
Then the report names {findingId: "honesty/readiness-floor"} at severity {severity: "error"}
Then the finding names the unmet floor clause {clauseId: "kind-evidence-present"}
Then the report holds {errorCount: 1} errors

Open example

A constraint whose second entry has no target is not complete · spec:validation.kind-evidence.second-entry-untargeted · ready floor ready

Executable Spec

Given the graph holds a {kind: "constraint"} spec {specId: "spec:probe.second-entry-untargeted"} stating readiness {readiness: "defined"}
Given its only evidence is {evidence: "a targeted constraints entry and an untargeted second entry"}
When the graph is validated
Then the report names {findingId: "honesty/readiness-floor"} at severity {severity: "error"}
Then the finding names the unmet floor clause {clauseId: "kind-evidence-complete"}
Then the report holds {errorCount: 1} errors

Open example

A constraint without a machine-readable target is not complete · spec:validation.kind-evidence.untargeted-constraint · ready floor ready

Executable Spec

Given the graph holds a {kind: "constraint"} spec {specId: "spec:probe.untargeted-constraint"} stating readiness {readiness: "defined"}
Given its only evidence is {evidence: "a constraints entry with no target"}
When the graph is validated
Then the report names {findingId: "honesty/readiness-floor"} at severity {severity: "error"}
Then the finding names the unmet floor clause {clauseId: "kind-evidence-complete"}
Then the report holds {errorCount: 1} errors

Open example

Example space

Given the graph holds a {kind:"behavior"|"constraint"} spec {specId:string} stating readiness {readiness:"scoped"|"defined"}
Given its only evidence is {evidence:"a constraints entry carrying a target"|"a constraints entry with no target"|"a targeted constraints entry and an untargeted second entry"|"an empty promoted rule child"}
When the graph is validated
Then the report names {findingId:string} at severity {severity:"warning"|"error"}
Then the finding names the unmet floor clause {clauseId:string}
Then the report holds {errorCount:number} errors
Verification

Verifier bindings

Example space

  • kind · "behavior" | "constraint" · declared by the graph holds a {kind} spec {specId} stating readiness {readiness}
  • specId · string · declared by the graph holds a {kind} spec {specId} stating readiness {readiness}
  • readiness · "scoped" | "defined" · declared by the graph holds a {kind} spec {specId} stating readiness {readiness}
  • evidence · "a constraints entry carrying a target" | "a constraints entry with no target" | "a targeted constraints entry and an untargeted second entry" | "an empty promoted rule child" · declared by its only evidence is {evidence}

Bound points

ExamplekindspecIdreadinessevidence
spec:validation.kind-evidence.constraints-alone"behavior""spec:probe.constraints-alone""defined""a constraints entry carrying a target"
spec:validation.kind-evidence.empty-promoted-child"behavior""spec:probe.empty-promotion""scoped""an empty promoted rule child"
spec:validation.kind-evidence.second-entry-untargeted"constraint""spec:probe.second-entry-untargeted""defined""a targeted constraints entry and an untargeted second entry"
spec:validation.kind-evidence.untargeted-constraint"constraint""spec:probe.untargeted-constraint""defined""a constraints entry with no target"

Oracle binding: present · oracle:protocol.kind-evidence · test/self-hosting-validators.test.ts:1919

Coverage

specId: "spec:probe.constraints-alone" · spec:validation.kind-evidence.constraints-alone; "spec:probe.empty-promotion" · spec:validation.kind-evidence.empty-promoted-child; "spec:probe.second-entry-untargeted" · spec:validation.kind-evidence.second-entry-untargeted; "spec:probe.untargeted-constraint" · spec:validation.kind-evidence.untargeted-constraint · not enumerable

evidence
Declared valueExamples
"a constraints entry carrying a target"spec:validation.kind-evidence.constraints-alone
"a constraints entry with no target"spec:validation.kind-evidence.untargeted-constraint
"a targeted constraints entry and an untargeted second entry"spec:validation.kind-evidence.second-entry-untargeted
"an empty promoted rule child"spec:validation.kind-evidence.empty-promoted-child

Unbound

  • kind: None
  • specId: None
  • readiness: None
  • evidence: None
Design view

Requirement drawing

Requirement drawing for spec:validation.kind-evidence
The diagram as text
  • spec:validation.kind-evidence: Each kind carries its own evidence · declared Spec
  • spec:validation.kind-evidence.constraints-alone: Constraints alone stop short of complete behavior evidence · declared Spec
  • spec:validation.kind-evidence.empty-promoted-child: An empty promoted child confers no evidence · declared Spec
  • spec:validation.kind-evidence.second-entry-untargeted: A constraint whose second entry has no target is not complete · declared Spec
  • spec:validation.kind-evidence.untargeted-constraint: A constraint without a machine-readable target is not complete · declared Spec
  • spec:carrier.gherkin-authoring.unbound-ready-refused: A Gherkin example with an unbound used slot fails its stated readiness floor · declared Spec
  • spec:carrier.gherkin-authoring: Gherkin authoring enters the one graph · declared Spec
  • spec:validation.readiness-floor: Stated readiness must clear its floor · declared Spec
  • spec:carrier.markdown-body-grammar: The Markdown body accepts one closed form per section · declared Spec
  • impl:protocol.kind-evidence: defines the code-level per-kind evidence rows for readiness floors · anchored code · src/validate/readiness-floor.ts:398
  • oracle:protocol.kind-evidence: oracle:protocol.kind-evidence · anchored oracle binding · test/self-hosting-validators.test.ts:1919
  • test:protocol.gherkin-authoring.unbound-ready-refused: the unbound-ready-refused point verifies the Gherkin carrier contract · anchored test binding · binding present · test/self-hosting-carrier-gherkin.test.ts:588
  • test:protocol.kind-evidence.constraints-alone: the constraints-alone point verifies the behavior-family complete cell · anchored test binding · binding present · test/self-hosting-validators.test.ts:534
  • test:protocol.kind-evidence.empty-promoted-child: the empty-promotion point verifies the promoted-evidence honesty bound · anchored test binding · binding present · test/self-hosting-validators.test.ts:584
  • test:protocol.kind-evidence.second-entry-untargeted: test:protocol.kind-evidence.second-entry-untargeted · anchored test binding · binding present · test/self-hosting-validators.test.ts:1928
  • test:protocol.kind-evidence.untargeted-constraint: the untargeted-constraint point verifies the constraint row's target requirement · anchored test binding · binding present · test/self-hosting-validators.test.ts:559
  • spec:carrier.gherkin-authoring.unbound-ready-refused refines spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unbound-ready-refused verifies spec:carrier.gherkin-authoring · declared
  • spec:carrier.gherkin-authoring.unbound-ready-refused verifies spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence refines spec:validation.readiness-floor · declared
  • spec:validation.kind-evidence.constraints-alone refines spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.constraints-alone verifies spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.empty-promoted-child refines spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.empty-promoted-child verifies spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.second-entry-untargeted refines spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.second-entry-untargeted verifies spec:carrier.markdown-body-grammar · declared
  • spec:validation.kind-evidence.second-entry-untargeted verifies spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.untargeted-constraint refines spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.untargeted-constraint verifies spec:validation.kind-evidence · declared
  • impl:protocol.kind-evidence satisfies spec:validation.kind-evidence · anchored
  • oracle:protocol.kind-evidence models spec:validation.kind-evidence · anchored
  • test:protocol.gherkin-authoring.unbound-ready-refused verifies spec:carrier.gherkin-authoring.unbound-ready-refused · anchored
  • test:protocol.kind-evidence.constraints-alone verifies spec:validation.kind-evidence.constraints-alone · anchored
  • test:protocol.kind-evidence.empty-promoted-child verifies spec:validation.kind-evidence.empty-promoted-child · anchored
  • test:protocol.kind-evidence.second-entry-untargeted verifies spec:validation.kind-evidence.second-entry-untargeted · anchored
  • test:protocol.kind-evidence.untargeted-constraint verifies spec:validation.kind-evidence.untargeted-constraint · 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

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

    Uses

  • impl:protocol.kind-evidence · defines the code-level per-kind evidence rows for readiness floors · src/validate/readiness-floor.ts:398

    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.kind-evidence
The diagram as text
  • spec:carrier.gherkin-authoring.unbound-ready-refused: A Gherkin example with an unbound used slot fails its stated readiness floor
  • spec:carrier.markdown-body-grammar: The Markdown body accepts one closed form per section
  • spec:decisions.carried-evidence: Promoted evidence must carry its own evidence
  • spec:decisions.kind-conditional-floor: Readiness evidence follows the Spec kind
  • spec:validation.kind-evidence: Each kind carries its own evidence
  • spec:validation.kind-evidence.constraints-alone: Constraints alone stop short of complete behavior evidence
  • spec:validation.kind-evidence.empty-promoted-child: An empty promoted child confers no evidence
  • spec:validation.kind-evidence.second-entry-untargeted: A constraint whose second entry has no target is not complete
  • spec:validation.kind-evidence.untargeted-constraint: A constraint without a machine-readable target is not complete
  • spec:validation.readiness-floor: Stated readiness must clear its floor
  • spec:validation.kind-evidence decidedBy spec:decisions.carried-evidence · declared — promoted children and constrainedBy targets count only when they carry evidence
  • spec:validation.kind-evidence decidedBy spec:decisions.kind-conditional-floor · declared
  • spec:validation.kind-evidence refines spec:validation.readiness-floor · declared
  • spec:carrier.markdown-body-grammar dependsOn spec:validation.kind-evidence · declared — its evidence clauses read every constraint entry a Spec carries, whichever carrier wrote it
  • spec:validation.kind-evidence.constraints-alone refines spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.empty-promoted-child refines spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.second-entry-untargeted refines spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.untargeted-constraint refines spec:validation.kind-evidence · declared
  • spec:carrier.gherkin-authoring.unbound-ready-refused verifies spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.constraints-alone verifies spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.empty-promoted-child verifies spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.second-entry-untargeted verifies spec:validation.kind-evidence · declared
  • spec:validation.kind-evidence.untargeted-constraint verifies spec:validation.kind-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

Distance 6

Distance 7

Distance 8

Distance 9

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingPromoted evidence must carry its own evidence
spec:decisions.carried-evidence · resolves
declaredpromoted children and constrainedBy targets count only when they carry evidenceNone
decidedBy · outgoingReadiness evidence follows the Spec kind
spec:decisions.kind-conditional-floor · resolves
declaredNoneNone
refines · outgoingStated readiness must clear its floor
spec:validation.readiness-floor · resolves
declaredNoneNone
dependsOn · incomingThe Markdown body accepts one closed form per section
spec:carrier.markdown-body-grammar · resolves
declaredits evidence clauses read every constraint entry a Spec carries, whichever carrier wrote itNone
refines · incomingConstraints alone stop short of complete behavior evidence
spec:validation.kind-evidence.constraints-alone · resolves
declaredNoneNone
refines · incomingAn empty promoted child confers no evidence
spec:validation.kind-evidence.empty-promoted-child · resolves
declaredNoneNone
refines · incomingA constraint whose second entry has no target is not complete
spec:validation.kind-evidence.second-entry-untargeted · resolves
declaredNoneNone
refines · incomingA constraint without a machine-readable target is not complete
spec:validation.kind-evidence.untargeted-constraint · resolves
declaredNoneNone
verifies · incomingA Gherkin example with an unbound used slot fails its stated readiness floor
spec:carrier.gherkin-authoring.unbound-ready-refused · resolves
declaredNoneNone
verifies · incomingConstraints alone stop short of complete behavior evidence
spec:validation.kind-evidence.constraints-alone · resolves
declaredNoneNone
verifies · incomingAn empty promoted child confers no evidence
spec:validation.kind-evidence.empty-promoted-child · resolves
declaredNoneNone
verifies · incomingA constraint whose second entry has no target is not complete
spec:validation.kind-evidence.second-entry-untargeted · resolves
declaredNoneNone
verifies · incomingA constraint without a machine-readable target is not complete
spec:validation.kind-evidence.untargeted-constraint · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.kind-evidence · defines the code-level per-kind evidence rows for readiness floors · src/validate/readiness-floor.ts:398 · role decider · component component:protocol.validate · layer domain · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: present

  • oracle:protocol.kind-evidence · test/self-hosting-validators.test.ts:1919

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.