|
| 1 | +# Session 196 — Replace ts-prune with Knip + Dead Code Cleanup |
| 2 | + |
| 3 | +**Date:** 2026-03-30 |
| 4 | +**Version:** 1.1.843 → 1.1.844 |
| 5 | +**Scope:** Quality gate upgrade — replace deprecated ts-prune with knip; remove verified dead code across the entire codebase. |
| 6 | + |
| 7 | +## Context |
| 8 | + |
| 9 | +ts-prune (v0.10.3) is deprecated and no longer maintained. Knip is its recommended successor with broader capabilities: unused files, unused dependencies, unused exports, and duplicate exports detection. The project had accumulated dead code from older feature iterations (idea collector, flow wizard, session store, diagram editor modules, recovery subsystem). |
| 10 | + |
| 11 | +## What Was Done |
| 12 | + |
| 13 | +### 1. Tooling Swap |
| 14 | +- Uninstalled `ts-prune`, installed `knip` as devDependency. |
| 15 | +- Created `knip.json` with workspace-aware config: root entry points (`extension.ts`, `index.tsx` for webview and project-manager), plus 9 workspace packages. Test files registered as entry points so knip sees their imports. |
| 16 | +- Updated `package.json` script: `check:tsprune` → `check:knip`. |
| 17 | +- Updated `.husky/pre-commit`: `npm run check:tsprune` → `npm run check:knip`. |
| 18 | +- Updated `.github/workflows/ci.yml`: CI step renamed and rewired. |
| 19 | +- Updated `AGENTS.md`, `assets/flow/continuity/create-report-code.md`, `packages/core/src/flow-node-continuity/template-loader.ts` — all ts-prune references replaced with knip. |
| 20 | + |
| 21 | +### 2. Dead Code Verification and Cleanup |
| 22 | +Every file and export flagged by knip was **manually verified via grep** before removal. False positives were identified and preserved. |
| 23 | + |
| 24 | +**Unused files removed (59):** |
| 25 | +- `packages/Claude_Module/src/sdk/` — 2 orphaned usage-limits files |
| 26 | +- `packages/Codex_Module/src/response-policy/` — 1 unused facade |
| 27 | +- `packages/core/src/` — 4 recovery files, 3 unused barrel index.ts files |
| 28 | +- `src/client/project-manager/components/diagram-editor/` — 10 module editor files (closed dead cluster) |
| 29 | +- `src/client/ui/src/` — 35 files: entire idea collector, flow wizard, action-bar, session store, questionnaire subsystems |
| 30 | +- `src/client/ui/src/session/dialog-panel-pending-thinking.ts` — 1 unused file |
| 31 | +- `src/extension-module/ui/index.ts` — empty barrel |
| 32 | +- 7 orphaned test files for deleted modules |
| 33 | + |
| 34 | +**Files kept (false positives):** |
| 35 | +- `packages/core/src/workflow/diagram-dsl/` — 6 parser files (diagram-cluster-parser, diagram-legacy-ownership-parser, diagram-module-parser, diagram-modules-parser, diagram-ownership-parser, diagram-relations-parser) — form a live dependency chain anchored by test imports. Added to knip ignore. |
| 36 | + |
| 37 | +**Unused exports cleaned (105):** |
| 38 | +- ~40 exports: removed `export` keyword (symbol still used locally) |
| 39 | +- ~25 exports: deleted entirely (no local or external usage) |
| 40 | +- ~10 re-exports: removed from barrel files |
| 41 | +- ~30 exports: confirmed as false positives (cross-workspace imports knip couldn't trace) |
| 42 | + |
| 43 | +**Duplicate exports fixed (3):** |
| 44 | +- 2 files had both named + default export of same component; removed redundant named export. |
| 45 | +- 1 file had duplicate function name in barrel; removed. |
| 46 | + |
| 47 | +**Lint fixes (2):** |
| 48 | +- Removed 2 functions that became unused locals after export removal (`normalizeOptionalString`, `calculateRemainingPercent`). |
| 49 | + |
| 50 | +### 3. Knip Configuration |
| 51 | +Final `knip.json` excludes: `unlisted`, `binaries`, `devDependencies`, `types` (high noise, low signal for pre-commit). Active checks: unused files, unused exports, unused dependencies, duplicate exports. |
| 52 | + |
| 53 | +### 4. Release Build |
| 54 | +- v1.1.844 built and verified: all providers, core, CEF launcher, VSIX (1.71 MB). |
| 55 | +- README.md and CHANGELOG.md synced to v1.1.844. |
| 56 | +- Pushed to GitHub. |
| 57 | + |
| 58 | +## Commits |
| 59 | +1. `12029c86` — `refactor: replace ts-prune with knip and remove dead code` |
| 60 | +2. `553e0341` — `chore: prepare v1.1.844 artifacts` |
| 61 | +3. `e2880373` — `docs: sync release docs to v1.1.844` |
| 62 | + |
| 63 | +## Gates |
| 64 | +- `./scripts/check-architecture.sh`: OK |
| 65 | +- `npx ultracite check`: OK (546 files, 0 errors) |
| 66 | +- `npx knip`: OK (0 issues) |
| 67 | +- `tsc --noEmit` (root): OK |
| 68 | +- `tsc -p tsconfig.webview.json`: OK |
| 69 | +- `jscpd` (duplication): OK (2.02%, under 3% threshold) |
| 70 | +- `check-markdown-links`: OK (427 files) |
| 71 | + |
| 72 | +## Stats |
| 73 | +- Files deleted: 59 |
| 74 | +- Lines removed: ~6900 |
| 75 | +- Unused exports cleaned: 105 |
| 76 | +- Net file count change: -59 |
| 77 | + |
| 78 | +## Deferred |
| 79 | +- Phase 104 item 23: move optimistic guard into shared WorkflowStateStore |
| 80 | +- Gemini delay after submit: queueMicrotask() for session ID emission |
| 81 | +- Stale allowlist entry: `packages/Codex_Module/src/sdk/codex-sdk-manager.ts` now at 300 lines — can be removed from debt allowlist |
0 commit comments