Skip to content

Head CHANGELOG.md releases with ## and sections with ###, and point bin/release at ## - #329

Open
1-Bort-1 wants to merge 1 commit into
mainfrom
agent/328-bring-kitemodels-changelog-to-the-releas
Open

1-Bort-1 wants to merge 1 commit into
mainfrom
agent/328-bring-kitemodels-changelog-to-the-releas

Conversation

@1-Bort-1

@1-Bort-1 1-Bort-1 commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

TL;DR

Every release header in CHANGELOG.md is now ## KiteModels vX.Y.Z YYYY-MM-DD and every section header ### Added / ### Changed / ### Fixed, the one convention the box's rules/release reads. With the old ### releases and no ## line at all, agent release found no version at the top and a bump would have appended its section at the end of the file.

What changed

Headers only: git diff -U0 CHANGELOG.md has 0 changed lines that are not headers, so the note text is byte-for-byte what it was.

  • 55 release headers ### KiteModels vX.Y.Z … → ## KiteModels vX.Y.Z YYYY-MM-DD; the 19 headers from v0.5.6 to v0.6.8 also lose their - before the date.
  • 89 section headers #### → ###, the one #### Changes (v0.11.7) among them becoming ### Changed; the 3 under v0.11.8 and v0.11.6 that already were ### stay as they are.
  • Left as they were, because fixing them would move note text: v0.6.15, v0.6.10 and v0.6.9 list mixed notes straight under the release header with no section, and v0.11.4, v0.11.1 and v0.11.0 order their sections Changed/Fixed/Added. rules/release reads neither.
  • No ## Unreleased section: main has no pending notes, and new ones go in changelog.d/ per the gate.

This repo's own bin/release keyed on ^### , so after the rewrite it would have taken ### Added for the top release. Its two awk patterns and two error messages now say ## , and nothing else in it moves; bringing the whole script to the box's copy is what agent release does on the bump.

Where I'd push back

PRs #321 and #312 both add a #### Changed block under the already-released ### KiteModels v0.11.17 line. They will conflict on that header line here, and their notes belong in changelog.d/ rather than under a release that has shipped.

The install failure the box reported is not this branch's: bin/install -y instantiated and precompiled, then ran Pkg.test(), which failed on the red KPS4 steady-state test (#314). #326 takes the test run out of bin/install. Nothing here needs Julia, so I did not wait on it.

