dsh-ci-diet 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.es.md +10 -8
  2. package/README.fr.md +10 -8
  3. package/README.hi.md +10 -8
  4. package/README.ko.md +10 -8
  5. package/README.md +13 -11
  6. package/README.zh-Hans.md +10 -8
  7. package/client/index.js +803 -43
  8. package/dist/adapters/github/budget.d.ts +3 -0
  9. package/dist/adapters/github/budget.js +16 -8
  10. package/dist/adapters/github/budget.js.map +1 -1
  11. package/dist/adapters/github/change-effect.d.ts +57 -0
  12. package/dist/adapters/github/change-effect.js +110 -0
  13. package/dist/adapters/github/change-effect.js.map +1 -0
  14. package/dist/adapters/github/client.d.ts +8 -0
  15. package/dist/adapters/github/client.js +19 -0
  16. package/dist/adapters/github/client.js.map +1 -1
  17. package/dist/adapters/github/endpoints.js +1 -0
  18. package/dist/adapters/github/endpoints.js.map +1 -1
  19. package/dist/adapters/github/run-observation.d.ts +5 -2
  20. package/dist/adapters/github/run-observation.js +58 -20
  21. package/dist/adapters/github/run-observation.js.map +1 -1
  22. package/dist/adapters/github/transport.js +3 -0
  23. package/dist/adapters/github/transport.js.map +1 -1
  24. package/dist/cli/index.js +10 -2
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/measure.d.ts +3 -0
  27. package/dist/cli/measure.js +84 -0
  28. package/dist/cli/measure.js.map +1 -0
  29. package/dist/core/analysis/change-effect.d.ts +62 -0
  30. package/dist/core/analysis/change-effect.js +56 -0
  31. package/dist/core/analysis/change-effect.js.map +1 -0
  32. package/dist/core/analysis/diagnostics.js +5 -9
  33. package/dist/core/analysis/diagnostics.js.map +1 -1
  34. package/dist/core/analysis/run-comparison.d.ts +17 -4
  35. package/dist/core/analysis/run-comparison.js +36 -16
  36. package/dist/core/analysis/run-comparison.js.map +1 -1
  37. package/dist/core/analysis/saved-measurement.d.ts +9 -0
  38. package/dist/core/analysis/saved-measurement.js +24 -0
  39. package/dist/core/analysis/saved-measurement.js.map +1 -0
  40. package/dist/core/config/plugin-settings.d.ts +2 -3
  41. package/dist/core/config/plugin-settings.js +8 -4
  42. package/dist/core/config/plugin-settings.js.map +1 -1
  43. package/dist/core/history/model.d.ts +9 -0
  44. package/dist/core/history/model.js.map +1 -1
  45. package/dist/core/history/sync.d.ts +1 -0
  46. package/dist/core/history/sync.js +43 -2
  47. package/dist/core/history/sync.js.map +1 -1
  48. package/dist/core/patch/apply.js +20 -4
  49. package/dist/core/patch/apply.js.map +1 -1
  50. package/dist/core/patch/approval.d.ts +1 -0
  51. package/dist/core/patch/approval.js +17 -4
  52. package/dist/core/patch/approval.js.map +1 -1
  53. package/dist/core/patch/dependencies.js +14 -4
  54. package/dist/core/patch/dependencies.js.map +1 -1
  55. package/dist/core/patch/edits.d.ts +2 -1
  56. package/dist/core/patch/edits.js +22 -7
  57. package/dist/core/patch/edits.js.map +1 -1
  58. package/dist/core/patch/locks.js +27 -16
  59. package/dist/core/patch/locks.js.map +1 -1
  60. package/dist/core/patch/request-plan.js +4 -4
  61. package/dist/core/patch/request-plan.js.map +1 -1
  62. package/dist/core/patch/semantic.js +5 -0
  63. package/dist/core/patch/semantic.js.map +1 -1
  64. package/dist/core/patch/store.d.ts +7 -0
  65. package/dist/core/patch/store.js +32 -0
  66. package/dist/core/patch/store.js.map +1 -1
  67. package/dist/core/patch/target.js +1 -2
  68. package/dist/core/patch/target.js.map +1 -1
  69. package/dist/core/rules/bun-cache.d.ts +9 -0
  70. package/dist/core/rules/bun-cache.js +83 -0
  71. package/dist/core/rules/bun-cache.js.map +1 -0
  72. package/dist/core/rules/cd003.js +9 -9
  73. package/dist/core/rules/cd003.js.map +1 -1
  74. package/dist/core/rules/cd006.js +14 -14
  75. package/dist/core/rules/cd006.js.map +1 -1
  76. package/dist/core/rules/history-utils.js +1 -1
  77. package/dist/core/rules/history-utils.js.map +1 -1
  78. package/dist/core/rules/npm-cache.d.ts +11 -4
  79. package/dist/core/rules/npm-cache.js +97 -37
  80. package/dist/core/rules/npm-cache.js.map +1 -1
  81. package/dist/core/savings/report-metrics.js +3 -1
  82. package/dist/core/savings/report-metrics.js.map +1 -1
  83. package/dist/core/state/paths.d.ts +1 -1
  84. package/dist/core/state/paths.js +2 -2
  85. package/dist/core/state/paths.js.map +1 -1
  86. package/dist/core/version.d.ts +1 -1
  87. package/dist/core/version.js +1 -1
  88. package/dist/dsh/host/defaults-migration.d.ts +1 -1
  89. package/dist/dsh/host/defaults-migration.js +18 -6
  90. package/dist/dsh/host/defaults-migration.js.map +1 -1
  91. package/dist/dsh/host/plugin.d.ts +11 -10
  92. package/dist/dsh/host/plugin.js +18 -11
  93. package/dist/dsh/host/plugin.js.map +1 -1
  94. package/dist/dsh/host/preflight.js +7 -5
  95. package/dist/dsh/host/preflight.js.map +1 -1
  96. package/dist/dsh/host/review.d.ts +65 -1
  97. package/dist/dsh/host/review.js +59 -7
  98. package/dist/dsh/host/review.js.map +1 -1
  99. package/dist/shared/i18n/en.d.ts +5 -4
  100. package/dist/shared/i18n/en.js +5 -4
  101. package/dist/shared/i18n/en.js.map +1 -1
  102. package/dist/shared/i18n/es.js +5 -4
  103. package/dist/shared/i18n/es.js.map +1 -1
  104. package/dist/shared/i18n/fr.js +5 -4
  105. package/dist/shared/i18n/fr.js.map +1 -1
  106. package/dist/shared/i18n/hi.js +5 -4
  107. package/dist/shared/i18n/hi.js.map +1 -1
  108. package/dist/shared/i18n/ko.js +5 -4
  109. package/dist/shared/i18n/ko.js.map +1 -1
  110. package/dist/shared/i18n/zh-Hans.js +5 -4
  111. package/dist/shared/i18n/zh-Hans.js.map +1 -1
  112. package/package.json +1 -1
package/README.es.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  [English](README.md) · [한국어](README.ko.md) · [简体中文](README.zh-Hans.md) · [हिन्दी](README.hi.md) · [Español](README.es.md) · [Français](README.fr.md)
4
4
 
5
- **Estado:** alfa; `dsh-ci-diet@0.4.0` está en npm. El código fuente actual añade la pantalla de revisión **Ajustes → CI Diet Reports** a los contratos, los motores de análisis y parches, la CLI, las herramientas DSH, la página de ajustes y el informe HTML autocontenido. La pantalla de revisión ya había superado una prueba E2E en un navegador real en un commit anterior. La migración única de valores predeterminados se verificó por separado en el runtime de DSH `0.2.1-rc.2` con configEditor, SettingsForms y Loader; no fue una nueva comprobación del renderizado del navegador. El plugin de DSH ahora arranca con preflight, acceso de red para el historial y aplicación local activados.
5
+ **Estado:** alfa; `dsh-ci-diet@0.5.0` está en npm. El código fuente actual añade la pantalla de revisión **Ajustes → CI Diet Reports** a los contratos, los motores de análisis y parches, la CLI, las herramientas DSH, la página de ajustes y el informe HTML autocontenido. La pantalla de revisión ya había superado una prueba E2E en un navegador real en un commit anterior. La migración única de valores predeterminados se verificó por separado en el runtime de DSH `0.2.1-rc.2` con configEditor, SettingsForms y Loader; no fue una nueva comprobación del renderizado del navegador. El plugin de DSH ahora arranca con preflight, acceso de red para el historial y aplicación local activados.
6
6
 
