0.0.25 plan: the two tracks' last release, and the release kit¶
Status: planned (2026-11-03). 0.0.24 is tagged (release-0.0.24)
and publishing; the 0.0.25 versions open in the pull request that records
its publication.
Planned on 2026-11-03. 0.0.24 took almost all of the two tracks (34 of the apps track's 36 issues, edition 2024, the signer's GitHub App, the threat model and the call for a community plugin), so the maintainer shortened them: 0.0.25 finishes both, and the release after it is 0.1.0, the API review of stage 3. It belongs to the stage before 0.1.0 in the plan to 1.0.0.
Target: about 7 November 2026. The maintainer aims 1.0.0 at the
beginning of December (the 1.0.0 plan's decision 16), which puts 0.1.0
about 14 November and 1.0.0-rc.1 about 19 November. So 0.0.25 takes
what is ready in about four days; the rest moves on under decision 1
below.
Decisions¶
The maintainer's calls:
- 0.0.25 is the last release before 0.1.0 (2026-11-03). It closes both tracks; 0.0.26 to 0.0.28 are not planned. Whatever of the tracks is not ready by 0.0.25's release is named in its notes and moves into 0.1.0 or later, rather than holding up the review. Recorded in the 1.0.0 plan as decision 15.
- The release runs on release-kit
(2026-11-03), at v1.2.0, the version that fixed the review's findings
(release-kit #3 to #9).
scripts/release_cohort.pyandpypi-release.ymlretire once it has published a release. - Still waiting, unchanged: lumis 0.17 (rs-rich-lumis's minimum Rust would be 1.95), Memo's illustrations (the maintainer's reference pictures), #791 (a residential network) and #790 (does not reproduce).
What is left of the tracks¶
Read on main at 9a02fdb1.
- Cornacai (the design, phase 4): resume
(
session/load, when the agent offers it) and a session store; sign-in (ACP'sauthenticateand the agent's auth methods); agent terminals on a PTY instead of pipes; the marketplace'sagentkind, for finding and installing agents. PORTING's Cornacai rows are 🟡 for these. - intuiTUIve's Textual parity (the audit):
the rest of #812's stylesheet properties, and the audit's named gaps:
DataTablerow labels and cells holding renderables, separators in an option list, and highlighting state carried into aTextArea's view from above it. - Windows:
rich console's log socket and Noctiluca's control socket are Unix only; both need a named pipe. - Track 2: PORTING's intuiTUIve rows still say "wave 2" and "wave 3" for work 0.0.24 shipped; the 0.0.24 issues are still open (#785 to #789, #792, #794, #796 to #798, #800, #804, #812, #821).
Workstreams¶
1. Release with release-kit (rs-rich-cli, release tooling)¶
release-kit.yml:name_from: rs-rich-cli; every crate ofRELEASES.toml, in its order, as acrates.iopackage;rs-richon PyPI withtag: "python-v{version}"(the crate tagrs-rich-v0.0.12already exists) and a maturin artifact per target whosetestinstalls the wheel and imports it.python3 release.py installfrom release-kit v1.2.0 puts the kit under.github/release-kit/;release.ymlkeeps this repository's own jobs (cargo-semver-checks, the playground; no job outside the kit's may start withpublish) and calls ci.yml withcheckout_ref.- The record tags the old scripts wrote carry no registry; the kit's tag
check needs one.
release.py checkruns against the existing tags before the switch, and a note indocs/BRANCHING.mdsays which tags predate it. docs/BRANCHING.mdand the release skill describe the kit's commands (tag,gate --verify-only,consume).- The maintainer: moves PyPI's trusted publisher to
release.ymlwith thepypienvironment. - Verified by
release.py checkandplanin CI, a dry run oftag, and the kit's own tests; the first real use is 0.0.25's release.
2. Cornacai, phase 4 (cornacai, rs-rich-acp, rs-rich-marketplace)¶
Clean room as before: Toad's source is not read.
- Resume:
session/loadwhen the agent advertisesloadSession, and a session store in Cornacai's state directory; a session list to reopen. - Sign-in:
authenticatewith the agent's advertised methods, asked for when a prompt fails for want of it. - Agent terminals on a
LocalPtybehind a setting, falling back to pipes. - The marketplace's
agentkind: a listing kind for an ACP agent's command, checked like other kinds; Cornacai's agent picker reads it. - Replay-transcript tests for each, and Cornacai's tapes updated.
3. The rest of Textual parity (rs-rich-intuituive, core)¶
-
812's remaining properties, each with a stylesheet test.¶
DataTablerow labels and renderable cells; option-list separators; carried highlighting state forTextArea.- The audit's rows move to ✓ as each lands.
- The fuzz finding of 2026-11-03 (fuzzing):
921 bytes of
&nesting selectors and,lists took the parser 12 seconds and 1.4 GB. Fixed on 2026-11-03, ahead of the waves: each nested rule was read once per parent selector and each&replaced by the parent's text, so selectors grew exponentially. Nesting is now at most 32 deep and expansion bounded, with the input as a regression test (fuzzing). This comes first: it stops the four-week fuzz clock of the 1.0 exit criteria until it is fixed.
4. Named pipes on Windows (rs-rich-interact, rs-rich-cli, noctiluca)¶
- rs-rich-interact's
controlsocket andrich consolegain a named-pipe transport on Windows, with the same private-access rule as the Unix socket (the pipe's security descriptor admits only the current user). - The Windows CI job runs their tests.
5. Bookkeeping, and a head start on 0.1.0 (docs, all crates)¶
- PORTING's 🟡 rows get their true statuses; the shipped 0.0.24 issues are closed with the release that carried them.
#![warn(missing_docs)]on the stable set, with the count per crate recorded, and as many filled as the wave allows: 0.1.0 sets it to deny.- An inventory of every foreign type in the stable set's public APIs (from the API snapshots), as the list 0.1.0's public-dependency review works through. No API changes here; the review decides.
6. 0.0.24's publication (docs, versions)¶
After release-0.0.24 publishes: the publication notes; the 0.0.24 docs
pinned to 9a02fdb1 in docs-versions.toml (the tags are on c2d65880,
the commit before the release notes merged, and their code is the same);
and the 0.0.25 versions opened.
Order of work¶
The stylesheet fuzz fix goes to main on its own, ahead of the waves:
the four-week fuzz clock restarts with the first clean nightly run after
it merges, and 1.0.0's date rests on that clock.
- Wave 0: this plan; then 0.0.24's publication with the versions opened (workstream 6).
- Wave 1, in parallel worktrees, one integration pull request: workstreams 1 to 5.
- The release pull request, then the maintainer tags with release-kit:
python3 .github/release-kit/scripts/release.py tag.
Every agent commits at milestones (WIP-marked), backs up to
claude/next-priority-items-3c5p8e-wip-<name>, and keeps
the handoff note current.
Verification¶
- Every pull request:
cargo fmt --all --check,cargo clippy --all-targets --all-features -- -D warnings, the tests, and CI green, including the browser, Windows and macOS jobs, the tapes and the API and SemVer job. - Cornacai: replayed transcripts for resume, sign-in and the PTY terminals; one run with a real agent by hand, noted in the pull request.
- Named pipes: tests on the Windows job, including one that another user's access is refused where CI can show it.
- The release:
scripts/validate_release.py, goldens regenerated byte for byte from rich 15.0.0, the tapes with a release build, both docs sites, the MSRV checks, and release-kit'scheckandplanon the release commit.