fix(ci): make npm run ci --full actually run the full gate

scripts/ci-local.sh gated its two storybook + axe steps on
`[[ "${1:-}" == "--full" ]]`, so the flag had to arrive as a positional
argument. CLAUDE.md documents `npm run ci --full`, but npm parses that
flag itself and exports `npm_config_full=true` instead of passing it
through. Proven with `npm run env --full`.

The documented command therefore skipped both steps and still printed
"local CI passed" — a gate that reported success without running. Anyone
following CLAUDE.md has been skipping storybook-a11y.

Accept either form. Fixing the script makes every existing document
correct, instead of changing four of them and re-teaching the reader.

Found while verifying RD-06, which adds stories and so depends on those
steps actually running.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
eho
2026-09-04 16:57:37 +02:00
co-authored by Claude Opus 5
parent 0c6fd37ed8
commit d9c56b0c24
2 changed files with 15 additions and 1 deletions
+10
View File
@@ -859,6 +859,16 @@ Measured against the current tree, not assumed:
files, so the folder=layer move is mechanical, not a taxonomy debate. The two: files, so the folder=layer move is mechanical, not a taxonomy debate. The two:
`async.component.ts` has no tag at all, and `breadcrumb.component.ts` says `/** Chrome: */`. `async.component.ts` has no tag at all, and `breadcrumb.component.ts` says `/** Chrome: */`.
**A live CI-gate defect, found while executing RD-06 (now fixed).**
`scripts/ci-local.sh` gated its storybook + axe steps on `[[ "${1:-}" == "--full" ]]`, but
CLAUDE.md documents `npm run ci --full` — and npm parses that flag itself, exporting
`npm_config_full=true` instead of passing `--full` through as `$1`. Proven with
`npm run env --full`. So the documented command **skipped both steps and still printed
"local CI passed"**: a gate reporting success without running. The script now accepts either
form, which makes every existing doc correct rather than requiring them all to change. This
matters directly for RD-27, whose highest risk is a broken `.mdx` story import that **only**
`build-storybook` catches.
And four corrections to claims made **earlier in this same investigation**, caught by reading And four corrections to claims made **earlier in this same investigation**, caught by reading
the consumers and the rule semantics rather than the definitions: the consumers and the rule semantics rather than the definitions:
+5 -1
View File
@@ -34,7 +34,11 @@ step "showcase snippets drift"; npm run gen:snippets; git diff --exit-code app
step "behaviour spec drift"; npm run gen:behaviour-spec; git diff --exit-code libs/shared/docs/behaviour-spec.mdx step "behaviour spec drift"; npm run gen:behaviour-spec; git diff --exit-code libs/shared/docs/behaviour-spec.mdx
step "api-client drift"; npm run gen:api; git diff --exit-code libs/shared/src/infrastructure/api-client.ts backend/swagger.json step "api-client drift"; npm run gen:api; git diff --exit-code libs/shared/src/infrastructure/api-client.ts backend/swagger.json
if [[ "${1:-}" == "--full" ]]; then # Accept both `npm run ci -- --full` (arrives as $1) and `npm run ci --full` (npm parses the
# flag itself and exports npm_config_full=true instead of passing it through). CLAUDE.md
# documents the second form, which used to skip these two steps silently and still print
# "local CI passed" — a gate that reported success without running.
if [[ "${1:-}" == "--full" || "${npm_config_full:-}" == "true" ]]; then
step "storybook build + axe (ssp)"; npm run build-storybook; npm run test-storybook:ci step "storybook build + axe (ssp)"; npm run build-storybook; npm run test-storybook:ci
step "storybook build + axe (behandelportal)"; npm run build-storybook:behandelportal; npm run test-storybook:ci:behandelportal step "storybook build + axe (behandelportal)"; npm run build-storybook:behandelportal; npm run test-storybook:ci:behandelportal
fi fi