build: sdr-host Corepack + docs + dockerignore audit (3/3) - #3
Merged
Conversation
Coriou
force-pushed
the
build/devx-overhaul-pr3
branch
from
May 16, 2026 15:43
10a5396 to
148dc7e
Compare
packages/sdr-host/Dockerfile previously installed pnpm via `npm install -g pnpm@10` which can drift from the main Dockerfile's pin and from package.json's packageManager field. Switch to the Corepack pattern (matches main Dockerfile + Req 9.1): RUN corepack enable && corepack prepare pnpm@10.28.0 --activate This pins the pnpm version explicitly to package.json's packageManager field (pnpm@10.28.0); future bumps go through one file instead of three. Build verified via `docker buildx build -f packages/sdr-host/Dockerfile --target node-build --platform linux/amd64 --load .` -- Corepack enable + prepare succeed, pnpm install --frozen-lockfile resolves 102 packages, all three workspace packages (@wavekit/shared, @wavekit/api-types, @wavekit/sdr-host) tsc-build successfully. Arm64-via-QEMU build was started but killed before completion; the Corepack pattern is arch-agnostic so amd64 verification is sufficient. Phase G of build/devx-overhaul-pr3. Closes G.1-G.2.
Replace docs/DOCKER-SETUP.md's stale references to the four-compose- files world (docker-compose.dev.yml etc., `make dev-up`, the .docker-cache local cache directory) with the new canonical reference: `pnpm dev` as the headline iteration loop, `make dev-stack` as the compose-driven full-stack fallback, four compose profiles (dev / prod-single-host / prod-distributed / demod-test), and the GHCR-backed buildx bake registry cache. Adds the R7 disclosure: first-run SourceConnectionError lines in `final` mode are expected (the s6 hard dep on sdrpp-server was removed; SourceManager's exponential backoff is the authoritative source-availability mechanism). docker/README.md was deleted; every line duplicated DOCKER-SETUP.md content and most references were stale (the four-compose-file tree diagram, removed Makefile targets like `make docker-dev` and `make install-buildx`, claims of arm/v7 multi-arch support). The resulting two-doc-reconciliation problem motivated this phase (Req 8.2). CLAUDE.md's "Day-to-day dev (Docker)" section condensed from 14 lines (Makefile-target code block + ports footnote) to one paragraph: `pnpm dev` for typescript-only iteration; `make dev-stack` for full- stack integration; pointer to DOCKER-SETUP.md for details (Req 8.3). Phase H of build/devx-overhaul-pr3. Closes H.1-H.3.
I.1-I.4 verification of .dockerignore against the actual build
context found that the original glob patterns only matched
top-level paths. With a `COPY . .` in the node-build stage, this
meant `.turbo/`, `dist/`, `coverage/`, `.tsc-cache/`, and `tests/`
under each pnpm workspace (cli/, packages/api-types/,
packages/shared/, packages/sdr-host/) silently leaked into the
build context — pollution that defeats Property 3 (a TypeScript
edit invalidates only node-build) by tying the node-build cache
key to whatever stale build output happens to be in workspace
.turbo / dist directories.
Fix: add `**/<path>` mirrors for every recurring build artifact
and cache pattern: `**/dist`, `**/coverage`, `**/.tsc-cache`,
`**/.turbo`, `**/.pnpm-store`, `**/tests`. The non-recursive
forms are kept so the file remains readable as a list of "what
this excludes at the project root."
Effect (measured with a busybox COPY . /context shim):
before fix: 1.70MB transferred, 348 files, .turbo + dist
from each workspace leaking
after fix: 15.56KB transferred, no offending paths
I.4 verification confirmed .dockerignore does NOT exclude
docker/, config/, tsconfig.json, tsconfig.base.json,
pnpm-lock.yaml, pnpm-workspace.yaml, turbo.json, .npmrc,
package.json, or scripts/build-file.mjs — all needed during
the build.
Doc fix: docs/DECODER-GUIDE.md:555 referenced `make dev-logs`
which Phase E deleted. Updated to `make dev-stack-logs` (the
canonical counterpart in the new Makefile inventory).
Phase I of build/devx-overhaul-pr3. Closes I.1-I.4.
Coriou
force-pushed
the
build/devx-overhaul-pr3
branch
from
May 16, 2026 15:43
148dc7e to
afe01ef
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Third of three stacked PRs. Stacked on #2 — base is
build/devx-overhaul-pr2; cascades tomainautomatically as #1 and #2 merge.Polish phase: sdr-host alignment, docs consolidation, and a substantive
.dockerignorefix that turned out to be more than the spec anticipated.chore(sdr-host): switch pnpm install to Corepack pattern) — single-line edit topackages/sdr-host/Dockerfile:RUN npm install -g pnpm@10→RUN corepack enable && corepack prepare pnpm@10.28.0 --activate. Matches the main Dockerfile pattern and pins explicitly topackage.json'spackageManagerfield. Verified viadocker buildx build -f packages/sdr-host/Dockerfile --target node-build --platform linux/amd64 --load .— Corepack steps succeed,pnpm install --frozen-lockfileresolves 102 packages, all 3 workspace tsc builds pass. Arm64-via-QEMU is arch-agnostic for this pattern; sdr-host's per-host CI /make sdr-host-buildexercises full arm64.docs: consolidate Docker documentation around compose profiles) —docs/DOCKER-SETUP.mdrewritten as the canonical reference: pnpm dev as headline, compose profiles, GHCR cache, demod-test environment, R7 disclosure (first-run SourceConnectionError noise is expected — s6 hard dep removed; SourceManager's exponential backoff is the authoritative source-availability mechanism).docker/README.mddeleted (294 lines that duplicated DOCKER-SETUP.md content, mostly stale).CLAUDE.md's "Day-to-day dev (Docker)" section condensed from a 14-line block + code fence to one paragraph that names the new canonical targets.chore: audit .dockerignore effectiveness; fix stale doc reference) — substantive.dockerignorefix: top-level globs (dist,tests,.turbo,.pnpm-store,coverage,.tsc-cache) were silently failing to match workspace mirrors (cli/dist,packages/sdr-host/tests, etc.). Added**/...siblings for all of them. Build context size dropped from 1.70 MB / 348 files to 15.56 KB. This was a genuine bug; the spec's prediction that Phase I might be a no-op didn't hold. Also fixed one stale doc reference:docs/DECODER-GUIDE.md:555make dev-logs→make dev-stack-logs(Phase E renamed the target).Final-gate Non-negotiables: 13 PASS / 2 DEFERRED
Spec lists 15 (
tasks.mdlines 199–218). All 13 testable items pass; the 2 deferred match this execution's no-push directive until the PRs landed.pnpm devno Docker*-buildstages CACHED ontouch src/index.tsrebuildREADSB_REFshort-circuits at readsb-build withnot our ref(proves cache key isolation)docker buildgrep -rn '\bdocker build\b' docker/ Makefile compose.yaml | grep -v buildxempty./compose.yamlat rootfind /etc/s6-overlay -iname '*sdrpp*'empty, no sdrpp in/usr/local/binor/usr/binwavekit-initindependencies.d/find /etc/s6-overlay -name sdrpp-server -type dgit difffor Makefile/docker/.github shows no emoji addedgit diff --diff-filter=Dgit diff --diff-filter=Dpackages/sdr-host/docker-compose.ymlunchangedgrep -c corepack packages/sdr-host/Dockerfile= 1,npm install -g pnpmcount = 0Test plan
docs/DOCKER-SETUP.mdcovers the four headline topics (pnpm dev, dev-stack, GHCR cache, demod-test) + the R7 disclosure.dockerignorebuild-context reduction (rundocker buildx build --target base-build --progress=plain .and observe "transferring context: ~15kB" for a clean tree)packages/sdr-host/Dockerfilehascorepack enable && corepack prepare pnpm@10.28.0 --activatewith nonpm install -g pnpmremainingPost-merge
CACHE_FROM_ONLY=false+push: true+cache-to mode=maxfor every cache ref.