7
- **Valores predeterminados y migración en DSH.** Los perfiles nuevos de DSH empiezan con `preflightEnabled`, `networkEnabled` y `localApplyEnabled` en `true`, y con CD001, CD002, CD004, CD006 y CD008 activadas. Al iniciar por primera vez un perfil existente, CI Diet usa la edición bloqueada del `configEditor` de DSH para guardar esos interruptores, añadir esas reglas a la selección existente y registrar `defaultsRevision: 1` en ese perfil. Se conservan las rutas de estado, la retención, las cuotas, los datos de facturación y una activación explícita previa de CD003 o CD005. Después de ese guardado, un interruptor desactivado o una regla excluida se mantiene tras reinicios y actualizaciones; CD003 y CD005 siguen desactivadas salvo que se activen, las estimaciones de facturación siguen desactivadas por defecto y requieren activación explícita, mientras que una configuración ya activada se conserva.
7
+ **Valores predeterminados y migración de DSH.** Los perfiles nuevos habilitan `preflightEnabled`, `networkEnabled`, `localApplyEnabled` y CD001, CD002, CD004, CD006 y CD008. La migración de perfiles bloqueados registra `defaultsRevision: 2`. Los perfiles que ya se migraron a la revisión 1 conservan las selecciones posteriores de interruptores y reglas. Se conservan las rutas de estado, la retención, las cuotas y los datos numéricos existentes de la cuenta. CD003 y CD005 permanecen desactivados salvo que se habiliten. Las estimaciones monetarias usan automáticamente ambos datos de la cuenta; en blanco significa desconocido y un `0` explícito es válido. La facturación que se habilitó anteriormente conserva sus valores predeterminados en cero cuando se omite un valor.
8
8
 
9
9
  CI Diet detecta trabajo de GitHub Actions que probablemente se desperdicia, conserva la evidencia de cada hallazgo y muestra una vista previa de pequeños cambios en los workflows para que una persona los revise.
10
10
 
@@ -23,24 +23,26 @@ El scan estático lee el YAML de los workflows en un checkout de destino. La sin
23
23
  | CD003 | Comprobaciones pesadas para cambios que solo afectan a la documentación | solo explicación; desactivada por defecto |
24
24
  | CD004 | Matrices de gran tamaño | solo explicación |
25
25
  | CD005 | Jobs sin `timeout-minutes` | modificación del timeout; desactivada por defecto |
26
- | CD006 | Jobs `actions/setup-node@v3` o `@v4` que ejecutan `npm ci` sin caché de npm | dos entradas de setup-node; activada por defecto |
26
+ | CD006 | npm / pnpm / Bun | [CD006](docs/spec/rules.md) |
27
27
  | CD008 | Retención prolongada de artefactos | modificación de la retención |
28
28
 
