Skip to content

Back-merge main after the #86 release, so develop contains it - #87

Merged
aenawi merged 8 commits into
developfrom
chore/back-merge-86
Sep 13, 2026
Merged

aenawi merged 8 commits into
developfrom
chore/back-merge-86

Conversation

@aenawi

@aenawi aenawi commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Target

  • This is going into develop: the normal case for a fix, a chapter, a
    lab change, a typo
  • This is a release: develop → main, shipping to the published guide
  • This is a hotfix: straight into main, because published advice is
    currently locking readers out or leaving them exposed

What this changes

CONTRIBUTING.md's branch diagram has main returning to develop after a
release — the arrow labelled "a release, back-merged". This repository has never
made that trip, and #86 is the seventh release to end with develop not
containing the branch it just shipped to.

The cost is not files. It is that git merge-base --is-ancestor main develop
answers no, so nothing can cheaply ask "is everything on main also on
develop?" and get a trustworthy answer. Comparing the two shows main six or
seven commits "ahead" — all of them empty release merge commits — which reads
as a divergence and is not one. Working out that it is not one takes a diff
against the merge base every single time.

This merges main into develop with --no-ff and restores the invariant. It
is the pattern CONTRIBUTING already documents for a hotfix ("main must be
back-merged into develop afterwards or the next release silently reverts your
fix"); the same trip after an ordinary release is what keeps that hotfix
back-merge from being a special case nobody has practised.

Closes #

Kind

  • Prose: clarity, typo, dead link
  • The advice was wrong, unsafe, or out of date
  • Lab or sandbox: code, checks, a new scenario
  • A divergence between the lab and the sandbox, closed or newly documented
  • Tests
  • Something else — branch history only. No file in the repository changes.

What this does not change

Every file. A release merge commit holds no content of its own, so bringing it
back carries none either:

$ git diff --stat origin/develop origin/main
(no output)

$ git diff --stat HEAD~1 HEAD
(no output)

The second is the merge commit in this pull request, compared against the
develop it sits on. Nothing was added, removed or edited. git log gains one
commit and that is the whole diff.

The invariant, before and after

before (develop at be82349, main at eda75f4):
  $ git merge-base --is-ancestor main develop
  → no
  $ git rev-list --left-right --count main...develop
  7	0          # seven commits "ahead" on main, all of them merge bubbles

after:
  $ git merge-base --is-ancestor main develop
  → yes
  $ git rev-list --left-right --count main...develop
  0	1          # one commit ahead: this merge

Seven, not six, because #86's own merge commit joined the six that #54, #56,
#63, #66, #72 and #76 left behind. That number grows by one per release for as
long as this goes unmade, which is the argument for making it now rather than
at the point somebody needs the answer urgently.

Checks

  • make -C lab check passes
  • gofmt is clean (make check fails on any output at all)
  • New source files carry an SPDX-License-Identifier header — not
    applicable, no file is added or changed
$ make -C lab check
licences
links
go vet
go test
gofmt
ui
...
ℹ tests 59
ℹ pass 59
ℹ fail 0

Everything held.

Run on the merge commit itself, after the merge, so what passed is the tree this
pull request produces.

Merging this one

Merge, do not squash. A squash writes a new commit with no link to the ones
it replaced, which would drop main from develop's ancestry and leave the
invariant exactly as broken as it is now — this pull request would then be the
eighth thing in the list it exists to shorten.

gh pr merge <n> --merge

CONTRIBUTING already says this for releases and hotfixes. It is the same reason
in the same direction.

If this changes advice or a command

Not applicable. No chapter, no page, no command a reader runs, and no lab
behaviour is touched.

If this touches the guide's pages

Not applicable. No file under assets/, no chapter, no navigation entry.

If this touches the lab or sandbox engine

Not applicable. No file under lab/ changes.

Licence

  • I have the right to submit this, and I am fine with it going out under
    CC BY-SA 4.0 (guide) or GPL-3.0-or-later (code), per the file I touched

Release: the branching model, and the CI that enforces it
Release: reviewed repository documents
Release: the documents say each thing once
Release: the sandbox gets a session layer, and the lab gets its own relay
Release: the lab says what went wrong, and the rules an agent breaks are written down
Release: the lab measures the attacker's route, and a rebuilt server changes the page
Release: the board becomes an instrument, and a machine can always rejoin
CONTRIBUTING's branch diagram has main returning to develop after a
release, and this repository has never done it: main carried six merge
commits develop had never seen, so `git merge-base --is-ancestor main
develop` answered no and every release looked like a divergence rather
than a ship.

This carries no file change at all — `git diff origin/develop
origin/main` is empty — because a release merge commit holds no content
of its own. What it restores is the invariant the model is built on:
develop contains main, so the next release is develop's new work and
nothing else.
@aenawi
aenawi merged commit 5b62d23 into develop Sep 13, 2026
1 check passed
@aenawi
aenawi deleted the chore/back-merge-86 branch September 13, 2026 08:26
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