Skip to main content

package-removal

10-step checklist for safely removing one or more packages from the Cacti monorepo. Covers inventory, dependency scan, TypeScript import audit, CI workflow cleanup, tsconfig references, test-tooling helpers, directory deletion, lockfile regeneration, tracking-doc update, and verification pass.

来源信息

仓库
hyperledger-cacti/cacti
最近来源活动
2026年7月8日 19:35
检测到的 SKILL.md 语言
英语
星标
416
Forks
366

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
package-removal
description
10-step checklist for safely removing one or more packages from the Cacti monorepo. Covers inventory, dependency scan, TypeScript import audit, CI workflow cleanup, tsconfig references, test-tooling helpers, directory deletion, lockfile regeneration, tracking-doc update, and verification pass.
# Cacti Package Removal Skill Safe, complete procedure for removing one or more packages from the Hyperledger Cacti Yarn 4 monorepo without leaving stale imports, dangling CI jobs, or broken `tsconfig.json` references. ## Repo Facts - Yarn 4 monorepo, `nodeLinker: pnpm` — no root `node_modules/.bin/`; use `yarn <binary>` in husky hooks, never `npx`. - `lerna.json` autodiscovers packages via globs (`packages/cactus-*`) — no edits needed when removing packages. - Root `tsconfig.json` has **explicit** project references — always remove entries for deleted packages. - macOS `grep` fails with "maximum repetition exceeds 255" on long `|`-alternation patterns — run **one package name per `grep` call**. ## Input You will receive: - **Package name(s)**: one or more `packages/<pkg-name>` directories to remove - **Context** (optional): issue number, cleanup tracking doc path, branch name ## Procedure ### Step 1 — Inventory List every directory targeted for removal and confirm current state: ```bash find packages/ -maxdepth 1 -name "<pattern>" -type d | sort ls packages/<pkg-name>/ ``` A prior partial cleanup may have removed source files but left `dist/` and `node_modules/`; that is fine — `rm -rf` in Step 7 handles it. ### Step 2 — Cross-package `package.json` dependency check For **each** removed package name, run separately (one term per call): ```bash find packages/ examples/ extensions/ -name "package.json" \ -not -path "*/node_modules/*" \ -exec grep -l "<pkg-name>" {} \; ``` Any hit **outside** the package's own directory is a **blocker** — remove that dependency declaration before proceeding. ### Step 3 — TypeScript import check Run once per package name, separately: ```bash grep -r "<pkg-name>" packages/ --include="*.ts" --exclude-dir=node_modules grep -r "<pkg-name>" examples/ --include="*.ts" --exclude-dir=node_modules grep -r "<pkg-name>" extensions/ --include="*.ts" --exclude-dir=node_modules ``` Any `import`/`require` in a surviving package is a **blocker** — resolve it first. ### Step 4 — CI workflow audit ```bash grep -rl "<pkg-name>" .github/ ``` Run once per package name. For each match: | Match type | Action | |---|---| | Job block in a grouped workflow (e.g. `keychain-packages-workflow.yaml`) | Delete the entire job block for the removed package; keep blocks for retained packages | | `workflow_call` reference in a parent workflow (e.g. `packages-workflow.yaml`) | Leave it — an empty grouped workflow is harmless | | Standalone workflow file dedicated to the removed package | Delete the entire file | ### Step 5 — Root `tsconfig.json` project references ```bash grep "<pkg-name>" tsconfig.json ``` If found, remove the corresponding `{ "path": "./packages/<pkg-name>/tsconfig.json" }` entry. ### Step 6 — `cactus-test-tooling` helpers Check whether `packages/cactus-test-tooling/src/main/typescript/` contains a package-specific Docker/container helper, then verify surviving consumers: ```bash grep -r "<HelperClassName>" packages/ --include="*.ts" --exclude-dir=node_modules \ | grep -v "cactus-test-tooling\|<removed-pkg>" ``` | Result | Action | |---|---| | No surviving consumer | Delete the subdirectory; remove its `export { … }` from `packages/cactus-test-tooling/src/main/typescript/public-api.ts` | | Has a surviving consumer | **Keep it** — do not touch the helper or its export | > **Example:** `CactusKeychainVaultServer` had no surviving consumer → removed. > `VaultTestServer` was used by `cactus-plugin-ledger-connector-fabric` → kept. ### Step 7 — Delete package directories ```bash rm -rf packages/<pkg-name> ``` This removes everything including leftover `dist/`, `node_modules/`, and `.tgz` pack artifacts. ### Step 8 — Regenerate `yarn.lock` ```bash yarn install --mode=update-lockfile ``` Removes stale `workspace:` entries for deleted packages from `yarn.lock` without re-linking all dependencies. ### Step 9 — Update `docs/docs/cleanup-4025.md` 1. Add removed packages to the **"Packages Approved for Removal"** table with today's date. 2. In the Review Tables, flip each removed package's `keep?` cell from `−` → `❌` and set action columns to `N/A`. 3. Update **Decision Summary** counts: `Remove/Archive` +N, `No Vote` −N. 4. Append a completion line to the footer: ``` **<Label> Completed:** YYYY-MM-DD — `<branch-name>` ``` ### Step 10 — Verification pass All checks must return empty/clean output before the task is complete: ```bash # No live TypeScript imports grep -r "<pkg-name>" packages/ --include="*.ts" --exclude-dir=node_modules # No package.json dependency declarations find packages/ examples/ extensions/ -name "package.json" \ -not -path "*/node_modules/*" -exec grep -l "<pkg-name>" {} \; # No CI workflow references grep -rl "<pkg-name>" .github/ # No yarn.lock workspace entries grep "<pkg-name>" yarn.lock ``` Acceptable remaining hits: `CHANGELOG.md` files (auto-generated git history), `docs/` tracking documents, and `dist/` build artifacts (stale until next `yarn tsc`). ### Step 11 - Extra verifications Verify references to package being removed, for instance in the docs, CONTRIBUTING.md, `tools/custom-checks/check-dependency-version-consistency`, `jest.config.js`, `openapi-generator-ignore`, `package.json`. Notably, the reference to the package being removed should be removed from the root `tsconfig.ts` as well as from the tsconfig from packages depending on it. Do not remove references from the changelog. ## Output Format After completing all steps, provide: - **Summary**: which packages were removed and any blockers resolved - **Verification**: results of the Step 10 checks - **Residual risk**: anything deferred or not verified (e.g. integration tests not run locally) ## Constraints - Run `grep` with **one package name per call** — never combine multiple names in a `|`-alternation pattern on macOS. - Never edit files under `generated/` directly. - Do not remove `cactus-test-tooling` helpers that have surviving consumers. - Treat any Step 2 or Step 3 blocker as a hard stop — resolve it before deleting the package directory. - Do not `git commit` or `git push` — report what changed and let the user review, stage, and commit. - After completing, hand off to the `code-reviewer` agent to audit: no stale imports, no stale `package.json` deps, CI jobs removed, `tsconfig.json` references cleaned, `yarn.lock` updated, tracking doc updated.
在 GitHub 查看