promote: main → release #101

Merged
admin_emi merged 7 commits from main into release 2026-07-25 21:27:47 +00:00
Owner

Promotes mainrelease, deploying to prod (thermograph.org).

Who merges. The owner. This hop deploys to prod and the decision is theirs; Centralis prepared it and stops here.

Divergence. 7 ahead, 13 behind. 7 commit(s) to carry, but the target has moved on by 13 — a merge commit is required and conflicts are possible
Not fast-forwardable: the target holds 13 commit(s) the source does not. That is the accumulated design of this release chain, not a mistake anyone just made — every promotion merges the source into the target, which creates a merge commit ON THE TARGET that the source never receives, so each promotion widens the gap it just closed. Expect --ff-only to fail with "diverging branches"; the promotion is a merge commit.

Predicted conflicts.

  • README.md — edited on both sides
  • backend/CLAUDE.md — edited on both sides
  • backend/docker-compose.test.yml — edited on both sides
  • frontend/CLAUDE.md — edited on both sides
  • frontend/Dockerfile — edited on both sides
  • frontend/server/internal/format/format_test.go — edited on both sides
  • observability/grafana/provisioning/alerting/contact-points.yml — edited on both sides
  • observability/grafana/provisioning/alerting/rules-prod.yml — edited on both sides

Commits (7).

  • ba1085bf Merge pull request 'promote: dev → main' (#100) from dev into main
  • 5f20fba9 frontend: fix the three inconsistencies the onboarding guide found (#99)
  • 12441be0 docs: add a developer onboarding guide for the monorepo
  • 0766fd6b Merge pull request 'promote: dev → main (alert template: omit empty value line)' (#97) from dev into main
  • b32b5841 alerting: don't print a bare "value:" when ValueString is empty (#96)
  • c67d22b1 Merge pull request 'promote: dev → main (alerting liveness rules onto the app heartbeat)' (#95) from dev into main
  • 1a56a638 alerting: base web/worker liveness on the app heartbeat, not container stdout (#94)

Merge with a merge commit, not a squash or a fast-forward. release runs ahead of main from earlier promotions, so --ff-only fails with "diverging branches", and squashing would rewrite the shared history so the next promotion sees every prior commit as new. (Making promotions fast-forward-only is an open question, not current policy — it needs a one-time history reconciliation on the protected branches first.)

Promotes `main` → `release`, deploying to prod (thermograph.org). **Who merges.** The owner. This hop deploys to prod and the decision is theirs; Centralis prepared it and stops here. **Divergence.** 7 ahead, 13 behind. 7 commit(s) to carry, but the target has moved on by 13 — a merge commit is required and conflicts are possible Not fast-forwardable: the target holds 13 commit(s) the source does not. That is the accumulated design of this release chain, not a mistake anyone just made — every promotion merges the source into the target, which creates a merge commit ON THE TARGET that the source never receives, so each promotion widens the gap it just closed. Expect `--ff-only` to fail with "diverging branches"; the promotion is a merge commit. **Predicted conflicts.** - `README.md` — edited on both sides - `backend/CLAUDE.md` — edited on both sides - `backend/docker-compose.test.yml` — edited on both sides - `frontend/CLAUDE.md` — edited on both sides - `frontend/Dockerfile` — edited on both sides - `frontend/server/internal/format/format_test.go` — edited on both sides - `observability/grafana/provisioning/alerting/contact-points.yml` — edited on both sides - `observability/grafana/provisioning/alerting/rules-prod.yml` — edited on both sides **Commits (7).** - ba1085bf Merge pull request 'promote: dev → main' (#100) from dev into main - 5f20fba9 frontend: fix the three inconsistencies the onboarding guide found (#99) - 12441be0 docs: add a developer onboarding guide for the monorepo - 0766fd6b Merge pull request 'promote: dev → main (alert template: omit empty value line)' (#97) from dev into main - b32b5841 alerting: don't print a bare "value:" when ValueString is empty (#96) - c67d22b1 Merge pull request 'promote: dev → main (alerting liveness rules onto the app heartbeat)' (#95) from dev into main - 1a56a638 alerting: base web/worker liveness on the app heartbeat, not container stdout (#94) **Merge with a merge commit, not a squash or a fast-forward.** `release` runs ahead of `main` from earlier promotions, so `--ff-only` fails with "diverging branches", and squashing would rewrite the shared history so the next promotion sees every prior commit as new. (Making promotions fast-forward-only is an open question, not current policy — it needs a one-time history reconciliation on the protected branches first.)
admin_emi added 7 commits 2026-07-25 21:15:26 +00:00
alerting: base web/worker liveness on the app heartbeat, not container stdout (#94)
All checks were successful
secrets-guard / encrypted (push) Successful in 5s
shell-lint / shellcheck (push) Successful in 7s
Validate observability stack / validate (push) Successful in 12s
PR build (required check) / changes (pull_request) Successful in 8s
secrets-guard / encrypted (pull_request) Successful in 7s
shell-lint / shellcheck (pull_request) Successful in 8s
PR build (required check) / build-backend (pull_request) Has been skipped
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Successful in 18s
PR build (required check) / gate (pull_request) Successful in 2s
1a56a63800
Merge pull request 'promote: dev → main (alerting liveness rules onto the app heartbeat)' (#95) from dev into main
All checks were successful
secrets-guard / encrypted (push) Successful in 6s
Validate observability stack / validate (push) Successful in 19s
shell-lint / shellcheck (push) Successful in 15s
c67d22b152
alerting: don't print a bare "value:" when ValueString is empty (#96)
All checks were successful
secrets-guard / encrypted (push) Successful in 14s
Validate observability stack / validate (push) Successful in 17s
shell-lint / shellcheck (push) Successful in 14s
secrets-guard / encrypted (pull_request) Successful in 5s
PR build (required check) / changes (pull_request) Successful in 8s
shell-lint / shellcheck (pull_request) Successful in 6s
PR build (required check) / build-backend (pull_request) Has been skipped
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Successful in 20s
PR build (required check) / gate (pull_request) Successful in 2s
b32b5841f3
Merge pull request 'promote: dev → main (alert template: omit empty value line)' (#97) from dev into main
All checks were successful
secrets-guard / encrypted (push) Successful in 10s
shell-lint / shellcheck (push) Successful in 16s
Validate observability stack / validate (push) Successful in 20s
0766fd6bcb
docs: add a developer onboarding guide for the monorepo
All checks were successful
secrets-guard / encrypted (push) Successful in 5s
shell-lint / shellcheck (push) Successful in 6s
12441be0c1
Twelve documents under docs/onboarding/ covering orientation, local setup,
the repo map, per-domain deep dives, the cross-service contracts, CI and the
release flow, infra and secrets, observability, task recipes, and a list of
which docs in this tree are currently stale.

Every command in the setup guide was run against this checkout: the backend
suite (429 passed, 8 skipped), the frontend Go suite, a venv boot of the
backend, and a build+boot of the Go frontend.

Two findings recorded along the way:

- static/units.js's F_REGIONS is guarded by no test, despite three source
  comments claiming "a test asserts all three stay identical". The Go test
  only cross-checks the Go copy against the backend's Python. All four copies
  are currently identical.
- backend/ and frontend/docker-compose.test.yml still default to the retired
  emi/thermograph-backend/app image path, and the frontend harness pins the
  split-era v0.0.2-split-ci tag.

Claude-Session: https://claude.ai/code/session_01AfXqHrxCJLs2D7hpQkiUiJ
frontend: fix the three inconsistencies the onboarding guide found (#99)
All checks were successful
secrets-guard / encrypted (push) Successful in 5s
shell-lint / shellcheck (push) Successful in 8s
secrets-guard / encrypted (pull_request) Successful in 18s
PR build (required check) / changes (pull_request) Successful in 22s
shell-lint / shellcheck (pull_request) Successful in 19s
Build + push images (Forgejo registry) / build-push (frontend) (push) Successful in 1m11s
Build + push images (Forgejo registry) / build-push (backend) (push) Successful in 1m14s
PR build (required check) / validate-observability (pull_request) Has been skipped
PR build (required check) / build-frontend (pull_request) Successful in 1m1s
PR build (required check) / build-backend (pull_request) Successful in 1m21s
PR build (required check) / gate (pull_request) Successful in 2s
5f20fba9f5
Merge pull request 'promote: dev → main' (#100) from dev into main
All checks were successful
secrets-guard / encrypted (push) Successful in 8s
shell-lint / shellcheck (push) Successful in 10s
Deploy / deploy (backend) (push) Successful in 52s
Build + push images (Forgejo registry) / build-push (backend) (push) Successful in 55s
Build + push images (Forgejo registry) / build-push (frontend) (push) Successful in 59s
Deploy / deploy (frontend) (push) Successful in 58s
secrets-guard / encrypted (pull_request) Successful in 6s
shell-lint / shellcheck (pull_request) Successful in 9s
ba1085bf39
admin_emi merged commit 18f50ad09b into release 2026-07-25 21:27:47 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Jinemi/thermograph#101
No description provided.