Spec Studio

Packs are coherent aggregates

spec:validation.pack-coherenceBusiness Rule · storyready floor ready

Packs: pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/validation/pack-coherence.sdp.md

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

A Pack is a review grouping, so a coherent Pack may hold low-detail Specs without turning grouping into implementation demand.

Intent
outcome
Keep review aggregates coherent without treating them as truth-bearing delivery artifacts.
Rule
rule line 20 · specs/validation/pack-coherence.sdp.md:20
Pack membership must not repeat a Spec, and every modelRef must resolve to a model-kind Spec.
rule line 21 · specs/validation/pack-coherence.sdp.md:21
Membership is counted on the derived belongsTo edges the manifest re-expresses, so a repeated manifest entry is named once per repeated member.
rule line 22 · specs/validation/pack-coherence.sdp.md:22
A Pack's members list and its belongsTo edges agree: every listed member has one belongsTo edge into the Pack, and every belongsTo edge into the Pack comes from a listed member. A listed member with no edge, a listed member that is no Spec and no edge carries, and an edge from an unlisted source are each one error, in authored order, so the Pack context, a Spec's packs, and blast radius read the same membership. An edge whose source is absent or no Spec stays referential integrity's or the edge contract's finding, never a second one here.
rule line 23 · specs/validation/pack-coherence.sdp.md:23
There is no duplicated-intent check on a Pack: a Pack states no system truth to duplicate, and semantic overlap among its members remains human or agent review rather than validator judgment.

4 unkeyed rules.

Verifying examples

A repeated member and a non-model modelRef are both named · spec:validation.pack-coherence.incoherent-aggregate · ready floor ready

Executable Spec

Given a pack {packId: "pack:probe.checkout"} lists the spec {specId: "spec:probe.create-order"} {memberCount: 2} times
Given the pack also names that spec as a modelRef
When the graph is validated
Then the report names {findingId: "conformance/pack-coherence"} at severity {severity: "error"}
Then the report holds {findingCount: 2} pack-coherence findings

Open example

Example space

Given a pack {packId:string} lists the spec {specId:string} {memberCount:number} times
Given the pack also names that spec as a modelRef
When the graph is validated
Then the report names {findingId:string} at severity {severity:"warning"|"error"}
Then the report holds {findingCount:number} pack-coherence findings
Verification

Verifier bindings

Example space

  • packId · string · declared by a pack {packId} lists the spec {specId} {memberCount} times
  • specId · string · declared by a pack {packId} lists the spec {specId} {memberCount} times
  • memberCount · number · declared by a pack {packId} lists the spec {specId} {memberCount} times

Bound points

ExamplepackIdspecIdmemberCount
spec:validation.pack-coherence.incoherent-aggregate"pack:probe.checkout""spec:probe.create-order"2

Oracle binding: none

Coverage

packId: "pack:probe.checkout" · spec:validation.pack-coherence.incoherent-aggregate · not enumerable

specId: "spec:probe.create-order" · spec:validation.pack-coherence.incoherent-aggregate · not enumerable

memberCount: 2 · spec:validation.pack-coherence.incoherent-aggregate · not enumerable

Unbound

  • packId: None
  • specId: None
  • memberCount: None
Design view

Requirement drawing

Requirement drawing for spec:validation.pack-coherence
  • E3: refines, verifies · declared
The diagram as text
  • spec:validation.pack-coherence: Packs are coherent aggregates · declared Spec
  • spec:validation.pack-coherence.incoherent-aggregate: A repeated member and a non-model modelRef are both named · declared Spec
  • spec:validation.two-check-families: Validation separates well-formedness from non-pretending · declared Spec
  • impl:protocol.pack-coherence: checks Pack membership agreement and uniqueness and model-reference kinds · anchored code · src/validate/validators.ts:1102
  • test:protocol.pack-coherence.incoherent-aggregate: the incoherent-aggregate point verifies both halves of the pack law · anchored test binding · binding present · test/self-hosting-validators.test.ts:1325
  • spec:validation.pack-coherence refines spec:validation.two-check-families · declared
  • spec:validation.pack-coherence.incoherent-aggregate refines spec:validation.pack-coherence · declared
  • spec:validation.pack-coherence.incoherent-aggregate verifies spec:validation.pack-coherence · declared
  • impl:protocol.pack-coherence satisfies spec:validation.pack-coherence · anchored
  • test:protocol.pack-coherence.incoherent-aggregate verifies spec:validation.pack-coherence.incoherent-aggregate · anchored
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred and chosen syntax: requirementDiagram; exact refines, satisfies and verifies, with claim words in nodes and per-edge comments.

Decisions

No decision record named.

Runtime
  • component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · layer domain · context protocol

    Uses

  • impl:protocol.pack-coherence · checks Pack membership agreement and uniqueness and model-reference kinds · src/validate/validators.ts:1102

    Component: component:protocol.validate · one finding currency and ordered checks · src/validate/validators.ts:72 · 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:validation.pack-coherence
  • E4: verifies · declared
The diagram as text
  • spec:model.pack-aggregate: A Pack is a truth-free review aggregate
  • spec:validation.pack-coherence: Packs are coherent aggregates
  • spec:validation.pack-coherence.incoherent-aggregate: A repeated member and a non-model modelRef are both named
  • spec:validation.two-check-families: Validation separates well-formedness from non-pretending
  • spec:validation.pack-coherence dependsOn spec:model.pack-aggregate · declared — membership and modelRefs use the Pack model
  • spec:validation.pack-coherence refines spec:validation.two-check-families · declared
  • spec:validation.pack-coherence.incoherent-aggregate refines spec:validation.pack-coherence · declared
  • spec:validation.pack-coherence.incoherent-aggregate verifies spec:validation.pack-coherence · 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

Relations

Relation and directionOther endClaimReasonExercised keys
dependsOn · outgoingA Pack is a truth-free review aggregate
spec:model.pack-aggregate · resolves
declaredmembership and modelRefs use the Pack modelNone
refines · outgoingValidation separates well-formedness from non-pretending
spec:validation.two-check-families · resolves
declaredNoneNone
refines · incomingA repeated member and a non-model modelRef are both named
spec:validation.pack-coherence.incoherent-aggregate · resolves
declaredNoneNone
verifies · incomingA repeated member and a non-model modelRef are both named
spec:validation.pack-coherence.incoherent-aggregate · resolves
declaredNoneNone

Bindings

Implementation binding: present

  • impl:protocol.pack-coherence · checks Pack membership agreement and uniqueness and model-reference kinds · src/validate/validators.ts:1102 · role validator · component component:protocol.validate · layer domain · context protocol

Design reference: none

Verifier binding: present

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.