29
- CD001 ayuda a tratar las ejecuciones de PR solapadas que han quedado obsoletas. CD005 limita las ejecuciones anómalas; no reduce el tiempo de ejecución normal de un job. CD008 cambia la retención del almacenamiento de artefactos, no los minutos de runner. CD003 y CD005 permanecen desactivadas hasta que superen sus controles de calidad. CD006 es una regla estática activada por defecto para una forma estrecha de npm: añade la caché de descargas de setup-node mientras `npm ci` y todas las pruebas se siguen ejecutando. La caché puede reducir descargas cuando está caliente; no se afirma ningún ahorro de tiempo ni de dinero hasta comparar ejecuciones en frío y en caliente.
29
+ CD001 ayuda a tratar las ejecuciones de PR solapadas que han quedado obsoletas. CD005 limita las ejecuciones anómalas; no reduce el tiempo de ejecución normal de un job. CD008 cambia la retención del almacenamiento de artefactos, no los minutos de runner. CD003 y CD005 permanecen desactivadas hasta que superen sus controles de calidad.
30
+
31
+ CD006 también admite configuraciones verificadas de npm/pnpm y trabajos de Bun que usan `oven-sh/setup-bun@v2` seguido de `bun install --frozen-lockfile` con un `bun.lock` de texto versionado. Bun añade un paso de caché de descargas; la instalación y las pruebas se siguen ejecutando. La sobrecarga de restaurar y guardar la caché puede superar el beneficio. Consulta las [condiciones actuales de caché](docs/spec/rules.md#bun-dependency-cache-variant) y [un ejemplo medido](docs/measurements/2026-10-25-cache-review.md). El ejemplo de npm de abajo muestra una de las formas admitidas.
30
32
 
31
33
  ## Instalación y actualización
32
34
 
33
35
  La CLI requiere Node `^22.19.0 || >=24.0.0`. El plugin admite DSH `>=0.2.1-rc.2 <0.3.0-0` y `>=0.2.2-rc.1 <0.3.0-0`. La versión `0.3.1` se probó con DSH `0.2.1-rc.2`; DSH `0.3.0` no es compatible.
34
36
 
35
37
  ```
36
- npm install --global dsh-ci-diet@0.4.0
38
+ npm install --global dsh-ci-diet@0.5.0
37
39
  ci-diet --version
38
40
  ```
39
41
 
40
- Si no instalas el paquete de forma global, sustituye el nombre de comando `ci-diet` por `npx dsh-ci-diet@0.4.0`, por ejemplo `npx dsh-ci-diet@0.4.0 report --cwd .`.
42
+ Si no instalas el paquete de forma global, sustituye el nombre de comando `ci-diet` por `npx dsh-ci-diet@0.5.0`, por ejemplo `npx dsh-ci-diet@0.5.0 report --cwd .`.
41
43
 
42
44
  ```
43
- dsh plugin --profile web add dsh-ci-diet@0.4.0
45
+ dsh plugin --profile web add dsh-ci-diet@0.5.0
44
46
  dsh --profile web
45
47
  ```
46
48
 
@@ -118,7 +120,7 @@ ci-diet revert --cwd . --change CHANGE_ID
118
120
 
119
121
  Sustituye `PLAN_ID` por el ID que imprime el plan, `CONFIRMATION` por sus últimos 12 caracteres del digest y `CHANGE_ID` por el ID que imprime apply. Cada valor es un argumento literal; no escribas los corchetes angulares. `approve` crea una aprobación de un solo uso, `apply` reescribe únicamente el rango de bytes planificado en un archivo de workflow y `revert` restaura la copia de seguridad de ese cambio. Revisa el diff resultante y ejecuta las comprobaciones del repositorio según sea necesario. CI Diet no hace commits, push ni despliegues, no ejecuta workflows, no cambia la protección de ramas ni elimina artefactos.
120
122
 
121
- Para una CI apta que solo se ejecuta en PRs, el ejemplo de CD001 usa `ci-only` y `replace-safe` como declaraciones humanas. Indican que la persona operadora ha revisado la semántica de cancelación; no son interruptores de omisión. CD005 necesita un `--job` y un `--minutes` medidos, y CD008 necesita `--job`, un índice numérico basado en cero del array `--step` para el paso objetivo y declaraciones sobre artefactos. CD006 necesita `--job` y el índice basado en cero `--step` del paso setup-node; no usa declaraciones. En ambas reglas de paso, el número es un índice del array y no un token con el nombre del paso.
123
+ Para una CI apta que solo se ejecuta en PRs, el ejemplo de CD001 usa `ci-only` y `replace-safe` como declaraciones humanas. Indican que la persona operadora ha revisado la semántica de cancelación; no son interruptores de omisión. CD005 necesita un `--job` y un `--minutes` medidos, y CD008 necesita `--job`, un índice numérico basado en cero del array `--step` para el paso objetivo y declaraciones sobre artefactos. CD006 necesita `--job` y el índice basado en cero `--step` del paso setup-node/setup-bun; no usa declaraciones. En ambas reglas de paso, el número es un índice del array y no un token con el nombre del paso.
122
124
 
123
125
  ## Estado y limitaciones
124
126
 
package/README.fr.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  [English](README.md) · [한국어](README.ko.md) · [简体中文](README.zh-Hans.md) · [हिन्दी](README.hi.md) · [Español](README.es.md) · [Français](README.fr.md)
4
4
 
5
- **État :** alpha ; `dsh-ci-diet@0.4.0` est publié sur npm. L’arbre source actuel ajoute l’écran de revue **Réglages → CI Diet Reports** aux contrats, aux moteurs d’analyse et de correctifs, à la CLI, aux outils DSH, à la page Réglages et au rapport HTML autonome. L’écran de revue avait déjà passé un test E2E dans un vrai navigateur lors d’un commit précédent. La migration unique des valeurs par défaut a été vérifiée séparément dans le runtime DSH `0.2.1-rc.2` avec configEditor, SettingsForms et Loader ; ce n’est pas une nouvelle vérification du rendu navigateur. Le plugin DSH démarre désormais avec preflight, l’accès réseau pour l’historique et l’application locale activés.
5
+ **État :** alpha ; `dsh-ci-diet@0.5.0` est publié sur npm. L’arbre source actuel ajoute l’écran de revue **Réglages → CI Diet Reports** aux contrats, aux moteurs d’analyse et de correctifs, à la CLI, aux outils DSH, à la page Réglages et au rapport HTML autonome. L’écran de revue avait déjà passé un test E2E dans un vrai navigateur lors d’un commit précédent. La migration unique des valeurs par défaut a été vérifiée séparément dans le runtime DSH `0.2.1-rc.2` avec configEditor, SettingsForms et Loader ; ce n’est pas une nouvelle vérification du rendu navigateur. Le plugin DSH démarre désormais avec preflight, l’accès réseau pour l’historique et l’application locale activés.
6
6
 
7
- **Valeurs par défaut et migration DSH.** Les nouveaux profils DSH démarrent avec `preflightEnabled`, `networkEnabled` et `localApplyEnabled` à `true`, et avec CD001, CD002, CD004, CD006 et CD008 activées. Au premier démarrage d’un profil existant, CI Diet utilise l’édition verrouillée du `configEditor` de DSH pour enregistrer ces interrupteurs, ajouter ces règles à la sélection existante et inscrire `defaultsRevision: 1` dans ce profil. Les chemins d’état, la rétention, les quotas, les données de facturation et une activation explicite antérieure de CD003 ou CD005 sont conservés. Après cet enregistrement, un interrupteur désactivé ou une règle exclue reste appliqué après les redémarrages et les mises à jour ; CD003 et CD005 restent désactivées sauf activation, les estimations de facturation restent désactivées par défaut et doivent être activées explicitement, tandis qu’une activation existante est conservée.
7
+ **Valeurs par défaut et migration DSH.** Les nouveaux profils activent `preflightEnabled`, `networkEnabled`, `localApplyEnabled` ainsi que CD001, CD002, CD004, CD006 et CD008. La migration des profils verrouillés enregistre `defaultsRevision: 2`. Les profils déjà migrés vers la révision 1 conservent les choix ultérieurs de commutateurs et de règles. Les chemins d’état, la durée de conservation, les quotas et les saisies numériques existantes du compte sont préservés. CD003 et CD005 restent désactivés sauf s’ils sont activés. Les estimations financières utilisent automatiquement les deux saisies du compte ; une valeur vide signifie inconnue et un `0` explicite est valide. Les champs de facturation déjà activés conservent leurs valeurs par défaut à zéro lorsqu’une valeur a été omise.
8
8
 
9
9
  CI Diet repère le travail GitHub Actions probablement inutile, conserve les preuves associées à chaque constat et prévisualise de petites modifications de workflow pour qu’une personne les examine.
10
10
 
@@ -23,24 +23,26 @@ Le scan statique lit le YAML des workflows dans un checkout cible. La synchronis
23
23
  | CD003 | Vérifications lourdes pour des changements documentaires | explication uniquement ; désactivée par défaut |
24
24
  | CD004 | Matrices surdimensionnées | explication uniquement |
25
25
  | CD005 | Tâches sans `timeout-minutes` | modification du délai d’expiration ; désactivée par défaut |
26
- | CD006 | Tâches `actions/setup-node@v3` ou `@v4` qui lancent `npm ci` sans cache npm | deux entrées setup-node ; activée par défaut |
26
+ | CD006 | npm / pnpm / Bun | [CD006](docs/spec/rules.md) |
27
27
  | CD008 | Rétention prolongée des artefacts | modification de la rétention |
28
28
 
29
- CD001 aide à traiter les exécutions de PR qui se chevauchent et sont devenues obsolètes. CD005 limite les exécutions anormales ; elle ne réduit pas la durée d’exécution normale d’une tâche. CD008 modifie la rétention du stockage des artefacts, et non les minutes de runner. CD003 et CD005 restent désactivées jusqu’à ce qu’elles réussissent leurs contrôles de qualité. CD006 est une règle statique active par défaut pour une forme npm étroite : elle ajoute le cache de téléchargement de setup-node tandis que `npm ci` et tous les tests s’exécutent toujours. Le cache peut réduire les téléchargements une fois alimenté ; aucun gain de temps ni d’argent n’est affirmé avant de comparer des exécutions à froid et à chaud.
29
+ CD001 aide à traiter les exécutions de PR qui se chevauchent et sont devenues obsolètes. CD005 limite les exécutions anormales ; elle ne réduit pas la durée d’exécution normale d’une tâche. CD008 modifie la rétention du stockage des artefacts, et non les minutes de runner. CD003 et CD005 restent désactivées jusqu’à ce qu’elles réussissent leurs contrôles de qualité.
30
+
31
+ CD006 prend également en charge les configurations npm/pnpm vérifiées et les jobs Bun qui utilisent `oven-sh/setup-bun@v2` suivi de `bun install --frozen-lockfile`, avec un fichier texte `bun.lock` versionné. Bun ajoute une étape de cache de téléchargement ; l’installation et les tests s’exécutent toujours. La surcharge de restauration et d’enregistrement du cache peut dépasser le gain. Voir les [garde-fous actuels du cache](docs/spec/rules.md#bun-dependency-cache-variant) et [un exemple mesuré](docs/measurements/2026-10-25-cache-review.md). L’exemple npm ci-dessous illustre l’une des formes prises en charge.
30
32
 
31
33
  ## Installation et mise à jour
32
34
 
33
35
  La CLI exige Node `^22.19.0 || >=24.0.0`. Le plugin prend en charge DSH `>=0.2.1-rc.2 <0.3.0-0` et `>=0.2.2-rc.1 <0.3.0-0`. La version `0.3.1` a été testée avec DSH `0.2.1-rc.2` ; DSH `0.3.0` n’est pas pris en charge.
34
36
 
35
37
  ```
36
- npm install --global dsh-ci-diet@0.4.0
38
+ npm install --global dsh-ci-diet@0.5.0
37
39
  ci-diet --version
38
40
  ```
39
41
 
40
- Si vous ne faites pas d’installation globale, remplacez le nom de commande `ci-diet` par `npx dsh-ci-diet@0.4.0`, par exemple `npx dsh-ci-diet@0.4.0 report --cwd .`.
42
+ Si vous ne faites pas d’installation globale, remplacez le nom de commande `ci-diet` par `npx dsh-ci-diet@0.5.0`, par exemple `npx dsh-ci-diet@0.5.0 report --cwd .`.
41
43
 
42
44
  ```
43
- dsh plugin --profile web add dsh-ci-diet@0.4.0
45
+ dsh plugin --profile web add dsh-ci-diet@0.5.0
44
46
  dsh --profile web
45
47
  ```
46
48
 
@@ -118,7 +120,7 @@ ci-diet revert --cwd . --change CHANGE_ID
118
120
 
119
121
  Remplacez `PLAN_ID` par l’identifiant affiché par le plan, `CONFIRMATION` par les 12 derniers caractères de son digest et `CHANGE_ID` par l’identifiant affiché par apply. Chaque valeur est un argument littéral ; ne saisissez pas de chevrons. `approve` crée une approbation à usage unique, `apply` ne réécrit que la plage d’octets prévue dans un fichier de workflow et `revert` restaure la sauvegarde de cette modification. Examinez le diff obtenu et lancez les vérifications du dépôt selon vos besoins. CI Diet ne fait aucun commit, push ni déploiement, n’exécute aucun workflow, ne modifie pas la protection des branches et ne supprime aucun artefact.
120
122
 
121
- Pour une CI éligible qui ne s’exécute que sur les PR, l’exemple CD001 utilise `ci-only` et `replace-safe` comme attestations humaines. Elles indiquent que l’opérateur a examiné la sémantique d’annulation ; ce ne sont pas des interrupteurs de contournement. CD005 nécessite un `--job` et un `--minutes` mesurés, et CD008 nécessite `--job`, un index numérique de tableau `--step` commençant à zéro pour l’étape cible, ainsi que des déclarations concernant les artefacts. CD006 nécessite `--job` et l’index `--step` commençant à zéro de l’étape setup-node ; elle ne demande aucune déclaration. Pour les deux règles d’étape, le nombre est un index de tableau, pas un jeton fondé sur le nom de l’étape.
123
+ Pour une CI éligible qui ne s’exécute que sur les PR, l’exemple CD001 utilise `ci-only` et `replace-safe` comme attestations humaines. Elles indiquent que l’opérateur a examiné la sémantique d’annulation ; ce ne sont pas des interrupteurs de contournement. CD005 nécessite un `--job` et un `--minutes` mesurés, et CD008 nécessite `--job`, un index numérique de tableau `--step` commençant à zéro pour l’étape cible, ainsi que des déclarations concernant les artefacts. CD006 nécessite `--job` et l’index `--step` commençant à zéro de l’étape setup-node/setup-bun ; elle ne demande aucune déclaration. Pour les deux règles d’étape, le nombre est un index de tableau, pas un jeton fondé sur le nom de l’étape.
122
124
 
123
125
  ## État et limites
124
126
 
package/README.hi.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  [English](README.md) · [한국어](README.ko.md) · [简体中文](README.zh-Hans.md) · [हिन्दी](README.hi.md) · [Español](README.es.md) · [Français](README.fr.md)
4
4
 
5
- **स्थिति:** alpha; `dsh-ci-diet@0.4.0` npm पर उपलब्ध है। Current source tree में मौजूद contracts, analysis और patch engines, CLI, DSH tools, Settings page और self-contained HTML report के साथ **सेटिंग्स → CI Diet Reports** review screen जोड़ा गया है। Review screen ने पिछले commit में असली browser E2E पास किया था। एक बार होने वाली defaults migration को अलग से DSH `0.2.1-rc.2` के configEditor, SettingsForms और Loader runtime में verify किया गया; यह नए browser render का verification नहीं है। DSH plugin अब preflight, history के लिए network access और local apply के साथ चालू होता है।
5
+ **स्थिति:** alpha; `dsh-ci-diet@0.5.0` npm पर उपलब्ध है। Current source tree में मौजूद contracts, analysis और patch engines, CLI, DSH tools, Settings page और self-contained HTML report के साथ **सेटिंग्स → CI Diet Reports** review screen जोड़ा गया है। Review screen ने पिछले commit में असली browser E2E पास किया था। एक बार होने वाली defaults migration को अलग से DSH `0.2.1-rc.2` के configEditor, SettingsForms और Loader runtime में verify किया गया; यह नए browser render का verification नहीं है। DSH plugin अब preflight, history के लिए network access और local apply के साथ चालू होता है।
6
6
 
7
- **DSH defaults और migration.** नए DSH profile में `preflightEnabled`, `networkEnabled` और `localApplyEnabled` `true` होते हैं, और CD001, CD002, CD004, CD006 तथा CD008 चालू रहते हैं। मौजूदा profile को पहली बार शुरू करने पर CI Diet DSH `configEditor` के locked edit से तीनों switches save करता है, इन rules को मौजूदा चयन में जोड़ता है और उसी profile में `defaultsRevision: 1` दर्ज करता है। State paths, retention, quotas, billing inputs और पहले से स्पष्ट रूप से चालू किए गए CD003 या CD005 सुरक्षित रहते हैं। इस save के बाद बंद किया गया switch या हटाया गया rule restart और update के बाद भी लागू रहता है; CD003 और CD005 केवल चालू करने पर चलते हैं, billing estimates default में बंद रहते हैं और स्पष्ट रूप से चालू करने पड़ते हैं, जबकि पहले से चालू billing setting सुरक्षित रहता है।
7
+ **DSH डिफ़ॉल्ट और माइग्रेशन।** नई प्रोफ़ाइल में `preflightEnabled`, `networkEnabled`, `localApplyEnabled` तथा CD001, CD002, CD004, CD006, CD008 सक्षम होते हैं। लॉक की गई प्रोफ़ाइल माइग्रेशन `defaultsRevision: 2` दर्ज करता है। संशोधन 1 में पहले ही माइग्रेट की गई प्रोफ़ाइलें बाद के स्विच और नियम चयन को बनाए रखती हैं। स्टेट पाथ, रिटेंशन, कोटा और मौजूदा संख्यात्मक खाता इनपुट सुरक्षित रहते हैं। CD003 और CD005 सक्षम किए जाने तक बंद रहते हैं। मौद्रिक अनुमान दोनों खाता इनपुट का स्वतः उपयोग करते हैं; खाली होने का अर्थ अज्ञात है और स्पष्ट `0` मान्य है। पहले सक्षम बिलिंग में कोई मान छोड़े जाने पर उसके शून्य डिफ़ॉल्ट बने रहते हैं।
8
8
 
9
9
  CI Diet संभवतः बर्बाद हो रहे GitHub Actions काम को खोजता है, हर finding के पीछे का evidence सुरक्षित रखता है, और मनुष्य द्वारा समीक्षा के लिए छोटे workflow बदलावों का preview देता है।
10
10
 
@@ -23,24 +23,26 @@ Static scan लक्षित checkout के workflow YAML को पढ़त
23
23
  | CD003 | केवल docs बदलने पर भारी checks | केवल explanation; default में बंद |
24
24
  | CD004 | बहुत बड़ी matrices | केवल explanation |
25
25
  | CD005 | `timeout-minutes` रहित jobs | timeout बदलाव; default में बंद |
26
- | CD006 | npm cache के बिना `npm ci` चलाने वाले `actions/setup-node@v3` या `@v4` jobs | दो setup-node inputs; default में चालू |
26
+ | CD006 | npm / pnpm / Bun | [CD006](docs/spec/rules.md) |
27
27
  | CD008 | लंबी artifact retention | retention बदलाव |
28
28
 
29
- CD001 नए commit से superseded होकर overlap करते PR runs में मदद करता है। CD005 असामान्य runs पर सीमा लगाता है; सामान्य job runtime कम नहीं करता। CD008 artifact storage retention बदलता है, runner minutes नहीं। CD003 और CD005 अपने quality gates पास होने तक बंद रहते हैं। CD006 एक संकीर्ण npm आकार के लिए default static नियम है: यह setup-node download cache चालू करता है और `npm ci` तथा हर test पहले की तरह चलता रहता है। cache गर्म होने पर downloads घट सकते हैं, पर cold और warm runs की तुलना होने तक समय या पैसे की बचत का दावा नहीं किया जाता।
29
+ CD001 नए commit से superseded होकर overlap करते PR runs में मदद करता है। CD005 असामान्य runs पर सीमा लगाता है; सामान्य job runtime कम नहीं करता। CD008 artifact storage retention बदलता है, runner minutes नहीं। CD003 और CD005 अपने quality gates पास होने तक बंद रहते हैं।
30
+
31
+ CD006 सत्यापित npm/pnpm सेटअप और ऐसे Bun जॉब्स का भी समर्थन करता है जो `oven-sh/setup-bun@v2` का उपयोग करते हैं और उसके बाद ट्रैक किए गए टेक्स्ट `bun.lock` के साथ `bun install --frozen-lockfile` चलाते हैं। Bun एक डाउनलोड-कैश चरण जोड़ता है; इंस्टॉलेशन और टेस्ट अब भी चलते हैं। कैश को बहाल करने/सहेजने का ओवरहेड लाभ से अधिक हो सकता है। [वर्तमान कैश गार्ड](docs/spec/rules.md#bun-dependency-cache-variant) और [एक मापा गया उदाहरण](docs/measurements/2026-10-25-cache-review.md) देखें। नीचे दिया गया npm उदाहरण समर्थित रूपों में से एक को दर्शाता है।
30
32
 
31
33
  ## Install और upgrade
32
34
 
33
35
  CLI के लिए Node `^22.19.0 || >=24.0.0` चाहिए। Plugin DSH `>=0.2.1-rc.2 <0.3.0-0` और `>=0.2.2-rc.1 <0.3.0-0` का समर्थन करता है। Version `0.3.1` को DSH `0.2.1-rc.2` पर जाँचा गया; DSH `0.3.0` समर्थित नहीं है।
34
36
 
35
37
  ```
36
- npm install --global dsh-ci-diet@0.4.0
38
+ npm install --global dsh-ci-diet@0.5.0
37
39
  ci-diet --version
38
40
  ```
39
41
 
40
- Global install न चाहें तो command नाम `ci-diet` की जगह `npx dsh-ci-diet@0.4.0` रखें, उदाहरण `npx dsh-ci-diet@0.4.0 report --cwd .`।
42
+ Global install न चाहें तो command नाम `ci-diet` की जगह `npx dsh-ci-diet@0.5.0` रखें, उदाहरण `npx dsh-ci-diet@0.5.0 report --cwd .`।
41
43
 
42
44
  ```
43
- dsh plugin --profile web add dsh-ci-diet@0.4.0
45
+ dsh plugin --profile web add dsh-ci-diet@0.5.0
44
46
  dsh --profile web
45
47
  ```
46
48
 
@@ -118,7 +120,7 @@ ci-diet revert --cwd . --change CHANGE_ID
118
120
 
119
121
  `PLAN_ID` की जगह plan का दिखाया id, `CONFIRMATION` की जगह digest के अंतिम 12 characters और `CHANGE_ID` की जगह apply का दिखाया id लगाएँ। सभी values literal arguments हैं; angle brackets न लिखें। `approve` single-use approval बनाता है, `apply` केवल एक workflow file की planned byte range बदलता है और `revert` उस change का backup बहाल करता है। परिणामी diff देखें और ज़रूरत के अनुसार repository checks चलाएँ। CI Diet commit, push, deploy, workflow run, branch protection बदलाव या artifact deletion नहीं करता।
120
122
 
121
- केवल PR CI के योग्य CD001 उदाहरण में `ci-only` और `replace-safe` human attestations हैं। ये बताते हैं कि operator ने cancellation semantics की समीक्षा की; ये bypass switches नहीं हैं। CD005 को measured `--job` और `--minutes` चाहिए, और CD008 को `--job`, target step का शून्य से शुरू होने वाला numeric `--step` array index और artifact claims चाहिए। CD006 को `--job` और setup-node step का शून्य से शुरू होने वाला `--step` index चाहिए; इसमें claims नहीं हैं। दोनों step नियमों में numeric step array index है, step name token नहीं।
123
+ केवल PR CI के योग्य CD001 उदाहरण में `ci-only` और `replace-safe` human attestations हैं। ये बताते हैं कि operator ने cancellation semantics की समीक्षा की; ये bypass switches नहीं हैं। CD005 को measured `--job` और `--minutes` चाहिए, और CD008 को `--job`, target step का शून्य से शुरू होने वाला numeric `--step` array index और artifact claims चाहिए। CD006 को `--job` और setup-node/setup-bun step का शून्य से शुरू होने वाला `--step` index चाहिए; इसमें claims नहीं हैं। दोनों step नियमों में numeric step array index है, step name token नहीं।
122
124
 
123
125
  ## State और सीमाएँ
124
126
 
package/README.ko.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  [English](README.md) · [한국어](README.ko.md) · [简体中文](README.zh-Hans.md) · [हिन्दी](README.hi.md) · [Español](README.es.md) · [Français](README.fr.md)
4
4
 
5
- **상태:** 알파. `dsh-ci-diet@0.4.0`이 npm에 게시되어 있습니다. 현재 소스 트리에는 기존 계약, 분석·패치 엔진, CLI, DSH 도구, 설정 화면, 자체 완결형 HTML 보고서와 함께 **설정 → CI Diet Reports** 검토 화면이 추가되어 있습니다. 검토 화면은 앞선 커밋에서 실제 브라우저 E2E를 통과했습니다. 1회 기본값 마이그레이션은 DSH `0.2.1-rc.2`의 configEditor, SettingsForms, Loader 런타임에서 별도로 검증했으며 새 브라우저 화면 렌더를 확인한 것은 아닙니다. 이제 DSH 플러그인은 preflight, 이력용 네트워크 접근, 로컬 적용이 기본으로 켜진 상태에서 시작합니다.
5
+ **상태:** 알파. `dsh-ci-diet@0.5.0`이 npm에 게시되어 있습니다. 현재 소스 트리에는 기존 계약, 분석·패치 엔진, CLI, DSH 도구, 설정 화면, 자체 완결형 HTML 보고서와 함께 **설정 → CI Diet Reports** 검토 화면이 추가되어 있습니다. 검토 화면은 앞선 커밋에서 실제 브라우저 E2E를 통과했습니다. 1회 기본값 마이그레이션은 DSH `0.2.1-rc.2`의 configEditor, SettingsForms, Loader 런타임에서 별도로 검증했으며 새 브라우저 화면 렌더를 확인한 것은 아닙니다. 이제 DSH 플러그인은 preflight, 이력용 네트워크 접근, 로컬 적용이 기본으로 켜진 상태에서 시작합니다.
6
6
 
7
- **DSH 기본값과 마이그레이션.** 새 DSH 프로필은 `preflightEnabled`, `networkEnabled`, `localApplyEnabled`가 `true`이고 CD001, CD002, CD004, CD006, CD008이 켜진 상태로 시작합니다. 기존 프로필을 처음 시작할 때 CI Diet는 DSH `configEditor`의 잠금 편집으로 세 스위치를 저장하고 위 규칙을 기존 선택에 더한 뒤 그 프로필에 `defaultsRevision: 1`을 기록합니다. 상태 경로, 보관 기간, 쿼터, 과금 입력과 기존에 명시적으로 켠 CD003 또는 CD005는 그대로 둡니다. 저장 뒤에 끈 스위치나 제외한 규칙은 재시작과 업데이트를 거쳐도 유지합니다. CD003과 CD005는 켜지 않는 한 꺼져 있고, 과금 추정은 기본 꺼짐이며 명시적으로 켜야 합니다. 기존에 켜 둔 과금 설정은 유지합니다.
7
+ **DSH 기본값과 마이그레이션.** 새 프로필은 `preflightEnabled`, `networkEnabled`, `localApplyEnabled`와 CD001, CD002, CD004, CD006, CD008이 켜진 상태로 시작합니다. 프로필 잠금 안에서 마이그레이션하고 `defaultsRevision: 2`를 기록합니다. 이미 버전 1 마이그레이션을 마친 프로필은 이후에 바꾼 스위치와 규칙 선택을 유지합니다. 상태 경로, 보관 기간, 쿼터와 기존에 입력한 계정 숫자 값도 보존합니다. CD003과 CD005는 직접 켜기 전까지 꺼져 있습니다. 포함 분과 사용 분을 모두 입력하면 비용 추정에 자동 반영하며, 빈 값은 미입력이고 명시적인 `0`은 유효합니다. 구버전에서 비용 추정을 켰다면 생략한 값의 기존 기본값 0도 유지합니다.
8
8
 
9
9
  CI Diet는 낭비 가능성이 있는 GitHub Actions 작업을 찾고, 각 발견의 근거를 보존하며, 사람이 검토할 작은 workflow 수정을 미리 보여줍니다.
10
10
 
@@ -23,24 +23,26 @@ CI Diet는 낭비 가능성이 있는 GitHub Actions 작업을 찾고, 각 발
23
23
  | CD003 | 문서만 바뀐 변경의 무거운 검사 | 설명만, 기본 꺼짐 |
24
24
  | CD004 | 과대한 매트릭스 | 설명만 |
25
25
  | CD005 | `timeout-minutes`가 없는 job | timeout 편집, 기본 꺼짐 |
26
- | CD006 | npm 캐시 없이 `npm ci`를 실행하는 `actions/setup-node@v3` 또는 `@v4` job | setup-node 입력 두 개, 기본 켜짐 |
26
+ | CD006 | npm / pnpm / Bun | [CD006](docs/spec/rules.md) |
27
27
  | CD008 | 긴 artifact 보존 기간 | 보존 기간 편집 |
28
28
 
29
- CD001은 겹쳐서 대체된 PR 실행에 도움을 줍니다. CD005는 비정상 실행의 상한을 두는 규칙이며 정상 job 실행 시간 자체를 줄이지 않습니다. CD008은 artifact 저장 보존 기간을 바꾸며 러너 분과는 관계가 없습니다. CD003과 CD005는 품질 기준을 통과할 때까지 기본으로 꺼져 있습니다. CD006은 좁은 npm 형태를 위한 기본 정적 규칙입니다. setup-node 다운로드 캐시를 켜고 `npm ci`와 모든 테스트는 그대로 실행합니다. 캐시가 데워지면 다운로드가 줄 수 있지만, cold와 warm 실행을 비교하기 전에는 시간이나 금액 절감을 주장하지 않습니다.
29
+ CD001은 겹쳐서 대체된 PR 실행에 도움을 줍니다. CD005는 비정상 실행의 상한을 두는 규칙이며 정상 job 실행 시간 자체를 줄이지 않습니다. CD008은 artifact 저장 보존 기간을 바꾸며 러너 분과는 관계가 없습니다. CD003과 CD005는 품질 기준을 통과할 때까지 기본으로 꺼져 있습니다.
30
+
31
+ CD006은 검증된 npm/pnpm 구성과, `oven-sh/setup-bun@v2`를 사용한 뒤 Git으로 관리하는 텍스트 `bun.lock`과 함께 `bun install --frozen-lockfile`을 실행하는 Bun 작업도 지원합니다. Bun은 다운로드 캐시 단계를 추가하지만, 설치와 테스트는 그대로 실행합니다. 캐시 복원·저장에 걸리는 시간이 절감 시간보다 클 수 있습니다. [현재 캐시 적용 조건](docs/spec/rules.md#bun-dependency-cache-variant)과 [실측 예시](docs/measurements/2026-10-25-cache-review.md)를 참고하세요. 아래 npm 예시는 지원하는 구성 중 하나입니다.
30
32
 
31
33
  ## 설치와 업그레이드
32
34
 
33
35
  CLI에는 Node `^22.19.0 || >=24.0.0`이 필요합니다. 플러그인은 DSH `>=0.2.1-rc.2 <0.3.0-0` 및 `>=0.2.2-rc.1 <0.3.0-0`을 지원합니다. `0.3.1`은 DSH `0.2.1-rc.2`에서 검증했고 DSH `0.3.0`은 지원하지 않습니다.
34
36
 
35
37
  ```
36
- npm install --global dsh-ci-diet@0.4.0
38
+ npm install --global dsh-ci-diet@0.5.0
37
39
  ci-diet --version
38
40
  ```
39
41
 
40
- 전역 설치를 원하지 않으면 `ci-diet` 명령 이름 자리에 `npx dsh-ci-diet@0.4.0`을 넣습니다. 예를 들어 `npx dsh-ci-diet@0.4.0 report --cwd .`처럼 실행합니다.
42
+ 전역 설치를 원하지 않으면 `ci-diet` 명령 이름 자리에 `npx dsh-ci-diet@0.5.0`을 넣습니다. 예를 들어 `npx dsh-ci-diet@0.5.0 report --cwd .`처럼 실행합니다.
41
43
 
42
44
  ```
43
- dsh plugin --profile web add dsh-ci-diet@0.4.0
45
+ dsh plugin --profile web add dsh-ci-diet@0.5.0
44
46
  dsh --profile web
45
47
  ```
46
48
 
@@ -118,7 +120,7 @@ ci-diet revert --cwd . --change CHANGE_ID
118
120
 
119
121
  `PLAN_ID`에는 plan이 출력한 id, `CONFIRMATION`에는 digest 마지막 12자, `CHANGE_ID`에는 apply가 출력한 id를 넣습니다. 모든 값은 그대로 바꿔 넣는 인자이며 꺾쇠괄호를 직접 입력하지 않습니다. `approve`는 1회용 승인을 만들고, `apply`는 workflow 파일 하나의 계획된 바이트 범위만 고치며, `revert`는 그 변경의 백업을 복원합니다. 결과 diff를 검토하고 필요하면 저장소 검사를 실행합니다. CI Diet는 커밋, 푸시, 배포, workflow 실행, 브랜치 보호 변경, artifact 삭제를 하지 않습니다.
120
122
 
121
- 대상이 PR 전용 CI인 CD001 예시의 `ci-only`와 `replace-safe`는 사람의 attestation입니다. 취소 의미를 운영자가 검토했다는 진술이며 우회 스위치가 아닙니다. CD005에는 측정된 `--job`과 `--minutes`가 필요하고, CD008에는 `--job`, 대상 step의 0부터 시작하는 숫자 `--step` 배열 인덱스, artifact claims가 필요합니다. CD006에는 `--job`과 setup-node step의 0부터 시작하는 `--step` 인덱스가 필요하며 claims는 없습니다. 두 step 규칙의 숫자 step은 step 이름 토큰이 아니라 배열 인덱스입니다.
123
+ 대상이 PR 전용 CI인 CD001 예시의 `ci-only`와 `replace-safe`는 사람의 attestation입니다. 취소 의미를 운영자가 검토했다는 진술이며 우회 스위치가 아닙니다. CD005에는 측정된 `--job`과 `--minutes`가 필요하고, CD008에는 `--job`, 대상 step의 0부터 시작하는 숫자 `--step` 배열 인덱스, artifact claims가 필요합니다. CD006에는 `--job`과 setup-node/setup-bun step의 0부터 시작하는 `--step` 인덱스가 필요하며 claims는 없습니다. 두 step 규칙의 숫자 step은 step 이름 토큰이 아니라 배열 인덱스입니다.
122
124
 
123
125
  ## 상태와 한계
124
126
 
package/README.md CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  [English](README.md) · [한국어](README.ko.md) · [简体中文](README.zh-Hans.md) · [हिन्दी](README.hi.md) · [Español](README.es.md) · [Français](README.fr.md)
4
4
 
5
- **Status:** alpha; `dsh-ci-diet@0.4.0` is on npm. The current source tree adds the **Settings → CI Diet Reports** review screen to the existing contracts, analysis and patch engines, CLI, DSH tools, Settings page, and self-contained HTML report. The review screen passed a real-browser E2E check in an earlier commit. The one-time defaults migration was verified separately in a DSH `0.2.1-rc.2` runtime with configEditor, SettingsForms, and Loader; it was not a new browser render. The DSH plugin now starts with preflight, history network access, and local apply enabled.
5
+ **Status:** alpha; `dsh-ci-diet@0.5.0` is on npm. The current source tree adds the **Settings → CI Diet Reports** review screen to the existing contracts, analysis and patch engines, CLI, DSH tools, Settings page, and self-contained HTML report. The review screen passed a real-browser E2E check in an earlier commit. The one-time defaults migration was verified separately in a DSH `0.2.1-rc.2` runtime with configEditor, SettingsForms, and Loader; it was not a new browser render. The DSH plugin now starts with preflight, history network access, and local apply enabled.
6
6
 
7
- **DSH defaults and migration.** New DSH profiles start with `preflightEnabled`, `networkEnabled`, and `localApplyEnabled` set to `true`, and with CD001, CD002, CD004, CD006, and CD008 enabled. On the first start of an existing profile, CI Diet uses DSH's locked config editor to save those switches, add those rules to the existing selection, and record `defaultsRevision: 1` in that profile. State paths, retention, quotas, billing inputs, and an existing explicit CD003 or CD005 enablement are preserved. After that save, a switch you turn off or a rule you exclude survives restarts and updates; CD003 and CD005 stay off unless enabled, and billing estimates remain off by default with explicit activation required, while an existing on setting is preserved.
7
+ **DSH defaults and migration.** New profiles enable `preflightEnabled`, `networkEnabled`, `localApplyEnabled` and CD001, CD002, CD004, CD006, CD008. The locked profile migration records `defaultsRevision: 2`. Profiles already migrated to revision 1 keep later switch and rule choices. State paths, retention, quotas, and existing numeric account inputs are preserved. CD003 and CD005 remain off unless enabled. Monetary estimates use both account inputs automatically; blank means unknown and explicit `0` is valid. Previously enabled billing keeps its zero defaults when a value was omitted.
8
8
 
9
9
  CI Diet finds GitHub Actions work that is likely wasted, preserves the evidence behind each finding, and previews small workflow edits for a human to review.
10
10
 
11
11
  **Installation alone does not save runner minutes.** Supported DSH deploy commands are checked automatically for savings candidates before running; workflow changes are applied only after review and approval. The DSH plugin has no approval, apply, or revert tools, and preflight itself never changes files. Its Settings pages store tool configuration and show the host's session-scoped reports and plans; they do not optimize a workflow. Approved local writes are enabled by default, but applying still requires a separate digest approval. There is no guarantee that any finding will reduce cost.
12
12
 
13
- `preflightEnabled` is on by default. Before a literal `git push`, `npm|pnpm|bun publish`, `wrangler deploy`, or `npm|pnpm|bun run deploy` in a supported stateless DSH bash tool (one with a `workdir` argument), CI Diet runs an offline check. It flags npm CD006 candidates, a missing concurrency block in a PR-only workflow, and a Bun frozen install without an explicit download cache for review. When a candidate exists, the first command does not run; after the model reviews the items, retrying the same command is allowed. Preflight itself makes no network request and no automatic file change, and applying a plan still needs human approval. Persistent shells and complex shell wrappers cannot be identified reliably, so preflight skips them. Savings remain unmeasured, so no saving is claimed.
13
+ `preflightEnabled` is on by default. Before a literal `git push`, `npm|pnpm|bun publish`, `wrangler deploy`, or `npm|pnpm|bun run deploy` in a supported stateless DSH bash tool (one with a `workdir` argument), CI Diet runs an offline check. It flags npm/pnpm CD006 candidates, a missing concurrency block in a PR-only workflow, and a Bun frozen install without an explicit download cache for review. When a candidate exists, the first command does not run; after the model reviews the items, retrying the same command is allowed. Preflight itself makes no network request and no automatic file change, and applying a plan still needs human approval. Persistent shells and complex shell wrappers cannot be identified reliably, so preflight skips them. Savings remain unmeasured, so no saving is claimed.
14
14
 
15
15
  ## What it does
16
16
 
@@ -23,24 +23,26 @@ The static scan reads workflow YAML in a target checkout. The optional history s
23
23
  | CD003 | Heavy checks for docs-only changes | explanation only; off by default |
24
24
  | CD004 | Oversized matrices | explanation only |
25
25
  | CD005 | Jobs without `timeout-minutes` | timeout edit; off by default |
26
- | CD006 | `actions/setup-node@v3` or `@v4` jobs that run `npm ci` without npm caching | two setup-node inputs; on by default |
26
+ | CD006 | npm / pnpm / Bun | [CD006](docs/spec/rules.md) |
27
27
  | CD008 | Long artifact retention | retention edit |
28
28
 
29
- CD001 helps overlapping superseded PR runs. CD005 caps abnormal runs; it does not reduce normal job runtime. CD008 changes artifact storage retention, not runner minutes. CD003 and CD005 remain off until their quality gates pass. CD006 is a default static rule for one narrow npm shape: it adds setup-node's download cache while `npm ci` and every test still run. A cache can reduce downloads after it warms up; no time or money saving is claimed until cold and warm runs are compared.
29
+ CD001 helps overlapping superseded PR runs. CD005 caps abnormal runs; it does not reduce normal job runtime. CD008 changes artifact storage retention, not runner minutes. CD003 and CD005 remain off until their quality gates pass.
30
+
31
+ CD006 also supports verified npm/pnpm setups and Bun jobs using `oven-sh/setup-bun@v2` followed by `bun install --frozen-lockfile` with a tracked text `bun.lock`. Bun adds a download-cache step; installation and tests still run. Cache restore/save overhead can outweigh the benefit. See the [current cache guards](docs/spec/rules.md#bun-dependency-cache-variant) and [a measured example](docs/measurements/2026-10-25-cache-review.md). The npm example below demonstrates one supported shape.
30
32
 
31
33
  ## Install and upgrade
32
34
 
33
35
  The CLI requires Node `^22.19.0 || >=24.0.0`. The plugin supports DSH `>=0.2.1-rc.2 <0.3.0-0` and `>=0.2.2-rc.1 <0.3.0-0`. Version `0.3.1` was tested against DSH `0.2.1-rc.2`; DSH `0.3.0` is not supported.
34
36
 
35
37
  ```
36
- npm install --global dsh-ci-diet@0.4.0
38
+ npm install --global dsh-ci-diet@0.5.0
37
39
  ci-diet --version
38
40
  ```
39
41
 
40
- Without a global install, replace the `ci-diet` command name with `npx dsh-ci-diet@0.4.0`, for example `npx dsh-ci-diet@0.4.0 report --cwd .`.
42
+ Without a global install, replace the `ci-diet` command name with `npx dsh-ci-diet@0.5.0`, for example `npx dsh-ci-diet@0.5.0 report --cwd .`.
41
43
 
42
44
  ```
43
- dsh plugin --profile web add dsh-ci-diet@0.4.0
45
+ dsh plugin --profile web add dsh-ci-diet@0.5.0
44
46
  dsh --profile web
45
47
  ```
46
48
 
@@ -77,7 +79,7 @@ The plugin preview does not save a plan. Its `nextCommand` re-creates the plan t
77
79
 
78
80
  ## Offline npm cache plan (CD006)
79
81
 
80
- CD006 needs no run history. It matches a job at the repository root where `actions/checkout` has no user `with` options, exactly one `actions/setup-node@v3` or `@v4` step follows it without caching, and the next step's `run` is exactly `npm ci`. The root `package.json` and `package-lock.json` must be committed, regular JSON files. The plan adds only `cache: npm` and `cache-dependency-path: package-lock.json` to setup-node; it does not change Node, action versions, `npm ci`, tests, or local caching.
82
+ CD006 needs no run history. It matches exactly one setup-node v3–v7 and an unconditional `npm ci` or `pnpm install --frozen-lockfile`, with a prior checkout and tracked package manifest/lockfile. Literal step/job/workflow working directories are supported. pnpm must be installed by a prior `pnpm/action-setup`. The plan adds only `cache` and `cache-dependency-path`; installs and tests still run. Existing cache inputs and `package-manager-cache` opt-outs are preserved, and modern setup-node automatic caching is excluded. SHA-pinned setup-node and dynamic/mixed installs remain review-only (no automatic patch).
81
83
 
82
84
  ```
83
85
  ci-diet plan --cwd . --rule CD006 --workflow .github/workflows/ci.yml --job test --step 1
@@ -102,7 +104,7 @@ ci-diet plans --cwd . --plan PLAN_ID
102
104
  ci-diet report --cwd . --lang ko
103
105
  ```
104
106
 
105
- `scan` checks workflow files. `sync` reads history only after `--network`; `--repo` selects `OWNER/REPO` explicitly and `--days` adjusts the lookback within its configured bounds. `report` renders text, JSON, or HTML and writes `--out` relative to `--cwd`. `diagnose` explains job-name matching and coverage from stored history; add `--require-complete` to exit `3` for incomplete data. `prune` removes expired reports, plans, and cache entries under the state store settings. `changes` lists applied changes; `plans` reopens a saved plan. `--config FILE` merges a partial JSON configuration for any command.
107
+ `scan` checks workflow files. `sync` reads history only after `--network`; `--repo` selects `OWNER/REPO` explicitly and `--days` adjusts the lookback within its configured bounds. `report` renders text, JSON, or HTML and writes `--out` relative to `--cwd`. `diagnose` explains job-name matching and coverage from stored history; add `--require-complete` to exit `3` for incomplete data. `prune` removes expired reports, plans, and cache entries under the state store settings. `measure --change <id> --before-runs <ids> --after-runs <ids> --network` links selected actual runs to an applied change using exact workflow hashes and reports runner-time differences plus success/rerun counts; see [measurement limits](docs/guide/plugin.md#measuring-an-applied-change). `changes` lists applied changes; `plans` reopens a saved plan. `--config FILE` merges a partial JSON configuration for any command.
106
108
 
107
109
  ## Review, approve, apply, and revert
108
110
 
@@ -118,7 +120,7 @@ ci-diet revert --cwd . --change CHANGE_ID
118
120
 
119
121
  Replace `PLAN_ID` with the id printed by the plan, `CONFIRMATION` with its 12-character digest tail, and `CHANGE_ID` with the id printed by apply. Every value is a literal argument; do not type angle brackets. `approve` creates a single-use approval, `apply` rewrites only the planned byte range in one workflow file, and `revert` restores that change’s backup. Review the resulting diff and run the repository’s checks as needed. CI Diet does not commit, push, deploy, run workflows, change branch protection, or delete artifacts.
120
122
 
121
- For eligible PR-only CI, the CD001 example uses `ci-only` and `replace-safe` as human attestations. They state the operator’s review of cancellation semantics; they are not bypass switches. CD005 needs a measured `--job` and `--minutes`, and CD008 needs `--job`, a zero-based numeric `--step` array index for the target step, and artifact claims. CD006 needs `--job` and the zero-based `--step` index of the setup-node step; it has no claims. In both step rules, the numeric step is an array index, not a step-name token.
123
+ For eligible PR-only CI, the CD001 example uses `ci-only` and `replace-safe` as human attestations. They state the operator’s review of cancellation semantics; they are not bypass switches. CD005 needs a measured `--job` and `--minutes`, and CD008 needs `--job`, a zero-based numeric `--step` array index for the target step, and artifact claims. CD006 needs `--job` and the zero-based `--step` index of the setup-node/setup-bun step; it has no claims. In both step rules, the numeric step is an array index, not a step-name token.
122
124
 
123
125
  ## State and limitations
124
126
 
package/README.zh-Hans.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  [English](README.md) · [한국어](README.ko.md) · [简体中文](README.zh-Hans.md) · [हिन्दी](README.hi.md) · [Español](README.es.md) · [Français](README.fr.md)
4
4
 
5
- **状态:** alpha;`dsh-ci-diet@0.4.0` 已发布到 npm。当前源码树在现有契约、分析引擎、补丁引擎、CLI、DSH 工具、设置页面和自包含 HTML 报告之外,新增了 **设置 → CI Diet Reports** 审查页面。审查页面已在之前的提交中通过真实浏览器 E2E。一次性默认值迁移另行在 DSH `0.2.1-rc.2` 的 configEditor、SettingsForms 和 Loader 运行时中验证,并不表示这次重新验证了浏览器页面渲染。DSH 插件现在默认开启 preflight、历史网络访问和本地应用。
5
+ **状态:** alpha;`dsh-ci-diet@0.5.0` 已发布到 npm。当前源码树在现有契约、分析引擎、补丁引擎、CLI、DSH 工具、设置页面和自包含 HTML 报告之外,新增了 **设置 → CI Diet Reports** 审查页面。审查页面已在之前的提交中通过真实浏览器 E2E。一次性默认值迁移另行在 DSH `0.2.1-rc.2` 的 configEditor、SettingsForms 和 Loader 运行时中验证,并不表示这次重新验证了浏览器页面渲染。DSH 插件现在默认开启 preflight、历史网络访问和本地应用。
6
6
 
7
- **DSH 默认值与迁移。** 新建 DSH profile 时,`preflightEnabled`、`networkEnabled` 和 `localApplyEnabled` 默认为 `true`,并启用 CD001、CD002、CD004、CD006、CD008。首次启动已有 profile 时,CI Diet 通过 DSH `configEditor` 的加锁编辑保存这三个开关,把这些规则加入现有选择,并在该 profile 中记录 `defaultsRevision: 1`。状态路径、保留期、配额、计费输入以及原先显式启用的 CD003 或 CD005 会保留。保存后关闭的开关或被排除的规则会在重启和更新后继续生效;CD003 和 CD005 只在启用时运行,计费估算默认关闭且需要显式启用,原有的开启设置会保留。
7
+ **DSH 默认值和迁移。** 新配置档默认启用 `preflightEnabled`、`networkEnabled`、`localApplyEnabled` 以及 CD001、CD002、CD004、CD006、CD008。锁定配置档迁移会记录 `defaultsRevision: 2`。已经迁移到修订版 1 的配置档会保留之后选择的开关和规则。状态路径、保留期限、配额和现有数值型账户输入均会保留。除非主动启用,CD003 和 CD005 保持关闭。金额估算会自动使用两项账户输入;留空表示未知,显式填写 `0` 是有效的。以前启用过计费的配置档在省略某个值时,会保留其零默认值。
8
8
 
9
9
  CI Diet 用于查找可能被浪费的 GitHub Actions 工作,保留每个发现背后的证据,并预览供人审查的小型 workflow 修改。
10
10
 
@@ -23,24 +23,26 @@ CI Diet 用于查找可能被浪费的 GitHub Actions 工作,保留每个发
23
23
  | CD003 | 仅文档变更仍执行重型检查 | 仅解释,默认关闭 |
24
24
  | CD004 | 过大的矩阵 | 仅解释 |
25
25
  | CD005 | 缺少 `timeout-minutes` 的 job | timeout 编辑,默认关闭 |
26
- | CD006 | 未启用 npm 缓存却运行 `npm ci` 的 `actions/setup-node@v3` 或 `@v4` job | 两个 setup-node 输入,默认开启 |
26
+ | CD006 | npm / pnpm / Bun | [CD006](docs/spec/rules.md) |
27
27
  | CD008 | 过长的 artifact 保留时间 | 保留时间编辑 |
28
28
 
29
- CD001 针对因出现较新提交而重叠、已被取代的 PR 运行。CD005 为异常运行设置上限,不会缩短正常 job 的运行时间。CD008 改变 artifact 的存储保留时间,与 runner 分钟无关。CD003 和 CD005 在通过质量门槛前默认关闭。CD006 是面向一种狭窄 npm 形态的默认静态规则:它为 setup-node 打开下载缓存,`npm ci` 和所有测试仍会运行。缓存预热后可能减少下载,但在比较冷缓存和热缓存运行之前,不声称节省时间或费用。
29
+ CD001 针对因出现较新提交而重叠、已被取代的 PR 运行。CD005 为异常运行设置上限,不会缩短正常 job 的运行时间。CD008 改变 artifact 的存储保留时间,与 runner 分钟无关。CD003 和 CD005 在通过质量门槛前默认关闭。
30
+
31
+ CD006 还支持经过验证的 npm/pnpm 配置,以及使用 `oven-sh/setup-bun@v2`、随后执行 `bun install --frozen-lockfile` 并且采用受跟踪的文本文件 `bun.lock` 的 Bun 作业。Bun 会增加一个下载缓存步骤;安装和测试仍会运行。缓存恢复/保存的开销可能超过其收益。请参阅[当前缓存防护](docs/spec/rules.md#bun-dependency-cache-variant)和[一个实测示例](docs/measurements/2026-10-25-cache-review.md)。下面的 npm 示例展示了其中一种受支持的配置。
30
32
 
31
33
  ## 安装与升级
32
34
 
33
35
  CLI 需要 Node `^22.19.0 || >=24.0.0`。插件支持 DSH `>=0.2.1-rc.2 <0.3.0-0` 和 `>=0.2.2-rc.1 <0.3.0-0`。版本 `0.3.1` 已在 DSH `0.2.1-rc.2` 上验证;不支持 DSH `0.3.0`。
34
36
 
35
37
  ```
36
- npm install --global dsh-ci-diet@0.4.0
38
+ npm install --global dsh-ci-diet@0.5.0
37
39
  ci-diet --version
38
40
  ```
39
41
 
40
- 如果不希望全局安装,请把命令名 `ci-diet` 替换为 `npx dsh-ci-diet@0.4.0`,例如 `npx dsh-ci-diet@0.4.0 report --cwd .`。
42
+ 如果不希望全局安装,请把命令名 `ci-diet` 替换为 `npx dsh-ci-diet@0.5.0`,例如 `npx dsh-ci-diet@0.5.0 report --cwd .`。
41
43
 
42
44
  ```
43
- dsh plugin --profile web add dsh-ci-diet@0.4.0
45
+ dsh plugin --profile web add dsh-ci-diet@0.5.0
44
46
  dsh --profile web
45
47
  ```
46
48
 
@@ -118,7 +120,7 @@ ci-diet revert --cwd . --change CHANGE_ID
118
120
 
119
121
  把 `PLAN_ID` 换成 plan 输出的 id,把 `CONFIRMATION` 换成 digest 的最后 12 个字符,把 `CHANGE_ID` 换成 apply 输出的 id。每个值都作为字面参数传入,不要输入尖括号。`approve` 创建一次性批准,`apply` 只改写一个 workflow 文件中计划好的字节范围,`revert` 恢复该变更的备份。检查结果 diff,并按需运行仓库检查。CI Diet 不会提交、推送、部署、运行 workflow、修改分支保护或删除 artifact。
120
122
 
121
- 对于符合条件的仅 PR CI,CD001 示例中的 `ci-only` 和 `replace-safe` 是人工 attestation。它们表示操作者已经审查取消运行的语义,不是绕过开关。CD005 需要测量得到的 `--job` 和 `--minutes`;CD008 需要 `--job`、目标 step 从 0 开始的数字 `--step` 数组索引以及 artifact claims。CD006 需要 `--job` 和 setup-node 步骤从 0 开始的 `--step` 索引,不需要 claims。两个步骤规则中的数字 step 都是数组索引,不是步骤名称令牌。
123
+ 对于符合条件的仅 PR CI,CD001 示例中的 `ci-only` 和 `replace-safe` 是人工 attestation。它们表示操作者已经审查取消运行的语义,不是绕过开关。CD005 需要测量得到的 `--job` 和 `--minutes`;CD008 需要 `--job`、目标 step 从 0 开始的数字 `--step` 数组索引以及 artifact claims。CD006 需要 `--job` 和 setup-node/setup-bun 步骤从 0 开始的 `--step` 索引,不需要 claims。两个步骤规则中的数字 step 都是数组索引,不是步骤名称令牌。
122
124
 
123
125
  ## 状态与限制
124
126