Spec Studio

The upgrade kit shows a corpus what it could adopt

spec:consumers.upgrade-kitUse Case / Behavior · featureready floor ready

Packs: pack:adopter-speed-v1, pack:self-hosting-v1

Design: 2 design entries · 1 pinned declaration · no decisions

Findings: no errors, no warnings

specs/consumers/upgrade-kit.sdp.md

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

An adopter learns what its corpus does not use yet only by writing its own queries, as the first adopter's survey did when it counted rule keys, question fields, relation reasons and exercises lists one at a time. The kit answers that survey with a recipe and turns the one capability a machine can apply without an author's judgment, a key for each rule, into a change proposal. Every other capability it reports asks for intent only an author has, so the kit reports where each could apply and proposes nothing for it.

Intent
actor
An adopter moving a corpus onto a newer Protocol commit, or the agent working for it.
problem
An adopter cannot see which capabilities its corpus already uses and where each could apply, so it hand-rolls the survey for every release and applies each new capability by hand.
outcome
Report, per Spec and Pack, the Protocol capabilities a corpus uses and where each could apply, and propose the edits as a change proposal an agent applies, never editing a carrier itself.
Behavior
rule.reportsAndProposes line 30 · specs/consumers/upgrade-kit.sdp.md:30
The kit reports and proposes and never edits: its recipes read the graph and return data, and a change reaches a carrier only as an agent's or a person's edit, applied after the proposal check and recorded by git.

no example exercises it

rule.statesNoRung line 31 · specs/consumers/upgrade-kit.sdp.md:31
The kit states no rung, authors no fact and scores nothing: a capability it reports as unused is a place it could apply, never a finding, a gate or a quota.

no example exercises it

rule.upgradeGuide line 32 · specs/consumers/upgrade-kit.sdp.md:32
The package ships an upgrade guide for an adopter moving its corpus onto a newer commit: it measures the corpus with capability adoption, keys its rules with the rule-key proposal, and, for each capability the report lists, names the Spec that carries its law, with capability adoption as the recipe that measures it.

no example exercises it

rule.guideTeaches line 33 · specs/consumers/upgrade-kit.sdp.md:33
The guide teaches and states no law: each section names the Spec that carries what it teaches, and no section repeats that Spec's rules.

no example exercises it

0 unkeyed rules.

Design
guideFile line 36 · specs/consumers/upgrade-kit.sdp.md:36
docs/agent-surface/upgrade-guide.md, shipped in the package beside the recipe catalog, listed in the package's files and named by sdp --help among the shipped on-ramps.

no citation recorded

guideSections line 37 · specs/consumers/upgrade-kit.sdp.md:37
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.
Verification

