diff --git a/docs/architecture.md b/docs/architecture.md index 5389ab0..91499ce 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1088,6 +1088,23 @@ jobs clone sources by hand with `git init`/`fetch`/`checkout` rather than jobs don't share a filesystem, so each clones independently; `publish` only starts once `test` succeeds. +**A real failure on the very first two runs**, caught by actually watching +the pipeline rather than assuming green: `"test": "tsx --test +test/**/*.test.ts"` worked perfectly locally and failed on the runner with +`Could not find '.../test/**/*.test.ts'`, as if the literal glob string +had been handed to Node as a filename. It had - `node --test` gained +native glob-pattern CLI arguments only around Node 21/22, and this dev +machine's global `node` is v22, while the CI job (deliberately pinned to +`node:20-alpine`, matching `server/Dockerfile`'s runtime image) is v20 - +same script, two Node majors, one of which silently doesn't glob-expand +the argument at all and just looks for a file with `*` characters in its +literal name. Fixed by listing the four test files explicitly in the +script instead of trusting a glob to be interpreted the same way on every +Node version this project targets (`engines.node` is `>=18`) - a +one-time list-maintenance cost in exchange for not depending on a CLI +feature whose availability turned out to vary across the exact two Node +installs this project actually runs on. + Client: since esbuild bundles everything into one `app.js` (no more individually-importable view modules the way separate `