problemsdp validate by hand after every save.spec:consumers.validate-watchPacks: pack:adopter-speed-v1, pack:design-management-v1, pack:self-hosting-v1
Design: no design entries · no pinned declarations · no decisions
Findings: no errors, no warnings
specs/consumers/validate-watch.sdp.md
No open questions and no blocking questions; implementation binding present, verifier binding present, and expected-outcome oracle none.
problemsdp validate by hand after every save.outcomesdp validate --watch re-run the one validation path on every carrier change and stay alive after findings, as a loop for authoring and never a second validation path.rule line 19 · specs/consumers/validate-watch.sdp.md:19sdp validate --watch [root] installs its watcher first, then runs the same validate path sdp validate runs, from scratch, once at start and again after every carrier create, change, delete or rename under the root.rule line 20 · specs/consumers/validate-watch.sdp.md:20.sdp.md, .sdp.gherkin or .sdp.ts. The watcher ignores the directories discovery skips, the configured exclusion prefixes and every non-carrier path other than the rules files and parameter files --rules names, which it watches wherever they live, as spec:validation.corpus-rules#rule.watchReruns and spec:validation.corpus-rules#rule.watchedParams state; a removed watched directory and an event with no filename each schedule a run because their affected carriers cannot be named.rule line 21 · specs/consumers/validate-watch.sdp.md:21rule.operatorStop line 22 · specs/consumers/validate-watch.sdp.md:22sdp validate prints them and the process stays alive; operator SIGINT terminates the process with exit 0 even while a rules body is active, without waiting for it. No further rules file runs or output is written after the stop.no example exercises it
rule line 23 · specs/consumers/validate-watch.sdp.md:23sdp validate, --watch cannot combine with --check-clean, and it re-runs on carrier edits and on edits to the files --rules names, and never on source edits, so an author re-runs validation after editing an anchor. This rule restricts no other verb's --watch, which its own Spec states.4 unkeyed rules.
test/cli.test.ts:1670test/cli.test.tsTest anchors: test:protocol.engine-provenance, test:protocol.extraction-determinism, test:protocol.projections-model.publication, test:protocol.regenerability, test:protocol.validate-watch. Specs verified by those bindings: spec:consumers.engine-provenance, spec:consumers.projections-model, spec:consumers.validate-watch, spec:extraction.determinism, spec:extraction.regenerability.
Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:34:02.446Z · Stop: 2026-10-31T15:34:13.552Z
| Name | Suite | Result | Duration |
|---|---|---|---|
| prints the exact help text for no args | sdp cli | passed | 1.29 ms |
| points operators to the shipped on-ramps and Protocol corpus | sdp cli | passed | 1.43 ms |
| describes both anchor forms and non-failing warnings in help | sdp cli | passed | 0.3 ms |
| prints the exact help text for --help | sdp cli | passed | 0.13 ms |
| builds the checkout-v1 example: writes graph, contracts, and registrar manifest atomically | sdp cli | passed | 94.65 ms |
| invalidates an existing Design Review when build replaces its source graph | sdp cli | passed | 52.16 ms |
| views the self-hosting corpus from the default repository root | sdp cli | passed | 8248.75 ms |
| renders contracts warnings through the one formatter and counts them in the summary | sdp cli | passed | 7.08 ms |
| withholds case-colliding contract paths with a warning: graph kept, nothing gates | sdp cli | passed | 3.43 ms |
| passes --check-clean on the example (determinism self-check through the CLI) | sdp cli | passed | 33.16 ms |
| end-to-end determinism self-check: delete generated/, rebuild, byte-identical | sdp cli | passed | 118.69 ms |
| fails clean on a root that is not a directory: one line, exit 1, never a stack trace | sdp cli | passed | 0.33 ms |
| rejects an unknown option: one line, exit 1, nothing runs | sdp cli | passed | 0.1 ms |
| accepts repeatable --exclude paths for build | sdp cli | passed | 3.72 ms |
| accepts repeatable --exclude paths for validate | sdp cli | passed | 3.24 ms |
| accepts repeatable --exclude paths for view | sdp cli | passed | 3.85 ms |
| uses the identical normalized exclusions in both --check-clean extractions | sdp cli | passed | 4.99 ms |
| refuses invalid --exclude path "" before build writes | sdp cli | passed | 0.98 ms |
| refuses invalid --exclude path "." before build writes | sdp cli | passed | 0.35 ms |
| refuses invalid --exclude path "./explorations" before build writes | sdp cli | passed | 0.38 ms |
| refuses invalid --exclude path "explorations/" before build writes | sdp cli | passed | 0.22 ms |
| refuses invalid --exclude path "/explorations" before build writes | sdp cli | passed | 0.24 ms |
| refuses invalid --exclude path "../x" before build writes | sdp cli | passed | 0.19 ms |
| refuses invalid --exclude path "a/../b" before build writes | sdp cli | passed | 0.17 ms |
| refuses invalid --exclude path "a//b" before build writes | sdp cli | passed | 0.2 ms |
| refuses invalid --exclude path "a\\b" before build writes | sdp cli | passed | 0.27 ms |
| refuses a missing --exclude operand before build writes | sdp cli | passed | 0.32 ms |
| names a flag supplied as an --exclude operand before build writes | sdp cli | passed | 0.19 ms |
| documents repeatable --exclude paths in help | sdp cli | passed | 0.07 ms |
| rejects a second root argument: one line, exit 1, nothing runs | sdp cli | passed | 0.18 ms |
| notes an empty authored model: zero spec files still builds and exits 0, but says where it looked | sdp cli | passed | 0.69 ms |
| renders a finding's location exactly once, from the structured fields: file:line — [severity] | sdp cli | passed | 2.5 ms |
| renders a Gherkin parser failure through the public CLI | sdp cli | passed | 1.39 ms |
| exits 1, writes nothing, and removes a stale graph.json on a hard-error corpus | sdp cli | passed | 2.31 ms |
| fails build on an integer-like design key holding a static value | sdp cli | passed | 1.28 ms |
| fails build on an integer-like design key holding a non-static value | sdp cli | passed | 1.08 ms |
| fails build on an integer-like design key holding a method | sdp cli | passed | 1.13 ms |
| fails build on an integer-like design key holding an accessor | sdp cli | passed | 1.24 ms |
| fails --check-clean on a diverging second extraction: exit 1, the stale graph.json removed | sdp cli | passed | 11.55 ms |
| fails --check-clean on a diverging second contract generation: exit 1, no artifact survives | sdp cli | passed | 22.86 ms |
| owns the contracts tree wholesale: with nothing to generate, a stale contracts dir is removed | sdp cli | passed | 3.68 ms |
| reconciles a registrar sibling that a later generation no longer owes | sdp cli | passed | 22.86 ms |
| fails --check-clean on registrar-byte drift and removes the uncertified known set | sdp cli | passed | 28.79 ms |
| passes --check-clean without a prior manifest when no registrars are owed | sdp cli | passed | 4.32 ms |
| fails --check-clean on registrar manifest whitespace drift | sdp cli | passed | 29.21 ms |
| fails --check-clean on registrar manifest ignored property drift | sdp cli | passed | 31.67 ms |
| removes graph, contracts, manifest, and registrar siblings after a staged write failure | sdp cli | passed | 22.06 ms |
| fails clean when extraction throws past discovery: one line, exit 1, the stale graph.json removed | sdp cli | passed | 0.66 ms |
| fails clean when generated exists as a file: one line each for build and view, never a stack trace | sdp cli | passed | 5.79 ms |
| names the survivor when a recovery-path removal is denied: a stale artifact never silently reads as current | sdp cli | passed | 0.68 ms |
| stops a build when an existing Design Review cannot be invalidated | sdp cli | passed | 4.61 ms |
| fails clean when the checks throw: one line, exit 1, the built graph.json stays | sdp cli | passed | 3.07 ms |
| suppresses the empty-model note when spec files were found but none reified — a failed file is not an absent one | sdp cli | passed | 1.66 ms |
| treats a root of only ordinary .feature files as an empty authored model, not a missing-identity error | sdp cli | passed | 0.79 ms |
| suppresses the empty-model note when a failed .sdp.gherkin finding.file matches the carrier suffix predicate | sdp cli | passed | 1.05 ms |
| builds a mixed root with one .sdp.gherkin carrier and ignores the ordinary .feature sibling | sdp cli | passed | 1.31 ms |
| removes the temp twin on a failed build and a failed view — no partial .tmp artifact survives | sdp cli | passed | 9.5 ms |
| recognizes the published-bin path: a .bin-style symlink resolves to the entry module | sdp cli | passed | 0.46 ms |
| exits 0 quietly on a stdout EPIPE and stays fatal for any other stream error | sdp cli | passed | 0.59 ms |
| validates the example: exit 0, the artifact written, and no warning | sdp cli | passed | 33.69 ms |
| gates on the checks, not the build: a clean-building broken link validates to exit 1 with the artifact kept | sdp cli | passed | 3.21 ms |
| short-circuits the checks on extraction hard errors: validate keeps build semantics | sdp cli | passed | 1.86 ms |
| prints help plus an unknown-command error | sdp cli | passed | 0.13 ms |
| views the example: validate + the Design Review written, with no warning | sdp cli | passed | 36.21 ms |
| owns the view directory wholesale: a stale page does not survive a re-render | sdp cli | passed | 22.43 ms |
| regenerates the view byte-identically: delete generated/, re-view, same bytes | sdp cli | passed | 27.89 ms |
| writes the view even when checks fail: findings render in it, the exit code is validate's | sdp cli | passed | 2.42 ms |
| keeps build semantics on extraction hard errors: no graph, no view, stale view removed | sdp cli | passed | 2.16 ms |
| fails view --check-clean on a diverging second render: exit 1, the stale view removed | sdp cli | passed | 5.69 ms |
| fails clean when the render throws: one line on stderr, exit 1, the stale view removed | sdp cli | passed | 3.22 ms |
| closes the compiled watch process with exit 0 after operator SIGINT | sdp validate --watch | passed | 282.58 ms |
| documents --watch as a validate-only authoring loop | sdp validate --watch | passed | 0.21 ms |
| rejects --watch on build with a named error and no watcher | sdp validate --watch | passed | 0.14 ms |
| rejects --watch on view with a named error and no watcher | sdp validate --watch | passed | 0.06 ms |
| rejects --watch on census with a named error and no watcher | sdp validate --watch | passed | 0.05 ms |
| rejects --watch on mermaid with a named error and no watcher | sdp validate --watch | passed | 0.04 ms |
| rejects --watch on gherkin with a named error and no watcher | sdp validate --watch | passed | 0.04 ms |
| rejects --watch on import with a named error and no watcher | sdp validate --watch | passed | 0.17 ms |
| rejects --watch on new with a named error and no watcher | sdp validate --watch | passed | 0.26 ms |
| rejects --watch on q with a named error and no watcher | sdp validate --watch | passed | 0.19 ms |
| rejects --watch --check-clean with a named error and no watcher | sdp validate --watch | passed | 0.09 ms |
| installs the watcher before the first validation cycle | sdp validate --watch | passed | 5.11 ms |
| catches an edit during the first cycle with exactly one coalesced rerun | sdp validate --watch | passed | 5.98 ms |
| coalesces a burst during an active cycle into exactly one rerun | sdp validate --watch | passed | 5.82 ms |
| prints validation findings and keeps watching until abort exits 0 | sdp validate --watch | passed | 3.27 ms |
| ignores generated, dist, node_modules, coverage, dot directories, and configured excludes | sdp validate --watch | passed | 5.91 ms |
| coalesces production-shaped events from later turns into one pending rerun | sdp validate --watch | passed | 8.15 ms |
| does not natively subscribe to excluded or generated subtrees | sdp validate --watch | passed | 67.57 ms |
| routes a native watcher error through a typed channel and closes once | sdp validate --watch | passed | 5.53 ms |
| clean-repo determinism: the full pipeline at a different absolute path is byte-identical | not recorded | passed | 74.32 ms |
| prints one line naming the package version and the recorded commit, and exits 0 | sdp --version | passed | 0.47 ms |
| names the commit unknown when the build recorded none or recorded something else | sdp --version | passed | 0.36 ms |
| reads the version from the package manifest two directories above the CLI module | sdp --version | passed | 0.31 ms |
| documents --version and --params in the usage text | sdp --version | passed | 0.11 ms |
| records the checked-out commit at build time, or unknown when git cannot name one | sdp --version | passed | 10.75 ms |
| publishes the commit the build step reads from git beside the CLI | sdp --version | passed | 1.23 ms |
| builds commit metadata from a substituted git archive extracted without .git | sdp --version | passed | 38.4 ms |
| uses only a full archive commit when git gives none, keeping git first | sdp --version | passed | 2.05 ms |
| answers from the compiled CLI with the commit its build recorded beside it | sdp --version | passed | 283.46 ms |
| runs recipe 4 as shipped, its changed files passed with --params @PATH | a shipped recipe file through the compiled CLI | passed | 345.78 ms |
test/corpus-rules.test.ts:343test/corpus-rules.test.tsTest anchors: test:protocol.validate-watch-rules. Specs verified by those bindings: spec:consumers.validate-watch.
Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z
| Name | Suite | Result | Duration |
|---|---|---|---|
| documents repeatable rules, per-file parameters and check-clean | corpus rule arguments | passed | 1.65 ms |
| refuses "--params" before deriving | corpus rule arguments | passed | 1.15 ms |
| refuses "--params" before deriving | corpus rule arguments | passed | 0.27 ms |
| refuses "--rules" before deriving | corpus rule arguments | passed | 0.16 ms |
| refuses "--rules" before deriving | corpus rule arguments | passed | 0.46 ms |
| refuses "--rules" before deriving | corpus rule arguments | passed | 0.65 ms |
| refuses "--rules" before deriving | corpus rule arguments | passed | 0.28 ms |
| refuses "--rules" before deriving | corpus rule arguments | passed | 0.29 ms |
| refuses "--rules" before deriving | corpus rule arguments | passed | 0.25 ms |
| binds parameters to the preceding file across other options | corpus rule arguments | passed | 1.23 ms |
| refuses rules on build | corpus rule arguments | passed | 0.41 ms |
| refuses rules on view | corpus rule arguments | passed | 0.12 ms |
| refuses rules on census | corpus rule arguments | passed | 0.12 ms |
| refuses rules on mermaid | corpus rule arguments | passed | 0.21 ms |
| refuses rules on gherkin | corpus rule arguments | passed | 0.18 ms |
| refuses rules on q | corpus rule arguments | passed | 0.3 ms |
| refuses the same rules file through a symlink before deriving | corpus rules on validate | passed | 1.8 ms |
| refuses a finding file outside root-relative POSIX paths: /etc/passwd | corpus rules on validate | passed | 16.73 ms |
| refuses a finding file outside root-relative POSIX paths: ../outside.ts | corpus rules on validate | passed | 3.88 ms |
| refuses a finding file outside root-relative POSIX paths: src/../../outside.ts | corpus rules on validate | passed | 3.36 ms |
| refuses a finding file outside root-relative POSIX paths: src\\probe.ts | corpus rules on validate | passed | 3.11 ms |
| refuses a finding file outside root-relative POSIX paths: C:/outside.ts | corpus rules on validate | passed | 2.98 ms |
| reports a root-relative finding path: src/probe.ts | corpus rules on validate | passed | 2.83 ms |
| reports a root-relative finding path: src/../probe.ts | corpus rules on validate | passed | 6.27 ms |
| reports a error finding apart from Protocol findings | corpus rules on validate | passed | 3.96 ms |
| reports a warning finding apart from Protocol findings | corpus rules on validate | passed | 4.33 ms |
| fails a broken file and continues: throw new Error('two\nlines') | corpus rules on validate | passed | 2.91 ms |
| fails a broken file and continues: return { | corpus rules on validate | passed | 6.94 ms |
| fails a broken file and continues: return { diagnostics: ['bad'] } | corpus rules on validate | passed | 2.78 ms |
| fails a broken file and continues: return { unknownParams: ['typo'], accepts: [] } | corpus rules on validate | passed | 2.77 ms |
| fails a broken file and continues: return { findings: [{ validatorId: 'a', severity: 'warning', message: 'x' }] } | corpus rules on validate | passed | 2.99 ms |
| fails a broken file and continues: return { findings: [{ ...({ validatorId: "probe-rule", subjectId: "probe-subject", severity: "error", message: "probe finding" }), severity: 'info' }] } | corpus rules on validate | passed | 2.79 ms |
| fails a broken file and continues: return { findings: [{ ...({ validatorId: "probe-rule", subjectId: "probe-subject", severity: "error", message: "probe finding" }), validatorId: 'a/b' }] } | corpus rules on validate | passed | 2.3 ms |
| fails a broken file and continues: return { findings: [{ ...({ validatorId: "probe-rule", subjectId: "probe-subject", severity: "error", message: "probe finding" }), line: 1 }] } | corpus rules on validate | passed | 2.39 ms |
| fails a broken file and continues: return { findings: [{ ...({ validatorId: "probe-rule", subjectId: "probe-subject", severity: "error", message: "probe finding" }), relatedId: 1 }] } | corpus rules on validate | passed | 2.41 ms |
| fails a broken file and continues: return { findings: [{ ...({ validatorId: "probe-rule", subjectId: "probe-subject", severity: "error", message: "probe finding" }), path: 1 }] } | corpus rules on validate | passed | 2.31 ms |
| fails a broken file and continues: return { findings: [{ ...({ validatorId: "probe-rule", subjectId: "probe-subject", severity: "error", message: "probe finding" }), file: '' }] } | corpus rules on validate | passed | 2.32 ms |
| fails an unreadable file | corpus rules on validate | passed | 2.24 ms |
| discards every finding of a malformed answer | corpus rules on validate | passed | 2.17 ms |
| clones the graph and report separately for each file and leaves written bytes whole | corpus rules on validate | passed | 4.12 ms |
| gives each file only its own parameters, including JSON files and keyed values | corpus rules on validate | passed | 2.88 ms |
| keeps the ordinary validate output unchanged and q report free of corpus data | corpus rules on validate | passed | 4.56 ms |
| does not run rules when the graph does not derive | corpus rules on validate | passed | 2.23 ms |
| exposes corpus data only on the aggregate validate outcome | not recorded | passed | 5.57 ms |
| awaits bodies in file order and keeps a Protocol error fatal | not recorded | passed | 2.87 ms |
| SIGINT exits 0 during a live rules body, with no later output or rules, even if it can settle: false | not recorded | passed | 409.71 ms |
| SIGINT exits 0 during a live rules body, with no later output or rules, even if it can settle: true | not recorded | passed | 452.12 ms |
| rereads rules when its file changes | not recorded | passed | 7.7 ms |
| gives each watch cycle fresh parameters after a body mutates them | not recorded | passed | 5.19 ms |
src/cli/validate-watch.ts:591test/cli.test.ts:1670test/corpus-rules.test.ts:343Copyable 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.
No decision record named.
component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:32Uses
component:protocol.adapters · external runtime and source adapters · src/adapters/vitest.ts:23component:protocol.codegen · contracts and registrar output · src/codegen/contracts.ts:633component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:192component:protocol.graph · the one graph and its semantic decisions · src/graph/schema.ts:34component:protocol.import · canonical conversion with a fidelity boundary · src/import/import.ts:45component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29component:protocol.reader · the typed graph contract and body evaluator · src/reader/reader.ts:671component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72impl:protocol.validate-watch · watches carrier directories and coalesces events into a pending validation rerun · src/cli/validate-watch.ts:591Component: component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:32
Uses
None.
Runtime observation: not tracked.
Runtime observation: not tracked.
Build attestations: not tracked.
Deployments: not tracked.
Bills of materials: not tracked.
Copyable source; the Studio draws static SVG.
Preferred syntax: flowchart. Chosen syntax: labelled flowchart, preserving exact relations, claims and folds.
Implementing units
impl:protocol.vault-sync · src/projections/vault/sync.ts:98impl:protocol.vault-text · src/projections/vault/text.ts:30impl:protocol.vault-watch · src/cli/vault-command.ts:219Referencing units
None.
Enabled verifiers: spec:consumers.obsidian-vault.iteration.watch-rewrites-changed-notes, spec:consumers.obsidian-vault.iteration.watch-source-anchor
Implementing units
impl:protocol.studio-watch · src/cli/studio-command.ts:122Referencing units
None.
Enabled verifiers: spec:consumers.spec-studio.publisher.watch.matches-plain-run
Implementing units
impl:protocol.corpus-rule-runner · src/cli/corpus-rules.ts:65impl:protocol.corpus-rules · src/cli/validate-view-command.ts:79impl:protocol.validate-watch · src/cli/validate-watch.ts:591Referencing units
None.
Enabled verifiers: 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:validation.corpus-rules.copies-contain-changes, spec:validation.corpus-rules.error-finding-fails, spec:validation.corpus-rules.malformed-finding-fails, 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, spec:validation.corpus-rules.warning-finding-informs
Packs: pack:adopter-speed-v1, pack:corpus-checks-v1, pack:design-management-v1, pack:self-hosting-v1
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.consumers.obsidian-vault.iteration.watch-rewrites-changed-notes
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.consumers.obsidian-vault.iteration.watch-source-anchor
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.studio-watch-plain
Implementing units
impl:protocol.vault-on-ramp · test/skills.test.ts:1995Referencing units
None.
Enabled verifiers: test:protocol.vault-on-ramp
Implementing units
impl:protocol.architecture-walk-recipe · test/architecture-recipes.test.ts:10Referencing units
None.
Enabled verifiers: spec:validation.architecture-constraints.forbidden-layer-pair, spec:validation.architecture-constraints.isolated-context-as-rule, spec:validation.architecture-constraints.unstated-layer-unclassified
Packs: pack:corpus-checks-v1, pack:design-management-v1, pack:self-hosting-v1
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.corpus-rules.copies-contain-changes
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.corpus-rules.error-finding-fails
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.corpus-rules.malformed-finding-fails
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.corpus-rules.params-edit-starts-a-cycle
Packs: pack:adopter-speed-v1, pack:corpus-checks-v1, pack:self-hosting-v1
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.corpus-rules.rules-edit-starts-a-cycle
Packs: pack:adopter-speed-v1, pack:corpus-checks-v1, pack:self-hosting-v1
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.corpus-rules.unreadable-params-fail-one-file
Packs: pack:adopter-speed-v1, pack:corpus-checks-v1, pack:self-hosting-v1
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.corpus-rules.warning-finding-informs
Implementing units
impl:protocol.external-registers-recipe · test/external-registers.test.ts:9Referencing units
None.
Enabled verifiers: spec:validation.external-registers.uncited-on-request, spec:validation.external-registers.unknown-and-retired
Implementing units
None.
Referencing units
None.
Enabled verifiers: None
Packs: pack:roadmap, pack:self-hosting-v1
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.architecture-constraints.forbidden-layer-pair
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.architecture-constraints.isolated-context-as-rule
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.validation.architecture-constraints.unstated-layer-unclassified
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.external-registers.uncited-on-request
Implementing units
None.
Referencing units
None.
Enabled verifiers: test:protocol.external-registers.unknown-and-retired
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| dependsOn · outgoing | Validation follows one graphspec:decisions.one-validation-path · resolves | declared | None | None |
| dependsOn · outgoing | Extraction exclusions are strict consumer inputspec:extraction.excludes · resolves | declared | None | None |
| refines · outgoing | Authors move one Spec from intent to reviewed evidencespec:consumers.authoring-on-ramp · resolves | declared | None | None |
| dependsOn · incoming | A design pass is followed and answered from the vaultspec:consumers.obsidian-vault.iteration · resolves | declared | the vault's watch runs the same loop over carriers and anchored source files | None |
| dependsOn · incoming | sdp studio --watch rebuilds the page set on each carrier changespec:consumers.spec-studio.publisher.watch · resolves | declared | the watch reruns on the carrier events validate's watch follows | None |
| dependsOn · incoming | Corpus-authored rules run on the one validation pathspec:validation.corpus-rules · resolves | declared | the watch loop reruns the named rules in each cycle | None |
impl:protocol.validate-watch · watches carrier directories and coalesces events into a pending validation rerun · src/cli/validate-watch.ts:591component:protocol.cli · layer edge · context protocoltest/cli.test.ts:1670test/corpus-rules.test.ts:343Runtime observation: not tracked.
Run results: not recorded in the graph.
None.
Composing needs the script.