outcomeTypeScript and Markdown duplicates are both refused
spec:validation.duplicate-ids.dual-carrierPacks: pack:self-hosting-v1
Design: no design entries · no pinned declarations · no decisions
Findings: no errors, no warnings
specs/validation/duplicate-ids.dual-carrier.sdp.md
No open questions and no blocking questions; implementation binding none, verifier binding present, and expected-outcome oracle none.
Given
a {firstCarrier: "TypeScript"} carrier declares {specId: "spec:fixture.duplicate"}
a {secondCarrier: "Markdown"} carrier declares {specId: "spec:fixture.duplicate"}When
the extraction root is read
Then
both sites report {findingId: "extract/duplicate-id"}
no graph node is emitted for {specId: "spec:fixture.duplicate"}Composing needs the script.
Intent
- Execute the duplicate-ID rule across both carrier surfaces.
Behavior
Examples
Given a {firstCarrier: "TypeScript"} carrier declares {specId: "spec:fixture.duplicate"}
Given a {secondCarrier: "Markdown"} carrier declares {specId: "spec:fixture.duplicate"}
When the extraction root is read
Then both sites report {findingId: "extract/duplicate-id"}
Then no graph node is emitted for {specId: "spec:fixture.duplicate"}Verification
Verifier bindings
- test:protocol.duplicate-ids.dual-carrier · dual-carrier duplicate-ID contract verifies carrier exclusion · anchored · test anchor binding present ·
test/self-hosting-duplicate-ids.test.ts:316External run evidence from
test/self-hosting-duplicate-ids.test.tsTest anchors:
test:protocol.duplicate-ids.dual-carrier. Specs verified by those bindings: spec:validation.duplicate-ids, spec:validation.duplicate-ids.dual-carrier.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
Name Suite Result Duration names self-hosting generation before collecting its filtered tracer generated contract preflight passed 45.3 ms names checkout generation before collecting its filtered example generated contract preflight passed 40.68 ms names both generations when an unfiltered suite lacks both contract trees generated contract preflight passed 41.68 ms matches a Vitest substring filter before collecting the self-hosting tracer generated contract preflight passed 35.49 ms matches a ./-prefixed filter before collecting the self-hosting tracer generated contract preflight passed 52.14 ms matches an absolute-path filter before collecting the self-hosting tracer generated contract preflight passed 71.13 ms does not require contracts for an unrelated Vitest filter generated contract preflight passed 109.7 ms proceeds for the unfiltered invocation once both contract trees are generated generated contract preflight passed 113.95 ms fails a pooled run that mutates repository-root generated state pooled root generated-state sentinel passed 88.95 ms passes a pooled run that leaves repository-root generated state untouched pooled root generated-state sentinel passed 68.74 ms derives the duplicate-ID verifier facts from the bound executable example not recorded passed 4854.19 ms executes the bound example against a fresh world TypeScript and Markdown duplicates are both refused (spec:validation.duplicate-ids.dual-carrier) passed 11.49 ms
Design view
Requirement drawing
- Satisfying or referencing units: no recorded binding.
The diagram as text
- spec:validation.duplicate-ids.dual-carrier: TypeScript and Markdown duplicates are both refused · declared Spec
- spec:validation.duplicate-ids: Duplicate carrier IDs are excluded loudly · declared Spec
- test:protocol.duplicate-ids.dual-carrier: dual-carrier duplicate-ID contract verifies carrier exclusion · anchored test binding · binding present ·
test/self-hosting-duplicate-ids.test.ts:316 - spec:validation.duplicate-ids.dual-carrier refines spec:validation.duplicate-ids · declared
- spec:validation.duplicate-ids.dual-carrier verifies spec:validation.duplicate-ids · declared
- test:protocol.duplicate-ids.dual-carrier verifies spec:validation.duplicate-ids.dual-carrier · 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
- E2: verifies · declared
The diagram as text
- spec:validation.duplicate-ids: Duplicate carrier IDs are excluded loudly
- spec:validation.duplicate-ids.dual-carrier: TypeScript and Markdown duplicates are both refused
- spec:validation.duplicate-ids.dual-carrier refines spec:validation.duplicate-ids · declared
- spec:validation.duplicate-ids.dual-carrier verifies spec:validation.duplicate-ids · 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
- refines · spec:validation.duplicate-ids · stated ready, floor ready
Rested on by
No Spec rests on this Spec.
Relations
| Relation and direction | Other end | Claim | Reason | Exercised keys |
|---|---|---|---|---|
| refines · outgoing | Duplicate carrier IDs are excluded loudlyspec:validation.duplicate-ids · resolves | declared | None | None |
| verifies · outgoing | Duplicate carrier IDs are excluded loudlyspec:validation.duplicate-ids · resolves | declared | None | None |
Bindings
Implementation binding: none
Design reference: none
Verifier binding: present
- test:protocol.duplicate-ids.dual-carrier · dual-carrier duplicate-ID contract verifies carrier exclusion · anchored ·
test/self-hosting-duplicate-ids.test.ts:316· 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.