Skip to content

fix(ci): pin Bun across the L1 contract suite - #762

Merged
vansin merged 4 commits into
mainfrom
fix/728-pin-l1-bun
Aug 12, 2026
Merged

fix(ci): pin Bun across the L1 contract suite#762
vansin merged 4 commits into
mainfrom
fix/728-pin-l1-bun

Conversation

@vansin

@vansin vansin commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Outcome

Pins Bun across the complete scripts/qa.sh --l1 Docker denominator using the official image's immutable OCI digest.

This is a substantial partial fix for #728, but intentionally does not close the remaining non-L1 Dockerfile denominator.

Frozen coordinates (supersedes the archive-helper coordinates)

  • base used by the original source: 05d4b73e9efe42421700e56e163164759a361eb0
  • final source: 79e4acea0ff8e91d3772040da7d41fe1c02905e7
  • report-only head: e8fabbfbebbd95e95dfd52ca18ceabdf815111cc
  • source → report delta: exactly docs/tests/report-l1-pinned-bun.txt
  • the previous source/report 2c95173b / b40411f1 are superseded after CI exposed random HTTP 22 failures in per-image archive downloads

Why the scope is the L1 denominator

PR #757 failed twice at unchanged curl ... bun.sh/install | bash layers. A one-file diagnostic moved the failure to the next identical Dockerfile, proving a denominator problem.

The current L1 inventory contains 14 Docker suites:

  • all 14 use oven/bun:1.3.14@sha256:e10577f0db68676a7024391c6e5cb4b879ebd17188ab750cf10024a6d700e5c4;
  • 13 Node-based final images copy Bun from that pinned stage and check bun + bunx are exactly 1.3.14;
  • test686 uses the same pinned image directly;
  • 0/14 retain bun.sh/install.

CI correction

The first complete-denominator source used a checksum-pinned archive helper. It passed 14/14 locally, but CI failed different helper consumers on two attempts:

  • attempt 1: qa-cli-01 + qa-cli-02;
  • attempt 2: qa-cli-01 + qa-hub-05;
  • failures were curl exit 22 while the other identical helper consumers passed.

Thirteen independent GitHub downloads were therefore not a reliable gate. The final source removes that helper and uses one content-addressed official Docker source. Runtime images remain node:20-slim.

Docker evidence

sg docker -c 'bash scripts/qa.sh --l1'
14/14 named suites PASS
ALL PASS in 115s
exit 0

Witnessed red: replacing qa-dash-07's Bun digest with 64 zeroes makes Docker fail before test layers with the exact digest not found.

The work also caught a real integration requirement: a Bun binary without a bunx symlink builds but breaks the real anet lifecycle. The final Node-based images create and version-check that symlink.

Boundary

@vansin

vansin commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

独立对抗窄审 · PR #762

Verdict: CLEAN — no BLOCKER, no MAJOR, no MINOR.

Reviewer: 通信IM马 (independent, read-only). Extracted PR tree via git archive origin/pr-762 → temp dir; author worktree untouched. No merge, no deploy.

Note: brief indicates the original grok测试6 reviewer hit a Grok 402 balance-exhausted error; this is the single replacement audit.


Provenance

value
HEAD (report-only) b40411f1d573b10e25649a79d40050427501a249 ✓ matches brief
source freeze 2c95173b112c7721c7777f7e444dff72bf1f2dc3 ✓ matches brief
base (merge-base w/ main) 05d4b73e9efe42421700e56e163164759a361eb0 ✓ matches brief
push-time main 546e4b01b617fe4c7d57f4c1520946dea7a9f02b ✓ matches brief
current main tip 29e4ae84... — moved slightly since push-time
files (base..HEAD) 15 (+161 / −48)
source→HEAD delta ONLY docs/tests/report-l1-pinned-bun.txt (+72) ✓ per brief
commits 2 (source 2c95173b, report b40411f1)

Item-by-item

① L1 denominator = 14 (13 helper + 1 pre-pinned) — CONFIRMED

Independent enumeration of scripts/qa.sh --list:

L1 contract (Docker, ~10-15s each):
  qa-cli-01-hub-start                     qa-cli-02-network-create
  qa-dash-07-auth-boundary                qa-dash-08-cross-account-views
  qa-dash-10-incremental-poll             qa-hub-05-roundtrip
  qa-hub-06-token-revoke                  qa-hub-06b-cross-user-isolation
  qa-hub-07-sse-reconnect                 qa-hub-08-restart-persistence
  qa-hub-09-task-state-machine            qa-node-02-success-reply
  qa-node-03b-task-events                 test686-rest-shape-golden

