Spec Studio

Extraction exclusions are strict consumer input

spec:extraction.excludesBusiness Rule · featureready floor ready

Packs: pack:self-hosting-v1

Design: no design entries · no pinned declarations · 1 decision

Findings: no errors, no warnings

specs/extraction/excludes.sdp.md

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

Intent
outcome
Keep consumer-selected omissions precise without changing the extractor's canonical discovery rules.
Rule
rule.canonicalDiscovery line 16 · specs/extraction/excludes.sdp.md:16
Discovery reads Spec and Pack carriers by the suffixes .sdp.md, .sdp.gherkin and .sdp.ts. Other .ts and .tsx files are anchor candidates, except .d.ts files. Discovery never descends into node_modules, dist, generated, coverage or a dot-directory, and configured exclusions apply to both lists.

no example exercises it

rule line 17 · specs/extraction/excludes.sdp.md:17
An exclusion is an exact root-relative POSIX path prefix applied to Spec-carrier and anchor-candidate discovery; a repeated exclusion counts once.
rule.segmentBoundary line 18 · specs/extraction/excludes.sdp.md:18
A prefix excludes itself and slash-delimited descendants only; it never excludes a merely similar sibling path.

spec:extraction.excludes.segment-boundary · enabled

rule.refusedPaths line 19 · specs/extraction/excludes.sdp.md:19
Empty, absolute, Windows-drive, backslash and trailing-slash paths, and paths with an empty, . or .. segment, are refused rather than normalized into a different meaning.

spec:extraction.excludes.refused-path · enabled

1 unkeyed rule.

Verifying examples

A Windows-drive absolute path is refused rather than normalized · spec:extraction.excludes.refused-path · ready floor ready

Executable Spec

Given the extraction root carries the tree {excludedTree: "foo"} and the similar sibling {similarTree: "foobar"}
Given the consumer supplies the exclusion {exclusion: "C:/work/specs"}
When the root is discovered
Then the discovery attempt {outcome: "is refused"}
Then the refusal states {diagnostic: "normalizeExcludes: invalid exclusion path"} and names the offending path

Open example

A prefix excludes its own tree and leaves a similar sibling standing · spec:extraction.excludes.segment-boundary · ready floor ready

Executable Spec

Given the extraction root carries the tree {excludedTree: "foo"} and the similar sibling {similarTree: "foobar"}
Given the consumer supplies the exclusion {exclusion: "foo"}
When the root is discovered
Then the discovery attempt {outcome: "completes"}
Then the surviving spec carrier is {specCarrier: "foobar/included.sdp.ts"} and the surviving anchor candidate is {anchorCandidate: "foobar/helper.ts"}

Open example

Example space

Given the extraction root carries the tree {excludedTree:string} and the similar sibling {similarTree:string}
Given the consumer supplies the exclusion {exclusion:string}
When the root is discovered
Then the discovery attempt {outcome:"completes"|"is refused"}
Then the surviving spec carrier is {specCarrier:string} and the surviving anchor candidate is {anchorCandidate:string}
Then the refusal states {diagnostic:string} and names the offending path
Verification

Verifier bindings

  • spec:extraction.excludes.refused-path · A Windows-drive absolute path is refused rather than normalized · declared · example enabled · specs/extraction/excludes.refused-path.sdp.md

    External run evidence from test/self-hosting-extraction.test.ts

    Test anchors: test:protocol.build-pipeline.same-invocation, test:protocol.example-runner.red-step-naming, test:protocol.example-runner.step-order, test:protocol.excludes.refused-path, test:protocol.excludes.segment-boundary, test:protocol.executable-contracts.case-colliding-path, test:protocol.executable-contracts.concreteness-refusal, test:protocol.executable-contracts.multi-entry-example, test:protocol.schema-versioning.declared-version. Specs verified by those bindings: spec:extraction.build-pipeline, spec:extraction.build-pipeline.same-invocation, spec:extraction.example-runner, spec:extraction.example-runner.red-step-naming, spec:extraction.example-runner.step-order, spec:extraction.excludes, spec:extraction.excludes.refused-path, spec:extraction.excludes.segment-boundary, spec:extraction.executable-contracts, spec:extraction.executable-contracts.case-colliding-path, spec:extraction.executable-contracts.concreteness-refusal, spec:extraction.executable-contracts.multi-entry-example, spec:extraction.schema-versioning, spec:extraction.schema-versioning.declared-version.

    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 worldOne query invocation shares its extracted graph and validation result (spec:extraction.build-pipeline.same-invocation)passed13.53 ms
    executes the bound example against a fresh worldA prefix excludes its own tree and leaves a similar sibling standing (spec:extraction.excludes.segment-boundary)passed1.19 ms
    executes the bound example against a fresh worldA Windows-drive absolute path is refused rather than normalized (spec:extraction.excludes.refused-path)passed0.66 ms
    executes the bound example against a fresh worldA derived payload carries a schema version its consumer can read (spec:extraction.schema-versioning.declared-version)passed0.42 ms
    executes the bound example against a fresh worldAn unbound slot in a used step earns no step contract (spec:extraction.executable-contracts.concreteness-refusal)passed1.07 ms
    executes the bound example against a fresh worldA second structured entry is named, never left silently inert (spec:extraction.executable-contracts.multi-entry-example)passed1.8 ms
    executes the bound example against a fresh worldA case-only path collision withholds the whole contracts tree (spec:extraction.executable-contracts.case-colliding-path)passed0.7 ms
    executes the bound example against a fresh worldA repeated step runs its one handler at each occurrence, in contract order (spec:extraction.example-runner.step-order)passed0.32 ms
    executes the bound example against a fresh worldA red step names itself before the assertion detail (spec:extraction.example-runner.red-step-naming)passed0.33 ms
  • spec:extraction.excludes.segment-boundary · A prefix excludes its own tree and leaves a similar sibling standing · declared · example enabled · specs/extraction/excludes.segment-boundary.sdp.md

