altitude · changed
featureNow
epic
Compared with the base graph base da4b141, schema 0.11.0, 405 Specs; the built graph has schema 0.12.0, 456 Specs.
The comparison reads the two graphs only. Recipe 35 with detail enabled.
spec:consumers.capability-mapspec:consumers.design-slicespec:consumers.design-slice.chainspec:consumers.design-slice.component-absentspec:consumers.design-slice.component-differingspec:consumers.design-slice.component-matchingspec:consumers.design-slice.component-unreadablespec:consumers.design-slice.decision-backlinkspec:consumers.design-slice.dependency-cyclespec:consumers.design-slice.folded-examplespec:consumers.design-slice.independent-examplespec:consumers.design-slice.outside-componentsspec:consumers.design-slice.outside-holdingspec:consumers.design-slice.outside-satisfiedspec:consumers.design-slice.outside-unboundspec:consumers.roadmapspec:consumers.roadmap.blocking-partspec:consumers.roadmap.buildable-partspec:consumers.roadmap.built-workspec:consumers.roadmap.design-partspec:consumers.roadmap.drifting-partspec:consumers.roadmap.memospec:consumers.roadmap.missing-evidencespec:consumers.roadmap.outside-parentspec:consumers.roadmap.statement-orderspec:consumers.roadmap.statement-partspec:consumers.spec-studio.capability-map-pagespec:consumers.spec-studio.cited-line-textspec:consumers.spec-studio.diagram-kindsspec:consumers.spec-studio.diagram-kinds.capability-treespec:consumers.spec-studio.diagram-kinds.dependencyspec:consumers.spec-studio.diagram-kinds.edge-routingspec:consumers.spec-studio.diagram-kinds.legibilityspec:consumers.spec-studio.diagram-kinds.maturity-picturespec:consumers.spec-studio.diagram-kinds.mermaid-sourcespec:consumers.spec-studio.diagram-kinds.requirement-tracespec:consumers.spec-studio.diagram-kinds.scoped-architecturespec:consumers.spec-studio.lenses.architecture.unit-registerspec:consumers.spec-studio.register-inputspec:consumers.spec-studio.roadmap-pagespec:consumers.spec-studio.slice-pagespec:decisions.epics-of-any-kindspec:decisions.roadmap-over-plansspec:decisions.roadmap-priorityspec:extraction.executable-examplesspec:protocol.capability-epicsspec:protocol.delivery-record-cleanupspec:protocol.roadmap-replaces-plansspec:protocol.role-vocabularyspec:protocol.significant-units-reviewNone.
spec:carrier.markdown-authoring
altitude · changed
featureNow
epic
spec:carrier.markdown-pack-authoring
behavior.rules[1] · changed
The pack envelope is closed to exactly `id` (required, `pack:` namespace), `specs` (required YAML list of `spec:` ids, manifest order; may be empty), and `modelRefs` (optional YAML list of `spec:` ids). A derived-name key is refused as `extract/reserved-property`. Any other key — including the Spec envelope keys `kind`, `altitude`, `readiness` and `relations`, and `title` — refuses with `extract/unrecognized-property`. Symmetrically, `specs` or `modelRefs` on a `spec:` carrier refuse the same way.
Rule
NowThe pack envelope is closed to exactly `id` (required, `pack:` namespace), `specs` (required YAML list of `spec:` ids, manifest order; may be empty), `modelRefs` (optional YAML list of `spec:` ids), and `order` (optional; its one lawful value is `priority`, and any other value refuses with `extract/invalid-frontmatter`). A derived-name key is refused as `extract/reserved-property`. Any other key — including the Spec envelope keys `kind`, `altitude`, `readiness` and `relations`, and `title` — refuses with `extract/unrecognized-property`. Symmetrically, `specs` or `modelRefs` on a `spec:` carrier refuse the same way.
Rule
relation.decidedBy:spec:decisions.roadmap-priority · added
spec:carrier.markdown-pack-authoring
decidedBy
spec:decisions.roadmap-priority
declared
spec:consumers.agent-surface
altitude · changed
featureNow
epic
spec:consumers.agent-surface.answer-shapes
behavior.rules[0] · changed
Changed-file impact, Pack design and design diff, recipes 4, 29 and 35, accept `detail: true` and default to summaries preserving every total and explicitly naming omitted detail.
Rule
NowChanged-file impact, Pack design, design diff and the design slice, recipes 4, 29, 35 and 54, accept `detail: true` and default to summaries preserving every total and explicitly naming omitted detail.
Rule
design.detailParameter · changed
recipes 4, 29 and 35 read `params.detail`, absent or `false` for the summary and `true` for every row in full; recipe 29's `detail` may also be a list of member ids, which returns full rows for those members and summary rows for the rest of the Pack, and an id that is not a member is a diagnostic in the result. A summary keeps `totals` as the full answer counts them and adds `leftOut`, one line for each kind of detail it omits.Now
recipes 4, 29, 35 and 54 read `params.detail`, absent or `false` for the summary and `true` for every row in full; recipe 29's and recipe 54's `detail` may also be a list of member ids, which returns full rows for those members and summary rows for the rest of the Pack, and an id that is not a member is a diagnostic in the result. A summary keeps `totals` as the full answer counts them and adds `leftOut`, one line for each kind of detail it omits.
spec:consumers.authoring-on-ramp
altitude · changed
featureNow
epic
rule.designRounds · added
The skill teaches design in rounds over a design slice: what each rung's design typically settles, that a detail only the builder reads and a question only the builder answers belong to the build, and how a reviewer reads the design columns beside each rung; no check reads this guidance.
Rule
spec:consumers.delivery-session-on-ramp
behavior.rules[4] · changed
The skill teaches a review report as a numbered list ordered by severity, with each item naming one entry address or Spec section, stating the gap in one sentence, and proposing exact text with the address it replaces or follows.
Rule
NowThe skill teaches a Spec proposal report as a numbered list ordered by severity, with each item naming one entry address or Spec section, stating the gap in one sentence, and proposing exact text with the address it replaces or follows. Findings against code or other files stay review comments on their lines; a review proposing no Spec edit has no proposal.
Rule
spec:consumers.design-diff
behavior.rules[9] · changed
It reports changes to Pack membership and order, and to the code units, verifiers and delivery facts bound to each Spec, kept apart from the authored changes because they derive from anchors.
Rule
NowIt reports changes to Pack membership, member order and what a Pack's order means, and to the code units, verifiers and delivery facts bound to each Spec, kept apart from the authored changes because they derive from anchors.
Rule
design.packRows · changed
`packs` rows are `{ id, change, membersAdded, membersRemoved, reordered }` for each Pack added, removed or changed in membership or order.Now`packs` rows are `{ id, change, membersAdded, membersRemoved, reordered, orderChanged, orderBefore, orderAfter }` for each Pack added, removed or changed in membership, member order or order meaning; `orderBefore` and `orderAfter` are `"reading"` or `"priority"`, null on a side where the Pack is absent, and `orderChanged` is true when both sides hold the Pack and the two differ. An absent `order` reads as `"reading"` in every schema version; a value the head's engine does not know is outside the common schema, listed in `diagnostics` and not compared; that Pack's membership and member order still compare, its `orderChanged` is false, and the side holding the unknown value reads null. `membersAdded` and `membersRemoved` keep their respective manifest order.relation.decidedBy:spec:decisions.roadmap-priority · added
spec:consumers.design-diff
decidedBy
spec:decisions.roadmap-priority
declared
spec:consumers.engine-provenance
relation.refines:spec:consumers.command-line · added
spec:consumers.engine-provenance
refines
spec:consumers.command-line
declared
the version flag is one more answer the command line gives an adopter
spec:consumers.graph-first-planning
behavior.rules[6] · changed
A plan file points to the Pack and carrying Specs for intended truth and derived state; it may keep an advisory execution and recovery record, while plan numbering, recorded work order and staleness never become graph structure or workflow authority.
Rule
NowA corpus that keeps plan documents lets each point to its Packs and carrying Specs for intended truth and derived state; a plan document confers nothing, and plan numbering, recorded work order and staleness never become graph structure or workflow authority. Advisory priority over the next work lives in a roadmap Pack.
Rule
spec:consumers.obsidian-vault.notes
design.packNoteBody · changed
the banner, `# <title>`, the framing, `## Members, filterable` with the Pack's Base embedded, `## Members, in reading order` as a numbered list in manifest order, each a link with its stated rung, floor and stated next rung or `nothing blocks`, then `## Boundary` with the reader's four boundary lists and `## Findings`.Now
the banner, `# <title>`, the framing, `## Members, filterable` with the Pack's Base embedded, `## Members, in advisory priority order` when `order` is `"priority"`, otherwise `## Members, in reading order`, as a numbered list in manifest order, each a link with its stated rung, floor and stated next rung or `nothing blocks`, then `## Boundary` with the reader's four boundary lists and `## Findings`. A roadmap states `Priority confers no permission or sequencing requirement.` before its ordered list heading.
design.packProperties · changed
`aliases` (the id, then the title), `title`, `manifest` (the root-relative manifest path).Now
`aliases` (the id, then the title), `title`, `manifest` (the root-relative manifest path), and optional `order`, present as `"priority"` only when the Pack states it.
spec:consumers.projections-model
altitude · changed
featureNow
epic
relation.refines:spec:protocol.self-hosting · removed
spec:consumers.projections-model
refines
spec:protocol.self-hosting
declared
spec:consumers.projections-model.roadmap-views
narrative · changed
Release, baseline and roadmap vocabulary belongs to optional projections that wait until a reader needs them.Now
Release, baseline and roadmap vocabulary belongs to optional projections that wait until a reader needs them. The owner, choosing what the next pull requests take up, is the reader the roadmap view waited for, and the roadmap reading answers it: a Pack whose manifest states a priority order, read with what each entry still needs, shown on the Studio's roadmap page and rendered as a pull request's forward section. Release and baseline views still wait for a reader of their own.
question.namedRoadmapReader · removed
Does a reader need release, baseline or roadmap views that the shipped projections, the recipes and git do not serve?
true
namedRoadmapReader
owner
a named reader with that need, and a way to measure it inside the arc that builds the views
question.releaseReader · added
Does a reader need release or baseline views that the roadmap, the recipes and git tags do not serve?
true
releaseReader
owner
Keep release and baseline views deferred; the trigger opens this question and does not authorize either view's build.
the first published release
relation.dependsOn:spec:consumers.roadmap · added
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
statedReadiness · changed
ideaNow
scoped
term.phase / iteration / milestone · changed
Descriptive vocabulary for optional roadmap projections, never gates or enforced sequences.Now
Descriptive words a roadmap's framing may use, never an entry field, a date, a gate or an enforced sequence.
term.roadmap · added
A Pack whose manifest states a priority order, read with what each entry still needs next; its order is an advisory preference, never a schedule or a gate.
spec:consumers.review-perspectives
narrative · changed
The original design gave every reader one reading surface, each reading from their own concern: the analyst, the domain engineer, the architect, the tester, the designer and the agent (`docs/lineage/v0-design/04-authoring-surfaces.md` §6). The first adopter iterates each capability's design through advisor lenses, its runtime platform, the domain, operations and the product, each a written list of the questions its field asks, run over the same Pack by the same pass brief (`libar-platform/design/advisors/lenses/`, `libar-platform/design/advisors/task-pass.md`). It asks for a lens to be a filter over the same capability that reorders and emphasizes questions, entries, examples and constraints and opens the same Specs, with no new Spec kind and no compulsory sequence of stages (`libar-platform/docs/feedback/sdp-feedback-02.md`, item 28). The Protocol takes the member filter and the order and leaves each member's content whole; emphasis inside a member stays the reader's. The owner ruled the word: perspective. The Spec Studio keeps lens for its graph views, its Packs, architecture, tests and evidence views, and discipline stays the filter by kind or section. The adopter's advisor lens is a reader's concern, not a view of the graph, so in the Protocol's terms it is a perspective.Now
The original design gave every reader one reading surface, each reading from their own concern: the analyst, the domain engineer, the architect, the tester, the designer and the agent (`docs/lineage/v0-design/04-authoring-surfaces.md` §6). The first adopter iterates each capability's design through advisor lenses, its runtime platform, the domain, operations and the product, each a written list of the questions its field asks, run over the same Pack by the same pass brief (`libar-platform/design/advisors/lenses/`, `libar-platform/design/advisors/task-pass.md`). It asks for a lens to be a filter over the same capability that reorders and emphasizes questions, entries, examples and constraints and opens the same Specs, with no new Spec kind and no compulsory sequence of stages (`libar-platform/docs/feedback/sdp-feedback-02.md`, item 28). The Protocol takes the member filter and the order and leaves each member's content whole; emphasis inside a member stays the reader's. The owner ruled the word: perspective. The Spec Studio keeps lens for its graph views, its Packs, capabilities, architecture, tests and evidence views, and discipline stays the filter by kind or section. The adopter's advisor lens is a reader's concern, not a view of the graph, so in the Protocol's terms it is a perspective.
spec:consumers.spec-studio
rule.staticPageSet · changed
The Studio is a static page set: the index page, which is the Packs lens; a search page; a page for each other lens, each register, the owner queue and the glossary; one page per Pack and per Spec; one export file per Pack; and, when the build is given their inputs, a diff page and a runs page; with their local assets. Its build renders each page whole, so a page needs no server, and every page but the search page reads without its script, which adds filtering, search, copying, pan and zoom, and the composing panel.
Rule
NowThe Studio is a static page set: the index page, which is the Packs lens; a search page; a page for each other lens, each register, the owner queue, the roadmap and the glossary; one page and one slice page per Pack, one page per Spec; one export file per Pack; and, when the build is given their inputs, a diff page and a runs page; with their local assets. Its build renders each page whole, so a page needs no server, and every page but the search page reads without its script, which adds filtering, search, copying, pan and zoom, and the composing panel.
Rule
spec:consumers.spec-studio.components
design.maturityMap · changed
`sdp-maturity-map` with `pack-id`: the Pack's members placed by stated rung and floor reached, as a table of short cards with its axis explanation in the caption; an empty cell shows `—` alone and a filled cell names its count and Specs; no behavior.Now
`sdp-maturity-map` with `pack-id`: the Pack's members placed by stated rung and floor reached, drawn as a static SVG grid of counts, then its count table and each populated cell's member list; no behavior.
spec:consumers.spec-studio.data
rule.noSlices · changed
The Studio's data holds no context bundle or other AI slice: the context bundle is composed on each invocation and never saved, and a design pass composes one with its recipe when it needs it.
Rule
NowThe Studio's data holds no context bundle or other AI slice: the context bundle is composed on each invocation and never saved, and a design pass composes one with its recipe when it needs it. A slice page renders the design slice's answer into its markup, as every page renders its values, and embeds no slice data.
Rule
rule.readerValues · changed
The build renders the index from `specs()`, `packs()`, `findings()` and each Spec's design columns, a Pack page from `packContext` and the Pack totals, a Spec page from `specContext`, and the search page from the search index; every page's rail renders the rail values. A page states no value the reader did not return or a named recipe did not answer, apart from counts the build takes of those values.
Rule
NowThe build renders the index from `specs()`, `packs()`, `findings()`, each Spec's design columns and the epic memberships recipe 52 answers, a Pack page from `packContext` and the Pack totals, a Spec page from `specContext`, and the search page from the search index; every page's rail renders the rail values. A page states no value the reader did not return or a named recipe did not answer, apart from counts the build takes of those values.
Rule
spec:consumers.spec-studio.data.recipe-answers
design.pageRecipes · changed
the index and the glossary render reader values only; the architecture lens renders recipes 17 and 43; the tests lens renders every recipe 34 answer, recipe 44, and recipe 45 given run records; a Spec page renders its recipe 21, 30 and 34 answers, its own space from recipe 44, the recipe 51 rows that cite its entries, the recipe 45 files whose `specs` hold its id, and its own row of recipe 35's whole-corpus answer; a Pack page renders the totals of its recipe 29 answer and, given a base graph, its own recipe 35 answer; the registers render recipes 20, 31, 24 beside recipe 51's rows, and 33; the owner queue renders recipe 46; the diff page renders recipe 35's whole-corpus answer; the runs page renders recipe 45; an export renders the values of the pages it holds.Now
the index renders reader values and each Spec's `epicIds` from recipe 52; the glossary renders reader values only; the capabilities lens renders recipe 52; the architecture lens renders recipes 17 and 43; the tests lens renders every recipe 34 answer, recipe 44, and recipe 45 given run records; a Spec page renders its recipe 21, 30 and 34 answers, its own space from recipe 44, the recipe 51 rows that cite its entries, the recipe 45 files whose `specs` hold its id, and its own row of recipe 35's whole-corpus answer; a Pack page renders the totals of its recipe 29 answer and, given a base graph, its own recipe 35 answer; a slice page renders its Pack's recipe 54 answer; the roadmap page renders recipe 53 and each roadmap's recipe 55 memo; the registers render recipes 20, 31, 24 beside recipe 51's rows, and 33; the owner queue renders recipe 46; the diff page renders recipe 35's whole-corpus answer; the runs page renders recipe 45; an export renders the values of the pages it holds.
design.recipeEvaluations · changed
a build evaluates each of these once, with no parameter unless one is named: recipes 17, 20, 24, 31, 33, 43, 44, 46 and 51; recipe 29 with `{ pack: id }` for every Pack; recipe 21 with `{ spec: id }` and recipe 30 with `{ specs: [id] }` for every Spec; recipe 34 with `{ spec: id }` for every Spec that is not an example, Specs in no Pack included; given a base graph, recipe 35 with `{ base, detail: true }`, and with `{ base, pack: id, detail: true }` for every Pack; given run records, recipe 45 with `{ runs }`.Nowa build evaluates each of these once, with no parameter unless one is named: recipes 17, 20, 24, 31, 33, 43, 44, 46, 51 and 53; recipe 52 with `{ detail: true }`; recipe 29 with `{ pack: id }` and recipe 54 with `{ pack: id, detail: true }` for every Pack; recipe 55 with `{ pack: id }` for every Pack whose manifest states `order: priority`; recipe 21 with `{ spec: id }` and recipe 30 with `{ specs: [id] }` for every Spec; recipe 34 with `{ spec: id }` for every Spec that is not an example, Specs in no Pack included; given a base graph, recipe 35 with `{ base, detail: true }`, and with `{ base, pack: id, detail: true }` for every Pack; given run records, recipe 45 with `{ runs }`.narrative · changed
The lenses, the registers, the owner queue, the diff and runs pages and the panels of a Spec page show recipe answers. Each takes its answer from the recipe's shipped body, evaluated over the graph the build derived, so a page and `sdp q` give one answer. The two Design entries name every evaluation a build runs and which page reads each answer, so a builder and a test author read one list.Now
The lenses, the registers, the owner queue, the slice and roadmap pages, the diff and runs pages and the panels of a Spec page show recipe answers. Each takes its answer from the recipe's shipped body, evaluated over the graph the build derived, so a page and `sdp q` give one answer. The two Design entries name every evaluation a build runs and which page reads each answer, so a builder and a test author read one list.
spec:consumers.spec-studio.diagrams
design.boxTargets · moved
a component's box links to its detail on the architecture lens, a planned component's to its component design's Spec page, a context's or layer's folded box to its section on the same page, a Spec's to its page, and a folded relation group's to the Spec page's relations.
design.cellWrap · changed
a grid cell or a band places at most `6` boxes on one line and wraps onto the next.Now
Wrap a cell's boxes within the fixed logical width budget instead of a fixed box count; retain context columns with local scrolling when they exceed it. Layout reads no browser or font measurement.
design.density · added
For requirement, trace, capability and dependency drawings, trigger the existing folds before the hard bound when deterministic layout height exceeds `2000` logical pixels. Measure height from the box and lane layout before routing, using the same label metrics and width budget as the drawing. A fold triggered by these limits must strictly lower that height and hold at least two boxes, keeping the same scope, claims and complete text equivalent. If no lawful fold fits the height budget, omit the SVG and open the text equivalent.
design.diagramElement · changed
`sdp-diagram` with `subject`, the Spec, Pack, component or context id the diagram is rooted at, or `architecture`, wrapping one `figure` that holds the caption, a legend `Arrows: <relation>.` when all edges share one relation, followed by `Dashed arrows: plans to use.` when that use relation includes planned uses, the SVG and its text equivalent; on upgrade it adds `Zoom in`, `Zoom out` and `Reset` buttons and handles drag, a wheel turned with Control or Command held, and a two-finger pinch.Now
`sdp-diagram` with `subject`, the rooted Spec, Pack, component or context id, or `architecture`, wraps one figure containing its caption and legend, any build-written scroll instruction, a keyboard-focusable named `.diagram-scroll` region containing the SVG, its text equivalent and, when offered, its closed Mermaid-source disclosure with labelled read-only textarea and `sdp-copy`. Caption, legend and source stay outside the scroll region. On upgrade it adds Zoom in, Zoom out and Reset buttons and handles drag, a wheel with Control or Command held, and pinch; it adds no layout or copy behavior.
design.edgeKinds · moved
`uses` for a realized use, drawn solid; `plans to use` for a use a component design states, drawn dashed; on a trace graph the relation's type; an arrow points from the unit or Spec that uses or declares to the one it names.
design.edgeRouting · added
Reserve boxes and labels as obstacles, route orthogonally with distinct ports and lanes eight pixels apart, and never share a collinear segment or overlap labels. Crossings are permitted only at free points. Keep exact relations and claims through the words-beside-style rule. A deterministic finite routing failure omits the SVG, opens its text equivalent and explains the failure; the build owns search mechanics.
design.elementIds · moved
a diagram's text equivalent has the id `diagram.<subject>.text` and its arrow has the id `diagram.<subject>.arrow`. A page that draws a second view of one subject inserts that view's name before `text` or `arrow`, so the Spec page's realization drawing uses `diagram.<subject>.realization.text` and `diagram.<subject>.realization.arrow`; its trace graph keeps the unqualified ids. Every id is unique on its page.
design.labelMetrics · changed
a label line holds at most `30` characters, an id longer than that wraps after a dot or a colon and then after a hyphen, a character advances `7.5` pixels at the 12 pixel monospace label size, and a box is as wide as its longest line plus padding.Now
A title or recorded label leads at fourteen pixels, followed by the displayed id at twelve pixels and remaining words such as a component's member count. Title lines hold at most `28` characters and id lines `30`, with an eight-pixel character advance. Wrap at spaces or id punctuation, then by code point, and calculate box height from every line.
design.omittedDrawing · changed
a drawing over the bound keeps its `figure` and caption, holds the sentence `Shown as text: this drawing exceeds the bound of <b> boxes and <e> edges.`, with the bound's two numbers, where the SVG would be, and writes its text equivalent open.Now
A drawing over the bound keeps its figure and caption, writes `Shown as text: this drawing exceeds the bound of <b> boxes and <e> edges.`, and opens its text equivalent. A routing failure instead writes `Shown as text: a distinct route or label could not be placed within the routing budget.` and opens the same complete box-and-edge reading. A drawing still above the height budget after lawful folds instead writes `Shown as text: this drawing exceeds the height budget of <h> pixels after folding.` and opens its text equivalent. No omission offers partial Mermaid source.
design.shortId · added
Drop the namespace and leading dotted segments every id in the figure shares, marking elision with `…`; keep more segments on collisions. A displayed id carries a namespace only when shown in full. Full ids remain in link titles, the text equivalent and source.
design.svgMarkup · changed
the `svg` carries `role="img"`, a `title`, `aria-describedby` naming its text equivalent and a `viewBox` of its own size; a box is a `g` with class `node` and `data-id`, plus `data-planned="true"` or `data-folded="true"` when it is planned or folded, holding a link to the box's target; an edge is a `g` with class `edge`, `data-from`, `data-to` and `data-kind`; a band is a `g` with class `band` and `data-label`, a column a `g` with class `lane` and `data-label`, each also drawing its label as text.Now
the `svg` carries `role="img"`, a `title`, `aria-describedby` naming its text equivalent and a `viewBox` of its own size; a box is a `g` with class `node` and `data-id`, plus `data-planned="true"` or `data-folded="true"` when it is planned or folded, holding a link to the box's target; an edge is a `g` with class `edge`, `data-from`, `data-to` and `data-kind`; a band is a `g` with class `band` and `data-label`, a column a `g` with class `lane` and `data-label`, each also drawing its label as text. An edge also carries `data-claim` and a stable `data-edge-key` when its label uses a legend key; route and label coordinates are presentation values and mint no graph edge.
design.textEquivalent · changed
a `details` element closed by default, summary `The diagram as text`, holding one `li` per box, `<id>: <words>`, and then one `li` per edge, `<from> <kind> <to>`, followed by `(<n> unit edges)` when the edge aggregates more than one.Now
a `details` element closed by default, summary `The diagram as text`, holding one `li` per box, `<id>: <words>`, followed by `· folded members: <ids>` when folded identities are present, and then one `li` per edge, `<from> <kind> <to>`, followed by `· <claim>` when present, `(<n> unit edges)` when the edge aggregates more than one, and `— <reason>` when present.
design.widthBudget · added
`880` logical pixels for a band or grid, band labels included above their band; `264` per context cell when several contexts share a grid, the full band budget when only one context is shown, and `24` between boxes. Routing gutters may widen the SVG to preserve distinct lanes. A drawing wider than `880` scrolls inside its figure and receives the build-written instruction `Scroll horizontally to read the whole drawing.`
narrative · changed
The Studio draws four diagrams: the architecture lens's components by context and layer, one component's members and what they use, one Spec's relations, and on a Spec page the code that realizes it. Each is laid out in the engine when the page set is built, so a page draws it with no script and the same graph draws the same bytes. Words carry every reading the drawing shows: bands and columns are labelled, a planned or folded box says so, and a text equivalent after the drawing states every box and edge.Now
Every Studio diagram is laid out in the engine when the page set is built, so a page draws it with no script and the same inputs draw the same bytes. The architecture grid, component members and one-hop trace retain their readings; the Spec page's requirement drawing replaces realization, and other pages name their supplied drawing answers. Words carry every reading the picture shows, and its text equivalent states every box and edge.
rule.layoutInputs · changed
A layout reads only the diagram's boxes, each with its id and its words, and its edges, each with its two ends and its kind, taken from the reader values and recipe answers its page names; it reads no font, file, clock or random value, measures text by character count, and writes whole-pixel coordinates.
Rule
NowA layout reads only the boxes, each with its id, words and supplied grouping, and edges, each with its two ends, exact kind and claim, optional reason and aggregation count, taken from the reader values and recipe answers its page names; it reads no font, file, clock or random value, measures text by character count and writes whole-pixel coordinates. Depth, reach and component resolution belong to those answers, never layout.
Rule
rule.noFoldBelowComponent · changed
A member or realization diagram over the bound writes no SVG; its text equivalent lists every member or unit and every use or realization edge, and then says the drawing was omitted because it exceeds the bound.
Rule
NowA member diagram over the bound writes no SVG; its text equivalent lists every member and every use edge, and then says the drawing was omitted because it exceeds the bound.
Rule
rule.panZoomOnly · changed
The diagram element adds only pan, zoom and pinch, by rewriting the SVG's view box; it never moves a box or an edge. With or without script the SVG is never wider than its container or larger than its own size on first view at every viewport width; pan and zoom enlarge it for reading.
Rule
NowThe diagram element adds only pan, zoom and pinch by changing the SVG's view box; it never moves a box or edge. At viewport widths of at least 720 CSS pixels the SVG starts at natural size inside a keyboard-accessible scroll region, with overflow inside the figure. Below that width the responsive contract fits the same drawing to the screen. Reset restores the initial view and scroll position. Without script the drawing, scrolling, links and text equivalent remain usable. Print fits the drawing to paper and exposes its text equivalent.
Rule
rule.realizationBands · removed
A realization diagram draws the units that satisfy the Spec, then their components, then what those units use, in three bands.
Rule
spec:consumers.spec-studio.diff-page
rule.diffSections · changed
The page renders recipe 35's answer with `detail: true` over the whole corpus, in sections in this order: the totals as sentences; the Specs added, linked; the Specs removed, as their ids in text, since no page holds them; the Specs changed, each linked, with each changed part, its change in words, and for a changed value the base value and the built value as readable text blocks or lists, one above the other, never a raw JSON array; keyed changes list in the head's rule and flow order, each as one line with the entry's text rendered as on its Spec page beside its old and new address or `none`; the Packs whose membership or order changed; the bindings changed, kept apart and headed as derived from anchors; and the diagnostics.
Rule
NowThe page renders recipe 35's answer with `detail: true` over the whole corpus, in sections in this order: the totals as sentences; the Specs added, linked; the Specs removed, as their ids in text, since no page holds them; the Specs changed, each linked, with each changed part, its change in words, and for a changed value the base value and the built value as readable text blocks or lists, one above the other, never a raw JSON array; keyed changes list in the head's rule and flow order, each as one line with the entry's text rendered as on its Spec page beside its old and new address or `none`; the Packs whose membership, order or order meaning changed, an added Pack whose order is priority read as `added as a roadmap`, its added members in manifest order, a removed Pack whose order was priority read as `removed as a roadmap`, and a known change to priority read as `now a roadmap` or from priority as `no longer a roadmap`, stating the before and after order values for other changes of meaning; the bindings changed, kept apart and headed as derived from anchors; and the diagnostics.
Rule
rule.packChangeNotes · changed
Given a base graph, each Pack page adds a `Changed since the base` section after its maturity map, from recipe 35's answer for that Pack, listing its changed and added members, linked, and its own membership change; a member whose only changes are keying is marked `keyed only`.
Rule
NowGiven a base graph, each Pack page adds a `Changed since the base` section after its maturity map, from recipe 35's answer for that Pack, listing its changed and added members, linked, and its own membership change, with the same roadmap and order-meaning wording as the diff page; a member whose only changes are keying is marked `keyed only`.
Rule
spec:consumers.spec-studio.export
design.expanderPrint · changed
`sdp-expander`, before the page prints, opens every `details` inside it, and after printing restores each one's state.Now
`sdp-expander`, before the page prints, opens every `details` inside it except a drawing's or the maturity map's Mermaid source, which keeps the state the reader left, and after printing restores each one's state.
rule.printAsDocument · changed
Every page prints as a document: the print style hides the navigation, the rail, the search field, the composing panel and every control, gives the canvas the page's width, prints a diagram whole at that width, and prints every disclosure open, the expander opening each before printing and restoring it after.
Rule
NowEvery page prints as a document: the print style hides the navigation, the rail, the search field, the composing panel and every control, gives the canvas the page's width, prints a diagram whole at that width, and prints every disclosure open except Mermaid source, which prints only when the reader opened it, the expander opening each before printing and restoring it after.
Rule
spec:consumers.spec-studio.index-page
rule.filters · changed
Filters narrow the Specs section by kind, altitude, stated rung, floor reached, implementation binding, verifier binding and Pack; each filter takes one value or any, the filters combine, and the section says how many of its rows it shows. Without script every row shows.
Rule
NowFilters narrow the Specs section by kind, altitude, stated rung, floor reached, implementation binding, verifier binding, Pack and epic; each filter takes one value or any, the epic filter also takes no epic, the filters combine, and the section says how many of its rows it shows. Without script every row shows.
Rule
spec:consumers.spec-studio.lenses
intent · changed
Let a person see the graph four ways, by Pack, by architecture, by verification and by evidence, from one top navigation.
Let a person see the graph five ways, by Pack, by capability, by architecture, by verification and by evidence, from one top navigation.
narrative · changed
Each lens is a page with a Spec of its own, so each builds on the graph it reads today: the Packs, architecture and tests lenses read what the graph records, and the evidence lens reads not tracked until the graph records an observation. This Spec keeps what the four share.Now
Each lens is a page with a Spec of its own, so each builds on the graph it reads today: the Packs, capabilities, architecture and tests lenses read what the graph records, and the evidence lens reads not tracked until the graph records an observation. This Spec keeps what the five share.
rule.order · changed
The lenses are pages of the page set, reached from the top navigation in the order Packs, architecture, tests, evidence; the index page is the Packs lens and the default landing page.
Rule
NowThe lenses are pages of the page set, reached from the top navigation in the order Packs, capabilities, architecture, tests, evidence; the index page is the Packs lens and the default landing page.
Rule
title · changed
Four lenses read the graph as Packs, architecture, tests and evidenceNow
Five lenses read the graph as Packs, capabilities, architecture, tests and evidence
ui.lensPages · changed
`index.html` for the Packs lens, `architecture.html`, `tests.html` and `evidence.html`, each opening with its name and one sentence saying what it reads.Now
`index.html` for the Packs lens, `capabilities.html` for the capabilities lens, `architecture.html`, `tests.html` and `evidence.html`, each opening with its name and one sentence saying what it reads.
spec:consumers.spec-studio.lenses.architecture
rule.usesTable · added
Beside the architecture drawing comes the component uses table, read from recipe 17's component rows and their counts of unit `uses` edges: one row per realized component as the user and one column per realized component as the used. A nonzero cell holds the count of anchored unit `uses` edges behind the pair and links to that use in the row component's detail; a zero cell between two components shows `·`, with `no anchored use recorded` as hidden text and the legend `· means no anchored use recorded`, and the cell where a component meets itself stays empty. Planned uses, unresolved endpoints and uses within one component stay in their own readings and never enter the table. The table is not a drawing, and it reads in full without script and in print.
Rule
ui.architecturePage · changed
in order, the page title `Architecture`, the summary sentences, the architecture diagram or its fold with one section per context, the `Designed, not built` section, the component details in id order, and the `Unresolved structure` section when it has rows.Now
in order, the page title `Architecture`, the summary sentences, the architecture diagram or its fold with one section per context, the component uses table, the `Designed, not built` section, the component details in id order, and the `Unresolved structure` section when it has rows.
ui.componentDetail · changed
a heading with the component's id as code and its label, a line with its layer, context and role in words, its file and line with a copy action, then lists headed Members, Uses, Used by, Satisfies and References, an empty list reading None, then the member diagram.Now
a heading with the component's id as code and its label, a line with its layer, context and role in words, its source binding apart from its members, then Members grouped by recorded role, Uses with supporting unit edges at the table's fragment targets, Used by, any design differences, Satisfies and References, an empty list reading None, then the member diagram.
ui.designedNotBuilt · moved
a table with one row per unrealized design in Spec id order: the component design's Spec, linked; the planned component's id as code; its planned context, layer and role, or `not stated`; the components it plans to use; and whether its component anchor exists without satisfying it; a design whose value recipe 43 cannot read adds a row naming the design, the key and the unreadable value.
ui.usesTable · added
a table captioned `Which components use which` in a named, keyboard-focusable scroll region, one row header and one column header per realized component, both in one order: by layer from `edge` to `infrastructure`, unlayered components last, then by id; each header names the component's label with its id as code.
spec:consumers.spec-studio.lenses.packs
narrative · changed
A capability is read as a Pack, or as a projection over high-altitude behavior Specs that no view draws yet, so the lens groups by Pack and draws no capability tree. The index page holds it, because the Packs are where a reader of a design starts.Now
Packs collect Specs for review, while the separate Capabilities page reads authored refinement. The index remains the landing page and keeps each Pack's members in authored order.
rule.packGrouping · changed
The Packs lens groups Specs by Pack, each Pack's members in authored order, and draws no capability tree.
Rule
NowThe Packs lens groups Specs by Pack, each Pack's members in authored order. The separate Capabilities page reads refinement; selecting an epic narrows the index's Specs section without changing any Pack.
Rule
spec:consumers.spec-studio.pack-page
rule.header · changed
The page opens with the Pack's title, its id and its carrier file as text with a copy action, then the summary; the framing follows as prose under the heading Framing, with the vocabulary references, linked.
Rule
NowThe page opens with the Pack's title, its id and its carrier file as text with a copy action, and a link to the Pack's slice page, then the summary; the framing follows as prose under the heading Framing, with the vocabulary references, linked.
Rule
rule.summary · changed
The summary states each Pack total in one sentence that opens with its count, never as a table: the members and the unresolved ones, the members held below their stated next rung and those waiting only for their author, the design entries and pinned declarations, the open and blocking questions, the members with an implementation binding and with a design reference, and the boundary in each direction.
Rule
NowThe summary states each Pack total in one sentence that opens with its count, never as a table: the members and the unresolved ones, the members held below their stated next rung and those waiting only for their author, the design entries and pinned declarations, the open and blocking questions, the members with an implementation binding and with a design reference, and the boundary in each direction. The member sentence says `in priority order` when the Pack states `order: priority`, otherwise `in authored reading order`.
Rule
ui.headerBlock · changed
the title as the page heading; below it the id and the carrier file, each with a copy action; then the summary; then the framing under a `Framing` heading, and the vocabulary references.Now
the title as the page heading; below it the id and the carrier file, each with a copy action, and the link `Read this Pack as one design` to its slice page; then the summary; then the framing under a `Framing` heading, and the vocabulary references.
spec:consumers.spec-studio.pack-page.maturity-map
narrative · changed
A Pack of many members takes a reviewer a long scroll through its cards before they know where the design stands. The maturity map answers that first: one table, a row per stated rung and a column per floor reached, each member a short card in its cell. A member right of its row's own rung waits only for a statement the floor already allows; a member left of it states more than its floor holds.Now
A Pack's maturity map shows its distribution before its member lists. Equal-sized cells place each resolved member by stated readiness and floor reached. Populated cells show exact counts and member marks; faint empty cells show no number. The count table and ordered lists retain the reading in text.
relation.dependsOn:spec:consumers.spec-studio.diagram-kinds.maturity-picture · added
spec:consumers.spec-studio.pack-page.maturity-map
dependsOn
spec:consumers.spec-studio.diagram-kinds.maturity-picture
declared
the map is drawn as the picture defines
rule.maturityMap · changed
After the summary, the maturity map places each resolved member by its stated rung and the floor it reaches: one row per stated rung, idea to ready, and one column per floor, none to ready, each filled cell listing its members in authored order as short cards linked to their member cards, with its count, and an empty cell showing `—` alone; the table caption explains in words where the floor sits above the statement and where the statement sits above the floor.
Rule
NowAfter the summary, show the categorical grid and full member lists defined by spec:consumers.spec-studio.diagram-kinds.maturity-picture. Every resolved member belongs to one stated-rung and floor cell; unresolved members are named apart. Populated cells link to their built lists, whose members stay in authored order.
Rule
ui.maturityMap · changed
an `sdp-maturity-map` holding a table under a `Maturity map` heading, rows headed `stated idea` to `stated ready`, columns headed `floor none` to `floor ready`, each filled cell its count and its members as short cards, an empty cell reading `—` alone, and the axis explanation in the table's caption, never inside a header cell: right of the matching rung the floor is above the statement and already allows it; left of it the statement is above the floor.Now
An `sdp-maturity-map` holds the static SVG grid, caption and accessible count table, followed by populated cells' full member lists in disclosures that print open. Equal-sized cells have explicit axes; the legend names matches, floor above statement and statement above floor once. The diagonal has an outline, empty cells are faint, and populated cells carry exact counts and member marks, up to `100` marks and solid fill above that. Every member links to its card.
spec:consumers.spec-studio.page-elements
design.copy · changed
`sdp-copy` with `text`: a `Copy` button whose accessible name includes the text; it copies the text to the clipboard and says `Copied`, and where the clipboard is unavailable it selects the text so the person can copy it.Now
`sdp-copy` with `text`, or with `for` naming a text area on its page: a `Copy` button whose accessible name includes the text or the text area's label; it copies that text and says `Copied`, and where the clipboard is unavailable it selects the text so the person can copy it.
design.filter · changed
`sdp-filter`: wraps a hidden form of labelled `select` elements, each with `data-filter="<name>"` and an `any` option, and the rows marked `data-row`. On upgrade it shows the form, hides each row whose `data-<name>` differs from a chosen value, and writes `<shown> of <total> shown` in its `output` element; a row whose attribute holds several space-separated values, such as its Packs, matches when one of them equals the choice.Now
`sdp-filter`: wraps a hidden form of labelled `select` elements, each with `data-filter="<name>"` and an `any` option, and the rows marked `data-row`. On upgrade it shows the form, hides each row whose `data-<name>` differs from a chosen value, and writes `<shown> of <total> shown` in its `output` element; a row whose attribute holds several space-separated values, such as its Packs, matches when one of them equals the choice. When a followed link or a fragment change targets an element inside a row it hides, it returns every control to `any`, adds to its output that the filter was cleared to show that target, and scrolls the target into view.
sdp studio publishes the Studio as one page setspec:consumers.spec-studio.publisher
rule.pageSet · changed
The page set holds `index.html`, `search.html`, one `packs/<name>.html` per Pack, one `specs/<name>.html` per Spec, and `assets/studio.css` and `assets/studio.js`. `<name>` is the id after its namespace, with each uppercase ASCII letter written as `_` and its lowercase, so no two pages collide on a file system that ignores case.
Rule
NowThe page set holds `index.html`, `search.html`, one `packs/<name>.html` and one `slices/<name>.html` per Pack, one `specs/<name>.html` per Spec, and `assets/studio.css` and `assets/studio.js`. `<name>` is the id after its namespace, with each uppercase ASCII letter written as `_` and its lowercase, so no two pages collide on a file system that ignores case.
Rule
spec:consumers.spec-studio.spec-page
relation.dependsOn:spec:consumers.spec-studio.diagram-kinds.requirement-trace · added
spec:consumers.spec-studio.spec-page
dependsOn
spec:consumers.spec-studio.diagram-kinds.requirement-trace
declared
the Design view reads the selected set and claims the requirement drawing defines
relation.dependsOn:spec:consumers.spec-studio.diagrams · changed
spec:consumers.spec-studio.spec-page
dependsOn
spec:consumers.spec-studio.diagrams
declared
the design view and the impact panel draw the realization diagram and the trace graph
spec:consumers.spec-studio.spec-page
dependsOn
spec:consumers.spec-studio.diagrams
declared
the design view and impact panel draw requirement traceability and the one-hop trace graph
rule.designView · changed
The Design view panel draws the realization diagram of the units that satisfy the Spec, their components and what they use, and then lists the decision records the Spec names through `decidedBy`, each with its title linked and its decision text inline.
Rule
NowThe Design view panel draws the requirement drawing defined by spec:consumers.spec-studio.diagram-kinds.requirement-trace in place of realization, then lists the decision records the Spec names through decidedBy with linked titles and decision text inline. The Runtime panel retains the implementation anchors' components and uses.
Rule
ui.designViewPanel · changed
the realization diagram, drawn as SVG whose nodes show their id, source file and line as the source-text rule states, then the decision records with their decision text; the panel's element id is `panel.design-view`.Now
The requirement drawing, with the text equivalent naming each binding's id, source file and line under the source-text rule, then the decision records and their decision text; its element id remains `panel.design-view`.
spec:consumers.upgrade-kit
design.guideSections · changed
in this order: re-pin the package and check `sdp --version`; measure the corpus with capability adoption (recipe 47); key the rules with the rule-key proposal (recipe 48), check the proposal with the proposal check (recipe 38) and apply it through an agent's edit; for every capability in recipe 47's answer, one subsection citing its `carriedBy` Spec and recipe 47 as the measurement, naming a further recipe only when the subsection teaches a distinct next action with it and otherwise sending the reader to the carrying Spec; move rules files onto shipped recipes, recipes 25, 26, 42, 50 and 51 and the `recipes` binding; read large Packs in parts and order the waiting statements, recipes 36 and 46; publish every root with `sdp generate`; and pass a recipe's subject as `--params` data, the recipe-caller guidance the README carries.Now
in this order: re-pin the package and check `sdp --version`; measure the corpus with capability adoption (recipe 47); organize features in epics, reading the capability map (recipe 52) and citing `spec:consumers.capability-map`; `Model upcoming work in the graph; keep review history in git and pull requests`, a roadmap Pack read with recipes 53 and 55 and intended design proposed as a change proposal checked by recipe 38, citing `spec:consumers.roadmap`, with the guidance `Unresolved intended design lives in open questions. Review disposition and acceptance remain in git and the pull request; neither becomes a graph field.`; key the rules with the rule-key proposal (recipe 48), check the proposal with the proposal check (recipe 38) and apply it through an agent's edit; for every capability in recipe 47's answer, one subsection citing its `carriedBy` Spec and recipe 47 as the measurement, naming a further recipe only when the subsection teaches a distinct next action with it and otherwise sending the reader to the carrying Spec; move rules files onto shipped recipes, recipes 25, 26, 42, 50 and 51 and the `recipes` binding; read large Packs in parts and order the waiting statements, recipes 36 and 46; publish every root with `sdp generate`; and pass a recipe's subject as `--params` data, the recipe-caller guidance the README carries.
relation.dependsOn:spec:consumers.capability-map · added
spec:consumers.upgrade-kit
dependsOn
spec:consumers.capability-map
declared
the guide teaches epic organization through the capability map
relation.dependsOn:spec:consumers.roadmap · added
spec:consumers.upgrade-kit
dependsOn
spec:consumers.roadmap
declared
the guide teaches advisory priority and the roadmap memo as planning records
spec:decisions.architectural-annotation
decision · changed
Two rulings carried the structural half of the anchor: structural anchors confer nothing (MD-30) admitted `component` and `uses` as the only structural fields, and architectural significance rides existing primitives (MD-34) refused a vocabulary beyond them and gave up CodeNode-grain roles. Both cited gen 1's shrinking tag vocabulary as the failure of an open structural vocabulary. The annotation scout under `docs/lineage/` corrects that account: the reduction was a cleanup of gen 1's formal vocabulary that never shipped as a runtime registry, and what drifted there was duplicate identities, scan scope, and syntax handling. The original design declared a Component with `layer` and `bounded_context` (`docs/lineage/v0-design/03-graph-metamodel.md` §2.5), and gen 1 carried a role on each annotated unit. The owner's direction was to bring back the value of annotating architecturally significant units and their relationships in code.
Architectural significance is annotated on the anchor of the unit that realizes it. A code anchor may carry `role`, the architectural pattern the unit plays; a `component:` anchor may additionally carry `layer`, one of `edge`, `application`, `domain`, `adapter`, or `infrastructure`, and `context`, its bounded context. The `component:` anchor is anchored architecture: it is the declared component, and there is no separate architecture file, because the anchor sits where the component is realized. It is not the original design's declared Component that could exist before code; an unrealized component lives in Specs and never as an invented CodeNode. A role is a free, corpus-owned vocabulary whose taxonomy the census renders with counts from the graph; `service`, `decider`, `projection`, `read-model`, `codec`, `contract`, `barrel`, and `utility` are the lineage set, not a closed list. `layer` is a closed set, and a value outside it is an envelope error; `layer` or `context` on a non-component anchor is an envelope error. All three attributes are optional, and omission is lawful.
Hard to reverse: the anchor envelope and the CodeNode fields are contracts for the extractor, the census, the Design Review, and every adopter's anchors. Surprising without context: the replaced rulings refused exactly these attributes on the strength of a drift account the scout found inaccurate, so the reversal reads as a repeat of gen 1 until the correction is on the table. Real trade-off: a free role vocabulary can drift across a corpus and no validator will say so; in exchange, the role, layer, and context live on the one anchor at the one site, and the census taxonomy makes drift visible without a registry.
This record replaced both rulings, and both records were deleted because nothing in them still needed its own text; they read in git at `90c75dd`. What survives from them is restated here as consequences: the `component` and `uses` semantics and their validation rules, structural non-conferral, no inference from imports, no status or readiness on code, significance never selects a Spec kind, no `pattern:` namespace, and the engine significance criterion.
A separate architecture file declaring components, layers, and contexts was refused: it is a second place for the component to drift from the code that realizes it.
A closed role enum was refused: the corpus owns its architecture vocabulary, and a closed set would be the Protocol's architecture, not the adopter's.
A corpus-declared role vocabulary checked by a validator was refused: it is an authored registry, and the check is a content-quality check. The token grammar and the census taxonomy with its units are the whole check; a corpus that wants a list lints recipe 28 in its own gate.
Deriving role, layer, or context from file paths or imports was refused: it turns incidental layout into authoritative architecture and misclassifies an inferred observation as an anchored claim.
Adding `implements` was refused again: it would duplicate `satisfies` for contract-kind targets and make code-to-Spec realization ambiguous.
`component?: ComponentAnchorId` and `uses?: readonly CodeAnchorId[]` stay closed graph-ID references deriving only anchored `memberOf` and `uses` edges; neither accepts a free string or an enum detached from graph identity, and there are no per-namespace sibling builders.
Every `component` and `uses` target exists as a CodeNode, and a dangling graph id is an error.
Membership is one level: a `memberOf` edge runs only from an `impl:` or `api:` CodeNode to a `component:` CodeNode, each source has at most one component, and a `component:` node is never itself a member.
A `uses` edge runs between CodeNode endpoints in the `impl:`, `api:`, or `component:` namespace; a present `uses` is non-empty and unique, structural edges are unique, and structural self-reference is an error.
Multi-node `uses` cycles remain authored data for the census, never findings; validators infer no transitive edge and reject no cycle.
A malformed or non-static structural field, an unknown `layer`, or `layer` or `context` on a non-component anchor refuses the whole anchor at reification rather than yielding a partial declaration; the envelope stays closed.
Structural edges and the three attributes confer no intent, delivery fact, or readiness effect; `satisfies` stays the only code-to-Spec realization slot and no `implements` field is admitted.
Architecture is never inferred from imports as anchored or declared structure; an inferred structural layer, if one arrives, stays advisory under its own claim, and derivation adds no fourth claim.
No status, readiness, intent, behavior, or verification is carried on code; role, layer, and context describe what the unit is, never where it stands.
The Protocol ships no anchor-required lint; an optional corpus lint for unanchored code stays warn-level, and the absence of an anchor is evidence, never a workflow gate.
Architectural significance never selects a Spec kind; the Spec states the kind of truth it carries, and relationships among such Specs are the existing relations, with `dependsOn` reserved for genuine semantic need, `supersedes` for actual replacement, and scheduling-flavored edges refused (planning truths live in ruled graph homes, MD-33).
Negative architecture constraints, a layer that must not use another, stay declared intent in a Spec, never a finding of the Protocol's validators; a corpus that wants one enforced checks its declared `uses`, `layer`, and `context` in its own gate.
No `pattern` term, kind, or `pattern:` namespace is admitted; a role is an attribute of a CodeNode, not a node; grouping is derived from id families and the component graph, not new Packs.
The engine significance criterion stays exported public surface or cross-component reach; code never satisfies a decision Spec directly (the binding-grain ruling, MD-37), and an anchor is never pointed at an unfinished Spec to manufacture coverage.
`role` and `context` values are one lowercase kebab token matching `^[a-z][a-z0-9-]*$`, with no normalization, so `read-model`, `readModel`, and `Read Model` cannot coexist as three categories; a value outside the token grammar is an envelope error.
The census derives its structural rows and taxonomy from graph edges and runtime constants on every run; it re-derives no validation finding, owns no hand-kept taxonomy, and may group `uses` cycles as data.
Code reaches a decision that shapes it through the `satisfies` to `decidedBy` join, and a unit may name a decision it follows directly through `references`.
The census links each role, layer, and context value to the units that carry it, so an owner can reconcile two spellings of one category by editing the anchors; nothing forces a label, and an unlabelled unit does not populate the taxonomy.
The five layers, one line each: `edge` is the transport and presentation boundary; `application` is use cases and orchestration; `domain` is the model and its rules; `adapter` is the implementations of ports toward external systems; `infrastructure` is runtime, persistence, and platform plumbing.
A package may hold several layers or several contexts; the package-to-component mapping is reviewed, and one component per package is a choice, never a rule.
Retained limitation: there is no independently declared Component; a component that no code realizes yet is a Spec, and the graph holds no CodeNode for it until an anchor exists.
The census renders role, layer, context, and `references` beside its structural edges, with explicit empty states, and the Design Review's binding rows show role, layer and context; these renderings narrow the shipped projections freeze, while its remaining scope stays in force.
Anchors are curated, never a coverage quota; an identity has one owner; a realizing unit documents its local how, never a paraphrase of the Spec's what or why.
Two rulings carried the structural half of the anchor: structural anchors confer nothing (MD-30) admitted `component` and `uses` as the only structural fields, and architectural significance rides existing primitives (MD-34) refused a vocabulary beyond them and gave up CodeNode-grain roles. Both cited gen 1's shrinking tag vocabulary as the failure of an open structural vocabulary. The annotation scout under `docs/lineage/` corrects that account: the reduction was a cleanup of gen 1's formal vocabulary that never shipped as a runtime registry, and what drifted there was duplicate identities, scan scope, and syntax handling. The original design declared a Component with `layer` and `bounded_context` (`docs/lineage/v0-design/03-graph-metamodel.md` §2.5), and gen 1 carried a role on each annotated unit. The owner's direction was to bring back the value of annotating architecturally significant units and their relationships in code.
Architectural significance is annotated on the anchor of the unit that realizes it. A code anchor may carry `role`, the architectural pattern the unit plays; a `component:` anchor may additionally carry `layer`, one of `edge`, `application`, `domain`, `adapter`, or `infrastructure`, and `context`, its bounded context. The `component:` anchor is anchored architecture: it is the declared component, and there is no separate architecture file, because the anchor sits where the component is realized. It is not the original design's declared Component that could exist before code; an unrealized component lives in Specs and never as an invented CodeNode. A role is a free, corpus-owned vocabulary whose taxonomy the census renders with counts from the graph; `service`, `decider`, `projection`, `read-model`, `codec`, `contract`, `barrel`, and `utility` are the lineage set, not a closed list. `layer` is a closed set, and a value outside it is an envelope error; `layer` or `context` on a non-component anchor is an envelope error. All three attributes are optional, and omission is lawful.
Hard to reverse: the anchor envelope and the CodeNode fields are contracts for the extractor, the census, the Design Review, and every adopter's anchors. Surprising without context: the replaced rulings refused exactly these attributes on the strength of a drift account the scout found inaccurate, so the reversal reads as a repeat of gen 1 until the correction is on the table. Real trade-off: a free role vocabulary can drift across a corpus and no validator will say so; in exchange, the role, layer, and context live on the one anchor at the one site, and the census taxonomy makes drift visible without a registry.
This record replaced both rulings, and both records were deleted because nothing in them still needed its own text; they read in git at `90c75dd`. What survives from them is restated here as consequences: the `component` and `uses` semantics and their validation rules, structural non-conferral, no inference from imports, no status or readiness on code, significance never selects a Spec kind, no `pattern:` namespace, and the engine significance criterion.
`component?: ComponentAnchorId` and `uses?: readonly CodeAnchorId[]` stay closed graph-ID references deriving only anchored `memberOf` and `uses` edges; neither accepts a free string or an enum detached from graph identity, and there are no per-namespace sibling builders.
Every `component` and `uses` target exists as a CodeNode, and a dangling graph id is an error.
Membership is one level: a `memberOf` edge runs only from an `impl:` or `api:` CodeNode to a `component:` CodeNode, each source has at most one component, and a `component:` node is never itself a member.
A `uses` edge runs between CodeNode endpoints in the `impl:`, `api:`, or `component:` namespace; a present `uses` is non-empty and unique, structural edges are unique, and structural self-reference is an error.
Multi-node `uses` cycles remain authored data for the census, never findings; validators infer no transitive edge and reject no cycle.
A malformed or non-static structural field, an unknown `layer`, or `layer` or `context` on a non-component anchor refuses the whole anchor at reification rather than yielding a partial declaration; the envelope stays closed.
Structural edges and the three attributes confer no intent, delivery fact, or readiness effect; `satisfies` stays the only code-to-Spec realization slot and no `implements` field is admitted.
Architecture is never inferred from imports as anchored or declared structure; an inferred structural layer, if one arrives, stays advisory under its own claim, and derivation adds no fourth claim.
No status, readiness, intent, behavior, or verification is carried on code; role, layer, and context describe what the unit is, never where it stands.
The Protocol ships no anchor-required lint; an optional corpus lint for unanchored code stays warn-level, and the absence of an anchor is evidence, never a workflow gate.
Architectural significance never selects a Spec kind; the Spec states the kind of truth it carries, and relationships among such Specs are the existing relations, with `dependsOn` reserved for genuine semantic need, `supersedes` for actual replacement, and scheduling-flavored edges refused (planning truths live in ruled graph homes, MD-33).
Negative architecture constraints, a layer that must not use another, stay declared intent in a Spec, never a finding of the Protocol's validators; a corpus that wants one enforced checks its declared `uses`, `layer`, and `context` in its own gate.
No `pattern` term, kind, or `pattern:` namespace is admitted; a role is an attribute of a CodeNode, not a node; grouping is derived from id families and the component graph, not new Packs.
The engine significance criterion requires exported public surface or cross-component reach whose contract or responsibility a designer or builder must understand, as `spec:model.structural-patterns` defines it; export status or import rank alone is insufficient, so the criterion asks for no anchor on every export and changes no validator. Code never satisfies a decision Spec directly (the binding-grain ruling, MD-37), and an anchor is never pointed at an unfinished Spec to manufacture coverage.
`role` and `context` values are one lowercase kebab token matching `^[a-z][a-z0-9-]*$`, with no normalization, so `read-model`, `readModel`, and `Read Model` cannot coexist as three categories; a value outside the token grammar is an envelope error.
The census derives its structural rows and taxonomy from graph edges and runtime constants on every run; it re-derives no validation finding, owns no hand-kept taxonomy, and may group `uses` cycles as data.
Code reaches a decision that shapes it through the `satisfies` to `decidedBy` join, and a unit may name a decision it follows directly through `references`.
The census links each role, layer, and context value to the units that carry it, so an owner can reconcile two spellings of one category by editing the anchors; nothing forces a label, and an unlabelled unit does not populate the taxonomy.
The five layers, one line each: `edge` is the transport and presentation boundary; `application` is use cases and orchestration; `domain` is the model and its rules; `adapter` is the implementations of ports toward external systems; `infrastructure` is runtime, persistence, and platform plumbing.
A package may hold several layers or several contexts; the package-to-component mapping is reviewed, and one component per package is a choice, never a rule.
Retained limitation: there is no independently declared Component; a component that no code realizes yet is a Spec, and the graph holds no CodeNode for it until an anchor exists.
The census renders role, layer, context, and `references` beside its structural edges, with explicit empty states, and the Design Review's binding rows show role, layer and context; these renderings narrow the shipped projections freeze, while its remaining scope stays in force.
Anchors are curated, never a coverage quota; an identity has one owner; a realizing unit documents its local how, never a paraphrase of the Spec's what or why.
A separate architecture file declaring components, layers, and contexts was refused: it is a second place for the component to drift from the code that realizes it.
A closed role enum was refused: the corpus owns its architecture vocabulary, and a closed set would be the Protocol's architecture, not the adopter's.
A corpus-declared role vocabulary checked by a validator was refused: it is an authored registry, and the check is a content-quality check. The token grammar and the census taxonomy with its units are the whole check; a corpus that wants a list lints recipe 28 in its own gate.
Deriving role, layer, or context from file paths or imports was refused: it turns incidental layout into authoritative architecture and misclassifies an inferred observation as an anchored claim.
Adding `implements` was refused again: it would duplicate `satisfies` for contract-kind targets and make code-to-Spec realization ambiguous.
spec:extraction.build-pipeline
relation.refines:spec:extraction.derive-graph · added
spec:extraction.build-pipeline
refines
spec:extraction.derive-graph
declared
the build orchestrates derivation and publication of the one graph
relation.refines:spec:protocol.self-hosting · removed
spec:extraction.build-pipeline
refines
spec:protocol.self-hosting
declared
spec:extraction.derive-graph
altitude · changed
featureNow
epic
relation.refines:spec:protocol.self-hosting · removed
spec:extraction.derive-graph
refines
spec:protocol.self-hosting
declared
spec:extraction.determinism
relation.refines:spec:extraction.derive-graph · added
spec:extraction.determinism
refines
spec:extraction.derive-graph
declared
deterministic output constrains the derivation capability
relation.refines:spec:protocol.self-hosting · removed
spec:extraction.determinism
refines
spec:protocol.self-hosting
declared
spec:extraction.example-runner
relation.refines:spec:extraction.executable-examples · added
spec:extraction.example-runner
refines
spec:extraction.executable-examples
declared
step dispatch and failure rendering execute a bound example
spec:extraction.executable-contracts
relation.refines:spec:extraction.executable-examples · added
spec:extraction.executable-contracts
refines
spec:extraction.executable-examples
declared
typed contracts carry the authored steps and example space into execution
spec:extraction.pack-member-order
behavior.rules[1] · changed
`members` is always present on a Pack node, and an empty manifest list derives `members: []`. The serialized Pack node writes its fields in the order `id`, `nodeType`, `claim`, `title`, `framing`, `file`, `members`, `modelRefs`, omitting an absent optional field.
Rule
Now`members` is always present on a Pack node, and an empty manifest list derives `members: []`. The serialized Pack node writes its fields in the order `id`, `nodeType`, `claim`, `title`, `framing`, `file`, `members`, `modelRefs`, `order`, omitting an absent optional field.
Rule
relation.decidedBy:spec:decisions.roadmap-priority · added
spec:extraction.pack-member-order
decidedBy
spec:decisions.roadmap-priority
declared
spec:extraction.schema-versioning.declared-version
behavior · changed
a graph derived from the authored spec {specId: "spec:probe.schema-versioning"}the graph payload is serialized
the payload declares the schema version {schemaVersion: "0.11.0"}a graph derived from the authored spec {specId: "spec:probe.schema-versioning"}the graph payload is serialized
the payload declares the schema version {schemaVersion: "0.12.0"}spec:model.core-model
altitude · changed
featureNow
epic
relation.refines:spec:protocol.self-hosting · removed
spec:model.core-model
refines
spec:protocol.self-hosting
declared
the self-hosted corpus models itself with this primitive
spec:model.pack-aggregate
relation.decidedBy:spec:decisions.roadmap-priority · added
spec:model.pack-aggregate
decidedBy
spec:decisions.roadmap-priority
declared
term.priority order · added
The authored member order of a Pack whose manifest states `order: priority`, read as its owner's advisory preference among its members; it confers nothing and sequences nothing.
term.refinement · moved
A truth-bearing parent-child relation, distinct from the cross-cutting Pack aggregate.
spec:model.planned-architecture
relation.refines:spec:model.core-model · added
spec:model.planned-architecture
refines
spec:model.core-model
declared
planned components enrich Specs before code binds them
spec:model.structural-patterns
term.architecturally significant unit · changed
A code unit with exported public surface or cross-component reach that warrants graph-visible structural binding: component membership, a role, and `references` to the designs it answers to. An architectural dependency is declared as `uses`, normally between components; a unit's own `uses` is optional.Now
A code unit with exported public surface or cross-component reach whose contract or responsibility a designer or builder must understand; export status or import rank alone is insufficient. Ports, shared data shapes, pipeline stages, decision tables, catalogs, layout policies and adapters may qualify. Its anchor records component membership, a role and `references` to the designs it answers to. An architectural dependency is declared as `uses`, normally between components; a unit's own `uses` is optional.
spec:observation.run-evidence
relation.refines:spec:consumers.projections-model · added
spec:observation.run-evidence
refines
spec:consumers.projections-model
declared
run records inform a view without becoming graph facts
spec:observation.runtime-overlay
relation.refines:spec:extraction.derive-graph · added
spec:observation.runtime-overlay
refines
spec:extraction.derive-graph
declared
an observed fact would be derived beside implemented and has-verifier
relation.refines:spec:protocol.self-hosting · removed
spec:observation.runtime-overlay
refines
spec:protocol.self-hosting
declared
spec:protocol.structural-self-binding
rule.criterion · changed
The engine applies the structural-patterns model's significance criterion: exported public surface or cross-component reach.
Rule
NowThe engine applies the structural-patterns model's significance criterion: exported public surface or cross-component reach whose contract or responsibility a designer or builder must understand; export status or import rank alone is insufficient.
Rule
spec:validation.architecture-constraints
relation.refines:spec:validation.corpus-rules · added
spec:validation.architecture-constraints
refines
spec:validation.corpus-rules
declared
the architecture walk is a corpus-selected rule over anchored structure
spec:validation.corpus-rules
relation.refines:spec:consumers.agent-surface · added
spec:validation.corpus-rules
refines
spec:consumers.agent-surface
declared
a corpus scripts the graph through the evaluation sink to report its own findings
spec:validation.duplicate-ids
relation.refines:spec:protocol.self-hosting · removed
spec:validation.duplicate-ids
refines
spec:protocol.self-hosting
declared
relation.refines:spec:validation.two-check-families · added
spec:validation.duplicate-ids
refines
spec:validation.two-check-families
declared
duplicate identity is a conformance refusal
spec:validation.external-registers
relation.refines:spec:validation.corpus-rules · added
spec:validation.external-registers
refines
spec:validation.corpus-rules
declared
external-register checks run as corpus-selected rules
spec:validation.readiness-floor
relation.refines:spec:protocol.self-hosting · removed
spec:validation.readiness-floor
refines
spec:protocol.self-hosting
declared
relation.refines:spec:validation.two-check-families · added
spec:validation.readiness-floor
refines
spec:validation.two-check-families
declared
the readiness floor checks honesty of the stated rung
spec:validation.two-check-families
altitude · changed
featureNow
epic
relation.refines:spec:protocol.self-hosting · removed
spec:validation.two-check-families
refines
spec:protocol.self-hosting
declared
added · pack:roadmap
Members added: spec:protocol.delivery-record-cleanup, spec:consumers.spec-studio.cited-line-text, spec:consumers.spec-studio.register-input, spec:consumers.edit-model
Members removed: None
Member order unchanged.
added as a roadmap
added · pack:roadmaps-and-slices-v1
Members added: spec:protocol.significant-units-review, spec:protocol.role-vocabulary, spec:consumers.spec-studio.lenses.architecture.unit-register, spec:consumers.capability-map, spec:decisions.epics-of-any-kind, spec:protocol.capability-epics, spec:extraction.executable-examples, spec:consumers.spec-studio.capability-map-page, spec:consumers.spec-studio.diagram-kinds, spec:consumers.spec-studio.diagram-kinds.legibility, spec:consumers.spec-studio.diagram-kinds.edge-routing, spec:consumers.spec-studio.diagram-kinds.mermaid-source, spec:consumers.spec-studio.diagram-kinds.dependency, spec:consumers.spec-studio.diagram-kinds.capability-tree, spec:consumers.spec-studio.diagram-kinds.scoped-architecture, spec:consumers.spec-studio.diagram-kinds.maturity-picture, spec:consumers.spec-studio.diagram-kinds.requirement-trace, spec:consumers.design-slice, spec:consumers.design-slice.outside-components, spec:consumers.design-slice.chain, spec:consumers.design-slice.decision-backlink, spec:consumers.design-slice.dependency-cycle, spec:consumers.design-slice.folded-example, spec:consumers.design-slice.independent-example, spec:consumers.design-slice.component-absent, spec:consumers.design-slice.component-unrelated, spec:consumers.design-slice.component-matching, spec:consumers.design-slice.component-differing, spec:consumers.design-slice.component-unreadable, spec:consumers.design-slice.outside-satisfied, spec:consumers.design-slice.outside-unbound, spec:consumers.design-slice.outside-holding, spec:consumers.spec-studio.slice-page, spec:decisions.roadmap-priority, spec:consumers.roadmap, spec:consumers.roadmap.built-work, spec:consumers.roadmap.buildable-part, spec:consumers.roadmap.statement-part, spec:consumers.roadmap.design-part, spec:consumers.roadmap.drifting-part, spec:consumers.roadmap.missing-evidence, spec:consumers.roadmap.blocking-part, spec:consumers.roadmap.outside-parent, spec:consumers.roadmap.statement-order, spec:consumers.spec-studio.roadmap-page, spec:consumers.roadmap.memo, spec:decisions.roadmap-over-plans, spec:protocol.roadmap-replaces-plans, spec:consumers.projections-model.roadmap-views
Members removed: None
Member order unchanged.
changed · pack:self-hosting-v1
Members added: spec:extraction.executable-examples, spec:consumers.spec-studio.lenses.architecture.unit-register, spec:consumers.capability-map, spec:consumers.spec-studio.capability-map-page, spec:consumers.spec-studio.diagram-kinds, spec:consumers.spec-studio.diagram-kinds.legibility, spec:consumers.spec-studio.diagram-kinds.edge-routing, spec:consumers.spec-studio.diagram-kinds.mermaid-source, spec:consumers.spec-studio.diagram-kinds.dependency, spec:consumers.spec-studio.diagram-kinds.capability-tree, spec:consumers.spec-studio.diagram-kinds.scoped-architecture, spec:consumers.spec-studio.diagram-kinds.maturity-picture, spec:consumers.spec-studio.diagram-kinds.requirement-trace, spec:consumers.design-slice, spec:consumers.design-slice.outside-components, spec:consumers.design-slice.chain, spec:consumers.design-slice.decision-backlink, spec:consumers.design-slice.dependency-cycle, spec:consumers.design-slice.folded-example, spec:consumers.design-slice.independent-example, spec:consumers.design-slice.component-absent, spec:consumers.design-slice.component-unrelated, spec:consumers.design-slice.component-matching, spec:consumers.design-slice.component-differing, spec:consumers.design-slice.component-unreadable, spec:consumers.design-slice.outside-satisfied, spec:consumers.design-slice.outside-unbound, spec:consumers.design-slice.outside-holding, spec:consumers.spec-studio.slice-page, spec:consumers.roadmap, spec:consumers.roadmap.built-work, spec:consumers.roadmap.buildable-part, spec:consumers.roadmap.statement-part, spec:consumers.roadmap.design-part, spec:consumers.roadmap.drifting-part, spec:consumers.roadmap.missing-evidence, spec:consumers.roadmap.blocking-part, spec:consumers.roadmap.outside-parent, spec:consumers.roadmap.statement-order, spec:consumers.spec-studio.roadmap-page, spec:consumers.roadmap.memo, spec:consumers.spec-studio.cited-line-text, spec:consumers.spec-studio.register-input, spec:protocol.significant-units-review, spec:protocol.role-vocabulary, spec:protocol.capability-epics, spec:protocol.roadmap-replaces-plans, spec:protocol.delivery-record-cleanup, spec:decisions.roadmap-priority, spec:decisions.roadmap-over-plans, spec:decisions.epics-of-any-kind
Members removed: None
Member order unchanged.
changed · pack:spec-studio-v1
Members added: spec:consumers.spec-studio.lenses.architecture.unit-register
Members removed: None
Member order unchanged.
Added: impl:protocol.markdown-yaml-policy
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.gherkin-kind-policy
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.markdown-parser
Removed: impl:protocol.markdown-authoring
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.markdown-content
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.markdown-yaml-policy, impl:protocol.static-reification
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap-priority
Removed: None
Added: None
Removed: None
Added: impl:protocol.markdown-body-grammar
Removed: impl:protocol.prose-ownership
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.import-fidelity, impl:protocol.sdp-import-publish, impl:protocol.sdp-import-scan
Removed: None
Added: None
Removed: impl:protocol.sdp-import-publish, impl:protocol.sdp-import-scan
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.reader
Removed: impl:protocol.agent-surface
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: impl:protocol.query-answer-shapes
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.parameter-codec
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: impl:protocol.binding-language-pack-table
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.capability-map-recipe
Removed: None
Added: None
Removed: None
Added: test:protocol.capability-map
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.build-args
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap-priority
Removed: None
Added: None
Removed: None
Added: impl:protocol.design-review-codec
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.design-slice-recipe
Removed: None
Added: impl:protocol.studio-slice-answer
Removed: None
Added: spec:consumers.design-slice.chain, spec:consumers.design-slice.component-absent, spec:consumers.design-slice.component-differing, spec:consumers.design-slice.component-matching, spec:consumers.design-slice.component-unreadable, spec:consumers.design-slice.component-unrelated, spec:consumers.design-slice.decision-backlink, spec:consumers.design-slice.dependency-cycle, spec:consumers.design-slice.folded-example, spec:consumers.design-slice.independent-example, spec:consumers.design-slice.outside-components, spec:consumers.design-slice.outside-holding, spec:consumers.design-slice.outside-satisfied, spec:consumers.design-slice.outside-unbound, test:protocol.design-slice
Removed: None
Added: has-verifier, implemented
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.chain
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.component-absent
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.component-differing
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.component-matching
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.component-unreadable
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.component-unrelated
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.decision-backlink
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.dependency-cycle
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.folded-example
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.independent-example
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.outside-components
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.outside-holding
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.outside-satisfied
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.design-slice.outside-unbound
Removed: None
Added: has-verifier
Removed: None
Added: impl:protocol.gherkin-kind-policy
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.studio-proposal-contract
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.vault-priority
Removed: None
Added: None
Removed: None
Added: impl:protocol.roadmap-recipe
Removed: None
Added: None
Removed: None
Added: 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, test:protocol.roadmap-recipe
Removed: None
Added: has-verifier, implemented
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap.blocking-part
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap.buildable-part
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap.built-work
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap.design-part
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap.drifting-part
Removed: None
Added: has-verifier
Removed: None
Added: impl:protocol.roadmap-memo-recipe, impl:protocol.studio-roadmap-page
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap-memo-recipe, test:protocol.studio-roadmap-page
Removed: None
Added: has-verifier, implemented
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap.missing-evidence
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap.outside-parent
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap.statement-order
Removed: None
Added: has-verifier
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap.statement-part
Removed: None
Added: has-verifier
Removed: None
Added: impl:protocol.studio-capabilities-page, impl:protocol.studio-filter, impl:protocol.studio-frame, impl:protocol.studio-index-page
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-capabilities
Removed: None
Added: has-verifier, implemented
Removed: None
Added: None
Removed: impl:protocol.studio-view-elements
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.studio-inputs
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.studio-register-contracts
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.studio-architecture-lens, impl:protocol.studio-capability-diagrams, impl:protocol.studio-diagram-layout, impl:protocol.studio-diagram-source, impl:protocol.studio-diagrams, impl:protocol.studio-maturity-map, impl:protocol.studio-requirement-diagram, impl:protocol.studio-slice-architecture, impl:protocol.studio-slice-dependencies
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-diagram-catalog
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-capability-diagrams, impl:protocol.studio-diagram-source
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-capabilities
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-slice-dependencies
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-slice-dependency
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-diagram-routing, impl:protocol.studio-diagrams
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-diagram-core
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-diagram-element, impl:protocol.studio-diagram-layout, impl:protocol.studio-diagrams
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-diagram-core
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-maturity-map
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-architecture-maturity-requirement
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-diagram-source, impl:protocol.studio-diagrams
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-diagram-core
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-requirement-diagram, impl:protocol.studio-requirement-view
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-architecture-maturity-requirement, test:protocol.studio-diagram-core
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-slice-architecture
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-slice-architecture
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-diagram-model
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-diagram-core
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap-priority
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-architecture-maturity-requirement
Removed: None
Added: None
Removed: None
Added: impl:protocol.studio-unit-register
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-architecture-maturity-requirement
Removed: None
Added: has-verifier, implemented
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-roadmap-page
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap-priority
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-architecture-maturity-requirement
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-copy-source
Removed: None
Added: None
Removed: None
sdp studio publishes the Studio as one page setAdded: impl:protocol.build-pipeline-emit, impl:protocol.studio-page-catalog
Removed: impl:protocol.studio-build-invalidation
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.studio-roadmap-page
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-roadmap-page
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-html
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.studio-slice-page
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-slice-page
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.studio-requirement-view
Removed: None
Added: None
Removed: None
Added: test:protocol.studio-architecture-maturity-requirement
Removed: None
Added: None
Removed: None
Added: impl:protocol.build-pipeline-emit
Removed: impl:protocol.wholesale-view-build-invalidation
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.schema-version
Removed: impl:protocol.graph-edge-types
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.gherkin-kind-policy
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.capability-map-recipe
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.pack-aggregate, impl:protocol.pack-member-order
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: impl:protocol.studio-view-elements
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.schema-version
Removed: impl:protocol.graph-claims
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.schema-version
Removed: impl:protocol.graph-edge-types
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.build-pipeline-emit
Removed: impl:protocol.extraction-determinism
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: impl:protocol.delivery-facts, impl:protocol.example-runner, impl:protocol.example-runner-adapter, impl:protocol.example-testing-helpers, impl:protocol.executable-contracts, impl:protocol.runnable-modules
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: implemented
Removed: None
Added: impl:protocol.markdown-yaml-policy, impl:protocol.open-section-order, impl:protocol.pack-coherence, impl:protocol.pack-design-page, impl:protocol.reader
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap-priority
Removed: None
Added: None
Removed: None
Added: impl:protocol.build-pipeline-emit
Removed: impl:protocol.regenerability
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap-priority
Removed: None
Added: None
Removed: None
Added: impl:protocol.capability-epics
Removed: None
Added: None
Removed: None
Added: test:protocol.capability-epics
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.roadmap-practice
Removed: None
Added: None
Removed: None
Added: test:protocol.roadmap-practice
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.role-vocabulary
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: implemented
Removed: None
Added: impl:protocol.structural-self-binding
Removed: None
Added: None
Removed: None
Added: test:protocol.structural-self-binding
Removed: None
Added: has-verifier, implemented
Removed: None
Added: impl:protocol.corpus-rule-runner
Removed: None
Added: None
Removed: None
Added: None
Removed: None
Added: None
Removed: None
{
"part": "schemaVersion",
"base": "0.11.0",
"head": "0.12.0"
}Composing needs the script.