14 declared. 13 qa-* Dockerfiles modified in this PR to use the shared helper; test686-rest-shape-golden already had FROM oven/bun:1.3.14 (verified line 1). Report claim 13 Node-based images now use tests/lib/install-bun-pinned.sh; test686-rest-shape-golden already starts from oven/bun:1.3.14 — matches.

L1 bun.sh remainder = 0 (independent grep):

for d in <14 L1 dirs>; do grep -E 'bun\.sh|/install|install.bun' tests/$d/Dockerfile | grep -v install-bun-pinned; done
→ (empty)

② helper fail-closed properties — CONFIRMED (7/7)

tests/lib/install-bun-pinned.sh (24 lines) inspection:

gate evidence
x86_64 hard gate if [[ "$(uname -m)" != "x86_64" ]]; then ... exit 1; fi — fail-closed reject, no fallback
versioned URL https://github.com/oven-sh/bun/releases/download/bun-v${BUN_VERSION}/bun-linux-x64.zip — pinned per version
curl retry-all-errors curl --fail --silent --show-error --location --retry 3 --retry-delay 2 --retry-all-errors — errors 4xx/5xx included
SHA check BEFORE extraction sha256sum --check --strict on line 20 executes BEFORE unzip -j on line 21 — order is correct
bun 1.3.14 assertion test "$(bun --version)" = "$BUN_VERSION" — line 23
bunx exact 1.3.14 ln -sf bun /usr/local/bin/bunx (same binary, same version) + test "$(bunx --version)" = "$BUN_VERSION" — line 22 + 24
temp cleanup trap 'rm -f -- "$archive"' EXIT — line 13

Independent SHA verify:
Fetched Bun v1.3.14 upstream SHASUMS256.txt:

951ee2aee855f08595aeec6225226a298d3fea83a3dcd6465c09cbccdf7e848f  bun-linux-x64.zip

Exact match to BUN_LINUX_X64_SHA256 default in helper AND to ARG BUN_LINUX_X64_SHA256 in all 13 modified Dockerfiles.

Independent witnessed-red:

$ sg docker -c 'docker build -q --build-arg BUN_LINUX_X64_SHA256=0000...0 -f tests/qa-dash-07-auth-boundary/Dockerfile -t anet-pr762-badsha .'
ERROR: failed to build ... `bash /usr/local/libexec/install-bun-pinned.sh` did not complete successfully: exit code: 1

Bad SHA → helper's sha256sum --check --strict reds → RUN exits 1 → docker build fails. Confirmed the checksum gate reds real product path, not just self-consistency.