Verifier bindings

  • test:protocol.upgrade-guide · anchored · test anchor binding present · test/upgrade-kit.test.ts:94

    External run evidence from test/upgrade-kit.test.ts

    Test anchors: test:protocol.capability-adoption.counts-a-corpus, test:protocol.rule-key-proposal.collision-and-unkeyable, test:protocol.rule-key-proposal.proposal-applies-clean, test:protocol.upgrade-guide. Specs verified by those bindings: spec:consumers.upgrade-kit, spec:consumers.upgrade-kit.capability-adoption, spec:consumers.upgrade-kit.capability-adoption.counts-a-corpus, spec:consumers.upgrade-kit.rule-key-proposal, spec:consumers.upgrade-kit.rule-key-proposal.collision-and-unkeyable, spec:consumers.upgrade-kit.rule-key-proposal.proposal-applies-clean.

    Run 1: external run evidence from vitest 4.1.10

    Build: CI 391 · Branch: cursor/media-plan-and-articles-09b1 · Commit: 076cd4f1f85640d8236e5cca1bffffa68ab79a33 · Start: 2026-10-31T15:32:20.471Z · Stop: 2026-10-31T15:34:02.073Z

    NameSuiteResultDuration
    applies unchanged scopes while sending only moved changes to a personupgrade kitpassed2.69 ms
    names a carrying Spec in every guide sectionupgrade kitpassed0.66 ms
    teaches the upgrade steps in the pinned orderupgrade kitpassed1.11 ms
    teaches epic reparenting and advisory roadmap adoptionupgrade kitpassed0.5 ms
    runs the guide's rules file on a clean corpus with no address parametersupgrade kitpassed22.82 ms
    names the recipes' carrying Specs and teaches rule-key proposal as the rule-key actionupgrade kitpassed1.68 ms
    ships the guide and names every reported capability's law and measurementupgrade kitpassed13.26 ms
    counts rules, reasons and unknown external perspectivesupgrade kitpassed7.81 ms
    coins collisions and lists an unkeyable entryupgrade kitpassed4.95 ms
    executes the bound example against a fresh worldCapability adoption counts keyed rules and reasoned relations (spec:consumers.upgrade-kit.capability-adoption.counts-a-corpus)passed7.51 ms
    executes the bound example against a fresh worldA rule-key proposal passes the proposal check and validates once applied (spec:consumers.upgrade-kit.rule-key-proposal.proposal-applies-clean)passed14.93 ms
    executes the bound example against a fresh worldTwo rules that coin one key stay apart, and a rule with no ASCII word stays unkeyed (spec:consumers.upgrade-kit.rule-key-proposal.collision-and-unkeyable)passed13.14 ms
    counts distinct step skeletons and vocabulary keys inherited through refinescapability adoption detailspassed14.92 ms
    counts distinct step skeletons and vocabulary keys inherited through verifiescapability adoption detailspassed5.93 ms
    counts repeated vocabulary and example steps once per skeleton within a Speccapability adoption detailspassed1.83 ms
    counts all capabilities and deduplicates shared components and repeated Pack memberscapability adoption detailspassed14.29 ms
    diagnoses detail nullcapability adoption detailspassed3.74 ms
    diagnoses detail 1capability adoption detailspassed2.14 ms
    diagnoses detail "all"capability adoption detailspassed1.93 ms
    diagnoses detail {}capability adoption detailspassed1.91 ms
    diagnoses detail "spec:missing"capability adoption detailspassed1.91 ms
    diagnoses detail truecapability adoption detailspassed1.85 ms
    drops possessives and apostrophes before coining keysrule-key proposal detailspassed2.22 ms
    preserves scope and entry order and skips existing keys and tagsrule-key proposal detailspassed12.48 ms
    diagnoses both scopes even when each resolvesrule-key proposal detailspassed2.12 ms
    diagnoses invalid parameters {}rule-key proposal detailspassed1.94 ms
    diagnoses invalid parameters {"commit":""}rule-key proposal detailspassed1.99 ms
    diagnoses invalid parameters {"commit":1}rule-key proposal detailspassed1.91 ms
    diagnoses invalid parameters {"commit":"abc","pack":"pack:missing"}rule-key proposal detailspassed1.81 ms
    diagnoses invalid parameters {"commit":"abc","specs":["spec:missing"]}rule-key proposal detailspassed1.85 ms
    diagnoses invalid parameters {"commit":"abc","specs":[],"pack":"pack:missing"}rule-key proposal detailspassed3.9 ms
    diagnoses invalid parameters {"commit":"abc","specs":"all"}rule-key proposal detailspassed1.84 ms
    drops leading digit words before checking word repeatsnot recordedpassed1.97 ms
Design view

Requirement drawing

