Spec Studio

A finding with no subject fails its rules file

spec:validation.corpus-rules.malformed-finding-failsExample / Scenario · storyready floor ready

Packs: pack:corpus-checks-v1, pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/validation/corpus-rules.malformed-finding-fails.sdp.md

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

Intent
outcome
Execute the broken-rule rule on one rules file whose only finding carries no subject.
assumptions
  • The world writes the probe corpus of the error example. The rules file's body returns { findings: [{ validatorId: "probe-rule", severity: "warning", message: "the probe rule forgets its subject" }] }, a warning that would pass if it were well formed. The world runs sdp validate on the probe root with that file named by --rules, reads the exit code and standard output, and reads on standard error the failure line naming the first finding's subjectId.
Behavior

Examples

Given a probe corpus the Protocol's validators find clean
Given a first rules file that {first: "returns a finding with no subject"}
When the probe corpus is validated with the rules files named by --rules in that order
Then the command exits {exitCode: 1}
Then the Protocol summary line reads {protocolSummary: "validate: 0 errors · 0 warnings (conformance + honesty over the one graph)"}
Then the corpus summary line reads {corpusSummary: "corpus rules: 0 errors · 0 warnings · 1 of 1 files failed (the corpus's own rules)"}
Verification

Verifier bindings

  • test:protocol.validation.corpus-rules.malformed-finding-fails · anchored · test anchor binding present · test/self-hosting-corpus-checks.test.ts:332

    External run evidence from test/self-hosting-corpus-checks.test.ts

    Test anchors: test:protocol.model.planned-architecture.differing-layer-and-uses, test:protocol.model.planned-architecture.matching-design, test:protocol.model.planned-architecture.unrealized-design, test:protocol.validation.architecture-constraints.forbidden-layer-pair, test:protocol.validation.architecture-constraints.isolated-context-as-rule, test:protocol.validation.architecture-constraints.unstated-layer-unclassified, test:protocol.validation.corpus-rules.copies-contain-changes, test:protocol.validation.corpus-rules.error-finding-fails, test:protocol.validation.corpus-rules.malformed-finding-fails, test:protocol.validation.corpus-rules.warning-finding-informs. Specs verified by those bindings: spec:model.planned-architecture, spec:model.planned-architecture.differing-layer-and-uses, spec:model.planned-architecture.matching-design, spec:model.planned-architecture.unrealized-design, spec:validation.architecture-constraints, spec:validation.architecture-constraints.forbidden-layer-pair, spec:validation.architecture-constraints.isolated-context-as-rule, spec:validation.architecture-constraints.unstated-layer-unclassified, spec:validation.corpus-rules, spec:validation.corpus-rules.copies-contain-changes, spec:validation.corpus-rules.error-finding-fails, spec:validation.corpus-rules.malformed-finding-fails, spec:validation.corpus-rules.warning-finding-informs.

    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 worldA rules file that empties its graph leaves the next file's graph whole (spec:validation.corpus-rules.copies-contain-changes)passed21.24 ms
    executes the bound example against a fresh worldAn error from a corpus rule fails validation and leaves the Protocol's line alone (spec:validation.corpus-rules.error-finding-fails)passed4.29 ms
    executes the bound example against a fresh worldA finding with no subject fails its rules file (spec:validation.corpus-rules.malformed-finding-fails)passed3.72 ms
    executes the bound example against a fresh worldA warning from a corpus rule informs and passes (spec:validation.corpus-rules.warning-finding-informs)passed3.36 ms
    executes the bound example against a fresh worldA domain member that uses an infrastructure member breaks a forbidden pair (spec:validation.architecture-constraints.forbidden-layer-pair)passed16.29 ms
    executes the bound example against a fresh worldThe walk named as a rules file fails validation on an isolation breach (spec:validation.architecture-constraints.isolated-context-as-rule)passed3.85 ms
    executes the bound example against a fresh worldA component with no layer leaves its edge unclassified (spec:validation.architecture-constraints.unstated-layer-unclassified)passed3.28 ms
    executes the bound example against a fresh worldA realized component that differs from its design gives one row per field (spec:model.planned-architecture.differing-layer-and-uses)passed10.85 ms
    executes the bound example against a fresh worldA realized component that matches its design gives no row (spec:model.planned-architecture.matching-design)passed5.28 ms
    executes the bound example against a fresh worldA component design no anchor satisfies is listed as unrealized (spec:model.planned-architecture.unrealized-design)passed4.57 ms
Design view

Requirement drawing

  • Satisfying or referencing units: no recorded binding.
Requirement drawing for spec:validation.corpus-rules.malformed-finding-fails
The diagram as text
  • spec:validation.corpus-rules.malformed-finding-fails: A finding with no subject fails its rules file · declared Spec
  • spec:validation.corpus-rules: Corpus-authored rules run on the one validation path · declared Spec
  • test:protocol.validation.corpus-rules.malformed-finding-fails: test:protocol.validation.corpus-rules.malformed-finding-fails · anchored test binding · binding present · test/self-hosting-corpus-checks.test.ts:332
  • spec:validation.corpus-rules.malformed-finding-fails refines spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.malformed-finding-fails verifies spec:validation.corpus-rules · declared
  • test:protocol.validation.corpus-rules.malformed-finding-fails verifies spec:validation.corpus-rules.malformed-finding-fails · 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

No decision record named.

Runtime

No implementation neighborhood recorded.

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.corpus-rules.malformed-finding-fails
  • E2: verifies · declared
The diagram as text
  • spec:validation.corpus-rules: Corpus-authored rules run on the one validation path
  • spec:validation.corpus-rules.malformed-finding-fails: A finding with no subject fails its rules file
  • spec:validation.corpus-rules.malformed-finding-fails refines spec:validation.corpus-rules · declared
  • spec:validation.corpus-rules.malformed-finding-fails verifies spec:validation.corpus-rules · 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

No Spec rests on this Spec.

Relations

Relation and directionOther endClaimReasonExercised keys
refines · outgoingCorpus-authored rules run on the one validation path
spec:validation.corpus-rules · resolves
declaredNoneNone
verifies · outgoingCorpus-authored rules run on the one validation path
spec:validation.corpus-rules · resolves
declaredNonebrokenRuleFails

Bindings

Implementation binding: none

Design reference: none

Verifier binding: present

  • test:protocol.validation.corpus-rules.malformed-finding-fails · anchored · test/self-hosting-corpus-checks.test.ts:332 · test anchor

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.