docs(ultraplan-local): v2.3.0 — skill-factory Fase 1

Doc sync for /ultra-skill-author-local release:

- CHANGELOG.md: 2.3.0 section above 2.2.0 with full feature narrative,
  pipeline diagram, non-goals, new files list, new stats file
- README.md: command table row + new ## /ultra-skill-author-local section
  describing pipeline, modes, IP-hygiene utility, non-goals
- CLAUDE.md: row in Commands table (committed in Step 1)
- ../../README.md: bumped ultraplan-local row v2.2.0 → v2.3.0,
  expanded division-of-labor with sixth bullet for /ultra-skill-author-local,
  added v2.3 narrative paragraph

Plan: .claude/projects/2026-04-18-skill-factory-fase-1-mvp/plan.md (step 12)
This commit is contained in:
Kjell Tore Guttormsen 2026-04-18 15:26:18 +02:00
commit bba72c8f06
3 changed files with 118 additions and 3 deletions

View file

@ -4,6 +4,71 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [2.3.0] - 2026-04-18
### Added — Skill-factory Fase 1 MVP (`/ultra-skill-author-local`)
Manual one-skill-at-a-time generator for the `cc-architect-catalog`.
Channel 2 of the skill-factory strategy: a curated local source enters,
one draft skill exits in `skills/cc-architect-catalog/.drafts/`, with
n-gram containment scored against the source and stamped into the
draft frontmatter (or the draft is deleted when overlap is too high).
**Why now.** `/ultra-cc-architect-local` (v2.2.0) enforces a
hallucination gate that only permits feature proposals backed by the
catalog. With 10 seed skills covering 8 features × 2 layers, the
`feature-matcher` rarely finds a match and silently produces empty
proposals. Fase 1 unblocks catalog growth without spinning up
automation: one source, one draft, manual review, manual `mv` for
promotion.
**Pipeline.** Sequential, no retry, no parallelism:
```
/ultra-skill-author-local <source>
→ concept-extractor (sonnet, JSON output, gap-class C/D + cc_feature gate)
→ skill-drafter (sonnet, .drafts/<slug>.md with 9-field frontmatter)
→ ip-hygiene-checker (sonnet, runs scripts/ngram-overlap.mjs)
verdict accepted/needs-review → stamp ngram_overlap_score
verdict rejected → rm draft (no preservation)
```
**IP-hygiene utility.** Pure Node stdlib. Word-5-gram containment
similarity (asymmetric draft⊆source) plus longest-consecutive-shingle-
run secondary signal. Verdict bands: accepted (<0.15 AND <8),
needs-review (mid), rejected (≥0.35 OR ≥15). Short-text fallback to
n=4 when min(words) <500. CLI emits JSON.
**Calibration fixtures.** Three source/draft pairs in
`tests/fixtures/skill-factory/` pin the verdict bands against
representative prose: accepted (containment 0.014), needs-review
(0.211), rejected (0.676). Re-verify any threshold change against
these fixtures.
**New files:**
- `commands/ultra-skill-author-local.md`
- `agents/skill-author-orchestrator.md` (opus)
- `agents/concept-extractor.md` (sonnet)
- `agents/skill-drafter.md` (sonnet)
- `agents/ip-hygiene-checker.md` (sonnet)
- `scripts/ngram-overlap.mjs` + `scripts/ngram-overlap.test.mjs`
- `skills/cc-architect-catalog/.drafts/.gitkeep`
- `tests/fixtures/skill-factory/{source,draft}-{accepted,needs-review,rejected}.md`
- `tests/fixtures/skill-factory/README.md`
**Non-goals (explicit, Fase 1):**
- No automation, cron, or watcher
- No CC changelog diffing or auto-research
- No batch processing or review command
- No decision-layer skills (cross-feature comparison is Fase 2+)
- No URL or remote sources — local files only
- Manual `mv` from `.drafts/` to catalog root is the promotion mechanism
**New stats file:**
`${CLAUDE_PLUGIN_DATA}/ultra-skill-author-local-stats.jsonl`.
## [2.2.0] - 2026-04-18
### Added — `/ultra-cc-architect-local` optional pipeline step