ktg-plugin-marketplace/plugins/ultra-cc-architect/tests/fixtures/skill-drafter/slug-collision-expected.md
Kjell Tore Guttormsen ab504bdf8c refactor(marketplace): split cc-architect from ultraplan-local into its own plugin
Extract `/ultra-cc-architect-local` and `/ultra-skill-author-local` plus all 7
supporting agents, the `cc-architect-catalog` skill (13 files), the
`ngram-overlap.mjs` IP-hygiene script, and the skill-factory test fixtures
from `ultraplan-local` v2.4.0 into a new `ultra-cc-architect` plugin v0.1.0.

Why: ultraplan-local had drifted into containing two distinct domains — a
universal planning pipeline (brief → research → plan → execute) and a
Claude-Code-specific architecture phase. Keeping them together forced users
to inherit an unfinished CC-feature catalog (~11 seeds) when they only
wanted the planning pipeline, and locked the catalog and the pipeline into
the same release cadence. The architect was already optional and decoupled
at the code level — only one filesystem touchpoint remained
(auto-discovery of `architecture/overview.md`), which already handles
absence gracefully.

Plugin manifests:
- ultraplan-local: 2.4.0 → 3.0.0 (description + keywords updated)
- ultra-cc-architect: new at 0.1.0 (pre-release; catalog is thin, Fase 2/3
  of skill-factory unbuilt, decision-layer empty, fallback list still
  needed)

What stays in ultraplan-local: brief/research/plan/execute commands, all
19 planning agents, security hooks, plan auto-discovery of
`architecture/overview.md` (filesystem-level contract, not code-level).

What moved (28 files via git mv, R100 — full history preserved):
- 2 commands, 8 agents, 1 skill catalog (13 files), 2 scripts, 8 fixtures

Documentation updates: plugin CLAUDE.md and README.md for both plugins,
root README.md (added ultra-cc-architect section, updated ultraplan-local
section), root CLAUDE.md (added ultra-cc-architect to repo-struktur),
marketplace.json (registered ultra-cc-architect), ultraplan-local
CHANGELOG.md (v3.0.0 entry with migration guidance).

Test verification: ngram-overlap.test.mjs passes 23/23 from new location.

Memory updated: feedback_no_architect_until_v3.md now points at the new
plugin and reframes the threshold around catalog maturity rather than an
ultraplan-local milestone.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-30 17:18:47 +02:00

5.9 KiB

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):
    {
      "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:
    {
      "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).