Canvas LMS 2026-05-20.143-CE-ubuntu24.04-r5 build trail
How ReadyStack built readystack/canvas:2026-05-20.143-CE-ubuntu24.04-r5 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/canvas:2026-05-20.143-CE-ubuntu24.04-r5 - Index digestsha256:bfe8a3c9b5cfde79e93c2a7063e25e9008e30430950e0f52bd102d520e616dbe
- linux/amd64 digestsha256:9ddf24419cac6bf8f39569c3ad3bece509cb9150f8336c46df471904cbd614f9
- Archive
ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.tar.gz - Archive SHA-256 now6e6c7edc4db0d21c6633a3713077ef9c52d22e1c824db80766c6b2f5b23bfcfc
- Pins record
docs/PINS.md,docs/provenance/PINS.jsonin the archive (since generated) - Generated2026-11-11T20:23:22Z 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-canvas-2026-05-20.143-CE-ubuntu24.04-r5.trail.json.sigstore ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.trail.json
IdentityWhy this release existsThe path through the harnessModel work per stageReviewDefectsVerificationPublicationPackages and CPU level
Identity
Fully recorded- ProductCanvas LMS (canvas) [MANIFEST.json]
- Release tag2026-05-20.143-CE-ubuntu24.04-r5 [MANIFEST.json]
- Imagereadystack/canvas:2026-05-20.143-CE-ubuntu24.04-r5 [MANIFEST.json]
- Image index digestsha256:bfe8a3c9b5cfde79e93c2a7063e25e9008e30430950e0f52bd102d520e616dbe [docs/provenance/LOCKED_DIGEST.txt]
- linux/amd64 image digestsha256:9ddf24419cac6bf8f39569c3ad3bece509cb9150f8336c46df471904cbd614f9 [ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.rebuild.json, subject.image_manifest_digest]
- ArchiveReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.tar.gz (bytes 1010998007) [MANIFEST.json]
- Archive sha256 at publish132547c46c17fb83a4c25cc9872f9011faafd271eac3a7406e3da042107728cf [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/instructure/canvas-lms [docs/provenance/SOURCE_TREE_HASH.json]
- Upstream refrelease/2026-05-20.143 [docs/provenance/SOURCE_TREE_HASH.json]
- Upstream commit2e2b4a46d08e32667d4845f7b78e1214250345d3 [docs/provenance/SOURCE_TREE_HASH.json]
- Source tree hash222ae1df10656048500098d09530d7337d8bb8fb99e7e3676629165870c2e1af (files 22662) [docs/provenance/SOURCE_TREE_HASH.json, tree_listing_sha256 (sha256 of the sorted file listing)]
- Kit tree hashsha256:edac83fc365ab5d4d77d591f70b26587a7dc845d38535d8d1115431a2ac028fa [ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.rebuild.json, inputs.tree_hash]
- SOURCE_DATE_EPOCH1794383155 (utc 2026-11-11T07:45:55Z) [ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.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-canvas-2026-05-20.143-CE-ubuntu24.04-r5.rebuild.json, engine]
- Engine commit(s)
- commit 4c774a01707ad40318172ca6b740daa8f9500922 · dirty yes · first drive 4280
- commit 0f21a2ab03d2b97a51c73491893df1ff5fee29e1 · dirty yes · first drive 4290
Why this release exists
Fully recorded- Chain968 (created 2026-11-11T09:11:06Z · trigger customer_request · upstream version 2026-05-20.143) [chains, chains #968]
- Requestbuild request #645 (rebuild) (requested at 2026-11-11T08:06:00Z · requested by kitforge-agent · version 2026-05-20.143) [build_requests, build_requests #645]
- Reasonrevision 2026-05-20.143-CE-ubuntu24.04-r5 (rack 3.2.8, GHSA-5v64-555j-wjxm; #359) [build_requests, build_requests #645 request_reason]
- Supersedesreadystack/canvas:2026-05-20.143-CE-ubuntu24.04-r4 (chain 941) [chains, chains #941]
The path through the harness
Fully recorded1 chain · 2 drives · 18 stages · 1 rewind
Chain 968 release · ready_to_ship
Created 2026-11-11T09:11:06Z, upstream 2026-05-20.143, build request 645 [chains, chains #968]
| Drive | Started | Minutes | Build host | How it stopped |
|---|---|---|---|---|
| 4280 | 2026-11-11T09:11:45Z | 87.8 | build host 2 withhold-publish | ready_to_ship at package_archive; 19 ticks [drive_runs, drive_runs #4280] |
| 4290 | 2026-11-11T20:07:57Z | — | build host 2 publish-held | not recorded [drive_runs, drive_runs #4290] |
Stages, in order
| Stage | First start | Passed | Attempts | Gate checks passed | Artifacts (SHA-256) |
|---|---|---|---|---|---|
intake |
2026-11-11T09:11:56Z | 2026-11-11T09:11:57Z | 1 | 4
|
order_json 241da2da24ef… |
acquire |
2026-11-11T09:12:30Z | 2026-11-11T09:12:33Z | 1 | 12
|
source_tree cab5b8b605e3…license_file 57c8ff33c9c0…custody_inputs 245070a7f8a1…source_tree_hash 642cb5fb3665…source_file_manifest c2d9b38b00e9… |
plan |
2026-11-11T09:13:14Z | 2026-11-11T09:13:14Z | 1 | 10
|
recon_report 7ae96daff669…input_pin_plan 07c1109842e0…toolchain_lock 40619ef6374a… |
assemble_kit |
2026-11-11T09:46:55Z | 2026-11-11T09:46:56Z | 1 | 27
|
dockerfile 322889c6f51d…build_recipe 39ef64c9edf1…system_pinning 762ec5577126…build_offline_sh 6633aa31b6b4…generate_sbom_sh ce0f1e6f1e70…first_boot_health 7704a947b0e3…verify_offline_sh 3e8184ea230c…base_image_digests db1a64ed3312…dockerfile_offline 322889c6f51d…first_build_digest 7bd00437201b… |
remediate |
2026-11-11T09:47:30Z | 2026-11-11T09:47:31Z | 1 | 8
|
vendored_apt e3b0c44298fc…remediation_log 08e950d45d67…security_report 82db211c9235… |
build_kit |
2026-11-11T10:07:56Z | 2026-11-11T10:07:57Z | 1 | 9
|
cosign_stamp 979f233e4289…locked_digest f2b6ac1a2981…freeze_manifest ed2f6bf32395…offline_rebuild_transcript 7d34f21d74aa… |
verdict |
2026-11-11T10:11:18Z | 2026-11-11T10:11:18Z | 1 | 8
|
scout_verdict 0f28881ce476… |
publish_image |
2026-11-11T10:12:47Z | 2026-11-11T10:12:48Z | 1 | 7
|
hub_readme 437ba68a3842…promotion_record 66d69f56b3fd… |
boot_instance |
2026-11-11T10:14:42Z | 2026-11-11T10:14:45Z | 2 | 3
|
instance_handle 2501e90c800e… |
sbom |
2026-11-11T10:15:30Z | 2026-11-11T10:15:31Z | 1 | 5
|
sbom_md 2e4cb0fc4eab…sbom_json 034f15a8fb1b… |
schema_discovery |
2026-11-11T10:15:34Z | 2026-11-11T10:15:34Z | 1 | 7
|
schema_hash 381015f79a1b…dependency_tree 61fe400e72b6…table_classification 59cee695e5a5… |
admin_handbook |
2026-11-11T10:15:40Z | 2026-11-11T10:15:41Z | 1 | 7
|
api_map 80bc742414c1…admin_handbook 76afeaeca624… |
db_handbook |
2026-11-11T10:15:50Z | 2026-11-11T10:15:51Z | 1 | 8
|
db_handbook aeba291ee97b…seed_isolation c29b1a346a6a… |
seed_data |
2026-11-11T10:16:01Z | 2026-11-11T10:16:02Z | 1 | 6
|
seed_data_sql a0f6af47712c…seed_cases_json 57058a358115… |
seed_validate |
2026-11-11T10:16:04Z | 2026-11-11T10:16:05Z | 1 | 3
|
seed_data_contract f9b265d3dddd… |
usecase_validate |
2026-11-11T10:16:26Z | 2026-11-11T10:16:27Z | 1 | 10
|
failed_tests 11b6da8d0068…passed_tests 80d9c9aafc06…test_results c62be6adea8e…usecase_contract 700748a7629f… |
finalize_docs |
2026-11-11T10:16:33Z | 2026-11-11T10:16:34Z | 1 | 9
|
defects_json 7eb80a6f37a9…release_notes 181598b056a0…api_integration_guide d26ce57b42be… |
package_archive invalidated 2026-11-11T20:06:41Z |
2026-11-11T10:39:32Z | 2026-11-11T10:39:36Z | 1 | 35 (final gate PASS)
|
sale_tar 490fa821b6da…checksums c25410c3ff91…verify_md 5d2fc8b18087…rebuild_md 7e5b225adc2d…manifest_txt d6723b854543…actions_jsonl 61ac484e102d…provenance_md fea21d3f3c0b…assetchain_log_md e9eccaec0c0f…assetchain_log_json e43acadf2fb1… |
[stage_runs]
Rewinds
- 2026-11-11T20:06:41Z:
package_archivetopackage_archiveon docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #31770]
Model work per stage
Fully recordedRole: writer model. Calls up to 2026-11-11T10:39:36Z.
5 calls over 3 stages
| Stage | Calls | Refused | Errors | Max attempt | Forced commits | Real tokens | Lesson rules shown |
|---|---|---|---|---|---|---|---|
plan | 2 | 0 | 0 | 1 | 0 | 11429 | L-A183, L-A15 |
remediate | 2 | 0 | 0 | 1 | 0 | 11702 | L-A183, L-A15 |
usecase_validate | 1 | 0 | 0 | 1 | 0 | 1798 | L-A59 |
[micro_step_runs] [lesson_recalls]
Review
Fully recordedRole: review model.
1 round, 1 counted, $0.29 recorded cost
| Round | Started | Critical | Major | Minor | Verdict | Cost | Cap in force | Archive reviewed |
|---|---|---|---|---|---|---|---|---|
| 1 | 2026-11-11T10:41:16Z | 0 | 0 | 0 | clean to publish [held_rounds, held_rounds #1750] | $0.29 | 3 rounds, $40.00 | 490fa821b6da… |
Defects
Fully recorded- Ledger entries1 [defects, defects where product_slug=canvas and this tag or chain]
- Disclosed in the archive1 [docs/defects/defects.json, entries]
1 ledger entry: by severity low 1; by status open 1.
| Defect | Severity | Status | Found by | Fixed in |
|---|---|---|---|---|
RSD-canvas-4fcf3eb027Docker Hub README: The Docker Hub README names only the Gemfile.d/app.rb line although the diff also changes Gemfile.lock and the build removes spec/, .github/ and the workspace package.json files. [defects, defects #251247] | low | open | held review (review model) | — |
Verification
1 item not recorded- Reproduced before publishingyes (rebuilt digest sha256:9ddf24419cac6bf8f39569c3ad3bece509cb9150f8336c46df471904cbd614f9 · published digest sha256:9ddf24419cac6bf8f39569c3ad3bece509cb9150f8336c46df471904cbd614f9 · digest match yes · builder moby/buildkit:v0.31.2 · build seconds 541) [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-11T20:09:09Z · failing Docker Scout counts 119 packages with copyleft licences (AGPL, GPL, LGPL, MPL), 111 of them operating-system packages (it counts only packages whose licence it can read; the SBOM lists every component). AGPL: academic_benchmarks. · 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-11T20:08:09Z) [docs/provenance/IMAGE_EVIDENCE.json, signed]
- Image signature transparency-log entries
- log index 3807703882 · transparency-log entry
- log index 3807705414 · transparency-log entry
- rebuild.json signatureSigstore bundle, release key (key fingerprint 04daa92344a52dbc · log index 3817320681 · transparency-log entry · integrated 2026-11-11T20:21:18Z) [ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.rebuild.json.sigstore, verificationMaterial.tlogEntries[0]]
- Signed attestations
- kind provenance · digest sha256:bfe8a3c9b5cfde79e93c2a7063e25e9008e30430950e0f52bd102d520e616dbe · state attached · log index 3817325297 · transparency-log entry
- kind sbom · digest sha256:bfe8a3c9b5cfde79e93c2a7063e25e9008e30430950e0f52bd102d520e616dbe · state attached · log index 3817326710 · transparency-log entry
- kind vsa · digest sha256:bfe8a3c9b5cfde79e93c2a7063e25e9008e30430950e0f52bd102d520e616dbe · state attached · log index 3817328917 · transparency-log entry
- kind provenance · digest sha256:9ddf24419cac6bf8f39569c3ad3bece509cb9150f8336c46df471904cbd614f9 · state attached · log index 3817330724 · transparency-log entry
- kind sbom · digest sha256:9ddf24419cac6bf8f39569c3ad3bece509cb9150f8336c46df471904cbd614f9 · state attached · log index 3817333895 · transparency-log entry
- kind vsa · digest sha256:9ddf24419cac6bf8f39569c3ad3bece509cb9150f8336c46df471904cbd614f9 · state attached · log index 3817336680 · transparency-log entry
- Pins recorddocs/PINS.md and docs/provenance/PINS.json in the archive (https://readystack.dev/products/canvas/recipe) [docs/provenance/PINS.json]
Offline clean-room rebuilds
- 2026-11-11T10:41:24Z on build host 2 (Docker-in-Docker daemon with --network none): bit for bit yes, digest match yes, customer verify yes
rebuilt sha256:9ddf24419cac6bf8f39569c3ad3bece509cb9150f8336c46df471904cbd614f9 [clean-room rebuild ledger, runs[752]]
- 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-11T10:12:48Z [stage_runs, stage_runs chain 968 stage publish_image]
- Archive manifests written2026-11-11T20:15:31Z [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 1044 · probed 2026-11-11T09:58:41Z · source build_kit) [release_images, isa_level_hard]
History
3 events- 2026-11-11T20:23:22Z generated: by KitForge release/build_trail.py · generator commit ae5faa81ddbdd1abdce71edc331bd9fc28e20d96
- 2026-11-11T20:26:01Z publication: promoted at 2026-11-11T20:24:04Z · promoted digest sha256:bfe8a3c9b5cfde79e93c2a7063e25e9008e30430950e0f52bd102d520e616dbe · promotion method imagetools_create_retag_by_digest_no_rebuild · site event 474 · checklist status complete · checklist at 2026-11-11T20:26:01Z · record workspace: deliverables/provenance/PROMOTION_RECORD.json, RELEASE_CHECKLIST.json
- 2026-11-11T23:10:24Z repack: previous sha256 132547c46c17fb83a4c25cc9872f9011faafd271eac3a7406e3da042107728cf · sha256 6e6c7edc4db0d21c6633a3713077ef9c52d22e1c824db80766c6b2f5b23bfcfc · reason customer kit files brought up to the current engine: BUILD_OFFLINE.sh (kit root, docs/offline, docs/docker); README.md and FILE_MODES.tsv at the archive root (release/kit_unpack.py), BUILD_OFFLINE.sh putting back the packed file modes, REBUILD.md unpacking with -p and keeping the key and signature outside the kit, and the verifier naming what differs; not image inputs; image and every build input unchanged · label kitfix · replaced BUILD_OFFLINE.sh, docs/REBUILD.md, docs/docker/BUILD_OFFLINE.sh, docs/offline/BUILD_OFFLINE.sh, docs/rebuild-bundle/rebuild_bundle.py · added FILE_MODES.tsv, README.md · record MANIFEST.json repack_history
Records
25 records| Record | Where it is | Rows |
|---|---|---|
docs/defects/defects.json | inside the archive (ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.tar.gz) | — |
docs/provenance/IMAGE_EVIDENCE.json | inside the archive (ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.tar.gz) | — |
docs/provenance/LOCKED_DIGEST.txt | inside the archive (ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.tar.gz) | — |
docs/provenance/PINS.json | inside the archive (ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.tar.gz) | — |
docs/provenance/REPRO_VERIFICATION.json | inside the archive (ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.tar.gz) | — |
docs/provenance/SOURCE_TREE_HASH.json | inside the archive (ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.tar.gz) | — |
MANIFEST.json | beside the archive (prodasset /data/production/canvas/2026-05-20.143-CE-ubuntu24.04-r5/), as staged for publishing | — |
PUBLISH_MANIFEST.json | beside the archive (prodasset /data/production/canvas/2026-05-20.143-CE-ubuntu24.04-r5/), as staged for publishing | — |
ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.rebuild.json | beside the archive (prodasset /data/production/canvas/2026-05-20.143-CE-ubuntu24.04-r5/), as staged for publishing | — |
ReadyStack-canvas-2026-05-20.143-CE-ubuntu24.04-r5.rebuild.json.sigstore | beside the archive (prodasset /data/production/canvas/2026-05-20.143-CE-ubuntu24.04-r5/), as staged for publishing | — |
SCOUT_EVIDENCE.json | beside the archive (prodasset /data/production/canvas/2026-05-20.143-CE-ubuntu24.04-r5/), 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) | 645 |
chains | sadb, ReadyStack's engine database (not published) | 968 |
defects | sadb, ReadyStack's engine database (not published) | canvas 2026-05-20.143-CE-ubuntu24.04-r5 |
drive_runs | sadb, ReadyStack's engine database (not published) | chain 968 |
held_rounds | sadb, ReadyStack's engine database (not published) | chain 968 |
lesson_recalls | sadb, ReadyStack's engine database (not published) | chain 968 |
micro_step_runs | sadb, ReadyStack's engine database (not published) | chain 968 |
release_images | sadb, ReadyStack's engine database (not published) | canvas 2026-05-20.143-CE-ubuntu24.04-r5 |
stage_events | sadb, ReadyStack's engine database (not published) | chain 968 |
stage_runs | sadb, ReadyStack's engine database (not published) | chain 968 |
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) | — |