③ full sg docker -c 'bash scripts/qa.sh --l1' 14/14 result — CONFIRMED (author's evidence + my spot-check)

Report records:

  • 14/14 named L1 suites PASS
  • Aggregate: ALL PASS in 102s
  • Exit code 0
  • Runner log SHA256: 7f2663d628bc4c6bf0b2b26e46f92cde51fd2693d315e4afb238e2d9289b8321

My independent spot-check (one representative suite):

$ sg docker -c 'docker build -q -f tests/qa-hub-05-roundtrip/Dockerfile -t anet-pr762-spot .'
sha256:9258c926b74d0ba4139692c82030bb9170fe772147f33fa168ce608d078002c3

Build succeeded — the helper actually runs end-to-end in a fresh Docker build context, no checksum failure, no missing tool. Not a full 14/14 replay but proves the helper path lives.

④ all 13 Dockerfiles COPY same helper + pass ARG correctly — CONFIRMED (byte-identical shape)

Independent grep of every L1 Dockerfile:

ARG BUN_VERSION=1.3.14
ARG BUN_LINUX_X64_SHA256=951ee2aee855f08595aeec6225226a298d3fea83a3dcd6465c09cbccdf7e848f
COPY tests/lib/install-bun-pinned.sh /usr/local/libexec/install-bun-pinned.sh
RUN BUN_VERSION="$BUN_VERSION" BUN_LINUX_X64_SHA256="$BUN_LINUX_X64_SHA256" \
    bash /usr/local/libexec/install-bun-pinned.sh

Verified across all 13 (qa-cli-01, qa-cli-02, qa-dash-07, qa-dash-08, qa-dash-10, qa-hub-05, qa-hub-06, qa-hub-06b, qa-hub-07, qa-hub-08, qa-hub-09, qa-node-02, qa-node-03b) — same COPY path, same ARG names, same env-var pass-through pattern.

No cache/ENV/PATH bypass:

  • Each Dockerfile is standalone (no FROM ... AS ... reuse from an old cached image)
  • Helper installs to /usr/local/bin/bun — canonical PATH location, no shadowing by earlier stale bun
  • No ENV PATH= prefixing that could hide the pinned binary

⑤ current-main virtual merge + secret sweep + source→report boundary — CONFIRMED

  • Virtual merge: git merge-tree $(git merge-base pr-762 main) main pr-762 → 345 lines output, zero true conflict markers.
  • File drift: git log --oneline 05d4b73e..origin/main -- <each PR-touched file> = 0 commits on all 15 paths. Main has moved past base (05d4b73e → 29e4ae84) but not on any file this PR touches.
  • Secret sweep across 15 changed files (ntok_/utok_/atok_/BEGIN PRIVATE KEY): 0 hits.
  • source→report boundary: source 2c95173b contains the two implementation commits; report b40411f1 adds only docs/tests/report-l1-pinned-bun.txt (+72 lines). Verified — no source or test file touched by the report commit.

⑥ scope closed only for L1 subset + no external archive vendored — CONFIRMED (honest disclosure)

  • Independent count: 30 other Dockerfiles in tests/ still use unpinned curl bun.sh|install.sh patterns — those are OUT-OF-SCOPE per brief and per report ("[ci] remaining 30 non-L1 Dockerfiles still install Bun through unpinned bun.sh #728 repository denominator remains open for Dockerfiles outside scripts/qa.sh --l1").
  • No vendored Bun archive in repo: find tests -name "*.zip" -o -name bun -type f → only 1 hit (tests/test661-explicit-bootstrap-db/fake-bin/bun, a test fake-bin stub, pre-existing, not this PR).
  • External archive discipline: report explicitly says "external network input; it is pinned, retried, and verified, not vendored" — matches my observation.

⑦ CI red is transient network / observability, not product gate — CONFIRMED

I inspected gh run view 31640435080 for PR #762 head b40411f1:

✗ L1 qa-cli-01-hub-start — build failed (exit code: 22)
✗ L1 qa-hub-05-roundtrip — build failed (exit code: 22)
✓ L1 qa-cli-02-network-create (PASS)
✓ L1 qa-dash-07-auth-boundary (PASS)
✓ L1 qa-dash-08-cross-account-views (PASS)
✓ L1 qa-dash-10-incremental-poll (PASS)
✓ L1 qa-hub-06-token-revoke (PASS)
✓ L1 qa-hub-06b-cross-user-isolation (PASS)
✓ L1 qa-hub-07-sse-reconnect (PASS)
✓ L1 qa-hub-08-restart-persistence (PASS)
✓ L1 qa-hub-09-task-state-machine (PASS)
✓ L1 qa-node-02-success-reply (PASS)
✓ L1 qa-node-03b-task-events (PASS)
✓ L1 test686-rest-shape-golden (PASS)

2 failed, 12 passed using the SAME helper on the SAME PR.

Product-gate vs CI/network分析:

  • Exit code 22 comes from curl — HTTP 4xx/5xx from GitHub releases (with --fail + --retry 3 --retry-delay 2 --retry-all-errors, curl still gave up after 3 retries).
  • If the helper had a REAL defect, all 14 would fail. 12 succeeded with byte-identical helper invocation.
  • Author's local --no-cache qa-cli-01 and sg docker ... --l1 (14/14 PASS in 102s) confirms the source is functional.
  • The CI red is transient upstream network flakiness at bun.releases.github download, mitigated by the helper's retry-3 but not eliminated (a run of 14 parallel downloads increases the chance of at least one hitting a rate-limit or transient error).

Distinguished: product gate (helper contract, checksum, version pins, COPY consistency, witnessed-red) all pass. CI/observation issue is (a) transient upstream and (b) the build logs weren't uploaded on failure making retrospective diagnosis hard. Neither is a #762 defect.

Report is honest about the CI/network nature ("external network input... retried, and verified, not vendored") and provides local sg-docker evidence as authoritative for the product gate.


Additional observations (informational, not blocking)

  • CI observability minor: Dump test logs on failure step in qa.yml prints ================ /tmp/qa-l1-*-build.log ================ heading but doesn't actually dump the log contents. This means the build-failure exit-22 curl error is not visible in the CI log. Not this PR's responsibility to fix, but worth noting for future qa.yml work.
  • The 402 balance-exhausted error hit by the original grok测试6 reviewer is a Grok Build vendor payment issue — orthogonal to this PR's contents.
  • Helper ln -sf bun /usr/local/bin/bunx means bunx and bun are the same file — this matches Bun upstream's own bunx dispatching (Bun's main binary auto-detects invocation name via argv[0]). Report calls this out as a real integration requirement discovered during the diagnostic — the earlier one-file diagnostic that installed just bun broke anet hub lifecycle because bunx symlink was missing. Fix is genuine.

