From 95b0f483097e98ba5c4d099a2b44c21490f5ca81 Mon Sep 17 00:00:00 2001 From: Rodolphe Stoclin Date: Wed, 2 Sep 2026 16:09:19 +0200 Subject: [PATCH 1/3] chore: run the action on node24, refresh v12 backlog The action declared 'using: node20'. GitHub already force-migrates node20 actions to node24 and warns on every run, and the bundle targets node22+, so pin node24 explicitly in both manifests. Verified the built bundle minifies a file end-to-end on a modern runtime (exit 0, 31.25% reduction). The v12 backlog had drifted from the shipped code: - item 1 listed deprecated type-alias detection as outstanding, but v11 shipped it (plus @node-minify/run and engines.node scanners) - it claimed the compressor registry carries a GCC caveat via a 'notes' field; CompressorEntry has no such field, so a v12 implementer would look for something that does not exist - post-release ops listed all 5 removed compressors as pending npm deprecation, but only @node-minify/run is still undeprecated Also record the two release traps this cycle exposed: GITHUB_TOKEN cannot create the major tag, and scripts/publish.ts exits 0 on publish failure. --- action.yml | 2 +- docs/plans/2026-06-22-v12-backlog.md | 25 ++++++++++++++++++------- packages/action/action.yml | 2 +- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/action.yml b/action.yml index 5ac7b68fb..e7fb2b29a 100644 --- a/action.yml +++ b/action.yml @@ -107,5 +107,5 @@ outputs: description: "Full benchmark results as JSON string" runs: - using: "node20" + using: "node24" main: "packages/action/dist/index.js" diff --git a/docs/plans/2026-06-22-v12-backlog.md b/docs/plans/2026-06-22-v12-backlog.md index 71dfc6319..2ebaf8fac 100644 --- a/docs/plans/2026-06-22-v12-backlog.md +++ b/docs/plans/2026-06-22-v12-backlog.md @@ -2,20 +2,21 @@ Items deliberately deferred out of the v11 cleanup release (`docs/plans/2026-03-14-v11-plan.md`). None of these block v11. Captured here so the deferrals don't rot into "later means never". -Status as of 2026-06-22 (v11 branch `v11-cleanup`, ready to merge). +Status as of 2026-09-02: v11.0.0 is published to npm and tagged. Items below are the remaining deferrals, re-checked against the shipped code. --- -## 1. Finish `node-minify doctor` scanners (v11 spec gap) +## 1. Add GCC runtime guidance to `node-minify doctor` -**What**: The v11 plan (`docs/plans/2026-03-14-v11-plan.md` lines 70–71) specced two `doctor` detections that were not implemented: +**Shipped in v11, no longer deferred**: deprecated type-alias detection. `doctor` flags `CompressorReturnType` (→ `CompressorResult`) and `MinifyOptions` (→ `Settings`) in TypeScript imports and re-exports, ignoring comments and template literals. It also gained detection for the removed `@node-minify/run` package and for `engines.node` ranges that still allow Node below 22. + +**Still outstanding**: -- **Deprecated type-alias usage** — flag source importing/using `CompressorReturnType` (→ `CompressorResult`) or `MinifyOptions` (→ `Settings`). - **Java/GCC runtime guidance** — surface a note when a project uses `google-closure-compiler`, pointing at the runtime caveat (Java may still be invoked upstream) and recommended JS-native alternatives. -**Why deferred**: `doctor` already detects the real migration blockers (removed packages in `package.json`, source imports, workflow YAML) plus legacy-tier warnings. The two missing scanners are migration *nice-to-haves*, not blockers. +**Why deferred**: `doctor` already detects every v11 breaking change. This is migration polish, not a blocker. -**Where**: `packages/cli/src/doctor.ts` (add two scanners + reporter cases), `packages/cli/__tests__/doctor.test.ts` (clean/dirty cases for each). Registry already carries the GCC `runtime caveat` note via `notes` in `packages/utils/src/compressor-registry.ts`. +**Where**: `packages/cli/src/doctor.ts` (add one scanner + reporter case), `packages/cli/__tests__/doctor.test.ts` (clean/dirty cases). Note: `CompressorEntry` in `packages/utils/src/compressor-registry.ts` has only `name`, `status`, `packageName` and optional `replacement` — there is **no** `notes` field, so the caveat text needs adding along with the scanner. **Effort**: Small. Mirrors the existing removed-package scanner pattern. @@ -87,4 +88,14 @@ Status as of 2026-06-22 (v11 branch `v11-cleanup`, ready to merge). ## Post-release ops (not code — track separately) -- **npm-deprecate the 5 removed packages** on the registry after v11 publishes: `@node-minify/babel-minify`, `@node-minify/uglify-es`, `@node-minify/yui`, `@node-minify/sqwish`, `@node-minify/crass`. Point each deprecation message at its replacement (see registry `replacement` field). v11 assumption deferred this as a post-release concern. +Status checked against the registry on 2026-09-02, after v11.0.0 published. + +- **Done**: the 5 removed compressors are already deprecated on npm — `@node-minify/babel-minify`, `@node-minify/uglify-es`, `@node-minify/yui`, `@node-minify/sqwish`, `@node-minify/crass`. Each message names its replacement. +- **Outstanding**: `@node-minify/run` is removed in v11 but **not** deprecated on npm, so it still installs silently at `10.5.0`. Deprecate it with: + + ```bash + npm deprecate @node-minify/run "@node-minify/run was removed in v11. It was an internal Java/process-spawn helper with no public replacement; remove it from your dependencies." + ``` + +- **Release tagging**: `GITHUB_TOKEN` cannot create a tag whose tree adds `.github/workflows/*`, so the major tag (`v11`) had to be pushed manually. Every future major hits this. Fix with a fine-grained PAT (contents + workflows write) stored as a secret, or by excluding workflow files from the tagged tree. +- **Publish failures are silent**: `scripts/publish.ts` catches every `npm publish` error as "may already exist" and still exits 0, so a real failure is indistinguishable from a no-op. Verify published versions against the registry rather than trusting a green Publish run. diff --git a/packages/action/action.yml b/packages/action/action.yml index 35a752487..47d0b192c 100644 --- a/packages/action/action.yml +++ b/packages/action/action.yml @@ -107,5 +107,5 @@ outputs: description: "Full benchmark results as JSON string" runs: - using: "node20" + using: "node24" main: "dist/index.js" From 1da559fae4eee7167b3d4ae3edf8ea483f250dda Mon Sep 17 00:00:00 2001 From: Rodolphe Stoclin Date: Wed, 2 Sep 2026 16:18:09 +0200 Subject: [PATCH 2/3] docs: describe publish failures as non-fatal, not silent CodeRabbit on the v12 backlog: scripts/publish.ts does log 'Failed to publish ...' and 'Failed to create tags ...', so calling the failures silent is inaccurate. Confirmed at scripts/publish.ts:146-151. The actual defect is that it still exits 0, so CI cannot tell a real failure from a no-op. --- docs/plans/2026-06-22-v12-backlog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plans/2026-06-22-v12-backlog.md b/docs/plans/2026-06-22-v12-backlog.md index 2ebaf8fac..c73fa1442 100644 --- a/docs/plans/2026-06-22-v12-backlog.md +++ b/docs/plans/2026-06-22-v12-backlog.md @@ -98,4 +98,4 @@ Status checked against the registry on 2026-09-02, after v11.0.0 published. ``` - **Release tagging**: `GITHUB_TOKEN` cannot create a tag whose tree adds `.github/workflows/*`, so the major tag (`v11`) had to be pushed manually. Every future major hits this. Fix with a fine-grained PAT (contents + workflows write) stored as a secret, or by excluding workflow files from the tagged tree. -- **Publish failures are silent**: `scripts/publish.ts` catches every `npm publish` error as "may already exist" and still exits 0, so a real failure is indistinguishable from a no-op. Verify published versions against the registry rather than trusting a green Publish run. +- **Publish failures are non-fatal**: `scripts/publish.ts` logs `npm publish` and `changeset tag` errors as "may already exist" but still exits 0, so CI cannot distinguish a real failure from a no-op. Until that is fixed, verify published versions against the registry rather than trusting a green Publish run. From 353c98513964cc5a78273752ed5c0e841718c780 Mon Sep 17 00:00:00 2001 From: Rodolphe Stoclin Date: Wed, 2 Sep 2026 16:29:08 +0200 Subject: [PATCH 3/3] chore: retrigger cloudflare pages build The previous build failed on a commit that changed one line in docs/plans/, which Astro never reads (the content collection base is ./src/content/docs). Docs build clean locally from a frozen lockfile, and the preceding commit passed, so this looks like a flaky remote build rather than a content problem.