Spec Studio

A Spec shaped by a superseded decision warns

spec:validation.superseded-decision-signalBusiness Rule · storyready floor ready

Packs: pack:design-management-v1, pack:self-hosting-v1

Design: 10 design entries · 7 pinned declarations · 1 decision

Findings: no errors, no warnings

specs/validation/superseded-decision-signal.sdp.md

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

The original design checked lifecycle integrity. It flagged a superseded Spec that live Specs still depend on, and a deprecated decision still named by decidedBy (docs/lineage/v0-design/06-extraction-and-validation.md §6.3.4). A corpus may keep a replaced decision whose text still explains something a reader needs. Its supersedes edge and a shaped Spec's decidedBy edge then make a stale shaping relation visible in the graph, and this signal reads the two together.

Only decidedBy says that a ruling shapes a Spec now. A refines between decisions narrows a ruling for one case and stays true after the ruling it narrows is replaced, and a dependsOn that names a decision is not how a corpus says a ruling shapes it, so reading either would warn about relations that are not stale. When a replacement is itself replaced, the author needs the record at the end of the chain, so the warning names that record and leaves the steps between to the decision register.

Intent
problem
A Spec can stay shaped by a decision that a later decision replaced, and nothing tells its author that the ruling it rests on has moved.
outcome
Surface a live Spec that is still shaped by a decision another decision has superseded, as an informative warning.
Rule

Each world builds its graph in memory, and every probe Spec carries its kind's evidence, so only the signal moves the findings. Each probe's full id joins the probe family and its name, as probe.decision-a does. A live subject is the behavior Spec shaped in the file shaped.sdp.md, whose location table records its decidedBy row on line 7. A superseded subject is the decision decision-s, which decision-b supersedes, and a replacing subject is decision-b itself. The subject names the probe decision decision-a, and the replacing decisions are decision-b, decision-c and decision-d, which state the rung the point binds. One replacement is decision-b superseding decision-a; a chain of two adds decision-c superseding decision-b; two at once are decision-b and decision-c each superseding decision-a; a closed chain is decision-b superseding decision-a and decision-a superseding decision-b; an end and a loop at once are decision-b and decision-c each superseding decision-a, with decision-c and decision-d superseding each other. The named decisions are the ends and loop members the warnings name, full ids joined by a comma and a space in code-unit order, or nothing when no warning names any. The field and message steps read the one warning the point reports, and the message step fills the Design entry it names with that warning's ids.

rule.readsDecidedBy line 28 · specs/validation/superseded-decision-signal.sdp.md:28
The signal reads two kinds of authored edge and nothing else: decidedBy from a Spec to a decision, and supersedes between decisions. A refines, dependsOn or constrainedBy that names a superseded decision is never read, and neither is a refines between decisions.

spec:validation.superseded-decision-signal.dependency-unread · enabled, spec:validation.superseded-decision-signal.replaced-ruling-warns · enabled

rule.keptRecordLawful line 29 · specs/validation/superseded-decision-signal.sdp.md:29
A corpus may keep a replaced decision while its text explains something a reader still needs; keeping it is lawful, and a deleted decision leaves a dangling decidedBy that referential integrity reports and this signal does not read.

no example exercises it

rule.onePerPair line 30 · specs/validation/superseded-decision-signal.sdp.md:30
A live Spec that names through decidedBy a decision another decision supersedes carries one warning for that pair, with the shaped Spec as its subject and the superseded decision as its related Spec; a Spec shaped by two superseded decisions carries two warnings.

spec:validation.superseded-decision-signal.live-replacement-warns · enabled, spec:validation.superseded-decision-signal.replaced-ruling-warns · enabled

rule.chainEnd line 31 · specs/validation/superseded-decision-signal.sdp.md:31
The warning names the decision at the end of each replacement chain: from the superseded decision the walk follows supersedes to the decisions that replace it, and on from each of those, and a decision it reaches that no decision supersedes is an end. Where the chain branches, the warning names every end.

