skills/upgrade-pack-generator/SKILL.md
Generate repo-local dependency upgrade packs under `.agents/plans/upgrade/topic-slug/` with a playbook, trigger prompt, operator mode, and canonical manifest. Use when Codex needs to research an anchor package, expand related dependencies, detect target repo context, and create a reusable upgrade folder before any implementation work starts.
npx skillsauth add bjornmelin/dev-skills upgrade-pack-generatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate upgrade-pack folders for dependency families in two stages:
The generator is monorepo-aware. During enrichment it must lock an explicit owner surface for the family:
The generated pack is docs/research only. Do not implement package changes while generating the pack.
Read references/workflow.md.
Decide the mode:
Detect repo context first:
python3 scripts/detect_repo_context.py --repo-root /path/to/repo --json
Bootstrap a manifest from the anchor package:
python3 scripts/bootstrap_manifest.py \
--repo-root /path/to/repo \
--anchor-package lucide-react \
--out /tmp/upgrade-pack.yaml
Enrich the manifest with live repo probes and official upstream guidance:
python3 scripts/enrich_manifest.py --manifest /tmp/upgrade-pack.yaml
Refine the enriched manifest further with live research when needed:
$repo-modernizer$opensrc$technical-writing$hard-cutValidate the manifest:
python3 scripts/validate_upgrade_pack.py /tmp/upgrade-pack.yaml
Run read-only research:
python3 scripts/research_upgrade_pack.py --manifest /tmp/upgrade-pack.yaml
Run the mandatory web.run confirmation pass for required official docs and
API-reference pages from research-bundle.json and record the results in
web-research-findings.json.
Re-run read-only research so the snapshot reflects the confirmed official pages:
python3 scripts/research_upgrade_pack.py --manifest /tmp/upgrade-pack.yaml
Run read-only qualification:
python3 scripts/qualify_upgrade_pack.py --manifest /tmp/upgrade-pack.yaml
Render the pack:
python3 scripts/render_upgrade_pack.py \
--manifest /tmp/upgrade-pack.yaml \
--output-dir /path/to/repo/.agents/plans/upgrade/<topic>
Every generated repo-local pack must contain exactly:
upgrade-pack.yamlresearch-snapshot.jsonresearch-bundle.jsonweb-research-findings.jsonqualification-snapshot.json<basename>-playbook.md<basename>-trigger-prompt.md<basename>-operator-mode.mdThe manifest is the canonical source. The markdown files are rendered outputs.
research-snapshot.json and qualification-snapshot.json are the canonical
machine-readable evidence files for the separate research and qualify stages.
research-bundle.json is the raw evidence ledger that backs the research
snapshot.
web-research-findings.json is the machine-readable record of web.run
confirmation for the required official pages.
Rendered file roles:
<basename>-playbook.md
<basename>-operator-mode.md
<basename>-trigger-prompt.md
Do not hand-maintain operator-mode.md or trigger-prompt.md; regenerate them
from the manifest.
Read references/manifest-schema.md before editing any override.
Family overrides live in references/family-overrides/. Use them when a
dependency family recurs across repos and benefits from package-specific:
Current built-in family lanes:
lucide-reactnextjsexpo-easconvexturboreposhadcn-radix-uiKeep overrides narrow. Put only family-specific information there. Let the base generator provide the common structure.
Detect the target repo command family in this order:
package.json#packageManagerThe generator should write that decision into upgrade-pack.yaml and render
package-manager-aware command variables into the pack. Do not force Bun into a
pnpm/npm/Yarn repo.
Use the default research lanes in references/research-lanes.md.
Conditional routing:
$bun-dev only when Bun posture is actually relevant$imagegen unless raster asset generation is truly part
of the package-family surfacescripts/detect_repo_context.py
scripts/bootstrap_manifest.py
upgrade-pack.yaml from generic defaults plus an optional
family overridescripts/enrich_manifest.py
upgrade-pack.yaml with family-specific repo probes, current
package versions, and live official-doc snapshotsscripts/validate_upgrade_pack.py
scripts/research_upgrade_pack.py
web.run queue into
research-snapshot.json plus research-bundle.jsonscripts/sync_source_map.py
references/source-maps/scripts/qualify_upgrade_pack.py
qualification-snapshot.jsonscripts/render_upgrade_pack.py
Bootstrap a known family override:
python3 scripts/bootstrap_manifest.py \
--repo-root /path/to/repo \
--anchor-package lucide-react \
--out /tmp/lucide-upgrade-pack.yaml
Render a generic pack for a package without an override:
python3 scripts/bootstrap_manifest.py \
--repo-root /path/to/repo \
--anchor-package commander \
--out /tmp/commander-upgrade-pack.yaml
python3 scripts/enrich_manifest.py \
--manifest /tmp/commander-upgrade-pack.yaml
python3 scripts/research_upgrade_pack.py \
--manifest /tmp/commander-upgrade-pack.yaml
python3 scripts/qualify_upgrade_pack.py \
--manifest /tmp/commander-upgrade-pack.yaml
python3 scripts/render_upgrade_pack.py \
--manifest /tmp/commander-upgrade-pack.yaml \
--output-dir /path/to/repo/.agents/plans/upgrade/commander
Refresh an existing repo-local pack after refining the manifest:
python3 scripts/enrich_manifest.py \
--manifest /path/to/repo/.agents/plans/upgrade/lucide-react/upgrade-pack.yaml
python3 scripts/validate_upgrade_pack.py \
/path/to/repo/.agents/plans/upgrade/lucide-react/upgrade-pack.yaml
python3 scripts/research_upgrade_pack.py \
--manifest /path/to/repo/.agents/plans/upgrade/lucide-react/upgrade-pack.yaml
python3 scripts/qualify_upgrade_pack.py \
--manifest /path/to/repo/.agents/plans/upgrade/lucide-react/upgrade-pack.yaml
python3 scripts/render_upgrade_pack.py \
--manifest /path/to/repo/.agents/plans/upgrade/lucide-react/upgrade-pack.yaml \
--output-dir /path/to/repo/.agents/plans/upgrade/lucide-react
development
Pre-PR multi-model review, parallel opus and codex exec adversarial lanes, then adversarial verification of merged findings. Read-only. Use before shipping nontrivial diffs.
tools
Independent gpt-5.6 diff review via the Codex CLI, normal or steerable adversarial with JSON findings. Use before shipping nontrivial changes.
development
Delegate implementation, investigation, or bulk work to gpt-5.6 codex via pinned codex exec. Use for clear-spec builds, migrations, debugging, or any task MODELS.md routes to codex.
development
Adversarial pre-mortem: imagine the plan failed, work backwards to surface risky assumptions + irreversible bets, then harden them. Proactively offer it (after the current request; confirm first) before a hard-to-reverse or one-way-door call (API, schema, framework, a hire), an all-upside plan, or unvalidated assumptions. Also on request.