Skip to content

Release record polish, builds vs releases, honest supply chain, Release flows filter - #95

Merged
jfillman merged 5 commits into
mainfrom
release-ui-polish
Oct 14, 2026
Merged

jfillman merged 5 commits into
mainfrom
release-ui-polish

Conversation

@jfillman

@jfillman jfillman commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Fixes and features from the R1–R4 test run, plus the supply-chain review. Needs backstage#141. Merge, release, then bump the pin in #141 so everything ships in one build.

1. Promote dialog, in plain words.

  • One line says what happens: "Opens a release PR for HAZEL 1.1.4-9d3dcde, now in staging."
  • One line says when the environment changes.
  • An error is one sentence, with the raw API error under Details.

3. Human context becomes After release

  • After release holds how the release was checked in production, follow-ups (new) and acknowledgements.
  • The summary moves into the draft, so it's written before the release ships. It leads Release notes, the changelog, the export and the GitHub Release body.
  • Records written before the draft carried a summary and risk can still be given them under After release.
  • On a newer record, a summary or risk that was added after the fact shows in Release notes, marked "added after release".

4. The record's Outcome and Release notes and sign-off panels get the record's own panel look (RecordColumn.tsx).

  • Outcome's colour strip follows the outcome.
  • Release notes and sign-off is amber.

5. Builds vs releases.

  • The Matrix's rows are builds, and a build that shipped to Flight shows its release name.
  • Promote names the release it is promoting, or says which release an unnamed build becomes ("Once it's healthy there, this build becomes the release IRONWOOD.").

Supply chain (supplyChain.ts)

  • A step's colour now means verified:

    • green: verified;
    • amber: there but not verified, for a reason that isn't tampering;
    • red: something contradicts the image;
    • grey: missing.

    Before, Build, SBOM, Signature and Rekor turned green as soon as the item existed, and Sign + Attest turned green when any one attestation verified.

  • Every result says what it means and what to do, from the backend's verificationCode. Raw sigstore messages are gone.

  • "Signed and attested" has one definition everywhere: the build provenance is verified and nothing contradicts it. This covers the readiness +15, the record, the Command Deck, the export and next-release readiness.

Pipelines (bug): Release flows now includes Tower's promote and rollback runs (hangar.io/flow=promote / rollback).

Docs:

  • supply-chain.md (new)
  • release-records (builds vs releases, After release)
  • credentials (actor tokens aren't pod-bound)
  • architecture, components, security

Verified:

  • tsc, lint and yarn ratchet are clean, and 818/818 tests pass.
  • New tests: supply-chain verdicts and colours, wording, and flow buckets.
  • The backend half was checked live: see backstage#141.

🤖 Generated with Claude Code

jfillman and others added 5 commits October 14, 2026 14:15
…cord's colour strip; credentials docs: actor tokens aren't pod-bound

- PromoteDialog: one line on what happens, one on when the environment changes; errors say what failed in a sentence,
  with the raw API error under Details.
- RecordColumn: the record's panel look (3px strip, uppercase title, ruled head) for the panels in their own files.
  Outcome's strip follows the outcome (green clean, red rolled back, amber replaced before healthy, blue baking);
  Release notes and sign-off is amber, like the human context it sits beside.
- docs/credentials: tower-actor tokens are no longer bound to the pod (backstage#140).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Human context becomes After release: how it was checked in production, follow-ups (new) and acknowledgements.
  The summary moves into the draft (written before the release ships) and leads Release notes, the changelog, the
  export and the GitHub Release body. Records from before the draft carried summary and risk can still be given them
  under After release; a newer record's after-the-fact summary or risk shows in Release notes, marked as such.
- Builds vs releases: the Matrix's rows are builds, and a build that shipped to Flight shows its release name. Promote
  names the release it is promoting, or says which release an unnamed build becomes once healthy in Flight.
- Docs: release-records, architecture, components, security.

Needs the backstage change that adds the draft summary and the followUps field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hat it means and what to do

Found live (boarding-api 1.1.3, pre-prod): Build, SBOM, Signature and Rekor went green as soon as the item existed,
and Sign + Attest went green when any one attestation verified, so a step could be green while its own detail said
"did not verify". The details showed raw sigstore errors ("inclusion promise could not be verified", "expected
1 timestamps, got 0") with no meaning or next step.

- supplyChain.ts: one rule for every view. Green verified; amber present but unverified for a reason that is not
  evidence of tampering; red contradicted (another log entry, another image's digest, a bad signature); grey missing.
  Reads the backend's verificationCode, else infers it from the message.
- Plain words per result: what Tower found, why, and what it means for the release.
- Roll-ups (Sign + Attest, Rekor) say n of m verified and explain the weakest one.
- "Signed and attested" (readiness +15, the record, the Command Deck, the export, the next release's readiness)
  is now: build provenance verified and nothing contradicting it, not "any attestation verified".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found live (boarding-api): Tower's Promote and Roll back run the release Pipeline labeled hangar.io/flow=promote /
rollback, and the filter matched only 'ci', so Release flows showed none of them. Any labeled flow that isn't a
preview build or a guardrail is now a release flow, which also covers a cicd.yaml's own flow names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jfillman jfillman changed the title Promote dialog in plain words; record panels get their colour strip Release record polish, builds vs releases, honest supply chain, Release flows filter Oct 14, 2026
@jfillman
jfillman merged commit eff7a8f into main Oct 14, 2026
1 check passed
@jfillman
jfillman deleted the release-ui-polish branch October 14, 2026 22:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant