Skip to content

T-HHR4-retire-skill-forwarders

Status: closed/done · Impact: medium · Complexity: medium

Four skill-side wrapper files survived the sweep through a scope seam: their SKILL.md callers invoke them via ${CLAUDE_PLUGIN_ROOT}skills/… paths — a third invocation class neither T-QL5F-skill-prose-codemod (scoped to scripts|validators) nor T-YBKU-shim-deletion-guard (scoped to directory deletion, gated on zero references) covered. Two also carry real parity gaps. Finish the migration: flip the callers to the verbs, close the parity gaps, delete the wrappers — restoring the S-0001 end-state (skills carry only glue) and the milestone criterion that plugin/lib imports nothing from plugin/skills/.

LocationRole today
plugin/skills/pr-check/classify_pr.tsforwarder over the pr classify op; SKILL.md still invokes it via the skills/ path
plugin/skills/info/info_report.tshouses the report-building core; plugin/lib/services/plugin/ops/info.ts imports FROM it (lib→skills inversion)
plugin/skills/setup/setup_planning.tsretains real --obsidian/--force behavior the project setup op deliberately excluded
plugin/skills/entities-migrate/migrate_entities.tswrapper over @lib/model/ops/migrate; SKILL.md invokes it via the skills/ path
plugin/skills/pr-check/SKILL.mdskills/-path invocation (third class — outside T-QL5F’s scripts/validators grep)
plugin/skills/info/SKILL.mdsame
plugin/skills/setup/SKILL.mdsame
plugin/skills/entities-migrate/SKILL.mdsame

The four wrappers are deleted. Their SKILL.md callers invoke the verbs (sdlc pr classify, sdlc plugin info, sdlc project setup, sdlc entities migrate). project setup gains --obsidian/--force parity (golden-locked against setup_planning.ts before the port). The info-report core moves to plugin/lib/services/plugin/ and the op imports a sibling — zero lib→skills imports. Tests that imported the wrappers re-point to the lib homes; the legacy-path guard gains the skills/<skill>/<helper>.ts invocation class so this third category cannot regrow.

  1. Goldens: setup_planning.ts --obsidian/--force behavior on a tmp root; info_report output (already op-covered, verify).
  2. Port --obsidian/--force into services/project/ops/setup.ts; parity vs goldens.
  3. Move the info-report core into services/plugin/ (op imports sibling); skills/info forwarder dies with its caller flip.
  4. Flip the four SKILL.md call sites to the verbs (one commit per skill, prose gate green each).
  5. Re-point wrapper-importing tests (pr-check in-process classifier tests, setup eval) to lib homes; delete the four wrappers.
  6. Extend check_no_legacy_script_paths.ts to also flag ${CLAUDE_PLUGIN_ROOT}skills/<skill>/*.ts invocations in SKILL.md (allowlist: none).
LocationKindChange
plugin/lib/services/project/ops/setup.tsmodify—obsidian/—force parity
plugin/lib/services/plugin/ops/info.tsmodifyimport sibling core, not skills/
plugin/skills/pr-check/SKILL.mdmodifyinvoke sdlc pr classify
plugin/skills/info/SKILL.mdmodifyinvoke sdlc plugin info
plugin/skills/setup/SKILL.mdmodifyinvoke sdlc project setup
plugin/skills/entities-migrate/SKILL.mdmodifyinvoke sdlc entities migrate
plugin/skills/pr-check/classify_pr.tsdeleteretired
plugin/skills/info/info_report.tsdeletecore moves to lib
plugin/skills/setup/setup_planning.tsdeleteparity ported
plugin/skills/entities-migrate/migrate_entities.tsdeleteretired
.claude/skills/project-check/check_no_legacy_script_paths.tsmodifyguard the skills/-helper class
  • AC-1: grep -rn "skills/" plugin/lib/ → zero import references; the four wrapper files do not exist.
  • AC-2: sdlc project setup --obsidian and --force byte-match the pre-port goldens; setup eval green.
  • AC-3: the four SKILL.md files invoke only sdlc verbs; prose gate + each skill’s evals green; guard red on a planted skills/-helper invocation fixture.
  • AC-4: full bun test no new failures; tsc green; fresh-project smoke green.
  • T-YBKU’s documented deviation (PR #322): four forwarders retained because their callers use a third invocation-path class outside T-QL5F’s contract. Late member task added to M-0003 so the milestone’s “lib imports nothing from skills” criterion closes honestly.

T-YBKU-shim-deletion-guard


← Back to Tasks