Reviewer discipline (self)

Applied feedback_finding_confirmation_is_not_verdict: every focus item was mechanically mapped to brief wording. Nothing lands on BLOCKER/MAJOR/MINOR gate wording. Verdict: CLEAN.

Independent verifications executed:

  1. Fetched Bun v1.3.14 upstream SHASUMS256.txt — matches pinned SHA byte-for-byte
  2. Ran sg docker build on qa-hub-05 Dockerfile — build succeeded (helper path lives)
  3. Ran sg docker build with all-zero BUN_LINUX_X64_SHA256 — build failed at checksum with exit 1 (witnessed-red)
  4. Inspected CI run 31640435080 raw log — confirmed exit-22 curl transient network, not helper defect
  5. Grep'd all 14 L1 Dockerfiles + spot-checked file shapes byte-consistent

No approve, no merge, no deploy.

vansin commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

Final coordinates supersede the archive-helper source after CI falsified its availability assumption.

  • final source: 79e4acea0ff8e91d3772040da7d41fe1c02905e7
  • report-only head: e8fabbfbebbd95e95dfd52ca18ceabdf815111cc
  • source→head: report file only

Why: the first helper source passed 14/14 locally, but CI attempt 1 failed qa-cli-01/02 and attempt 2 failed qa-cli-01/qa-hub-05, all as curl HTTP exit 22 while other identical consumers passed. Thirteen independent archive downloads were not a reliable gate.

The final source pins the official Bun 1.3.14 OCI index digest across all 14 L1 Dockerfiles. Local full L1 is 14/14, ALL PASS in 115s; wrong digest fails before test layers. Fresh CI L0+L1 is PASS in 1m28s. Draft remains until all CI and independent review finish.

@vansin

vansin commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

独立对抗窄审 · PR #762 (final digest-pinned source, SUPERSEDES archive-helper approach)

Verdict: CLEAN — no BLOCKER, no MAJOR, no MINOR.

Supersedes my earlier CLEAN comment on old archive-helper source (source 2c95173b / head b40411f1) — old source correctly declared 作废 by author after CI demonstrated the per-Dockerfile-curl approach still has a random 13-download failure surface.

Reviewer: 通信IM马 (independent, read-only). Extracted PR tree via git archive origin/pr-762 → temp dir; author worktree untouched. No merge, no deploy.


Provenance

value
HEAD (report-only) e8fabbfbebbd95e95dfd52ca18ceabdf815111cc ✓ matches brief
source freeze 79e4acea0ff8e91d3772040da7d41fe1c02905e7 ✓ matches brief
base (merge-base w/ main) 05d4b73e9efe42421700e56e163164759a361eb0 ✓ matches brief
current main tip 15b8d750... — moved since base; no PR-file drift
files (base..HEAD) 15 (+160 / −49)
source→HEAD delta ONLY docs/tests/report-l1-pinned-bun.txt (+36 / −27) ✓ per brief

Commit chain: 2c95173b (old source, archive helper) → b40411f1 (old report) → 79e4acea (new source, digest-pinned) → e8fabbfb (new report).

The archive-helper approach (tests/lib/install-bun-pinned.sh) is completely removed in the new source — verified: ls tests/lib/ no longer contains that file, and grep across all L1 Dockerfiles finds 0 references to install-bun-pinned / bun.sh / install.sh.


Item-by-item

① 14 L1 suites all use identical Bun image digest — CONFIRMED

Independent enumeration of scripts/qa.sh --list yields the same 14 L1 suites (13 qa-* + test686-rest-shape-golden).

Every L1 Dockerfile pins the same digest:

