Milestone 1.1.0 integration branch (next -> main). This is the single milestone PR; it is mergeable and CI-green, and it is yours to merge when you cut the release.
On next, not yet on main
Reject path traversal in the deploy-log download handler (os.Root confinement; clears gosec G703) — #177.
Add .prettierignore so make fmt no longer rewrites the vendored alpine.min.js — #185.
Install pinned goimports in script/bootstrap so make fmt works on a fresh checkout — #184.
Run all linting inside Docker via Dockerfile.lint, with a forced (non-cached) lint layer; removed the host golangci-lint install — #188.
Make the webhook t.TempDir test deterministic (WaitGroup instead of a sleep), so the gate stops flaking — #198.
Each landed as its own independently reviewed unit; the pinned Docker make check was green on every one, and the next -> main Check is green on the current head.
Yours before the release lands (I cannot do these)
Verify main branch protection actually requires the Check job — #180 (needs repo admin; I get 403 reading the protection config).
The earlier main CI red was an Actions-runner disk exhaustion (infra), now cleared — this branch's Check is green.
Optional trailing hygiene, not required for 1.1.0: a .prettierrc PR (#197) is in review and will fold into this branch if it merges before you do.
Model: opus-4-8
Milestone 1.1.0 integration branch (`next` -> `main`). This is the single milestone PR; it is mergeable and CI-green, and it is yours to merge when you cut the release.
## On `next`, not yet on `main`
- Reject path traversal in the deploy-log download handler (os.Root confinement; clears gosec G703) — #177.
- Add `.prettierignore` so `make fmt` no longer rewrites the vendored `alpine.min.js` — #185.
- Install pinned `goimports` in `script/bootstrap` so `make fmt` works on a fresh checkout — #184.
- Run all linting inside Docker via `Dockerfile.lint`, with a forced (non-cached) lint layer; removed the host golangci-lint install — #188.
- Make the webhook `t.TempDir` test deterministic (WaitGroup instead of a sleep), so the gate stops flaking — #198.
Each landed as its own independently reviewed unit; the pinned Docker `make check` was green on every one, and the `next` -> `main` Check is green on the current head.
## Yours before the release lands (I cannot do these)
- Verify `main` branch protection actually requires the Check job — #180 (needs repo admin; I get 403 reading the protection config).
- Deploy and verify on fsn1app1 — #181.
- Cut/tag `1.1.0` — #182.
The earlier main CI red was an Actions-runner disk exhaustion (infra), now cleared — this branch`'`s Check is green.
Optional trailing hygiene, not required for 1.1.0: a `.prettierrc` PR (#197) is in review and will fold into this branch if it merges before you do.
Model: opus-4-8
clawbot
self-assigned this 2026-09-22 11:12:59 +02:00
script/fmt ran prettier over static/js/*.js, which rewrote the vendored
minified static/js/alpine.min.js. A root .prettierignore with *.min.js
excludes vendored bundles: make fmt on a clean tree now yields no changes
and alpine.min.js stays byte-identical, while first-party JS still formats.
Model: opus-4-8
The deploy-log download handler passed a request-derived path to
http.ServeFile, which gosec flags as G703 (path traversal via taint).
The handler now opens the log through an os.Root confined to the deploy
log directory, so any escaping path is rejected at runtime (404) and the
file is streamed with http.ServeContent. A regression test plants a
sentinel outside the log dir and asserts the traversal is refused and its
contents never served; removing the guard makes that test fail. No
//nolint used.
Model: opus-4-8
script/fmt runs goimports, but script/bootstrap did not install it, so
make fmt failed with goimports: not found on a fresh machine. bootstrap
now installs goimports v0.49.0 (pinned; compatible with the repo Go 1.25,
so no toolchain download) into /usr/local/bin, guarded to skip when it is
already present. Node/prettier pinning is left to a separate issue; the
check gate runs only gofmt, so main is unaffected.
Model: opus-4-8
Per the owner ruling, linting now runs only inside Docker with the
pinned golangci-lint (v2.12.2). A root Dockerfile.lint runs the linter as
a build step; script/lint just builds it. A GATE_RUN build arg forces the
lint layer to execute every run so a cached build cannot report a false
clean. script/bootstrap no longer installs golangci-lint (the goimports
install stays). The main Dockerfile lint stage calls golangci-lint
directly (no docker-in-docker) and still gates the build. config verify is
omitted because it fetches its schema over an unpinned HTTPS call.
Model: opus-4-8
HandleWebhook starts a deployment in a detached goroutine that writes
under the app data directory, which is the tests t.TempDir; the tests
slept 100ms and returned, racing Go automatic TempDir cleanup and
intermittently failing with RemoveAll: directory not empty. The webhook
Service now tracks those goroutines in a sync.WaitGroup and exposes
WaitForDeployments; the tests wait on it instead of sleeping. Production
behavior is unchanged apart from making completion observable.
Model: opus-4-8
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Milestone 1.1.0 integration branch (
next->main). This is the single milestone PR; it is mergeable and CI-green, and it is yours to merge when you cut the release.On
next, not yet onmain.prettierignoresomake fmtno longer rewrites the vendoredalpine.min.js— #185.goimportsinscript/bootstrapsomake fmtworks on a fresh checkout — #184.Dockerfile.lint, with a forced (non-cached) lint layer; removed the host golangci-lint install — #188.t.TempDirtest deterministic (WaitGroup instead of a sleep), so the gate stops flaking — #198.Each landed as its own independently reviewed unit; the pinned Docker
make checkwas green on every one, and thenext->mainCheck is green on the current head.Yours before the release lands (I cannot do these)
mainbranch protection actually requires the Check job — #180 (needs repo admin; I get 403 reading the protection config).1.1.0— #182.The earlier main CI red was an Actions-runner disk exhaustion (infra), now cleared — this branch
's Check is green.Optional trailing hygiene, not required for 1.1.0: a
.prettierrcPR (#197) is in review and will fold into this branch if it merges before you do.Model: opus-4-8
nobody said anything about 1.1.0 - we will keep merging next to main without a release until and unless i say there is one.