outcomeRewriting a rules file under node_modules starts a cycle that runs the new body
spec:validation.corpus-rules.rules-edit-starts-a-cyclePacks: pack:adopter-speed-v1, 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.rules-edit-starts-a-cycle.sdp.md
No open questions and no blocking questions; implementation binding none, verifier binding present, and expected-outcome oracle none.
Given
a probe corpus the Protocol's validators find clean
a first rules file that {first: "is rewritten to return one error finding after the first cycle under --watch"}
a second rules file that returns one warning when the graph it receives holds no nodeWhen
the probe corpus is validated with the rules files named by --rules in that order
Then
the second cycle's corpus summary line reads {corpusSummary: "corpus rules: 1 errors · 0 warnings · 0 of 2 files failed (the corpus's own rules)"}Composing needs the script.
Intent
- Execute the watch rule on a rules file that lives under a directory discovery skips and is rewritten after the first cycle.
assumptions- The world writes the probe corpus of the error example, a first rules file under the probe root's
node_modules/probe/whose body returns one warning finding, and the second rules file of the copy example. It startssdp validate --watchon the probe root with the two files named by--rulesin that order, waits for the first cycle, rewrites the first file to return one error finding in place of the warning, waits for the second cycle, reads its corpus summary line and stops the watcher.
- The world writes the probe corpus of the error example, a first rules file under the probe root's
Behavior
Examples
Given a probe corpus the Protocol's validators find clean
Given a first rules file that {first: "is rewritten to return one error finding after the first cycle under --watch"}
Given a second rules file that returns one warning when the graph it receives holds no node
When the probe corpus is validated with the rules files named by --rules in that order
Then the second cycle's corpus summary line reads {corpusSummary: "corpus rules: 1 errors · 0 warnings · 0 of 2 files failed (the corpus's own rules)"}Verification
Verifier bindings
- test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle · anchored · test anchor binding present ·
test/reach-examples.test.ts:448External run evidence from
test/reach-examples.test.tsTest anchors:
test:protocol.consumers.agent-surface.address-and-cycle-recipes.chain-reports-nothing,test:protocol.consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run,test:protocol.consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run,test:protocol.consumers.agent-surface.evaluation-sink.exported-evaluator,test:protocol.consumers.agent-surface.evaluation-sink.recipe-call,test:protocol.consumers.agent-surface.evaluation-sink.unknown-recipe,test:protocol.validation.corpus-rules.params-edit-starts-a-cycle,test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle,test:protocol.validation.corpus-rules.unreadable-params-fail-one-file. Specs verified by those bindings: spec:consumers.agent-surface.address-and-cycle-recipes, spec:consumers.agent-surface.address-and-cycle-recipes.chain-reports-nothing, spec:consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run, spec:consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run, spec:consumers.agent-surface.evaluation-sink, spec:consumers.agent-surface.evaluation-sink.exported-evaluator, spec:consumers.agent-surface.evaluation-sink.recipe-call, spec:consumers.agent-surface.evaluation-sink.unknown-recipe, spec:validation.corpus-rules, spec:validation.corpus-rules.params-edit-starts-a-cycle, spec:validation.corpus-rules.rules-edit-starts-a-cycle, spec:validation.corpus-rules.unreadable-params-fail-one-file.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
Name Suite Result Duration gives every watch example the heavy-test timeout not recorded passed 2.43 ms leaves non-watch corpus-rule points and incomplete points unspecified not recorded passed 0.36 ms leaves address points outside the oracle's bound probes unspecified not recorded passed 0.17 ms executes the bound example against a fresh world A body calls a shipped recipe and returns its answer unchanged (spec:consumers.agent-surface.evaluation-sink.recipe-call) passed 21.85 ms executes the bound example against a fresh world A call to a recipe the catalog does not hold fails the body (spec:consumers.agent-surface.evaluation-sink.unknown-recipe) passed 3.48 ms executes the bound example against a fresh world A script holding a graph runs a shipped recipe through the exported evaluator (spec:consumers.agent-surface.evaluation-sink.exported-evaluator) passed 3.89 ms executes the bound example against a fresh world A dependency chain with no cycle yields no finding (spec:consumers.agent-surface.address-and-cycle-recipes.chain-reports-nothing) passed 3.1 ms executes the bound example against a fresh world The shipped dependency-cycles file fails a rules run on a cycle (spec:consumers.agent-surface.address-and-cycle-recipes.cycle-fails-a-rules-run) passed 5.52 ms executes the bound example against a fresh world The shipped address-resolution file fails a rules run on an address that names no entry (spec:consumers.agent-surface.address-and-cycle-recipes.unresolved-address-fails-a-rules-run) passed 3.86 ms executes the bound example against a fresh world Rewriting a rules file under node_modules starts a cycle that runs the new body (spec:validation.corpus-rules.rules-edit-starts-a-cycle) passed 16.19 ms executes the bound example against a fresh world Editing a parameter file starts a cycle that reads the new parameters (spec:validation.corpus-rules.params-edit-starts-a-cycle) passed 46.21 ms executes the bound example against a fresh world A parameter file that stops being JSON fails only its own rules file, and the watcher runs on (spec:validation.corpus-rules.unreadable-params-fail-one-file) passed 103.81 ms
Design view
Requirement drawing
- Satisfying or referencing units: no recorded binding.
The diagram as text
- spec:validation.corpus-rules.rules-edit-starts-a-cycle: Rewriting a rules file under node_modules starts a cycle that runs the new body · declared Spec
- spec:validation.corpus-rules: Corpus-authored rules run on the one validation path · declared Spec
- test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle: test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle · anchored test binding · binding present ·
test/reach-examples.test.ts:448 - spec:validation.corpus-rules.rules-edit-starts-a-cycle refines spec:validation.corpus-rules · declared
- spec:validation.corpus-rules.rules-edit-starts-a-cycle verifies spec:validation.corpus-rules · declared
- test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle verifies spec:validation.corpus-rules.rules-edit-starts-a-cycle · 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
- E2: verifies · declared
The diagram as text
- spec:validation.corpus-rules: Corpus-authored rules run on the one validation path
- spec:validation.corpus-rules.rules-edit-starts-a-cycle: Rewriting a rules file under node_modules starts a cycle that runs the new body
- spec:validation.corpus-rules.rules-edit-starts-a-cycle refines spec:validation.corpus-rules · declared
- spec:validation.corpus-rules.rules-edit-starts-a-cycle 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
- refines · spec:validation.corpus-rules · stated ready, floor ready
Rested on by
No Spec rests on this Spec.
Relations
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| refines · outgoing | Corpus-authored rules run on the one validation pathspec:validation.corpus-rules · resolves | declared | None | None |
| verifies · outgoing | Corpus-authored rules run on the one validation pathspec:validation.corpus-rules · resolves | declared | None | watchReruns |
Bindings
Implementation binding: none
Design reference: none
Verifier binding: present
- test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle · anchored ·
test/reach-examples.test.ts:448· 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.