Verification

  • Reproduced first: box rules/release --dry-run --sha origin/main → Version mismatch: Project.toml is 0.11.17 but CHANGELOG top is (expected v0.11.17).
  • Box rules/release --dry-run --sha 9cb0f9c6 (Agents@81d9a5e): exit 0, Version: v0.11.17, notes = the v0.11.17 ### Added block
  • Repo ./bin/release --dry-run on the branch: exit 0, same version and notes · bash -n bin/release clean
  • Up to date with main
  • REUSE lint: not run locally (reuse is not installed on the box); passes in GitHub CI
  • Local full suite (box, Julia 1.13.0): FAIL, at test_find_steady_state (test/test-kps4.jl:581, solver returned non-finite values after 247 iterations). This branch did not cause it. It is find_steady_state! does not converge for KPS4 on Julia 1.13, and CI hides it #314: KPS4 has no steady state on Julia 1.13, and main was already red on it before this branch. The branch's src/, test/, Project.toml and manifest are identical to main's, and test/test-kps4.jl run alone on this tree gives the same result: 208 passed, 0 failed, 1 errored, 11 broken. The 9 in test_residual! and the 1 in test_getters are in the Broken column, not Fail. Under GitHub CI the CI=true catch turns the same error into @test_broken, as find_steady_state! does not converge for KPS4 on Julia 1.13, and CI hides it #314 says.
  • GitHub CI on 9cb0f9c: Link checker and reuse-lint pass (TestOnPRs.yml runs the Julia tests only on src/**, test/**, *.toml)
  • Risk: the conflict with Build SysState with the KiteUtils 0.12 constructor and one-slot winch fields #321/Write KA orientations to SysState, keep KS inside the model #312 on the v0.11.17 header line, which whichever merges second has to resolve.

Scope

+148 / -148 across 2 files: 144 header lines in CHANGELOG.md and 4 lines in bin/release. Lines out equal lines in because every edit rewrites a line where it stands.

Opened by 1-Bort-1, an AI agent working for @1-Bart-1.
Closes #328 · task KiteModels.jl-328

Release headers become '## KiteModels vX.Y.Z YYYY-MM-DD' (the dash on the
0.5.6-0.6.8 headers dropped), section headers '### Added/Changed/Fixed'
('#### Changes' read as Changed). Note text is untouched. bin/release reads
the top '## ' section accordingly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@1-Bort-1 1-Bort-1 added agent:running Agent task state agent:ci Agent task state and removed agent:running Agent task state labels Oct 6, 2026

@1-Bort-1 1-Bort-1 left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independent review (advisory)

Verdict: APPROVE · 0 inline, 0 off the diff

Good

  • Every one of the 147 headers in CHANGELOG.md now has the target form: an anchored rg for ^## KiteModels vX.Y.Z YYYY-MM-DD$ or ^### (Added|Changed|Fixed)$ matches all 147 lines that start with #, and 55 + 89 + 3 = 147 agrees with the card's counts
  • The diff only touches header lines; reading every hunk confirms the note text is unchanged, as the card says
  • The bin/release edit is the minimal one the card names: two awk patterns and two messages; a read of the whole script turned up no other ### dependency
  • The rename from #### Changes to ### Changed under v0.11.7 is listed in the card, so the one text change in a header is not hidden
  • The changelog still passes .markdownlint.json: MD024 is siblings_only and MD041 is off, so repeated ### Added under different releases and the missing H1 are both allowed
  • Leaving out an empty ## Unreleased section is right, because bin/release would otherwise read Unreleased as the top version
  • The card points out the coming conflict with #321/#312 and says their notes belong in changelog.d/; that is the right place for that decision

Not good

  • v0.6.15, v0.6.10 and v0.6.9 still have notes sitting directly under the release header with no ### Added/Changed/Fixed section; this is harmless for bin/release, but the changelog is not fully on the one convention the card describes
  • v0.11.4, v0.11.1 and v0.11.0 list their sections as Changed/Fixed/Added instead of Added/Changed/Fixed; leaving that alone is fine for a headers-only PR, but the card could have said so
  • The card says Julia tests were not run and GitHub CI is pending; that is acceptable because no .jl file changed, but CI should be green before merge

claude, rubric CLEAN_CODE.md. A different lab from the implementer
on purpose: a reviewer sharing its blind spots would not flag its mistakes.

@1-Bort-1 1-Bort-1 added agent:queued Agent task state agent:running Agent task state and removed agent:ci Agent task state agent:queued Agent task state labels Oct 6, 2026
@1-Bort-1 1-Bort-1 added agent:ci Agent task state and removed agent:running Agent task state labels Oct 6, 2026
@1-Bort-1

1-Bort-1 commented Oct 6, 2026 •

Copy link
Copy Markdown
Member Author

Local full suite: FAIL (2 min, Julia 1.13.0, one cell of the matrix)

    init_springs!           |   34                    34     0.0s
    init_masses!            |   11                    11     0.0s
    calc_particle_forces!   |   11                    11     0.3s
    init                    |   11                    11     0.0s
    initial_residual        |    1              1      2     0.6s
    inner_loop!             |   11                    11     0.1s
    calc_aero_forces!       |   11                    11     0.2s
    test_loop               |   33                    33     0.3s
    test_residual!          |   30              9     39     0.5s
    test_getters            |    7              1      8     0.1s
    test_find_steady_state  |           1              1     1.3s
RNG of the outermost testset: Random.Xoshiro(0x88912828fa2bc1ed, 0x3e49d4ac96db3351, 0x8c2382e87071ef86, 0x4843409ade922ce3, 0xf9f6f8f506f643b3)
ERROR: Package KiteModels errored during testing
Stacktrace:
  [1] pkgerror(msg::String)
    @ Pkg.Types ~/.julia/juliaup/julia-1.13.0+0.x64.linux.gnu/share/julia/stdlib/v1.13/Pkg/src/Types.jl:68
  [2] test(ctx::Pkg.Types.Context, pkgs::Vector{PackageSpec}; coverage::Bool, julia_args::Cmd, test_args::Cmd, test_fn::Nothing, force_latest_compatible_version::Bool, allow_earlier_backwards_compatible_versions::Bool, allow_reresolve::Bool)
    @ Pkg.Operations ~/.julia/juliaup/julia-1.13.0+0.x64.linux.gnu/share/julia/stdlib/v1.13/Pkg/src/Operations.jl:3148
  [3] test
    @ ~/.julia/juliaup/julia-1.13.0+0.x64.linux.gnu/share/julia/stdlib/v1.13/Pkg/src/Operations.jl:3026 [inlined]
  [4] test(ctx::Pkg.Types.Context, pkgs::Vector{PackageSpec}; coverage::Bool, test_fn::Nothing, julia_args::Cmd, test_args::Cmd, force_latest_compatible_version::Bool, allow_earlier_backwards_compatible_versions::Bool, allow_reresolve::Bool, kwargs::@Kwargs{io::IOContext{IO}})
    @ Pkg.API ~/.julia/juliaup/julia-1.13.0+0.x64.linux.gnu/share/julia/stdlib/v1.13/Pkg/src/API.jl:586
  [5] kwcall(::@NamedTuple{io::IOContext{IO}}, ::typeof(Pkg.API.test), ctx::Pkg.Types.Context, pkgs::Vector{PackageSpec})
    @ Pkg.API ~/.julia/juliaup/julia-1.13.0+0.x64.linux.gnu/share/julia/stdlib/v1.13/Pkg/src/API.jl:562
  [6] test(pkgs::Vector{PackageSpec}; io::IOContext{IO}, kwargs::@Kwargs{})
    @ Pkg.API ~/.julia/juliaup/julia-1.13.0+0.x64.linux.gnu/share/julia/stdlib/v1.13/Pkg/src/API.jl:172
  [7] test(pkgs::Vector{PackageSpec})
    @ Pkg.API ~/.julia/juliaup/julia-1.13.0+0.x64.linux.gnu/share/julia/stdlib/v1.13/Pkg/src/API.jl:161
  [8] test(; name::Nothing, uuid::Nothing, version::Nothing, url::Nothing, rev::Nothing, path::Nothing, mode::PackageMode, subdir::Nothing, kwargs::@Kwargs{})
    @ Pkg.API ~/.julia/juliaup/julia-1.13.0+0.x64.linux.gnu/share/julia/stdlib/v1.13/Pkg/src/API.jl:189
  [9] test()
    @ Pkg.API ~/.julia/juliaup/julia-1.13.0+0.x64.linux.gnu/share/julia/stdlib/v1.13/Pkg/src/API.jl:178
 [10] top-level scope
    @ none:1
 [11] eval(m::Module, e::Any)
    @ Core ./boot.jl:489
 [12] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:310
 [13] _start()
    @ Base ./client.jl:577

@1-Bort-1 1-Bort-1 added agent:queued Agent task state agent:running Agent task state agent:ci Agent task state and removed agent:ci Agent task state agent:queued Agent task state agent:running Agent task state labels Oct 6, 2026
@1-Bort-1
1-Bort-1 marked this pull request as ready for review October 6, 2026 12:24
@1-Bort-1 1-Bort-1 added agent:review Agent task state and removed agent:ci Agent task state labels Oct 6, 2026
@1-Bort-1
1-Bort-1 requested a review from 1-Bart-1 October 6, 2026 12:25

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent:review Agent task state

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bring KiteModels' changelog to the release convention

1 participant