Skip to content

Cut the v0.6.0 release #3533

Open
Open

Description

@ESultanik

Summary

Cut the v0.6.0 release once every other issue in the milestone has merged. This is the last item in
the milestone and it is blocked by all of them.

There are 161 commits since the v0.5.6 tag, and pyproject.toml:12 still reads
version = "0.5.6".

Scope

  1. Bump the version. pyproject.toml:12 is the whole change. polyfile/polyfile.py:19 reads
    __version__ from package metadata through importlib.metadata.version("polyfile"), so nothing
    else carries a hard-coded version string.

  2. Write polyfile_0.6.0.md. Follow the structure of polyfile_0.5.6.md: Performance
    Improvements, Bug Fixes, New Features, Magic Definitions, Breaking Changes, Dependencies. Omit a
    section that has nothing in it.

    The release covers two bodies of work. Summarize rather than list every issue:

    Call out under Breaking Changes anything in this milestone that changes observable output. At
    minimum: An untyped indirect offset defaults to big endian, where libmagic uses host byte order #3499 changes how an untyped indirect offset reads its field, A BOM-prefixed JSON document is reported as JSON, where file reports Unicode text #3500 changes what a
    BOM-prefixed JSON document reports, --format file is rejected, json is duplicated in the choices, and the help example uses the wrong flag #3497 changes the accepted values of --format, and try_all_offsets is accepted and ignored, and the CLI flag for it is commented out #3465
    removes the try_all_offsets parameter from Matcher and Analyzer.

  3. Verify the distribution. uv build, then uvx twine check dist/*. The distributions job in
    .github/workflows/tests.yml already asserts that the wheel is built from the sdist, that no
    non-permissive .ksy reached the sdist, and that the package-data counts match git ls-files;
    confirm it is green rather than re-deriving it.

Note

Publishing is out of scope for the pull request. .github/workflows/pythonpublish.yml runs on
release: published and uploads through PyPI Trusted Publishing, so the actual release is cut from
the GitHub UI after this merges.

Activity

  1. added this to the v0.6.0 milestone on Sep 11, 2026
  2. 1 remaining item

  3. ESultanik commented on Sep 11, 2026

    @ESultanik
    CollaboratorAuthor

    Methodology for the release notes: audit the history, do not reconstruct it

    Build polyfile_0.6.0.md from a complete audit of every commit message and pull request
    description since the v0.5.6 tag
    , rather than from a summary or from the milestone's issue list.
    The milestone captures what was planned; the history captures what actually shipped, including work
    that arrived outside the milestone.

    Scope

    Measured 2026-09-11:

    count
    commits since v0.5.6 225
    merge commits (pull requests) 73
    pull requests merged in the window 70

    v0.5.6 was tagged 2026-02-11, so the window is seven months.

    git log --oneline v0.5.6..master                 # every commit
    git log --merges --oneline v0.5.6..master        # the pull requests
    gh pr list --state merged --limit 200 --json number,title,mergedAt,body

    Read the pull request bodies, not only the titles. This project writes long ones with measured
    evidence, and the observable behavior change is usually stated there rather than in the subject line.

    What the audit has to surface

    The v0.5.6 notes are the model for structure — Performance Improvements, Bug Fixes, New Features,
    Magic Definitions, Breaking Changes, Dependencies. Drop a section with nothing in it.

    Breaking Changes needs the most care. This release changes observable output in many ways, and
    anyone parsing PolyFile's output is affected. Known examples, which the audit must confirm and
    extend rather than treat as complete:

    Two larger bodies of work also need describing at the right altitude, as themes rather than issue
    lists: the libmagic 5.48 fidelity effort, which ended with all 88 corpus stems matching file and
    KNOWN_FAILURES empty, and the packaging move from setup.py to pyproject.toml with the in-tree
    PEP 517 backend (#3513).

    Also in scope

    • Bump version in pyproject.toml from 0.5.6 to 0.6.0. That single line is the whole bump;
      polyfile/polyfile.py reads __version__ from package metadata.
    • Add uv.lock to .gitignore. It is untracked and unignored today, so it shows as dirty in every
      worktree and gh pr create warns about it on every branch.
    • Verify the distribution: uv build, then uvx twine check dist/*.

    Publishing stays out of scope. .github/workflows/pythonpublish.yml runs on release: published
    and uploads through PyPI Trusted Publishing, so the release itself is cut from the GitHub UI after
    this merges.

  4. ESultanik commented on Sep 12, 2026

    @ESultanik
    CollaboratorAuthor

    Authorization for this issue, from @ESultanik

    Direct push to master is authorized for this issue only, and only if the sole code change is the
    version bump.
    No pull request is needed for that.

    The release commit may contain exactly these:

    1. pyproject.toml — version = "0.5.6" → version = "0.6.0". This is the whole code change;
      polyfile/polyfile.py reads __version__ from package metadata.
    2. polyfile_0.6.0.md — the new release notes.
    3. .gitignore — add uv.lock, authorized separately earlier in the same discussion. It is
      untracked and unignored today, so it shows dirty in every worktree and gh pr create warns on
      every branch.

    If anything else needs changing, stop and open a pull request instead. A stale document found
    while auditing, a failing build, a packaging fix — none of those are covered. The authorization is
    narrow by design: it exists because a version bump plus release notes has nothing to review that
    reading the notes would not already show.

    The release itself is a draft

    Create it as a draft GitHub release against tag v0.6.0. Do not publish it.

    gh release create v0.6.0 --draft --title "PolyFile 0.6.0" --notes-file polyfile_0.6.0.md

    Publishing is what @ESultanik does after reviewing the draft. This matters mechanically, not just
    procedurally: .github/workflows/pythonpublish.yml triggers on release: published and uploads to
    PyPI through Trusted Publishing. A published release ships to PyPI immediately and cannot be
    recalled.
    A draft holds the notes and the tag target without triggering anything.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions