{
  "$schema": "https://skill-map.ai/spec/v1/conformance-case.schema.json",
  "id": "extractor-collision-detection",
  "description": "Signal IR resolver phase, range-overlap collision. A body that contains `[@./api.md](./api.md)` triggers a cross-extractor range overlap: `core/markdown-link` matches the whole bracketed-and-parenthesised span; `claude/at-directive` matches the `@./api.md` token INSIDE the bracket text. The two byte ranges overlap (the at-directive range is a strict subset of the markdown-link range). The kernel resolver picks ONE winner per the four-step tiebreak (`kind-priority` -> `higher-confidence` -> `longer-range` -> `earlier-declaration`); markdown-link wins on confidence (0.95 vs 0.85). The resolver materialises the winner as a Link, marks the loser's `resolution.outcome === 'rejected'` with `rejectedBy` naming the winner, and the built-in `core/extractor-collision` analyzer surfaces the rejection as ONE `warn` issue attached to the source node. Locks the contract that range-overlap collisions surface to the operator instead of being silently merged.",
  "fixture": "signal-ir-collision",
  "invoke": {
    "verb": "scan",
    "flags": ["--json"]
  },
  "assertions": [
    { "type": "exit-code", "value": 0 },
    { "type": "json-path", "path": "$.schemaVersion", "equals": 1 },
    { "type": "json-path", "path": "$.stats.linksCount", "equals": 1 },
    { "type": "json-path", "path": "$.links[0].target", "equals": ".claude/agents/api.md" },
    { "type": "json-path", "path": "$.links[0].sources[0]", "equals": "markdown-link" },
    { "type": "json-path", "path": "$.stats.issuesCount", "equals": 1 },
    { "type": "json-path", "path": "$.issues[0].analyzerId", "equals": "extractor-collision" },
    { "type": "json-path", "path": "$.issues[0].severity", "equals": "warn" }
  ]
}