oven/bun:1.3.14@sha256:e10577f0db68676a7024391c6e5cb4b879ebd17188ab750cf10024a6d700e5c4

Independent for d in <14 L1 dirs>; do grep -oE 'oven/bun:1.3.14@sha256:[a-f0-9]{64}' ...; done | sort -u | wc -l1 unique digest. All 14 aligned.

13 Node-based L1 images (qa-*) use a multi-stage pattern:

FROM oven/bun:1.3.14@sha256:e10577...e5c4 AS bun-runtime

FROM node:20-slim
...
COPY --from=bun-runtime /usr/local/bin/bun /usr/local/bin/bun
RUN ln -sf /usr/local/bin/bun /usr/local/bin/bunx \
    && test "$(bun --version)" = "1.3.14" \
    && test "$(bunx --version)" = "1.3.14"

Both bun --version and bunx --version must equal 1.3.14 post-copy — a mismatch reds RUN.

test686-rest-shape-golden uses the same digest directly as base image (FROM oven/bun:1.3.14@sha256:e10577...e5c4) — no multi-stage needed since bun IS its runtime.

bun.sh and old-helper remnants: grep -E 'bun\.sh|install-bun-pinned|bunx.*curl|/install.sh' across all 14 L1 Dockerfiles → 0 hits. Old approach fully retired.

② official oven/bun:1.3.14 digests independently verified — CONFIRMED

Independent query of Docker Hub public API:

$ curl -sS https://registry.hub.docker.com/v2/repositories/oven/bun/tags/1.3.14/

Extracted:

target actual value brief expected
multi-arch OCI index digest sha256:e10577f0db68676a7024391c6e5cb4b879ebd17188ab750cf10024a6d700e5c4 e10577...e5c4
linux/amd64 manifest sha256:50317d83cd5a5ae1d8b35b3379c69f57ce1a0dbf4def91f0965653d767851834 50317...1834

Both match. The pinned digest is the real Bun 1.3.14 upstream.

COPY path /usr/local/bin/bun exists in the official oven/bun:1.3.14 image (standard Bun install location; verified transitively — the pattern works, spot-check build succeeds).

Node final base node:20-slim was NOT swapped: independent grep of all 13 multi-stage Dockerfiles shows exactly FROM node:20-slim as the second stage in every file.

③ real 14/14 --l1 run + witnessed-red on wrong digest — CONFIRMED

Report claims:

  • sg docker -c 'bash scripts/qa.sh --l1' → 14/14 PASS, ALL PASS in 115s, exit 0

My independent verifications:

  1. Spot-check build of qa-hub-05: sg docker -c 'docker build -q -f tests/qa-hub-05-roundtrip/Dockerfile ...'sha256:9aafa1dbb96b... — build succeeds end-to-end (COPY from bun-runtime works; version assertions pass).
  2. Witnessed-red on wrong digest (all-zeros):
    FROM oven/bun:1.3.14@sha256:0000...0 AS bun-runtime
    ...
    ERROR: failed to build: failed to solve: oven/bun:1.3.14@sha256:0000...0:
      failed to resolve source metadata: not found
    
    Docker pull rejects the non-existent digest before any build layer executes. The content-addressed pin is load-bearing — corrupting the digest reds immediately.

Full 14/14 replay not re-done (author already ran; my spot-check + witnessed-red confirm the pattern is real).

④ old approach truly closed, no new bypass — CONFIRMED

Compared new vs old:

