Spec Studio

A Pack is a truth-free review aggregate

spec:model.pack-aggregateDomain Model · storyready floor ready

Packs: pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/model/pack-aggregate.sdp.md

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

Intent
outcome
Let reviewers group related Specs without introducing a second truth-bearing artifact.
Model
Pack line 18 · specs/model/pack-aggregate.sdp.md:18
An authored aggregate that groups related Specs for ideation and review while stating no system truth of its own.
framing line 19 · specs/model/pack-aggregate.sdp.md:19
A plain descriptive note explaining why a Pack exists; it is not Spec intent.
membership line 20 · specs/model/pack-aggregate.sdp.md:20
A declared manifest reference that derives a belongsTo edge; a Spec may belong to many Packs.
modelRefs line 21 · specs/model/pack-aggregate.sdp.md:21
References from a Pack to standalone model Specs that carry shared vocabulary.
priority order line 22 · specs/model/pack-aggregate.sdp.md:22
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.
refinement line 23 · specs/model/pack-aggregate.sdp.md:23
A truth-bearing parent-child relation, distinct from the cross-cutting Pack aggregate.
Verification

Verifier bindings

  • test:protocol.pack-builder · Pack builder tests verify the truth-free review aggregate · anchored · test anchor binding present · test/builders.test.ts:37

    External run evidence from test/builders.test.ts

    Test anchors: test:protocol.core-model, test:protocol.pack-builder, test:protocol.relation-builders. Specs verified by those bindings: spec:model.core-model, spec:model.pack-aggregate, spec:model.relations.

    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
    enriches one Spec envelope while keeping all three coordinates independentbuilderspassed41.72 ms
    derives delivery facts directly without propagating realization through refinementbuilderspassed6.3 ms
    builds plain serializable specs with declared relationsbuilderspassed0.87 ms
    builds packs as plain manifests with no authored truth fieldsbuilderspassed0.54 ms
    builds identity-only anchors as plain serializable objectsbuilderspassed0.42 ms
  • test:protocol.roadmap-priority · checks Pack priority extraction, comparison and Studio change notes · anchored · test anchor binding present · test/roadmap-priority.test.ts:44

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

    Test anchors: test:protocol.roadmap-priority. Specs verified by those bindings: spec:carrier.markdown-pack-authoring, spec:consumers.design-diff, spec:consumers.spec-studio.diff-page, spec:consumers.spec-studio.pack-page, spec:extraction.pack-member-order, spec:model.pack-aggregate.

    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
    derives equal Markdown and TypeScript Pack nodes and edges, serializes order last, and exposes it through the readerroadmap priority manifestpassed45.69 ms
    refuses the invalid Markdown value readingroadmap priority manifestpassed1.85 ms
    refuses the invalid Markdown value arbitraryroadmap priority manifestpassed1.57 ms
    refuses the invalid Markdown value trueroadmap priority manifestpassed1.49 ms
    refuses the invalid Markdown value nullroadmap priority manifestpassed1.94 ms
    refuses the invalid Markdown value []roadmap priority manifestpassed1.71 ms
    refuses the invalid Markdown value {}roadmap priority manifestpassed1.43 ms
    refuses the invalid TypeScript value "reading"roadmap priority manifestpassed7.24 ms
    refuses the invalid TypeScript value "arbitrary"roadmap priority manifestpassed2.88 ms
    refuses the invalid TypeScript value trueroadmap priority manifestpassed3.36 ms
    refuses the invalid TypeScript value nullroadmap priority manifestpassed3.31 ms
    refuses the invalid TypeScript value []roadmap priority manifestpassed9.61 ms
    refuses the invalid TypeScript value {}roadmap priority manifestpassed3.83 ms
    refuses the invalid TypeScript value undefinedroadmap priority manifestpassed2.87 ms
    refuses the invalid TypeScript value chosenOrderroadmap priority manifestpassed4.04 ms
    names a removed Pack by its order meaning (priority true)roadmap priority design diffpassed19.39 ms
    names a removed Pack by its order meaning (priority false)roadmap priority design diffpassed17.38 ms
    names an added roadmap and preserves manifest order in its member deltaroadmap priority design diffpassed26.27 ms
    labels Pack membership by its order meaning (priority true)roadmap priority design diffpassed15.16 ms
    labels Pack membership by its order meaning (priority false)roadmap priority design diffpassed6.39 ms
    states order values when a change is not a known roadmap transitionroadmap priority design diffpassed11.93 ms
    documents the order comparison fields, default and diagnostic in the recipe contractroadmap priority design diffpassed1.3 ms
    compares a priority transition to true without a membership editroadmap priority design diffpassed10.9 ms
    compares a priority transition to false without a membership editroadmap priority design diffpassed6.76 ms
    reads an absent order as reading order in a base schema that predates the fieldroadmap priority design diffpassed14.49 ms
    marks the absent side of an added or removed roadmap as null (true)roadmap priority design diffpassed10.48 ms
    marks the absent side of an added or removed roadmap as null (false)roadmap priority design diffpassed4.24 ms
    diagnoses an unknown order at the base without reporting an order changeroadmap priority design diffpassed3.41 ms
    diagnoses an unknown order at the head without reporting an order changeroadmap priority design diffpassed4.06 ms
    still compares membership and member order when the base order is unknownroadmap priority design diffpassed5.37 ms
    still compares membership and member order when the head order is unknownroadmap priority design diffpassed9.28 ms
    keeps an order-only change in the selected Pack's comparison scoperoadmap priority design diffpassed3.1 ms
    shows no roadmap transition for a membership-only change (priority true)roadmap priority design diffpassed8.38 ms
    shows no roadmap transition for a membership-only change (priority false)roadmap priority design diffpassed7.43 ms
    shows the roadmap transition to true on the diff and Pack pagesroadmap priority design diffpassed8.78 ms
    shows the roadmap transition to false on the diff and Pack pagesroadmap priority design diffpassed17.15 ms
Design view

Requirement drawing

Requirement drawing for spec:model.pack-aggregate
The diagram as text
  • spec:model.pack-aggregate: A Pack is a truth-free review aggregate · declared Spec
  • spec:carrier.markdown-pack-authoring: A Pack has a Markdown manifest carrier · declared Spec
  • spec:decisions.pack-reified: Packs group review context without becoming truth · declared Spec
  • spec:carrier.markdown-pack-authoring.markdown-ts-parity: A Markdown Pack twin matches its TypeScript manifest · declared Spec
  • spec:carrier.markdown-pack-authoring.spec-envelope-refused: A Spec key on a Pack envelope is refused · declared Spec
  • spec:model.core-model: The Protocol models delivery with one enrichable Spec · declared Spec
  • impl:protocol.markdown-pack-authoring: reifies the Markdown Pack manifest into the one carrier path · anchored code · src/extract/markdown-pack.ts:117
  • impl:protocol.markdown-yaml-policy: bounded YAML scalars and relation-target forms · anchored code · src/extract/markdown-yaml-policy.ts:33
  • impl:protocol.pack-aggregate: Pack aggregate and model references · anchored code · src/model/pack.ts:23
  • impl:protocol.static-reification: reifies authored carriers from the AST and never evaluates them · anchored code · src/extract/reify.ts:2139
  • test:protocol.markdown-pack-authoring.markdown-ts-parity: the parity point verifies equal Markdown and TypeScript Pack derivation · anchored test binding · binding present · test/self-hosting-pack-markdown.test.ts:241
  • test:protocol.markdown-pack-authoring.spec-envelope-refused: the refusal point verifies the Markdown Pack closed envelope · anchored test binding · binding present · test/self-hosting-pack-markdown.test.ts:247
  • test:protocol.pack-builder: Pack builder tests verify the truth-free review aggregate · anchored test binding · binding present · test/builders.test.ts:37
  • test:protocol.roadmap-priority: checks Pack priority extraction, comparison and Studio change notes · anchored test binding · binding present · test/roadmap-priority.test.ts:44
  • spec:carrier.markdown-pack-authoring refines spec:model.pack-aggregate · declared
  • spec:carrier.markdown-pack-authoring.markdown-ts-parity refines spec:carrier.markdown-pack-authoring · declared
  • spec:carrier.markdown-pack-authoring.markdown-ts-parity verifies spec:carrier.markdown-pack-authoring · declared
  • spec:carrier.markdown-pack-authoring.spec-envelope-refused refines spec:carrier.markdown-pack-authoring · declared
  • spec:carrier.markdown-pack-authoring.spec-envelope-refused verifies spec:carrier.markdown-pack-authoring · declared
  • spec:decisions.pack-reified refines spec:model.pack-aggregate · declared
  • spec:model.pack-aggregate refines spec:model.core-model · declared
  • impl:protocol.markdown-pack-authoring satisfies spec:carrier.markdown-pack-authoring · anchored
  • impl:protocol.markdown-yaml-policy satisfies spec:carrier.markdown-pack-authoring · anchored
  • impl:protocol.pack-aggregate satisfies spec:model.pack-aggregate · anchored
  • impl:protocol.static-reification satisfies spec:carrier.markdown-pack-authoring · anchored
  • test:protocol.markdown-pack-authoring.markdown-ts-parity verifies spec:carrier.markdown-pack-authoring.markdown-ts-parity · anchored
  • test:protocol.markdown-pack-authoring.spec-envelope-refused verifies spec:carrier.markdown-pack-authoring.spec-envelope-refused · anchored
  • test:protocol.pack-builder verifies spec:model.pack-aggregate · anchored
  • test:protocol.roadmap-priority verifies spec:carrier.markdown-pack-authoring · anchored
  • test:protocol.roadmap-priority verifies spec:model.pack-aggregate · 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

  • Packs group review context without becoming truth

    A Pack declares membership and framing while stating no system truth; Specs may belong to many Packs.

  • A roadmap states advisory priority in the graph

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

