Keycloak 26.8.1-CE-ubuntu24.04-r2 build trail

How ReadyStack built readystack/keycloak:26.8.1-CE-ubuntu24.04-r2 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/keycloak:26.8.1-CE-ubuntu24.04-r2
  • Index digestsha256:69d62bb401f3fcc58162d09a7849c977e4aa4855d6b72e87bbd454c5890fcd67
  • linux/amd64 digestsha256:cfca615f377f1a00b023b1256b5f5e5978b5024fbd97ad575d28dd45c0e94839
  • ArchiveReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.tar.gz
  • Archive SHA-256 now068591065330e03bfc1c70364cf7830190cc6e5072366a3718a6d35a30d004bd
  • Generated2026-11-02T23:33:35Z by KitForge release/build_trail.py
  • Sections9 sections, 4 fully recorded; 11 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-keycloak-26.8.1-CE-ubuntu24.04-r2.trail.json.sigstore ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.trail.json

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

Identity

1 item not recorded
  • ProductKeycloak (keycloak) [MANIFEST.json]
  • Release tag26.8.1-CE-ubuntu24.04-r2 [MANIFEST.json]
  • Imagereadystack/keycloak:26.8.1-CE-ubuntu24.04-r2 [MANIFEST.json]
  • Image index digestsha256:69d62bb401f3fcc58162d09a7849c977e4aa4855d6b72e87bbd454c5890fcd67 [docs/provenance/LOCKED_DIGEST.txt]
  • linux/amd64 image digestsha256:cfca615f377f1a00b023b1256b5f5e5978b5024fbd97ad575d28dd45c0e94839 [ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.rebuild.json, subject.image_manifest_digest]
  • ArchiveReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.tar.gz (bytes 2203303791) [MANIFEST.json]
  • Archive sha256 at publish78713488b62001b91ea5de4cd0edb9372822a1dd890869a7de184f54247f8600 [MANIFEST.json, repack_history[0].previous_tarball_sha256]
  • Archive sha256 now068591065330e03bfc1c70364cf7830190cc6e5072366a3718a6d35a30d004bd [MANIFEST.json, tarball_sha256]
  • Archive records agreeyes [MANIFEST.json, PUBLISH_MANIFEST.json and .cutover.json name the same sha256]
  • Repack history
    • at 2026-11-01 · label kitfix · reason customer kit files brought up to the current engine: BUILD_OFFLINE.sh (kit root, docs/offline, docs/docker); the header of BUILD_OFFLINE.sh no longer says a --provenance rebuild meets a SLSA build level, comment lines only; not image inputs; image and every build input unchanged · previous sha256 78713488b62001b91ea5de4cd0edb9372822a1dd890869a7de184f54247f8600 · sha256 068591065330e03bfc1c70364cf7830190cc6e5072366a3718a6d35a30d004bd · replaced BUILD_OFFLINE.sh, docs/docker/BUILD_OFFLINE.sh, docs/offline/BUILD_OFFLINE.sh, rebuild.json
    [MANIFEST.json, repack_history]
  • Upstream repositoryhttps://github.com/keycloak/keycloak [docs/provenance/SOURCE_TREE_HASH.json]
  • Upstream ref26.8.1 [docs/provenance/SOURCE_TREE_HASH.json]
  • Upstream commit24ed1dadf3f246a555adb6d3d4a99e9b3003fb3b [docs/provenance/SOURCE_TREE_HASH.json]
  • Source tree hash4787a735c31b3e1067f077e18be438cdfee9609504b302855f5cb8e82d46183b (files 13489) [docs/provenance/SOURCE_TREE_HASH.json, tree_listing_sha256 (sha256 of the sorted file listing)]
  • Kit tree hashsha256:545f85809f3b41a69d140ae2221a0a394290c2b154ea453dd88221a81695672e [ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.rebuild.json, inputs.tree_hash]
  • SOURCE_DATE_EPOCH1791878921 (utc 2026-10-13T08:08:41Z) [ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.rebuild.json, inputs.source_date_epoch]
  • Base images
    • ref eclipse-temurin:21-jre-noble@sha256:161310cd5bd41fd549d19cf9f90b614897cb4a1532555c613b43b7e0628fe5d6 · platform digest sha256:db724162e4ff5f71fa0a2815026314d9e5e0e9a139f49be1d4717e6930e93341
    • ref maven:3.9.8-eclipse-temurin-21@sha256:de18e4e51396ad9266f76669779ed6d6b49fbb0f45ed6f39169d87378d548d7d · platform digest sha256:6847cbbf21e159f97819f18336cf6bbc24a89f9eb6439317520d93f904e9a916
    [ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.rebuild.json, bases]
  • BuildKitmoby/buildkit:v0.31.2 (image digest sha256:e0e67ea9c4bb07bdef683e29f70f3b623d1eb9c82274a9ec04e6bb0511449fb0) [ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.rebuild.json, engine]
  • Not recorded: the engine commit(s) that built it (drive_runs records them for drives from 2026-11-02; this release's drives were rebuilt from line logs, which do not name it)

Why this release exists

Fully recorded
  • Chain684 (created 2026-10-27T10:37:53Z · trigger customer_request · upstream version 26.8.1) [chains, chains #684]
  • Requestbuild request #361 (rebuild) (requested at 2026-10-27T02:36:43Z · requested by kitforge-agent · version 26.8.1) [build_requests, build_requests #361]
  • Reasonrevision 26.8.1-CE-ubuntu24.04-r2: same upstream version rebuilt (retarget.py --rev-bump) [build_requests, build_requests #361 request_reason]
  • Supersedesreadystack/keycloak:26.8.1-CE-ubuntu24.04-r1 (chain 570) [chains, chains #570]

The path through the harness

2 items not recorded

1 chain · 10 drives · 18 stages · 7 rewinds

Chain 684 release · shipped

Created 2026-10-27T10:37:53Z, upstream 26.8.1, build request 361 [chains, chains #684]

DriveStartedMinutesBuild hostHow it stopped
7832026-10-27T10:38:54Z2.1build host 4 withhold-publish stage_failed at assemble_kit [drive_runs, drive_runs #783] rebuilt from a build line's log
7932026-10-27T13:36:28Z40.1build host 4 withhold-publish stage_failed at package_archive [drive_runs, drive_runs #793] rebuilt from a build line's log
7952026-10-27T14:28:46Z19.3build host 4 withhold-publish ready_to_ship [drive_runs, drive_runs #795] rebuilt from a build line's log
7992026-10-27T16:20:31Z10.4build host 4 withhold-publish stage_failed at package_archive [drive_runs, drive_runs #799] rebuilt from a build line's log
8032026-10-27T17:54:48Z47.6build host 4 withhold-publish ready_to_ship [drive_runs, drive_runs #803] rebuilt from a build line's log
8072026-10-27T19:19:58Z11.3build host 4 withhold-publish ready_to_ship [drive_runs, drive_runs #807] rebuilt from a build line's log
8262026-10-28T03:32:58Z1.6build host 4 withhold-publish stage_failed at package_archive [drive_runs, drive_runs #826] rebuilt from a build line's log
2812026-10-29T20:05:52Z49.7build host 1 withhold-publish ready_to_ship [drive_runs, drive_runs #281] rebuilt from a build line's log
2852026-10-29T21:29:00Z10.8build host 1 withhold-publish ready_to_ship [drive_runs, drive_runs #285] rebuilt from a build line's log
2872026-10-29T21:50:28Z17.5build host 1 publish-held shipped [drive_runs, drive_runs #287] rebuilt from a build line's log

Stages, in order

StageFirst startPassedAttemptsGate checks passedArtifacts (SHA-256)
intake 2026-10-27T10:39:00Z2026-10-27T10:39:01Z1
4
  • exists:order_json
  • order_json:json_parses
  • order_json:no_forbidden_placeholders
  • produces_paths_exist
—
acquire 2026-10-27T10:39:11Z2026-10-27T10:39:11Z1
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
—
plan 2026-10-27T10:40:37Z2026-10-27T10:40:38Z1
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
—
assemble_kit 2026-10-27T10:40:57Z2026-10-29T20:23:46Z4
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
—
remediate 2026-10-27T13:54:10Z2026-10-29T20:23:48Z3
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
—
build_kit 2026-10-27T14:04:57Z2026-10-29T20:33:58Z3
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
—
verdict 2026-10-27T14:06:34Z2026-10-29T20:35:36Z3
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
—
publish_image 2026-10-27T14:07:27Z2026-10-29T20:36:31Z3
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
—
boot_instance 2026-10-27T14:08:21Z2026-10-29T20:37:20Z6
3
  • exists:instance_handle
  • instance_handle:json_parses
  • produces_paths_exist
—
sbom 2026-10-27T14:08:45Z2026-10-29T20:37:43Z3
5
  • exists:sbom_json
  • exists:sbom_md
  • sbom_json:json_parses
  • sbom_md:md_min_sections:1
  • produces_paths_exist
—
schema_discovery 2026-10-27T14:08:47Z2026-10-29T20:37:46Z3
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
—
admin_handbook 2026-10-27T14:08:55Z2026-10-29T20:37:54Z3
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
—
db_handbook 2026-10-27T14:09:06Z2026-10-29T20:38:03Z3
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
—
seed_data 2026-10-27T14:09:11Z2026-10-29T20:38:09Z3
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_validate 2026-10-27T14:09:14Z2026-10-29T20:38:11Z3
3
  • exists:seed_data_contract
  • seed_data_contract:json_parses
  • produces_paths_exist
—
usecase_validate 2026-10-27T14:09:39Z2026-10-29T20:38:23Z3
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
—
finalize_docs 2026-10-27T14:09:44Z2026-10-29T20:38:30Z3
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
—
package_archive 2026-10-27T14:16:34Z2026-10-29T22:07:56Z9
33 (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 vex_shipped
  • G8 scout_grade_a
  • G8 script_copies
  • G8 three_way_sha
  • G8 offline_rebuild
  • G8 rebuild_manifest
  • G8 artifact_coverage
  • G8 assetchain_coverage
—

[stage_runs]

Rewinds

  • 2026-10-27T15:09:57Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py) [stage_events, stage_events #2099]
  • 2026-10-27T17:54:56Z: package_archive to assemble_kit on strategy_changed (chain 684: strategy changed — rewound from 'package_archive' to assemble_kit and dropped the vendored tree so the change actually reaches the build.) [stage_events, stage_events #2368]
  • 2026-10-27T19:12:06Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py) [stage_events, stage_events #2100]
  • 2026-10-27T19:52:59Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py) [stage_events, stage_events #2101]
  • 2026-10-29T20:05:57Z: package_archive to assemble_kit on strategy_changed (chain 684: strategy changed — rewound from 'package_archive' to assemble_kit and dropped the vendored tree so the change actually reaches the build.) [stage_events, stage_events #2520]
  • 2026-10-29T21:20:32Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py) [stage_events, stage_events #2102]
  • 2026-10-29T21:50:00Z: package_archive to package_archive on docs_redo (scripts/redo-docs.py) [stage_events, stage_events #332]
  • Not recorded: each drive's ticks and first failed check (drive_runs records them for drives from 2026-11-02; these drives were rebuilt from line logs)
  • Not recorded: the sha256 of each stage's artifacts (stage_events records them for stages passed from 2026-11-02; this chain's events were rebuilt from stage_runs and logs) — the archive's CHECKSUMS.sha256 lists the sha256 of every file it ships

Model work per stage

3 items not recorded

Role: writer model. Calls up to 2026-10-29T22:07:56Z.

39 calls over 6 stages

StageCallsRefusedErrorsMax attemptForced commitsReal tokensLesson rules shown
plan2001 not recordednot recorded —
remediate2001 not recordednot recorded —
admin_handbook17803 not recordednot recorded —
db_handbook7102 not recordednot recorded —
usecase_validate3001 not recordednot recorded —
finalize_docs8202 not recordednot 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

3 items not recorded

Role: review model.

5 rounds, 5 counted, $4.66 recorded cost

RoundStartedCriticalMajorMinorVerdictCostCap in forceArchive reviewed
12026-10-27T14:49:21Z 091 findings to repackage [held_rounds, held_rounds #65] rebuilt from a held-review state file $1.27 not recorded not recorded
22026-10-27T18:44:01Z 021 findings to repackage [held_rounds, held_rounds #66] rebuilt from a held-review state file $0.92 not recorded not recorded
32026-10-27T19:31:45Z 011 findings to repackage [held_rounds, held_rounds #67] rebuilt from a held-review state file $1.10 not recorded not recorded
42026-10-29T20:58:41Z 0100 findings to repackage [held_rounds, held_rounds #68] rebuilt from a held-review state file $0.70 not recorded not recorded
52026-10-29T21:41:28Z 000 clean to publish [held_rounds, held_rounds #69] rebuilt from a held-review state file $0.68 not recorded not recorded

Overrides

  • max_rounds: — to 6; by not recorded; why: not recorded predates override recording (2026-11-02): found in runstate/held-auto/keycloak.json, last written 2026-10-29T21:47Z; who set it, why, when and the value before are not known [review_overrides, review_overrides #5]
  • Not recorded: the sha256 of the archive each round reviewed (held_rounds records it for rounds from 2026-11-02; these rounds were rebuilt from state files)
  • Not recorded: the round cap in force at each round (the state files did not keep it)
  • Not recorded: who raised max_rounds to 6 and why (review_overrides #5 was backfilled from a state file; overrides are recorded with who and why from 2026-11-02)

Defects

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

22 ledger entries: by severity medium 2, high 17, low 3; by status fixed-before-release 21, fixed-in-release 1.

DefectSeverityStatusFound byFixed in
RSD-keycloak-db9ae78361
The Docker Hub run example passes KC_BOOTSTRAP_ADMIN_PASSWORD with -e, so the temporary administrator password stays in the container's environment after setup [defects, defects #111883]
mediumfixed-before-releaseagent case study—
RSD-keycloak-0bdd769746
Admin handbook: Invented mechanism that contradicts the rest of the handbooks: the bootstrap account stays temporary whatever its password; a customer may rely on it as permanent and be locked out when it is… [defects, defects #113299]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-ac38606ff5
Admin handbook: Old quoting rule for `-e` kept on an env-file example: no shell reads keycloak.env, and the sentence contradicts the 'without quotes, passed unchanged' rule beside it. [defects, defects #113300]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-5ad1a9d57f
Admin handbook: Unsupported statistic presented as fact in customer text (a writer-prompt leak); it cannot be verified from any record. [defects, defects #113301]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-b424768975
Admin handbook: The Starting the Container command passes KC_DB_PASSWORD and the bootstrap username/password with -e AND --env-file: the password stays on the command line and in the container environment,… [defects, defects #113302]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-95fdcbe1e2
API guide: The API guide's Starting the Container command keeps the -e secrets, yet line 577 tells the customer to remove the lines from 'your environment file'. [defects, defects #113303]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-634ee08fdf
API guide: Following this instruction (password line only) makes the recreated container refuse to start, and it contradicts line 511/686 of the same guide that say to remove both lines together. [defects, defects #113304]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-9211c13198
API guide: Overstated: removing just the username line does not stop the start (it leaves the password in the container environment). [defects, defects #113305]
lowfixed-before-releaseheld review (review model)—
RSD-keycloak-2528c03519
Admin handbook: docker start reuses the container's stored environment, so 'start it again without the variables' leaves the bootstrap password exposed and contradicts the recreate instructions elsewhere. [defects, defects #118348]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-b4862474ac
Database handbook: 'Restart' does not drop the environment; only recreation does. [defects, defects #118349]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-01a5fd92bd
Admin handbook: Wording implies the password is chosen at first login rather than taken from the env file. [defects, defects #118350]
lowfixed-before-releaseheld review (review model)—
RSD-keycloak-2b77a86b21
Release notes: The release notes name the new base image by a digest (dd4cbbf22ea3…) that matches no record; the base this image is built on is sha256:cd35bb338596… (the old one is named by its index digest… [defects, defects #119000]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-f8fa822864
Admin handbook: The example creates the secrets file with a plain redirection, leaving DB and admin passwords world-readable on most hosts, while the same documents call keycloak.env a file only you can read and… [defects, defects #119001]
lowfixed-before-releaseheld review (review model)—
RSD-keycloak-104e02b619
CVE-2026-111497 in libbrotli1 1.1.0-2build2 is on CISA's Known Exploited Vulnerabilities list [defects, defects #139361]
mediumfixed-in-releaseimage scan26.8.1-CE-ubuntu24.04-r2
RSD-keycloak-4913ce922e
Release notes: Release notes name a base digest that is not the base this image is built on. [defects, defects #139517]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-54f6ed335a
Admin handbook: Unchanged text made false by an image change: the image rebuilt on a newer base now carries Java 21.0.13+9. [defects, defects #139518]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-b40327ab35
Admin handbook: Unchanged text made false by an image change: the image rebuilt on a newer base now carries Java 21.0.13+9. [defects, defects #139519]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-1f4bb63b61
Admin handbook: Unchanged text made false by an image change: the image rebuilt on a newer base now carries Java 21.0.13+9. [defects, defects #139520]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-f80ea41c1b
Admin handbook: Unchanged text made false by an image change: the image rebuilt on a newer base now carries Java 21.0.13+9. [defects, defects #139521]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-6f5938a029
Admin handbook: Unchanged text made false by an image change: the image rebuilt on a newer base now carries Java 21.0.13+9. [defects, defects #139522]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-18b8a2a072
Database handbook: Unchanged text made false by an image change: the image rebuilt on a newer base now carries Java 21.0.13+9. [defects, defects #139523]
highfixed-before-releaseheld review (review model)—
RSD-keycloak-62dd63f4cf
Database handbook: Unchanged text made false by an image change: the image rebuilt on a newer base now carries Java 21.0.13+9. [defects, defects #139524]
highfixed-before-releaseheld review (review model)—

Verification

2 items not recorded
  • Reproduced before publishingyes (rebuilt digest sha256:cfca615f377f1a00b023b1256b5f5e5978b5024fbd97ad575d28dd45c0e94839 · published digest sha256:cfca615f377f1a00b023b1256b5f5e5978b5024fbd97ad575d28dd45c0e94839 · digest match yes · builder moby/buildkit:v0.31.2 · build seconds 286) [docs/provenance/REPRO_VERIFICATION.json, verified]
  • Final contract gate (G8)PASS (checks cosign, scan_grade, tag_base_os, vex_shipped, scout_grade_a, script_copies, three_way_sha, offline_rebuild, rebuild_manifest, artifact_coverage, assetchain_coverage) [stage_runs, stage_runs chain 684 package_archive gate_result.g8.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-10-29T21:50:51Z · failing Docker Scout counts 118 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]
  • First own scan of the releaseA (at 2026-10-29T22:08:22Z · score 100 · rubric cerodeo-v1 · fixable critical 0 · fixable high 0 · syft 1.54.1 · grype 0.120.1 · grype db v6.1.10@2026-10-29T06:23:34Z) [image_scans, image_scans #1570]
  • Image signatureverified on the index and the linux/amd64 manifest (key fingerprint 04daa92344a52dbc · at 2026-10-29T21:50:33Z) [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 3623650402 · transparency-log entry · integrated 2026-11-01T07:41:16Z) [ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.rebuild.json.sigstore, verificationMaterial.tlogEntries[0]]
  • Signed attestations
    • kind provenance · digest sha256:69d62bb401f3fcc58162d09a7849c977e4aa4855d6b72e87bbd454c5890fcd67 · state attached · log index 3577422010 · transparency-log entry
    • kind sbom · digest sha256:69d62bb401f3fcc58162d09a7849c977e4aa4855d6b72e87bbd454c5890fcd67 · state attached · log index 3577426540 · transparency-log entry
    • kind vsa · digest sha256:69d62bb401f3fcc58162d09a7849c977e4aa4855d6b72e87bbd454c5890fcd67 · state attached · log index 3577430249 · transparency-log entry
    • kind provenance · digest sha256:cfca615f377f1a00b023b1256b5f5e5978b5024fbd97ad575d28dd45c0e94839 · state attached · log index 3577434931 · transparency-log entry
    • kind sbom · digest sha256:cfca615f377f1a00b023b1256b5f5e5978b5024fbd97ad575d28dd45c0e94839 · state attached · log index 3577438768 · transparency-log entry
    • kind vsa · digest sha256:cfca615f377f1a00b023b1256b5f5e5978b5024fbd97ad575d28dd45c0e94839 · state attached · log index 3577441617 · transparency-log entry
    (at 2026-10-29T22:01:48Z) [attestations.json, results]

Offline clean-room rebuilds

  • 2026-10-27T14:49:29Z on build host 1 (Docker-in-Docker daemon with --network none): bit for bit yes, digest match yes, customer verify yes
    rebuilt sha256:53c9e328f82f30b7ce1537e69be5bdd7a6c54e42d170cbb551a6dc86b47d7fa4 [clean-room rebuild ledger, runs[466]]
  • 2026-10-27T18:44:08Z on build host 4 (Docker-in-Docker daemon with --network none): bit for bit yes, digest match yes, customer verify yes
    rebuilt sha256:55ccddecb3e3c886b8f1a4c17eff818573b13deeb9f1471e5311609d09a2cf00 [clean-room rebuild ledger, runs[481]]
  • 2026-10-29T20:58:47Z on build host 1 (Docker-in-Docker daemon with --network none): bit for bit yes, digest match yes, customer verify yes
    rebuilt sha256:cfca615f377f1a00b023b1256b5f5e5978b5024fbd97ad575d28dd45c0e94839 [clean-room rebuild ledger, runs[553]]
  • 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)
  • Not recorded: the pins record (docs/PINS.md is not in this archive as generated; a repack that adds it is appended to this trail's history)

Publication

Fully recorded
  • Image pushed (internal tag), publish_image passed2026-10-29T20:36:31Z [stage_runs, stage_runs chain 684 stage publish_image]
  • Release tag promoted2026-10-29T22:05:51Z (method imagetools_create_retag_by_digest_no_rebuild · digest sha256:69d62bb401f3fcc58162d09a7849c977e4aa4855d6b72e87bbd454c5890fcd67 · tag readystack/keycloak:26.8.1-CE-ubuntu24.04-r2) [deliverables/provenance/PROMOTION_RECORD.json, promoted_at]
  • Archive manifests written2026-10-29T21:57:03Z [PUBLISH_MANIFEST.json, published_at]
  • Archive cut over on prodasset, package_archive passed2026-10-29T22:07:56Z [stage_runs, stage_runs chain 684 stage package_archive]
  • Cut-over markerpresent (chain 684) [.cutover.json]
  • Release checklist and site event2026-10-29T22:07:54Z (status complete · site event 294 · steps grade a verified done · release tag promoted done · cosign signed done · release evidence recorded done · contract gate passed done · archive published done · hub readme live done · reproducibility recorded done · defects ledger published done · catalog available done · build request fulfilled done · seo regenerated skipped · site catalogue refreshed done · site grade recorded done · site queue synced done · customer requests charged done · owners notified done) [deliverables/provenance/RELEASE_CHECKLIST.json, run_at]

Packages and CPU level

Fully recorded
  • Packages in the image657 (scanned 2026-11-02T06:30:04Z · source backfill:daily-scan) [release_images, package_count]
  • x86-64 level the image needsv1 (used v4 · baseline v2 · elf files 831 · probed 2026-11-02T17:06:22Z · source backfill) [release_images, isa_level_hard]

History

1 event
  • 2026-11-02T23:33:35Z generated: by KitForge release/build_trail.py · generator commit 916780cc218cf013bd623a8c085aaf73d3b053d0 · note backfill: built after the release from its records

Records

26 records
RecordWhere it isRows
docs/defects/defects.jsoninside the archive (ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.tar.gz)—
docs/provenance/IMAGE_EVIDENCE.jsoninside the archive (ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.tar.gz)—
docs/provenance/LOCKED_DIGEST.txtinside the archive (ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.tar.gz)—
docs/provenance/REPRO_VERIFICATION.jsoninside the archive (ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.tar.gz)—
docs/provenance/SOURCE_TREE_HASH.jsoninside the archive (ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.tar.gz)—
.cutover.jsonbeside the archive (prodasset /data/production/keycloak/26.8.1-CE-ubuntu24.04-r2/)—
MANIFEST.jsonbeside the archive (prodasset /data/production/keycloak/26.8.1-CE-ubuntu24.04-r2/)—
PUBLISH_MANIFEST.jsonbeside the archive (prodasset /data/production/keycloak/26.8.1-CE-ubuntu24.04-r2/)—
ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.rebuild.jsonbeside the archive (prodasset /data/production/keycloak/26.8.1-CE-ubuntu24.04-r2/)—
ReadyStack-keycloak-26.8.1-CE-ubuntu24.04-r2.rebuild.json.sigstorebeside the archive (prodasset /data/production/keycloak/26.8.1-CE-ubuntu24.04-r2/)—
SCOUT_EVIDENCE.jsonbeside the archive (prodasset /data/production/keycloak/26.8.1-CE-ubuntu24.04-r2/)—
clean-room rebuild ledgerthe clean-room rebuild ledger (runstate/audit-2026-09/bit4bit.json, not published)—
build_requestssadb, ReadyStack's engine database (not published)361
chainssadb, ReadyStack's engine database (not published)684
defectssadb, ReadyStack's engine database (not published)keycloak 26.8.1-CE-ubuntu24.04-r2
drive_runssadb, ReadyStack's engine database (not published)chain 684
held_roundssadb, ReadyStack's engine database (not published)chain 684
image_scanssadb, ReadyStack's engine database (not published)1570
micro_step_runssadb, ReadyStack's engine database (not published)chain 684
release_imagessadb, ReadyStack's engine database (not published)keycloak 26.8.1-CE-ubuntu24.04-r2
review_overridessadb, ReadyStack's engine database (not published)5
stage_eventssadb, ReadyStack's engine database (not published)chain 684
stage_runssadb, ReadyStack's engine database (not published)chain 684
attestations.jsonthe chain's workspace on the controller (not published)—
deliverables/provenance/PROMOTION_RECORD.jsonthe chain's workspace on the controller (not published)—
deliverables/provenance/RELEASE_CHECKLIST.jsonthe chain's workspace on the controller (not published)—