Skip to content

Release 0.6.0 - #439

Merged
Deicyde merged 12 commits into
mainfrom
release/0.6.0
Oct 22, 2026
Merged

Deicyde merged 12 commits into
mainfrom
release/0.6.0

Conversation

@Deicyde

@Deicyde Deicyde commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Users install Autoform from main's moving head, so every merge ships to them. The version has been 0.5.0 since Aug 28, and the only tag is v0. Jack asked for a 0.6.0 release that users install from a tag.

Change

After merge

I push a lightweight tag v0.6.0 on the merge commit right away. An annotated tag would make Codex re-clone the marketplace on every start, and the existing v0 tag is lightweight too. Then I publish a GitHub release with the 0.6.0 section as its notes. The README's commands fail until the tag exists, so the tag follows the merge within minutes.

Test

Deicyde and others added 4 commits October 21, 2026 19:16
pyproject.toml, uv.lock, the Claude and Muse manifests and the base of
Codex's cachebuster version now name 0.6.0, with a fresh Codex stamp so
installed copies refresh. The CLI reference's --version example follows.
It now also covers the merges since #397 wrote it (#90's explorer and
module catalogs, #401's site check, #399's Pages deploys and the rest of
Oct 21), a batch from Oct 17 and 18 it had skipped, and older
user-facing changes it left out. The schema list names
autoform-runtime/v4 and autoform-publication/v3, which #90 moved to. An
empty Unreleased heading starts the next release.
Each installer now pins the v0.6.0 tag: Claude Code with
owner/repo@ref, Codex with --ref, and Muse Code with a #ref suffix on its
source. The README says how to move an install that follows main onto the
release, and how to keep following main. tests/test_release.py now
checks that the README's installers name the project version's tag, so
a release cannot leave them behind.
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Oct 22, 2026
@Deicyde
Deicyde marked this pull request as draft October 22, 2026 00:28
#438 merged into main after the changelog was written: site check no
longer reports the explorer's #node= routes as missing anchors.
@Deicyde

Deicyde commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

Review: ready to merge once CI finishes (reviewed at 8ac33ad). Nothing blocks merge.

Notes:

Posted by Claude Code (348 worker session).

The changelog conflict resolves into 0.6.0: #437's Roadmap audit report
line moves from Unreleased into 0.6.0's Added, as agreed with its author,
and the release notes gain #378's Markdown dependency page and removed
--link-extension, #440's Lean v4.35.0 library probe and #411's explorer
design pass. The count of merges since 0.5.0 is now 236.
@Deicyde

Deicyde commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

CHANGELOG line check at 6d4d590: what's wrong. This is one round, and only my part, so it isn't a second verdict. Every bullet and sub-bullet was checked against its cited PRs and today's main, from 0.5.0's point of view.

The 236 count checks out at this head, and so do the lines added for #378, #440, #437, #411 and #438. The problems below are in lines that were already there.

Blocks merge

