Spec Studio

A roadmap orders the next bodies of work, and the graph says what each still needs

spec:consumers.roadmapUse Case / Behavior · featureready floor ready

Packs: pack:roadmaps-and-slices-v1, pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/consumers/roadmap.sdp.md

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

The Protocol's planning reads the graph: the build backlog lists ready work no code realizes, the design backlog lists defined work, and the statement queue orders what a person can state. None of them says which capability comes first. A roadmap is that one authored choice, the order of the next few bodies of work. Everything else about an entry, whether it still needs design, waits only for a person's statement, is ready to build, or is built, is read from the graph each time, so a roadmap never goes stale in what it says about state. It goes stale only in its order, which its owner edits.

An entry stands for its whole refinement subtree: an epic for its features and stories, a feature for its stories. The reading counts the subtree's work by what each part needs, so a large entry shows how much of it is designed and built, and the parts that could be built now.

Intent
actor
The owner choosing what the next pull requests take up, and an agent opening the next body of work.
problem
Priority lives in prose, in each pull request's forward section and in the plan files, which the graph cannot read and which go stale as work lands.
outcome
Read a roadmap as an ordered list of upcoming capabilities, each placed by the graph in what it needs next, to design, to state, to build or built, with the design it lacks and the work it rests on.
Behavior
rule.entries line 35 · specs/consumers/roadmap.sdp.md:35
A roadmap's entries are its Pack's members in authored order, each numbered by its place from 1; an entry may be an epic, a feature or a story, and its place states its owner's preference and nothing else.

no example exercises it

rule.scope line 36 · specs/consumers/roadmap.sdp.md:36
An entry's scope is the entry and every Spec that reaches it through one or more refines edges, each counted once whichever parent it reaches through; its work is the Specs of its scope whose kind is neither example nor decision, the build backlog's exclusions.

spec:consumers.roadmap.buildable-part · enabled, spec:consumers.roadmap.built-work · enabled, spec:consumers.roadmap.design-part · enabled, spec:consumers.roadmap.outside-parent · enabled, spec:consumers.roadmap.statement-part · enabled

rule.specNeed line 37 · specs/consumers/roadmap.sdp.md:37
Each Spec in a scope has a need read from the graph: to design when it states a rung below ready and its floor does not reach ready; to state when it states a rung below ready and its floor reaches ready, so only a person's statement stands before it; to build when it states ready, is neither an example nor a decision, and is not implemented; built when it states ready and is implemented; settled when it is an example or a decision that states ready.

spec:consumers.roadmap.buildable-part · enabled, spec:consumers.roadmap.built-work · enabled, spec:consumers.roadmap.design-part · enabled, spec:consumers.roadmap.statement-part · enabled

rule.drift line 38 · specs/consumers/roadmap.sdp.md:38
A Spec of an entry's work that is implemented while it states below ready keeps its need and counts as drift, as the drift alarm reads it.

spec:consumers.roadmap.drifting-part · enabled

rule.entryNeed line 39 · specs/consumers/roadmap.sdp.md:39
An entry needs the first of to design, to state and to build that any Spec of its work needs, and is built when every Spec of its work is built; an entry reads built only when every Spec of its work states ready and is implemented.

spec:consumers.roadmap.blocking-part · enabled, spec:consumers.roadmap.buildable-part · enabled, spec:consumers.roadmap.built-work · enabled, spec:consumers.roadmap.design-part · enabled, spec:consumers.roadmap.missing-evidence · enabled, spec:consumers.roadmap.statement-part · enabled

rule.apart line 40 · specs/consumers/roadmap.sdp.md:40
An entry that is itself an example or a decision, whose scope holds no work, takes no need: it is listed apart with its place and its own need, and it is read through the entries it verifies or shapes.

no example exercises it

rule.entryShows line 41 · specs/consumers/roadmap.sdp.md:41
Each entry shows its stated rung, the rung its floor reaches, its stated next rung with the floor clauses that hold it, its work counted by need with the parts to build now, every blocking open question in its scope, and every decision below ready that its scope holds or names by decidedBy, with that decision's blocking questions, keyed or not.

spec:consumers.roadmap.blocking-part · enabled, spec:consumers.roadmap.missing-evidence · enabled

rule.workRows line 42 · specs/consumers/roadmap.sdp.md:42
Each entry lists every Spec of its work once, with its need, its stated rung, the rung its floor reaches, its stated next rung with the floor clauses and the dependency targets that hold it, and whether it is drift; the parts with the entry's need are the ones that set it, so a descendant that holds an entry back is named with what holds it, and the entry's own readiness stays labelled apart.

spec:consumers.roadmap.blocking-part · enabled, spec:consumers.roadmap.buildable-part · enabled, spec:consumers.roadmap.built-work · enabled, spec:consumers.roadmap.design-part · enabled, spec:consumers.roadmap.drifting-part · enabled, spec:consumers.roadmap.missing-evidence · enabled, spec:consumers.roadmap.outside-parent · enabled, spec:consumers.roadmap.statement-part · enabled

rule.restsOn line 43 · specs/consumers/roadmap.sdp.md:43
An entry rests on each resolving Spec outside its scope that any Spec of its scope names by dependsOn, constrainedBy or refines, while that Spec is to design, to state or to build, so a descendant's second parent outside the entry counts as the entry's own parent does; shaping decisions stay in the decision rows. Each row names the relation, the Specs of the scope that name it, the Spec's need and stated rung, whether it holds a ready statement in the scope because it states below defined, and the place of the first entry whose scope holds it, or none when it lies outside the roadmap.

spec:consumers.roadmap.outside-parent · enabled

rule.restedOnBy line 44 · specs/consumers/roadmap.sdp.md:44
An entry is rested on by each Spec outside its scope, to design, to state or to build, that names a Spec of its scope by dependsOn, constrainedBy or decidedBy, so a reader sees what waits on it.

no example exercises it

rule.waiting line 45 · specs/consumers/roadmap.sdp.md:45
Apart from the entries, the reading lists what waits on the person the caller names, the owner by default: each open question whose decider names that person, on a Spec of any entry's scope or on a decision a scope names by decidedBy; and each such Spec or decision whose floor reaches a rung above the rung it states, a statement only a person makes, which for a decision is its ratification. Each row carries the places of the entries it touches. Questions follow their first place; statements keep their relative order in the statement queue across the whole roadmap, so a Spec others rest on comes first whatever its place, and their places never reorder them.

spec:consumers.roadmap.statement-order · enabled

rule.withoutDecider line 46 · specs/consumers/roadmap.sdp.md:46
The open questions over the same Specs that name no decider are listed apart and counted, blocking and not, so a question nobody is named to settle never reads as an empty workload; the reading never infers a decider from a question's prose.

no example exercises it

rule.earlier line 47 · specs/consumers/roadmap.sdp.md:47
Each entry lists the waiting statements the statement queue puts before its own: every Spec that the queue says one of the entry's waiting statements rests on, its work's and its shaping decisions' alike, each once, in the queue's order, marked as inside the entry, at the first place of another entry whose scope or shaping decisions it is among, or outside the roadmap. The list advises the order of statements and is never a readiness requirement.

spec:consumers.roadmap.statement-order · enabled

rule.builtStays line 48 · specs/consumers/roadmap.sdp.md:48
A built entry keeps its place and reads built until someone edits the roadmap; nothing removes it, and no check reports it.

no example exercises it

rule.overlap line 49 · specs/consumers/roadmap.sdp.md:49
Two entries may share Specs, as an epic and a feature beneath it do; each reads its own scope and names the places of the entries it shares a Spec with.

no example exercises it

rule.readingOrder line 50 · specs/consumers/roadmap.sdp.md:50
A Pack whose manifest does not state order: priority reads the same way when it is named, and the answer says its order is reading order, so no view presents it as a priority.

no example exercises it

rule.statesNothing line 51 · specs/consumers/roadmap.sdp.md:51
The reading states, records and gates nothing: it moves no rung, authors no fact and reports no finding, and work taken up out of its place is never a finding.

no example exercises it

0 unkeyed rules.

Verifying examples

A descendant question holds the entry for design · spec:consumers.roadmap.blocking-part · ready floor ready

Executable Spec

Given a probe roadmap whose entry holds the work {work: "spec:probe.root, spec:probe.part"}
Given that work {state: "has a ready root and one descendant held by a blocking question"}
When the roadmap recipe reads the probe roadmap
Then the entry names {part: "spec:probe.part"} among the parts with its need, held by {clause: "no-blocking-open-questions"}

Open example

A ready unbound part needs building · spec:consumers.roadmap.buildable-part · ready floor ready

Executable Spec

Given a probe roadmap whose entry holds the work {work: "spec:probe.root, spec:probe.part"}
Given that work {state: "has one part ready and not implemented"}
When the roadmap recipe reads the probe roadmap
Then the entry's need reads {need: "to build"}

Open example

Built work stays on the roadmap · spec:consumers.roadmap.built-work · ready floor ready

Executable Spec

Given a probe roadmap whose entry holds the work {work: "spec:probe.root, spec:probe.part"}
Given that work {state: "is ready and implemented throughout"}
When the roadmap recipe reads the probe roadmap
Then the entry's need reads {need: "built"}

Open example

An unfinished part needs design · spec:consumers.roadmap.design-part · ready floor ready

Executable Spec

Given a probe roadmap whose entry holds the work {work: "spec:probe.root, spec:probe.part"}
Given that work {state: "has one part below ready whose floor stops short"}
When the roadmap recipe reads the probe roadmap
Then the entry's need reads {need: "to design"}

Open example

A binding below ready remains drift · spec:consumers.roadmap.drifting-part · ready floor ready

Executable Spec

Given a probe roadmap whose entry holds the work {work: "spec:probe.root, spec:probe.part"}
Given that work {state: "has one part implemented below ready"}
When the roadmap recipe reads the probe roadmap
Then the entry counts {drift: 1} parts as drift

Open example

A descendant without evidence names its holding clause · spec:consumers.roadmap.missing-evidence · ready floor ready

Executable Spec

Given a probe roadmap whose entry holds the work {work: "spec:probe.root, spec:probe.part"}
Given that work {state: "has a ready root and one descendant without its kind's evidence"}
When the roadmap recipe reads the probe roadmap
Then the entry names {part: "spec:probe.part"} among the parts with its need, held by {clause: "kind-evidence-present"}

Open example

A descendant names its outside parent · spec:consumers.roadmap.outside-parent · ready floor ready

Executable Spec

Given a probe roadmap whose entry holds the work {work: "spec:probe.root, spec:probe.part"}
Given that work {state: "has one descendant that also refines a Spec outside the roadmap"}
When the roadmap recipe reads the probe roadmap
Then the entry rests on {target: "spec:probe.outside"} through {origin: "spec:probe.part"}

Open example

Waiting statements keep dependency order against roadmap places · spec:consumers.roadmap.statement-order · ready floor ready

Executable Spec

Given a probe roadmap whose entry holds the work {work: "spec:probe.dependent"}
Given that work {state: "has one part below ready whose floor reaches ready"}
Given a probe roadmap whose first entry rests on a Spec of its second entry, both waiting for a statement
When the roadmap recipe reads the probe roadmap
Then the waiting statements list {earlier: "spec:probe.base"} before {later: "spec:probe.dependent"}

Open example

A complete part waits for a statement · spec:consumers.roadmap.statement-part · ready floor ready

Executable Spec

Given a probe roadmap whose entry holds the work {work: "spec:probe.root, spec:probe.part"}
Given that work {state: "has one part below ready whose floor reaches ready"}
When the roadmap recipe reads the probe roadmap
Then the entry's need reads {need: "to state"}

Open example

Example space

Given a probe roadmap whose entry holds the work {work:string}
Given that work {state:"is ready and implemented throughout"|"has one part ready and not implemented"|"has one part below ready whose floor reaches ready"|"has one part below ready whose floor stops short"|"has one part implemented below ready"|"has a ready root and one descendant without its kind's evidence"|"has a ready root and one descendant held by a blocking question"|"has one descendant that also refines a Spec outside the roadmap"}
Given a probe roadmap whose first entry rests on a Spec of its second entry, both waiting for a statement
When the roadmap recipe reads the probe roadmap
Then the entry's need reads {need:"to design"|"to state"|"to build"|"built"}
Then the entry counts {drift:number} parts as drift
Then the entry names {part:string} among the parts with its need, held by {clause:string}
Then the entry rests on {target:string} through {origin:string}
Then the waiting statements list {earlier:string} before {later:string}
Design
roadmapRecipe line 55 · specs/consumers/roadmap.sdp.md:55
recipe 53, the roadmap, takes params.pack, one Pack id, and params.decider, a token on the decider field's grammar, "owner" by default; without pack it reads every Pack whose manifest states order: priority, in id order; a pack that names no Pack, or a decider off the grammar, returns { diagnostics: [{ parameter, problem }] } and no roadmaps.
roadmapAnswer line 56 · specs/consumers/roadmap.sdp.md:56
{ decider, roadmaps }, one roadmap per Pack read: { pack, title, framing, order, totals, entries, apart, unresolved, waiting }, where order is "priority" or "reading" and totals is { entries, toDesign, toState, toBuild, built, apart, unresolved, questions, blockingQuestions, withoutDecider, blockingWithoutDecider, statements }, the entries with each need and the rows waiting. entries in totals counts every manifest member, including unresolved ones, and totals.unresolved counts the unresolved members; unresolved lists { place, id } in manifest order for members that do not resolve, and every place is the original manifest position, never renumbered.

no citation recorded

needValues line 57 · specs/consumers/roadmap.sdp.md:57
an entry's need is "to design", "to state", "to build" or "built"; a Spec's need is one of those or "settled".
entryRow line 58 · specs/consumers/roadmap.sdp.md:58
{ place, id, title, specKind, altitude, need, statedReadiness, floorReached, statedNextRung, holdsNextRung, work, workRows, buildNow, blockingQuestions, decisions, restsOn, restedOnBy, earlierStatements, packs, sharesScopeWith } in place order, where statedNextRung is null at ready, holdsNextRung lists the holding rows that keep the floor from the stated next rung, work is { specs, toDesign, toState, toBuild, built, drift } counted over the entry's work, buildNow lists the ids of its work to build, packs lists the entry's Packs other than the roadmap, and sharesScopeWith lists places.

no citation recorded

workRow line 59 · specs/consumers/roadmap.sdp.md:59
workRows lists every Spec counted in work once, in Spec-id order, as { id, need, statedReadiness, floorReached, statedNextRung, holdsNextRung, drift }, with statedNextRung and holdsNextRung read as on the entry row and drift a boolean; the rows whose need equals the entry's are the ones that set it.

no citation recorded

holdsRow line 60 · specs/consumers/roadmap.sdp.md:60
a holding row is { clause, targets }, clause the id of a floor clause that fails at the stated next rung, in the floor evaluator's order, and targets the ids that the typed-dependency clause names, in its order, empty for any other clause.
questionRow line 61 · specs/consumers/roadmap.sdp.md:61
{ address, spec, index, question, blocking, decider, provisional } for each blocking question in the entry's scope, address null when the question carries no key, index its authored position from 0, and decider and provisional null when absent, sorted by Spec id and authored position.

no citation recorded

decisionRow line 62 · specs/consumers/roadmap.sdp.md:62
{ id, title, statedReadiness, blockingQuestions } for each decision below ready the entry's scope holds or names by decidedBy, sorted by id, blockingQuestions listing a question row for each of its blocking questions, keyed or not.

no citation recorded

restsOnRow line 63 · specs/consumers/roadmap.sdp.md:63
{ id, via, from, need, statedReadiness, holdsReady, onRoadmap }, where via is "dependsOn", "constrainedBy" or "refines", from lists in id order the Specs of the scope that name it by that relation, holdsReady is true when the Spec states below defined, and onRoadmap is the place of the first entry whose scope holds it or null; rows sort by id, then via.

no citation recorded

restedOnByRow line 64 · specs/consumers/roadmap.sdp.md:64
{ id, via, need, onRoadmap }, where via is the relation it names the scope by; rows sort by id, then via.

no citation recorded

earlierRow line 65 · specs/consumers/roadmap.sdp.md:65
earlierStatements lists { id, where, onRoadmap } in the statement queue's order, where where is "entry" for a Spec of the entry's scope or one of its shaping decisions, "roadmap" for a waiting statement another entry touches through its scope or its shaping decisions, and "outside" otherwise, and onRoadmap is the first place of the entries that statement touches, null unless where is "roadmap".

no citation recorded

apartRow line 66 · specs/consumers/roadmap.sdp.md:66
{ place, id, specKind, statedReadiness, need } in place order.

no citation recorded

waitingRows line 67 · specs/consumers/roadmap.sdp.md:67
waiting is { questions, withoutDecider, statements }: a question in either list is a question row with places; a statement is { id, statedReadiness, floorReached, places }. Questions sort by their first place, then blocking ones first, then by Spec id and authored position. Statements keep their relative order in the statement queue, recipe 46, across the whole roadmap; their places name the entries they touch and never reorder them.

no citation recorded

Verification

Verifier bindings

  • spec:consumers.roadmap.blocking-part · A descendant question holds the entry for design · declared · example enabled · specs/consumers/roadmap.blocking-part.sdp.md

    External run evidence from test/roadmap-examples.test.ts

    Test anchors: test:protocol.roadmap.blocking-part, test:protocol.roadmap.buildable-part, test:protocol.roadmap.built-work, test:protocol.roadmap.design-part, test:protocol.roadmap.drifting-part, test:protocol.roadmap.missing-evidence, test:protocol.roadmap.outside-parent, test:protocol.roadmap.statement-order, test:protocol.roadmap.statement-part. Specs verified by those bindings: spec:consumers.roadmap, spec:consumers.roadmap.blocking-part, spec:consumers.roadmap.buildable-part, spec:consumers.roadmap.built-work, spec:consumers.roadmap.design-part, spec:consumers.roadmap.drifting-part, spec:consumers.roadmap.missing-evidence, spec:consumers.roadmap.outside-parent, spec:consumers.roadmap.statement-order, spec:consumers.roadmap.statement-part.

    Run 1: external run evidence from vitest 4.1.10

    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

    NameSuiteResultDuration
    rejects a statement-order point with a different bound statenot recordedpassed2.38 ms
    checks the bound work against the observed scopenot recordedpassed35.82 ms
    executes the bound example against a fresh worldBuilt work stays on the roadmap (spec:consumers.roadmap.built-work)passed8.17 ms
    executes the bound example against a fresh worldA ready unbound part needs building (spec:consumers.roadmap.buildable-part)passed6.64 ms
    executes the bound example against a fresh worldA complete part waits for a statement (spec:consumers.roadmap.statement-part)passed6.31 ms
    executes the bound example against a fresh worldAn unfinished part needs design (spec:consumers.roadmap.design-part)passed9.78 ms
    executes the bound example against a fresh worldA binding below ready remains drift (spec:consumers.roadmap.drifting-part)passed13.87 ms
    executes the bound example against a fresh worldA descendant without evidence names its holding clause (spec:consumers.roadmap.missing-evidence)passed4.62 ms
    executes the bound example against a fresh worldA descendant question holds the entry for design (spec:consumers.roadmap.blocking-part)passed4.81 ms
    executes the bound example against a fresh worldA descendant names its outside parent (spec:consumers.roadmap.outside-parent)passed8.57 ms
    executes the bound example against a fresh worldWaiting statements keep dependency order against roadmap places (spec:consumers.roadmap.statement-order)passed4.83 ms
  • spec:consumers.roadmap.buildable-part · A ready unbound part needs building · declared · example enabled · specs/consumers/roadmap.buildable-part.sdp.md
  • spec:consumers.roadmap.built-work · Built work stays on the roadmap · declared · example enabled · specs/consumers/roadmap.built-work.sdp.md
  • spec:consumers.roadmap.design-part · An unfinished part needs design · declared · example enabled · specs/consumers/roadmap.design-part.sdp.md
  • spec:consumers.roadmap.drifting-part · A binding below ready remains drift · declared · example enabled · specs/consumers/roadmap.drifting-part.sdp.md
  • spec:consumers.roadmap.missing-evidence · A descendant without evidence names its holding clause · declared · example enabled · specs/consumers/roadmap.missing-evidence.sdp.md
  • spec:consumers.roadmap.outside-parent · A descendant names its outside parent · declared · example enabled · specs/consumers/roadmap.outside-parent.sdp.md
  • spec:consumers.roadmap.statement-order · Waiting statements keep dependency order against roadmap places · declared · example enabled · specs/consumers/roadmap.statement-order.sdp.md
  • spec:consumers.roadmap.statement-part · A complete part waits for a statement · declared · example enabled · specs/consumers/roadmap.statement-part.sdp.md
  • test:protocol.roadmap-recipe · anchored · test anchor binding present · test/roadmap.test.ts:34

    External run evidence from test/roadmap.test.ts

    Test anchors: test:protocol.roadmap-memo-recipe, test:protocol.roadmap-recipe. Specs verified by those bindings: spec:consumers.roadmap, spec:consumers.roadmap.memo.

    Run 1: external run evidence from vitest 4.1.10

    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

    NameSuiteResultDuration
    keeps manifest places and reports an unresolved middle memberthe roadmap recipespassed38.1 ms
    escapes HTML outside code spans in memo titles and framingthe roadmap recipespassed5.44 ms
    reads the work's need: 'is ready and implemented throughout'the roadmap recipespassed20.1 ms
    reads the work's need: 'has one part ready and not implemented'the roadmap recipespassed9.72 ms
    reads the work's need: 'has one part below ready whose floor …'the roadmap recipespassed7.15 ms
    reads the work's need: 'has one part below ready whose floor …'the roadmap recipespassed14.65 ms
    reads the work's need: 'has one part implemented below ready'the roadmap recipespassed13 ms
    reads the work's need: 'has a ready root and one descendant w…'the roadmap recipespassed6.1 ms
    reads the work's need: 'has a ready root and one descendant h…'the roadmap recipespassed9.38 ms
    reads the work's need: 'has one descendant that also refines …'the roadmap recipespassed8.17 ms
    selects priority Packs in id order and reads an explicitly named ordinary Packthe roadmap recipespassed17.93 ms
    names holding parts and a descendant's outside parentthe roadmap recipespassed24.05 ms
    renders each unbuilt dependency once when two relations reach itthe roadmap recipespassed9.95 ms
    lists sorted incoming relations, Pack memberships and dependency placesthe roadmap recipespassed13.87 ms
    includes keyed and unkeyed blocking questions on shaping decisionsthe roadmap recipespassed9.19 ms
    finds earlier statements through a shaping decision's own waiting statementthe roadmap recipespassed4.22 ms
    ends the intent line with a full stop: A purpose?the roadmap recipespassed3.05 ms
    ends the intent line with a full stop: A purpose!the roadmap recipespassed2.43 ms
    ends the intent line with a full stop: A purposethe roadmap recipespassed2.45 ms
    ends the intent line with a full stop: A purpose.the roadmap recipespassed2.65 ms
    keeps queue order across places, including earlier statements inside, elsewhere and outsidethe roadmap recipespassed7.51 ms
    deduplicates shared descendants, preserves places, and lists decision entries apartthe roadmap recipespassed6.16 ms
    lists every unassigned question apart, including unkeyed and shared shaping decisionsthe roadmap recipespassed7.14 ms
    pins memo bytes, intent fallback, line breaks and table escapingthe roadmap recipespassed8.9 ms
    pins every populated memo section byte for bytethe roadmap recipespassed23.61 ms
    pins empty design and build sections byte for bytethe roadmap recipespassed5.75 ms
    reads purpose from intent and counts distinct waiting Specs and buildable partsthe roadmap recipespassed22.83 ms