Requirement drawing for spec:consumers.upgrade-kit
The diagram as text
  • spec:consumers.upgrade-kit: The upgrade kit shows a corpus what it could adopt · declared Spec
  • spec:consumers.upgrade-kit.capability-adoption: Capability adoption counts where each capability is used and where it could apply · declared Spec
  • spec:consumers.upgrade-kit.rule-key-proposal: The rule-key proposal keys every unkeyed rule as a change proposal · declared Spec
  • spec:consumers.upgrade-kit.capability-adoption.counts-a-corpus: Capability adoption counts keyed rules and reasoned relations · declared Spec
  • spec:consumers.upgrade-kit.rule-key-proposal.collision-and-unkeyable: Two rules that coin one key stay apart, and a rule with no ASCII word stays unkeyed · declared Spec
  • spec:consumers.upgrade-kit.rule-key-proposal.proposal-applies-clean: A rule-key proposal passes the proposal check and validates once applied · declared Spec
  • spec:consumers.authoring-on-ramp: Authors move one Spec from intent to reviewed evidence · declared Spec
  • impl:protocol.capability-adoption-recipe: realizes capability adoption in the shipped recipe catalog · anchored code · test/upgrade-kit.test.ts:514
  • impl:protocol.rule-key-proposal-recipe: realizes the rule-key proposal in the shipped recipe catalog · anchored code · test/upgrade-kit.test.ts:742
  • impl:protocol.upgrade-guide: realizes the shipped upgrade guide document · anchored code · test/upgrade-kit.test.ts:87
  • oracle:protocol.capability-adoption: oracle:protocol.capability-adoption · anchored oracle binding · test/upgrade-kit.test.ts:322
  • oracle:protocol.rule-key-proposal: oracle:protocol.rule-key-proposal · anchored oracle binding · test/upgrade-kit.test.ts:398
  • test:protocol.capability-adoption.counts-a-corpus: test:protocol.capability-adoption.counts-a-corpus · anchored test binding · binding present · test/upgrade-kit.test.ts:345
  • test:protocol.rule-key-proposal.collision-and-unkeyable: test:protocol.rule-key-proposal.collision-and-unkeyable · anchored test binding · binding present · test/upgrade-kit.test.ts:483
  • test:protocol.rule-key-proposal.proposal-applies-clean: test:protocol.rule-key-proposal.proposal-applies-clean · anchored test binding · binding present · test/upgrade-kit.test.ts:466
  • test:protocol.upgrade-guide: test:protocol.upgrade-guide · anchored test binding · binding present · test/upgrade-kit.test.ts:94
  • spec:consumers.upgrade-kit refines spec:consumers.authoring-on-ramp · declared — the kit moves a whole corpus onto the capabilities the on-ramp teaches one Spec at a time
  • spec:consumers.upgrade-kit.capability-adoption refines spec:consumers.upgrade-kit · declared
  • spec:consumers.upgrade-kit.capability-adoption.counts-a-corpus refines spec:consumers.upgrade-kit.capability-adoption · declared
  • spec:consumers.upgrade-kit.capability-adoption.counts-a-corpus verifies spec:consumers.upgrade-kit.capability-adoption · declared
  • spec:consumers.upgrade-kit.rule-key-proposal refines spec:consumers.upgrade-kit · declared
  • spec:consumers.upgrade-kit.rule-key-proposal.collision-and-unkeyable refines spec:consumers.upgrade-kit.rule-key-proposal · declared
  • spec:consumers.upgrade-kit.rule-key-proposal.collision-and-unkeyable verifies spec:consumers.upgrade-kit.rule-key-proposal · declared
  • spec:consumers.upgrade-kit.rule-key-proposal.proposal-applies-clean refines spec:consumers.upgrade-kit.rule-key-proposal · declared
  • spec:consumers.upgrade-kit.rule-key-proposal.proposal-applies-clean verifies spec:consumers.upgrade-kit.rule-key-proposal · declared
  • impl:protocol.capability-adoption-recipe satisfies spec:consumers.upgrade-kit.capability-adoption · anchored
  • impl:protocol.rule-key-proposal-recipe satisfies spec:consumers.upgrade-kit.rule-key-proposal · anchored
  • impl:protocol.upgrade-guide satisfies spec:consumers.upgrade-kit · anchored
  • oracle:protocol.capability-adoption models spec:consumers.upgrade-kit.capability-adoption · anchored
  • oracle:protocol.rule-key-proposal models spec:consumers.upgrade-kit.rule-key-proposal · anchored
  • test:protocol.capability-adoption.counts-a-corpus verifies spec:consumers.upgrade-kit.capability-adoption.counts-a-corpus · anchored
  • test:protocol.rule-key-proposal.collision-and-unkeyable verifies spec:consumers.upgrade-kit.rule-key-proposal.collision-and-unkeyable · anchored
  • test:protocol.rule-key-proposal.proposal-applies-clean verifies spec:consumers.upgrade-kit.rule-key-proposal.proposal-applies-clean · anchored
  • test:protocol.upgrade-guide verifies spec:consumers.upgrade-kit · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: requirementDiagram. Chosen syntax: flowchart TB because models, folds require exact labels unavailable in requirement syntax.

