Python 3.15.2-CE-ubuntu24.04-r1 build trail
How ReadyStack built readystack/python:3.15.2-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/python:3.15.2-CE-ubuntu24.04-r1 - Index digestsha256:5f1cdb25bf4ba47d569eb78ba26f30c4b02683f7e32e76ffd39c49d5b6d612f7
- linux/amd64 digestsha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274
- Archive
ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.tar.gz - Archive SHA-256 nowcaa9ea252c9a98bce824b920ce40d8a15f489802f2d7e083dd648742edc06179
- Pins record
docs/PINS.md,docs/provenance/PINS.jsonin the archive (since generated) - Generated2026-11-08T17:36:58Z by KitForge release/build_trail.py
- Sections9 sections, 7 fully recorded; 4 items 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-python-3.15.2-CE-ubuntu24.04-r1.trail.json.sigstore ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.trail.json
IdentityWhy this release existsThe path through the harnessModel work per stageReviewDefectsVerificationPublicationPackages and CPU level
Identity
Fully recorded- ProductPython (python) [MANIFEST.json]
- Release tag3.15.2-CE-ubuntu24.04-r1 [MANIFEST.json]
- Imagereadystack/python:3.15.2-CE-ubuntu24.04-r1 [MANIFEST.json]
- Image index digestsha256:5f1cdb25bf4ba47d569eb78ba26f30c4b02683f7e32e76ffd39c49d5b6d612f7 [docs/provenance/LOCKED_DIGEST.txt]
- linux/amd64 image digestsha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274 [ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.rebuild.json, subject.image_manifest_digest]
- ArchiveReadyStack-python-3.15.2-CE-ubuntu24.04-r1.tar.gz (bytes 334403916) [MANIFEST.json]
- Archive sha256 at publishcaa9ea252c9a98bce824b920ce40d8a15f489802f2d7e083dd648742edc06179 [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/python/cpython [docs/provenance/SOURCE_TREE_HASH.json]
- Upstream refv3.15.2 [docs/provenance/SOURCE_TREE_HASH.json]
- Upstream commit5e58eaad7c58df58dfa8ea549c87996e01dd1077 [docs/provenance/SOURCE_TREE_HASH.json]
- Source tree hashc39e6ce79eef9148fe893ee08e13bf6cd2350f8549c20587afeed3c639740352 (files 5636) [docs/provenance/SOURCE_TREE_HASH.json, tree_listing_sha256 (sha256 of the sorted file listing)]
- Kit tree hashsha256:00e53b9ea2a3293b0e37b0b51d0beb2d7e914359e511ba39d8bf2db3e695045d [ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.rebuild.json, inputs.tree_hash]
- SOURCE_DATE_EPOCH1792947471 (utc 2026-10-25T16:57:51Z) [ReadyStack-python-3.15.2-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-python-3.15.2-CE-ubuntu24.04-r1.rebuild.json, engine]
- Engine commit(s)
- commit ff3112bd2cb03ee39fd394ed644a9522854803de · dirty yes · first drive 3487
- commit c687e89f3f357d327a061c463cc19dd28a42c4a8 · dirty yes · first drive 3538
- commit d32260ba806be765768a8470884cf7e6776a8d6c · dirty yes · first drive 3694
- commit 2d74add6086c4e9520480af5e066eed64cf6eacd · dirty yes · first drive 3718
- commit 14ac19f4178268c2dbfa7e7cae4be76d466ea445 · dirty yes · first drive 3794
- commit fb3d89dbdf1a4d4d5e6b01f0cfad0b5ef4a697f2 · dirty yes · first drive 3829
- commit c20aa19bc0ab8c9fef7ff40e1f6a18c4169b166e · dirty yes · first drive 3841
- commit 3179e9e9e7ff3f9414b596de6e552d260c583056 · dirty yes · first drive 3844
Why this release exists
Fully recorded- Chain757 (created 2026-10-28T06:07:38Z · trigger customer_request · upstream version 3.15.2) [chains, chains #757]
- Requestbuild request #444 (new_product) (requested at 2026-10-28T02:46:22Z · requested by agent · version 3.15.2) [build_requests, build_requests #444]
- Reasonce.rodeo trending #10 (tier 3: a free A image exists; the most-pulled runtime), owner 2026-10-27 'all apps queued ... this includes runtime' (docs/CATALOGUE_EXPANSION.md); second product of the runtime kind [build_requests, build_requests #444 request_reason]
The path through the harness
Fully recorded1 chain · 9 drives · 18 stages · 3 rewinds
Chain 757 release · ready_to_ship
Created 2026-10-28T06:07:38Z, upstream 3.15.2, build request 444 [chains, chains #757]
| Drive | Started | Minutes | Build host | How it stopped |
|---|---|---|---|---|
| 256 | 2026-10-28T06:07:51Z | 11.4 | build host 1 withhold-publish | stage_failed at verdict [drive_runs, drive_runs #256] rebuilt from a build line's log |
| 3487 | 2026-11-03T08:11:36Z | 1.6 | build host 1 withhold-publish | stage_failed at verdict; first failed check scout_verdict:release_check_passed; 1 tick [drive_runs, drive_runs #3487] |
| 3538 | 2026-11-07T01:53:44Z | 24.5 | build host 1 withhold-publish | ready_to_ship at package_archive; 16 ticks [drive_runs, drive_runs #3538] |
| 3694 | 2026-11-08T04:45:58Z | 3.8 | build host 1 withhold-publish | stage_failed at package_archive; first failed check g8; 7 ticks [drive_runs, drive_runs #3694] |
| 3718 | 2026-11-08T06:18:12Z | 2.1 | build host 1 withhold-publish | stage_failed at package_archive; first failed check g8; 1 tick [drive_runs, drive_runs #3718] |
| 3794 | 2026-11-08T12:22:08Z | 2.3 | build host 1 withhold-publish | stage_failed at package_archive; first failed check g8; 1 tick [drive_runs, drive_runs #3794] |
| 3829 | 2026-11-08T15:41:00Z | 1.9 | build host 1 withhold-publish | stage_failed at package_archive; first failed check g8; 1 tick [drive_runs, drive_runs #3829] |
| 3841 | 2026-11-08T17:12:28Z | 4.9 | build host 1 withhold-publish | ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #3841] |
| 3844 | 2026-11-08T17:31:29Z | — | build host 1 publish-held | not recorded [drive_runs, drive_runs #3844] |
Stages, in order
| Stage | First start | Passed | Attempts | Gate checks passed | Artifacts (SHA-256) |
|---|---|---|---|---|---|
intake |
2026-10-28T06:07:57Z | 2026-10-28T06:07:57Z | 1 | 4
|
— |
acquire |
2026-10-28T06:08:10Z | 2026-10-28T06:08:10Z | 1 | 12
|
— |
plan |
2026-10-28T06:08:27Z | 2026-10-28T06:08:28Z | 1 | 10
|
— |
assemble_kit |
2026-10-28T06:12:00Z | 2026-11-07T02:01:03Z | 2 | 27
|
dockerfile dafc4630ae3b…build_recipe ee1203024ac0…system_pinning 01ba4719c80b…build_offline_sh 6633aa31b6b4…generate_sbom_sh ce0f1e6f1e70…first_boot_health cf3f17a67913…verify_offline_sh 3e8184ea230c…base_image_digests 167b03637e3f…dockerfile_offline dafc4630ae3b…first_build_digest 37a5938a5b18… |
remediate |
2026-10-28T06:12:23Z | 2026-11-07T02:01:07Z | 2 | 8
|
vendored_apt e3b0c44298fc…remediation_log b59e84468e67…security_report af5077a11211… |
build_kit |
2026-10-28T06:18:16Z | 2026-11-07T02:07:18Z | 2 | 9
|
cosign_stamp 3dce0aad5ed6…locked_digest af3a14be8902…freeze_manifest 09ae2a2bd832…offline_rebuild_transcript f59cae547810… |
verdict |
2026-10-28T06:19:15Z | 2026-11-07T02:08:06Z | 3 | 8
|
scout_verdict e8490368d098… |
publish_image |
2026-11-07T02:08:42Z | 2026-11-07T02:08:42Z | 1 | 7
|
hub_readme d7bd475fddb1…promotion_record 448a1112def8… |
boot_instance |
2026-11-07T02:08:47Z | 2026-11-08T04:46:15Z | 3 | — | instance_handle 3a29570f3361… |
sbom |
2026-11-07T02:09:14Z | 2026-11-07T02:09:15Z | 1 | 5
|
sbom_md f2f22a7022d5…sbom_json 22d8d54e6929… |
schema_discovery |
2026-11-07T02:09:18Z | 2026-11-07T02:09:19Z | 1 | 7
|
schema_hash b616172f431c…dependency_tree 0537819112e0…table_classification 3517749b1d4a… |
admin_handbook |
2026-11-07T02:09:36Z | 2026-11-08T04:46:28Z | 2 | 7
|
api_map bb4583efb3eb…admin_handbook 36525388cdb3… |
db_handbook |
2026-11-07T02:09:43Z | 2026-11-08T04:46:33Z | 2 | 8
|
db_handbook be29622a3f28…seed_isolation c37278da86ee… |
seed_data |
2026-11-07T02:10:12Z | 2026-11-08T04:46:53Z | 2 | 6
|
seed_data_sql 56fc29851acb…seed_cases_json 64dff5091097… |
seed_validate |
2026-11-07T02:10:17Z | 2026-11-08T04:46:56Z | 2 | 3
|
seed_data_contract c4e60c70e2b6… |
usecase_validate |
2026-11-07T02:10:57Z | 2026-11-08T04:47:27Z | 2 | 10
|
failed_tests b2247b16f5f7…passed_tests 40a01c398ed3…test_results 6767116d8974…usecase_contract 35e2ff1d5aef… |
finalize_docs |
2026-11-07T02:11:07Z | 2026-11-08T04:47:35Z | 2 | 9
|
defects_json 900a4d84c330…release_notes 97a0e60ed620…api_integration_guide 015dca75a3fd… |
package_archive invalidated 2026-11-08T17:31:03Z |
2026-11-07T02:18:09Z | 2026-11-08T17:17:21Z | 6 | 34 (final gate PASS)
|
sale_tar 171636b2d119…checksums e9d4d27c088f…verify_md f3ab30b2c3da…rebuild_md cbcec69ebc82…manifest_txt bad81f9bbf2a…actions_jsonl d5bef019dee2…provenance_md bfdd55b7d3ae…assetchain_log_md e9eccaec0c0f…assetchain_log_json 004915e4469d… |
[stage_runs]
Rewinds
- 2026-11-07T01:53:50Z:
verdicttoassemble_kiton strategy_changed (strategy changed (f2e786786042 -> 43c9a653369f)) [stage_events, stage_events #23102] - 2026-11-08T03:17:21Z:
package_archivetoadmin_handbookon docs_redo (scripts/redo-docs.py --stage admin_handbook) [stage_events, stage_events #24998] - 2026-11-08T17:31:03Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #26890]
Model work per stage
3 items not recordedRole: writer model. Calls up to 2026-11-08T17:17:21Z.
4 calls over 2 stages
| Stage | Calls | Refused | Errors | Max attempt | Forced commits | Real tokens | Lesson rules shown |
|---|---|---|---|---|---|---|---|
plan | 2 | 0 | 0 | 1 | not recorded | not recorded | — |
remediate | 2 | 0 | 0 | 1 | not recorded | not recorded | — |
[micro_step_runs]
- Not recorded: forced commits (micro_step_runs records them for calls from 2026-11-02)
- Not recorded: real token counts (recorded per call from 2026-11-02; earlier rows hold only an estimate, which is not shown)
- Not recorded: the lesson rules shown to the writer model (lesson_recalls holds no rows for this chain: its recorder was silent from 2026-06-06 to 2026-11-02)
Review
Fully recordedRole: review model.
2 rounds, 2 counted, $1.07 recorded cost
| Round | Started | Critical | Major | Minor | Verdict | Cost | Cap in force | Archive reviewed |
|---|---|---|---|---|---|---|---|---|
| 1 | 2026-11-07T02:18:47Z | 0 | 3 | 3 | blocked to blocked [held_rounds, held_rounds #1416] | $0.68 | 3 rounds, $40.00 | 21e72aae1be8… |
| 2 | 2026-11-08T17:17:48Z | 0 | 0 | 0 | clean to publish [held_rounds, held_rounds #1526] | $0.40 | 3 rounds, $40.00 | 171636b2d119… |
Defects
Fully recorded- Ledger entries6 [defects, defects where product_slug=python and this tag or chain]
- Disclosed in the archive6 [docs/defects/defects.json, entries]
6 ledger entries: by severity high 3, low 3; by status fixed-before-release 6.
| Defect | Severity | Status | Found by | Fixed in |
|---|---|---|---|---|
RSD-python-e68b7b87d7Admin handbook: The comparison table gives this image's working directory as `/`; it is /home/python (the handbook says so itself at line 112). [defects, defects #157962] | high | fixed-before-release | held review (review model) | — |
RSD-python-d58fdec27dAdmin handbook: ensurepip's bundled pip is 26.2.2, not 26.3. [defects, defects #157963] | high | fixed-before-release | held review (review model) | — |
RSD-python-4bc3fcb3dfDatabase handbook: The example `-v app-data:/data` fails for a program running as python: the new volume is root-owned; the sentence names the requirement but not how to meet it. [defects, defects #157964] | high | fixed-before-release | held review (review model) | — |
RSD-python-d4e7919c3cAdmin handbook: CPython's manual page is installed. [defects, defects #157965] | low | fixed-before-release | held review (review model) | — |
RSD-python-6c600db3e3Admin handbook: The Environment section is an empty table (header only) although the image sets three variables. [defects, defects #157966] | low | fixed-before-release | held review (review model) | — |
RSD-python-e308e2c4b2Admin handbook: The `python3 -m site` output cell (line 144) is cut off mid-word ("/usr/local/lib/python3.15/si"), though the transcript holds the full output. [defects, defects #157967] | low | fixed-before-release | held review (review model) | — |
Verification
1 item not recorded- Reproduced before publishingyes (rebuilt digest sha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274 · published digest sha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274 · digest match yes · builder moby/buildkit:v0.31.2 · build seconds 163) [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, 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-08T17:31:52Z · failing Docker Scout counts 87 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). · 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-08T17:31:40Z) [docs/provenance/IMAGE_EVIDENCE.json, signed]
- Image signature transparency-log entries
- log index 3727701319 · transparency-log entry
- log index 3727702138 · transparency-log entry
- rebuild.json signatureSigstore bundle, release key (key fingerprint 04daa92344a52dbc · log index 3758377839 · transparency-log entry · integrated 2026-11-08T17:35:51Z) [ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.rebuild.json.sigstore, verificationMaterial.tlogEntries[0]]
- Signed attestations
- kind provenance · digest sha256:5f1cdb25bf4ba47d569eb78ba26f30c4b02683f7e32e76ffd39c49d5b6d612f7 · state attached · log index 3758378182 · transparency-log entry
- kind sbom · digest sha256:5f1cdb25bf4ba47d569eb78ba26f30c4b02683f7e32e76ffd39c49d5b6d612f7 · state attached · log index 3758378724 · transparency-log entry
- kind vsa · digest sha256:5f1cdb25bf4ba47d569eb78ba26f30c4b02683f7e32e76ffd39c49d5b6d612f7 · state attached · log index 3758379318 · transparency-log entry
- kind provenance · digest sha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274 · state attached · log index 3758379525 · transparency-log entry
- kind sbom · digest sha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274 · state attached · log index 3758379603 · transparency-log entry
- kind vsa · digest sha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274 · state attached · log index 3758379684 · transparency-log entry
- Pins recorddocs/PINS.md and docs/provenance/PINS.json in the archive (https://readystack.dev/products/python/recipe) [docs/provenance/PINS.json]
Offline clean-room rebuilds
- 2026-11-07T02:18:51Z on build host 1 (Docker-in-Docker daemon with --network none): bit for bit yes, digest match yes, customer verify yes
rebuilt sha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274 [clean-room rebuild ledger, runs[593]]
- 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-07T02:08:42Z [stage_runs, stage_runs chain 757 stage publish_image]
- Archive manifests written2026-11-08T17:34:30Z [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 791 · probed 2026-11-07T02:04:20Z · source build_kit) [release_images, isa_level_hard]
History
2 events- 2026-11-08T17:36:58Z generated: by KitForge release/build_trail.py · generator commit 3179e9e9e7ff3f9414b596de6e552d260c583056
- 2026-11-08T17:38:14Z publication: promoted at 2026-11-08T17:37:29Z · promoted digest sha256:5f1cdb25bf4ba47d569eb78ba26f30c4b02683f7e32e76ffd39c49d5b6d612f7 · promotion method imagetools_create_retag_by_digest_no_rebuild · site event 380 · checklist status complete · checklist at 2026-11-08T17:38:14Z · record workspace: deliverables/provenance/PROMOTION_RECORD.json, RELEASE_CHECKLIST.json
Records
24 records| Record | Where it is | Rows |
|---|---|---|
docs/defects/defects.json | inside the archive (ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/IMAGE_EVIDENCE.json | inside the archive (ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/LOCKED_DIGEST.txt | inside the archive (ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/PINS.json | inside the archive (ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/REPRO_VERIFICATION.json | inside the archive (ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.tar.gz) | — |
docs/provenance/SOURCE_TREE_HASH.json | inside the archive (ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.tar.gz) | — |
MANIFEST.json | beside the archive (prodasset /data/production/python/3.15.2-CE-ubuntu24.04-r1/), as staged for publishing | — |
PUBLISH_MANIFEST.json | beside the archive (prodasset /data/production/python/3.15.2-CE-ubuntu24.04-r1/), as staged for publishing | — |
ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.rebuild.json | beside the archive (prodasset /data/production/python/3.15.2-CE-ubuntu24.04-r1/), as staged for publishing | — |
ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.rebuild.json.sigstore | beside the archive (prodasset /data/production/python/3.15.2-CE-ubuntu24.04-r1/), as staged for publishing | — |
SCOUT_EVIDENCE.json | beside the archive (prodasset /data/production/python/3.15.2-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) | 444 |
chains | sadb, ReadyStack's engine database (not published) | 757 |
defects | sadb, ReadyStack's engine database (not published) | python 3.15.2-CE-ubuntu24.04-r1 |
drive_runs | sadb, ReadyStack's engine database (not published) | chain 757 |
held_rounds | sadb, ReadyStack's engine database (not published) | chain 757 |
micro_step_runs | sadb, ReadyStack's engine database (not published) | chain 757 |
release_images | sadb, ReadyStack's engine database (not published) | python 3.15.2-CE-ubuntu24.04-r1 |
stage_events | sadb, ReadyStack's engine database (not published) | chain 757 |
stage_runs | sadb, ReadyStack's engine database (not published) | chain 757 |
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) | — |