Example space

  • work · string · declared by a probe roadmap whose entry holds the work {work}
  • state · "is ready and implemented throughout" | "has one part ready and not implemented" | "has one part below ready whose floor reaches ready" | "has one part below ready whose floor stops short" | "has one part implemented below ready" | "has a ready root and one descendant without its kind's evidence" | "has a ready root and one descendant held by a blocking question" | "has one descendant that also refines a Spec outside the roadmap" · declared by that work {state}

Bound points

Exampleworkstate
spec:consumers.roadmap.blocking-part"spec:probe.root, spec:probe.part""has a ready root and one descendant held by a blocking question"
spec:consumers.roadmap.buildable-part"spec:probe.root, spec:probe.part""has one part ready and not implemented"
spec:consumers.roadmap.built-work"spec:probe.root, spec:probe.part""is ready and implemented throughout"
spec:consumers.roadmap.design-part"spec:probe.root, spec:probe.part""has one part below ready whose floor stops short"
spec:consumers.roadmap.drifting-part"spec:probe.root, spec:probe.part""has one part implemented below ready"
spec:consumers.roadmap.missing-evidence"spec:probe.root, spec:probe.part""has a ready root and one descendant without its kind's evidence"
spec:consumers.roadmap.outside-parent"spec:probe.root, spec:probe.part""has one descendant that also refines a Spec outside the roadmap"
spec:consumers.roadmap.statement-order"spec:probe.dependent""has one part below ready whose floor reaches ready"
spec:consumers.roadmap.statement-part"spec:probe.root, spec:probe.part""has one part below ready whose floor reaches ready"

Oracle binding: present · oracle:protocol.roadmap · test/roadmap-examples.test.ts:27

Coverage

work: "spec:probe.root, spec:probe.part" · spec:consumers.roadmap.blocking-part, spec:consumers.roadmap.buildable-part, spec:consumers.roadmap.built-work, spec:consumers.roadmap.design-part, spec:consumers.roadmap.drifting-part, spec:consumers.roadmap.missing-evidence, spec:consumers.roadmap.outside-parent, spec:consumers.roadmap.statement-part; "spec:probe.dependent" · spec:consumers.roadmap.statement-order · not enumerable

state
Declared valueExamples
"is ready and implemented throughout"spec:consumers.roadmap.built-work
"has one part ready and not implemented"spec:consumers.roadmap.buildable-part
"has one part below ready whose floor reaches ready"spec:consumers.roadmap.statement-order, spec:consumers.roadmap.statement-part
"has one part below ready whose floor stops short"spec:consumers.roadmap.design-part
"has one part implemented below ready"spec:consumers.roadmap.drifting-part
"has a ready root and one descendant without its kind's evidence"spec:consumers.roadmap.missing-evidence
"has a ready root and one descendant held by a blocking question"spec:consumers.roadmap.blocking-part
"has one descendant that also refines a Spec outside the roadmap"spec:consumers.roadmap.outside-parent

Unbound

  • work: None
  • state: None
Design view

Requirement drawing

