What
openspec/specs/dashboards/spec.md declares two different requirements under the same id:
518: ### Requirement: REQ-DASH-015 Single default group-shared dashboard per group
1258: ### Requirement: REQ-DASH-015 Admin group-management UI
They are unrelated: one is a data invariant about default group-shared dashboards, the other is an admin UI surface.
There is also an ambiguous in-spec cross-reference that cannot be resolved to either:
608: 2. The `group_shared` dashboard with `isDefault = 1` in the user's primary group (per REQ-DASH-015).
(From context that one means line 518, but the reference itself does not say so.)
Why it matters
A bare @spec openspec/specs/dashboards/spec.md#req-dash-015 anchor is ambiguous — it can resolve to either requirement, so one test necessarily credits both, and neither the author nor a reviewer can tell which was meant. This is the same family as .github#354 (colliding scenario slugs collapsing to one addressable ref), except here the collision is at requirement level and was introduced by hand rather than by slugification.
Anchor resolution is silent about this: check_spec_anchors.py finds an anchor and passes. So the ambiguity is invisible to every gate.
Workaround currently in place
PR #100 needed to anchor a method to the admin-group-management requirement and used the full disambiguating slug rather than the bare id:
@spec openspec/specs/dashboards/spec.md#req-dash-015-admin-group-management-ui
That resolves correctly today, but it only works because the two headings' trailing text differs — it is a workaround for a duplicate id, not a fix.
Suggested fix
Renumber one of them (the admin group-management UI at line 1258 is the later addition and the likelier candidate), then update any in-repo @spec anchors and the line-608 cross-reference to point at the intended one. Worth a grep for req-dash-015 across lib/, src/ and tests/ before renumbering.
What
openspec/specs/dashboards/spec.mddeclares two different requirements under the same id:They are unrelated: one is a data invariant about default group-shared dashboards, the other is an admin UI surface.
There is also an ambiguous in-spec cross-reference that cannot be resolved to either:
(From context that one means line 518, but the reference itself does not say so.)
Why it matters
A bare
@spec openspec/specs/dashboards/spec.md#req-dash-015anchor is ambiguous — it can resolve to either requirement, so one test necessarily credits both, and neither the author nor a reviewer can tell which was meant. This is the same family as.github#354(colliding scenario slugs collapsing to one addressable ref), except here the collision is at requirement level and was introduced by hand rather than by slugification.Anchor resolution is silent about this:
check_spec_anchors.pyfinds an anchor and passes. So the ambiguity is invisible to every gate.Workaround currently in place
PR #100 needed to anchor a method to the admin-group-management requirement and used the full disambiguating slug rather than the bare id:
That resolves correctly today, but it only works because the two headings' trailing text differs — it is a workaround for a duplicate id, not a fix.
Suggested fix
Renumber one of them (the admin group-management UI at line 1258 is the later addition and the likelier candidate), then update any in-repo
@specanchors and the line-608 cross-reference to point at the intended one. Worth a grep forreq-dash-015acrosslib/,src/andtests/before renumbering.