Runtime
  • component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · context protocol

    Uses

    None.

  • impl:protocol.pack-aggregate · Pack aggregate and model references · src/model/pack.ts:23

    Component: component:protocol.model · the authored contracts and stable ids · src/model/anchors.ts:100 · layer domain · 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:model.pack-aggregate
The diagram as text
  • spec:carrier.markdown-pack-authoring: A Pack has a Markdown manifest carrier
  • spec:decisions.pack-reified: Packs group review context without becoming truth
  • spec:decisions.roadmap-priority: A roadmap states advisory priority in the graph
  • spec:model.core-model: The Protocol models delivery with one enrichable Spec
  • spec:model.pack-aggregate: A Pack is a truth-free review aggregate
  • spec:validation.pack-coherence: Packs are coherent aggregates
  • spec:model.pack-aggregate decidedBy spec:decisions.pack-reified · declared
  • spec:model.pack-aggregate decidedBy spec:decisions.roadmap-priority · declared
  • spec:model.pack-aggregate refines spec:model.core-model · declared
  • spec:validation.pack-coherence dependsOn spec:model.pack-aggregate · declared — membership and modelRefs use the Pack model
  • spec:carrier.markdown-pack-authoring refines spec:model.pack-aggregate · declared
  • spec:decisions.pack-reified refines spec:model.pack-aggregate · 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 · outgoingPacks group review context without becoming truth
spec:decisions.pack-reified · resolves
declaredNoneNone
decidedBy · outgoingA roadmap states advisory priority in the graph
spec:decisions.roadmap-priority · resolves
declaredNoneNone
refines · outgoingThe Protocol models delivery with one enrichable Spec
spec:model.core-model · resolves
declaredNoneNone
dependsOn · incomingPacks are coherent aggregates
spec:validation.pack-coherence · resolves
declaredmembership and modelRefs use the Pack modelNone
refines · incomingA Pack has a Markdown manifest carrier
spec:carrier.markdown-pack-authoring · resolves
declaredNoneNone
refines · incomingPacks group review context without becoming truth
spec:decisions.pack-reified · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.pack-aggregate · Pack aggregate and model references · src/model/pack.ts:23 · role contract · component component:protocol.model · layer domain · context protocol

Design reference: none

Verifier binding: present

  • test:protocol.pack-builder · Pack builder tests verify the truth-free review aggregate · anchored · test/builders.test.ts:37 · test anchor
  • test:protocol.roadmap-priority · checks Pack priority extraction, comparison and Studio change notes · anchored · test/roadmap-priority.test.ts:44 · 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.