aspect old (archive helper, 2c95173b) new (digest-pinned, 79e4acea)
external download surface per L1 build 13 (each container's curl → GitHub releases) 0 (Docker resolves the image ONCE by digest; content-addressed)
external network points of failure GitHub releases 4xx/5xx transient Docker Hub layer serving (typically cached + CDN'd; also digest-addressable so any layer server change is instantly detected)
retry semantics curl --retry 3 in helper Docker layer pull retries + digest verify (built-in)
checksum verification sha256sum --check --strict before extract OCI digest is a content-address (cryptographic identity of the image)
observability on failure curl exit 22 (rate-limit / transient) image-pull failure surfaces at Docker layer with clear "not found / digest mismatch"

CI history proved the archive-helper approach:

  • Attempt 1: qa-cli-01 + qa-cli-02 build failed (curl exit 22)
  • Attempt 2 (re-run): qa-cli-01 + qa-hub-05 build failed (curl exit 22) — DIFFERENT failing pair
  • 12 of 13 SAME-helper users passed each time — proved the helper contract was correct BUT the 13-parallel-download availability was the bottleneck

The new approach removes the entire helper file (tests/lib/install-bun-pinned.sh → deleted). No residual per-Dockerfile network path. Docker resolves the pinned digest once (with layer cache) — 13 builds share the same layer bytes with zero re-download after the first pull.

No new bypass paths found: no residual curl, no PATH shadow, no cache-based old-image reuse, no ENV bypass. Every bun/bunx invocation resolves to the digest-pinned binary.

⑤ source→HEAD only report + virtual merge + drift + secret — CONFIRMED

  • source→HEAD delta: only docs/tests/report-l1-pinned-bun.txt (+36 / −27, updating the report to reflect the new approach). No source or test file touched by the report commit.
  • Virtual merge: git merge-tree $(git merge-base pr-762 main) main pr-762 → 349 lines output, zero true conflict markers.
  • File drift: git log --oneline 05d4b73e..origin/main -- <each PR-touched file> = 0 commits on all 15 paths. Main has moved past base (05d4b73e → 15b8d750) but not on any file this PR touches.
  • Secret sweep across 15 changed files: 0 hits for ntok_/utok_/atok_/BEGIN PRIVATE KEY.

⑥ scope closed only for L1 subset + no vendored image — CONFIRMED (honest disclosure)

  • Report explicitly: "This closes the L1 subset only. The larger [ci] remaining 30 non-L1 Dockerfiles still install Bun through unpinned bun.sh #728 repository denominator remains open for Dockerfiles outside scripts/qa.sh --l1."
  • 30 other Dockerfiles in tests/ still use unpinned patterns — OUT OF SCOPE per brief.
  • No vendored image / big tarball in changed paths (only tests/test661-explicit-bootstrap-db/fake-bin/bun — a test fake-bin stub, not this PR, not a real Bun archive).
  • Report: "The official Bun image remains an external registry input; its bytes are content-addressed by digest, not vendored in this repository." — matches actual state.

Additional observations (informational, not blocking)

  • The digest-pinned pattern is architecturally stronger than the archive-helper approach it replaces:
    • Removes the x86_64 hard gate from the helper (was needed because binary tarball is arch-specific). The multi-arch OCI image auto-selects the right layer per node arch → other archs would now work if the runner supports them. Not a regression; a widening.
    • Content-addressed source is a hardened supply-chain property; corrupting the digest fails at pull, not at post-download checksum.
    • Amortized bandwidth: Docker layer cache means 13 builds share one layer download after first pull.
  • The report's explanation of the CI availability flaw ("attempt 1 failed qa-cli-01 and qa-cli-02, attempt 2 failed qa-cli-01 and qa-hub-05, failing suite moved between attempts, so rerunning could not establish a reliable gate") is exactly the diagnostic reasoning that turns "flaky test" into "denominator problem to fix at source" — good discipline.
  • One small consistency observation (not a MINOR): the helper's earlier ln -sf bun /usr/local/bin/bunx in the Bun stage inside oven/bun:1.3.14 — the Bun image itself doesn't ship a bunx symlink at /usr/local/bin/bunx, so the new Dockerfiles do ln -sf explicitly. Report notes this: "The archive-helper experiment also caught a real integration requirement: a Bun binary without a bunx symlink allowed the image to build but made the actual anet hub lifecycle fail. The final source creates and version-checks that symlink, and all real L1 journeys pass." Preserved correctly.

Reviewer discipline (self)

Applied feedback_finding_confirmation_is_not_verdict: every focus item was mechanically mapped to brief wording. Nothing lands on BLOCKER/MAJOR/MINOR gate wording. Verdict: CLEAN.

Independent verifications executed:

  1. curl Docker Hub API → multiarch digest e10577...e5c4 + amd64 50317...1834 byte-for-byte match brief expected values.
  2. sg docker build qa-hub-05 Dockerfile → succeeds; COPY-from + version assertions all pass.
  3. sg docker build with sha256:0000...0 → fails at pull with "not found" — witnessed-red on the content-addressed source.
  4. for d in <14 L1>; do grep digest ...; done | sort -u | wc -l → 1 unique digest across all 14.
  5. find tests/lib/ → old helper file gone.

Prior CLEAN comment (on archive-helper source) is SUPERSEDED by this comment. GitHub retains both for audit trail; the current verdict for source 79e4acea / head e8fabbfb is the one above.

No approve, no merge, no deploy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant