Session 12 — A fresh Codespace runs piece 1 end to end
Goal
After merging PR #9, the author built a second fresh Codespace from the README badge, on master at cd894cd, and ran every check from session 11’s “Next”. They pasted the output, along with the output of /series-status from a new Claude session in that Codespace.
What we did
- The test the badge owed, passed. In the fresh Codespace:
make check-envreportedsigned in: yesandTier C (cloud) ready: yes, with Python 3.12.16. The author hadn’t runmake login, so the setup script signed in by itself: Codespaces does pass the secrets topostCreateCommand.make test(15 tests),make article-checkandmake site-checkpassed.make compare-01reported identical results: host Python 3.12.16, cloud 3.14.4, 12 s, sha256efae1944….sbx --cloud lswas empty afterwards./series-status, the renamed command, gave the summary in a new Claude session and changed no files.
- One failure:
make lintstopped withdocker: not found. The Makefile usesshellcheckandactionlintfrom the system, and otherwise falls back to their Docker images. The old Codespace and CI’s runner have Docker; a Codespace built from this devcontainer has neither the tools nor Docker. scripts/install-linters.sh(e1888d2), run bypost-create.sh:- it installs
shellcheck0.10.0 andactionlint1.7.12, the same versions as the Docker images; - it refuses any archive whose SHA-256 doesn’t match.
actionlint’s hashes match its release’s checksums file.shellcheckpublishes none, so its hashes are those downloaded today.
Tested in the old Codespace: a fresh install, a second run (already installed), a tampered hash (refused, exit 1), and
make lintpassing with the binaries. Its firstmake lintcaught an issue in the installer itself (SC2155), fixed before the commit.- it installs
- The record: CLAUDE.md §9.3 now says the Codespaces badge has passed its test. The
sbxnotes record the second fresh build.
Commands that mattered
As the author ran them in the fresh Codespace, from the Makefile:
make check-env # signed in: yes; Tier C (cloud) ready: yes
make test # 15 tests
make lint # failed without Docker; fixed by scripts/install-linters.sh
make article-check
make site-check
make compare-01 # compare: identical
sbx --cloud ls # No sandboxes found
Decisions
- No ADR. Installing the linters’ release binaries instead of adding Docker to the devcontainer keeps the Codespace light and unprivileged. The Docker fallback stays for machines that have Docker.
Dead ends and surprises
- The old Codespace hid a second gap. Its Docker made
make lintwork without anyone choosing that. CI’s runner has Docker too. Only the fresh build showed that the devcontainer alone couldn’t lint. - Two Claude sessions at once. The author opened a new session in the fresh Codespace while this one, in the old Codespace, kept the work going. The new session only read files, so nothing collided. Two sessions writing to the same branch would collide.
- No stray escape sequences this time. The
^[]11;rgb:…lines from session 10 didn’t appear in the fresh Codespace’s terminal, so they depend on the terminal more than onsbx.
Who did what
- The author: merged PR #9, built the second fresh Codespace, ran every check and pasted the results, and ran
/series-statusthere. - Claude: read the results, wrote and tested the linter installer, and updated the record.
Next
- The author: merge this PR.
- Claude: tag
piece-01-v1on the merge commit, check that piece 1’s code links resolve, and add the “Latest tag” badge. - The author: publish piece 1, then the overture, following
articles/PUBLISHING.md, and send the two URLs.