Discourse v2026.10.0-CE-ubuntu24.04-r1 build trail

How ReadyStack built readystack/discourse:v2026.10.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
  • Imagereadystack/discourse:v2026.10.0-CE-ubuntu24.04-r1
  • Index digestsha256:3ed7ed17832fbdeb3dc6b87b6ffcb47b80329450d7133eb37d9328c4a70a3f47
  • linux/amd64 digestsha256:7a34430f785872496b1c5cb24776ef8a3fab0525de7143c388a21990935fac2d
  • ArchiveReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.tar.gz
  • Archive SHA-256 now2b520f1b3c7ceadd65250a10b48be3f58a361d9c3c1ab97fa7f03338ab98a268
  • Pins recorddocs/PINS.md, docs/provenance/PINS.json in the archive (since generated)
  • Generated2026-11-09T17:31:55Z 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-discourse-v2026.10.0-CE-ubuntu24.04-r1.trail.json.sigstore ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.trail.json

IdentityWhy this release existsThe path through the harnessModel work per stageReviewDefectsVerificationPublicationPackages and CPU level

Identity

Fully recorded
  • ProductDiscourse (discourse) [MANIFEST.json]
  • Release tagv2026.10.0-CE-ubuntu24.04-r1 [MANIFEST.json]
  • Imagereadystack/discourse:v2026.10.0-CE-ubuntu24.04-r1 [MANIFEST.json]
  • Image index digestsha256:3ed7ed17832fbdeb3dc6b87b6ffcb47b80329450d7133eb37d9328c4a70a3f47 [docs/provenance/LOCKED_DIGEST.txt]
  • linux/amd64 image digestsha256:7a34430f785872496b1c5cb24776ef8a3fab0525de7143c388a21990935fac2d [ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.rebuild.json, subject.image_manifest_digest]
  • ArchiveReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.tar.gz (bytes 814120898) [MANIFEST.json]
  • Archive sha256 at publish2b520f1b3c7ceadd65250a10b48be3f58a361d9c3c1ab97fa7f03338ab98a268 [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/discourse/discourse [docs/provenance/SOURCE_TREE_HASH.json]
  • Upstream refv2026.10.0 [docs/provenance/SOURCE_TREE_HASH.json]
  • Upstream commit05445c3bf999c5502ccbe1e13539a15e88d9c9a9 [docs/provenance/SOURCE_TREE_HASH.json]
  • Source tree hash4e2da653e487bc468597492afa6122a4e0e40d7341c2fae2a95c219d64ec4ab5 (files 27245) [docs/provenance/SOURCE_TREE_HASH.json, tree_listing_sha256 (sha256 of the sorted file listing)]
  • Kit tree hashsha256:09126c46e9d09454e7c81ede5632ab026fc1867933345dfbbd4881653276b761 [ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.rebuild.json, inputs.tree_hash]
  • SOURCE_DATE_EPOCH1793107151 (utc 2026-10-27T13:19:11Z) [ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.rebuild.json, inputs.source_date_epoch]
  • Base images
    • ref ubuntu:24.04@sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852 · platform digest sha256:78d4744ead1f5b19b04d0df558ab182a5300903900755e515b2ca4d10eb2044d
    [ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.rebuild.json, bases]
  • BuildKitmoby/buildkit:v0.31.2 (image digest sha256:e0e67ea9c4bb07bdef683e29f70f3b623d1eb9c82274a9ec04e6bb0511449fb0) [ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.rebuild.json, engine]
  • Engine commit(s)
    • commit 922849de97bd401ff8a7dc2992e850e3f4ceafcb · dirty yes · first drive 3867
    • commit b29f462ba272213173a4375440fb6180b85d1510 · dirty yes · first drive 3915
    • commit 434a55e850a489c150f712aaeb0c27ba0de1ef61 · dirty yes · first drive 3925
    • commit 07a570ed33498a9ef37c19dafd05812f040ee87f · dirty yes · first drive 4012
    • commit 2e925c4ba6397efc51c0a48c281a06ea1514ae75 · dirty yes · first drive 4023
    • commit ad5c12c5506f316c76f0e1747a166906e1a38407 · dirty yes · first drive 4036
    • commit 16501077e41ede63bd7f496f3616822a9889eef5 · dirty yes · first drive 4040
    • commit 762b14205276731d25047ecbc7e53d9425b5b471 · dirty yes · first drive 4068
    • commit 49b8a9812548c03a5a25fdd4d6b6009aa6d12aab · dirty yes · first drive 4079
    [drive_runs, engine_sha]

Why this release exists

Fully recorded
  • Chain897 (created 2026-11-08T18:57:54Z · trigger customer_request · upstream version v2026.10.0) [chains, chains #897]
  • Requestbuild request #593 (rebuild) (requested at 2026-11-08T15:09:04Z · requested by kitforge-agent · version v2026.10.0) [build_requests, build_requests #593]
  • Reasonretarget to v2026.10.0: a newer upstream release (rule 1) [build_requests, build_requests #593 request_reason]
  • Supersedesreadystack/discourse:v2026.9.1-CE-ubuntu24.04-r1 (chain 712) [chains, chains #712]

The path through the harness

Fully recorded

1 chain · 9 drives · 18 stages · 6 rewinds

Chain 897 release · ready_to_ship

Created 2026-11-08T18:57:54Z, upstream v2026.10.0, build request 593 [chains, chains #897]

DriveStartedMinutesBuild hostHow it stopped
38672026-11-08T18:58:30Z13.1build host 1 withhold-publish stage_failed at assemble_kit; first failed check exists:first_build_digest; 4 ticks [drive_runs, drive_runs #3867]
39152026-11-09T01:17:32Z50build host 1 withhold-publish stage_failed at assemble_kit; first failed check first_boot_health:file_contains:healthy=True; 1 tick [drive_runs, drive_runs #3915]
39252026-11-09T02:16:26Z110.8build host 1 withhold-publish ready_to_ship at package_archive; 16 ticks [drive_runs, drive_runs #3925]
40122026-11-09T12:08:33Z11.4build host 1 withhold-publish ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #4012]
40232026-11-09T13:28:48Z10.6build host 1 withhold-publish ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #4023]
40362026-11-09T14:20:42Z0.4build host 1 withhold-publish stage_failed at package_archive; first failed check g8; 1 tick [drive_runs, drive_runs #4036]
40402026-11-09T14:34:35Z10.5build host 1 withhold-publish ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #4040]
40682026-11-09T16:08:06Z10.5build host 1 withhold-publish ready_to_ship at package_archive; 2 ticks [drive_runs, drive_runs #4068]
40792026-11-09T17:19:45Z—build host 1 publish-held not recorded [drive_runs, drive_runs #4079]

Stages, in order

StageFirst startPassedAttemptsGate checks passedArtifacts (SHA-256)
intake 2026-11-08T18:58:43Z2026-11-08T18:58:44Z1
4
  • exists:order_json
  • order_json:json_parses
  • order_json:no_forbidden_placeholders
  • produces_paths_exist
order_json b904efef5d38…
acquire 2026-11-08T18:58:57Z2026-11-08T18:59:00Z1
12
  • exists:source_tree
  • exists:source_tree_hash
  • exists:source_file_manifest
  • exists:custody_inputs
  • exists:license_file
  • source_tree:dir_nonempty
  • source_tree_hash:json_parses
  • source_file_manifest:json_parses
  • custody_inputs:json_parses
  • license_file:file_nonempty
  • produces_paths_exist
  • custody_inputs:json_true:ce_audit.ce_only
source_tree 695747dee07b…
license_file 8177f9751321…
custody_inputs cc3605d04a74…
source_tree_hash 962d249412a0…
source_file_manifest 1a6fd99e1873…
plan 2026-11-08T19:00:02Z2026-11-08T19:00:02Z1
10
  • exists:recon_report
  • exists:input_pin_plan
  • exists:toolchain_lock
  • recon_report:md_min_sections:3
  • recon_report:no_forbidden_placeholders
  • input_pin_plan:md_min_sections:2
  • input_pin_plan:no_forbidden_placeholders
  • toolchain_lock:file_nonempty
  • toolchain_lock:no_forbidden_placeholders
  • produces_paths_exist
recon_report 7bead8200933…
input_pin_plan a888fd0983b0…
toolchain_lock 196fe25745a1…
assemble_kit 2026-11-08T19:11:36Z2026-11-09T02:46:49Z3
27
  • exists:dockerfile
  • exists:base_image_digests
  • exists:system_pinning
  • exists:build_recipe
  • exists:first_build_digest
  • exists:first_boot_health
  • exists:dockerfile_offline
  • exists:verify_offline_sh
  • exists:build_offline_sh
  • exists:generate_sbom_sh
  • dockerfile:file_nonempty
  • dockerfile:no_forbidden_placeholders
  • base_image_digests:file_nonempty
  • system_pinning:file_nonempty
  • build_recipe:json_parses
  • first_build_digest:file_nonempty
  • first_boot_health:file_nonempty
  • dockerfile_offline:file_nonempty
  • dockerfile_offline:no_forbidden_placeholders
  • verify_offline_sh:file_nonempty
  • verify_offline_sh:no_forbidden_placeholders
  • build_offline_sh:file_nonempty
  • build_offline_sh:no_forbidden_placeholders
  • generate_sbom_sh:file_nonempty
  • generate_sbom_sh:no_forbidden_placeholders
  • produces_paths_exist
  • first_boot_health:file_contains:healthy=True
dockerfile a13aab8fe54b…
build_recipe 5881c5d2c251…
system_pinning 40d8a43134ec…
build_offline_sh 6633aa31b6b4…
generate_sbom_sh ce0f1e6f1e70…
first_boot_health 5d2910c0dd93…
verify_offline_sh 3e8184ea230c…
base_image_digests 1dc5394664a9…
dockerfile_offline a13aab8fe54b…
first_build_digest bfec38feea62…
remediate 2026-11-09T02:47:56Z2026-11-09T02:47:57Z1
8
  • exists:vendored_apt
  • exists:remediation_log
  • exists:security_report
  • vendored_apt:dir_exists
  • remediation_log:json_parses
  • security_report:md_min_sections:2
  • security_report:no_forbidden_placeholders
  • produces_paths_exist
vendored_apt e3b0c44298fc…
remediation_log b328effdd95f…
security_report 55fcc8e350a6…
build_kit 2026-11-09T03:19:37Z2026-11-09T03:19:38Z1
9
  • exists:freeze_manifest
  • exists:locked_digest
  • exists:cosign_stamp
  • exists:offline_rebuild_transcript
  • freeze_manifest:json_parses
  • locked_digest:file_nonempty
  • cosign_stamp:file_nonempty
  • offline_rebuild_transcript:json_parses
  • produces_paths_exist
cosign_stamp 8578ac33b520…
locked_digest f96fcea72a6a…
freeze_manifest 5eede587a9c8…
offline_rebuild_transcript 631252d314b0…
verdict 2026-11-09T03:22:51Z2026-11-09T03:22:52Z1
8
  • exists:scout_verdict
  • scout_verdict:json_parses
  • produces_paths_exist
  • scout_verdict:release_check_passed
  • scout_verdict:nonroot_green
  • scout_verdict:zero_fixable_crit_high
  • scout_verdict:osv_clean
  • scout_verdict:no_baked_secrets
scout_verdict 633885c6ac3e…
publish_image 2026-11-09T03:24:18Z2026-11-09T03:24:19Z1
7
  • exists:promotion_record
  • exists:hub_readme
  • promotion_record:json_parses
  • hub_readme:md_min_sections:2
  • hub_readme:no_forbidden_placeholders
  • produces_paths_exist
  • promotion_record:json_true:signed
hub_readme cb180b2096e5…
promotion_record e255caacc502…
boot_instance 2026-11-09T03:25:48Z2026-11-09T03:25:52Z2
3
  • exists:instance_handle
  • instance_handle:json_parses
  • produces_paths_exist
instance_handle d1c22a0bbdb3…
sbom 2026-11-09T03:26:36Z2026-11-09T03:26:37Z1
5
  • exists:sbom_json
  • exists:sbom_md
  • sbom_json:json_parses
  • sbom_md:md_min_sections:1
  • produces_paths_exist
sbom_md e6d0b1c2ce7d…
sbom_json 7c0ad2a1a0e8…
schema_discovery 2026-11-09T03:26:39Z2026-11-09T03:26:40Z1
7
  • exists:dependency_tree
  • exists:table_classification
  • exists:schema_hash
  • dependency_tree:json_parses
  • table_classification:json_parses
  • schema_hash:file_nonempty
  • produces_paths_exist
schema_hash 4a3a2bf9af21…
dependency_tree 310e04e8741a…
table_classification e8a9dafbbee4…
admin_handbook 2026-11-09T03:31:10Z2026-11-09T03:31:10Z1
7
  • exists:admin_handbook
  • exists:api_map
  • admin_handbook:md_min_sections:10
  • admin_handbook:no_forbidden_placeholders
  • api_map:json_parses
  • produces_paths_exist
  • admin_handbook:command_transcripts_clean
api_map 08a1baa8e8d3…
admin_handbook 4350c606f85d…
db_handbook 2026-11-09T03:35:29Z2026-11-09T03:35:30Z1
8
  • exists:db_handbook
  • exists:seed_isolation
  • db_handbook:md_min_sections:5
  • db_handbook:no_forbidden_placeholders
  • seed_isolation:md_min_sections:1
  • seed_isolation:no_forbidden_placeholders
  • produces_paths_exist
  • db_handbook:command_transcripts_clean
db_handbook 6ad89e1143e7…
seed_isolation 992d6d5ee521…
seed_data 2026-11-09T03:35:36Z2026-11-09T03:35:37Z1
6
  • exists:seed_data_sql
  • exists:seed_cases_json
  • seed_data_sql:sql_parses
  • seed_data_sql:no_forbidden_placeholders
  • seed_cases_json:json_parses
  • produces_paths_exist
seed_data_sql 723da3c4289f…
seed_cases_json 82e8a02bb814…
seed_validate 2026-11-09T03:35:40Z2026-11-09T03:35:40Z1
3
  • exists:seed_data_contract
  • seed_data_contract:json_parses
  • produces_paths_exist
seed_data_contract f32831b39438…
usecase_validate 2026-11-09T03:35:59Z2026-11-09T03:36:00Z1
10
  • exists:usecase_contract
  • exists:passed_tests
  • exists:failed_tests
  • exists:test_results
  • usecase_contract:json_parses
  • passed_tests:md_min_sections:1
  • failed_tests:md_min_sections:1
  • test_results:json_parses
  • produces_paths_exist
  • test_results:usecase_thresholds:80,70
failed_tests b2247b16f5f7…
passed_tests 23ef666c724d…
test_results 2ee8210faa31…
usecase_contract e99931915db0…
finalize_docs 2026-11-09T03:40:44Z2026-11-09T03:40:45Z1
9
  • exists:api_integration_guide
  • exists:release_notes
  • exists:defects_json
  • api_integration_guide:md_min_sections:3
  • api_integration_guide:no_forbidden_placeholders
  • release_notes:md_min_sections:3
  • release_notes:no_forbidden_placeholders
  • defects_json:json_parses
  • produces_paths_exist
defects_json cb773277e754…
release_notes 3a7f94fed87e…
api_integration_guide 2ff8ddd44458…
package_archive invalidated 2026-11-09T17:19:18Z 2026-11-09T04:07:12Z2026-11-09T16:18:38Z6
35 (final gate PASS)
  • exists:checksums
  • exists:verify_md
  • exists:rebuild_md
  • exists:provenance_md
  • exists:manifest_txt
  • exists:assetchain_log_md
  • exists:assetchain_log_json
  • exists:actions_jsonl
  • exists:sale_tar
  • checksums:file_nonempty
  • verify_md:md_min_sections:2
  • verify_md:no_forbidden_placeholders
  • rebuild_md:md_min_sections:2
  • rebuild_md:no_forbidden_placeholders
  • provenance_md:md_min_sections:2
  • provenance_md:no_forbidden_placeholders
  • manifest_txt:file_nonempty
  • assetchain_log_md:md_min_sections:1
  • assetchain_log_json:json_parses
  • actions_jsonl:file_nonempty
  • sale_tar:file_nonempty
  • produces_paths_exist
  • G8 cosign
  • G8 scan_grade
  • G8 tag_base_os
  • G8 thread_exit
  • G8 vex_shipped
  • G8 cpu_baseline
  • G8 scout_grade_a
  • G8 script_copies
  • G8 offline_rebuild
  • G8 rebuild_manifest
  • G8 artifact_coverage
  • G8 trademark_shipped
  • G8 assetchain_coverage
sale_tar e1142dc5941a…
checksums f472b430e5ad…
verify_md 6ae4927fbb10…
rebuild_md 55550073b073…
manifest_txt f5486a5c9f92…
actions_jsonl 95332549f73f…
provenance_md 37ec5f4f340f…
assetchain_log_md e9eccaec0c0f…
assetchain_log_json 10bef192ba50…

[stage_runs]

Rewinds

  • 2026-11-09T05:11:40Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #28031]
  • 2026-11-09T13:09:56Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #28924]
  • 2026-11-09T14:07:57Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #29074]
  • 2026-11-09T14:28:36Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #29122]
  • 2026-11-09T15:08:13Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #29243]
  • 2026-11-09T17:19:18Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py --stage package_archive) [stage_events, stage_events #29475]

Model work per stage

Fully recorded

Role: writer model. Calls up to 2026-11-09T16:18:38Z.

76 calls over 6 stages

StageCallsRefusedErrorsMax attemptForced commitsReal tokensLesson rules shown
plan2001 015375 —
remediate2001 018785 L-A08, L-038, L-036, L-034, L-032
admin_handbook23302 0124377 —
db_handbook21302 0109391 —
usecase_validate1001 01589 —
finalize_docs27001 0137096 —

[micro_step_runs] [lesson_recalls]

Review

Fully recorded

Role: review model.

5 rounds, 5 counted, $8.03 recorded cost

RoundStartedCriticalMajorMinorVerdictCostCap in forceArchive reviewed
12026-11-09T04:08:35Z 0314 findings to repackage [held_rounds, held_rounds #1581] $1.51 3 rounds, $40.00 3b356ecfbef2…
22026-11-09T12:20:31Z 0111 findings to repackage [held_rounds, held_rounds #1617] $1.90 3 rounds, $40.00 2734d723031a…
32026-11-09T13:39:55Z 012 findings to repackage [held_rounds, held_rounds #1623] $1.16 3 rounds, $40.00 6215a99b63d4…
42026-11-09T14:46:10Z 0111 findings to repackage [held_rounds, held_rounds #1633] $1.51 3 rounds, $40.00 8d5e2fb13484…
52026-11-09T16:19:09Z 005 clean to publish [held_rounds, held_rounds #1652] $1.96 3 rounds, $40.00 e1142dc5941a…

Defects

Fully recorded
  • Ledger entries47 [defects, defects where product_slug=discourse and this tag or chain]
  • Disclosed in the archive46 [docs/defects/defects.json, entries]

47 ledger entries: by severity critical 1, high 5, low 41; by status fixed-in-release 1, fixed-before-release 46.

DefectSeverityStatusFound byFixed in
RSD-discourse-b84f3b9abc
CVE-2026-97229 in ruby 3.4.11 is on CISA's Known Exploited Vulnerabilities list [defects, defects #191805]
criticalfixed-in-releaseimage scanv2026.10.0-CE-ubuntu24.04-r1
RSD-discourse-a3a7f7b093
Admin handbook: problem: the host variable is named DISCOURSE_DISCOURSE_DB_HOST, which Discourse does not read. [defects, defects #194882]
highfixed-before-releaseheld review (review model)—
RSD-discourse-4e898d8f44
Database handbook: problem: the sentence says Admin > Backups uses the host's pg_dump and tells the customer to use pg_dump 17+, which the container does not have. [defects, defects #194883]
highfixed-before-releaseheld review (review model)—
RSD-discourse-cfbd006777
Database handbook: problem: the documented restore procedure silently does nothing on the shipped default (allow_restore=false); the handbook does not say how to enable it. [defects, defects #194884]
highfixed-before-releaseheld review (review model)—
RSD-discourse-4ac479db3a
Database handbook: problem: points to a file that is not in the container. [defects, defects #194885]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-30195ee8c8
Admin handbook: problem: points to a file that is not in the image; contradicts line 955. [defects, defects #194886]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-56bbe89129
Admin handbook: problem: unsupported claim that Discourse reads the file at initialization. [defects, defects #194887]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-1247d561b6
Admin handbook: problem: says the worker count cannot be changed by configuration; the shipped config reads UNICORN_WORKERS. [defects, defects #194888]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-370076d216
Admin handbook: problem: wrong status code for an unauthenticated request. [defects, defects #194889]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-93fe43c15a
Admin handbook: problem: says --entrypoint is how admin:create is run; contradicts every admin:create procedure that uses docker exec. [defects, defects #194890]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-ee25ed0c35
API guide: problem: unauthenticated GET /session/current.json is a 404, not a guest session; ADMIN_HANDBOOK.md:946 says 403, a third version. [defects, defects #194891]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-74480326e2
API guide: problem: sign-in matched an email address in a different case. [defects, defects #194892]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-1ca2203723
API guide: problem: during migrations there is no HTTP server to answer 500. [defects, defects #194893]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-d545725e4c
API guide: problem: says Redis is not checked; the same guide says elsewhere it is, and it is. [defects, defects #194894]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-ff3c0ab28b
API guide: problem: claims pagination metadata that the only list endpoint does not return. [defects, defects #194895]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-ffdfe385d5
API guide: problem: names license and upstream project details that the response lacks. [defects, defects #194896]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-e22248cb64
API guide: problem: Sidekiq is its own process, not part of Pitchfork's process. [defects, defects #194897]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-5b20a9f8a1
API guide: problem: limits the developer-email path to 'no administrator exists' where the records say it works at any time. [defects, defects #194898]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-6dd9085790
Admin handbook: Restore instruction omits that allow_restore (off by default) must be on; on the shipped default the restore silently does nothing. [defects, defects #207413]
highfixed-before-releaseheld review (review model)—
RSD-discourse-2b50efbc79
Database handbook: False: script/discourse (backup, restore, enable_restore) ships in the image and works. [defects, defects #207414]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-d9b361a98f
Database handbook: Reverses the relationship: Pitchfork supervises Sidekiq, not the other way round. [defects, defects #207415]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-e32219ae25
Database handbook: Overstates and contradicts the docker exec -u root instructions elsewhere. [defects, defects #207416]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-a96947f71a
API guide: site.json has no title or description fields. [defects, defects #207417]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-4e012463e4
API guide: The entrypoint does not supervise anything; Pitchfork does. [defects, defects #207418]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-605897ce5e
API guide: Contradicts line 842 and the upstream defaults. [defects, defects #207419]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-ca11b477f6
Admin handbook: No localhost default exists for the database host. [defects, defects #207420]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-7532b4bab0
API guide: Both name and username have the default discourse. [defects, defects #207421]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-a4bc3e2b3b
Admin handbook: Arguments replace the default command; they are not passed to Pitchfork. [defects, defects #207422]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-36a52e97a0
Admin handbook: "Only the web server" contradicts the Redis check stated elsewhere. [defects, defects #207423]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-30e357c910
Admin handbook: Misattributes maintenance of the image. [defects, defects #207424]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-916e06c432
API guide: Says arguments are passed to the default command; they replace it. [defects, defects #210274]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-362ce91d22
Admin handbook: Claims mail jobs retry indefinitely; Sidekiq stops after 25 retries. [defects, defects #210275]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-5b2b8d8e26
Release notes: The upgrade procedure in the release notes is a customer procedure that no record shows run; it must be run (old release, write a value, back up, replace the container, check the value and the… [defects, defects #213693]
highfixed-before-releaseheld review (review model)—
RSD-discourse-09dd50f1cc
Admin handbook: Paraphrase of the round-3 finding: `docker run IMAGE bin/rails c` does run a different program; the sentence says it does not. [defects, defects #213694]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-c9c0288fbe
Admin handbook: Contradicts the corrected statement at :223/:963; the words are the command the entrypoint executes. [defects, defects #213695]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-2a397a4422
Database handbook: Read with the preceding sentence it says arguments still get migrations and the web server; they replace the default command. [defects, defects #213696]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-6cb0e948b9
Admin handbook: The restore use of DISCOURSE_SKIP_MIGRATE=1 is not in the entrypoint's purpose and no record shows it; the restore procedures documented elsewhere do not set it. [defects, defects #213697]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-667d258e02
Database handbook: The restore use of DISCOURSE_SKIP_MIGRATE=1 is not in the entrypoint's purpose and no record shows it; the restore procedures documented elsewhere do not set it. [defects, defects #213698]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-99aa65a1a4
Database handbook: The restore use of DISCOURSE_SKIP_MIGRATE=1 is not in the entrypoint's purpose and no record shows it; the restore procedures documented elsewhere do not set it. [defects, defects #213699]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-5ebb999966
API guide: The restore use of DISCOURSE_SKIP_MIGRATE=1 is not in the entrypoint's purpose and no record shows it; the restore procedures documented elsewhere do not set it. [defects, defects #213700]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-75453fc4f0
Admin handbook: Operating facts say admin:create needs only 10 characters; for a listed address and for resetting an existing administrator's password it needs 15 (source-grounded, not re-run). [defects, defects #213701]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-7c2306adfd
API guide: Contradicts :339 and the validator. [defects, defects #213702]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-c1dd229c3b
API guide: The image's HEALTHCHECK string was pasted as a host command. [defects, defects #213703]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-91b0180b70
Admin handbook: Operating facts still state 10 characters only for admin:create; the 15-character rule for a listed address is in a later subsection (Administrator password), so this sentence contradicts it for the… [defects, defects #220116]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-74f6908928
Admin handbook: States the 10-character minimum for the example address that the start command lists, where 15 applies. [defects, defects #220117]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-ab4ffc77ed
API guide: Same unqualified 10-character minimum (also :234, :473, :611, :940) for the documented example address, which needs 15. [defects, defects #220118]
lowfixed-before-releaseheld review (review model)—
RSD-discourse-b60fccf916
API guide: Contradicts the guide's own statement that /about.json, /site.json and /srv/status need no authentication. [defects, defects #220119]
lowfixed-before-releaseheld review (review model)—

Verification

1 item not recorded
  • Reproduced before publishingyes (rebuilt digest sha256:7a34430f785872496b1c5cb24776ef8a3fab0525de7143c388a21990935fac2d · published digest sha256:7a34430f785872496b1c5cb24776ef8a3fab0525de7143c388a21990935fac2d · digest match yes · builder moby/buildkit:v0.31.2 · build seconds 887) [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-09T17:20:52Z · failing Docker Scout counts 163 packages with copyleft licences (AGPL, CDDL, GPL, LGPL, MPL), 153 of them operating-system packages (it counts only packages whose licence it can read; the SBOM lists every component). AGPL: fonts-urw-base35. · 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-09T17:19:56Z) [docs/provenance/IMAGE_EVIDENCE.json, signed]
  • Image signature transparency-log entries [deliverables/provenance/PROMOTION_RECORD.json, sign_stdout_tail]
  • rebuild.json signatureSigstore bundle, release key (key fingerprint 04daa92344a52dbc · log index 3767379728 · transparency-log entry · integrated 2026-11-09T17:30:16Z) [ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.rebuild.json.sigstore, verificationMaterial.tlogEntries[0]]
  • Signed attestations
    • kind provenance · digest sha256:3ed7ed17832fbdeb3dc6b87b6ffcb47b80329450d7133eb37d9328c4a70a3f47 · state attached · log index 3767381637 · transparency-log entry
    • kind sbom · digest sha256:3ed7ed17832fbdeb3dc6b87b6ffcb47b80329450d7133eb37d9328c4a70a3f47 · state attached · log index 3767382196 · transparency-log entry
    • kind vsa · digest sha256:3ed7ed17832fbdeb3dc6b87b6ffcb47b80329450d7133eb37d9328c4a70a3f47 · state attached · log index 3767382605 · transparency-log entry
    • kind provenance · digest sha256:7a34430f785872496b1c5cb24776ef8a3fab0525de7143c388a21990935fac2d · state attached · log index 3767382890 · transparency-log entry
    • kind sbom · digest sha256:7a34430f785872496b1c5cb24776ef8a3fab0525de7143c388a21990935fac2d · state attached · log index 3767383158 · transparency-log entry
    • kind vsa · digest sha256:7a34430f785872496b1c5cb24776ef8a3fab0525de7143c388a21990935fac2d · state attached · log index 3767383504 · transparency-log entry
    (at 2026-11-09T17:30:16Z) [attestations.json, results]
  • Pins recorddocs/PINS.md and docs/provenance/PINS.json in the archive (https://readystack.dev/products/discourse/recipe) [docs/provenance/PINS.json]

Offline clean-room rebuilds

  • 2026-11-09T04:08:41Z on build host 1 (Docker-in-Docker daemon with --network none): bit for bit yes, digest match yes, customer verify yes
    rebuilt sha256:7a34430f785872496b1c5cb24776ef8a3fab0525de7143c388a21990935fac2d [clean-room rebuild ledger, runs[685]]
  • 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-09T03:24:19Z [stage_runs, stage_runs chain 897 stage publish_image]
  • Archive manifests written2026-11-09T17:25:26Z [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 1293 · probed 2026-11-09T12:19:23Z · source g8) [release_images, isa_level_hard]

History

2 events
  • 2026-11-09T17:31:55Z generated: by KitForge release/build_trail.py · generator commit 12b2b288aa48f48d3d1572934777edf0602849d6
  • 2026-11-09T17:34:28Z publication: promoted at 2026-11-09T17:32:35Z · promoted digest sha256:3ed7ed17832fbdeb3dc6b87b6ffcb47b80329450d7133eb37d9328c4a70a3f47 · promotion method imagetools_create_retag_by_digest_no_rebuild · site event 426 · checklist status complete · checklist at 2026-11-09T17:34:28Z · record workspace: deliverables/provenance/PROMOTION_RECORD.json, RELEASE_CHECKLIST.json

Records

25 records
RecordWhere it isRows
docs/defects/defects.jsoninside the archive (ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.tar.gz)—
docs/provenance/IMAGE_EVIDENCE.jsoninside the archive (ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.tar.gz)—
docs/provenance/LOCKED_DIGEST.txtinside the archive (ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.tar.gz)—
docs/provenance/PINS.jsoninside the archive (ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.tar.gz)—
docs/provenance/REPRO_VERIFICATION.jsoninside the archive (ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.tar.gz)—
docs/provenance/SOURCE_TREE_HASH.jsoninside the archive (ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.tar.gz)—
MANIFEST.jsonbeside the archive (prodasset /data/production/discourse/v2026.10.0-CE-ubuntu24.04-r1/), as staged for publishing—
PUBLISH_MANIFEST.jsonbeside the archive (prodasset /data/production/discourse/v2026.10.0-CE-ubuntu24.04-r1/), as staged for publishing—
ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.rebuild.jsonbeside the archive (prodasset /data/production/discourse/v2026.10.0-CE-ubuntu24.04-r1/), as staged for publishing—
ReadyStack-discourse-v2026.10.0-CE-ubuntu24.04-r1.rebuild.json.sigstorebeside the archive (prodasset /data/production/discourse/v2026.10.0-CE-ubuntu24.04-r1/), as staged for publishing—
SCOUT_EVIDENCE.jsonbeside the archive (prodasset /data/production/discourse/v2026.10.0-CE-ubuntu24.04-r1/), as staged for publishing—
clean-room rebuild ledgerthe clean-room rebuild ledger (runstate/audit-2026-09/bit4bit.json, not published)—
build_requestssadb, ReadyStack's engine database (not published)593
chainssadb, ReadyStack's engine database (not published)897
defectssadb, ReadyStack's engine database (not published)discourse v2026.10.0-CE-ubuntu24.04-r1
drive_runssadb, ReadyStack's engine database (not published)chain 897
held_roundssadb, ReadyStack's engine database (not published)chain 897
lesson_recallssadb, ReadyStack's engine database (not published)chain 897
micro_step_runssadb, ReadyStack's engine database (not published)chain 897
release_imagessadb, ReadyStack's engine database (not published)discourse v2026.10.0-CE-ubuntu24.04-r1
stage_eventssadb, ReadyStack's engine database (not published)chain 897
stage_runssadb, ReadyStack's engine database (not published)chain 897
attestations.jsonthe chain's workspace on the controller (not published)—
deliverables/provenance/PROMOTION_RECORD.jsonthe chain's workspace on the controller (not published)—
g8_result.jsonthe chain's workspace on the controller (not published)—