Example space

  • excludedTree · string · declared by the extraction root carries the tree {excludedTree} and the similar sibling {similarTree}
  • similarTree · string · declared by the extraction root carries the tree {excludedTree} and the similar sibling {similarTree}
  • exclusion · string · declared by the consumer supplies the exclusion {exclusion}

Bound points

ExampleexcludedTreesimilarTreeexclusion
spec:extraction.excludes.refused-path"foo""foobar""C:/work/specs"
spec:extraction.excludes.segment-boundary"foo""foobar""foo"

Oracle binding: none

Coverage

excludedTree: "foo" · spec:extraction.excludes.refused-path, spec:extraction.excludes.segment-boundary · not enumerable

similarTree: "foobar" · spec:extraction.excludes.refused-path, spec:extraction.excludes.segment-boundary · not enumerable

exclusion: "C:/work/specs" · spec:extraction.excludes.refused-path; "foo" · spec:extraction.excludes.segment-boundary · not enumerable

Unbound

  • excludedTree: None
  • similarTree: None
  • exclusion: None
Design view

Requirement drawing

Requirement drawing for spec:extraction.excludes
  • E6: refines, verifies · declared
Requirement drawing for spec:extraction.excludessatisfies · anchoredsatisfies · anchoredrefines · declaredrefines · declaredrefines, verifies · declaredE6verifies · anchoredverifies · anchoredIntended Specsspec:decisions.exclusion-contractConsumer exclusions stayexact…decisions.exclusion-contractdeclared Specspec:extraction.excludesExtraction exclusions arestrict consumer input…extraction.excludesdeclared SpecDeclared verifying examplesspec:extraction.excludes.refused-pathA Windows-drive absolutepath is refused rather thannormalized…extraction.excludes.refused-pathdeclared Specspec:extraction.excludes.segment-boundaryA prefix excludes its owntree and leaves a similarsibling standing…extraction.excludes.segment-boundarydeclared SpecSatisfying or referencingunitsimpl:protocol.discover-filesrealizes exclusion-awarediscovery(normalizeExcludes /discoverFiles)…protocol.discover-filesanchored codeimpl:protocol.exclusion-surfacestrict root-relativeexclusion input for bothextraction surfaces…protocol.exclusion-surfaceanchored codeTest or oracle bindingstest:protocol.excludes.refused-paththe refused-path pointverifies themalformed-exclusion refusal…protocol.excludes.refused-pathanchored test binding ·binding presenttest:protocol.excludes.segment-boundarythe segment-boundary pointverifies the exact-prefixexclusion rule…protocol.excludes.segment-boundaryanchored test binding ·binding presentOutside the selected setspec:extraction.derive-graphCarrier reification derivesthe one graph…extraction.derive-graphdeclared Spec
The diagram as text
  • spec:extraction.excludes: Extraction exclusions are strict consumer input · declared Spec
  • spec:decisions.exclusion-contract: Consumer exclusions stay exact · declared Spec
  • spec:extraction.excludes.refused-path: A Windows-drive absolute path is refused rather than normalized · declared Spec
  • spec:extraction.excludes.segment-boundary: A prefix excludes its own tree and leaves a similar sibling standing · declared Spec
  • spec:extraction.derive-graph: Carrier reification derives the one graph · declared Spec
  • impl:protocol.discover-files: realizes exclusion-aware discovery (normalizeExcludes / discoverFiles) · anchored code · src/extract/discover.ts:35
  • impl:protocol.exclusion-surface: strict root-relative exclusion input for both extraction surfaces · anchored code · src/extract/index.ts:43
  • test:protocol.excludes.refused-path: the refused-path point verifies the malformed-exclusion refusal · anchored test binding · binding present · test/self-hosting-extraction.test.ts:300
  • test:protocol.excludes.segment-boundary: the segment-boundary point verifies the exact-prefix exclusion rule · anchored test binding · binding present · test/self-hosting-extraction.test.ts:285
  • spec:decisions.exclusion-contract refines spec:extraction.excludes · declared
  • spec:extraction.excludes refines spec:extraction.derive-graph · declared
  • spec:extraction.excludes.refused-path refines spec:extraction.excludes · declared
  • spec:extraction.excludes.refused-path verifies spec:extraction.excludes · declared
  • spec:extraction.excludes.segment-boundary refines spec:extraction.excludes · declared
  • spec:extraction.excludes.segment-boundary verifies spec:extraction.excludes · declared
  • impl:protocol.discover-files satisfies spec:extraction.excludes · anchored
  • impl:protocol.exclusion-surface satisfies spec:extraction.excludes · anchored
  • test:protocol.excludes.refused-path verifies spec:extraction.excludes.refused-path · anchored
  • test:protocol.excludes.segment-boundary verifies spec:extraction.excludes.segment-boundary · 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

Runtime
  • component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:192 · layer application · context protocol

    Uses

    • 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.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol
  • impl:protocol.discover-files · realizes exclusion-aware discovery (normalizeExcludes / discoverFiles) · src/extract/discover.ts:35

    Component: component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:192 · layer application · context protocol

    Uses

    None.

  • impl:protocol.exclusion-surface · strict root-relative exclusion input for both extraction surfaces · src/extract/index.ts:43

    Component: component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:192 · layer application · 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:extraction.excludes
The diagram as text
  • spec:consumers.shipped-protocol-corpus: The package ships the Specs and on-ramps its skills cite
  • spec:consumers.validate-watch: Validation re-runs while an author edits carriers
  • spec:decisions.exclusion-contract: Consumer exclusions stay exact
  • spec:extraction.derive-graph: Carrier reification derives the one graph
  • spec:extraction.excludes: Extraction exclusions are strict consumer input
  • spec:extraction.excludes.refused-path: A Windows-drive absolute path is refused rather than normalized
  • spec:extraction.excludes.segment-boundary: A prefix excludes its own tree and leaves a similar sibling standing
  • spec:extraction.excludes decidedBy spec:decisions.exclusion-contract · declared
  • spec:extraction.excludes refines spec:extraction.derive-graph · declared
  • spec:consumers.shipped-protocol-corpus dependsOn spec:extraction.excludes · declared — the shipped corpus stays out of an adopter's graph under its canonical discovery rules
  • spec:consumers.validate-watch dependsOn spec:extraction.excludes · declared
  • spec:decisions.exclusion-contract refines spec:extraction.excludes · declared
  • spec:extraction.excludes.refused-path refines spec:extraction.excludes · declared
  • spec:extraction.excludes.segment-boundary refines spec:extraction.excludes · declared
  • spec:extraction.excludes.refused-path verifies spec:extraction.excludes · declared
  • spec:extraction.excludes.segment-boundary verifies spec:extraction.excludes · 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

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingConsumer exclusions stay exact
spec:decisions.exclusion-contract · resolves
declaredNoneNone
refines · outgoingCarrier reification derives the one graph
spec:extraction.derive-graph · resolves
declaredNoneNone
dependsOn · incomingThe package ships the Specs and on-ramps its skills cite
spec:consumers.shipped-protocol-corpus · resolves
declaredthe shipped corpus stays out of an adopter's graph under its canonical discovery rulesNone
dependsOn · incomingValidation re-runs while an author edits carriers
spec:consumers.validate-watch · resolves
declaredNoneNone
refines · incomingConsumer exclusions stay exact
spec:decisions.exclusion-contract · resolves
declaredNoneNone
refines · incomingA Windows-drive absolute path is refused rather than normalized
spec:extraction.excludes.refused-path · resolves
declaredNoneNone
refines · incomingA prefix excludes its own tree and leaves a similar sibling standing
spec:extraction.excludes.segment-boundary · resolves
declaredNoneNone
verifies · incomingA Windows-drive absolute path is refused rather than normalized
spec:extraction.excludes.refused-path · resolves
declaredNonerefusedPaths
verifies · incomingA prefix excludes its own tree and leaves a similar sibling standing
spec:extraction.excludes.segment-boundary · resolves
declaredNonesegmentBoundary

Bindings

Implementation binding: present

  • impl:protocol.discover-files · realizes exclusion-aware discovery (normalizeExcludes / discoverFiles) · src/extract/discover.ts:35 · role extractor · component component:protocol.extract · layer application · context protocol
  • impl:protocol.exclusion-surface · strict root-relative exclusion input for both extraction surfaces · src/extract/index.ts:43 · role contract · component component:protocol.extract · layer application · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.