spec:validation.superseded-decision-signal.branch-names-every-end · enabled, spec:validation.superseded-decision-signal.chain-end-named · enabled, spec:validation.superseded-decision-signal.end-and-loop-named · enabled, spec:validation.superseded-decision-signal.replaced-ruling-warns · enabled

rule.closedChain line 32 · specs/validation/superseded-decision-signal.sdp.md:32
The walk visits each decision once. A loop is a set of decisions the walk reaches, the superseded decision included, that supersede one another in a cycle, or one decision that supersedes itself. When the walk reaches a loop, the warning says the chain of replacements closes on itself and names each decision in a loop it reaches, and no other decision it passes through; when it also reaches an end, it names the ends as well. A loop is never an error and is never followed twice.

spec:validation.superseded-decision-signal.closed-chain-named · enabled, spec:validation.superseded-decision-signal.end-and-loop-named · enabled

rule.anyRung line 33 · specs/validation/superseded-decision-signal.sdp.md:33
The signal reads every supersedes edge whatever rung either decision states, so a replacement still below ready is named as it stands and its rung is read where the reader looks it up.

spec:validation.superseded-decision-signal.replacement-below-ready-named · enabled

rule.liveSubjectsOnly line 34 · specs/validation/superseded-decision-signal.sdp.md:34
A Spec that a resolving supersedes edge targets is not live and carries no warning for the decisions it names. A decision that supersedes another stays live until it is itself superseded, so its own decidedBy relations warn as any live Spec's do, even when the walk from the decision it names reaches it.

spec:validation.superseded-decision-signal.live-replacement-warns · enabled, spec:validation.superseded-decision-signal.superseded-subject-silent · enabled

rule.informative line 35 · specs/validation/superseded-decision-signal.sdp.md:35
The warning never fails validation, as the orphan and gap signals never do; the Protocol fixes its severity and no setting changes it.

spec:validation.superseded-decision-signal.closed-chain-named · enabled, spec:validation.superseded-decision-signal.replaced-ruling-warns · enabled

rule.noSupersedesWarning line 36 · specs/validation/superseded-decision-signal.sdp.md:36
The supersedes edge itself is never warned, and a superseded decision is never warned for being superseded.

spec:validation.superseded-decision-signal.replaced-ruling-warns · enabled, spec:validation.superseded-decision-signal.superseded-subject-silent · enabled

rule.noContentJudgment line 37 · specs/validation/superseded-decision-signal.sdp.md:37
The signal judges no content: it never asks whether the newer ruling fits the shaped Spec, and moving the decidedBy to the end of the chain, or deleting the replaced record, is the author's edit.

no example exercises it

0 unkeyed rules.

Verifying examples

A replacement chain that branches names every end · spec:validation.superseded-decision-signal.branch-names-every-end · ready floor ready

Executable Spec

Given a {subject: "live Spec"} names the probe decision through {relation: "decidedBy"}
Given the probe decision is replaced by {replacement: "two decisions at once"}
Given every replacing decision states {replacementRung: "ready"}
When the graph is validated
Then the report holds {warnings: 1} superseded-decision warnings
Then the warnings name {named: "spec:probe.decision-b, spec:probe.decision-c"}
Then the warning message follows {template: "message"}
Then the report holds {errorCount: 0} errors

Open example

The warning names the decision at the end of a chain of replacements · spec:validation.superseded-decision-signal.chain-end-named · ready floor ready

Executable Spec

Given a {subject: "live Spec"} names the probe decision through {relation: "decidedBy"}
Given the probe decision is replaced by {replacement: "a chain of two decisions"}
Given every replacing decision states {replacementRung: "ready"}
When the graph is validated
Then the report holds {warnings: 1} superseded-decision warnings
Then the warnings name {named: "spec:probe.decision-c"}
Then the report holds {errorCount: 0} errors

Open example

A chain of replacements that closes on itself is named and fails nothing · spec:validation.superseded-decision-signal.closed-chain-named · ready floor ready

Executable Spec

Given a {subject: "live Spec"} names the probe decision through {relation: "decidedBy"}
Given the probe decision is replaced by {replacement: "a chain that closes on itself"}
Given every replacing decision states {replacementRung: "ready"}
When the graph is validated
Then the report holds {warnings: 1} superseded-decision warnings
Then the warnings name {named: "spec:probe.decision-a, spec:probe.decision-b"}
Then the warning message follows {template: "closedChainMessage"}
Then the report holds {errorCount: 0} errors

Open example

A dependency on a replaced decision raises no warning · spec:validation.superseded-decision-signal.dependency-unread · ready floor ready

Executable Spec

Given a {subject: "live Spec"} names the probe decision through {relation: "dependsOn"}
Given the probe decision is replaced by {replacement: "one decision"}
Given every replacing decision states {replacementRung: "ready"}
When the graph is validated
Then the report holds {warnings: 0} superseded-decision warnings
Then the warnings name {named: "nothing"}
Then the report holds {errorCount: 0} errors

Open example

A chain of replacements that reaches an end and a loop names both · spec:validation.superseded-decision-signal.end-and-loop-named · ready floor ready

Executable Spec

Given a {subject: "live Spec"} names the probe decision through {relation: "decidedBy"}
Given the probe decision is replaced by {replacement: "an end and a loop at once"}
Given every replacing decision states {replacementRung: "ready"}
When the graph is validated
Then the report holds {warnings: 1} superseded-decision warnings
Then the warnings name {named: "spec:probe.decision-b, spec:probe.decision-c, spec:probe.decision-d"}
Then the warning message follows {template: "mixedChainMessage"}
Then the report holds {errorCount: 0} errors

Open example

A decision still decided by the record it replaces warns · spec:validation.superseded-decision-signal.live-replacement-warns · ready floor ready

Executable Spec

Given a {subject: "replacing decision"} names the probe decision through {relation: "decidedBy"}
Given the probe decision is replaced by {replacement: "one decision"}
Given every replacing decision states {replacementRung: "ready"}
When the graph is validated
Then the report holds {warnings: 1} superseded-decision warnings
Then the warnings name {named: "spec:probe.decision-b"}
Then the warning has the subject {subjectId: "spec:probe.decision-b"} and the related Spec {relatedId: "spec:probe.decision-a"}
Then the report holds {errorCount: 0} errors

Open example

A Spec shaped by a replaced decision warns once and fails nothing · spec:validation.superseded-decision-signal.replaced-ruling-warns · ready floor ready

Executable Spec

Given a {subject: "live Spec"} names the probe decision through {relation: "decidedBy"}
Given the probe decision is replaced by {replacement: "one decision"}
Given every replacing decision states {replacementRung: "ready"}
When the graph is validated
Then the report holds {warnings: 1} superseded-decision warnings
Then the warnings name {named: "spec:probe.decision-b"}
Then the warning is {validatorId: "conformance/superseded-decisions"} in the {family: "conformance"} family at severity {severity: "warning"}
Then the warning has the subject {subjectId: "spec:probe.shaped"} and the related Spec {relatedId: "spec:probe.decision-a"}
Then the warning sits at {path: "relation.decidedBy.spec:probe.decision-a"} in {file: "shaped.sdp.md"} on line {line: 7}
Then the warning message follows {template: "message"}
Then the report holds {errorCount: 0} errors

Open example

A replacement still below ready is named as it stands · spec:validation.superseded-decision-signal.replacement-below-ready-named · ready floor ready

Executable Spec

Given a {subject: "live Spec"} names the probe decision through {relation: "decidedBy"}
Given the probe decision is replaced by {replacement: "one decision"}
Given every replacing decision states {replacementRung: "idea"}
When the graph is validated
Then the report holds {warnings: 1} superseded-decision warnings
Then the warnings name {named: "spec:probe.decision-b"}
Then the report holds {errorCount: 0} errors

Open example

A superseded decision is not warned for the decision it names · spec:validation.superseded-decision-signal.superseded-subject-silent · ready floor ready

Executable Spec

Given a {subject: "superseded decision"} names the probe decision through {relation: "decidedBy"}
Given the probe decision is replaced by {replacement: "one decision"}
Given every replacing decision states {replacementRung: "ready"}
When the graph is validated
Then the report holds {warnings: 0} superseded-decision warnings
Then the warnings name {named: "nothing"}
Then the report holds {errorCount: 0} errors

Open example

Example space

Given a {subject:"live Spec"|"superseded decision"|"replacing decision"} names the probe decision through {relation:"decidedBy"|"dependsOn"}
Given the probe decision is replaced by {replacement:"no decision"|"one decision"|"a chain of two decisions"|"two decisions at once"|"a chain that closes on itself"|"an end and a loop at once"}
Given every replacing decision states {replacementRung:"idea"|"ready"}
When the graph is validated
Then the report holds {warnings:number} superseded-decision warnings
Then the warnings name {named:string}
Then the warning is {validatorId:string} in the {family:string} family at severity {severity:string}
Then the warning has the subject {subjectId:string} and the related Spec {relatedId:string}
Then the warning sits at {path:string} in {file:string} on line {line:number}
Then the warning message follows {template:"message"|"closedChainMessage"|"mixedChainMessage"}
Then the report holds {errorCount:number} errors
Design
validatorId line 40 · specs/validation/superseded-decision-signal.sdp.md:40
conformance/superseded-decisions, registered as supersededDecisions in graphValidatorIds; a new id, never a reused one.

no citation recorded

family line 41 · specs/validation/superseded-decision-signal.sdp.md:41
conformance: the signal reads whether a Spec's authored relations still reach a current ruling, as the orphan signal reads whether any relation reaches a Spec.

no citation recorded

severity line 42 · specs/validation/superseded-decision-signal.sdp.md:42
warning, fixed by the Protocol.

no citation recorded

warningFields line 43 · specs/validation/superseded-decision-signal.sdp.md:43
subjectId is the shaped Spec, relatedId the superseded decision it names, path is relation.decidedBy.<relatedId>, the location table's entry for that relation, file is the shaped Spec's file, and line is that row's line, present only when the carrier recorded one.

no citation recorded

message line 44 · specs/validation/superseded-decision-signal.sdp.md:44
Spec "<subjectId>" is decided by "<relatedId>", which a later decision supersedes; the chain of replacements ends at "<end>" (informative, never a gate)., with ends at "<end>", "<end>" when the chain branches.

no citation recorded

closedChainMessage line 45 · specs/validation/superseded-decision-signal.sdp.md:45
Spec "<subjectId>" is decided by "<relatedId>", whose chain of replacements closes on itself through "<loop-id>", "<loop-id>" (informative, never a gate)., used when the walk reaches no end, naming each decision in a loop it reaches.

no citation recorded

mixedChainMessage line 46 · specs/validation/superseded-decision-signal.sdp.md:46
Spec "<subjectId>" is decided by "<relatedId>", whose chain of replacements ends at "<end>" and also closes on itself through "<loop-id>", "<loop-id>" (informative, never a gate)., used when the walk reaches both, with every end and every loop member listed as the other two messages list them.

no citation recorded

chainWalk line 47 · specs/validation/superseded-decision-signal.sdp.md:47
read the resolving, declared supersedes edges whose source and target are both decision Specs, and index each by its target; from the superseded decision, visit each decision reachable along those edges from target to source once; an end is a reached decision other than the start that no such edge targets; a loop member is a reached decision, the start included, in a strongly connected component of two or more decisions or with an edge to itself; ends and loop members are collected apart.
idOrder line 48 · specs/validation/superseded-decision-signal.sdp.md:48
the ids a message lists sort in code-unit order, and the findings sort as every report's findings do.
skippedPairs line 49 · specs/validation/superseded-decision-signal.sdp.md:49
no warning for a decidedBy whose target does not resolve, is not a decision, or is targeted by no supersedes edge the walk reads, and none for a subject a resolving supersedes edge targets; a subject the walk reaches is still checked.
Verification

Verifier bindings

Example space

  • subject · "live Spec" | "superseded decision" | "replacing decision" · declared by a {subject} names the probe decision through {relation}
  • relation · "decidedBy" | "dependsOn" · declared by a {subject} names the probe decision through {relation}
  • replacement · "no decision" | "one decision" | "a chain of two decisions" | "two decisions at once" | "a chain that closes on itself" | "an end and a loop at once" · declared by the probe decision is replaced by {replacement}
  • replacementRung · "idea" | "ready" · declared by every replacing decision states {replacementRung}

Bound points

ExamplesubjectrelationreplacementreplacementRung
spec:validation.superseded-decision-signal.branch-names-every-end"live Spec""decidedBy""two decisions at once""ready"
spec:validation.superseded-decision-signal.chain-end-named"live Spec""decidedBy""a chain of two decisions""ready"
spec:validation.superseded-decision-signal.closed-chain-named"live Spec""decidedBy""a chain that closes on itself""ready"
spec:validation.superseded-decision-signal.dependency-unread"live Spec""dependsOn""one decision""ready"
spec:validation.superseded-decision-signal.end-and-loop-named"live Spec""decidedBy""an end and a loop at once""ready"
spec:validation.superseded-decision-signal.live-replacement-warns"replacing decision""decidedBy""one decision""ready"
spec:validation.superseded-decision-signal.replaced-ruling-warns"live Spec""decidedBy""one decision""ready"
spec:validation.superseded-decision-signal.replacement-below-ready-named"live Spec""decidedBy""one decision""idea"
spec:validation.superseded-decision-signal.superseded-subject-silent"superseded decision""decidedBy""one decision""ready"

Oracle binding: present · oracle:protocol.superseded-decision-signal · test/self-hosting-validators.test.ts:1551

Coverage

Unbound

  • subject: None
  • relation: None
  • replacement: None
  • replacementRung: None
Design view

Requirement drawing

Requirement drawing for spec:validation.superseded-decision-signal
The diagram as text
  • spec:validation.superseded-decision-signal: A Spec shaped by a superseded decision warns · declared Spec
  • spec:validation.superseded-decision-signal.branch-names-every-end: A replacement chain that branches names every end · declared Spec
  • spec:validation.superseded-decision-signal.chain-end-named: The warning names the decision at the end of a chain of replacements · declared Spec
  • spec:validation.superseded-decision-signal.closed-chain-named: A chain of replacements that closes on itself is named and fails nothing · declared Spec
  • spec:validation.superseded-decision-signal.dependency-unread: A dependency on a replaced decision raises no warning · declared Spec
  • spec:validation.superseded-decision-signal.end-and-loop-named: A chain of replacements that reaches an end and a loop names both · declared Spec
  • spec:validation.superseded-decision-signal.live-replacement-warns: A decision still decided by the record it replaces warns · declared Spec
  • spec:validation.superseded-decision-signal.replaced-ruling-warns: A Spec shaped by a replaced decision warns once and fails nothing · declared Spec
  • spec:validation.superseded-decision-signal.replacement-below-ready-named: A replacement still below ready is named as it stands · declared Spec
  • spec:validation.superseded-decision-signal.superseded-subject-silent: A superseded decision is not warned for the decision it names · declared Spec
  • spec:validation.warn-level-signals: Missing connective evidence warns without failing · declared Spec
  • impl:protocol.superseded-decision-signal: walks decision replacements to surface stale shaping relations · anchored code · src/validate/validators.ts:1817
  • oracle:protocol.superseded-decision-signal: oracle:protocol.superseded-decision-signal · anchored oracle binding · test/self-hosting-validators.test.ts:1551
  • test:protocol.superseded-decision-signal.branch-names-every-end: test:protocol.superseded-decision-signal.branch-names-every-end · anchored test binding · binding present · test/self-hosting-validators.test.ts:1666
  • test:protocol.superseded-decision-signal.chain-end-named: test:protocol.superseded-decision-signal.chain-end-named · anchored test binding · binding present · test/self-hosting-validators.test.ts:1651
  • test:protocol.superseded-decision-signal.closed-chain-named: test:protocol.superseded-decision-signal.closed-chain-named · anchored test binding · binding present · test/self-hosting-validators.test.ts:1681
  • test:protocol.superseded-decision-signal.dependency-unread: test:protocol.superseded-decision-signal.dependency-unread · anchored test binding · binding present · test/self-hosting-validators.test.ts:1696
  • test:protocol.superseded-decision-signal.end-and-loop-named: test:protocol.superseded-decision-signal.end-and-loop-named · anchored test binding · binding present · test/self-hosting-validators.test.ts:1756
  • test:protocol.superseded-decision-signal.live-replacement-warns: test:protocol.superseded-decision-signal.live-replacement-warns · anchored test binding · binding present · test/self-hosting-validators.test.ts:1741
  • test:protocol.superseded-decision-signal.replaced-ruling-warns: test:protocol.superseded-decision-signal.replaced-ruling-warns · anchored test binding · binding present · test/self-hosting-validators.test.ts:1636
  • test:protocol.superseded-decision-signal.replacement-below-ready-named: test:protocol.superseded-decision-signal.replacement-below-ready-named · anchored test binding · binding present · test/self-hosting-validators.test.ts:1726
  • test:protocol.superseded-decision-signal.superseded-subject-silent: test:protocol.superseded-decision-signal.superseded-subject-silent · anchored test binding · binding present · test/self-hosting-validators.test.ts:1711
  • spec:validation.superseded-decision-signal refines spec:validation.warn-level-signals · declared
  • spec:validation.superseded-decision-signal.branch-names-every-end refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.branch-names-every-end verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.chain-end-named refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.chain-end-named verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.closed-chain-named refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.closed-chain-named verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.dependency-unread refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.dependency-unread verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.end-and-loop-named refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.end-and-loop-named verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.live-replacement-warns refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.live-replacement-warns verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.replaced-ruling-warns refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.replaced-ruling-warns verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.replacement-below-ready-named refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.replacement-below-ready-named verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.superseded-subject-silent refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.superseded-subject-silent verifies spec:validation.superseded-decision-signal · declared
  • impl:protocol.superseded-decision-signal satisfies spec:validation.superseded-decision-signal · anchored
  • oracle:protocol.superseded-decision-signal models spec:validation.superseded-decision-signal · anchored
  • test:protocol.superseded-decision-signal.branch-names-every-end verifies spec:validation.superseded-decision-signal.branch-names-every-end · anchored
  • test:protocol.superseded-decision-signal.chain-end-named verifies spec:validation.superseded-decision-signal.chain-end-named · anchored
  • test:protocol.superseded-decision-signal.closed-chain-named verifies spec:validation.superseded-decision-signal.closed-chain-named · anchored
  • test:protocol.superseded-decision-signal.dependency-unread verifies spec:validation.superseded-decision-signal.dependency-unread · anchored
  • test:protocol.superseded-decision-signal.end-and-loop-named verifies spec:validation.superseded-decision-signal.end-and-loop-named · anchored
  • test:protocol.superseded-decision-signal.live-replacement-warns verifies spec:validation.superseded-decision-signal.live-replacement-warns · anchored
  • test:protocol.superseded-decision-signal.replaced-ruling-warns verifies spec:validation.superseded-decision-signal.replaced-ruling-warns · anchored
  • test:protocol.superseded-decision-signal.replacement-below-ready-named verifies spec:validation.superseded-decision-signal.replacement-below-ready-named · anchored
  • test:protocol.superseded-decision-signal.superseded-subject-silent verifies spec:validation.superseded-decision-signal.superseded-subject-silent · 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

  • Planning truths live in ruled graph homes

    Each planning-truth type lives in its ruled home. Work-item dependency truth rides dependsOn edges, with independence as absence of the edge and scheduling phrases never authored. Decision gates live on decision-kind Specs, linked by decidedBy. Do-not-reopen rows split by what they carry: a tradeoff refusal becomes a decision-kind Spec, which a later decision that supersedes it replaces whole and a later decision that refines it narrows for one case, either under the ADR three-part test; a row that restates a behavior guarantee already homed on a carrying Spec stays on that Spec and changes by ordinary Spec revision; a hold stays a blocking open question on its own Spec and is never minted as a decision. A lawful non-decision stays in the plan record as evidence. A deferral carries its re-entry trigger in the trigger field of its own blocking open question, and declares dependsOn separately when a true precondition exists. Exclusive ownership is one Spec identity per deliverable with consumers depending on it. Selection-pressure heuristics are advisory only, carried as behavior rules on the graph-first planning Spec or in recipes. Session law splits separately, across behavior rules on the graph-first planning Spec, the delivery-session on-ramp's handoff rule, and the plan file. The briefs index shape is retired as a carrier of law.

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

    Uses

  • impl:protocol.superseded-decision-signal · walks decision replacements to surface stale shaping relations · src/validate/validators.ts:1817

    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.superseded-decision-signal
The diagram as text
  • spec:decisions.planning-truths-placement: Planning truths live in ruled graph homes
  • spec:extraction.entry-locations: The graph records where each addressable entry is written
  • spec:model.relations: Specs declare typed directed relations
  • spec:validation.superseded-decision-signal: A Spec shaped by a superseded decision warns
  • spec:validation.superseded-decision-signal.branch-names-every-end: A replacement chain that branches names every end
  • spec:validation.superseded-decision-signal.chain-end-named: The warning names the decision at the end of a chain of replacements
  • spec:validation.superseded-decision-signal.closed-chain-named: A chain of replacements that closes on itself is named and fails nothing
  • spec:validation.superseded-decision-signal.dependency-unread: A dependency on a replaced decision raises no warning
  • spec:validation.superseded-decision-signal.end-and-loop-named: A chain of replacements that reaches an end and a loop names both
  • spec:validation.superseded-decision-signal.live-replacement-warns: A decision still decided by the record it replaces warns
  • spec:validation.superseded-decision-signal.replaced-ruling-warns: A Spec shaped by a replaced decision warns once and fails nothing
  • spec:validation.superseded-decision-signal.replacement-below-ready-named: A replacement still below ready is named as it stands
  • spec:validation.superseded-decision-signal.superseded-subject-silent: A superseded decision is not warned for the decision it names
  • spec:validation.warn-level-signals: Missing connective evidence warns without failing
  • spec:validation.superseded-decision-signal decidedBy spec:decisions.planning-truths-placement · declared — supersedes replaces a decision whole and refines narrows it
  • spec:validation.superseded-decision-signal dependsOn spec:extraction.entry-locations · declared — the warning takes its line from the location row of the decidedBy target it names
  • spec:validation.superseded-decision-signal dependsOn spec:model.relations · declared — its supersedes term keeps a replaced record only while a reader still needs its text, so the edges the signal reads are records a corpus chose to keep
  • spec:validation.superseded-decision-signal refines spec:validation.warn-level-signals · declared
  • spec:validation.superseded-decision-signal.branch-names-every-end refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.chain-end-named refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.closed-chain-named refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.dependency-unread refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.end-and-loop-named refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.live-replacement-warns refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.replaced-ruling-warns refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.replacement-below-ready-named refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.superseded-subject-silent refines spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.branch-names-every-end verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.chain-end-named verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.closed-chain-named verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.dependency-unread verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.end-and-loop-named verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.live-replacement-warns verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.replaced-ruling-warns verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.replacement-below-ready-named verifies spec:validation.superseded-decision-signal · declared
  • spec:validation.superseded-decision-signal.superseded-subject-silent verifies spec:validation.superseded-decision-signal · 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

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingPlanning truths live in ruled graph homes
spec:decisions.planning-truths-placement · resolves
declaredsupersedes replaces a decision whole and refines narrows itNone
dependsOn · outgoingThe graph records where each addressable entry is written
spec:extraction.entry-locations · resolves
declaredthe warning takes its line from the location row of the decidedBy target it namesNone
dependsOn · outgoingSpecs declare typed directed relations
spec:model.relations · resolves
declaredits supersedes term keeps a replaced record only while a reader still needs its text, so the edges the signal reads are records a corpus chose to keepNone
refines · outgoingMissing connective evidence warns without failing
spec:validation.warn-level-signals · resolves
declaredNoneNone
refines · incomingA replacement chain that branches names every end
spec:validation.superseded-decision-signal.branch-names-every-end · resolves
declaredNoneNone
refines · incomingThe warning names the decision at the end of a chain of replacements
spec:validation.superseded-decision-signal.chain-end-named · resolves
declaredNoneNone
refines · incomingA chain of replacements that closes on itself is named and fails nothing
spec:validation.superseded-decision-signal.closed-chain-named · resolves
declaredNoneNone
refines · incomingA dependency on a replaced decision raises no warning
spec:validation.superseded-decision-signal.dependency-unread · resolves
declaredNoneNone
refines · incomingA chain of replacements that reaches an end and a loop names both
spec:validation.superseded-decision-signal.end-and-loop-named · resolves
declaredNoneNone
refines · incomingA decision still decided by the record it replaces warns
spec:validation.superseded-decision-signal.live-replacement-warns · resolves
declaredNoneNone
refines · incomingA Spec shaped by a replaced decision warns once and fails nothing
spec:validation.superseded-decision-signal.replaced-ruling-warns · resolves
declaredNoneNone
refines · incomingA replacement still below ready is named as it stands
spec:validation.superseded-decision-signal.replacement-below-ready-named · resolves
declaredNoneNone
refines · incomingA superseded decision is not warned for the decision it names
spec:validation.superseded-decision-signal.superseded-subject-silent · resolves
declaredNoneNone
verifies · incomingA replacement chain that branches names every end
spec:validation.superseded-decision-signal.branch-names-every-end · resolves
declaredNonechainEnd
verifies · incomingThe warning names the decision at the end of a chain of replacements
spec:validation.superseded-decision-signal.chain-end-named · resolves
declaredNonechainEnd
verifies · incomingA chain of replacements that closes on itself is named and fails nothing
spec:validation.superseded-decision-signal.closed-chain-named · resolves
declaredNoneclosedChain, informative
verifies · incomingA dependency on a replaced decision raises no warning
spec:validation.superseded-decision-signal.dependency-unread · resolves
declaredNonereadsDecidedBy
verifies · incomingA chain of replacements that reaches an end and a loop names both
spec:validation.superseded-decision-signal.end-and-loop-named · resolves
declaredNonechainEnd, closedChain
verifies · incomingA decision still decided by the record it replaces warns
spec:validation.superseded-decision-signal.live-replacement-warns · resolves
declaredNoneonePerPair, liveSubjectsOnly
verifies · incomingA Spec shaped by a replaced decision warns once and fails nothing
spec:validation.superseded-decision-signal.replaced-ruling-warns · resolves
declaredNonereadsDecidedBy, onePerPair, chainEnd, informative, noSupersedesWarning
verifies · incomingA replacement still below ready is named as it stands
spec:validation.superseded-decision-signal.replacement-below-ready-named · resolves
declaredNoneanyRung
verifies · incomingA superseded decision is not warned for the decision it names
spec:validation.superseded-decision-signal.superseded-subject-silent · resolves
declaredNoneliveSubjectsOnly, noSupersedesWarning

Bindings

Implementation binding: present

  • impl:protocol.superseded-decision-signal · walks decision replacements to surface stale shaping relations · src/validate/validators.ts:1817 · role validator · component component:protocol.validate · layer domain · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: present

  • oracle:protocol.superseded-decision-signal · test/self-hosting-validators.test.ts:1551

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.