Summary
Two gate-19 refs in openspec/specs/clock-weather-widgets/spec.md are addressable by only one anchor each while describing two different widgets. Same defect class as doriath#215 / .github#354; also confirmed in larpingapp today.
The collision
6: ### Requirement: REQ-CLOCK-001 Register client-side clock widget
10: #### Scenario: Widget appears in discovery
17: #### Scenario: Registration via IManager
...
68: ### Requirement: REQ-WEATHER-001 Register weather widget with server-side fetch
72: #### Scenario: Widget appears in discovery
78: #### Scenario: Registration via IManager
The clock widget and the weather widget declare the same two scenario titles, so both collapse to:
clock-weather-widgets::widget-appears-in-discovery
clock-weather-widgets::registration-via-imanager
These are not near-duplicates — the weather widget has a server-side fetch and an API key that must never reach the browser, the clock widget has no backend endpoint at all (REQ-CLOCK-001 says so explicitly). One anchor covering both is a materially wrong credit.
How it surfaced
--mode report does not de-duplicate; --mode gate does. On development @ 5c7fde7:
| mode |
uncovered |
--mode report |
130 rows |
--mode gate (and CI) |
128 distinct |
The 2-row gap is the collision.
Fix
Rename so each scenario names its widget (e.g. "Clock widget appears in discovery" / "Weather widget appears in discovery").
⚠️ A rename changes the slug. Any @e2e / @spec anchor pointing at the old ref must move in the same change — a dangling anchor is not reported as an error by gate-19.
Summary
Two gate-19 refs in
openspec/specs/clock-weather-widgets/spec.mdare addressable by only one anchor each while describing two different widgets. Same defect class asdoriath#215/.github#354; also confirmed inlarpingapptoday.The collision
The clock widget and the weather widget declare the same two scenario titles, so both collapse to:
These are not near-duplicates — the weather widget has a server-side fetch and an API key that must never reach the browser, the clock widget has no backend endpoint at all (
REQ-CLOCK-001says so explicitly). One anchor covering both is a materially wrong credit.How it surfaced
--mode reportdoes not de-duplicate;--mode gatedoes. Ondevelopment@5c7fde7:--mode report--mode gate(and CI)The 2-row gap is the collision.
Fix
Rename so each scenario names its widget (e.g. "Clock widget appears in discovery" / "Weather widget appears in discovery").
@e2e/@specanchor pointing at the old ref must move in the same change — a dangling anchor is not reported as an error by gate-19.