# Skill-drafter slug-collision — expected output fixture

This fixture documents the expected confirmation-message shape from
`skill-drafter` when it detects a slug collision at the catalog root.
It is a reference fixture — not an auto-executed test — used to
verify the agent by running a synthetic scenario by hand and
comparing output against the shapes below.

## Scenario A — no collision (baseline)

### Synthetic input

- **Catalog root:** `skills/cc-architect-catalog/`
- **Concept JSON (from concept-extractor):**
  ```json
  {
    "cc_feature": "worktrees",
    "layer": "pattern",
    "concept": "parallel feature isolation",
    "description": "Isolate concurrent feature work in per-task worktrees to avoid git race conditions.",
    "source_path": "/tmp/worktrees-notes.md",
    "out_of_scope": false
  }
  ```
- **Catalog state at time of run:** no `worktrees-pattern.md` present
  at catalog root (only `worktrees-reference.md`).

### Expected confirmation output

```
Drafted: /Users/…/skills/cc-architect-catalog/.drafts/worktrees-pattern.md
Word count: 312
Frontmatter: 9 fields, review_status=pending, ngram_overlap_score=null
Collision: none
Next: ip-hygiene-checker for IP scoring
```

No warning block. `Collision: none`.

## Scenario B — approved collision (primary case)

### Synthetic input

- **Catalog root:** `skills/cc-architect-catalog/`
- **Concept JSON:**
  ```json
  {
    "cc_feature": "hooks",
    "layer": "pattern",
    "concept": "observability progressive alerts",
    "description": "Progressive-alert observability pattern for hook-driven telemetry.",
    "source_path": "/tmp/hooks-telemetry-notes.md",
    "out_of_scope": false
  }
  ```
- **Catalog state:** `hooks-pattern.md` exists with
  `review_status: approved` (the v2.3.0 seed).

### Expected confirmation output

```
⚠️  Slug collision at catalog root
   Existing: skills/cc-architect-catalog/hooks-pattern.md (review_status=approved)
   Draft:    skills/cc-architect-catalog/.drafts/hooks-pattern.md (this run)
   Risk:     manual `mv` during promotion will silently overwrite the existing file.
   Suggested qualified slug: hooks-observability-pattern.md
   Reason for qualifier:     concept handle names "observability" as the named sub-pattern.
   Action:                   rename the draft before `mv`, or revise the existing baseline.

Drafted: /Users/…/skills/cc-architect-catalog/.drafts/hooks-pattern.md
Word count: 287
Frontmatter: 9 fields, review_status=pending, ngram_overlap_score=null
Collision: approved
Next: ip-hygiene-checker for IP scoring
```

The warning is prepended. The draft is still written — the collision
check is a hint, not a block. `Collision: approved` appears in the
confirmation for downstream-log parsers.

## Scenario C — soft collision (pending existing)

### Synthetic input

- **Catalog state:** `subagents-pattern.md` exists with
  `review_status: pending` (a prior draft that was `mv`-ed up without
  the status being flipped, or a skill-factory auto-merged entry).

### Expected confirmation output

```
⚠️  Slug collision at catalog root
   Existing: skills/cc-architect-catalog/subagents-pattern.md (review_status=pending)
   Draft:    skills/cc-architect-catalog/.drafts/subagents-pattern.md (this run)
   Risk:     manual `mv` during promotion will silently overwrite the existing file.
   Suggested qualified slug: subagents-delegation-pattern.md
   Reason for qualifier:     concept handle centers on "delegation chains".
   Action:                   rename the draft before `mv`, or revise the existing baseline.

Drafted: /Users/…/skills/cc-architect-catalog/.drafts/subagents-pattern.md
Word count: 256
Frontmatter: 9 fields, review_status=pending, ngram_overlap_score=null
Collision: pending
Next: ip-hygiene-checker for IP scoring
```

`Collision: pending` signals a soft collision — the existing file is
not necessarily a guaranteed baseline. Reviewer decides.

## Scenario D — collision but no good qualifier

### Synthetic input

- **Concept handle:** `generic feature note` (no specific noun)
- **Catalog state:** `skills-reference.md` exists (approved).

### Expected confirmation output

```
⚠️  Slug collision at catalog root
   Existing: skills/cc-architect-catalog/skills-reference.md (review_status=approved)
   Draft:    skills/cc-architect-catalog/.drafts/skills-reference.md (this run)
   Risk:     manual `mv` during promotion will silently overwrite the existing file.
   Suggested qualified slug: none — reviewer must pick one manually.
   Action:                   rename the draft before `mv`, or revise the existing baseline.

Drafted: /Users/…/skills/cc-architect-catalog/.drafts/skills-reference.md
Word count: 198
Frontmatter: 9 fields, review_status=pending, ngram_overlap_score=null
Collision: approved
Next: ip-hygiene-checker for IP scoring
```

The fallback line replaces the "Suggested qualified slug" value.
`Reason for qualifier` is omitted.

## How to verify against this fixture

This is not an auto-run test. To verify:

1. Stage a synthetic concept JSON matching one of the scenarios above.
2. Invoke `skill-drafter` via the `Agent` tool with the concept JSON,
   source path, and catalog root.
3. Capture the confirmation output.
4. Compare structurally against the corresponding scenario. The exact
   word counts and paths will differ; the warning block, collision
   field, and suggested-slug line are the load-bearing shapes.

If a future change alters the confirmation format, update this file
alongside the agent prompt so the two remain in lockstep.

## Why a reference fixture and not a unit test

`skill-drafter` is a prompt-driven Sonnet agent. There is no in-repo
harness that executes prompts deterministically, so a unit test is
not practical. The reference fixture is the next-best anchor — it
documents the expected shape for human verification and for
downstream agents that parse the confirmation (e.g., the
skill-author-orchestrator's summary phase).
