Skip to content

Merge the duplicated Unreleased changelog sections, and backfill 47 missing entries - #1096

Merged
ako merged 4 commits into
mainfrom
docs/changelog-unreleased-backfill
Sep 14, 2026
Merged

ako merged 4 commits into
mainfrom
docs/changelog-unreleased-backfill

Conversation

@ako

@ako ako commented Sep 14, 2026

Copy link
Copy Markdown
Collaborator

The [Unreleased] section of CHANGELOG.md had drifted twice over, both from the same bad merge, and both invisible to anything that runs in CI.

Structure

It carried two ### Added blocks and two ### Fixed blocks, a duplicated run --local --watch entry, and — inside that entry — a duplicated paragraph.

Neither duplicate was byte-identical to its twin, which is the part worth knowing: one copy of the entry had lost its four-paragraph body, and the later copy of the paragraph carried a clause the earlier one did not. Collapsing by first-seen would therefore have deleted content — which is exactly what the first attempt at this did, caught by the verification below rather than by care. Both are now collapsed keeping the fuller text.

Coverage

Grepping the section for each of the 117 non-merge commits since v0.21.0 found 47 with no entry at all, including every large one:

  • offline synchronization — the SYNC (…) block, ON SYNC ERROR THROW|CONTINUE, CATALOG.OFFLINE_ENTITY_CONFIGS and the sync reference edge
  • SOAP request bodies (arguments + send mapping), and call web service on the codec engine
  • merge <label> / join <label> join points
  • DESCRIBE MICROFLOW … NORMALIZED
  • view-entity associations
  • mxcli brain brief, brain staged --slice, --json
  • SHOW GLYPHS / DESCRIBE GLYPH + MDL078
  • DROP USER ROLE … IF EXISTS

A reader of the changelog would have concluded none of it shipped.

Each new entry is written from its own commit's body, so the measurements, CE numbers and controls are the ones that were actually taken rather than reconstructed. Existing entries are reused verbatim and keep their relative order; new ones are placed at roughly their commit's recency.

The section is now 17 Added, 5 Changed, 60 Fixed — 82 entries.

Verification

  • Every line removed by this change reappears elsewhere in the file: the diff is pure moves plus the three intended dedups.
  • The [0.21.0] section onward is byte-identical, md5 before and after, so no released section was touched.
  • make sync-changelog and make build pass; the embedded cmd/mxcli/changelog.md is in sync.

Note on scope

This branch also carries two small commits from the same session that are a separate concern from the changelog — fix(microflows): write the doubled-quote example where gofmt preserves it and fix(build): make lint-go verify formatting instead of rewriting it. They were the only gofmt-unclean file in the repo and the missing check that let it sit on main. Happy to split them into their own PR if you would rather they landed separately.

🤖 Generated with Claude Code

https://claude.ai/code/session_01BNDe35kDNsMX5cz4Ahn4rk

ako and others added 4 commits September 14, 2026 09:01
…s it

normalizeXPathEnumRefs' doc comment explains that the regex turned an
already-quoted enum ref into a DOUBLED quote, and gave `''Value''` as the
example. gofmt rewrote that to a curly closing quote, destroying the one
thing the sentence exists to show: in a doc comment `''` is the legacy
godoc digraph for a right double quote.

Moved into an indented code block, which is a doc-comment code block and
so exempt from the digraph rewriting. Verified against a standalone probe
first, rather than assumed: the inline spelling is rewritten, the
indented one is untouched, and gofmt is now idempotent over this file.

This was the only gofmt-unclean file in the repo, and it was on main --
see the fmt-check commit for why nothing caught it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`lint-go: fmt` ran `go fmt ./...`, which edits in place and then exits 0.
The target therefore could not fail on an unformatted file, in CI or
locally, and main carried one indefinitely. Locally it was worse than
useless: every `make build` silently dirtied the working tree, which is a
trap for `git add -A`.

lint-go now depends on fmt-check, which reports and fails. `make fmt`
keeps rewriting, as the fixer.

Two choices worth keeping:

  Tracked files only (git ls-files), so the ANTLR parser under
  mdl/grammar/parser -- generated at build time, deliberately not
  committed -- is excluded without a path filter that rots.

  An empty file list FAILS. A check that inspected nothing and passed is
  worse than no check, and that is the shape of the bug it replaces.

Proven with controls, not just a green run: passes on the clean tree,
fails naming the file when the preceding commit's fix is reverted, passes
again when restored, and the empty-list guard fires.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ll 47 entries

The [Unreleased] section had drifted twice over, both from the same bad
merge, and both invisible to anything that runs in CI.

STRUCTURE. It carried two `### Added` blocks and two `### Fixed` blocks,
a duplicated `run --local --watch` entry, and — inside that entry — a
duplicated paragraph. Neither duplicate was byte-identical to its twin:
one copy of the entry had lost its four-paragraph body, and the later
copy of the paragraph carried a clause the earlier one did not. Collapsing
by first-seen would therefore have deleted content, which is exactly what
the first attempt at this did; both are collapsed keeping the fuller text.

COVERAGE. Grepping the section for each of the 117 non-merge commits since
v0.21.0 found 47 with no entry at all, including every large one: offline
synchronization (the SYNC block, ON SYNC ERROR, the catalog tables), SOAP
request bodies and SOAP on the codec engine, MERGE/JOIN join points,
DESCRIBE MICROFLOW ... NORMALIZED, view-entity associations, brain brief,
SHOW GLYPHS, and DROP ... IF EXISTS. A reader of the changelog would have
concluded none of it shipped.

Each new entry is written from its commit's own body, so the measurements,
CE numbers and controls are the ones that were actually taken. Existing
entries are reused verbatim and keep their relative order; new ones are
placed at roughly their commit's recency.

Now 17 Added, 5 Changed, 60 Fixed. Verified that every line removed by
this change reappears elsewhere in the file (the diff is pure moves plus
the three intended dedups) and that the [0.21.0] section onward is
byte-identical, md5 before and after.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BNDe35kDNsMX5cz4Ahn4rk
Verified every `mendixlabs/mxcli#N` in the backfilled entries against the
body of the commit each entry was written from. Three did not match, all
introduced by the backfill itself:

  - the pluggable-property casing fix is #1069, not #1080 (#1080 is
    diff-local, and already had its own entry citing it correctly);
  - the MDL-WIDGET11 design-properties fix cites no issue — #999 belongs
    to the MDL-WIDGET27 entry beside it, which had it right;
  - the legacy-engine access-rule reconcile cites no issue either.

The other 44 entries check out. A wrong number here is worse than none:
it closes the wrong issue when someone greps the changelog for what
shipped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BNDe35kDNsMX5cz4Ahn4rk
@ako
ako merged commit cd7969d into main Sep 14, 2026
13 checks passed
@ako
ako deleted the docs/changelog-unreleased-backfill branch September 14, 2026 13:50
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