Spec Studio

Authors move one Spec from intent to reviewed evidence

spec:consumers.authoring-on-rampUse Case / Behavior · epicready floor ready

Packs: pack:self-hosting-v1

Design: no design entries · no pinned declarations · 3 decisions

Findings: no errors, no warnings

specs/consumers/authoring-on-ramp.sdp.md

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

Intent
outcome
Give an agent or human one graph-first path for creating, enriching, binding, and reviewing a Spec without inventing a parallel workflow.
Behavior
rule line 29 · specs/consumers/authoring-on-ramp.sdp.md:29
An author starts from the build-backlog and drift-alarm recipes, reads carrying Specs for law, and edits the canonical carrier.
rule line 30 · specs/consumers/authoring-on-ramp.sdp.md:30
Cheap capture starts with sdp new spec (or the equivalent hand-authored idea carrier) in the family found through concept search; the scaffolder emits envelope, Intent outcome, and the kind's bare typed heading, never invented content, and for constraint emits envelope, title, and Intent only with no twin section. Every later readiness edit is preceded by the promotion-preflight recipe and remains a human statement.
rule.scaffoldWriteBoundary line 31 · specs/consumers/authoring-on-ramp.sdp.md:31
sdp new spec uses the original working directory as the boundary for parent creation and the scaffold write. It refuses an escaping or unresolvable parent with exit 1, before creating anything through a statically planted escaping link. It creates parents and the scaffold through held directories, rechecks containment before each creation and after entering each parent, and rechecks the scaffold's location before reporting success; a detected relocation removes the scaffold and refuses. This defends against planted links and detects intervening changes; Node has no openat-style operations, so re-verification does not provide race-free confinement against a concurrent writer inside the working directory.

no example exercises it

Cited at

  • Test line · test/cli-new-spec.test.ts:158 · test:protocol.spec-scaffolder
  • Test line · test/cli-new-spec.test.ts:381 · test:protocol.spec-scaffolder
  • Test line · test/cli-new-spec.test.ts:455 · test:protocol.spec-scaffolder
  • Test line · test/cli-new-spec.test.ts:619 · test:protocol.spec-scaffolder
  • Test line · test/cli-new-spec.test.ts:656 · test:protocol.spec-scaffolder
rule line 32 · specs/consumers/authoring-on-ramp.sdp.md:32
The skill teaches question keys and their optional fields through spec:model.open-question-keys and spec:model.open-question-fields, rule keys and an example's exercises through spec:model.rule-keys, and optional relation reasons through spec:model.relation-reasons.
rule line 33 · specs/consumers/authoring-on-ramp.sdp.md:33
The skill teaches the least design two parties need to agree: keyed Design entries for shared names and shapes, code spans for pinned declarations, rule keys for outside citations, one prose owner for why, and no derived counts, delivery state or implementation sequence authored as design.
rule.designRounds line 34 · specs/consumers/authoring-on-ramp.sdp.md:34
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.

no example exercises it

