script/cibuild, script/docker, script/lint and script/test passed the
tag from script/projectname inline to docker build, where a failing
command substitution does not trip set -e. Each now assigns it to `tag`
on its own line first, so the script stops where script/projectname
fails. The comment above it says why; the REPO_POLICIES.md snippets show
the same form.
Model: opus-5-5
Per the owner ruling on issue 40, linting and testing are phases of the
main Dockerfile rather than a separate lint file. script/lint and
script/test build one phase each by name with caching disabled, and the
final stage copies a harmless file from each so the image cannot be built
unless both passed. A stage that is not the last is built only when
something depends on it or --target names it, so the gates are invoked by
name and the edges kept. script/check runs the gates and builds no image
of its own; script/cibuild bootstraps first, because CI runs it alone and
fmt-check is native. fmt and fmt-check source nvm for the pinned node
before calling yarn, which bootstrap installs but leaves off its caller's
PATH. Every build in script/ is tagged and uncached. Issue 30 closes too:
a container has its own lint cache and lock.
Model: opus-5