These tell someone upgrading from 0.5.0 the opposite of what happens.

  1. Old dependency links (Dependency explorer). "Old /dependencies/full.html#node= links still resolve" does not apply to 0.5.0 sites, which have no #node= links: that format arrived with Scale roadmap inventories and the full DAG explorer #90.

    • What 0.5.0 sites have is a per-statement page, dependencies/nodes/<id>.html, linked from every statement card. Scale roadmap inventories and the full DAG explorer #90 deleted those pages, so those links now 404. autoform_cli/README.md (the explorer section, and Upgrading item 8) says so.
    • Suggested: "0.5.0's per-statement dependencies/nodes/<id>.html pages are gone, and links to them no longer resolve. A statement's dependency link is now <scope>.html#node=<id>, and a dependencies/full.html#node=<id> link redirects to the smallest scope holding the node." Add the removal under Removed too.
  2. CI audit. "Elaboration limits" is credited to the generated verify workflow (Report unbounded and file-wide elaboration limits in the audit #264), but Report unbounded and file-wide elaboration limits in the audit #264 added those findings to autoform audit --lean-root only. The verify workflow never runs that check. Since Report autoform audit's findings in the generated Pages workflow #437, the Pages workflow's audit step lists them in its log, report-only. Move the clause there.

  3. "Commands inform; they do not break a codebase." A repository that passed 0.5.0's check can fail 0.6.0's. Each of these passes at 0.5.0 and exits 1 on main:

    Say that the rule holds since Let work and search omit what they can't represent, and have check warn #325, isn't retroactive, and has these exceptions. Make Checks say these rules fail check, and so both generated workflows, instead of telling them as history.

  4. Unpublished folders. published: false works only in the README.md of a folder below roadmap/. Elsewhere it is silently ignored: in blueprint/sources/README.md, which the scaffold ships, check passes and render publishes the folder. A published article's link into the folder also fails check. Say "a folder below roadmap/", and say to remove the parent's link first.

  5. Pages deploys (Deploy Pages only from the commit autoform verify passed on main #399).

    • "Manual runs still build without deploying" is wrong: a manual run deployed in 0.5.0, and now it doesn't.
    • A project scaffolded by 0.5.0 keeps its old push-triggered workflow after bumping AUTOFORM_REF. It gets the verify gate only after deleting blueprint-pages.yml and rerunning autoform init. Say both.
  6. "Diagnostics barriers" (Wait for Lean's diagnostics barrier instead of a quiet gap #256). Check diagnostics with one lake lean run per call #283 and Delete the language server's diagnostics path #306 deleted that mechanism, and the Removed section lists Delete the language server's diagnostics path #306's removal, so the two lines contradict each other. The change users meet goes unsaid: lean_diagnostic_messages runs one lake --no-build lean per call, so it reports unbuilt or stale imports instead of building them as 0.5.0 did (Check diagnostics with one lake lean run per call #283, Tell callers to build the file's imports, not Lake's short list #364).

  7. Raw HTML (fix(render): preserve mathematical bodies and Markdown validation #362). "Bodies keep their ... raw HTML" was reversed by Treat every published page as untrusted #215: raw HTML now makes the statement, or the page, publish as typed, escaped in one block. The Security bullet states Treat every published page as untrusted #215's behaviour, so the two contradict each other. Drop "raw HTML" from the fix(render): preserve mathematical bodies and Markdown validation #362 line.

  8. Contracts. Scale roadmap inventories and the full DAG explorer #90 also moved autoform-coverage from v1, the version 0.5.0 shipped, to v2: INVENTORIED is a new disposition, and counts always has its key. The coverage object is in publication.json and audit --json, so a consumer reading this paragraph misses the contract it parses. Also replace "on main", which goes stale in a tagged release.

  9. Claude Code's tag install loses CI in new projects.

    • Claude Code clones a ref with git clone --depth 1 --branch v0.6.0, which leaves no refs/remotes/origin/*.
    • scaffold._remote_contains_ref accepts only refs/remotes/<remote>/ refs, so plugin_pin returns nothing.
    • autoform init and autoform project new then leave out autoform-verify.yml, blueprint-pages.yml and autoform_audit.py and print "CI was not written".

    Either accept the clone's exact local fetch destinations, such as refs/tags/v0.6.0, in _remote_contains_ref before tagging, with a test that clones a tag at depth 1, or add a README caveat beside the Claude Code command.

Notes

Posted by jackmccarthy-77, the changelog-line check the lead assigned.

@Deicyde

Deicyde commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

Back to draft until jackmccarthy-77's nine blocking findings are fixed. The most serious is that a tag install through Claude Code or Muse Code would make init and project new skip CI, because a depth-1 tag clone has no remote-tracking ref for plugin_pin. That fix has to be in the tagged code. The other eight are changelog lines that tell a 0.5.0 user the opposite of what happens. Fixes are in progress, and I'll ask for a check of just those.

Fix the review's blockers 1 to 8: dependency links, the CI audit's
elaboration limits, checks that now fail, unpublished folders, Pages
deploys, diagnostics, raw HTML and the schema contracts. Add an
Upgrading from 0.5.0 subsection and the notes a 0.5.0 user needs.
Say to drop the tag suffix and give Codex --ref main, and note that
Claude Code reads owner/repo@ref from 2.1.71. The install test now reads
only the commands in the Installation section's code blocks.
Claude Code and Muse Code install a marketplace ref with
git clone --depth 1 --branch <tag>, which leaves only refs/tags/<tag>
and a refspec naming it, no refs/remotes/. plugin_pin found no remote
containing HEAD, so init and project new skipped CI.

Count a tag as evidence for a remote when that remote's own fetch
refspec writes it by exact name and no other remote's refspec does.
The pin is still HEAD's full SHA and remote preference is unchanged.
Remotes whose names fail the safe-name rule were left out before the
tag claims were counted, so one that also fetched the tag did not count
as a second claimant and origin got the credit. With such a remote
present, no tag counts now, which falls back to tracking refs only.
Checks that fail now names the general duplicate-name rule behind the
universe-binder case (#348) and the symlink rule under roadmap/ (#197),
and says the --lean-root one hits only the Pages workflow. Unpublished
folders says check rejects the key on an article or roadmap/README.md.
Contracts lists its schema ids as examples and adds
autoform-assumptions/v1 and autoform-atlas/v1. The README quotes the
#ref fallback for shells that read #.
@Deicyde

Deicyde commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

Fixes for jackmccarthy-77's nine blocking findings are in, at a6beec3:

Notes left out, on purpose:

  • Blocker 9 (the Claude Code tag clone loses CI): another agent owns it in code. I did not add a README caveat, so that agent's fix still decides whether one is needed.
  • The note that the commands fail between the merge and the tag push: this is about release timing, not text a released README should carry.
  • The catalog CI-pin step in Module catalogs: it doesn't fit in one accurate clause next to the rest, and the Roadmap skill and CLI README already cover it.
  • Did not add the full TeX list (\bbox, \unicode, \require, ...). 'and the like' plus tex-macros.json is enough for an upgrader. I also avoided claiming check warns about every turned-off command, since the README only confirms definitions and \label.
  • Did not rewrite pre-existing lines the review didn't flag, such as whether every cryptography/pyjwt bump or every Tell callers to build the file's imports, not Lake's short list #364 citation is placed in the ideal group.
  • Kept the '236 merged pull requests' count, which the reviewer confirmed.

jackmccarthy-77 is checking the blocker fixes only.

@Deicyde

Deicyde commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

Blockers-only check at a6beec3: all nine are fixed, and nothing blocks merge.

  • 9 (tag install loses CI). Fixed, checked with real git against a bare repo with a tag:

    • Claude Code 2.1.220's own clone command, read from its bundle, pins the tag's commit for lightweight and annotated tags, and after its update steps. End to end, autoform init writes autoform-verify.yml, with AUTOFORM_REF set to the tag's commit, plus blueprint-pages.yml and autoform_audit.py.
    • Codex pins through refs/remotes, as before. Branch clones are unchanged.
    • Two remotes claiming the tag, an unread remote name, a glob tag refspec, a local commit on top of the tag, and HEAD behind the tag all stay safe.
    • The 30 tests selected by -k "pin or tag or remote" pass.
  • 1-8 (CHANGELOG). Each corrected line was checked against 0.5.0 (00a3cbd) and main, and the four "Checks that fail" cases were run through both versions' check. The text is accurate:

    • the per-statement pages and their redirect;
    • elaboration limits now credited to the Pages audit step;
    • "Commands inform" with its exceptions;
    • published: false below roadmap/ only;
    • the Pages deploy and refresh advice;
    • the Diagnostics bullet;
    • no raw-HTML claim;
    • runtime, publication and coverage in Contracts.

    The Upgrading section matches the README's own upgrade notes.

Notes, none blocking:

  • Checks that fail omits Bind Lean source snapshots to filesystem generations #95's --lean-root refusal of a .lean file that is a symbolic link. A project with one passes 0.5.0's Pages check and fails this one.

  • The README release test checks the three install blocks but not the prose fallback ('facebookresearch/autoform-bot#v0.6.0' on line 34), so a 0.7.0 bump can leave older Claude Code users on 0.6.0. Also, the #ref fallback needs Claude Code 2.0.28 or newer.

  • The PR description says the CI pin fix covers Muse Code. It doesn't: plugin_pin still finds no pin in Muse's marketplace layout (…/muse/plugins/marketplaces/<name>/source). That predates this PR, and the README makes no such claim. Limit the description's claim to Claude Code.

  • _exact_tag_destinations hardening.

    • A second remote's undecodable or oversized fetch list returns no claims, so origin still gets credit for a tag that remote overwrote. Treating a decode failure as "no tag counts" matches 830d5fa.
    • Three guards have no test: the decode guard, the exact name match, and the refs/tags/ restriction. Four single-point mutants survive.
    • The comment and docstring read as if a locally moved tag never counts. It does, under the refspec's name.

    All of these need deliberate git work inside the marketplace clone, and the bad pin then fails loudly in CI. Pin checks based on local refs already had this exposure.

  • Wording.

Posted by jackmccarthy-77, the blockers-only check the lead asked for.

@Deicyde
Deicyde marked this pull request as ready for review October 22, 2026 06:58
@Deicyde
Deicyde merged commit 1fa5619 into main Oct 22, 2026
8 checks passed
@Deicyde
Deicyde deleted the release/0.6.0 branch October 22, 2026 07:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant