Compare commits

...

3 commits

Author SHA1 Message Date
8eb58dbdbc flow: squash into dev, fast-forward the promotions (#165)
All checks were successful
secrets-guard / encrypted (pull_request) Successful in 5s
shell-lint / shellcheck (pull_request) Successful in 7s
PR build (required check) / changes (pull_request) Successful in 14s
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / build-backend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Has been skipped
PR build (required check) / gate (pull_request) Successful in 2s
secrets-guard / encrypted (push) Successful in 5s
shell-lint / shellcheck (push) Successful in 15s
2026-08-02 00:15:42 +00:00
e9e9512155 Merge pull request 'promote main -> release: registry host migration to dev.jinemi.com' (#163) from main into release
All checks were successful
Build + push images (Forgejo registry) / build-push (backend) (push) Successful in 21s
Build + push images (Forgejo registry) / build-push (frontend) (push) Successful in 53s
Deploy / deploy (backend) (push) Successful in 1m12s
Deploy / deploy (frontend) (push) Successful in 1m26s
secrets-guard / encrypted (pull_request) Successful in 5s
shell-lint / shellcheck (pull_request) Successful in 7s
PR build (required check) / changes (pull_request) Successful in 11s
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / build-backend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Has been skipped
PR build (required check) / gate (pull_request) Successful in 2s
secrets-guard / encrypted (push) Successful in 5s
shell-lint / shellcheck (push) Successful in 17s
2026-08-01 23:28:35 +00:00
1afe6fbaac Merge pull request 'promote: main → release (jinemi registry namespace, Caddy trusted_proxies, CI login fix)' (#159) from main into release
All checks were successful
secrets-guard / encrypted (push) Successful in 7s
shell-lint / shellcheck (push) Successful in 9s
Build + push images (Forgejo registry) / build-push (backend) (push) Successful in 24s
Build + push images (Forgejo registry) / build-push (frontend) (push) Successful in 1m15s
Deploy / deploy (backend) (push) Successful in 1m30s
Deploy / deploy (frontend) (push) Successful in 1m44s
2026-08-01 19:38:48 +00:00
3 changed files with 24 additions and 3 deletions

View file

@ -71,8 +71,14 @@ correct" rather than erroring.
is a divergence to reconcile deliberately, not to overwrite.
2. **`dev` is the default branch.**
`forge_repo_settings(apply_flow_defaults=true)` — sets the default branch and
permits every merge style the chain uses, including `fast-forward-only`, plus
rebase-updates (without which the merge queue's core primitive 403s).
permits the merge styles the chain uses, plus rebase-updates (without which
the merge queue's core primitive 403s).
The chain uses exactly two: **squash** for `feat/*``dev`, and
**fast-forward-only** for both promotions. Merge commits and rebase merges
are disabled deliberately — see the merge-style table in the root
`CLAUDE.md`. If `apply_flow_defaults` re-enables them, that is the tool
disagreeing with the policy, not permission to use them.
3. **Protection.** `forge_branch_protection(branch="dev", apply=true)`, then
`main`, then `release`.

View file

@ -19,7 +19,7 @@ name: PR build (required check)
on:
pull_request:
branches: [dev, main]
branches: [dev, main, release]
concurrency:
group: pr-build-${{ github.event.pull_request.number }}

View file

@ -22,6 +22,21 @@ every change, so a stale one is a correctness bug, not a documentation bug.
`dev`, `main` and `release` are protected: **everything is a PR**, for humans and
agents alike. Promotion is one PR per hop, `dev``main``release`.
**Merge style is part of the contract**, and Forgejo enforces it repo-wide —
it cannot scope styles per branch, so these are the only two enabled:
| Hop | Style |
|---|---|
| `feat/*``dev` | **squash** |
| `dev``main`, `main``release` | **fast-forward only** |
Merge commits and rebase merges are disabled. A promotion therefore never
creates a commit, which keeps `release ⊆ main ⊆ dev` true permanently: the
three branches hold identical history, never merely identical trees. Squashing
into `main` instead would strand `merge-base(dev, main)` and make every later
promotion re-apply work already there. Rebase-*updates* stay enabled — the
merge queue 403s without them.
`.claude/BRANCHING.md` is the orchestrator's runbook for that flow — the
serialised merge queue, promotions, hotfix down-merges — and
`.claude/ownership.md` is the module map saying which tasks may run