NGINX 1.31.8-CE-ubuntu24.04-r3 build trail
How ReadyStack built readystack/nginx:1.31.8-CE-ubuntu24.04-r3 and its build kit, copied record by record: why the release exists, every chain, drive and stage it went through, the model work, the review rounds, the defects, the checks that verified it and when it was published. Each line names the record it comes from in brackets; a record that does not exist for this release says so.
This trail
As JSON- Image
readystack/nginx:1.31.8-CE-ubuntu24.04-r3 - Index digestsha256:8e9465af4e8612da78ec4368f18a3dbe3c12403cb0947f185278a7a1d16350dd
- linux/amd64 digestsha256:b880d874ee7d8f30da9ed691fed953b4419300afc06a704e619ee49d4eb531d4
- Archive
ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.tar.gz - Archive SHA-256 nowbb3889a1ad16ba85a498b24b9dd97f25af1cbbe7def46216b168591eae50fcb6
- Pins record
docs/PINS.md,docs/provenance/PINS.jsonin the archive (since generated) - Generated2026-11-09T10:33:21Z by KitForge release/build_trail.py
- Sections9 sections, 8 fully recorded; 1 item not recorded
Signed with the release key The trail's signature is a Sigstore bundle beside it. Check it is ours before you rely on it:
cosign verify-blob --key https://readystack.dev/keys/cosign.pub \ --bundle ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.trail.json.sigstore ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.trail.json
IdentityWhy this release existsThe path through the harnessModel work per stageReviewDefectsVerificationPublicationPackages and CPU level
Identity
Fully recorded- ProductNGINX (nginx) [MANIFEST.json]
- Release tag1.31.8-CE-ubuntu24.04-r3 [MANIFEST.json]
- Imagereadystack/nginx:1.31.8-CE-ubuntu24.04-r3 [MANIFEST.json]
- Image index digestsha256:8e9465af4e8612da78ec4368f18a3dbe3c12403cb0947f185278a7a1d16350dd [docs/provenance/LOCKED_DIGEST.txt]
- linux/amd64 image digestsha256:b880d874ee7d8f30da9ed691fed953b4419300afc06a704e619ee49d4eb531d4 [ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.rebuild.json, subject.image_manifest_digest]
- ArchiveReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.tar.gz (bytes 541435296) [MANIFEST.json]
- Archive sha256 at publishbb3889a1ad16ba85a498b24b9dd97f25af1cbbe7def46216b168591eae50fcb6 [MANIFEST.json, tarball_sha256]
- Archive records agreeyes [MANIFEST.json, PUBLISH_MANIFEST.json and .cutover.json name the same sha256]
- Repack historynone: the archive is as first published [MANIFEST.json, repack_history]
- Upstream repositoryhttps://github.com/nginx/nginx [docs/provenance/SOURCE_TREE_HASH.json]
- Upstream refrelease-1.31.8 [docs/provenance/SOURCE_TREE_HASH.json]
- Upstream commit140aa942711868a8daeb95810bc9a81f272ada72 [docs/provenance/SOURCE_TREE_HASH.json]
- Source tree hash30b1e300a9859801916b2aef8707f40ed7d489117582f461334f09b10c4b9190 (files 544) [docs/provenance/SOURCE_TREE_HASH.json, tree_listing_sha256 (sha256 of the sorted file listing)]
- Kit tree hashsha256:e237d98f34ecb48baea7c7b07e1ff2dfabce29405dff1411a460b8c8df6dee10 [ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.rebuild.json, inputs.tree_hash]
- SOURCE_DATE_EPOCH1792592691 (utc 2026-10-21T14:24:51Z) [ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.rebuild.json, inputs.source_date_epoch]
- Base images
- ref golang:1.27.3-bookworm@sha256:972b4110ba0f47539a975c31e52c64765e1ff19f2d74469ae4a595c6676e80a5 · platform digest sha256:fea12ba16096adec0f699ce1c4da2154d320450e56c1f63671f95d2a3551c77b
- ref ubuntu:24.04@sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852 · platform digest sha256:78d4744ead1f5b19b04d0df558ab182a5300903900755e515b2ca4d10eb2044d
- BuildKitmoby/buildkit:v0.31.2 (image digest sha256:e0e67ea9c4bb07bdef683e29f70f3b623d1eb9c82274a9ec04e6bb0511449fb0) [ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.rebuild.json, engine]
- Engine commit(s)
- commit 53eeaa1375fde24597366a5342db51d1d1fd7b52 · dirty yes · first drive 3975
- commit 9e1e08daa6fd77ad7901229048721017ec2e4d84 · dirty yes · first drive 3987
- commit 83a33a598e56060c083542e06b07b17380b8c103 · dirty yes · first drive 3991
- commit d83d0de9b6c19e378265f1b12eeea189e2c78f64 · dirty yes · first drive 3995
Why this release exists
Fully recorded- Chain912 (created 2026-11-09T07:05:31Z · trigger customer_request · upstream version 1.31.8) [chains, chains #912]
- Requestbuild request #545 (rebuild) (requested at 2026-11-08T03:42:11Z · requested by kitforge-agent · version 1.31.8) [build_requests, build_requests #545]
- Reasonrevision 1.31.8-CE-ubuntu24.04-r3: same upstream version rebuilt on the chiselled runtime (slim base, C/Rust engine #198) [build_requests, build_requests #545 request_reason]
- Supersedesreadystack/nginx:1.31.8-CE-ubuntu24.04-r2 (chain 817) [chains, chains #817]
The path through the harness
Fully recorded1 chain · 4 drives · 18 stages · 4 rewinds
Chain 912 release · ready_to_ship
Created 2026-11-09T07:05:31Z, upstream 1.31.8, build request 545 [chains, chains #912]
| Drive | Started | Minutes | Build host | How it stopped |
|---|---|---|---|---|
| 3975 | 2026-11-09T07:07:47Z | 54 | build host 2 withhold-publish | ready_to_ship at package_archive; 19 ticks [drive_runs, drive_runs #3975] |
| 3987 | 2026-11-09T09:03:46Z | 10.3 | build host 2 withhold-publish | ready_to_ship at package_archive; 16 ticks [drive_runs, drive_runs #3987] |
| 3991 | 2026-11-09T10:02:15Z | 2.5 | build host 2 withhold-publish | ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #3991] |
| 3995 | 2026-11-09T10:29:36Z | — | build host 2 publish-held | not recorded [drive_runs, drive_runs #3995] |
Stages, in order
| Stage | First start | Passed | Attempts | Gate checks passed | Artifacts (SHA-256) |
|---|---|---|---|---|---|
intake |
2026-11-09T07:08:00Z | 2026-11-09T07:08:01Z | 1 | 4
|
order_json ae8db77389f1… |
acquire |
2026-11-09T07:08:09Z | 2026-11-09T07:08:10Z | 1 | 12
|
source_tree 2bd4e5411265…license_file 08845fe39e06…custody_inputs d5296c77d550…source_tree_hash cf0f25330e3f…source_file_manifest 290045106f13… |
plan |
2026-11-09T07:08:50Z | 2026-11-09T07:08:51Z | 1 | 10
|
recon_report 87fb7e3457da…input_pin_plan 2985fa016f7d…toolchain_lock f7b66fed1887… |
assemble_kit |
2026-11-09T07:10:53Z | 2026-11-09T09:05:37Z | 2 | 27
|
dockerfile 094acba758b7…build_recipe a21ed89a7b5a…system_pinning aa8db05a9a8a…build_offline_sh 6633aa31b6b4…generate_sbom_sh ce0f1e6f1e70…first_boot_health cfd9466ef27f…verify_offline_sh 3e8184ea230c…base_image_digests 686b9f7e1b04…dockerfile_offline 094acba758b7…first_build_digest ea2dd23780e9… |
remediate |
2026-11-09T07:11:27Z | 2026-11-09T09:05:42Z | 2 | 8
|
vendored_apt e3b0c44298fc…remediation_log 1075b94f4c29…security_report ef1ebe56a3a3… |
build_kit |
2026-11-09T07:14:02Z | 2026-11-09T09:08:13Z | 2 | 9
|
cosign_stamp f2b1fcc649a3…locked_digest 32d12bc659fc…freeze_manifest c39d71f9e192…offline_rebuild_transcript 51533a291ddb… |
verdict |
2026-11-09T07:14:27Z | 2026-11-09T09:08:38Z | 2 | 8
|
scout_verdict 752ccf5958bf… |
publish_image |
2026-11-09T07:14:57Z | 2026-11-09T09:09:07Z | 2 | 7
|
hub_readme f401e39cb798…promotion_record 7c0302f91cce… |
boot_instance |
2026-11-09T07:15:03Z | 2026-11-09T09:09:17Z | 4 | 3
|
instance_handle 181806bf576f… |
sbom |
2026-11-09T07:15:17Z | 2026-11-09T09:09:26Z | 2 | 5
|
sbom_md 0b02dd0eff37…sbom_json d2d37901d3f2… |
schema_discovery |
2026-11-09T07:15:20Z | 2026-11-09T09:09:29Z | 2 | 7
|
schema_hash 499a56abf9f1…dependency_tree 98582bd18ff0…table_classification 4cad56f5de2e… |
admin_handbook |
2026-11-09T07:26:44Z | 2026-11-09T09:09:39Z | 2 | 7
|
api_map 00f816c804e4…admin_handbook 9b67b4417767… |
db_handbook |
2026-11-09T07:39:31Z | 2026-11-09T09:09:51Z | 2 | 8
|
db_handbook 2957ca6f7002…seed_isolation 208647f15d9e… |
seed_data |
2026-11-09T07:39:39Z | 2026-11-09T09:09:59Z | 2 | 6
|
seed_data_sql a90f8d1a27f9…seed_cases_json 1cffd2f55a75… |
seed_validate |
2026-11-09T07:39:42Z | 2026-11-09T09:10:03Z | 2 | 3
|
seed_data_contract 7a70f2074f7d… |
usecase_validate |
2026-11-09T07:39:59Z | 2026-11-09T09:10:14Z | 2 | 10
|
failed_tests b2247b16f5f7…passed_tests d93ae11e4f98…test_results dde0bfe67f71…usecase_contract dc5482be05ef… |
finalize_docs |
2026-11-09T07:53:19Z | 2026-11-09T09:10:20Z | 2 | 9
|
defects_json 3588069afa78…release_notes 22fdb8fd9d5c…api_integration_guide ea6b6b89d161… |
package_archive invalidated 2026-11-09T10:29:12Z |
2026-11-09T08:01:42Z | 2026-11-09T10:04:44Z | 3 | 35 (final gate PASS)
|
sale_tar 0c67748bb58c…checksums 9e5439d10ba6…verify_md 6ec86f5af25e…rebuild_md ee28d8940ebb…manifest_txt 394aa841805c…actions_jsonl 569f00fac355…provenance_md 6dc86b3891a0…assetchain_log_md e9eccaec0c0f…assetchain_log_json d14b6b83c2b1… |
[stage_runs]
Rewinds
- 2026-11-09T08:35:40Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive --allow-rebuild) [stage_events, stage_events #28420] - 2026-11-09T09:03:50Z:
package_archivetoassemble_kiton strategy_changed (strategy changed (e47a8d3584a5 -> 4ae5a54acc6c)) [stage_events, stage_events #28489] - 2026-11-09T09:39:48Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #28599] - 2026-11-09T10:29:12Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #28702]
Model work per stage
Fully recordedRole: writer model. Calls up to 2026-11-09T10:04:44Z.
183 calls over 6 stages
| Stage | Calls | Refused | Errors | Max attempt | Forced commits | Real tokens | Lesson rules shown |
|---|---|---|---|---|---|---|---|
plan | 2 | 0 | 0 | 1 | 0 | 8280 | L-A183, L-A15 |
remediate | 2 | 0 | 0 | 1 | 0 | 7720 | L-A183, L-A15 |
admin_handbook | 53 | 17 | 0 | 3 | 3 | 423903 | L-A180, L-A181, L-A182, L-A183, L-A184, L-A155, L-A114, L-A25, L-A15, L-A14 |
db_handbook | 61 | 19 | 0 | 3 | 5 | 522356 | L-A180, L-A181, L-A182, L-A183, L-A184, L-A114, L-A15 |
usecase_validate | 1 | 0 | 0 | 1 | 0 | 1656 | L-A59 |
finalize_docs | 64 | 23 | 0 | 3 | 4 | 526585 | L-A180, L-A181, L-A182, L-A183, L-A184, L-A155, L-A114, L-A25, L-A15 |
[micro_step_runs] [lesson_recalls]
Review
Fully recordedRole: review model.
3 rounds, 3 counted, $7.10 recorded cost
| Round | Started | Critical | Major | Minor | Verdict | Cost | Cap in force | Archive reviewed |
|---|---|---|---|---|---|---|---|---|
| 1 | 2026-11-09T08:03:43Z | 0 | 12 | 31 | findings to rebuild [held_rounds, held_rounds #1599] | $2.88 | 3 rounds, $40.00 | ef210585560b… |
| 2 | 2026-11-09T09:15:23Z | 0 | 2 | 17 | findings to repackage [held_rounds, held_rounds #1603] | $2.05 | 3 rounds, $40.00 | bc4f556d1cca… |
| 3 | 2026-11-09T10:05:24Z | 0 | 0 | 19 | clean to publish [held_rounds, held_rounds #1605] | $2.16 | 3 rounds, $40.00 | 0c67748bb58c… |
Defects
Fully recorded- Ledger entries81 [defects, defects where product_slug=nginx and this tag or chain]
- Disclosed in the archive81 [docs/defects/defects.json, entries]
81 ledger entries: by severity high 14, low 67; by status fixed-before-release 81.
| Defect | Severity | Status | Found by | Fixed in |
|---|---|---|---|---|
RSD-nginx-9cb4357c64Admin handbook: The documented custom health command makes the container fail every probe ('CMD-SHELL: not found'), so a customer who follows it gets an unhealthy container. [defects, defects #201876] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-b3549e983cDatabase handbook: The documented compression test uses a flag rs-probe does not have; it exits 2 with a usage message and shows no headers. [defects, defects #201877] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-90143b48c6Database handbook: Claims rs-probe prints response headers; it does not. [defects, defects #201878] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-b113706730Database handbook: Mounting a stream{} file into conf.d (the documented procedure) makes nginx refuse to start. [defects, defects #201879] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-16deb51b27Database handbook: The run command that follows (line 1767) mounts the stream{} file into /etc/nginx/conf.d, so the container exits at start. [defects, defects #201880] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-b8971fe5f5Database handbook: The documented nginx.conf (stream + http, no events block) does not start. [defects, defects #201881] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-4f81a12e00API guide: A file containing only the stream block mounted over nginx.conf makes nginx exit at start. [defects, defects #201882] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-a9b5c415beAPI guide: Recommends mounting stream.conf into /etc/nginx/conf.d/stream.conf, which nginx rejects. [defects, defects #201883] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-0e8eadf4e2API guide: The first docker run mounts stream.conf at a path nothing includes, so the stream listener never starts. [defects, defects #201884] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-9bacefb803Database handbook: With the documented proxy.conf the request to http://localhost:8080/ is answered by the shipped welcome-page site, not forwarded to the upstream. [defects, defects #201885] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-39ceafe784Admin handbook: The documented examples (mysite.conf `listen 8080;` with root /var/www/html, and the 'Hello World' site at line 370) never serve the customer's content: the welcome page answers instead. [defects, defects #201886] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-9461f38e94Database handbook: Both sites cannot answer on the same port 8080 unless the Host header selects the second one. [defects, defects #201887] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-b44e25d200Admin handbook: Same family: with no server_name the new site is never selected. [defects, defects #201888] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-ba9a5f34fbAdmin handbook: The host-directory example is introduced as 'ensure it is writable by uid 999' but creates a 0700 directory owned by the caller, which the nginx user cannot use: every cache write fails with 500. [defects, defects #201889] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-e412181be1API guide: The note names a port conflict that cannot happen and tells the customer to remove a container called nginx, which is not the verification container; it contradicts the same guide's later sentence. [defects, defects #201890] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-528d1e7167Admin handbook: Predicts exit code 125 'port already allocated' after verification; the script's container uses another port and is removed. [defects, defects #201891] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-4dccff6235Admin handbook: Contradicts the Operating facts ('compiled in with --with-http_stub_status_module'): stub_status does appear in nginx -V. [defects, defects #201892] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-44668bb875Admin handbook: Contradicts the Health check facts: the probe does not require 200. [defects, defects #201893] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-9eb8766ea8Admin handbook: Same contradiction: the probe does not expect 200. [defects, defects #201894] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-d5a6079901Database handbook: Says replacing default.conf makes the health check fail 'because nothing answers on port 8080'; with a replacement that listens on 8080 it passes. [defects, defects #201895] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-ab707391e0Database handbook: States that no reload signal reaches the master; the master logs 'signal 1 (SIGHUP) received ... [defects, defects #201896] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-e8fee68309Database handbook: For an unparseable configuration `nginx -s reload` exits 1 and prints the error; the text says it exits 0 and sends the signal, contradicting lines 1493-1495 and the Operating facts. [defects, defects #201897] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-2555143255API guide: Says no signal is sent when files cannot be opened; the signal is sent (contradicts the sentence before it, which says the master logs the error). [defects, defects #201898] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-25080998b4API guide: Same false claim: the master receives SIGHUP. [defects, defects #201899] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-85e1b55254API guide: A missing certificate is reported by `nginx -s reload` in the terminal with exit 1, not exit 0 with a log entry. [defects, defects #201900] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-3f74f576ecAPI guide: docker kill never prints the nginx error or exits 1. [defects, defects #201901] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-10ed7a2a22API guide: States generally that reload exits 0 for an invalid configuration; syntax errors exit 1. [defects, defects #201902] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-3a6bfaccccDatabase handbook: There is no `protocol` directive; the sentence contradicts its own example (`listen 53 udp;`). [defects, defects #201903] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-485049f657Database handbook: Tells the customer to set proxy_temp_path in the stream block, which nginx rejects. [defects, defects #201904] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-875dc7637bDatabase handbook: Contradicts line 1937 and nginx's stream default. [defects, defects #201905] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-7b716cac1fDatabase handbook: The example does not enable realip as the sentence says. [defects, defects #201906] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-b3c3b72f11Admin handbook: The r3 image has no runtime debs; the handbook still describes the r2 full-ubuntu runtime. [defects, defects #201907] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-f455d6db27Database handbook: Same: no runtime debs in r3. [defects, defects #201908] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-5513b152b8API guide: Same: the runtime is a chiselled rootfs, not Debian packages. [defects, defects #201909] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-c9f8aecb3aAPI guide: The documented shell command does nothing without -it. [defects, defects #201910] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-4d2d7a341eAdmin handbook: -body does not print the status code. [defects, defects #201911] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-f265b88e40Admin handbook: Error log goes to stderr. [defects, defects #201912] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-3ef9770563API guide: The example is introduced as a copy of the shipped default site but replaces default_type with add_header, producing a duplicate Content-Type header. [defects, defects #201913] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-081503fe5dDatabase handbook: The command does not test a file before a new container starts. [defects, defects #201914] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-9197603237API guide: docker cp is not a mount and cannot be used as the non-root user. [defects, defects #201915] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-3d866ebb72Database handbook: The image has no package manager, so a package cannot be installed there. [defects, defects #201916] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-db2e81f3a7API guide: Inconsistent mount paths: a configuration following the guide's own ssl.conf (`/etc/nginx/ssl/cert.pem`) fails with 'cannot load certificate ... [defects, defects #201917] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-bc433205efAdmin handbook: reuseport is not required by nginx. [defects, defects #201918] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-1c199c9042Admin handbook: The documented 'Hello World' site (mysite.conf: listen 8080; root /var/www/html, no server_name) is never selected: default.conf (server_name localhost) is the default server for 8080, so the… [defects, defects #202922] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-701b82d9bcAdmin handbook: The 'Creating Mount Files' site.conf (listen 8080; server_name localhost; root /data) duplicates default.conf's server_name on the same port: nginx logs 'conflicting server name "localhost" on… [defects, defects #202923] | high | fixed-before-release | held review (review model) | — |
RSD-nginx-07ea0f08ddAdmin handbook: Directories need execute permission as well; contradicts the Permissions section (line 729) and DB handbook line 995. [defects, defects #202924] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-577e780162Admin handbook: Says the health check fails unless /healthz is provided; the probe passes on any HTTP status (Operating facts, health check). [defects, defects #202925] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-aeb36e4356Admin handbook: Nothing is served 'from memory'; the page is read from the image's filesystem and /healthz is a return directive. [defects, defects #202926] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-72b618df9dAPI guide: A redirection truncates then writes; it is in place, not atomic. [defects, defects #202927] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-6ddb75777aAPI guide: Same false 'atomically' claim. [defects, defects #202928] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-c7e9b3870eDatabase handbook: Same false 'atomically' claim. [defects, defects #202929] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-0e86b6de5fAPI guide: Requires a /healthz location for health; the probe passes with any HTTP answer on 8080 (contradicts the Operating facts and API line 481). [defects, defects #202930] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-bb40b3d764API guide: Replacing the default site alone does not fail the check; contradicts line 1164 and the Operating facts. [defects, defects #202931] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-801ca91cccAPI guide: Ports above 1023 need no sysctl; the sentence contradicts API line 501 and ADMIN 865. [defects, defects #202932] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-997c310df9API guide: Port binding has nothing to do with writing a cache directory; the clause suggests a default Docker setting grants write access. [defects, defects #202933] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-cdb19ff218API guide: Contradicts API lines 2077 and 2169 and the Operating facts: /tmp files survive docker restart. [defects, defects #202934] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-233fe3f51fAPI guide: The shipped site has `location / { root /usr/share/nginx/html; }`, so /index.html answers 200. [defects, defects #202935] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-4f79e39d4fDatabase handbook: Same: /index.html answers 200. [defects, defects #202936] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-000be6b915API guide: Introduced as a copy of the shipped default site, but server_name, the `location /` block and the layout differ from the shipped default.conf (stub_status itself works). [defects, defects #202937] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-866e56c2ceDatabase handbook: Without -body or -code rs-probe prints nothing (exit 0), so the command shows no health answer. [defects, defects #202938] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-a2c9bbc52aDatabase handbook: proxy_ssl_certificate/proxy_ssl_certificate_key make nginx authenticate itself to the proxied server; they do not require client certificates from clients. [defects, defects #202939] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-14e953f287Database handbook: The example mounts the customer's own nginx.conf, which replaces the shipped main configuration; the default site survives only if that file includes conf.d. [defects, defects #202940] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-ce80d1253fAdmin handbook: Ports above 1023 need no sysctl; contradicts API line 501 and ADMIN line 868 (round-2 finding, still present). [defects, defects #203778] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-ca7bdb7635Admin handbook: Live (jt-ha912-b): after `sed -i` on a single bind-mounted site.conf, `nginx -T` still showed server_name site.local after reload, and showed site.two after `docker restart`. [defects, defects #203779] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-6becf87e09Admin handbook: Live: a directory mounted over conf.d holding only `server { listen 8080; location / { return 200; } }` (no /healthz location) stays `healthy`; rs-probe -code passes on any HTTP status (IMAGE_CONFIG… [defects, defects #203780] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-09b870d597Admin handbook: Same live test as ADMIN 297: no /healthz location, still healthy; round-2 finding 'requires a /healthz location for health' not fully fixed. [defects, defects #203781] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-de2834d82cAdmin handbook: Same live test: health depends on anything answering on 8080, not on /healthz. [defects, defects #203782] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-8f6fd57a0cAdmin handbook: Same live test; contradicts ADMIN 1753-1755 ('remains healthy as long as some endpoint on port 8080 answers'). [defects, defects #203783] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-6ecd2f6a65Admin handbook: Same live test; contradicts Operating facts health_check. [defects, defects #203784] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-6539ade937Database handbook: Same live test; the server need not answer /healthz. [defects, defects #203785] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-c4cbd2dd00Admin handbook: The image HEALTHCHECK is part of the image config (IMAGE_CONFIG.json Healthcheck), not of default.conf, and passes on any HTTP answer; contradicts Operating facts health_check and ADMIN 592/1753. [defects, defects #203786] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-b6f9e923d4Admin handbook: Live: a default.conf containing only `listen 8081;` leaves nothing on 8080 (container never reaches healthy); the sentence is true only when the replacement listens on 8080. [defects, defects #203787] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-6d322fb35eAdmin handbook: The docker run block that follows (lines 341-345) publishes only `-p 8080:8080` and the mysite.conf content is not shown; a customer who follows the sentence with listen 8081 cannot reach the site. [defects, defects #203788] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-1036af43dcDatabase handbook: Live: GET /index.html on the shipped default site returns 200 (rs-probe -code / wget); default.conf `location / { root /usr/share/nginx/html; }`. [defects, defects #203789] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-b85b783d56Database handbook: Live: after `sed -i` (replaced file) a reload kept the old content and `docker restart nginx` loaded the new one; a file written with `cat new > file` needs only the reload (DB 1090 says the same). [defects, defects #203790] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-2d3e8fc8c7Database handbook: Operating facts ports: under plain docker run the nginx user can bind below 1024 (`listen 80;` works, measured with Docker 29.1.3); DB line 1985 itself uses `listen 443;` in a stream server. [defects, defects #203791] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-6bfefb0cb9Database handbook: Operating facts data_persistence: /tmp is in the container's writable layer (not a tmpfs); the same section's Data and State text (DB 2253) says it survives docker restart. [defects, defects #203792] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-077c29d5a6Database handbook: Live (jt-ha912-p, mode 700 dir/600 file): GET / returned 403 and docker logs showed `[error] ... [defects, defects #203793] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-2d8fe5445aAPI guide: Live (jt-ha912-u): `docker logs jt-ha912-u > out.txt 2> err.txt` gave 5 stdout lines (access log) and 13 stderr lines (error log: the notice/startup lines); the documented command would drop the… [defects, defects #203794] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-aa341bd59dAPI guide: The block that follows is a different server (`server_name _;`, elided body), not the shipped default.conf (`server_name localhost`, location / with root, /healthz, /50x.html); round-2 finding… [defects, defects #203795] | low | fixed-before-release | held review (review model) | — |
RSD-nginx-409222005dAPI guide: IMAGE_BINARIES.txt lists no HTTP client besides rs-probe (no curl, wget); 'another tool available in the container' for testing 'from outside the container' names nothing that exists. [defects, defects #203796] | low | fixed-before-release | held review (review model) | — |
Verification
1 item not recorded- Reproduced before publishingyes (rebuilt digest sha256:b880d874ee7d8f30da9ed691fed953b4419300afc06a704e619ee49d4eb531d4 · published digest sha256:b880d874ee7d8f30da9ed691fed953b4419300afc06a704e619ee49d4eb531d4 · digest match yes · builder moby/buildkit:v0.31.2 · build seconds 64) [docs/provenance/REPRO_VERIFICATION.json, verified]
- Final contract gate (G8)PASS (checks artifact_coverage, assetchain_coverage, cosign, cpu_baseline, offline_rebuild, rebuild_manifest, scan_grade, scout_grade_a, script_copies, tag_base_os, thread_exit, trademark_shipped, vex_shipped) [g8_result.json, result]
- Grade at releaseA (percent 94 · tool docker scout policy 1.26.0 · config docker-default · org vex no · at 2026-11-09T10:29:56Z · failing Docker Scout counts 9 packages with copyleft licences (GPL, LGPL, MPL), all of them operating-system packages (it counts only packages whose licence it can read; the SBOM lists every component).) [SCOUT_EVIDENCE.json, docker_scout_policy]
- Image signatureverified on the index and the linux/amd64 manifest (key fingerprint 04daa92344a52dbc · at 2026-11-09T10:29:47Z) [docs/provenance/IMAGE_EVIDENCE.json, signed]
- Image signature transparency-log entries
- log index 3762539621 · transparency-log entry
- log index 3762541128 · transparency-log entry
- rebuild.json signatureSigstore bundle, release key (key fingerprint 04daa92344a52dbc · log index 3763241570 · transparency-log entry · integrated 2026-11-09T10:32:12Z) [ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.rebuild.json.sigstore, verificationMaterial.tlogEntries[0]]
- Signed attestations
- kind provenance · digest sha256:8e9465af4e8612da78ec4368f18a3dbe3c12403cb0947f185278a7a1d16350dd · state attached · log index 3763241931 · transparency-log entry
- kind sbom · digest sha256:8e9465af4e8612da78ec4368f18a3dbe3c12403cb0947f185278a7a1d16350dd · state attached · log index 3763242354 · transparency-log entry
- kind vsa · digest sha256:8e9465af4e8612da78ec4368f18a3dbe3c12403cb0947f185278a7a1d16350dd · state attached · log index 3763242694 · transparency-log entry
- kind provenance · digest sha256:b880d874ee7d8f30da9ed691fed953b4419300afc06a704e619ee49d4eb531d4 · state attached · log index 3763243049 · transparency-log entry
- kind sbom · digest sha256:b880d874ee7d8f30da9ed691fed953b4419300afc06a704e619ee49d4eb531d4 · state attached · log index 3763243521 · transparency-log entry
- kind vsa · digest sha256:b880d874ee7d8f30da9ed691fed953b4419300afc06a704e619ee49d4eb531d4 · state attached · log index 3763243940 · transparency-log entry
- Pins recorddocs/PINS.md and docs/provenance/PINS.json in the archive (https://readystack.dev/products/nginx/recipe) [docs/provenance/PINS.json]
Offline clean-room rebuilds
- 2026-11-09T08:03:49Z on build host 2 (Docker-in-Docker daemon with --network none): bit for bit yes, digest match yes, customer verify yes
rebuilt sha256:49196640c0f71cbdfc8512cd8a2e2cfd30357a5443ed70bbf02fe182de98c73e [clean-room rebuild ledger, runs[690]] - 2026-11-09T09:15:28Z on build host 2 (Docker-in-Docker daemon with --network none): bit for bit yes, digest match yes, customer verify yes
rebuilt sha256:b880d874ee7d8f30da9ed691fed953b4419300afc06a704e619ee49d4eb531d4 [clean-room rebuild ledger, runs[692]]
- Not recorded: the policy tool's --result-file itself (its per-policy results are copied into SCOUT_EVIDENCE.json and the archive's IMAGE_EVIDENCE.json; the file is not kept)
Publication
Fully recorded 1 pending at generation- Image pushed (internal tag), publish_image passed2026-11-09T09:09:07Z [stage_runs, stage_runs chain 912 stage publish_image]
- Archive manifests written2026-11-09T10:31:12Z [PUBLISH_MANIFEST.json, published_at]
- Pending at generation: the archive cut-over on prodasset, the release tag's promotion and the site event (this trail was generated after G8 and before them; they are appended as a 'publication' event in History)
Packages and CPU level
Fully recorded- x86-64 level the image needsv1 (used v4 · baseline v2 · elf files 66 · probed 2026-11-09T09:06:53Z · source build_kit) [release_images, isa_level_hard]
History
2 events- 2026-11-09T10:33:21Z generated: by KitForge release/build_trail.py · generator commit d83d0de9b6c19e378265f1b12eeea189e2c78f64
- 2026-11-09T10:34:28Z publication: promoted at 2026-11-09T10:33:52Z · promoted digest sha256:8e9465af4e8612da78ec4368f18a3dbe3c12403cb0947f185278a7a1d16350dd · promotion method imagetools_create_retag_by_digest_no_rebuild · site event 408 · checklist status complete · checklist at 2026-11-09T10:34:28Z · record workspace: deliverables/provenance/PROMOTION_RECORD.json, RELEASE_CHECKLIST.json
Records
25 records| Record | Where it is | Rows |
|---|---|---|
docs/defects/defects.json | inside the archive (ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.tar.gz) | — |
docs/provenance/IMAGE_EVIDENCE.json | inside the archive (ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.tar.gz) | — |
docs/provenance/LOCKED_DIGEST.txt | inside the archive (ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.tar.gz) | — |
docs/provenance/PINS.json | inside the archive (ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.tar.gz) | — |
docs/provenance/REPRO_VERIFICATION.json | inside the archive (ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.tar.gz) | — |
docs/provenance/SOURCE_TREE_HASH.json | inside the archive (ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.tar.gz) | — |
MANIFEST.json | beside the archive (prodasset /data/production/nginx/1.31.8-CE-ubuntu24.04-r3/), as staged for publishing | — |
PUBLISH_MANIFEST.json | beside the archive (prodasset /data/production/nginx/1.31.8-CE-ubuntu24.04-r3/), as staged for publishing | — |
ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.rebuild.json | beside the archive (prodasset /data/production/nginx/1.31.8-CE-ubuntu24.04-r3/), as staged for publishing | — |
ReadyStack-nginx-1.31.8-CE-ubuntu24.04-r3.rebuild.json.sigstore | beside the archive (prodasset /data/production/nginx/1.31.8-CE-ubuntu24.04-r3/), as staged for publishing | — |
SCOUT_EVIDENCE.json | beside the archive (prodasset /data/production/nginx/1.31.8-CE-ubuntu24.04-r3/), as staged for publishing | — |
clean-room rebuild ledger | the clean-room rebuild ledger (runstate/audit-2026-09/bit4bit.json, not published) | — |
build_requests | sadb, ReadyStack's engine database (not published) | 545 |
chains | sadb, ReadyStack's engine database (not published) | 912 |
defects | sadb, ReadyStack's engine database (not published) | nginx 1.31.8-CE-ubuntu24.04-r3 |
drive_runs | sadb, ReadyStack's engine database (not published) | chain 912 |
held_rounds | sadb, ReadyStack's engine database (not published) | chain 912 |
lesson_recalls | sadb, ReadyStack's engine database (not published) | chain 912 |
micro_step_runs | sadb, ReadyStack's engine database (not published) | chain 912 |
release_images | sadb, ReadyStack's engine database (not published) | nginx 1.31.8-CE-ubuntu24.04-r3 |
stage_events | sadb, ReadyStack's engine database (not published) | chain 912 |
stage_runs | sadb, ReadyStack's engine database (not published) | chain 912 |
attestations.json | the chain's workspace on the controller (not published) | — |
deliverables/provenance/PROMOTION_RECORD.json | the chain's workspace on the controller (not published) | — |
g8_result.json | the chain's workspace on the controller (not published) | — |