Skip to content

changelog: adopt changie fragment files to end CHANGELOG merge conflicts - #195

Merged
iainmcgin merged 3 commits into
mainfrom
iain/changie-adopt
Jul 2, 2026
Merged

iainmcgin merged 3 commits into
mainfrom
iain/changie-adopt

Conversation

@iainmcgin

@iainmcgin iainmcgin commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

Why

Every PR that adds an entry to the top of [Unreleased] in CHANGELOG.md
conflicts with every other open PR doing the same, so the merge queue turns into
a sequence of manual changelog rebases (we have hit this repeatedly across the
current server-hardening PR set). This switches to changie's
fragment model: each PR adds a new file under .changes/unreleased/, and
CHANGELOG.md is assembled from .changes/ at release time. New file → no
shared lines → no conflict. It mirrors the buffa adoption (anthropics/buffa#230).

What

Two commits, reviewable separately:

  1. Tooling.changie.yaml (tuned to our Keep a Changelog format:
    bracketed [X.Y.Z], - bullets, multi-line bodies with a 2-space hanging
    indent), .changes/header.tpl.md, the four changelog-* Taskfile tasks
    (install-changie downloads the pinned binary to .local/bin/,
    changelog-new / -batch / -merge), a check-changelog CI job (same
    shape as check-generated-code), a CONTRIBUTING section, and .local/ added
    to .gitignore.
  2. Migration — the 14 released sections 0.2.00.8.0 split verbatim into
    .changes/<ver>.md, and CHANGELOG.md regenerated from those. The released
    history round-trips byte-identical (verified with diff).

Unlike buffa, connect-rust's CHANGELOG.md has no per-version compare-link
footers, so footerFormat is omitted to keep the migration byte-identical
(compare-links can be added later as a separate, intentional change).

Sequencing — finalized

The plan this PR originally waited on is complete: v0.8.0 shipped
(tag v0.8.0, 2026-07-01), and this branch has been rebuilt on the
post-release main — the tooling commit rebased as-is, and the migration
regenerated from the released changelog so the [0.8.0] section rides in
.changes/0.8.0.md like every other released version. changie merge
plus the check-changelog diff (the exact CI job commands) pass locally
with a byte-identical round-trip from ## [0.8.0] onward; the header
gains the fragment-workflow note.

After this lands, contributors add .changes/unreleased/*.yaml fragments via
task changelog-new instead of editing CHANGELOG.md (which becomes generated).

Validation

  • changie merge is idempotent; check-changelog passes on the committed tree.
  • Released history (## [0.x]…EOF) is byte-identical to main.
  • task --list parses; .changie.yaml and ci.yml are valid YAML.

@github-actions

Copy link
Copy Markdown

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@iainmcgin
iainmcgin force-pushed the iain/changie-adopt branch from 9ca7877 to 27d42ac Compare July 2, 2026 14:15
@iainmcgin
iainmcgin marked this pull request as ready for review July 2, 2026 14:16
@iainmcgin
iainmcgin requested review from azdagron and rpb-ant July 2, 2026 14:16
@iainmcgin
iainmcgin enabled auto-merge July 2, 2026 14:16
iainmcgin added 2 commits July 2, 2026 07:17
Adds .changie.yaml, a header template, the changelog-* Taskfile tasks
(install-changie downloads the pinned binary into .local/bin), a
check-changelog CI job that fails when CHANGELOG.md drifts from the
.changes/ sources, and a CONTRIBUTING section. CHANGELOG.md becomes a
generated artifact; per-change entries move to fragment files under
.changes/unreleased/, so concurrent PRs no longer collide on the
changelog.

Signed-off-by: Iain McGinniss <309153+iainmcgin@users.noreply.github.com>
…OG.md

Splits the released 0.2.0-0.8.0 sections verbatim into per-version
.changes/<ver>.md files and regenerates CHANGELOG.md from them via
changie merge. The released history round-trips byte-identical; the
header gains the fragment-workflow note. Future entries are added as
fragments under .changes/unreleased/ and assembled at release time.

Signed-off-by: Iain McGinniss <309153+iainmcgin@users.noreply.github.com>
@iainmcgin
iainmcgin force-pushed the iain/changie-adopt branch from 27d42ac to eef3ec3 Compare July 2, 2026 14:17
Both install paths (the check-changelog CI job and the install-changie
task) verified nothing about the tarball they extracted. Pin the
per-platform checksums from the v1.24.2 release's checksums.txt so a
tampered or substituted asset fails closed before extraction, and give
the CI workflow an explicit contents:read token — nothing in it writes.

Signed-off-by: Iain McGinniss <309153+iainmcgin@users.noreply.github.com>
@iainmcgin
iainmcgin added this pull request to the merge queue Jul 2, 2026
Merged via the queue into main with commit ed5d957 Jul 2, 2026
14 checks passed
@iainmcgin
iainmcgin deleted the iain/changie-adopt branch July 2, 2026 14:56
iainmcgin added a commit to EffortlessSteven/connect-rust that referenced this pull request Aug 21, 2026
Fixes connectrpc#248

Removes the local debugging scaffolding from the conformance server:
`start_caddy_proxy`, `start_tcplog_proxy`, and the `ENABLE_CADDY_PROXY`
/ `ENABLE_TCPLOG` dispatch in `main`. Net 114 lines deleted.

Both helpers spawned binaries that are not part of this repository, are
not built by the Taskfile, and are documented nowhere — `tcplog`
defaulted to `/tmp/tcplog/target/release/tcplog`, a cargo target
directory that exists on one machine. Grepping the tree for `tcplog`,
`caddy`, `TCPLOG_BIN`, `CADDY_BIN`, `ENABLE_TCPLOG` and
`ENABLE_CADDY_PROXY` turns up nothing outside the deleted code, so
nothing else in the repo, the Taskfile or CI referenced them.

They cost nothing at runtime, since both were off unless the environment
variable was set. The cost was that a contributor reading the
conformance harness met a hundred lines of dead-end setup pointing at
paths they do not have.

`main` now reports the real listener port unconditionally. The
`_proxy_child` half of the old tuple was `None` on every path the
deleted branches did not take, so dropping the binding changes nothing
about what is kept alive. `std::process::Command` and `Stdio` became
unused and are removed.

No changelog fragment. `conformance` is `publish = false` and has no
surface a library user consumes, and the repo's own practice matches: of
the 33 commits touching only harness, CI, docs, examples or benches —
including all four since changie was adopted in connectrpc#195 — none carries a
fragment.

Verified beyond the build: feeding a `ServerCompatRequest` on stdin, the
server logs its listener address and writes a `ServerCompatResponse`
whose port field decodes to that same port, and a live Connect JSON
unary call against it returns a well-formed `ConformancePayload`.
Serving is intact end to end.

One note on CI: two `handler::tests` element-budget tests fail on `main`
right now, independently of this change — fixture rot from buffa 0.9.1,
fixed by connectrpc#239. This diff touches one file under `conformance/` and does
not link that crate's test binary.

Signed-off-by: Iain McGinniss <309153+iainmcgin@users.noreply.github.com>
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.

2 participants