| 1 | # Codewhale v0.9.0 Release Ledger |
| 2 | |
| 3 | > **Published 2026-07-16.** This began as the release-candidate ledger; the |
| 4 | > publication record below is authoritative. The candidate notes retained |
| 5 | > below it are historical release-audit evidence, not current distribution |
| 6 | > status. |
| 7 | |
| 8 | ## Publication record |
| 9 | |
| 10 | | Surface | Published state | |
| 11 | |---|---| |
| 12 | | Exact release source SHA | `d167c07c96282411956ea7f35ddb8227afa1402f` | |
| 13 | | GitHub tag and release | [`v0.9.0`](https://github.com/Hmbown/CodeWhale/releases/tag/v0.9.0) | |
| 14 | | GitHub Release assets | 29 public assets, verified as produced by Release workflow `29532521426` from the release SHA | |
| 15 | | crates.io | All 18 v0.9.0 crates published | |
| 16 | | npm | `codewhale@0.9.0` published with its binary version pinned to `0.9.0` | |
| 17 | | Post-publication verification | `scripts/release/check-published.sh 0.9.0` completed successfully | |
| 18 | |
| 19 | The later CI-fixture hardening commit `cd2382888f8f9eb2a75c1eaa8c550f2468638984` |
| 20 | is deliberately not part of v0.9.0; it is post-release maintenance on `main`. |
| 21 | |
| 22 | ## Historical release-candidate record |
| 23 | |
| 24 | The candidate identity and gates below are preserved as the pre-publication |
| 25 | snapshot. In particular, references to an absent tag, release, or registry |
| 26 | package describe the state before the published record above. |
| 27 | |
| 28 | | Surface | Pre-publication state | |
| 29 | |---|---| |
| 30 | | Workspace Cargo version | `0.9.0` after the final metadata bump | |
| 31 | | npm wrapper manifest | `codewhale@0.9.0` after the final metadata bump | |
| 32 | | Candidate branch | `codex/v0868-final-integration` | |
| 33 | | Exact release source SHA | Assigned only after the reviewed candidate merges to `main` | |
| 34 | | GitHub `v0.9.0` tag | Absent | |
| 35 | | GitHub `v0.9.0` release | Absent | |
| 36 | | crates.io `codewhale-*` release set | `0.9.0` absent; published crates remain at `0.8.67`, while `codewhale-lane` has no public version yet | |
| 37 | | npm `codewhale` | `0.9.0` absent; latest is `0.8.67` | |
| 38 | |
| 39 | `scripts/release/check-published.sh 0.9.0`, the GitHub release API, and the |
| 40 | remote tag list were checked again after publication on 2026-07-16. A dated |
| 41 | changelog section and local version metadata alone do not make a public release. |
| 42 | |
| 43 | ## Acceptance accounting |
| 44 | |
| 45 | The entire issue and pull-request history formerly assigned to the v0.8.68 |
| 46 | milestone is now part of v0.9.0. The closed v0.8.68 milestone is an empty |
| 47 | superseded marker, not a separate release; unfinished work is assigned to |
| 48 | v0.9.1 or later. |
| 49 | |
| 50 | GitHub issues stay open until the candidate is pushed, reviewed, and its final |
| 51 | evidence is attached. As of the 2026-07-15 refresh, the candidate contains |
| 52 | fixes and regression coverage for bounded `@` discovery (#4365), Kimi context |
| 53 | budgeting (#4368, #4378), Simplified Chinese setup terminology (#4369), |
| 54 | approval-time transcript review (#4371), the first-turn `remember` catalog |
| 55 | (#4373, #4377), required |
| 56 | confirmation blockers (#4374), and cached approval denial recovery (#4375 and |
| 57 | #4385). |
| 58 | Named custom-provider identity (#4334) is integrated across TUI sessions, |
| 59 | `exec --resume`, runtime threads, Fleet receipts, exports, and fail-closed |
| 60 | restore without persisting secrets. |
| 61 | |
| 62 | Final stopship dogfood also hardened the runtime contract itself: declarative |
| 63 | step and wall-time limits now reach each child (including launch-queue wait), |
| 64 | promoted artifacts keep enough evidence for the next role, explicit tool-free |
| 65 | roles omit provider tool fields, and a terminal blocked gate fails the Workflow |
| 66 | and Lane instead of producing a false success receipt. The checked-in fixture |
| 67 | uses an exact five-file evidence query, five explicit gates, and substantive |
| 68 | handoff artifacts; a fresh live receipt is still required below. |
| 69 | |
| 70 | The following work is not honestly closed by this candidate audit: |
| 71 | |
| 72 | - [#4175](https://github.com/Hmbown/CodeWhale/issues/4175), |
| 73 | [#4177](https://github.com/Hmbown/CodeWhale/issues/4177), |
| 74 | [#4178](https://github.com/Hmbown/CodeWhale/issues/4178), and |
| 75 | [#4179](https://github.com/Hmbown/CodeWhale/issues/4179) still require |
| 76 | completed live Fleet role-resolution, stopship-dogfood, and gate/handoff |
| 77 | receipts before their broader acceptance can close. |
| 78 | - [#4236](https://github.com/Hmbown/CodeWhale/issues/4236) and |
| 79 | [#4242](https://github.com/Hmbown/CodeWhale/issues/4242) retain official |
| 80 | Termux scope and real-device runtime QA. |
| 81 | |
| 82 | The same refresh found #4372 safe and fully green; it was merged to `main` as |
| 83 | `9035890c4`, preserving @nightt5879's original commit and @CCChisato's |
| 84 | co-author credit for #3915. Four community PR heads are preserved as exact |
| 85 | merge ancestry in this candidate: #4367 by @LeoLin990405, #4377 and #4378 by |
| 86 | @mvanhorn, and #4385 by @nightt5879. The candidate keeps the stronger integrated |
| 87 | implementations while retaining those contributors' complete commits instead |
| 88 | of copying their changes without ancestry. The final refresh leaves #4383's |
| 89 | green Windows cancellation hardening for v0.9.1 because no v0.9.0 field failure |
| 90 | reproduces it; #4384 lacks the required release checks, while #4381 and #4379 |
| 91 | are clean post-release feature scope. #4199 remains explicitly marked not to |
| 92 | merge, and the older conflicting or draft pull requests stay outside v0.9.0. |
| 93 | These decisions must be rechecked immediately before the release PR merges. |
| 94 | |
| 95 | Provider-route degradation, a missing Fleet terminal receipt, or a role/gate |
| 96 | failure is a failed release gate, not an external/manual gap. The only accepted |
| 97 | external platform gap is the explicitly documented real-device Android/Termux |
| 98 | runtime pass; the target remains preview-only until that evidence exists. |
| 99 | |
| 100 | ## Historical verification and publication gates |
| 101 | |
| 102 | Earlier metadata checks and Cargo dry-runs predated the final integration and |
| 103 | did not count as exact-HEAD evidence. These gates were completed for the |
| 104 | published release source; they remain here to document the release process: |
| 105 | |
| 106 | 1. Run `scripts/release/check-versions.sh`, |
| 107 | `scripts/release/check-ohos-deps.sh`, changelog synchronization checks, |
| 108 | `cargo fmt --all -- --check`, and `git diff --check`. |
| 109 | 2. Run the locked workspace `check`, strict all-target/all-feature `clippy`, |
| 110 | full workspace tests, the TUI PTY/runtime lifecycle gates, and every focused |
| 111 | stopship regression added during this integration. |
| 112 | 3. Run `scripts/release/publish-crates.sh dry-run`, build the CLI and TUI with |
| 113 | `--release --locked`, and smoke the npm wrapper against those artifacts. |
| 114 | 4. Install that exact commit with `scripts/release/install-dogfood.sh`; verify |
| 115 | all three global entry points report the same version and commit. Exercise |
| 116 | the underwater shell in Cursor at the release terminal sizes, including |
| 117 | Operate messaging/tools, Ask approvals, approval-time transcript review, |
| 118 | settings, routes, links, Fleet setup/steering/cancellation, locale-aware |
| 119 | worker names, reduced motion, and custom-provider save/resume/fail-closed |
| 120 | behavior. |
| 121 | 5. Run the real tmux stopship Workflow with the release Fleet and 360k aggregate |
| 122 | budget. Preserve role-resolved child, gate, handoff, and terminal receipts |
| 123 | for #4175/#4177/#4178/#4179; a partial run does not pass: |
| 124 | |
| 125 | ```bash |
| 126 | codewhale workflow run stopship --fleet stopship --runtime tmux \ |
| 127 | --token-budget 360000 --goal "Verify v0.9.0 release receipts without editing the workspace" |
| 128 | ``` |
| 129 | 6. Push the candidate, open and review a PR against `main`, wait for required |
| 130 | CI, merge, and verify the merge commit before updating issue accounting. |
| 131 | 7. Create `v0.9.0` either through the repository's release-tag workflow or a |
| 132 | signed local tag. The workflow path creates an unsigned lightweight tag, so |
| 133 | verify the tag and GitHub release resolve to the intended `main` commit |
| 134 | instead of describing that path as signed. |
| 135 | 8. Wait for release assets and run |
| 136 | `scripts/release/verify-release-assets.sh 0.9.0` **before** publishing the |
| 137 | ordered Cargo crate set and `codewhale@0.9.0` to npm. Require all 29 public |
| 138 | assets, both checksum manifests, the matching successful workflow SHA, and |
| 139 | the exact clean tag-checkout guard. `codewhale-lane` is new on crates.io in |
| 140 | this release; its first publish is an authentication stop line if the token |
| 141 | cannot create a crate. |
| 142 | 9. Run `scripts/release/check-published.sh 0.9.0` and verify GitHub checksums, |
| 143 | GHCR, CNB, Cargo installs, npm wrapper resolution, release-note contributor |
| 144 | credit, and registry parity. `deepseek-tui` remains deprecated/unpublished; |
| 145 | the experimental runtime SDK/plugin is not part of this release. |
| 146 | |
| 147 | The publication record at the top records the final source SHA, release URL, |
| 148 | publication date, and registry checks. The local experimental Z.AI plugin draft |
| 149 | remained outside v0.9.0 and was not installed or published as part of this |
| 150 | release. |
| 151 |