rule line 35 · specs/consumers/authoring-on-ramp.sdp.md:35
The skill points behavior and example authors to spec:carrier.gherkin-authoring for the lawful Gherkin alternative and Pack authors to spec:carrier.markdown-pack-authoring for namespace routing, framing and ordered membership.
rule line 36 · specs/consumers/authoring-on-ramp.sdp.md:36
Binding is taught for code, test and oracle anchors in the constant form and the comment form, following spec:decisions.anchor-comment-form and spec:decisions.anchor-binding-grain. The constant builders are codeAnchor, specTest and specOracle; a code anchor's satisfies is optional and plural, a test anchor's verifies is non-empty and plural, and an oracle anchor has one models target. The skill teaches references as the code-to-design binding that claims no realization, and names the two silent non-binding hazards, a constant builder without a Protocol builder binding and a comment that does not open with /**.
rule line 37 · specs/consumers/authoring-on-ramp.sdp.md:37
The skill teaches the collective promise test for satisfies and the one-way meaning of references, following spec:decisions.anchor-binding-grain; every promise is realized by the satisfying units together, and each satisfying unit realizes at least one promise.
rule line 38 · specs/consumers/authoring-on-ramp.sdp.md:38
Structural binding is taught through component, uses and optional role on a code anchor, and optional layer and context on a component: anchor, in either form, following spec:decisions.architectural-annotation. The skill teaches closed graph-ID targets, at most one component per source, no implements field, cycles as data, and no conferral of intent, delivery facts or readiness by structural fields.
rule line 39 · specs/consumers/authoring-on-ramp.sdp.md:39
The executable transition is taught as parent example space, child bound point, generated contracts, the oracle bound by a specOracle anchor, and one generated-registrar activation beside the authored suite's top-level specTest anchor, with bindExample named as the low-level adapter and a mutation-probed red result required before the human states ready.
rule line 40 · specs/consumers/authoring-on-ramp.sdp.md:40
Contract-generation refusals are diagnosed through sdp build; query-time validation does not claim to report codegen findings.
rule line 41 · specs/consumers/authoring-on-ramp.sdp.md:41
Verifier-binding queries report graph-visible anchors; the specTest anchor remains the sole has-verifier source, and the graph cannot detect a generated contract or registrar that no authored suite activates.
rule line 42 · specs/consumers/authoring-on-ramp.sdp.md:42
An anchor carries identity, an optional label, its flavor's targets and optional structure, never intent; a code anchor with neither satisfies nor references is identity-only and lawful. A Markdown deliverable binds through the document-realization convention: the suite asserting the shipped document carries the code anchor, and blast radius stays coverage-unknown for the Markdown file.
rule line 43 · specs/consumers/authoring-on-ramp.sdp.md:43
Design Review supplies context for the human readiness statement without becoming a workflow gate.

13 unkeyed rules.

Verification

Verifier bindings

  • test:protocol.authoring-on-ramp · skill-asset checks verify the authoring on-ramp · anchored · test anchor binding present · test/skills.test.ts:277

    External run evidence from test/skills.test.ts

    Test anchors: test:protocol.adopter-on-ramp, test:protocol.authoring-on-ramp, test:protocol.delivery-session-on-ramp, test:protocol.graph-first-planning, test:protocol.reading-on-ramp, test:protocol.studio-on-ramp, test:protocol.vault-on-ramp. Specs verified by those bindings: spec:consumers.adopter-on-ramp, spec:consumers.authoring-on-ramp, spec:consumers.delivery-session-on-ramp, spec:consumers.graph-first-planning, spec:consumers.reading-on-ramp, spec:consumers.studio-on-ramp, spec:consumers.vault-on-ramp.

    Run 2: external run evidence from vitest 4.1.10

    Build: CI 439 · Branch: docs/articles-refresh-1 · Commit: 61576184ea9f39b7f91c51fef5ff991b0bf2d0e6 · Start: 2026-11-04T07:59:39.962Z · Stop: 2026-11-04T08:03:39.928Z

    NameSuiteResultDuration
    discovers the design slice's summary and detail parameternot recordedpassed16.91 ms
    teaches the named-file exception to both carrier-watch descriptionsnot recordedpassed1.72 ms
    teaches the optional priority field in the Pack manifest envelopenot recordedpassed1.29 ms
    teaches design rounds and curates bindings by responsibilitynot recordedpassed5.53 ms
    presents the Protocol engine roles and reviewed boundary as worked examples for adoptersnot recordedpassed1.34 ms
    routes the next work and reviews through roadmap and proposal recipesnot recordedpassed4.22 ms
    keeps planning truth in graph homes and session routing advisoryProtocol skill assetspassed2.2 ms
    rejects missing planning guidance: An open question goesProtocol skill assetspassed3.31 ms
    rejects missing planning guidance: A deferral isProtocol skill assetspassed1.66 ms
    rejects missing planning guidance: An unsettled factProtocol skill assetspassed1.47 ms
    rejects missing planning guidance: A ruling that awaitsProtocol skill assetspassed1.54 ms
    rejects missing planning guidance: A statement a test checksProtocol skill assetspassed1.36 ms
    rejects missing planning guidance: Derive a countProtocol skill assetspassed1.72 ms
    rejects missing planning guidance: Group a body of workProtocol skill assetspassed1.82 ms
    rejects missing planning guidance: Hold advisory priorityProtocol skill assetspassed1.94 ms
    owns skills under .agents and exposes them to Claude through one relative symlinkProtocol skill assetspassed1.17 ms
    ships every skill folder in the package and indexes it in the helpProtocol skill assetspassed1.89 ms
    uses the repository's two-field single-file conventionProtocol skill assetspassed3.52 ms
    keeps every skill graph-first and the authoring law linked to carrying SpecsProtocol skill assetspassed5.36 ms
    names the complete closed graph schema in the shape sectionProtocol skill assetspassed1.85 ms
    routes delivery sessions through the five advisory graph shapesProtocol skill assetspassed1.8 ms
    documents only valid CLI verbs and keeps root-specific exclusions intactProtocol skill assetspassed6.86 ms
    uses the local runtime or package runner instead of a colliding global binaryProtocol skill assetspassed3.42 ms
    contains no contradictory shortcuts for readiness or verifier realizationProtocol skill assetspassed4.59 ms
    states no recipe-catalog size in an on-rampProtocol skill assetspassed34.39 ms
    maps a task to every catalog recipe in one sheetthe graph-reading on-ramppassed14 ms
    links the Specs that own the graph contract, the claims and the sinkthe graph-reading on-ramppassed1 ms
    teaches every Markdown section owner and links the carrying grammaradopter teachingpassed1.66 ms
    teaches open-question homeadopter rule meaningspassed2.09 ms
    teaches blocking flooradopter rule meaningspassed4.13 ms
    teaches blocking deferraladopter rule meaningspassed2.22 ms
    teaches deferral triggeradopter rule meaningspassed2.04 ms
    teaches deferral preconditionadopter rule meaningspassed2.02 ms
    teaches independent defined flooradopter rule meaningspassed2.09 ms
    teaches complete example childrenadopter rule meaningspassed1.9 ms
    teaches example vocabulary agreementadopter rule meaningspassed1.82 ms
    teaches physical entry lineadopter rule meaningspassed4 ms
    teaches one leading prose owneradopter rule meaningspassed1.86 ms
    teaches Note is refusedadopter rule meaningspassed1.81 ms
    teaches ready reads parentadopter rule meaningspassed1.96 ms
    teaches ready waits for defined parentadopter rule meaningspassed2.59 ms
    teaches unsettled constraint homeadopter rule meaningspassed4.3 ms
    teaches unsettled blocking checkadopter rule meaningspassed2.64 ms
    teaches bounded relationadopter rule meaningspassed1.93 ms
    teaches bounded defined allowedadopter rule meaningspassed1.95 ms
    teaches bounded ready waitsadopter rule meaningspassed1.91 ms
    teaches pending decision below readyadopter rule meaningspassed1.88 ms
    teaches shaping relationadopter rule meaningspassed2.01 ms
    teaches owner states readyadopter rule meaningspassed1.89 ms
    teaches checked statement homeadopter rule meaningspassed2.15 ms
    teaches checking example relationadopter rule meaningspassed1.95 ms
    teaches example test bindingadopter rule meaningspassed1.88 ms
    teaches derived verifier factadopter rule meaningspassed1.96 ms
    teaches verifier existence versus passingadopter rule meaningspassed5 ms
    teaches CI owns outcomesadopter rule meaningspassed2.16 ms
    teaches no authored checked statusadopter rule meaningspassed1.92 ms
    teaches fresh derived counts registers scopeadopter rule meaningspassed3.63 ms
    teaches census sourceadopter rule meaningspassed1.98 ms
    teaches open-question register sourceadopter rule meaningspassed1.91 ms
    teaches dependency register sourceadopter rule meaningspassed1.94 ms
    teaches mention register sourceadopter rule meaningspassed2.05 ms
    teaches delta scope sourceadopter rule meaningspassed1.94 ms
    teaches no quoted countsadopter rule meaningspassed1.9 ms
    teaches operator-selected policyadopter rule meaningspassed1.87 ms
    teaches per-file policy parametersadopter rule meaningspassed1.97 ms
    teaches separate policy findingsadopter rule meaningspassed1.88 ms
    teaches policy failuresadopter rule meaningspassed4.78 ms
    teaches watch policy rereadsadopter rule meaningspassed2.56 ms
    teaches Constraints leading-prose exceptionadopter rule meaningspassed2.03 ms
    teaches one primary owneradopter rule meaningspassed2.19 ms
    rejects the opposite teaching for independent defined floor: defined floor does not read the parent's readinessadopter rule meaningspassed5.41 ms
    rejects the opposite teaching for independent defined floor: defined floor does not read the parent's readinessadopter rule meaningspassed4.02 ms
    rejects the opposite teaching for example vocabulary agreement: complete and match the parent's example vocabulary, when it has oneadopter rule meaningspassed2.11 ms
    rejects the opposite teaching for ready reads parent: ready floor does read the parent's readinessadopter rule meaningspassed2.07 ms
    rejects the opposite teaching for physical entry line: a wrapped or indented continuation is refusedadopter rule meaningspassed2.05 ms
    rejects the opposite teaching for one leading prose owner: Leading prose may stand under that owner or under Example space, not bothadopter rule meaningspassed2.02 ms
    rejects the opposite teaching for Note is refused: The parser reads - Note: x as a key and refuses itadopter rule meaningspassed2.07 ms
    rejects the opposite teaching for open-question home: An open question goes under Intent's ### Open questions.adopter rule meaningspassed2.12 ms
    accepts a harmless open-question instruction frameadopter rule meaningspassed2 ms
    defined examples ignore parent readiness but read its vocabulary: matches=trueadopter rule meaningspassed3.57 ms
    defined examples ignore parent readiness but read its vocabulary: matches=falseadopter rule meaningspassed0.7 ms
    teaches the Intent grammar rowadopter rule meaningspassed1.01 ms
    teaches the Intent grammar rowadopter rule meaningspassed0.88 ms
    teaches the Behavior grammar rowadopter rule meaningspassed0.85 ms
    teaches the Rule grammar rowadopter rule meaningspassed0.87 ms
    teaches the Workflow grammar rowadopter rule meaningspassed0.86 ms
    teaches the Workflow grammar rowadopter rule meaningspassed0.87 ms
    teaches the Contract grammar rowadopter rule meaningspassed0.95 ms
    teaches the Example space grammar rowadopter rule meaningspassed0.85 ms
    teaches the Example space grammar rowadopter rule meaningspassed0.88 ms
    teaches the Constraints grammar rowadopter rule meaningspassed0.97 ms
    teaches the Constraints grammar rowadopter rule meaningspassed0.94 ms
    teaches the Constraints grammar rowadopter rule meaningspassed0.93 ms
    teaches the Model grammar rowadopter rule meaningspassed0.82 ms
    teaches the Model grammar rowadopter rule meaningspassed0.89 ms
    teaches the Design grammar rowadopter rule meaningspassed0.86 ms
    teaches the Design grammar rowadopter rule meaningspassed3.1 ms
    teaches the Decision grammar rowadopter rule meaningspassed0.91 ms
    teaches the Decision grammar rowadopter rule meaningspassed3.26 ms
    teaches the UI grammar rowadopter rule meaningspassed0.84 ms
    teaches the Verification — <mode> grammar rowadopter rule meaningspassed0.87 ms
    teaches the Verification — <mode> grammar rowadopter rule meaningspassed0.92 ms
    teaches the Verification — <mode> grammar rowadopter rule meaningspassed0.9 ms
    keeps graph-reader verifier teaching about existence and CI outcomesadopter rule meaningspassed1.5 ms
    keeps session teaching advisory and separate from permissionadopter rule meaningspassed0.86 ms
    the README teaches commit pinadopter install and upgrade guidancepassed0.59 ms
    the README teaches npm script approvaladopter install and upgrade guidancepassed0.56 ms
    the README teaches npm git approvaladopter install and upgrade guidancepassed0.54 ms
    the README teaches pnpm repository approvaladopter install and upgrade guidancepassed2.72 ms
    the README teaches pnpm 10 exact approvaladopter install and upgrade guidancepassed0.51 ms
    the README teaches installed CLI checkadopter install and upgrade guidancepassed3.53 ms
    the README teaches vitest subpath requirementadopter install and upgrade guidancepassed0.54 ms
    the README teaches recipe subject as paramsadopter install and upgrade guidancepassed0.49 ms
    glosses the format and the file, and the README defines them the same waythe carrier's two levelspassed0.85 ms
    refuses wrapped continuationtaught grammar agrees with parser behaviorpassed3 ms
    refuses indented continuationtaught grammar agrees with parser behaviorpassed0.41 ms
    allows leading prose under either owner and refuses it under bothtaught grammar agrees with parser behaviorpassed2.22 ms
    refuses Note as a plain Rule entrytaught grammar agrees with parser behaviorpassed0.47 ms
    refuses Note as a plain Workflow entrytaught grammar agrees with parser behaviorpassed0.35 ms
    refuses Note as a plain Contract entrytaught grammar agrees with parser behaviorpassed0.39 ms
    refuses Note as a plain Verification — manual entrytaught grammar agrees with parser behaviorpassed1.08 ms
    refuses unique Model terms duplicatestaught grammar agrees with parser behaviorpassed0.88 ms
    refuses unique Design keys duplicatestaught grammar agrees with parser behaviorpassed0.31 ms
    refuses unique UI keys via Design form duplicatestaught grammar agrees with parser behaviorpassed0.32 ms
    refuses single Intent actor duplicatestaught grammar agrees with parser behaviorpassed0.87 ms
    refuses single Intent problem duplicatestaught grammar agrees with parser behaviorpassed0.39 ms
    refuses single Intent outcome duplicatestaught grammar agrees with parser behaviorpassed0.28 ms
    refuses single Intent value duplicatestaught grammar agrees with parser behaviorpassed0.26 ms
    refuses single Constraints statement duplicatestaught grammar agrees with parser behaviorpassed0.44 ms
    refuses single Constraints flavor duplicatestaught grammar agrees with parser behaviorpassed0.28 ms
    refuses single Constraints target duplicatestaught grammar agrees with parser behaviorpassed0.31 ms
    refuses single Constraints measurableBy duplicatestaught grammar agrees with parser behaviorpassed0.26 ms
    refuses single Decision context duplicatestaught grammar agrees with parser behaviorpassed0.42 ms
    refuses single Decision decision duplicatestaught grammar agrees with parser behaviorpassed0.24 ms
    allows Behavior alone and refuses a second primary ownertaught grammar agrees with parser behaviorpassed0.91 ms
    allows Rule alone and refuses a second primary ownertaught grammar agrees with parser behaviorpassed0.81 ms
    allows Workflow alone and refuses a second primary ownertaught grammar agrees with parser behaviorpassed0.37 ms
    allows Contract alone and refuses a second primary ownertaught grammar agrees with parser behaviorpassed0.37 ms
    allows leading prose in Design and refuses it in Constraintstaught grammar agrees with parser behaviorpassed0.82 ms
    allows the taught repeatable Intent entriestaught grammar agrees with parser behaviorpassed0.38 ms
    allows the taught repeatable Decision entriestaught grammar agrees with parser behaviorpassed0.41 ms
    extracts the key the skill's marker carries and resolves the address the skill gives itthe taught question markerpassed25.51 ms
    leaves the address unresolved when the key stands outside the bracketsthe taught question markerpassed5.91 ms
    creates the anchored suite before generating, and the build places the registrar beside itthe reviewed skill teachingpassed46.02 ms
    keys a step in the vocabulary, as the step-key law and the contract generator agreethe reviewed skill teachingpassed11.48 ms
    owns publishing in one reader section that agrees with each verb's flagsthe reviewed skill teachingpassed3.97 ms
    names the vault's owned folder, the person's notes and the roots a vault run removesthe reviewed skill teachingpassed1.1 ms
    teaches entry addresses, term addresses and anchored source citations as the engine derives themthe reviewed skill teachingpassed31.26 ms
    states what an empty or ready answer establishes and no morethe reviewed skill teachingpassed2.13 ms
    teaches a refused bundle as the end of pagination, as recipe 36 refusesthe reviewed skill teachingpassed16.24 ms
    keeps corpus rules in one section whose composed rules file runs as taughtthe reviewed skill teachingpassed15.12 ms
    points every skill at the installed upgrade guide and triggers authoring on upgrades and rulesthe reviewed skill teachingpassed8.24 ms
    orders the reader as a task route and leaves recipe contracts to the catalogthe reviewed skill teachingpassed1.83 ms
    names as entry adapters exactly the ones the demand map rules, apart from the reader joinsthe reviewed skill teachingpassed981.15 ms
    states the graph's flat topology and which node types carry lines, as the graph doesthe reviewed skill teachingpassed24.79 ms
    is its own shipped skill, which the reading skill points tothe Studio on-ramppassed1.27 ms
    starts from what the agent holdsthe Studio on-ramppassed0.4 ms
    teaches the publishing run as the studio and generate verbs take itthe Studio on-ramppassed88.22 ms
    teaches stamping and the preview workflow as the workflow declares themthe Studio on-ramppassed11.61 ms
    has the preview's run evidence checked against the stamp, never assumed to match itthe Studio on-ramppassed6 ms
    maps each task to a page the Studio writes, and states what a page does notthe Studio on-ramppassed65.25 ms
    receives the composing panel's hand-off through the proposal checkthe Studio on-ramppassed19.69 ms
    cites resolving Studio Specs for law and leaves flags to each verb's helpthe Studio on-ramppassed257.75 ms
    is its own shipped skill, which the reading skill points tothe vault on-ramppassed5.07 ms
    places the vault where the command accepts itthe vault on-ramppassed6.31 ms
    keeps the person's notes outside the folder the command ownsthe vault on-ramppassed0.8 ms
    teaches synchronizing and watching as the verbs and the failed index state themthe vault on-ramppassed0.77 ms
    names every refusal the guard prints and how to recover from itthe vault on-ramppassed1.19 ms
    converts a note's links back to the addresses the vault wrote, then checks the proposalthe vault on-ramppassed61.94 ms
    takes the proposal's base from the graph the person read, never from the latest synchronizationthe vault on-ramppassed12.13 ms
    cites resolving vault Specs for law and leaves flags to the verb's helpthe vault on-ramppassed188.18 ms
  • test:protocol.spec-scaffolder · anchored · test anchor binding present · test/cli-new-spec.test.ts:127

    External run evidence from test/cli-new-spec.test.ts

    Test anchors: test:protocol.spec-scaffolder. Specs verified by those bindings: spec:consumers.authoring-on-ramp.

    Run 2: external run evidence from vitest 4.1.10

    Build: CI 439 · Branch: docs/articles-refresh-1 · Commit: 61576184ea9f39b7f91c51fef5ff991b0bf2d0e6 · Start: 2026-11-04T07:59:39.962Z · Stop: 2026-11-04T08:03:39.928Z

    NameSuiteResultDuration
    leaves help to the command dispatcher and parses only scaffold argumentssdp new specpassed3.31 ms
    documents the scaffolder on the public help surfacesdp new specpassed0.87 ms
    prints focused help for sdp new spec --helpsdp new specpassed1.08 ms
    emits exact idea-rung bytes for kind behavior with a bare Behavior headingsdp new specpassed16.9 ms
    emits exact idea-rung bytes for kind workflow with a bare Workflow headingsdp new specpassed3.96 ms
    emits exact idea-rung bytes for kind rule with a bare Rule headingsdp new specpassed3.27 ms
    emits exact idea-rung bytes for kind model with a bare Model headingsdp new specpassed3.66 ms
    emits exact idea-rung bytes for kind decision with a bare Decision headingsdp new specpassed3.56 ms
    emits exact idea-rung bytes for kind contract with a bare Contract headingsdp new specpassed2.98 ms
    emits exact idea-rung bytes for kind example with a bare Behavior headingsdp new specpassed2.89 ms
    emits the no-twin constraint scaffold: envelope, title, and Intent onlysdp new specpassed2.8 ms
    places the carrier at the cwd-relative PATH, creating parent directoriessdp new specpassed3.45 ms
    accepts a .pack.sdp.md path when the envelope names a Specsdp new specpassed18.95 ms
    refuses to overwrite an existing target and leaves its bytes unchangedsdp new specpassed1.26 ms
    refuses a second write to the same PATH and keeps the first scaffold intactsdp new specpassed2.96 ms
    refuses an unknown kind and writes no bytessdp new specpassed0.9 ms
    refuses an invalid spec id and writes no bytessdp new specpassed0.97 ms
    refuses an invalid altitude and writes no bytessdp new specpassed0.7 ms
    refuses a missing title and writes no bytessdp new specpassed0.68 ms
    refuses a multiline title and writes no bytessdp new specpassed0.89 ms
    refuses a title holding U+2028 and writes no bytessdp new specpassed0.75 ms
    refuses a title holding a lone CR and writes no bytessdp new specpassed0.79 ms
    refuses a missing outcome and writes no bytessdp new specpassed0.83 ms
    refuses an outcome holding U+2029 and writes no bytessdp new specpassed0.64 ms
    refuses a multiline outcome and writes no bytessdp new specpassed0.58 ms
    refuses a path that escapes cwd and writes no bytessdp new specpassed0.68 ms
    refuses an absolute path and writes no bytessdp new specpassed0.64 ms
    refuses a non-markdown path and writes no bytessdp new specpassed0.72 ms
    refuses missing required flags before creating a filesdp new specpassed0.73 ms
    extracts and validates every scaffolded kind with readiness staying ideasdp new specpassed36.94 ms
    validates a cwd-relative scaffold through the real validate verb with 0 errorssdp new specpassed18.2 ms
    rejects an existing parent symlink that escapes cwd before any outside writesdp new specpassed3.07 ms
    rejects an escaping closest-existing ancestor before creating nested parentssdp new specpassed1.42 ms
    cannot use an in-cwd parent symlink to bypass containmentsdp new specpassed3.36 ms
    rechecks the created parent boundary after mkdir and refuses a swapped outside parentsdp new specpassed3.3 ms
    refuses a post-check parent relocation and removes the scaffold from the held directorysdp new specpassed2.55 ms
    refuses extractor-rejected raw HTML outcome text before creating a filesdp new specpassed1.65 ms
    refuses other extractor-rejected outcome text and still writes no filesdp new specpassed1.47 ms
    accepts lawful Markdown and plain-text outcomes that the extractor already acceptssdp new specpassed6.8 ms
    does not treat new as an unknown top-level commandsdp new specpassed0.4 ms
    creates missing parents through the held directory when its path is swapped before mkdirnot recordedpassed2.24 ms
    refuses a statically planted escaping parent before attempting any parent creationsdp new spec containment checkpointspassed1.27 ms
    refuses before creating a parent when the directory that would hold it moved outsdp new spec containment checkpointspassed1.86 ms
    refuses right after entering a parent swapped for an escaping linksdp new spec containment checkpointspassed2.37 ms
    refuses when the original working directory vanishes during parent creationsdp new spec containment checkpointspassed2.09 ms
    refuses before the write when the held parent moved out after the last parent checksdp new spec containment checkpointspassed1.89 ms
Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
Requirement drawing for spec:consumers.authoring-on-ramp
The diagram as text
  • spec:consumers.authoring-on-ramp: Authors move one Spec from intent to reviewed evidence · declared Spec
  • spec:consumers.adopter-on-ramp: An adopter learns graph homes, carrier grammar and shipped paths from the on-ramps · declared Spec
  • spec:consumers.delivery-session-on-ramp: Delivery sessions route work from current graph state · declared Spec
  • spec:consumers.graph-first-planning: The next body of work is planned from the graph, not from a prose index · declared Spec
  • spec:consumers.shipped-protocol-corpus: The package ships the Specs and on-ramps its skills cite · declared Spec
  • spec:consumers.upgrade-kit: The upgrade kit shows a corpus what it could adopt · declared Spec
  • spec:consumers.validate-watch: Validation re-runs while an author edits carriers · declared Spec
  • spec:consumers.readiness-planner: The readiness planner orders the statements a person can make · declared Spec
  • spec:consumers.roadmap: A roadmap orders the next bodies of work, and the graph says what each still needs · 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
  • impl:protocol.adopter-help: SDP_HELP_TEXT indexes the shipped skills, recipe catalog, schema, walkthrough, glossary and specs/ by package-relative path · anchored code · src/cli/help.ts:171
  • impl:protocol.adopter-on-ramp: asserts realization of the shipped adopter teaching in the authoring skill · anchored code · test/skills.test.ts:713
  • impl:protocol.authoring-on-ramp: asserts realization of the shipped graph-first authoring skill document · anchored code · test/skills.test.ts:77
  • impl:protocol.delivery-session-on-ramp: asserts realization of the shipped advisory delivery-session skill document · anchored code · test/skills.test.ts:84
  • impl:protocol.graph-first-planning: realizes placement homes and advisory session guidance in the shipped skills · anchored code · test/skills.test.ts:291
  • impl:protocol.shipped-protocol-corpus: asserts the published package ships the Protocol corpus · anchored code · test/package-smoke.test.ts:277
  • impl:protocol.spec-scaffolder: scaffolds an honest idea-rung Markdown Spec through sdp new spec · anchored code · src/cli/new-spec-command.ts:358
  • impl:protocol.upgrade-guide: realizes the shipped upgrade guide document · anchored code · test/upgrade-kit.test.ts:87
  • impl:protocol.validate-watch: watches carrier directories and coalesces events into a pending validation rerun · anchored code · src/cli/validate-watch.ts:924
  • test:protocol.adopter-on-ramp: skill-asset checks verify the adopter on-ramp · anchored test binding · binding present · test/skills.test.ts:720
  • test:protocol.authoring-on-ramp: skill-asset checks verify the authoring on-ramp · anchored test binding · binding present · test/skills.test.ts:277
  • test:protocol.delivery-session-on-ramp: skill-asset checks verify advisory delivery-session routing · anchored test binding · binding present · test/skills.test.ts:284
  • test:protocol.graph-first-planning: checks placement homes and advisory graph-first session guidance · anchored test binding · binding present · test/skills.test.ts:297
  • test:protocol.shipped-protocol-corpus: package smoke checks verify the shipped corpus · anchored test binding · binding present · test/package-smoke.test.ts:284
  • test:protocol.spec-scaffolder: test:protocol.spec-scaffolder · anchored test binding · binding present · test/cli-new-spec.test.ts:127
  • test:protocol.upgrade-guide: test:protocol.upgrade-guide · anchored test binding · binding present · test/upgrade-kit.test.ts:94
  • test:protocol.validate-watch: watch-loop checks verify the validate --watch authoring loop · anchored test binding · binding present · test/cli.test.ts:1692
  • test:protocol.validate-watch-rules: process checks verify operator stop during active corpus rules · anchored test binding · binding present · test/corpus-rules.test.ts:351
  • spec:consumers.adopter-on-ramp refines spec:consumers.authoring-on-ramp · declared
  • spec:consumers.delivery-session-on-ramp refines spec:consumers.authoring-on-ramp · declared — a work shape routes an agent into one stretch of the authoring path, from capture to review
  • spec:consumers.graph-first-planning refines spec:consumers.authoring-on-ramp · declared — the planning rules specialize graph-first authoring for capturing and reading the next body of work
  • spec:consumers.readiness-planner refines spec:consumers.graph-first-planning · declared — the planner is an advisory planning recipe that orders nothing the Protocol enforces
  • spec:consumers.roadmap refines spec:consumers.graph-first-planning · declared — a roadmap is advisory reading of the graph for choosing the next work
  • spec:consumers.shipped-protocol-corpus refines spec:consumers.authoring-on-ramp · declared
  • 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
  • spec:consumers.validate-watch refines spec:consumers.authoring-on-ramp · declared
  • impl:protocol.adopter-help satisfies spec:consumers.adopter-on-ramp · anchored
  • impl:protocol.adopter-on-ramp satisfies spec:consumers.adopter-on-ramp · anchored
  • impl:protocol.authoring-on-ramp satisfies spec:consumers.authoring-on-ramp · anchored
  • impl:protocol.delivery-session-on-ramp satisfies spec:consumers.delivery-session-on-ramp · anchored
  • impl:protocol.graph-first-planning satisfies spec:consumers.graph-first-planning · anchored
  • impl:protocol.shipped-protocol-corpus satisfies spec:consumers.shipped-protocol-corpus · anchored
  • impl:protocol.spec-scaffolder satisfies spec:consumers.authoring-on-ramp · anchored
  • impl:protocol.upgrade-guide satisfies spec:consumers.upgrade-kit · anchored
  • impl:protocol.validate-watch satisfies spec:consumers.validate-watch · anchored
  • test:protocol.adopter-on-ramp verifies spec:consumers.adopter-on-ramp · anchored
  • test:protocol.authoring-on-ramp verifies spec:consumers.authoring-on-ramp · anchored
  • test:protocol.delivery-session-on-ramp verifies spec:consumers.delivery-session-on-ramp · anchored
  • test:protocol.graph-first-planning verifies spec:consumers.graph-first-planning · anchored
  • test:protocol.shipped-protocol-corpus verifies spec:consumers.shipped-protocol-corpus · anchored
  • test:protocol.shipped-protocol-corpus verifies spec:consumers.adopter-on-ramp · anchored
  • test:protocol.spec-scaffolder verifies spec:consumers.authoring-on-ramp · anchored
  • test:protocol.upgrade-guide verifies spec:consumers.upgrade-kit · anchored
  • test:protocol.validate-watch verifies spec:consumers.validate-watch · anchored
  • test:protocol.validate-watch-rules verifies spec:consumers.validate-watch · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

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

Decisions

  • Bindings are optional, plural, and may reference a design

    On a code anchor, satisfies is optional and plural; on a test anchor, verifies is plural and non-empty. The constant form accepts one ref(…) or a fresh array literal of them. Each resolving target confers its fact, and implemented stays a whole-Spec fact. An anchored edge references runs from a CodeNode to a Spec, from references?: readonly SpecId[] on a code anchor; it may target any Spec, decisions included, confers no delivery fact, moves no readiness floor, and the drift alarm ignores it. It says this code answers to that design without claiming to realize it: the unit follows the design without realizing any of its promises, or realizes part of a Spec whose remaining promises no unit yet realizes, so a change to the design asks the code to follow. A design that builds on existing code states that by a typed relation to the Spec the code satisfies, never by a reference from the code. A target named in both satisfies and references is an error. An identity-only code anchor, with no satisfies and no references, is lawful: it mints a CodeNode for structure and for byFile, and nothing else.

  • The comment form is a second anchor representation

    An anchor has two extracted representations that feed one closed envelope, the constant form as ruled and a comment form. The comment form is a top-level /** … */ block in a .ts or .tsx file carrying reserved camelCase, TSDoc-compatible tags; @sdpAnchor <id> opens it, and the id's namespace selects the flavor exactly as the constant builders do. Comment prose still authors nothing: only the reserved tags are read, and a comment that does not open with /** is never read. Trust is by reserved grammar, not by builder import, so no import is required. The same id in two forms is a duplicate id. The package also ships a zero-dependency subpath @libar-dev/software-delivery-protocol/anchors exporting the id builders and the three anchor builders and nothing else, for runtimes that may import but must not load node:* modules or ts-morph; the extractor trusts that specifier as a Protocol builder module.

  • Architectural significance is annotated where it is realized

    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.