Decisions

No decision record named.

Runtime
  • impl:protocol.upgrade-guide · realizes the shipped upgrade guide document · test/upgrade-kit.test.ts:87

    Uses

    None.

Runtime observation: not tracked.

Evidence

Runtime observation: not tracked.

Build attestations: not tracked.

Deployments: not tracked.

Bills of materials: not tracked.

Impact
Relations of spec:consumers.upgrade-kit
The diagram as text
  • spec:consumers.authoring-on-ramp: Authors move one Spec from intent to reviewed evidence
  • spec:consumers.capability-map: The capability map reads every epic and its refinement descendants
  • spec:consumers.edit-model: Views compose scoped intent instead of patching canonical source
  • spec:consumers.intent-composition: Composed intent hands off on one proposal shape
  • spec:consumers.roadmap: A roadmap orders the next bodies of work, and the graph says what each still needs
  • spec:consumers.upgrade-kit: The upgrade kit shows a corpus what it could adopt
  • spec:consumers.upgrade-kit.capability-adoption: Capability adoption counts where each capability is used and where it could apply
  • spec:consumers.upgrade-kit.rule-key-proposal: The rule-key proposal keys every unkeyed rule as a change proposal
  • spec:consumers.upgrade-kit dependsOn spec:consumers.capability-map · declared — the guide teaches epic organization through the capability map
  • spec:consumers.upgrade-kit dependsOn spec:consumers.edit-model · declared — a carrier changes only through an agent's or a person's edit, recorded by git
  • spec:consumers.upgrade-kit dependsOn spec:consumers.intent-composition · declared — a proposed upgrade hands off on the one change-proposal shape and is applied after its check
  • spec:consumers.upgrade-kit dependsOn spec:consumers.roadmap · declared — the guide teaches advisory priority and the roadmap memo as planning records
  • spec:consumers.upgrade-kit refines spec:consumers.authoring-on-ramp · declared — the kit moves a whole corpus onto the capabilities the on-ramp teaches one Spec at a time
  • spec:consumers.upgrade-kit.capability-adoption refines spec:consumers.upgrade-kit · declared
  • spec:consumers.upgrade-kit.rule-key-proposal refines spec:consumers.upgrade-kit · declared
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: flowchart. Chosen syntax: labelled flowchart, preserving exact relations, claims and folds.

Rests on

Rested on by

Distance 1

Distance 2

Relations

Relation and directionOther endClaimReasonExercised keys
dependsOn · outgoingThe capability map reads every epic and its refinement descendants
spec:consumers.capability-map · resolves
declaredthe guide teaches epic organization through the capability mapNone
dependsOn · outgoingViews compose scoped intent instead of patching canonical source
spec:consumers.edit-model · resolves
declareda carrier changes only through an agent's or a person's edit, recorded by gitNone
dependsOn · outgoingComposed intent hands off on one proposal shape
spec:consumers.intent-composition · resolves
declareda proposed upgrade hands off on the one change-proposal shape and is applied after its checkNone
dependsOn · outgoingA roadmap orders the next bodies of work, and the graph says what each still needs
spec:consumers.roadmap · resolves
declaredthe guide teaches advisory priority and the roadmap memo as planning recordsNone
refines · outgoingAuthors move one Spec from intent to reviewed evidence
spec:consumers.authoring-on-ramp · resolves
declaredthe kit moves a whole corpus onto the capabilities the on-ramp teaches one Spec at a timeNone
refines · incomingCapability adoption counts where each capability is used and where it could apply
spec:consumers.upgrade-kit.capability-adoption · resolves
declaredNoneNone
refines · incomingThe rule-key proposal keys every unkeyed rule as a change proposal
spec:consumers.upgrade-kit.rule-key-proposal · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.upgrade-guide · realizes the shipped upgrade guide document · test/upgrade-kit.test.ts:87

Design reference: none

Verifier binding: present

  • test:protocol.upgrade-guide · anchored · test/upgrade-kit.test.ts:94 · test anchor

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.