背景
root package.json は packages/* を npm workspace として扱っている一方、quality gate は各 workspace の script / workflow 定義に依存している。
現在 root の lint / test 等で --if-present を使う場合、新しい workspace が必要な script を持たずに追加されても repository 全体の command が成功しうる。
また runtime package 以外の tooling package(例: packages/bin)は dependency graph ベースの CI 設計から漏れやすい。
さらに package 一覧をコード側で手書きすると、npm workspaces と別の source of truth が発生する。
目的
「workspace を追加したが lint / test / build / CI のどこからも検査されていない」という状態を機械的に禁止する。
実装案
root workspace definition から package 一覧を取得し、それを single source of truth とする。
各 workspace に metadata / capability を持たせる。
例:
workspace: api
kind: runtime
required:
- lint
- format-check
- build
- test
- ci
workspace: bin
kind: tooling
required:
- lint
- format-check
- typecheck
- test
- ci
checker で以下を検査する。
- workspace が必要な quality script を持つか
- script が空文字 / no-op になっていないか
- CI workflow から workspace が到達可能か
- root verify が全 workspace を含んでいるか
- package list の手書き複製がないか
設計方針
--if-present を全面禁止する必要はない。
「optional script である」と明示された workspace だけ skip を許可し、required quality gate について silent skip を許可しない設計にする。
Acceptance Criteria
背景
root
package.jsonはpackages/*を npm workspace として扱っている一方、quality gate は各 workspace の script / workflow 定義に依存している。現在 root の
lint/test等で--if-presentを使う場合、新しい workspace が必要な script を持たずに追加されても repository 全体の command が成功しうる。また runtime package 以外の tooling package(例:
packages/bin)は dependency graph ベースの CI 設計から漏れやすい。さらに package 一覧をコード側で手書きすると、npm workspaces と別の source of truth が発生する。
目的
「workspace を追加したが lint / test / build / CI のどこからも検査されていない」という状態を機械的に禁止する。
実装案
root workspace definition から package 一覧を取得し、それを single source of truth とする。
各 workspace に metadata / capability を持たせる。
例:
checker で以下を検査する。
設計方針
--if-presentを全面禁止する必要はない。「optional script である」と明示された workspace だけ skip を許可し、required quality gate について silent skip を許可しない設計にする。
Acceptance Criteria
packages/binを含む tooling workspace も検査対象になる