actorA roadmap renders as the forward section of a pull request description
spec:consumers.roadmap.memoPacks: pack:roadmaps-and-slices-v1, pack:self-hosting-v1
Design: 11 design entries · no pinned declarations · no decisions
Findings: no errors, no warnings
specs/consumers/roadmap.memo.sdp.md
No open questions and no blocking questions; implementation binding present, verifier binding present, and expected-outcome oracle none.
A pull request description ends with a forward section: the next work in priority order, what waits on the owner, and what is deferred until its trigger. Written by hand, it drifts from the Specs it names and is rewritten each time. The roadmap memo renders it from the roadmap reading at the head of the branch, so the forward section a description carries is the roadmap the graph holds. The memo states what the graph holds and nothing more: it copies each entry's purpose from its own intent and derives its dependency reach, and the owner's reason for an entry's place, the re-entry condition of the next pull request and the durable refused list stay the description author's words around it.
Intent
- The author of a pull request description, and the owner reading it.
problem- A description's forward section is written by hand from plan files and recipe answers, so it drifts from the roadmap and the Specs it names.
outcome- Render a roadmap's entries, what waits on the owner and the deferred questions as Markdown a pull request description carries as its forward section, so the plan a description proposes is the roadmap the graph holds.
Behavior
rule.memoRecipeline 26 ·specs/consumers/roadmap.memo.sdp.md:26- Recipe 55 renders one roadmap's reading, recipe 53's answer for that Pack, as one Markdown memo a pull request description carries as its forward section; the roadmap page shows the same bytes.
no example exercises it
rule.sectionsline 27 ·specs/consumers/roadmap.memo.sdp.md:27- The memo holds, in order: the roadmap's title, a line saying what to state and built mean, and its framing; the entries to design, to state and to build, each need in priority order with every entry's place; what waits on the owner; the questions that name no decider; the entries built and still listed; the unresolved members with their original places and ids; and the deferred open questions with their triggers. The to design and to build sections always appear and say when they hold no entry; every other section is left out when it holds no row.
no example exercises it
rule.purposeAndReachline 28 ·specs/consumers/roadmap.memo.sdp.md:28- An entry's purpose and reach is read, never authored: its intent's problem, or its outcome when it states no problem, then how many Specs outside its scope wait on it and how many of its parts are ready to build now. These values state its purpose and its place in the graph's structure, never why the owner selected the entry or gave it its place; the description's author may state that reason around the memo, and the memo adds no status, date, estimate or assignment to a pull request.
no example exercises it
rule.holdsline 29 ·specs/consumers/roadmap.memo.sdp.md:29- An entry to design names the parts that set its need, its own first, each with its stated next rung and the clauses and dependency targets that hold it, then its blocking questions and its decisions below
ready; an entry to state names the waiting statements the statement queue puts before its own, inside the entry, elsewhere on the roadmap and outside it, as advice on the order of statements and never as a readiness requirement; an entry to build names each Spec it rests on that is not built.no example exercises it
rule.authorsOwnline 30 ·specs/consumers/roadmap.memo.sdp.md:30- The memo derives no reason for the priority and carries no re-entry condition or refused list; the description's author writes those around it.
no example exercises it
rule.readingOrderNotedline 31 ·specs/consumers/roadmap.memo.sdp.md:31- A memo of a Pack whose order is reading order says so under the framing, so no description presents it as a priority.
no example exercises it
rule.deterministicline 32 ·specs/consumers/roadmap.memo.sdp.md:32- One graph and one set of parameters render one memo, byte for byte.
no example exercises it
0 unkeyed rules.
Design
memoRecipeline 36 ·specs/consumers/roadmap.memo.sdp.md:36- recipe 55, the roadmap memo, takes
params.packandparams.decideras recipe 53 does; withoutpackit reads the one Pack whose manifest statesorder: priority, and with none or several it returns{ diagnostics: [{ parameter, problem }], memo: null }; otherwise it answers{ diagnostics: [], memo }, the memo one string. memoHeadline 37 ·specs/consumers/roadmap.memo.sdp.md:37- the memo opens with the line
## The next work, from the roadmap, a blank line, the lineRoadmap:followed by the Pack's title and its id as a code span, a blank line, the lineTo state means the floor allows ready and a person still judges the statement. Built means every Spec of the entry's work states ready and has an implementation binding; it reports no passing test and no deployment.and a blank line, each paragraph of the framing as authored followed by a blank line, and for a reading-order Pack the lineThis Pack's order is reading order, not a stated priority.and a blank line.Cited at
test/recipes.test.ts:8384
memoDesignline 38 ·specs/consumers/roadmap.memo.sdp.md:38- the section
### To designholds a table with the columnsPlace,Entry,NextandPurpose and reach;Nextreads, for at most three of the work rows with the entry's need, the entry's own first and the rest in Spec-id order, the row's id as a code span oritselffor the entry's own, its stated rung and stated next rung as code spans joined by→, thenheld byand each clause id followed by its targets as code spans in parentheses, ornothing holds it; thenand <n> more parts to designwhen rows are left out; thenblocked byand each blocking question's address as a code span, or its Spec id when unkeyed; thendecided byand each decision belowreadyas a code span with its stated rung; the parts joined by;.Cited at
test/recipes.test.ts:8385
memoStateline 39 ·specs/consumers/roadmap.memo.sdp.md:39- the section
### To stateholds a table with the columnsPlace,Entry,Earlier waiting statementsandPurpose and reach; the third column readsNo preceding waiting statement in the statement queue.when the entry'searlierStatementsis empty, and otherwisein this entryfollowed by those inside it as code spans,on the roadmapfollowed by those at another entry as code spans each with(place <n>), and<n> outside the roadmap, each part present only when it holds a row and the parts joined by;.Cited at
test/recipes.test.ts:8386
memoBuildline 40 ·specs/consumers/roadmap.memo.sdp.md:40- the section
### To buildholds a table with the columnsPlace,Entry,Purpose and reachandRests on;Rests onlists each Spec the entry rests on as a code span with its need, or readsnothing unbuilt.Cited at
test/recipes.test.ts:8387
memoEntryline 41 ·specs/consumers/roadmap.memo.sdp.md:41- an
Entrycell is the entry's title followed by its id as a code span; thePurpose and reachcell is the intent line, ending with a full stop when it ends with none, thenWaited on by <n>.when Specs wait on it and<n> of its parts ready to build now.for an entry not to build that has such parts. memoWaitingline 42 ·specs/consumers/roadmap.memo.sdp.md:42- the section
### Waiting on the <decider>lists one line per row of recipe 53'swaiting.questionsandwaiting.statements, questions first and statements in the order the answer gives: a question as its address as a code span, or its Spec id when unkeyed,(blocking)when it blocks,placeand the places, and its text; a statement asState, the Spec id as a code span, its stated rung and the rung its floor allows, and the places.Cited at
test/recipes.test.ts:8388
memoUndecidedline 43 ·specs/consumers/roadmap.memo.sdp.md:43- the section
### Questions without a decideropens with the lineThese questions have no named decider.and a blank line, then lists one line per row of recipe 53'swaiting.withoutDecider: its address as a code span, or its Spec id as a code span followed byquestionand its authored position from 1 when unkeyed, then(blocking)when it blocks,placeand the places; the text stays on the roadmap page, so a corpus with many such questions keeps a short memo. memoBuiltline 44 ·specs/consumers/roadmap.memo.sdp.md:44- the section
### Built and still on the roadmaplists each built entry as its place, its title and its id as a code span. The section### Unresolved membersfollows when recipe 53 reports unresolved members, listing each as- Place <place>: <id>, the id as a code span. memoDeferredline 45 ·specs/consumers/roadmap.memo.sdp.md:45- the section
### Deferred, with their triggerslists each open question recipe 20 marks as a deferral, in the register's order, as its address as a code span, or its Spec id when unkeyed, its text, andTrigger:with its trigger. memoMarkupline 46 ·specs/consumers/roadmap.memo.sdp.md:46- code spans follow the proposal memo's rule; outside code spans, authored
<,>and&are written as<,>and&, respectively; other authored text is written verbatim, with each line break written as a space and, inside a table cell, each|written\|; every line ends with a line feed and the memo with one.
Verification
Verifier bindings
- test:protocol.roadmap-memo-recipe · anchored · test anchor binding present ·
test/roadmap.test.ts:39External run evidence from
test/roadmap.test.tsTest 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
Name Suite Result Duration keeps manifest places and reports an unresolved middle member the roadmap recipes passed 38.1 ms escapes HTML outside code spans in memo titles and framing the roadmap recipes passed 5.44 ms reads the work's need: 'is ready and implemented throughout' the roadmap recipes passed 20.1 ms reads the work's need: 'has one part ready and not implemented' the roadmap recipes passed 9.72 ms reads the work's need: 'has one part below ready whose floor …' the roadmap recipes passed 7.15 ms reads the work's need: 'has one part below ready whose floor …' the roadmap recipes passed 14.65 ms reads the work's need: 'has one part implemented below ready' the roadmap recipes passed 13 ms reads the work's need: 'has a ready root and one descendant w…' the roadmap recipes passed 6.1 ms reads the work's need: 'has a ready root and one descendant h…' the roadmap recipes passed 9.38 ms reads the work's need: 'has one descendant that also refines …' the roadmap recipes passed 8.17 ms selects priority Packs in id order and reads an explicitly named ordinary Pack the roadmap recipes passed 17.93 ms names holding parts and a descendant's outside parent the roadmap recipes passed 24.05 ms renders each unbuilt dependency once when two relations reach it the roadmap recipes passed 9.95 ms lists sorted incoming relations, Pack memberships and dependency places the roadmap recipes passed 13.87 ms includes keyed and unkeyed blocking questions on shaping decisions the roadmap recipes passed 9.19 ms finds earlier statements through a shaping decision's own waiting statement the roadmap recipes passed 4.22 ms ends the intent line with a full stop: A purpose? the roadmap recipes passed 3.05 ms ends the intent line with a full stop: A purpose! the roadmap recipes passed 2.43 ms ends the intent line with a full stop: A purpose the roadmap recipes passed 2.45 ms ends the intent line with a full stop: A purpose. the roadmap recipes passed 2.65 ms keeps queue order across places, including earlier statements inside, elsewhere and outside the roadmap recipes passed 7.51 ms deduplicates shared descendants, preserves places, and lists decision entries apart the roadmap recipes passed 6.16 ms lists every unassigned question apart, including unkeyed and shared shaping decisions the roadmap recipes passed 7.14 ms pins memo bytes, intent fallback, line breaks and table escaping the roadmap recipes passed 8.9 ms pins every populated memo section byte for byte the roadmap recipes passed 23.61 ms pins empty design and build sections byte for byte the roadmap recipes passed 5.75 ms reads purpose from intent and counts distinct waiting Specs and buildable parts the roadmap recipes passed 22.83 ms - test:protocol.studio-roadmap-page · anchored · test anchor binding present ·
test/studio-roadmap.test.ts:24External run evidence from
test/studio-roadmap.test.tsTest anchors:
test:protocol.studio-roadmap-page. Specs verified by those bindings: spec:consumers.roadmap.memo, spec:consumers.spec-studio.navigation, spec:consumers.spec-studio.roadmap-page.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
Name Suite Result Duration shows unresolved members with their original manifest places Studio roadmap page passed 31.36 ms publishes the empty state and navigation even with no roadmap Studio roadmap page passed 16.43 ms renders the board, four need lists, numbered gaps, legend and entries listed apart Studio roadmap page passed 0.94 ms counts empty board columns and gives each empty need list its own sentence Studio roadmap page passed 25.86 ms shows holding parts and their next-rung clauses: has one part implemented below ready Studio roadmap page passed 26.69 ms shows holding parts and their next-rung clauses: has a ready root and one descendant held by a blocking question Studio roadmap page passed 16.98 ms shows holding parts and their next-rung clauses: has one descendant that also refines a Spec outside the roadmap Studio roadmap page passed 28.01 ms keeps waiting questions, provisional readings, unnamed deciders and statements in recipe order Studio roadmap page passed 3.58 ms leaves out Earlier statements when no waiting statement precedes the entry Studio roadmap page passed 24.36 ms uses the correct statement count and verb for 0 waiting statements Studio roadmap page passed 18.36 ms uses the correct statement count and verb for 1 waiting statements Studio roadmap page passed 22.88 ms uses the correct statement count and verb for 2 waiting statements Studio roadmap page passed 25.07 ms renders code spans and escapes authored titles consistently on the board and entry Studio roadmap page passed 19.89 ms shows decisions and their questions, dependency folds, incoming work and other Packs Studio roadmap page passed 62.18 ms labels an ordinary Pack answer as authored reading order Studio roadmap page passed 30.08 ms uses each roadmap's escaped page name for every local entry link and copies recipe 55's exact bytes Studio roadmap page passed 73.4 ms shows every row without script and supplies the existing filter with need tokens Studio roadmap page passed 1.22 ms keeps heading, memo and entry ids distinct when roadmap names contain their suffixes Studio roadmap page passed 38.68 ms stacks the board at phone width using the Studio breakpoint Studio roadmap page passed 0.38 ms
Design view
Requirement drawing
- Declared verifying examples: no declared verifying example.
The diagram as text
- spec:consumers.roadmap.memo: A roadmap renders as the forward section of a pull request description · declared Spec
- spec:consumers.roadmap: A roadmap orders the next bodies of work, and the graph says what each still needs · 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.studio-roadmap-page: renders roadmap needs, holding parts and the shared Markdown memo · anchored code ·
src/projections/studio/pages/roadmap-page.ts:168 - test:protocol.roadmap-memo-recipe: test:protocol.roadmap-memo-recipe · anchored test binding · binding present ·
test/roadmap.test.ts:39 - test:protocol.studio-roadmap-page: test:protocol.studio-roadmap-page · anchored test binding · binding present ·
test/studio-roadmap.test.ts:24 - spec:consumers.roadmap.memo refines spec:consumers.roadmap · declared
- impl:protocol.roadmap-memo-recipe satisfies spec:consumers.roadmap.memo · anchored
- impl:protocol.studio-roadmap-page satisfies spec:consumers.roadmap.memo · anchored
- test:protocol.roadmap-memo-recipe verifies spec:consumers.roadmap.memo · anchored
- test:protocol.studio-roadmap-page verifies spec:consumers.roadmap.memo · anchored
Mermaid source
Copyable source; the Studio draws static SVG.
Preferred and chosen syntax: requirementDiagram; exact refines, satisfies and verifies, with claim words in nodes and per-edge comments.
Decisions
No decision record named.
Runtime
component:protocol.projections· read-only output, layout and owned publication ·src/projections/design-review.ts:29· layer edge · context protocol Uses
component:protocol.extract· the carrier and source pipeline ·src/extract/index.ts:192· layer application · context protocol component:protocol.graph· the one graph and its semantic decisions ·src/graph/schema.ts:34· layer domain · context protocol component:protocol.model· the authored contracts and stable ids ·src/model/anchors.ts:100· layer domain · context protocol component:protocol.notation· the leaf step codec ·src/notation/slots.ts:261· layer domain · context protocol component:protocol.reader· the typed graph contract and body evaluator ·src/reader/reader.ts:671· layer application · context protocol component:protocol.validate· one finding currency and ordered checks ·src/validate/validators.ts:72· layer domain · context protocol
impl:protocol.roadmap-memo-recipe· realizes the roadmap memo in the shipped recipe catalog ·test/roadmap.test.ts:27Uses
None.
impl:protocol.studio-roadmap-page· renders roadmap needs, holding parts and the shared Markdown memo ·src/projections/studio/pages/roadmap-page.ts:168Component:
component:protocol.projections· read-only output, layout and owned publication ·src/projections/design-review.ts:29· layer edge · 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
The diagram as text
- spec:consumers.agent-surface.register-recipes: Register questions stay executable graph recipes
- spec:consumers.intent-composition.proposal.memo: Recipe 49 renders a change proposal as the Markdown memo a person reviews
- spec:consumers.roadmap: A roadmap orders the next bodies of work, and the graph says what each still needs
- spec:consumers.roadmap.memo: A roadmap renders as the forward section of a pull request description
- spec:consumers.spec-studio.roadmap-page: The roadmap page shows the upcoming work in priority order, split by what it needs
- 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:consumers.roadmap.memo dependsOn spec:consumers.agent-surface.register-recipes · declared — the deferred items come from the open-question register
- spec:consumers.roadmap.memo dependsOn spec:consumers.intent-composition.proposal.memo · declared — the memo writes its code spans by the proposal memo's markup rules
- spec:consumers.roadmap.memo refines spec:consumers.roadmap · declared
- spec:consumers.spec-studio.roadmap-page dependsOn spec:consumers.roadmap.memo · declared — the page carries the roadmap memo for a description's author to copy
- spec:protocol.roadmap-replaces-plans dependsOn spec:consumers.roadmap.memo · declared — each description's forward section is the roadmap memo
Mermaid source
Copyable source; the Studio draws static SVG.
Preferred syntax: flowchart. Chosen syntax: labelled flowchart, preserving exact relations, claims and folds.
Rests on
- refines · spec:consumers.roadmap · stated ready, floor ready
- dependsOn · spec:consumers.agent-surface.register-recipes · stated ready, floor ready
- dependsOn · spec:consumers.intent-composition.proposal.memo · stated ready, floor ready
Rested on by
Distance 1
- spec:consumers.spec-studio.roadmap-page
Implementing units
impl:protocol.studio-roadmap-page·src/projections/studio/pages/roadmap-page.ts:168
Referencing units
None.
Enabled verifiers: test:protocol.studio-roadmap-page
- spec:protocol.roadmap-replaces-plans
Implementing units
impl:protocol.roadmap-practice·test/check-self-hosting-gates.test.ts:52
Referencing units
None.
Enabled verifiers: test:protocol.roadmap-practice
Distance 2
- spec:protocol.delivery-record-cleanup
Implementing units
None.
Referencing units
None.
Enabled verifiers: None
Packs: pack:roadmap, pack:self-hosting-v1
Relations
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| dependsOn · outgoing | Register questions stay executable graph recipesspec:consumers.agent-surface.register-recipes · resolves | declared | the deferred items come from the open-question register | None |
| dependsOn · outgoing | Recipe 49 renders a change proposal as the Markdown memo a person reviewsspec:consumers.intent-composition.proposal.memo · resolves | declared | the memo writes its code spans by the proposal memo's markup rules | None |
| refines · outgoing | A roadmap orders the next bodies of work, and the graph says what each still needsspec:consumers.roadmap · resolves | declared | None | None |
| dependsOn · incoming | The roadmap page shows the upcoming work in priority order, split by what it needsspec:consumers.spec-studio.roadmap-page · resolves | declared | the page carries the roadmap memo for a description's author to copy | None |
| dependsOn · incoming | The Protocol reads its next work from its roadmap and keeps its delivery record in git and its pull requestsspec:protocol.roadmap-replaces-plans · resolves | declared | each description's forward section is the roadmap memo | None |
Bindings
Implementation binding: present
impl:protocol.roadmap-memo-recipe· realizes the roadmap memo in the shipped recipe catalog ·test/roadmap.test.ts:27· role projection impl:protocol.studio-roadmap-page· renders roadmap needs, holding parts and the shared Markdown memo ·src/projections/studio/pages/roadmap-page.ts:168· role projection · component component:protocol.projections· layer edge · context protocol
Design reference: none
Verifier binding: present
- test:protocol.roadmap-memo-recipe · anchored ·
test/roadmap.test.ts:39· test anchor - test:protocol.studio-roadmap-page · anchored ·
test/studio-roadmap.test.ts:24· test anchor
Expected-outcome oracle: none
Runtime observation: not tracked.
Run results: not recorded in the graph.
Findings
None.
Composing (0)
Composing needs the script.