Runtime
  • component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:31 · layer edge · context protocol

    Uses

    • component:protocol.adapters · external runtime and source adapters · src/adapters/vitest.ts:23 · layer adapter · context protocol
    • component:protocol.codegen · contracts and registrar output · src/codegen/contracts.ts:671 · layer application · context protocol
    • component:protocol.extract · the carrier and source pipeline · src/extract/index.ts:197 · layer application · context protocol
    • component:protocol.graph · the one graph and its semantic decisions · src/graph/schema.ts:34 · layer domain · context protocol
    • component:protocol.import · canonical conversion with a fidelity boundary · src/import/import.ts:45 · layer application · context protocol
    • component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · context protocol
    • component:protocol.projections · read-only output, layout and owned publication · src/projections/design-review.ts:29 · layer edge · context protocol
    • component:protocol.reader · the typed graph contract and body evaluator · src/reader/reader.ts:697 · layer application · context protocol
    • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:76 · layer domain · context protocol
  • impl:protocol.authoring-on-ramp · asserts realization of the shipped graph-first authoring skill document · test/skills.test.ts:77

    Uses

    None.

  • impl:protocol.spec-scaffolder · scaffolds an honest idea-rung Markdown Spec through sdp new spec · src/cli/new-spec-command.ts:358

    Component: component:protocol.cli · entry points, shared build and publication · src/cli/build-command.ts:31 · layer edge · context protocol

    Uses

    None.

