Spec Studio

A repeated question key refuses its carrier

spec:model.open-question-keys.repeated-key-refusedExample / Scenario · storyready floor ready

Packs: pack:self-hosting-v1

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

Findings: no errors, no warnings

specs/model/open-question-keys.repeated-key-refused.sdp.md

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

Intent
outcome
Execute the uniqueness refusal, and show that the address then names a missing Spec.
assumptions
  • The world is the one of the keyed-question example, with two questions in the first carrier that carry the same key. The first carrier is refused whole, so the graph holds no question key and the address's Spec is absent.
Behavior

Examples

Given a Markdown Spec carrier {specId: "spec:probe.subject"} whose open questions read {questions: "- [blocking #aggregateReach] Does the owner widen the aggregate?; - [non-blocking #aggregateReach] Does the aggregate keep its name?"}
Given a second Spec that names {address: "spec:probe.subject#question.aggregateReach"} in its narrative and declares dependsOn on the first
When the extractor reifies both carriers and the graph is validated
Then the first carrier is reified: {reified: false}
Then the extraction findings name {extractMessage: "open question keys must be unique"}
Then the graph holds the question keys {keys: ""}
Then the report holds {mentionErrors: 1} prose-mention errors
Verification

Verifier bindings

  • test:protocol.open-question-keys.repeated-key-refused · verifies a repeated question key refuses its carrier whole · anchored · test anchor binding present · test/self-hosting-open-question-keys.test.ts:357

    External run evidence from test/self-hosting-open-question-keys.test.ts

    Test anchors: test:protocol.open-question-keys.keyed-question-resolves, test:protocol.open-question-keys.renamed-key-breaks, test:protocol.open-question-keys.repeated-key-refused. Specs verified by those bindings: spec:model.open-question-keys, spec:model.open-question-keys.keyed-question-resolves, spec:model.open-question-keys.renamed-key-breaks, spec:model.open-question-keys.repeated-key-refused.

    Run 1: external run evidence from vitest 4.1.10

    Build: CI 380 · Branch: feature/roadmap-and-slices-v0 · Commit: 34909918bf0be0e849959644401797191cae379f · Start: 2026-10-22T17:40:31.456Z · Stop: 2026-10-22T17:42:16.171Z

    NameSuiteResultDuration
    executes the bound example against a fresh worldA keyed question is reified and its address resolves (spec:model.open-question-keys.keyed-question-resolves)passed25.4 ms
    executes the bound example against a fresh worldA renamed question key fails the mention that addresses it (spec:model.open-question-keys.renamed-key-breaks)passed4.02 ms
    executes the bound example against a fresh worldA repeated question key refuses its carrier (spec:model.open-question-keys.repeated-key-refused)passed2.97 ms
Design view

Requirement drawing

  • Satisfying or referencing units: no recorded binding.
Requirement drawing for spec:model.open-question-keys.repeated-key-refused
The diagram as text
  • spec:model.open-question-keys.repeated-key-refused: A repeated question key refuses its carrier · declared Spec
  • spec:model.open-question-keys: An open question may carry a key that addresses it · declared Spec
  • test:protocol.open-question-keys.repeated-key-refused: verifies a repeated question key refuses its carrier whole · anchored test binding · binding present · test/self-hosting-open-question-keys.test.ts:357
  • spec:model.open-question-keys.repeated-key-refused refines spec:model.open-question-keys · declared
  • spec:model.open-question-keys.repeated-key-refused verifies spec:model.open-question-keys · declared
  • test:protocol.open-question-keys.repeated-key-refused verifies spec:model.open-question-keys.repeated-key-refused · 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

No implementation neighborhood recorded.

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.open-question-keys.repeated-key-refused
  • E2: verifies · declared
The diagram as text
  • spec:model.open-question-keys: An open question may carry a key that addresses it
  • spec:model.open-question-keys.repeated-key-refused: A repeated question key refuses its carrier
  • spec:model.open-question-keys.repeated-key-refused refines spec:model.open-question-keys · declared
  • spec:model.open-question-keys.repeated-key-refused verifies spec:model.open-question-keys · 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

No Spec rests on this Spec.

Relations

Relation and directionOther endClaimReasonExercised keys
refines · outgoingAn open question may carry a key that addresses it
spec:model.open-question-keys · resolves
declaredNoneNone
verifies · outgoingAn open question may carry a key that addresses it
spec:model.open-question-keys · resolves
declaredNonekeyGrammar, markdownMarker

Bindings

Implementation binding: none

Design reference: none

Verifier binding: present

  • test:protocol.open-question-keys.repeated-key-refused · verifies a repeated question key refuses its carrier whole · anchored · test/self-hosting-open-question-keys.test.ts:357 · 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.