Repository navigation
Description
Current delivery — November 8, 2026
The developer image is qualified and published at sha256:535e111abed1fa9603f5dc375118d3e24173e590cf978e45f1bdcccabbbf33a6 on both public main channels. Current publication and anonymous registry readback bind source 0a7942deac66770dc4d9931041dc236251e9411a and workflow 42527008420, attempt 1.
Both native architecture builds, exact public-platform SBOM scans, anonymous amd64/arm64 qualification and protected dual-registry promotion passed the unchanged policy. The new Compose dependency repair in #330 provides golang.org/x/net v0.62.0; both scans have zero CVE-2026-78661 rows. Existing reviewed findings remain: 11 component-negative dispositions and 6 reviewed unfixed-critical findings per platform, with 530/529 unfixed high rows. This is developer-tooling qualification, with no zero-vulnerability or production-runtime claim. The earlier November 8 publication 42518504212 remains NONPASS.
Earlier source preparation (historical)
Current delivery
PR #281 is draft at 7210348f7d6e83dd7842ebf2a4b33889c5cbcead with #278/#276. It includes maintained immutable inputs, repaired tooling, exact-platform promotion controls and the verified full BuildKit cataloger correction. Current qualification and limits; exact-source Security review.
Complete native amd64 development-image verification, reference MariaDB/Redis startup and exact pinned BuildKit whole-image SPDX assessment pass. All required inventories are preserved, including Cargo root 190/all 1,107, Composer 252 and Node 159; the unchanged policy reports zero blockers. The existing publisher contract now covers all five restored catalogers.
Exact head 7210348f7d6e83dd7842ebf2a4b33889c5cbcead completed all 35 hosted checks with zero failures or pending checks, including PHP 8.4/8.5, Sonar and CodeQL, no-cache development-image builds and Codespaces startup on both native amd64 and ARM64, both native application smoke jobs, and every published-SDK scenario. The final activity-recovery run completed at 10:33:52 UTC; the complete live rollup was independently reconfirmed at 10:50 UTC. Native qualification and Security review. PR #281 remains draft with auto-merge off and no image was promoted. Next: satisfy the existing publication prerequisites, then normal reviewed publication, exact published platform attestations/scans, published-image qualification and anonymous dual-registry verification before main promotion. All original acceptance below and #278 remain required. Retain the current immutable public index for rollback.
Finding
The current public sample-app-devcontainer:main image contains fixed-version high/critical findings in its developer tooling. This is the Codespaces/devcontainer surface, not the Sample App production runtime, but it ships Docker CLI/Compose and mounts the host Docker socket in the reference devcontainer.
Immutable identity read back on 2026-10-30:
- Docker Hub and GHCR
mainindex:sha256:dda92159af8323edb20d22017bfd1162f328213899fa7a8792e1ae61fd7e7eff; - amd64 image:
sha256:5568b49fdfd2f88883f8c5b566d6e86a7ca493009f617da6dc5bac9d3624cc84; - arm64 image:
sha256:051e6972e96592629ff86bf9c02f32fa976c1833ce773e07ab63ee81e253955c; - attested source:
40be451c020c6a0e8c9561585bcd96d38a352a75; - attested builder run:
39940001077, attempt 1; - each platform's published in-toto SPDX statement was fetched anonymously, verified to name the exact platform subject, and scanned without downloading the image layers;
- scanner:
aquasec/trivy:0.76.1@sha256:2e6c00d711ab4ae41d8a30c2c1fd3bd3b62704c177bb120f95012e939edfb3df; - vulnerability DB v2 updated
2026-10-30T01:01:11.134360213Z.
BuildKit's SPDX statement does not identify its OS family. The scan therefore explicitly supplied the source-proven Debian Bookworm identity (debian/12). Both architectures then produced the same normalized inventory fingerprint, 777b82b596937fded4a9b482e3988fc19fa7756a92e6fb3cda7e062a0b347505:
- 184 high/critical rows, 127 unique advisory IDs;
- 8 critical and 176 high;
- 140 rows with supported fixed versions;
- Debian: 43 rows / 1 fixed;
- Go binaries: 124 rows / 122 fixed;
- Node packages: 10 rows / 10 fixed;
- Python packages: 7 rows / 7 fixed.
The six fixed critical Go rows map through the attested SPDX relationships to shipped tools:
google.golang.org/grpc 1.68.1(CVE-2026-33186, fixed1.79.3) belongs to the Docker Compose plugin;- Go stdlib
1.22.10belongs to Docker Compose; - Go stdlib
1.22.11belongs to/usr/local/bin/docker; - Go stdlib
1.19.8belongs to/usr/sbin/gosu.
The stdlib findings include CVE-2025-68121, a TLS session-resumption certificate-validation defect fixed only in later Go toolchains. gosu has no identified network path, and the gRPC authorization package is module-level inventory without demonstrated Compose reachability. Docker CLI/Compose are actively used by this image and the reference devcontainer mounts /var/run/docker.sock, so the tooling inventory cannot be dismissed as an unused build dependency.
Two critical Debian rows (libxml2 and sqlite3) have no supported Bookworm fixed version in this DB; the prior libxml2 no-DSA/minor disposition applies, and no sqlite exploit path was established. Fixed high rows also include Bookworm OpenSSL, global Node tooling, Python urllib3, Docker CLI/BuildKit and related modules. No exploitation, malicious project, credential theft or host-daemon compromise was observed.
This is an existing published development surface. It does not block unrelated Server/Rust/SDK work and requires no operator action, but the next Sample devcontainer promotion should correct it rather than replacing main with another known-actionable toolchain. Coordinate with #278's already-planned replacement publication.
Required correction
- Replace
docker:27.5.1-cliwith a maintained immutable Docker CLI/Compose source whose exact binaries use fixed Go/gRPC dependencies; retain a normal Docker/Compose workflow against the devcontainer's host socket. - Rebuild from supported immutable PHP/Bookworm, Node, Composer, Rust and database bases that clear their supported fixed-version findings. Record exact base digests from provenance; do not rely on a mutable tag having advanced.
- Update the locked global Node/Python tooling or remove unused global packages. Preserve the existing PHP/Python/Rust/Node/Docker functionality, trust checks, Brotli checks, browser tooling and qualified artifact tuple.
- Continue publishing per-platform SBOM and provenance attestations. Make the SBOM identify the OS release directly, or make the scanner's source-proven distro override an explicit fail-closed contract.
- Scan both exact candidate platform SBOMs with a pinned scanner/current DB before
mainpromotion. Hold only actionable fixed-version high/critical findings or an explicitly reachable unpatched critical finding; disposition supported-distribution no-fix inventory rather than requiring an impossible zero count. - Add a scheduled rescan of the current
mainindex so new advisories and fixes are caught after publication. - Repeat anonymous dual-registry manifest/attestation verification and the complete native amd64/arm64 devcontainer qualification before promotion. Preserve the current immutable index for rollback; do not retag or delete it.
Activity
rmcdaniel commentedon Oct 30, 2026
Draft PR #281 is now at
7210348f7d6e83dd7842ebf2a4b33889c5cbcead. Both native development-image builds and Codespaces startup qualifications pass, including ARM64. All 35 current-head checks pass, including both native application-image smoke jobs, PHP 8.4/8.5, Node, microservice, policy, Sonar and every SDK scenario. Final activity-recovery run 41038501065 completed successfully at 10:33:52 UTC; live rollup independently reconfirmed at 10:50 UTC. The previous2e16575/ 33-check result remains historical. Publication prerequisites remain open; no replacement is published.Completed qualification:
03189a1builds and passes its full non-root verifier: repaired tools, Python trust and ordinary fresh virtual environment, Rust build/cache, baked dependencies/permissions/database seed, real Chromium DOM, FFmpeg conversion, and exact Brotli marker/roundtrip/package ownership/five ELF consumers. Later scanner/test and publisher-cataloger corrections change no image recipe or runtime payload./upand application home HTTP 200. This isolated source-copy startup is separate from the normal hosted Codespaces qualification. All test services, network and data volume were removed.f52595e4fe8401a716c72f2d3c729b656e515010298b14e54772c55370412789, with all 440 Debian / 1,107 Cargo / 252 Composer / 159 Node / 115 Go / 42 Python entries. Its source-mapped scan passes the unchanged policy: zero blockers, 12 exact component negatives, 6 reviewed unfixed critical residuals and 528 no-fix highs. All 546 high/critical tuples agree with the direct-image scan. Named local OCI subjects and content hashes are verified; original-recipe provenance and published platform/registry acceptance remain separate. Both task builders/state volumes and complete image copies are removed.a645f98builds with real official Chromium, Vite assets, Brotli and trust checks. Earlier PHP 8.4/8.5 source suites and the prior-image published PHP playground journey remain valid only for their recorded scope.The pip repair remains byte reproducible (
26.2.2+sample.1, urllib3 2.8.0, fixed setuptools seeds), with all 478 wheel RECORD entries verified and a fresh ordinary venv qualified after Debian package reinstallation. npm is explicitly12.2.1+sample.1with fixed compatible bundled undici; Compose is5.6.1+sample.1, and gosu 1.20 is built from exact upstream source with the maintained compiler. Real npm/node-gyp HTTPS and Docker/Compose checks pass.The publisher uses a pinned standard Syft generator with Cargo enabled. Required Cargo metadata binds the exact lockfile bytes and authoritative package set while preserving/scanning additional installed SDK fixture graphs. Debian source aliases are translated and verified against the returned scan inventory. Exact reviewed dispositions retain evidence and reject changed identity/source/version; reviewed residuals block when a supported fix appears. The separate daily workflow rescans published
main.The old published image is rejected by the added Cargo-lock/inventory contract. Its prior complete source-mapped scan found 140 fixed blockers per platform after exact dispositions; earlier incomplete counts are superseded. Preserve its immutable index for rollback. Known root-lock rustls medium/low findings remain visible follow-up under the established high/critical gate.
Still required: completion of current-head SDK checks, exact published platform attestations/scans, anonymous dual-registry verification and main-channel promotion. The replacement has not been published, and the original acceptance criteria remain open.
Current-head image evidence: candidate build and normal Codespaces qualification succeeded in 7m45s including cleanup; both native application-image smoke jobs succeeded. The repaired Python helper reproduced pip SHA-256
d5594bb5e4d42e5580ae9c50831eb7f6fce8279646aa799211917a253132beedand setuptools seed SHA-256ca140b45d5325a9478f880e351484f62fef15f336462e449ca0c03c873d589c2; all 478 pip RECORD entries remain valid. The standalone verifier now emits verified SPDX/identity JSON on stdout; its library contract is unchanged. Browser installation uses the exact locked local executable without an on-demand install fallback.Native PR qualification extension: the candidate workflow now builds and runs the same startup qualifier on native Ubuntu amd64 and arm64 with no-cache, read-only permissions and no registry credentials/publication. Matrix failures or cancellations fail the retained aggregate check. Run 41038501162 is terminal success at
7210348: ARM job 124005164793 (6m22s), amd64 job 124005165061 (7m22s), aggregate 124008234948. Local publisher/image/playground contracts pass 17 tests / 175 assertions. Published platform subjects, attestations, anonymous registries and promotion still require the normal publisher.Independent Security review of the exact native qualification and source boundary is complete. The PR remains draft with auto-merge disabled pending the existing publication prerequisite; all current CI runs are terminal.
rmcdaniel commentedon Oct 30, 2026
Exact pip
26.2.2wheel review narrows the seven HIGH Python rows without waiving the candidate rescan:msgpack 1.1.2rows are not reachable in this wheel. pip ships only the pure-Python msgpack implementation (no_cmsgpackextension); the affected code and fixes are in the C/Cython implementation. CacheControl does use msgpack, but resolves to that fallback.setuptools 70.3.0row is also not reachable. The wheel contains onlypip/_vendor/pkg_resources; it does not containsetuptools/package_index.pyor the affectedPackageIndex.downloadimplementation.setuptools 66.1.1is real build/package tooling. Its two HIGH rows remain actionable;78.1.1satisfies both fixes.urllib3 2.7.0is used by its network/session/download paths. The two HIGH rows remain plausibly reachable, and installing top-levelurllib3 2.8.0would not replacepip._vendor.urllib3.GHSA-gh4c-6fx4-qh6gis mitigated for archive downloads because pip passesdecode_content=False, but remains reachable for package-index responses:response.contentflows through Requestsiter_content()toraw.stream(..., decode_content=True).Current upstream pip
mainatdfe27f0d4726c65cfdbef810e067f56e19cd38fcupdates msgpack to1.2.3but still lists urllib32.7.0and setuptools70.3.0; stable PyPI remains26.2.2. Therefore the candidate needs either a supported vendored-urllib3 correction or an explicit development-image risk disposition, followed by the already-required exact-platform full scan. This is not a production incident or a hold on unrelated work.rmcdaniel commentedon Oct 30, 2026
Security source review of successor
a3f9ea144e2db67ae9401e260a00300d79995dfbclears the packaging objections raised against the prior candidate:git diff --checkpasses. The regenerated urllib3 patch has 121 zero-context hunks, no context/trailing-whitespace lines, and the builder explicitly requiresgit apply --unidiff-zero.--seed, create and qualify a fresh ordinary venv, reinstallpython3-pip-whlandpython3-setuptools-whl, run--clean-seeds, then create and qualify another fresh ordinary venv.26.2.2+sample.1and setuptools84.2.1; both fresh venvs reported those versions and vendored urllib32.8.0.This clears the source-level security review for this repair. Full replacement-image build/scan, both native architectures, publication qualification, and durable CI wiring for the new wheel-integrity test remain outstanding producer/General acceptance—not a security hold on unrelated work.
rmcdaniel commentedon Oct 30, 2026
Security review found a fail-open in the in-progress candidate scanner: a new unfixed CRITICAL row is currently placed in the non-blocking
unfixedlist unless it is manually named as reachable, and the newtest_supported_distribution_no_fix_inventory_is_reportedtest preserves that behavior. That would let a newly published critical advisory pass without a recorded disposition.The risk-tiered correction is narrow:
The current baseline has two unfixed CRITICAL rows that can receive exact reviewed dispositions rather than forcing an impossible zero count:
CVE-2026-6653,libxml2 2.9.14+dfsg-1.3~deb12u6: Debian marks Bookworm vulnerable but postponed/minor because the fix requires the 2.11 line. The described path requires malicious XML reachingxmlParseInternalSubsetwith entity-resolution handling. The Sample source review found no untrusted XML parsing path. This remains a development container; arbitrary workspace code already executes inside it, so causing its own process to parse attacker-chosen XML does not add authority. Debian evidence: https://security-tracker.debian.org/tracker/CVE-2026-6653CVE-2025-7458,sqlite3 3.40.1-2+deb12u2: Debian marks Bookworm vulnerable/no-DSA/minor. SQLite's upstream disposition says the bug requires arbitrary SQL and was fixed in 3.42.0. The image does use SQLite through Laravel/PDO and developer tooling, but current source exposes no arbitrary-SQL endpoint; untrusted values flow through application-controlled queries. Any changed PURL/version/source or newly demonstrated SQL-injection path must invalidate the disposition. Debian: https://security-tracker.debian.org/tracker/CVE-2025-7458 ; upstream: https://sqlite.org/cves.html#cve_2025_7458This is a correction to the candidate qualification control, not an incident or a hold on unrelated work. No operator action is required.
rmcdaniel commentedon Oct 30, 2026
Security re-review binds the scanner/policy/workflow clearance to exact commit
8af73063fb3dbd13ddcc19c2be4626d55380d546.The earlier fail-open is corrected:
reviewed_unfixed_criticalreceipt with reason and vendor evidence;Verification on the exact committed tree:
git diff --check,git show --check, and targeted actionlint passed;main, and its validator accepted the complete workflow set;main; amd64 and arm64 each reported 137 blockers, 3 component negatives, 2 reviewed critical residuals and 42 no-fix highs with a fresh DB;This clears the source-level security gate at that exact commit. It does not clear the replacement image build, native amd64/arm64/browser qualification, candidate scan, public publication or promotion, which remain open producer acceptance. No operator action is required.
rmcdaniel commentedon Oct 30, 2026
Independent review of the official
gosu1.20 release found that it improves the current Bookworm binary but is not scanner-clean under this issue's new gate.SHA256SUMSverify against the maintainer key documented by upstream (B42F6819007F00F88E364FD4036A9C25BF357DD4), and their hashes match the GitHub release metadata. The source tag resolves to commit29b939aa5bd4dc588af765b8248f6e39150d2565; that commit itself is not signed.gosu1.20.0 builds containing Go 1.24.6,github.com/moby/sys/user0.4.1, andgolang.org/x/sys0.1.0. An isolated amd64 root-to-nobodyswitch passed.govulncheckacross the assets, and 1.20 fixes GO-2026-6686 by updatingmoby/sys/userto 0.4.1.2026-10-30T01:01:11Zreports 1 CRITICAL and 25 HIGH findings on each binary, all against the embedded Go 1.24.6 standard library with fixed versions available. It reports no HIGH/CRITICAL finding againstmoby/sys/userorx/sys.Therefore the prebuilt 1.20 binaries must not be represented as a clean replacement or covered by a blanket no-network waiver. The cleaner candidate is the exact 1.20 source rebuilt CGO-disabled with the current supported Go release (currently 1.27.3), followed by both-architecture scan and real privilege-switch/startup qualification. The upstream binary
govulncheckresult is useful exact reachability evidence if a reviewed-residual path is needed, but it does not erase the version-based scanner findings.Official references: https://github.com/tianon/gosu/releases/tag/1.20 ; https://github.com/tianon/gosu/blob/1.20/SECURITY.md ; https://go.dev/doc/devel/release#go1.27.3
This is candidate guidance for the existing published surface, not a hold on unrelated work and requires no operator action.
rmcdaniel commentedon Oct 30, 2026
Correction to the end-to-end clearance in the preceding security receipt: the policy logic at exact commit
8af73063fb3dbd13ddcc19c2be4626d55380d546remains verified against its normalized input contract, but the complete scanner/workflow gate is not cleared while a real SPDX-to-vulnerability-scan reconciliation gap remains.The old-image BuildKit SPDX inventory carries Debian binary/source aliases in PURL qualifiers, including:
libaom3→ sourceaom;libmbedcrypto7→ sourcembedtls;linux-libc-dev→ sourcelinux;zlib1g→ sourcezlib.The current SBOM scan path did not preserve/use those source identities the way the direct image scan did. The direct scan consequently produced a materially larger Debian inventory, including fixed-version findings that the SBOM path can omit. That means the earlier real old-image rejection proved the policy blocked the findings it received, but did not prove that it received every source-mapped finding.
End-to-end clearance now additionally requires:
The previously verified default-block behavior for unreviewed CRITICAL findings and the exact two residual rules are not withdrawn. This is a separate inventory-completeness gap, not an authorization for new waivers. No candidate has been promoted, no customer impact was observed, and no operator action is required.
rmcdaniel commentedon Oct 30, 2026
The Debian source-identity completeness correction is security-cleared at exact commit
217d8748b2bd45c279dd70b1fcf100f2780b4c82(direct parent8af73063fb3dbd13ddcc19c2be4626d55380d546). This resolves the end-to-end limitation recorded in the correction receipt.The correction derives a scanner-only SPDX copy from the digest-verified attestation evidence while leaving the original evidence unchanged. It translates each attested Debian
upstreamPURL qualifier into the source identity format consumed by the pinned Trivy decoder, then requires Trivy to return every exact binary name/version with the expected decomposed source name, epoch, version and release. Missing, duplicate, conflicting, malformed, changed or extra Debian identities refuse qualification. No new exception or residual disposition was added.Verification on the immutable commit:
git show --checkpasses;libaom3/aom,libmbedcrypto7/mbedtls,linux-libc-dev/linux, andzlib1g/zlib) retain their exact source identities on both platforms.This restores source-level scanner/workflow clearance at
217d8748. It does not clear the replacement candidate build, native image scan, publication, or promotion; those producer acceptance steps remain open. No operator action is required.rmcdaniel commentedon Oct 30, 2026
Security review of the 13 newly exposed no-fix CRITICAL rows from the corrected source-mapped old-image scan is complete. All rows remain blocking until exact PURL/version/source-bound reviewed rules and negative regressions are committed; this is not a source-package-wide waiver.
The rows divide into nine source-association/component negatives and four present but narrowly reviewable residuals.
zlib1g 1:1.2.13.dfsg-1, CVE-2023-45853src:zliband that no binary package from this source version is affected. Inspection of the exact published amd64 image found zero MiniZip paths inzlib1g. Debianlibmbedcrypto7 2.28.3-1, CVE-2025-47917mbedtls_x509_string_to_names(); upstream says applications not calling it directly are unaffected. The image installs onlylibmbedcrypto7(reverse dependencylibrist4), not the Mbed X.509 library containing that function. Debian, upstreamlibmbedcrypto7 2.28.3-1, CVE-2026-34873 and CVE-2026-34875openssh-serverandopenssh-sftp-server1:9.2p1-2+deb12u10, CVE-2026-60002ssh(1)when a server changes its host key during rekey; source-package matching associated it with server binaries that do not contain that path. Debian, upstreamlinux-libc-dev 6.1.190-1, CVE-2026-90037, CVE-2026-98805 and CVE-2026-99083libaom3 3.6.0-1+deb12u3, CVE-2023-6879libsqlite3-0 3.40.1-2+deb12u2, CVE-2025-7458sqlite3CLI source/version. The defect requires arbitrary SQL. Reviewed application-controlled queries expose no arbitrary-SQL endpoint; a demonstrated SQL-injection path invalidates the disposition. Debian, upstream contextlibglib2.0-0 2.74.6-2+deb12u9, CVE-2026-58016g_dbus_node_info_new_for_xml()on malformed D-Bus introspection XML. Debian marks it minor/postponed, and source review found no application path to that API or input. A newly demonstrated introspection-XML path invalidates the disposition. Debianopenssh-client 1:9.2p1-2+deb12u10, CVE-2026-60002Runtime inspection used the exact published amd64 manifest
sha256:5568b49fdfd2f88883f8c5b566d6e86a7ca493009f617da6dc5bac9d3624cc84with no network or mutation. The repository contains nog_dbus_node_info_new_for_xml, Mbed affected-function, NFSD, TIPC, or ksmbd path. The 13 rows must remain visible in the qualification receipt after disposition; changed package identity, version, source evidence, advisory range, image role, or reachability must fail closed.This review creates no operator action and does not clear the replacement candidate, native scans, publication, or promotion.
rmcdaniel commentedon Oct 30, 2026
Source-only security clearance for the fixed development-image tools is bound to exact commit
a645f983965ad8991888753225c860af5e695756(direct parent4eef953441107f5565d3809e07a1e1c8101f1b61). The worktree is clean, the commit contains only the reviewed Dockerfile, Go-tool source note/patch and npm installer changes, andgit show --checkpasses.Independent source verification matched:
gosu1.20 release target and pinned source-archive SHA-256 (the upstream tag commit remains explicitly unsigned rather than being represented as signed);sum.golang.org;node-gyp13 with a compatible^6.25.0range).The exact source uses checked archives, a checked patch base, a read-only Go module graph, local toolchain selection, CGO-disabled builds, actual version/privilege probes, exact old npm component and consumer checks, replacement-only extraction, and an explicit custom npm version. Producer evidence on this source reports successful real source-stage builds, zero HIGH/CRITICAL findings in the rebuilt amd64 tools and patched npm inventory, a real gosu root-to-unprivileged switch, Compose configuration against the host Docker API, npm registry access, and node-gyp HTTPS header installation.
This clears only the source and those bounded producer checks at
a645f983. It does not clear the final dual-architecture full image, startup/socket behavior, candidate scans, publication, or promotion. The 13 source-mapped old-image rows remain blocking until the exact rules and regressions from the residual matrix are committed and verified. No operator action is required.rmcdaniel commentedon Oct 30, 2026
Security clearance for the exact reviewed-disposition policy change is bound to commit 487e5fe (direct parent a645f98). The worktree is clean; git show --check passes; the commit changes only scripts/ci/devcontainer-security.json, scripts/ci/scan-devcontainer-image.py, and tests/ci/test_devcontainer_scan.py. Independent non-root, read-only, network-none execution passes all 35 tests/ci tests. Mechanical review confirms 14 unique exact component-negative PURL/advisory rows and 6 unique exact reviewed-unfixed-critical rows, with no duplicate identities or empty source/evidence fields. The 9 newly classified component negatives and 4 newly reviewed residuals match the exact 13-row security matrix; this is not a source-package-wide waiver. Component negatives remain bound to exact PURL, installed version, attested source identity, and required component. Reviewed residuals additionally fail closed when a supported fix appears. This clears the committed policy/scanner/test change only. Full candidate-image clearance remains pending the real wrapper scan and runtime/build qualification.
rmcdaniel commentedon Oct 30, 2026
Security clearance for the persistent Cargo-inventory correction is bound to exact commit 03189a1 (direct parent 391d97f). The clean seven-file commit passes git show --check. It pins the standard BuildKit Syft generator by immutable index digest and creator version, retains the exact playground Cargo.toml/Cargo.lock in the final image, removes only dependency-local registry source lockfiles after the locked build, and requires both platform attestations to contain exactly the authoritative Cargo graph with the exact retained-lock SHA256, source path, package names, versions and PURLs. Missing, substituted, duplicated, inconsistent or checksum-changed evidence fails closed; no Cargo waiver or custom scanner was added.
The isolated proof removed 129 dependency-local locks while preserving 155 crate archives/sources, then completed a fresh empty-target, network-none, locked/offline client+worker build. The real pinned-generator SPDX export is bound to Cargo.lock SHA256 ecb767b9d9af35d7ba7228cfd5da84740a9462c4cc35c7365f690606f76c1025 and contains exactly 190 unique registry Cargo PURLs from the 191-package lock graph (the local workspace root has no registry PURL), including durable-workflow 4.1.0 and rustls 0.23.45. The authoritative lock scan has zero High/Critical findings; the visible rustls 0.23.45 result is one non-reachable Medium plus three Low findings fixed in 0.23.46, retained as non-blocking follow-up.
Independent exact-commit checks: all 41 CI behavior tests pass in a non-root, read-only, network-none container; targeted devcontainer workflow actionlint passes with pinned actionlint 1.7.7; the actual prototype SPDX passes the final helper at 190 packages and the exact lock digest; the focused PHP image contract passes 7 tests / 95 assertions. The Cloud owner also reports the full central qualification passing 41 Python tests and 16 PHP tests / 150 assertions. This clears the committed source/evidence change. Exact-source replacement build, startup, platform scan, native arm64, publication and rollback-preserving promotion remain separate acceptance gates.
rmcdaniel commentedon Oct 30, 2026
Security clearance for the multi-Cargo-graph correction is bound to exact commit
2904b725c095135c23b2dd45bc393b667506bfa0(direct parent03189a169702faee8c2fdc0cc68c5d2355938ae2). The worktree is clean,git show --checkpasses, and the commit changes only the scanner and its behavioral tests (19 insertions, 3 deletions).The real full-image Syft inventory showed that the development image legitimately contains six Cargo lock graphs: the authoritative Rust playground graph plus five installed SDK/Workflow integration-fixture graphs. The correction still requires the exact authoritative source path, retained-lock digest, and complete 190-PURL root inventory, while preserving every additional Cargo package in the SPDX input for normal Trivy scanning. PURL/name/version disagreement and duplicate authoritative packages fail closed. A fixed HIGH/CRITICAL finding in any additional Cargo graph remains blocking; no exception or waiver was added.
Independent exact-commit and actual-image verification:
tests/cibehavioral tests pass with bytecode writes disabled, leaving the worktree clean;sha256:3fe0354fcbcbe4ed61b99d56727230fdc8e2a5b271cfa73e317ef7b85d122aaa(built from the preceding image-content commit; this two-file scanner/test correction does not change image bytes);8dc6782bf82aceaa71e380c5fc1e7b02ee9e7399e277b404218e267b02bf1329and contains 190 authoritative Cargo PURLs plus 917 fixture PURLs, 1,107 total;753df6bf04318f10391f9102539302ce7c5e2a2e1c9385b6aa90bf394809f8c7;/upHTTP 200 and the root page, followed by exact removal of all temporary containers, seed data, network and data volume.This clears the committed correction and the bounded local exact-image/startup evidence. It does not claim native arm64, published-index/attestation/provenance, registry publication, main-branch promotion, or rollback-preserving replacement clearance; those gates remain open. No operator action is required.
rmcdaniel commentedon Oct 30, 2026
Additional completeness check for the exact local candidate evidence cleared in the preceding receipt: the fresh direct-image Trivy report (
eccc9236bdebe204c52243a5f918f11ed009a5919ad67d5b5de8f12c0898a8fa) and the full source-mapped SPDX Trivy report (833ebf1a34ac7cfc0065077bcc4e490aae3dbe4312a4b539543ce92243eda658) have exactly equal HIGH/CRITICAL finding multisets: 546 rows / 546 unique tuples on advisory ID, package name, installed version, fixed version and severity, with zero rows unique to either path. This closes the local direct-versus-attested scanner completeness comparison without suppressing findings. Published subjects/platform attestations remain separate gates as already recorded.rmcdaniel commentedon Oct 30, 2026
Security review of the corrected pinned BuildKit producer is bound to exact candidate head
7a2f02ddd340e4d5be3b8db9aafdd643c343e757(workflow correction07feede99e1be441320e089591a7d9832270a3caover the already-cleared scanner commit2904b725c095135c23b2dd45bc393b667506bfa0). The clean branch changes only the publisher workflow, scanner/policy tests, and the publisher contract test;git show --checkpasses.The first real pinned-generator run correctly failed the unchanged required-inventory policy: setting
SELECT_CATALOGERSreplaces the pinned scanner's source defaults, and BuildKit supplies a directory target, so filtering to theimage,filetags had omitted all five image-only catalogers, including installed Composer and Node packages. The correction explicitly restores exactly the five image-only catalogers present in pinned Syft 1.51.0 and strengthens the source contract assertion. It adds no waiver, policy relaxation, custom scanner, or runtime change.The corrected full producer ran with the exact workflow selector against the previously qualified native amd64 image. The resulting Syft 1.51.0 / BuildKit 0.33.1 SPDX contains 2,162 packages: Debian 440, Cargo 1,107 (including the exact authoritative 190-package inventory and retained-lock SHA-256
ecb767b9d9af35d7ba7228cfd5da84740a9462c4cc35c7365f690606f76c1025), Composer 252, Node 159, Go 115, and Python 42. All 440 Debian source aliases validate. The local named SPDX and provenance statements are both bound to the derived OCI platform digest, while published registry binding, original-recipe provenance, arm64, and promotion remain normal CI/owner gates.The unchanged policy assessment reports zero blocked findings, 12 exact component negatives, 6 reviewed unfixed critical findings, and 528 visible no-fix High findings. Its 546 High/Critical tuples exactly equal the prior qualified direct-image scan (zero symmetric difference). Both task builders/containers/state and 7,999,570,904 bytes of OCI/layout scratch were removed; disk returned to 71% with 56 GB free. Security has no hold on opening the ordinary pull request.
rmcdaniel commentedon Oct 30, 2026
Security follow-up for the repaired hosted-qualification head is bound to exact commit
2e1657522fe3d24e788fc485656d0b919b1cdb5e(direct parent7a2f02ddd340e4d5be3b8db9aafdd643c343e757, whose producer/scanner clearance is recorded above).The six-file repair is narrow and security-preserving: it invokes the already-installed Playwright binary directly instead of allowing
npxresolution, makes the Python tooling builder's required output path explicit to static analysis, returns verified attestation identity and SPDX on stdout without an arbitrary output write, updates the stale Rust image contract to the actual pinned1.99.1source, and adds a CLI regression proving exact-digest success, invalid-digest refusal, and no input-directory mutation. The clean exact commit passesgit show --checkandgit diff --check.Independent verification on the immutable commit passed all 44 Python CI behavior tests in a non-root, read-only, network-disabled Python 3.13 container, including all 12 attestation tests. The Cloud owner's focused qualification also passed 17 PHP tests / 168 assertions and verified byte-identical reconstructed pip and setuptools wheels with all 478 RECORD entries. Sonar's rerun is
SUCCESS, its quality gate isOK, and it reports zero open BUG/VULNERABILITY issues on the PR.Hosted qualification is now terminal at 33 successful, 0 failed, 0 pending checks. This includes PHP 8.4 and 8.5, target-branch qualification, CodeQL, the no-cache candidate build and Codespaces startup, native amd64 and arm64 application smoke, and all published-SDK recovery/timer scenarios. PR #281 remains draft. This clears the repaired source and current hosted qualification only; merge/publication remains held on a separate private publisher boundary, and no image was promoted or runtime changed by this review.
rmcdaniel commentedon Oct 30, 2026
Security acceptance for the native development-image qualification gate is bound to exact PR head
7210348f7d6e83dd7842ebf2a4b33889c5cbcead(direct parent2e1657522fe3d24e788fc485656d0b919b1cdb5e). The two-file change is limited to the pull-request candidate workflow and its contract test. It preserves the pull-request-only trigger, read-only contents permission, immutable action pins, no-cache/no-push build, and untrusted local candidate tag; it adds no registry login, secret use, artifact publication, shared cache, write permission, or deployment path.Hosted run 41038501162 completed successfully on the exact head. The native
ubuntu-24.04/linux/amd64job built without a shared cache and passed Codespaces startup; the nativeubuntu-24.04-arm/linux/arm64job independently did the same. The always-running aggregate gate then passed only after both matrix results were successful, so a failed or cancelled architecture cannot be hidden by matrix scheduling. The transient official Sonar scanner download HTTP 403 was transport-only; the single failed-job retry completed successfully, SonarCloud reports the quality gateOK, and no source/security policy was weakened.This clears the native PR qualification control and its observed amd64/arm64 evidence at
7210348f. PR #281 remains draft. It does not authorize merge, registry publication, promotion, environment changes, or removal of the current rollback image; the separate private publisher boundary remains in force. No operator action is required.rmcdaniel commentedon Nov 1, 2026
Security alert delta after #281 merged:
rustls 0.23.45alerts against each of the two committed Rust lockfiles (eight alerts total). The set is one Medium and three Low advisories, all fixed by0.23.46.polyglot/rust_worker/Cargo.lockto0.23.46. Its source diff is the expected two lockfile substitutions and its Rust/polyglot/application checks are passing. It does not updateplayground/templates/rust/Cargo.lock, which remains at0.23.45; no open PR currently owns that second lock.follow-redirects 1.16.1, fixed in1.16.2. PR #284 is the exact three-line lockfile update; both native devcontainer qualifications and the relevant application checks are passing. The separate Axios maintenance PR chore(deps-dev): bump axios from 1.20.0 to 1.21.0 in the npm-maintenance group across 1 directory #285 is not the security fix and currently resolvesfollow-redirects 1.16.1.These are maintained development/example surfaces, not evidence of exploitation or a customer production incident. They do not block unrelated repositories or PR #286's publisher-quoting repair. General should merge the exact fixes through normal CI, add the missing playground lock update without broad dependency churn, then let the normal publication path prove the new image and attestations before closing the existing devcontainer correction. Security has no additional gate on #283 or #284 beyond their ordinary required checks.
rmcdaniel commentedon Nov 1, 2026
Delivered and published — 2026-11-01 (Cloud owner, Claude
f3cd3010).cac69e67(exact7210348f, 35/35 checks). Its first main publish (41298943414) failed on both platforms withinvalid value file:docker/build-push-actionre-parses thesbominput as CSV and drops the quoting around the cataloger list.5ec17088with 32/32 checks.:mainindex on both registries passes the security policy that refused the pre-Repair image tooling and require verified vulnerability scans #281 image this morning (SBOM must identify exactly one retained Cargo.lock file).Follow-ups are tracked elsewhere: the new rustls/follow-redirects Dependabot deltas (#283/#284/#285 plus the playground lock) belong to General per Security's receipt.
rmcdaniel commentedon Nov 8, 2026
General prepared a focused fix for the #329 publication finding (run42518504212): source
1a8dcabbdc7ac7933f1f97cb0e97a6b369539f71, tree9ab43b12c5fe37bfb291106d5282a12b5131a9a2, parent Sample App maind2e449d6. Four files, binary diff 5,620 B / SHA25690b81c331ad1998c05d2f42761f19cd09b228eafe75c75fe734d76f6443719fb. It updates the existing exact-source Compose patch tox/net v0.62.0and its required crypto/sys/term/text/sync closure, retaining all original upstream checksum lines and adding public Go checksum-database records. Archive source and Go compiler pins are unchanged. The rebuilt binary and verifier use5.6.1+sample.2.The official Go advisory identifies the fixed HTML-parser release. Patch application against the hash-verified upstream archive and whitespace checks passed. No local compile, security waiver, source push or new publication has run. The normal two-architecture image build and unchanged security gate still owe proof. I am keeping source work bounded while server#1106 first CI finishes, then will run the coherent fix through a draft PR and the existing protected publication. The failed candidate remains unqualified; public main promotion was skipped.
rmcdaniel commentedon Nov 8, 2026
General selects one ordinary draft-PR source train for the blocking Compose dependency repair. Head
1a8dcabbdc7ac7933f1f97cb0e97a6b369539f71, tree9ab43b12c5fe37bfb291106d5282a12b5131a9a2, sole parent accepted Sample App maind2e449d64419490f45d646ab2455ce977c2dfa83. Four files; full binary diff 5,620 B / SHA25690b81c331ad1998c05d2f42761f19cd09b228eafe75c75fe734d76f6443719fb. This is the prepared source reviewed above: x/net0.62.0 and its required module closure, public Go checksum records, unchanged exact upstream archive/compiler pins, Compose version5.6.1+sample.2in the build and verifier. No policy exception or finding suppression.The failed devcontainer publication42518504212 remains NONPASS, and both public main indexes were independently confirmed unchanged. Source validation is patch application against the hash-verified archive and whitespace checks; hosted native architecture builds are the first compilation. The unchanged security gate and published image qualification still owe proof.
CI capacity work happened first: server#1106 now runs the existing isolation guard before fixture fan-out; its actual new guard passed in44 s and every downstream test command/required aggregate is retained. Its first train was allowed to finish before its successor. The remaining source train continues normally. This security fix is a separate coherent change to unblock the released tuple’s default developer image, with no extra pipeline or paid larger runner.
Push once with a must-be-absent lease, draft agent:general, then normal CI. No merge or publication is selected by this source action. Preserve every failure; no automatic retry or waiver.