Runtime observation: not tracked.

Evidence

Runtime observation: not tracked.

Build attestations: not tracked.

Deployments: not tracked.

Bills of materials: not tracked.

Impact
Relations of spec:consumers.authoring-on-ramp
Relations of spec:consumers.authoring-on-ramprefines · declareddependsOn · declareddecidedBy · declareddecidedBy · declareddecidedBy · declaredrefines · declaredrefines · declaredrefines · declaredrefines · declaredrefines · declaredOutgoing dependsOnspec:consumers.authoring-on-ramp.fold.Outgoing.dependsOn7 Outgoing dependsOn, folded…consumers.authoring-on-ramp.fold.Outgoing.dependsOnOutgoing decidedByspec:decisions.anchor-binding-grainBindings are optional,plural, and may reference adesign…decisions.anchor-binding-grainspec:decisions.anchor-comment-formThe comment form is asecond anchor representation…decisions.anchor-comment-formspec:decisions.architectural-annotationArchitectural significanceis annotated where it isrealized…decisions.architectural-annotationSubjectspec:consumers.authoring-on-rampAuthors move one Spec fromintent to reviewed evidence…consumers.authoring-on-rampIncoming refinesspec:consumers.adopter-on-rampAn adopter learns graphhomes, carrier grammar andshipped paths from theon-ramps…consumers.adopter-on-rampspec:consumers.delivery-session-on-rampDelivery sessions routework from current graphstate…consumers.delivery-session-on-rampspec:consumers.graph-first-planningThe next body of work isplanned from the graph, notfrom a prose index…consumers.graph-first-planningspec:consumers.shipped-protocol-corpusThe package ships the Specsand on-ramps its skills cite…consumers.shipped-protocol-corpusspec:consumers.upgrade-kitThe upgrade kit shows acorpus what it could adopt…consumers.upgrade-kitspec:consumers.validate-watchValidation re-runs while anauthor edits carriers…consumers.validate-watch
The diagram as text
  • spec:carrier.gherkin-authoring: Gherkin authoring enters the one graph
  • spec:carrier.markdown-pack-authoring: A Pack has a Markdown manifest carrier
  • spec:consumers.adopter-on-ramp: An adopter learns graph homes, carrier grammar and shipped paths from the on-ramps
  • spec:consumers.authoring-on-ramp: Authors move one Spec from intent to reviewed evidence
  • spec:consumers.delivery-session-on-ramp: Delivery sessions route work from current graph state
  • spec:consumers.edit-model: Views compose scoped intent instead of patching canonical source
  • spec:consumers.graph-first-planning: The next body of work is planned from the graph, not from a prose index
  • spec:consumers.shipped-protocol-corpus: The package ships the Specs and on-ramps its skills cite
  • spec:consumers.upgrade-kit: The upgrade kit shows a corpus what it could adopt
  • spec:consumers.validate-watch: Validation re-runs while an author edits carriers
  • spec:decisions.anchor-binding-grain: Bindings are optional, plural, and may reference a design
  • spec:decisions.anchor-comment-form: The comment form is a second anchor representation
  • spec:decisions.architectural-annotation: Architectural significance is annotated where it is realized
  • spec:model.open-question-fields: An open question may name who decides it, its links, a provisional reading and a re-entry trigger
  • spec:model.open-question-keys: An open question may carry a key that addresses it
  • spec:model.relation-reasons: An authored relation may carry its reason
  • spec:model.rule-keys: A rule or flow entry may carry a key that addresses it
  • spec:consumers.authoring-on-ramp decidedBy spec:decisions.anchor-binding-grain · declared — the skill teaches optional and plural targets, references and the collective promise test under this ruling
  • spec:consumers.authoring-on-ramp decidedBy spec:decisions.anchor-comment-form · declared — the skill teaches both extracted anchor forms and their silent non-binding hazards under this ruling
  • spec:consumers.authoring-on-ramp decidedBy spec:decisions.architectural-annotation · declared
  • spec:consumers.authoring-on-ramp dependsOn spec:carrier.gherkin-authoring · declared
  • spec:consumers.authoring-on-ramp dependsOn spec:carrier.markdown-pack-authoring · declared
  • spec:consumers.authoring-on-ramp dependsOn spec:consumers.edit-model · declared — an author edits the canonical carrier as the edit model states, never through a derived view
  • spec:consumers.authoring-on-ramp dependsOn spec:model.open-question-fields · declared
  • spec:consumers.authoring-on-ramp dependsOn spec:model.open-question-keys · declared
  • spec:consumers.authoring-on-ramp dependsOn spec:model.relation-reasons · declared
  • spec:consumers.authoring-on-ramp dependsOn spec:model.rule-keys · declared
  • spec:consumers.adopter-on-ramp refines spec:consumers.authoring-on-ramp · declared
  • spec:consumers.delivery-session-on-ramp refines spec:consumers.authoring-on-ramp · declared — a work shape routes an agent into one stretch of the authoring path, from capture to review
  • spec:consumers.graph-first-planning refines spec:consumers.authoring-on-ramp · declared — the planning rules specialize graph-first authoring for capturing and reading the next body of work
  • spec:consumers.shipped-protocol-corpus refines spec:consumers.authoring-on-ramp · declared
  • 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.validate-watch refines spec:consumers.authoring-on-ramp · declared
Mermaid source

Copyable source; the Studio draws static SVG.

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

Rests on

Rested on by

Distance 1

Distance 2

Distance 3

Distance 4

Distance 5

Distance 6

Relations

Relation and directionOther endClaimReasonExercised keys
decidedBy · outgoingBindings are optional, plural, and may reference a design
spec:decisions.anchor-binding-grain · resolves
declaredthe skill teaches optional and plural targets, references and the collective promise test under this rulingNone
decidedBy · outgoingThe comment form is a second anchor representation
spec:decisions.anchor-comment-form · resolves
declaredthe skill teaches both extracted anchor forms and their silent non-binding hazards under this rulingNone
decidedBy · outgoingArchitectural significance is annotated where it is realized
spec:decisions.architectural-annotation · resolves
declaredNoneNone
dependsOn · outgoingGherkin authoring enters the one graph
spec:carrier.gherkin-authoring · resolves
declaredNoneNone
dependsOn · outgoingA Pack has a Markdown manifest carrier
spec:carrier.markdown-pack-authoring · resolves
declaredNoneNone
dependsOn · outgoingViews compose scoped intent instead of patching canonical source
spec:consumers.edit-model · resolves
declaredan author edits the canonical carrier as the edit model states, never through a derived viewNone
dependsOn · outgoingAn open question may name who decides it, its links, a provisional reading and a re-entry trigger
spec:model.open-question-fields · resolves
declaredNoneNone
dependsOn · outgoingAn open question may carry a key that addresses it
spec:model.open-question-keys · resolves
declaredNoneNone
dependsOn · outgoingAn authored relation may carry its reason
spec:model.relation-reasons · resolves
declaredNoneNone
dependsOn · outgoingA rule or flow entry may carry a key that addresses it
spec:model.rule-keys · resolves
declaredNoneNone
refines · incomingAn adopter learns graph homes, carrier grammar and shipped paths from the on-ramps
spec:consumers.adopter-on-ramp · resolves
declaredNoneNone
refines · incomingDelivery sessions route work from current graph state
spec:consumers.delivery-session-on-ramp · resolves
declareda work shape routes an agent into one stretch of the authoring path, from capture to reviewNone
refines · incomingThe next body of work is planned from the graph, not from a prose index
spec:consumers.graph-first-planning · resolves
declaredthe planning rules specialize graph-first authoring for capturing and reading the next body of workNone
refines · incomingThe package ships the Specs and on-ramps its skills cite
spec:consumers.shipped-protocol-corpus · resolves
declaredNoneNone
refines · incomingThe upgrade kit shows a corpus what it could adopt
spec:consumers.upgrade-kit · resolves
declaredthe kit moves a whole corpus onto the capabilities the on-ramp teaches one Spec at a timeNone
refines · incomingValidation re-runs while an author edits carriers
spec:consumers.validate-watch · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.authoring-on-ramp · asserts realization of the shipped graph-first authoring skill document · test/skills.test.ts:77
  • impl:protocol.spec-scaffolder · scaffolds an honest idea-rung Markdown Spec through `sdp new spec` · src/cli/new-spec-command.ts:358 · role service · component component:protocol.cli · layer edge · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.authoring-on-ramp · skill-asset checks verify the authoring on-ramp · anchored · test/skills.test.ts:277 · test anchor
  • test:protocol.spec-scaffolder · anchored · test/cli-new-spec.test.ts:127 · 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.