SWAG 5.9.0-CE-ubuntu24.04-r1 build trail
How ReadyStack built readystack/swag:5.9.0-CE-ubuntu24.04-r1 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/swag:5.9.0-CE-ubuntu24.04-r1 - Index digestsha256:33a4430a4a12b61cda3be79755a8ebffe77f317b1d56493834cf2a95430c0cce
- linux/amd64 digestsha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3
- Archive
ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.tar.gz - Archive SHA-256 nowdf74dc2fb2a4ad2576da24e70fd9d5eb7b4bce983327760db7ad0268136e6872
- Pins record
docs/PINS.md,docs/provenance/PINS.jsonin the archive (since generated) - Generated2026-11-09T20:31:18Z 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-swag-5.9.0-CE-ubuntu24.04-r1.trail.json.sigstore ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.trail.json
IdentityWhy this release existsThe path through the harnessModel work per stageReviewDefectsVerificationPublicationPackages and CPU level
Identity
Fully recorded- ProductSWAG (swag) [MANIFEST.json]
- Release tag5.9.0-CE-ubuntu24.04-r1 [MANIFEST.json]
- Imagereadystack/swag:5.9.0-CE-ubuntu24.04-r1 [MANIFEST.json]
- Image index digestsha256:33a4430a4a12b61cda3be79755a8ebffe77f317b1d56493834cf2a95430c0cce [docs/provenance/LOCKED_DIGEST.txt]
- linux/amd64 image digestsha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3 [ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.rebuild.json, subject.image_manifest_digest]
- ArchiveReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.tar.gz (bytes 402666879) [MANIFEST.json]
- Archive sha256 at publishdf74dc2fb2a4ad2576da24e70fd9d5eb7b4bce983327760db7ad0268136e6872 [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/linuxserver/docker-swag [docs/provenance/SOURCE_TREE_HASH.json]
- Upstream ref5.9.0-ls497 [docs/provenance/SOURCE_TREE_HASH.json]
- Upstream commit24000edb531a50939fd4e1a9e5943aa659fb2dab [docs/provenance/SOURCE_TREE_HASH.json]
- Source tree hashb8940a29f1bf74e97e31b5fafda9240ff496e094b57d146cf8afaa5dac2348b6 (files 152) [docs/provenance/SOURCE_TREE_HASH.json, tree_listing_sha256 (sha256 of the sorted file listing)]
- Kit tree hashsha256:cbd025e27356b36360677f878de056fe1e115f1aedc6a5541056f04497df8ec3 [ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.rebuild.json, inputs.tree_hash]
- SOURCE_DATE_EPOCH1793438806 (utc 2026-10-31T09:26:46Z) [ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.rebuild.json, inputs.source_date_epoch]
- Base images
- ref ubuntu:24.04@sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852 · platform digest sha256:78d4744ead1f5b19b04d0df558ab182a5300903900755e515b2ca4d10eb2044d
- BuildKitmoby/buildkit:v0.31.2 (image digest sha256:e0e67ea9c4bb07bdef683e29f70f3b623d1eb9c82274a9ec04e6bb0511449fb0) [ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.rebuild.json, engine]
- Engine commit(s)
- commit 373d3c6436c70a6b11e2c6f6d2aa49fc56a5a5c1 · dirty yes · first drive 3664
- commit c5454541988413acee973d174dd436e17d7a9974 · dirty yes · first drive 3683
- commit 893ddf91074580cc5f11ded7558920733b65fc43 · dirty yes · first drive 3945
- commit 0f08e26ee402fd26c98aca5274d6a37e78400064 · dirty yes · first drive 3971
- commit 5d0ff967b304c4cd787659a1843c76de2a7e8063 · dirty yes · first drive 4089
- commit 91a955c6ea053cb5d1d14ee38103d7239668d234 · dirty yes · first drive 4098
- commit 6c084534f784f7171ae351892e74c39b28d639ce · dirty yes · first drive 4106
- commit a50b7385e20d13ac36f6f5f752bdaadce848ac1d · dirty yes · first drive 4111
- commit 844b5eff31c4198de7a7e3f53d46cba192aeceb8 · dirty yes · first drive 4113
Why this release exists
Fully recorded- Chain860 (created 2026-11-07T12:13:11Z · trigger customer_request · upstream version 5.9.0) [chains, chains #860]
- Requestbuild request #489 (rebuild) (requested at 2026-11-03T05:16:44Z · requested by kitforge-agent · version 5.9.0) [build_requests, build_requests #489]
- Reasonretarget to 5.9.0-ls497: a newer upstream release (rule 1) [build_requests, build_requests #489 request_reason]
The path through the harness
Fully recorded2 chains · 10 drives · 18 stages · 6 rewinds
Chain 768 behind it · abandoned
Created 2026-10-28T10:36:00Z, upstream 5.8.0, build request 450 [chains, chains #768]
Abandoned: chain 768 abandoned: stale (it targets '5.8.0', the strategy '5.9.0') [watch_queue, watch_queue #10299 resolution]
| Drive | Started | Minutes | Build host | How it stopped |
|---|---|---|---|---|
| 638 | 2026-10-28T10:36:13Z | 18.2 | build host 3 withhold-publish | stage_failed at build_kit [drive_runs, drive_runs #638] rebuilt from a build line's log |
Chain 860 release · ready_to_ship
Created 2026-11-07T12:13:11Z, upstream 5.9.0, build request 489 [chains, chains #860]
| Drive | Started | Minutes | Build host | How it stopped |
|---|---|---|---|---|
| 3664 | 2026-11-07T12:13:29Z | 45.9 | build host 3 withhold-publish | stage_failed at package_archive; first failed check g8; 18 ticks [drive_runs, drive_runs #3664] |
| 3683 | 2026-11-08T04:11:59Z | 12.9 | build host 3 withhold-publish | stage_failed at package_archive; first failed check g8; 1 tick [drive_runs, drive_runs #3683] |
| 3945 | 2026-11-09T04:05:53Z | 12.7 | build host 3 withhold-publish | stage_failed at package_archive; first failed check g8; 1 tick [drive_runs, drive_runs #3945] |
| 3971 | 2026-11-09T06:25:11Z | 26.9 | build host 3 withhold-publish | ready_to_ship at package_archive; 16 ticks [drive_runs, drive_runs #3971] |
| 4089 | 2026-11-09T18:18:27Z | 6.3 | build host 3 withhold-publish | ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #4089] |
| 4098 | 2026-11-09T19:06:41Z | 5.7 | build host 3 withhold-publish | ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #4098] |
| 4106 | 2026-11-09T19:41:52Z | 5.7 | build host 3 withhold-publish | ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #4106] |
| 4111 | 2026-11-09T20:13:11Z | 5.9 | build host 3 withhold-publish | ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #4111] |
| 4113 | 2026-11-09T20:24:14Z | — | build host 3 publish-held | not recorded [drive_runs, drive_runs #4113] |
Stages, in order
| Stage | First start | Passed | Attempts | Gate checks passed | Artifacts (SHA-256) |
|---|---|---|---|---|---|
intake |
2026-11-07T12:13:39Z | 2026-11-07T12:13:40Z | 1 | 4
|
order_json eadf50f796f0… |
acquire |
2026-11-07T12:13:44Z | 2026-11-07T12:13:45Z | 1 | 12
|
source_tree e505c19d5c9f…license_file 3972dc9744f6…custody_inputs 077269637473…source_tree_hash b392efb4fac4…source_file_manifest 4be9fa677ca0… |
plan |
2026-11-07T12:14:24Z | 2026-11-07T12:14:25Z | 1 | 10
|
recon_report c685e959d59c…input_pin_plan ecf9f882dd1d…toolchain_lock 608e26d38425… |
assemble_kit |
2026-11-07T12:22:24Z | 2026-11-09T06:29:40Z | 2 | 27
|
dockerfile 6d59c9f180ce…build_recipe 571180da9a4b…system_pinning 28602e4092a8…build_offline_sh 6633aa31b6b4…generate_sbom_sh ce0f1e6f1e70…first_boot_health 8b3c1843dbfb…verify_offline_sh 3e8184ea230c…base_image_digests 7acd08a7c2d3…dockerfile_offline 6d59c9f180ce…first_build_digest faea0f02a4e2… |
remediate |
2026-11-07T12:23:01Z | 2026-11-09T06:29:44Z | 2 | 8
|
vendored_apt e3b0c44298fc…remediation_log 2d63b34968c0…security_report 10d74aa6dfbe… |
build_kit |
2026-11-07T12:31:29Z | 2026-11-09T06:38:02Z | 2 | 9
|
cosign_stamp 7648b4f760b9…locked_digest 8890e3b6e492…freeze_manifest eb8ffa0acd83…offline_rebuild_transcript be2b9c7f7777… |
verdict |
2026-11-07T12:33:04Z | 2026-11-09T06:39:34Z | 2 | 8
|
scout_verdict 1eaa13687b9f… |
publish_image |
2026-11-07T12:34:02Z | 2026-11-09T06:40:27Z | 2 | 7
|
hub_readme fe74aee4c892…promotion_record 60367d97ceba… |
boot_instance |
2026-11-07T12:34:15Z | 2026-11-09T06:40:37Z | 4 | 3
|
instance_handle b8e5799ec096… |
sbom |
2026-11-07T12:34:37Z | 2026-11-09T06:40:58Z | 2 | 5
|
sbom_md d889864dd67d…sbom_json 90fc19b912fe… |
schema_discovery |
2026-11-07T12:34:40Z | 2026-11-09T06:41:01Z | 2 | 7
|
schema_hash e1893ac93128…dependency_tree 1343eb96ed89…table_classification e03c3d87a147… |
admin_handbook |
2026-11-07T12:38:21Z | 2026-11-09T06:41:13Z | 2 | 7
|
api_map cdc3b6bb2c96…admin_handbook 74a9279d5060… |
db_handbook |
2026-11-07T12:42:33Z | 2026-11-09T06:41:29Z | 2 | 8
|
db_handbook 07e329cff882…seed_isolation 9ad80c9e4be8… |
seed_data |
2026-11-07T12:42:51Z | 2026-11-09T06:41:47Z | 2 | 6
|
seed_data_sql 97c26d9ebdae…seed_cases_json 32e29224fd5a… |
seed_validate |
2026-11-07T12:42:54Z | 2026-11-09T06:41:50Z | 2 | 3
|
seed_data_contract e001619383d1… |
usecase_validate |
2026-11-07T12:43:27Z | 2026-11-09T06:42:26Z | 2 | 10
|
failed_tests b2247b16f5f7…passed_tests 42dbeb793221…test_results 7212cf090a8e…usecase_contract c21723c95428… |
finalize_docs |
2026-11-07T12:47:48Z | 2026-11-09T06:42:32Z | 2 | 9
|
defects_json 5c0e849bff57…release_notes b336c9a4a075…api_integration_guide b8a852a585ed… |
package_archive invalidated 2026-11-09T20:23:50Z |
2026-11-07T12:59:19Z | 2026-11-09T20:19:06Z | 8 | 35 (final gate PASS)
|
sale_tar 560db911ea8e…checksums 726badd16832…verify_md 1d73ee1fe08d…rebuild_md ccd19fe95868…manifest_txt 17cb2b285086…actions_jsonl 6aab9a173c40…provenance_md b6a5c10cafea…assetchain_log_md e9eccaec0c0f…assetchain_log_json 6d05fc55142c… |
[stage_runs]
Rewinds
- 2026-11-09T06:25:15Z:
package_archivetoassemble_kiton strategy_changed (strategy changed (f064868cfe0f -> 477a0f78085a)) [stage_events, stage_events #28101] - 2026-11-09T07:35:28Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #28239] - 2026-11-09T18:53:51Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #29603] - 2026-11-09T19:39:36Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #29702] - 2026-11-09T20:11:53Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #29847] - 2026-11-09T20:23:50Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #29854]
Model work per stage
Fully recordedRole: writer model. Calls up to 2026-11-09T20:19:06Z.
64 calls over 5 stages
| Stage | Calls | Refused | Errors | Max attempt | Forced commits | Real tokens | Lesson rules shown |
|---|---|---|---|---|---|---|---|
plan | 2 | 0 | 0 | 1 | 0 | 11241 | L-A183, L-A15 |
remediate | 2 | 0 | 0 | 1 | 0 | 11448 | L-A183, L-A15 |
admin_handbook | 18 | 0 | 0 | 1 | 0 | 81950 | L-A180, L-A181, L-A182, L-A183, L-A184, L-A155, L-A114, L-A25, L-A15, L-A14 |
db_handbook | 21 | 0 | 0 | 1 | 0 | 92394 | L-A180, L-A181, L-A182, L-A183, L-A184, L-A114, L-A15 |
finalize_docs | 21 | 0 | 0 | 1 | 0 | 96078 | 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.
5 rounds, 5 counted, $8.02 recorded cost
| Round | Started | Critical | Major | Minor | Verdict | Cost | Cap in force | Archive reviewed |
|---|---|---|---|---|---|---|---|---|
| 1 | 2026-11-09T06:52:57Z | 2 | 26 | 14 | findings to repackage [held_rounds, held_rounds #1598] | $2.28 | 3 rounds, $40.00 | 0bdd52726a98… |
| 2 | 2026-11-09T18:25:07Z | 0 | 4 | 15 | findings to repackage [held_rounds, held_rounds #1659] | $2.29 | 3 rounds, $40.00 | 387a977cacb7… |
| 3 | 2026-11-09T19:12:51Z | 0 | 3 | 11 | findings to repackage [held_rounds, held_rounds #1666] | $1.29 | 3 rounds, $40.00 | 3af6dfc6499c… |
| 4 | 2026-11-09T19:48:00Z | 0 | 14 | 2 | findings to repackage [held_rounds, held_rounds #1668] | $1.52 | 3 rounds, $40.00 | 029fc8394e22… |
| 5 | 2026-11-09T20:19:30Z | 0 | 0 | 0 | clean to publish [held_rounds, held_rounds #1670] | $0.63 | 3 rounds, $40.00 | 560db911ea8e… |
Defects
Fully recorded- Ledger entries87 [defects, defects where product_slug=swag and this tag or chain]
- Disclosed in the archive87 [docs/defects/defects.json, entries]
87 ledger entries: by severity critical 2, high 44, low 41; by status fixed-before-release 87.
| Defect | Severity | Status | Found by | Fixed in |
|---|---|---|---|---|
RSD-swag-464321f066Database handbook: The documented backup command never runs tar: arguments after the image go to the SWAG entrypoint, which ignores them and starts the gateway (exit 1 without URL). [defects, defects #201499] | critical | fixed-before-release | held review (review model) | — |
RSD-swag-999df19e56Database handbook: The documented restore command starts SWAG (ignoring the tar arguments) instead of extracting the backup; the volume is not restored and the next start finds an empty /config and requests new… [defects, defects #201500] | critical | fixed-before-release | held review (review model) | — |
RSD-swag-a840fa5c27Admin handbook: Every documented `docker exec swag certbot ...` command fails for the non-root user: certbot's default logs/work directories (/var/log/letsencrypt, /var/lib/letsencrypt) are not writable and the… [defects, defects #201501] | high | fixed-before-release | held review (review model) | — |
RSD-swag-2b8ed6dd42Database handbook: Every documented `docker exec swag certbot ...` command fails for the non-root user: certbot's default logs/work directories (/var/log/letsencrypt, /var/lib/letsencrypt) are not writable and the… [defects, defects #201502] | high | fixed-before-release | held review (review model) | — |
RSD-swag-f38cc25e10Database handbook: Every documented `docker exec swag certbot ...` command fails for the non-root user: certbot's default logs/work directories (/var/log/letsencrypt, /var/lib/letsencrypt) are not writable and the… [defects, defects #201503] | high | fixed-before-release | held review (review model) | — |
RSD-swag-3c54ea4efdDatabase handbook: Every documented `docker exec swag certbot ...` command fails for the non-root user: certbot's default logs/work directories (/var/log/letsencrypt, /var/lib/letsencrypt) are not writable and the… [defects, defects #201504] | high | fixed-before-release | held review (review model) | — |
RSD-swag-bbb0f8b5d5Database handbook: Every documented `docker exec swag certbot ...` command fails for the non-root user: certbot's default logs/work directories (/var/log/letsencrypt, /var/lib/letsencrypt) are not writable and the… [defects, defects #201505] | high | fixed-before-release | held review (review model) | — |
RSD-swag-6f8591bb02API guide: Every documented `docker exec swag certbot ...` command fails for the non-root user: certbot's default logs/work directories (/var/log/letsencrypt, /var/lib/letsencrypt) are not writable and the… [defects, defects #201506] | high | fixed-before-release | held review (review model) | — |
RSD-swag-dd3b197401API guide: Every documented `docker exec swag certbot ...` command fails for the non-root user: certbot's default logs/work directories (/var/log/letsencrypt, /var/lib/letsencrypt) are not writable and the… [defects, defects #201507] | high | fixed-before-release | held review (review model) | — |
RSD-swag-b79d4979d5Database handbook: /usr/bin/certbot does not exist. [defects, defects #201508] | high | fixed-before-release | held review (review model) | — |
RSD-swag-c63c15f99eDatabase handbook: Documented command fails with 'no such file or directory'. [defects, defects #201509] | high | fixed-before-release | held review (review model) | — |
RSD-swag-fcca84a202Admin handbook: The section says the existing certificate stays in use until a later renewal; the first restart actually deletes it and requests a new one at once (also on any change of URL, SUBDOMAINS,… [defects, defects #201510] | high | fixed-before-release | held review (review model) | — |
RSD-swag-5d14e7e96dAdmin handbook: With the shipped configuration nothing listens on 8443/udp, so HTTP/3 is not served; it needs the `listen 8443 quic reuseport` lines in site-confs/default.conf uncommented and -p 443:8443/udp… [defects, defects #201511] | high | fixed-before-release | held review (review model) | — |
RSD-swag-c6dffdb0acAdmin handbook: With the shipped configuration nothing listens on 8443/udp, so HTTP/3 is not served; it needs the `listen 8443 quic reuseport` lines in site-confs/default.conf uncommented and -p 443:8443/udp… [defects, defects #201512] | high | fixed-before-release | held review (review model) | — |
RSD-swag-ebcbd1f20dDatabase handbook: With the shipped configuration nothing listens on 8443/udp, so HTTP/3 is not served; it needs the `listen 8443 quic reuseport` lines in site-confs/default.conf uncommented and -p 443:8443/udp… [defects, defects #201513] | high | fixed-before-release | held review (review model) | — |
RSD-swag-0dc9aa7addAPI guide: With the shipped configuration nothing listens on 8443/udp, so HTTP/3 is not served; it needs the `listen 8443 quic reuseport` lines in site-confs/default.conf uncommented and -p 443:8443/udp… [defects, defects #201514] | high | fixed-before-release | held review (review model) | — |
RSD-swag-a6005a3c2eAPI guide: With the shipped configuration nothing listens on 8443/udp, so HTTP/3 is not served; it needs the `listen 8443 quic reuseport` lines in site-confs/default.conf uncommented and -p 443:8443/udp… [defects, defects #201515] | high | fixed-before-release | held review (review model) | — |
RSD-swag-c8bfda5838Admin handbook: A newly copied proxy sample still has `listen 443`; the 80/443 -> 8080/8443 rewrite happens only at container start, so a reload alone leaves the app unreachable on the published port 8443 (nginx… [defects, defects #201516] | high | fixed-before-release | held review (review model) | — |
RSD-swag-381cb682e0API guide: A newly copied proxy sample still has `listen 443`; the 80/443 -> 8080/8443 rewrite happens only at container start, so a reload alone leaves the app unreachable on the published port 8443 (nginx… [defects, defects #201517] | high | fixed-before-release | held review (review model) | — |
RSD-swag-86e6e5003fAPI guide: A newly copied proxy sample still has `listen 443`; the 80/443 -> 8080/8443 rewrite happens only at container start, so a reload alone leaves the app unreachable on the published port 8443 (nginx… [defects, defects #201518] | high | fixed-before-release | held review (review model) | — |
RSD-swag-3624408449Database handbook: The documented way to supply DNS credentials (an --env-file of secrets) has no effect: certbot reads only /config/dns-conf/<provider>.ini, so the request fails with the template's placeholder values. [defects, defects #201519] | high | fixed-before-release | held review (review model) | — |
RSD-swag-33ce1e0527Database handbook: The example's `--env-file /path/to/dns-secrets.env` supplies nothing certbot uses; remove the line and put the credentials in /config/dns-conf/cloudflare.ini. [defects, defects #201520] | high | fixed-before-release | held review (review model) | — |
RSD-swag-45f0b4ef8dDatabase handbook: API keys in dns-conf files are not environment variables; DNS credentials cannot be passed that way. [defects, defects #201521] | high | fixed-before-release | held review (review model) | — |
RSD-swag-73b24601a2API guide: Same as the DB handbook: --env-file credentials are ignored. [defects, defects #201522] | high | fixed-before-release | held review (review model) | — |
RSD-swag-5ab740d32bAPI guide: The `--env-file dns-secrets.env` line supplies nothing the entrypoint or certbot reads. [defects, defects #201523] | high | fixed-before-release | held review (review model) | — |
RSD-swag-c88ada9d5aDatabase handbook: The volume-mount example sets no URL (and publishes no ports), so the container exits with 'URL is required' instead of running. [defects, defects #201524] | high | fixed-before-release | held review (review model) | — |
RSD-swag-d54d00a8b9Admin handbook: The log directory is /config/log, not /config/logs. [defects, defects #201525] | low | fixed-before-release | held review (review model) | — |
RSD-swag-402bca4674Database handbook: No 03:00/15:00 UTC schedule exists. [defects, defects #201526] | low | fixed-before-release | held review (review model) | — |
RSD-swag-d68c056100Database handbook: An existing certificate is reused at start; certbot is not run then. [defects, defects #201527] | low | fixed-before-release | held review (review model) | — |
RSD-swag-882ba3a5d2Database handbook: Certificates do not expire when the container stops. [defects, defects #201528] | low | fixed-before-release | held review (review model) | — |
RSD-swag-7417d6dd4dDatabase handbook: 8080 and 8443 are not low-numbered; the stated reason is wrong (the entrypoint moves 80/443 to 8080/8443 so that no low port is needed). [defects, defects #201529] | low | fixed-before-release | held review (review model) | — |
RSD-swag-745690f73aAdmin handbook: The ports are above 1023; the sentence gives an unrelated reason that depends on the runtime's sysctl. [defects, defects #201530] | low | fixed-before-release | held review (review model) | — |
RSD-swag-e2c6521613API guide: The rewrite exists so that no port below 1024 is needed; the sentence says the opposite. [defects, defects #201531] | low | fixed-before-release | held review (review model) | — |
RSD-swag-93d4d23d5eAPI guide: The entrypoint mounts nothing; it only references the file in certbot's cli.ini. [defects, defects #201532] | low | fixed-before-release | held review (review model) | — |
RSD-swag-9884ef7dfeAdmin handbook: Arguments are not passed on to any program. [defects, defects #201533] | low | fixed-before-release | held review (review model) | — |
RSD-swag-ab516e8403API guide: Arguments are ignored by swag-entrypoint.sh. [defects, defects #201534] | low | fixed-before-release | held review (review model) | — |
RSD-swag-b6efcffb1dAdmin handbook: Words after the image name have no effect. [defects, defects #201535] | low | fixed-before-release | held review (review model) | — |
RSD-swag-5b20334e74Admin handbook: The guide contradicts itself on when the credentials go in; on a new volume they can only be edited after the first start, which fails to obtain a certificate until the container is restarted. [defects, defects #201536] | low | fixed-before-release | held review (review model) | — |
RSD-swag-231b9ee237API guide: X25519MLKEM768 is a curve/group, not a cipher. [defects, defects #201537] | low | fixed-before-release | held review (review model) | — |
RSD-swag-1b599fdd73API guide: Curve, not cipher. [defects, defects #201538] | low | fixed-before-release | held review (review model) | — |
RSD-swag-6ec2840ec7Admin handbook: Live on the release image: with the shipped default.conf, `curl -si http://127.0.0.1:8080/.well-known/acme-challenge/tok` (token file in /config/www) -> `HTTP/1.1 301 Moved Permanently`, `Location:… [defects, defects #221813] | high | fixed-before-release | held review (review model) | — |
RSD-swag-c42af61dc7API guide: Live on the release image: with the shipped default.conf, `curl -si http://127.0.0.1:8080/.well-known/acme-challenge/tok` (token file in /config/www) -> `HTTP/1.1 301 Moved Permanently`, `Location:… [defects, defects #221814] | high | fixed-before-release | held review (review model) | — |
RSD-swag-330eda546dDatabase handbook: Ran the documented line as written in a started container: `docker exec jt-ha860-s1 certbot --config-dir /config/etc/letsencrypt --logs-dir /config/log/letsencrypt --work-dir /tmp/letsencrypt` ->… [defects, defects #221815] | high | fixed-before-release | held review (review model) | — |
RSD-swag-df5f02c155Admin handbook: provenance/IMAGE_CONFIG.json has no Volumes entry, so /config is in the container's writable layer, which `docker restart` keeps (live: files and certbot state survived `docker restart jt-ha860-s2`). [defects, defects #221816] | low | fixed-before-release | held review (review model) | — |
RSD-swag-0ab1735cf7Admin handbook: swag-entrypoint.sh: `if [ ! [defects, defects #221817] | low | fixed-before-release | held review (review model) | — |
RSD-swag-7309d98f33Admin handbook: swag-entrypoint.sh: `if [ ! [defects, defects #221818] | low | fixed-before-release | held review (review model) | — |
RSD-swag-69212404ecDatabase handbook: swag-entrypoint.sh: `if [ ! [defects, defects #221819] | low | fixed-before-release | held review (review model) | — |
RSD-swag-033b1bbbd0API guide: swag-entrypoint.sh: `if [ ! [defects, defects #221820] | low | fixed-before-release | held review (review model) | — |
RSD-swag-1339e88957Admin handbook: held docs/REBUILD.md (57 lines) lists requirements, the two scripts and the rebuild.json verifier; it names no upstream versions, Git commits or build arguments (docs/PROVENANCE.md and… [defects, defects #221821] | low | fixed-before-release | held review (review model) | — |
RSD-swag-7697651d7cAdmin handbook: Live: after uncommenting the quic lines and `nginx -s reload`, /proc/net/udp showed 8443/udp listening; /config/nginx/ssl.conf:32 is still `#add_header Alt-Svc 'h3=":443"' always;`, so no Alt-Svc… [defects, defects #221822] | low | fixed-before-release | held review (review model) | — |
RSD-swag-3782b093efAdmin handbook: Live: `docker run -d -e VALIDATION=dns -e DNSPLUGIN=cloudflare -v jt-ha860-v3:/config ...` on a new volume: the first start creates /config/dns-conf/cloudflare.ini with placeholder values and… [defects, defects #221823] | low | fixed-before-release | held review (review model) | — |
RSD-swag-ff7cde8eddDatabase handbook: Live: `docker run -d -e VALIDATION=dns -e DNSPLUGIN=cloudflare -v jt-ha860-v3:/config ...` on a new volume: the first start creates /config/dns-conf/cloudflare.ini with placeholder values and… [defects, defects #221824] | low | fixed-before-release | held review (review model) | — |
RSD-swag-9d618efa6eAPI guide: Live: `docker run -d -e VALIDATION=dns -e DNSPLUGIN=cloudflare -v jt-ha860-v3:/config ...` on a new volume: the first start creates /config/dns-conf/cloudflare.ini with placeholder values and… [defects, defects #221825] | low | fixed-before-release | held review (review model) | — |
RSD-swag-307ce75906Database handbook: swag-entrypoint.sh: `sed -i -E '/^\s*ssl_ecdh_curve/ s/X25519MLKEM768://'` removes the group name, not the line; live ssl.conf:14 is `ssl_ecdh_curve X25519:prime256v1:secp384r1;`. [defects, defects #221826] | low | fixed-before-release | held review (review model) | — |
RSD-swag-b0a159b566Database handbook: swag-entrypoint.sh runs the ssl_ecdh_curve sed unconditionally; the OpenSSL is the image's, not 'your system's'. [defects, defects #221827] | low | fixed-before-release | held review (review model) | — |
RSD-swag-451b2236e0Database handbook: swag-entrypoint.sh reads no positional arguments; admin handbook lines 259 and 797 say it ignores them. [defects, defects #221828] | low | fixed-before-release | held review (review model) | — |
RSD-swag-7a9d87a3efDatabase handbook: Live: `docker exec jt-ha860-s1 which certbot` -> /usr/local/bin/certbot; the next block runs `certbot --help`, not a full path. [defects, defects #221829] | low | fixed-before-release | held review (review model) | — |
RSD-swag-15fed87e7fDatabase handbook: /config/dns-conf is a path inside the container's /config volume (entrypoint C=/config), not a host path. [defects, defects #221830] | low | fixed-before-release | held review (review model) | — |
RSD-swag-ec194b3fc1Database handbook: Live on the release image (digest sha256:fae67e5…): `curl -si http://127.0.0.1:8080/.well-known/acme-challenge/tok` (token in /config/www) -> `HTTP/1.1 301 Moved Permanently`; `curl -sik… [defects, defects #223600] | high | fixed-before-release | held review (review model) | — |
RSD-swag-e620ee3e51Database handbook: Live on the release image (digest sha256:fae67e5…): `curl -si http://127.0.0.1:8080/.well-known/acme-challenge/tok` (token in /config/www) -> `HTTP/1.1 301 Moved Permanently`; `curl -sik… [defects, defects #223601] | high | fixed-before-release | held review (review model) | — |
RSD-swag-79e94b9cdbDatabase handbook: Ran the documented line as written in a started container (jt-ha860-w1): output 'You must agree in order to register with the ACME server. [defects, defects #223602] | high | fixed-before-release | held review (review model) | — |
RSD-swag-5ad8c65500Admin handbook: Live: /config/nginx/ssl.conf:32 is `#add_header Alt-Svc 'h3=":443"' always;`, the quic lines in default.conf:21,23 are commented; without the Alt-Svc line no browser is told about HTTP/3. [defects, defects #223603] | low | fixed-before-release | held review (review model) | — |
RSD-swag-6b4886543bAdmin handbook: Live: `docker run -d -e VALIDATION=dns -e DNSPLUGIN=cloudflare -v jt-ha860-w1v:/config ...` on a new volume: the first start creates /config/dns-conf/cloudflare.ini (and a template for every… [defects, defects #223604] | low | fixed-before-release | held review (review model) | — |
RSD-swag-7213b2a6fbAPI guide: Live: `docker run -d -e VALIDATION=dns -e DNSPLUGIN=cloudflare -v jt-ha860-w1v:/config ...` on a new volume: the first start creates /config/dns-conf/cloudflare.ini (and a template for every… [defects, defects #223605] | low | fixed-before-release | held review (review model) | — |
RSD-swag-53c14edba2API guide: Live: `docker run -d -e VALIDATION=dns -e DNSPLUGIN=cloudflare -v jt-ha860-w1v:/config ...` on a new volume: the first start creates /config/dns-conf/cloudflare.ini (and a template for every… [defects, defects #223606] | low | fixed-before-release | held review (review model) | — |
RSD-swag-b1e53bccdeDatabase handbook: swag-entrypoint.sh: a new named volume is empty before the first start, and the first start generates a self-signed cert.crt/cert.key in /config/keys when either is missing; nothing can be placed… [defects, defects #223607] | low | fixed-before-release | held review (review model) | — |
RSD-swag-5102f0ad29Admin handbook: swag-entrypoint.sh: `if [ ! [defects, defects #223608] | low | fixed-before-release | held review (review model) | — |
RSD-swag-5490c291bfAdmin handbook: Live: the default site's `/` on 8080 returns a 3xx to https; it is HTTP requests that are redirected, there is no HTTPS request on 8080 (nginx listens for plain HTTP there). [defects, defects #223609] | low | fixed-before-release | held review (review model) | — |
RSD-swag-a4ab860b32Database handbook: Live: the default site's `/` on 8080 returns a 3xx to https; it is HTTP requests that are redirected, there is no HTTPS request on 8080 (nginx listens for plain HTTP there). [defects, defects #223610] | low | fixed-before-release | held review (review model) | — |
RSD-swag-c351064c47API guide: Live: the default site's `/` on 8080 returns a 3xx to https; it is HTTP requests that are redirected, there is no HTTPS request on 8080 (nginx listens for plain HTTP there). [defects, defects #223611] | low | fixed-before-release | held review (review model) | — |
RSD-swag-ad003c38d8Admin handbook: certbot has no subcommand that manages DNS provider credentials; they are the .ini templates the entrypoint copies to /config/dns-conf (swag-entrypoint.sh `cp -n /defaults/dns-conf/*`) and the… [defects, defects #223612] | low | fixed-before-release | held review (review model) | — |
RSD-swag-d1b530c1a2Admin handbook: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224654] | high | fixed-before-release | held review (review model) | — |
RSD-swag-ddb9754e0eAdmin handbook: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224655] | high | fixed-before-release | held review (review model) | — |
RSD-swag-b91ccd56ceAPI guide: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224656] | high | fixed-before-release | held review (review model) | — |
RSD-swag-2fd851027aAPI guide: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224657] | high | fixed-before-release | held review (review model) | — |
RSD-swag-6931b52e1eAPI guide: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224658] | high | fixed-before-release | held review (review model) | — |
RSD-swag-61ee6c9110API guide: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224659] | high | fixed-before-release | held review (review model) | — |
RSD-swag-324b2eba9bDatabase handbook: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224660] | high | fixed-before-release | held review (review model) | — |
RSD-swag-60cee130a6Database handbook: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224661] | high | fixed-before-release | held review (review model) | — |
RSD-swag-4644ebeec9Database handbook: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224662] | high | fixed-before-release | held review (review model) | — |
RSD-swag-6c272319d4Database handbook: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224663] | high | fixed-before-release | held review (review model) | — |
RSD-swag-af346945cbDatabase handbook: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224664] | high | fixed-before-release | held review (review model) | — |
RSD-swag-06dec9bf35Database handbook: Live on the release image (sha256:fae67e5…, container jt-ha860-r4b): `docker exec c cp sonarr.conf.sample sonarr2.conf` -> 'cp: cannot stat sonarr.conf.sample: No such file or directory' (samples… [defects, defects #224665] | high | fixed-before-release | held review (review model) | — |
RSD-swag-3c2ba9ba5cAPI guide: Live: after `cp radarr.subdomain.conf.sample radarr.subdomain.conf` and `nginx -s reload` (rc 0, `nginx -t` ok) the sample's `listen 443 ssl` stays 443: `curl -sk -H 'Host: radarr.example.com'… [defects, defects #224666] | high | fixed-before-release | held review (review model) | — |
RSD-swag-ab2105aee4API guide: Same live test as :878 (reload leaves the new sample on container port 443, not published); contradicts API_INTEGRATION_GUIDE.md:451 'a newly copied sample needs `docker restart swag`'. [defects, defects #224667] | high | fixed-before-release | held review (review model) | — |
RSD-swag-44ffc34acfAdmin handbook: Live with --cap-add NET_ADMIN: `docker exec c fail2ban-client status` -> 'exec: "fail2ban-client": executable file not found in $PATH'; the python form prints 'Number of jail: 5'. [defects, defects #224668] | low | fixed-before-release | held review (review model) | — |
RSD-swag-9ceb747485Database handbook: swag-entrypoint.sh: `VALIDATION="$(lower "${VALIDATION:-http}")"`; the dns branch is taken only `if [ "$VALIDATION" = dns ]`, DNSPLUGIN alone changes nothing. [defects, defects #224669] | low | fixed-before-release | held review (review model) | — |
Verification
1 item not recorded- Reproduced before publishingyes (rebuilt digest sha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3 · published digest sha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3 · digest match yes · builder moby/buildkit:v0.31.2 · build seconds 211) [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 · docker grade B · docker percent 83 · tool docker scout policy 1.26.0 · config docker-default · org vex no · at 2026-11-09T20:24:56Z · failing Docker Scout counts 110 packages with copyleft licences (GPL, LGPL, MPL), 109 of them operating-system packages (it counts only packages whose licence it can read; the SBOM lists every component). · corrections No outdated base images) [SCOUT_EVIDENCE.json, docker_scout_policy.corrected]
- Image signatureverified on the index and the linux/amd64 manifest (key fingerprint 04daa92344a52dbc · at 2026-11-09T20:24:25Z) [docs/provenance/IMAGE_EVIDENCE.json, signed]
- Image signature transparency-log entries
- log index 3761565584 · transparency-log entry
- log index 3761565691 · transparency-log entry
- rebuild.json signatureSigstore bundle, release key (key fingerprint 04daa92344a52dbc · log index 3769775893 · transparency-log entry · integrated 2026-11-09T20:30:02Z) [ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.rebuild.json.sigstore, verificationMaterial.tlogEntries[0]]
- Signed attestations
- kind provenance · digest sha256:33a4430a4a12b61cda3be79755a8ebffe77f317b1d56493834cf2a95430c0cce · state attached · log index 3769778356 · transparency-log entry
- kind sbom · digest sha256:33a4430a4a12b61cda3be79755a8ebffe77f317b1d56493834cf2a95430c0cce · state attached · log index 3769780578 · transparency-log entry
- kind vsa · digest sha256:33a4430a4a12b61cda3be79755a8ebffe77f317b1d56493834cf2a95430c0cce · state attached · log index 3769782722 · transparency-log entry
- kind provenance · digest sha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3 · state attached · log index 3769784767 · transparency-log entry
- kind sbom · digest sha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3 · state attached · log index 3769787412 · transparency-log entry
- kind vsa · digest sha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3 · state attached · log index 3769790040 · transparency-log entry
- Pins recorddocs/PINS.md and docs/provenance/PINS.json in the archive (https://readystack.dev/products/swag/recipe) [docs/provenance/PINS.json]
Offline clean-room rebuilds
- 2026-11-09T06:53:01Z on build host 3 (Docker-in-Docker daemon with --network none): bit for bit yes, digest match yes, customer verify yes
rebuilt sha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3 [clean-room rebuild ledger, runs[689]]
- 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-09T06:40:27Z [stage_runs, stage_runs chain 860 stage publish_image]
- Archive manifests written2026-11-09T20:27:52Z [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 965 · probed 2026-11-09T18:24:25Z · source g8) [release_images, isa_level_hard]
History
2 events- 2026-11-09T20:31:18Z generated: by KitForge release/build_trail.py · generator commit 844b5eff31c4198de7a7e3f53d46cba192aeceb8
- 2026-11-09T20:32:59Z publication: promoted at 2026-11-09T20:31:54Z · promoted digest sha256:33a4430a4a12b61cda3be79755a8ebffe77f317b1d56493834cf2a95430c0cce · promotion method imagetools_create_retag_by_digest_no_rebuild · site event 437 · checklist status complete · checklist at 2026-11-09T20:32:59Z · record workspace: deliverables/provenance/PROMOTION_RECORD.json, RELEASE_CHECKLIST.json
Records
26 records| Record | Where it is | Rows |
|---|---|---|
docs/defects/defects.json | inside the archive (ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/IMAGE_EVIDENCE.json | inside the archive (ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/LOCKED_DIGEST.txt | inside the archive (ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/PINS.json | inside the archive (ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/REPRO_VERIFICATION.json | inside the archive (ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/SOURCE_TREE_HASH.json | inside the archive (ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.tar.gz) | — |
MANIFEST.json | beside the archive (prodasset /data/production/swag/5.9.0-CE-ubuntu24.04-r1/), as staged for publishing | — |
PUBLISH_MANIFEST.json | beside the archive (prodasset /data/production/swag/5.9.0-CE-ubuntu24.04-r1/), as staged for publishing | — |
ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.rebuild.json | beside the archive (prodasset /data/production/swag/5.9.0-CE-ubuntu24.04-r1/), as staged for publishing | — |
ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.rebuild.json.sigstore | beside the archive (prodasset /data/production/swag/5.9.0-CE-ubuntu24.04-r1/), as staged for publishing | — |
SCOUT_EVIDENCE.json | beside the archive (prodasset /data/production/swag/5.9.0-CE-ubuntu24.04-r1/), 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) | 489 |
chains | sadb, ReadyStack's engine database (not published) | 768, 860 |
defects | sadb, ReadyStack's engine database (not published) | swag 5.9.0-CE-ubuntu24.04-r1 |
drive_runs | sadb, ReadyStack's engine database (not published) | chain 768, chain 860 |
held_rounds | sadb, ReadyStack's engine database (not published) | chain 860 |
lesson_recalls | sadb, ReadyStack's engine database (not published) | chain 860 |
micro_step_runs | sadb, ReadyStack's engine database (not published) | chain 860 |
release_images | sadb, ReadyStack's engine database (not published) | swag 5.9.0-CE-ubuntu24.04-r1 |
stage_events | sadb, ReadyStack's engine database (not published) | chain 860 |
stage_runs | sadb, ReadyStack's engine database (not published) | chain 860 |
watch_queue | sadb, ReadyStack's engine database (not published) | 10299 |
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) | — |