Requirement drawing for spec:consumers.roadmap
The diagram as text
  • spec:consumers.roadmap: A roadmap orders the next bodies of work, and the graph says what each still needs · declared Spec
  • spec:consumers.roadmap.blocking-part: A descendant question holds the entry for design · declared Spec
  • spec:consumers.roadmap.buildable-part: A ready unbound part needs building · declared Spec
  • spec:consumers.roadmap.built-work: Built work stays on the roadmap · declared Spec
  • spec:consumers.roadmap.design-part: An unfinished part needs design · declared Spec
  • spec:consumers.roadmap.drifting-part: A binding below ready remains drift · declared Spec
  • spec:consumers.roadmap.memo: A roadmap renders as the forward section of a pull request description · declared Spec
  • spec:consumers.roadmap.missing-evidence: A descendant without evidence names its holding clause · declared Spec
  • spec:consumers.roadmap.outside-parent: A descendant names its outside parent · declared Spec
  • spec:consumers.roadmap.statement-order: Waiting statements keep dependency order against roadmap places · declared Spec
  • spec:consumers.roadmap.statement-part: A complete part waits for a statement · declared Spec
  • spec:consumers.spec-studio.roadmap-page: The roadmap page shows the upcoming work in priority order, split by what it needs · declared Spec
  • spec:consumers.graph-first-planning: The next body of work is planned from the graph, not from a prose index · declared Spec
  • spec:consumers.spec-studio: The Spec Studio is a static HTML workbench over the one graph · declared Spec
  • impl:protocol.roadmap-memo-recipe: realizes the roadmap memo in the shipped recipe catalog · anchored code · test/roadmap.test.ts:27
  • impl:protocol.roadmap-recipe: realizes the roadmap in the shipped recipe catalog · anchored code · test/roadmap.test.ts:20
  • impl:protocol.studio-roadmap-page: renders roadmap needs, holding parts and the shared Markdown memo · anchored code · src/projections/studio/pages/roadmap-page.ts:168
  • oracle:protocol.roadmap: oracle:protocol.roadmap · anchored oracle binding · test/roadmap-examples.test.ts:27
  • test:protocol.roadmap-memo-recipe: test:protocol.roadmap-memo-recipe · anchored test binding · binding present · test/roadmap.test.ts:39
  • test:protocol.roadmap-recipe: test:protocol.roadmap-recipe · anchored test binding · binding present · test/roadmap.test.ts:34
  • test:protocol.roadmap.blocking-part: test:protocol.roadmap.blocking-part · anchored test binding · binding present · test/roadmap-examples.test.ts:209
  • test:protocol.roadmap.buildable-part: test:protocol.roadmap.buildable-part · anchored test binding · binding present · test/roadmap-examples.test.ts:174
  • test:protocol.roadmap.built-work: test:protocol.roadmap.built-work · anchored test binding · binding present · test/roadmap-examples.test.ts:167
  • test:protocol.roadmap.design-part: test:protocol.roadmap.design-part · anchored test binding · binding present · test/roadmap-examples.test.ts:188
  • test:protocol.roadmap.drifting-part: test:protocol.roadmap.drifting-part · anchored test binding · binding present · test/roadmap-examples.test.ts:195
  • test:protocol.roadmap.missing-evidence: test:protocol.roadmap.missing-evidence · anchored test binding · binding present · test/roadmap-examples.test.ts:202
  • test:protocol.roadmap.outside-parent: test:protocol.roadmap.outside-parent · anchored test binding · binding present · test/roadmap-examples.test.ts:216
  • test:protocol.roadmap.statement-order: test:protocol.roadmap.statement-order · anchored test binding · binding present · test/roadmap-examples.test.ts:223
  • test:protocol.roadmap.statement-part: test:protocol.roadmap.statement-part · anchored test binding · binding present · test/roadmap-examples.test.ts:181
  • test:protocol.studio-roadmap-page: test:protocol.studio-roadmap-page · anchored test binding · binding present · test/studio-roadmap.test.ts:24
  • spec:consumers.roadmap refines spec:consumers.graph-first-planning · declared — a roadmap is advisory reading of the graph for choosing the next work
  • spec:consumers.roadmap.blocking-part refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.blocking-part verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.buildable-part refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.buildable-part verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.built-work refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.built-work verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.design-part refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.design-part verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.drifting-part refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.drifting-part verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.memo refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.missing-evidence refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.missing-evidence verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.outside-parent refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.outside-parent verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.statement-order refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.statement-order verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.statement-part refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.statement-part verifies spec:consumers.roadmap · declared
  • spec:consumers.spec-studio.roadmap-page refines spec:consumers.roadmap · declared — the page is the roadmap's reading for a person
  • spec:consumers.spec-studio.roadmap-page refines spec:consumers.spec-studio · declared
  • impl:protocol.roadmap-memo-recipe satisfies spec:consumers.roadmap.memo · anchored
  • impl:protocol.roadmap-recipe satisfies spec:consumers.roadmap · anchored
  • impl:protocol.studio-roadmap-page satisfies spec:consumers.spec-studio.roadmap-page · anchored
  • impl:protocol.studio-roadmap-page satisfies spec:consumers.roadmap.memo · anchored
  • oracle:protocol.roadmap models spec:consumers.roadmap · anchored
  • test:protocol.roadmap-memo-recipe verifies spec:consumers.roadmap.memo · anchored
  • test:protocol.roadmap-recipe verifies spec:consumers.roadmap · anchored
  • test:protocol.roadmap.blocking-part verifies spec:consumers.roadmap.blocking-part · anchored
  • test:protocol.roadmap.buildable-part verifies spec:consumers.roadmap.buildable-part · anchored
  • test:protocol.roadmap.built-work verifies spec:consumers.roadmap.built-work · anchored
  • test:protocol.roadmap.design-part verifies spec:consumers.roadmap.design-part · anchored
  • test:protocol.roadmap.drifting-part verifies spec:consumers.roadmap.drifting-part · anchored
  • test:protocol.roadmap.missing-evidence verifies spec:consumers.roadmap.missing-evidence · anchored
  • test:protocol.roadmap.outside-parent verifies spec:consumers.roadmap.outside-parent · anchored
  • test:protocol.roadmap.statement-order verifies spec:consumers.roadmap.statement-order · anchored
  • test:protocol.roadmap.statement-part verifies spec:consumers.roadmap.statement-part · anchored
  • test:protocol.studio-roadmap-page verifies spec:consumers.spec-studio.roadmap-page · anchored
  • test:protocol.studio-roadmap-page verifies spec:consumers.roadmap.memo · 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

  • A roadmap states advisory priority in the graph

    A roadmap is a Pack whose manifest states order: priority; its members' authored order is the corpus's advisory priority, first entry first. order is an optional manifest field whose one lawful value is priority, and a Pack without it keeps the reading order every Pack has. Priority is preference among bodies of work and nothing more: it carries no date, no dependency, no status and no gate, and no check, recipe or page treats a place on a roadmap as permission, obligation or sequence. Everything a roadmap shows about an entry, what it still needs and what holds it, is read from the graph each time. A corpus may keep several roadmaps, and a Spec may be listed on any number of them.

Runtime
  • impl:protocol.roadmap-recipe · realizes the roadmap in the shipped recipe catalog · test/roadmap.test.ts:20

    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:consumers.roadmap
  • E7: verifies · declared (9 unit edges)
The diagram as text
  • spec:consumers.graph-first-planning: The next body of work is planned from the graph, not from a prose index
  • spec:consumers.projections-model.roadmap-views: Roadmap views read releases, baselines and phases from git and the graph
  • spec:consumers.readiness-planner: The readiness planner orders the statements a person can make
  • spec:consumers.roadmap: A roadmap orders the next bodies of work, and the graph says what each still needs
  • spec:consumers.roadmap.blocking-part: A descendant question holds the entry for design
  • spec:consumers.roadmap.buildable-part: A ready unbound part needs building
  • spec:consumers.roadmap.built-work: Built work stays on the roadmap
  • spec:consumers.roadmap.design-part: An unfinished part needs design
  • spec:consumers.roadmap.drifting-part: A binding below ready remains drift
  • spec:consumers.roadmap.memo: A roadmap renders as the forward section of a pull request description
  • spec:consumers.roadmap.missing-evidence: A descendant without evidence names its holding clause
  • spec:consumers.roadmap.outside-parent: A descendant names its outside parent
  • spec:consumers.roadmap.statement-order: Waiting statements keep dependency order against roadmap places
  • spec:consumers.roadmap.statement-part: A complete part waits for a statement
  • spec:consumers.spec-studio.roadmap-page: The roadmap page shows the upcoming work in priority order, split by what it needs
  • spec:consumers.upgrade-kit: The upgrade kit shows a corpus what it could adopt
  • spec:decisions.roadmap-priority: A roadmap states advisory priority in the graph
  • spec:model.open-question-fields: An open question may name who decides it, its links, a provisional reading and a re-entry trigger
  • spec:protocol.roadmap-replaces-plans: The Protocol reads its next work from its roadmap and keeps its delivery record in git and its pull requests
  • spec:validation.next-rung-floor: The floor names what blocks the floor's next rung
  • spec:validation.typed-dependency-floor: A ready Spec rests only on settled dependencies
  • spec:consumers.roadmap decidedBy spec:decisions.roadmap-priority · declared
  • spec:consumers.roadmap dependsOn spec:consumers.readiness-planner · declared — the statements waiting on a person follow the statement queue's order
  • spec:consumers.roadmap dependsOn spec:model.open-question-fields · declared — the questions waiting on a person are selected by their decider field
  • spec:consumers.roadmap dependsOn spec:validation.next-rung-floor · declared — an entry's stated next rung and the clauses that hold it come from the one floor evaluator
  • spec:consumers.roadmap dependsOn spec:validation.typed-dependency-floor · declared — what an entry rests on is read through the relations the ready floor reads
  • spec:consumers.roadmap refines spec:consumers.graph-first-planning · declared — a roadmap is advisory reading of the graph for choosing the next work
  • spec:consumers.projections-model.roadmap-views dependsOn spec:consumers.roadmap · declared — the roadmap view the owner asked for is the roadmap reading, its page and its memo
  • spec:consumers.spec-studio.roadmap-page dependsOn spec:consumers.roadmap · declared — the page renders the roadmap reading
  • spec:consumers.upgrade-kit dependsOn spec:consumers.roadmap · declared — the guide teaches advisory priority and the roadmap memo as planning records
  • spec:protocol.roadmap-replaces-plans dependsOn spec:consumers.roadmap · declared — the Protocol reads its own next work from its roadmap
  • spec:consumers.roadmap.blocking-part refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.buildable-part refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.built-work refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.design-part refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.drifting-part refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.memo refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.missing-evidence refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.outside-parent refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.statement-order refines spec:consumers.roadmap · declared
  • spec:consumers.roadmap.statement-part refines spec:consumers.roadmap · declared
  • spec:consumers.spec-studio.roadmap-page refines spec:consumers.roadmap · declared — the page is the roadmap's reading for a person
  • spec:consumers.roadmap.blocking-part verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.buildable-part verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.built-work verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.design-part verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.drifting-part verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.missing-evidence verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.outside-parent verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.statement-order verifies spec:consumers.roadmap · declared
  • spec:consumers.roadmap.statement-part verifies spec:consumers.roadmap · 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

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingA roadmap states advisory priority in the graph
spec:decisions.roadmap-priority · resolves
declaredNoneNone
dependsOn · outgoingThe readiness planner orders the statements a person can make
spec:consumers.readiness-planner · resolves
declaredthe statements waiting on a person follow the statement queue's orderNone
dependsOn · outgoingAn open question may name who decides it, its links, a provisional reading and a re-entry trigger
spec:model.open-question-fields · resolves
declaredthe questions waiting on a person are selected by their decider fieldNone
dependsOn · outgoingThe floor names what blocks the floor's next rung
spec:validation.next-rung-floor · resolves
declaredan entry's stated next rung and the clauses that hold it come from the one floor evaluatorNone
dependsOn · outgoingA ready Spec rests only on settled dependencies
spec:validation.typed-dependency-floor · resolves
declaredwhat an entry rests on is read through the relations the ready floor readsNone
refines · outgoingThe next body of work is planned from the graph, not from a prose index
spec:consumers.graph-first-planning · resolves
declareda roadmap is advisory reading of the graph for choosing the next workNone
dependsOn · incomingRoadmap views read releases, baselines and phases from git and the graph
spec:consumers.projections-model.roadmap-views · resolves
declaredthe roadmap view the owner asked for is the roadmap reading, its page and its memoNone
dependsOn · incomingThe roadmap page shows the upcoming work in priority order, split by what it needs
spec:consumers.spec-studio.roadmap-page · resolves
declaredthe page renders the roadmap readingNone
dependsOn · incomingThe upgrade kit shows a corpus what it could adopt
spec:consumers.upgrade-kit · resolves
declaredthe guide teaches advisory priority and the roadmap memo as planning recordsNone
dependsOn · incomingThe Protocol reads its next work from its roadmap and keeps its delivery record in git and its pull requests
spec:protocol.roadmap-replaces-plans · resolves
declaredthe Protocol reads its own next work from its roadmapNone
refines · incomingA descendant question holds the entry for design
spec:consumers.roadmap.blocking-part · resolves
declaredNoneNone
refines · incomingA ready unbound part needs building
spec:consumers.roadmap.buildable-part · resolves
declaredNoneNone
refines · incomingBuilt work stays on the roadmap
spec:consumers.roadmap.built-work · resolves
declaredNoneNone
refines · incomingAn unfinished part needs design
spec:consumers.roadmap.design-part · resolves
declaredNoneNone
refines · incomingA binding below ready remains drift
spec:consumers.roadmap.drifting-part · resolves
declaredNoneNone
refines · incomingA roadmap renders as the forward section of a pull request description
spec:consumers.roadmap.memo · resolves
declaredNoneNone
refines · incomingA descendant without evidence names its holding clause
spec:consumers.roadmap.missing-evidence · resolves
declaredNoneNone
refines · incomingA descendant names its outside parent
spec:consumers.roadmap.outside-parent · resolves
declaredNoneNone
refines · incomingWaiting statements keep dependency order against roadmap places
spec:consumers.roadmap.statement-order · resolves
declaredNoneNone
refines · incomingA complete part waits for a statement
spec:consumers.roadmap.statement-part · resolves
declaredNoneNone
refines · incomingThe roadmap page shows the upcoming work in priority order, split by what it needs
spec:consumers.spec-studio.roadmap-page · resolves
declaredthe page is the roadmap's reading for a personNone
verifies · incomingA descendant question holds the entry for design
spec:consumers.roadmap.blocking-part · resolves
declaredNoneentryNeed, entryShows, workRows
verifies · incomingA ready unbound part needs building
spec:consumers.roadmap.buildable-part · resolves
declaredNonescope, specNeed, entryNeed, workRows
verifies · incomingBuilt work stays on the roadmap
spec:consumers.roadmap.built-work · resolves
declaredNonescope, specNeed, entryNeed, workRows
verifies · incomingAn unfinished part needs design
spec:consumers.roadmap.design-part · resolves
declaredNonescope, specNeed, entryNeed, workRows
verifies · incomingA binding below ready remains drift
spec:consumers.roadmap.drifting-part · resolves
declaredNonedrift, workRows
verifies · incomingA descendant without evidence names its holding clause
spec:consumers.roadmap.missing-evidence · resolves
declaredNoneentryNeed, entryShows, workRows
verifies · incomingA descendant names its outside parent
spec:consumers.roadmap.outside-parent · resolves
declaredNonescope, restsOn, workRows
verifies · incomingWaiting statements keep dependency order against roadmap places
spec:consumers.roadmap.statement-order · resolves
declaredNonewaiting, earlier
verifies · incomingA complete part waits for a statement
spec:consumers.roadmap.statement-part · resolves
declaredNonescope, specNeed, entryNeed, workRows

Bindings

Implementation binding: present

  • impl:protocol.roadmap-recipe · realizes the roadmap in the shipped recipe catalog · test/roadmap.test.ts:20 · role projection

Design reference: none

Verifier binding: present

Expected-outcome oracle: present

  • oracle:protocol.roadmap · test/roadmap-examples.test.ts:27

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.