Over a graph from any producer, every node whose id is carried by another node receives a conformance/duplicate-ids error; the extractor separately excludes ambiguous authored carriers through extract/duplicate-id.
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"}
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"}
Given a {firstCarrier:string} carrier declares {specId:string}
Given a {secondCarrier:string} carrier declares {specId:string}
When the extraction root is read
Then both sites report {findingId:string}
Then no graph node is emitted for {specId:string}
Verification
Verifier bindings
spec:validation.duplicate-ids.dual-carrier · TypeScript and Markdown duplicates are both refused · declared · example enabled · specs/validation/duplicate-ids.dual-carrier.sdp.md
External run evidence from test/self-hosting-duplicate-ids.test.ts
impl:protocol.duplicate-id-exclusion · excludes duplicated carrier ids from the graph · src/extract/index.ts:93 · role validator · component component:protocol.extract · layer application · context protocol
impl:protocol.duplicate-ids · rejects duplicate node identities from any graph producer · src/validate/validators.ts:263 · role validator · component component:protocol.validate · layer domain · context protocol
Design reference: none
Verifier binding: present
spec:validation.duplicate-ids.dual-carrier · TypeScript and Markdown duplicates are both refused · declared · specs/validation/duplicate-ids.dual-carrier.sdp.md · example enabled