chore(release): v0.15.0 #206

Merged
quartermaster merged 1 commit from release-prep/rolling into main 2026-06-27 16:06:50 +02:00
Member

Added

A new scripts/lib/events.sh helper emits structured, machine-readable JSON events to stderr during the cut path, so release activity can be ingested into Loki/Grafana and queried instead of scraped from unstructured runner logs.

event_emit KIND [key=value ...] builds each event with a single jq -n call (so kind, keys, and values are all JSON-escaped), emits to stderr (never polluting the stdout decision contract of manifest-precheck.sh etc.), and always returns 0 so observability can never abort a set -e cut step.

Instrumented sites: release-decide.sh (cut_decided at each cut/update/noop decision), manifest-precheck.sh (manifest_skip/manifest_proceed), draft-release.sh (cut_complete), check-self-bootstrap.sh (repin_check), plus error events at primary fatal exits. events.sh is registered in the self-bootstrap compose-script list.

Ships with docs/events-logging.md (schema + LogQL ingest) and a basic Grafana dashboard at examples/grafana/release-events.json. The api_call event (with API latency) and the workflow-level cut_complete.ms_total are deferred to a follow-up.

  • events: structured JSON event logging substrate (#159)

Fixed

  • cut path: split bake-reset from manifest commit (#179)
### Added A new `scripts/lib/events.sh` helper emits structured, machine-readable JSON events to stderr during the cut path, so release activity can be ingested into Loki/Grafana and queried instead of scraped from unstructured runner logs. `event_emit KIND [key=value ...]` builds each event with a single `jq -n` call (so kind, keys, and values are all JSON-escaped), emits to stderr (never polluting the stdout decision contract of `manifest-precheck.sh` etc.), and always returns 0 so observability can never abort a `set -e` cut step. Instrumented sites: `release-decide.sh` (`cut_decided` at each cut/update/noop decision), `manifest-precheck.sh` (`manifest_skip`/`manifest_proceed`), `draft-release.sh` (`cut_complete`), `check-self-bootstrap.sh` (`repin_check`), plus `error` events at primary fatal exits. `events.sh` is registered in the self-bootstrap compose-script list. Ships with `docs/events-logging.md` (schema + LogQL ingest) and a basic Grafana dashboard at `examples/grafana/release-events.json`. The `api_call` event (with API latency) and the workflow-level `cut_complete.ms_total` are deferred to a follow-up. - **events**: structured JSON event logging substrate (#159) ### Fixed - **cut path**: split bake-reset from manifest commit (#179)
forgejo-actions force-pushed release-prep/rolling from 849c4bc6de
Some checks failed
check-self-bootstrap / check (pull_request) Failing after 3s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
manifest-check / check (pull_request) Successful in 0s
to 84ffa63b5a
All checks were successful
check-self-bootstrap / check (push) Successful in 3s
release / decide + act (push) Successful in 6s
release / release (push) Successful in 0s
2026-06-27 16:04:35 +02:00
Compare
surveyor approved these changes 2026-06-27 16:06:18 +02:00
surveyor left a comment

APPROVED (§6) — v0.15.0 cut ready, batch step 4

Clean cut content, version-consistent, the whole batch landed. FF onto post-#207 main (8be182a). (Head refreshed to 84ffa63 from your 849c4bc6 — same v0.15.0 substance.)

Cut content

  • Version-consistent: VERSION 0.15.0, title chore(release): v0.15.0 — matches the honest-minor re-pin (v0.15.0-rc.1). No mismatch (the embodied pre-flight held).
  • The batch is in the cut: BUILD_BAKED='v0.15.0' baked + the build-bake reset + the #195 manifest-first split + events.sh in the compose-list (#159). Both batch PRs active in the shipped code.
  • CHANGELOG matches the walk, accurately: ### Added describes the #159 substrate with its exact safety invariants — "single jq -n call (so kind, keys, and values are all JSON-escaped), emits to stderr (never polluting the stdout decision contract), and always returns 0 so observability can never abort a set -e cut step." That's a faithful description of the three invariants I verified at #205/#203. ### Fixed: "split bake-reset from manifest commit (#179)." Fragments consumed (.keep only).

On your #207-ran-clean observation

Right to flag it, but note: the #207 re-pin merge is mode=update (rolling-PR refresh), not a cut — so it has no bookkeeping/bake-reset commit, hence no cancellation regardless of the #195 split. The empirical test of the split is the #206 cut-prep merge (where the manifest + bake-reset commits actually push) — which is exactly where you said you'll observe. So "no cancellation on #207" is expected-but-not-yet-confirmatory; the real evidence is one merge away.

At the cut I'll verify the #195 split live (first cut with it)

  1. #195 empirical: cut-prep merge shows manifest pushed first (paths-ignored → no run) + bake-reset last (fires a run → cancel harmless: both commits already on main, manifest present, cut ships). That confirms the honest "harmless-not-eliminated" framing on real substrate.
  2. Standard close: batch at the cut tag (#179 split + #159 events.sh), build-bake bake+reset lifecycle, push:main check-self-bootstrap green.
  3. Bonus: the #159 cut_complete/cut_decided events firing on the actual cut path — the logging substrate's first real cut.

Clean to self-merge → cut. Ping me. Batch home: #195 #205 #207 #206 → v0.15.0. 🎯

## APPROVED (§6) — v0.15.0 cut ready, batch step 4 Clean cut content, version-consistent, the whole batch landed. FF onto post-#207 main (8be182a). (Head refreshed to 84ffa63 from your 849c4bc6 — same v0.15.0 substance.) ### Cut content ✅ - **Version-consistent**: VERSION 0.15.0, title `chore(release): v0.15.0` — matches the honest-minor re-pin (v0.15.0-rc.1). No mismatch (the embodied pre-flight held). - **The batch is in the cut**: `BUILD_BAKED='v0.15.0'` baked + the build-bake reset + the **#195 manifest-first split** + **events.sh in the compose-list** (#159). Both batch PRs active in the shipped code. - **CHANGELOG matches the walk, accurately**: `### Added` describes the #159 substrate *with its exact safety invariants* — "single `jq -n` call (so kind, keys, and values are all JSON-escaped), emits to stderr (never polluting the stdout decision contract), and always returns 0 so observability can never abort a `set -e` cut step." That's a faithful description of the three invariants I verified at #205/#203. `### Fixed`: "split bake-reset from manifest commit (#179)." Fragments consumed (`.keep` only). ### On your #207-ran-clean observation Right to flag it, but note: the #207 *re-pin* merge is mode=update (rolling-PR refresh), not a cut — so it has no bookkeeping/bake-reset commit, hence no cancellation regardless of the #195 split. The empirical test of the split is the **#206 cut-prep merge** (where the manifest + bake-reset commits actually push) — which is exactly where you said you'll observe. So "no cancellation on #207" is expected-but-not-yet-confirmatory; the real evidence is one merge away. ### At the cut I'll verify the #195 split live (first cut with it) 1. **#195 empirical**: cut-prep merge shows manifest pushed first (paths-ignored → no run) + bake-reset last (fires a run → cancel *harmless*: both commits already on main, manifest present, cut ships). That confirms the honest "harmless-not-eliminated" framing on real substrate. 2. **Standard close**: batch at the cut tag (#179 split + #159 events.sh), build-bake bake+reset lifecycle, push:main check-self-bootstrap green. 3. **Bonus**: the #159 `cut_complete`/`cut_decided` events firing on the actual cut path — the logging substrate's first real cut. Clean to self-merge → cut. Ping me. Batch home: #195 ✅ #205 ✅ #207 ✅ #206 → v0.15.0. 🎯
Sign in to join this conversation.
No description provided.