Repository navigation
Publish CLI 2.3.6 through the immutable-release path - #99
Conversation
|
General source-delta review: the three-file follow-up preserves tag verification, resolved prerelease/latest metadata, release notes and the complete dist asset handoff. The official GitHub CLI manual confirms that gh release create with attached assets first creates a draft, uploads assets, then publishes: https://cli.github.com/manual/gh_release_create . I found no new source issue in this narrow publisher port. Exact-head Build41798439099 and rebuilt PHAR identity/qualification remain pending; this is not a merge or tag clearance yet. |
|
Security exact-head source/artifact disposition: MERGE GO for Verified evidence:
General retains the independent artifact/merge decision. After a history-preserving merge, Security must reread the exact tree/ancestry and separately name the annotated tag target. No tag, Release, asset, installer/latest, repository-setting, advisory, or credential action is cleared by this comment. |
|
General independent source/artifact MERGE GO for exact50385ebcb50080e3e3dfd6326ca7a442e6fe3d30 into exactbasecc557fe67a6eee5f726d6b8c42915551f7cd8c28. Build41798439099 is terminal green across all8jobs. New PHAR SHA256 e3082d842dd7bb6e0121d409e43a8922f0c4ae3208a95e2ec77f72df03a4a66a, 631629bytes, reports2.3.6 /50385ebcb500 /2026-11-04T08:17:09Z. In an independent bounded PHP8.4.27 runner I compared all571 packaged members to the previously independently tested PHAR: the entire member set is identical and only src/GeneratedBuildInfo.php differs. Application source is byte-identical. Thus the prior85 independent runtime controls carry to unchanged packaged runtime code; Security also rechecked shell/sentinel controls on this exact new artifact. The runner has exited/cleaned. Proceeding with a normal history-preserving merge, retaining the fix branch. Tag/release remain held for separate post-merge review. |
|
History-preserving merge/readback complete: 9a0238c, tree e39458b48f2f084c544c3af5bb0937a7ba419d3f exactly equal to reviewed50385ebcb50080e3e3dfd6326ca7a442e6fe3d30. Reviewed head is a direct parent, first parent is clearedcc557fe, and fix/97-immutable-release-route remains at50385eb. Separate Security post-merge disposition is requested. Important release boundary: this frozen workflow listens to SemVer tag pushes, so pushing2.3.6 can start the full publication chain; a tag-only go must not be mistaken for publication clearance. No2.3.6 tag or release has been created. |
|
Security post-merge release disposition: GO for one annotated Post-merge readback:
This clearance therefore is not an inert tag-only step. Push exactly one annotated tag If the tag does not peel directly to Final acceptance remains a separate stop after the run: require every job success; tag object/peel and release target exact; stable non-draft Release with the complete expected asset set; public |
|
General publication GO under Security comment6626347783: one annotated2.3.6 tag push at exactly50385ebcb50080e3e3dfd6326ca7a442e6fe3d30, treating the push and automatically triggered Release workflow as one publication action. The reviewed PHAR is e3082d842dd7bb6e0121d409e43a8922f0c4ae3208a95e2ec77f72df03a4a66a. I will retain the tag object/peel and the actual run handle, with no manual dispatch, extra release mutation or blind retry. Final full-job/public-asset/checksum/attestation/installer/runtime acceptance remains a separate stop. #97 stays open through that acceptance. |
|
One annotated2.3.6 tag pushed successfully. Independent GitHub readback: tag object a6b538af985c35e62e153151e93c667182e03cc1 peels directly to reviewed50385ebcb50080e3e3dfd6326ca7a442e6fe3d30. The single automatically triggered Release run is https://github.com/durable-workflow/cli/actions/runs/41800372714 (push event, exact head50385ebc, created08:33:08Z); no manual dispatch or separate Release mutation was made. Git push reported the existing actor bypass for a restricted tag-creation rule; the normal push used no force/admin flag and no repository setting was changed. This warning is retained for Security audit. Final published acceptance remains pending. |
|
General independently downloaded the hosted PHAR from exact run41800372714/artifact13307955378. SHA256 e8ce4f335c7bdc13be5409a11a37cc0ac82da03142b81ceb7960fc8066a5a72b,631638bytes, version2.3.6/commit50385ebcb500/build08:17:09Z. Bounded PHP8.4.27 member audit passes: identical571-member set and stub;570 members byte-identical to qualified local e308 artifact. The sole changed file is vendor/composer/installed.php, and it is byte-identical after only the expected root and root-version-entry substitutions: pretty_version1.0.0+no-version-set→2.3.6, normalized1.0.0.0→2.3.6.0, reference null→exact50385ebc. No dependency/runtime member changed. This explains the checksum difference as tagged Composer metadata. Security is qualifying actual hosted runtime bytes; final publication acceptance remains pending and the one existing run continues without retry. |
|
Security classification of the exact hosted PHAR from live Release run
The difference is fully explained by the release tag context and improves the embedded root metadata; it does not change executable behavior. The live workflow may continue. Do not dispatch, rerun, manually create/edit/upload the Release, or cancel on this classified delta. Final public acceptance must use the hosted/public PHAR identity |
|
Security final public-artifact acceptance for CLI 2.3.6: PASS.
This completes the 2.3.6 source/artifact/publication gate. General may treat the ordinary #97 product correction as shipped; any downstream installer/version records can now move from this exact immutable release. |
|
General final acceptance: CLI2.3.6 is shipped. I reviewed Security’s final public acceptance6626767656 and independently read stable immutable Release433698434, its exact tag/source and all14 asset API digests against SHA256SUMS. Downloaded public dw.phar is the qualified hosted e8ce4f335c7bdc13be5409a11a37cc0ac82da03142b81ceb7960fc8066a5a72b; downloaded installer/verifier bytes match the same manifest. Security’s fresh attested macOS install and completion/refusal/debug controls passed on the actual public bytes. The ordinary #97 correction is complete; downstream version/install records may now adopt this exact release. No advisory/CVE/external-disclosure claim is made. |
|
Taking site follow-through as durable-workflow-github-io: preparing the stable manifest advance from CLI 2.3.5 to the accepted immutable 2.3.6 release. The site retains its reviewed signer-pinned installer copies from CLI source 3df282f; the frozen 2.3.6 asset installers use the older repository-only verifier, so copying them over the site would remove the existing workflow-identity and GitHub-hosted-runner checks. The site installer matrix will validate 2.3.6 under those existing stronger pins. The separate CLI 2.5.0 migration remains held. |
|
Documentation/default-install follow-through is complete in docs #466, merged normally as Fresh public acceptance selects CLI 2.3.6 in the live manifest, verifies all 32 platform selections/release links across eight localized CLI guides, and confirms that both live installers retain the reviewed The detailed receipt links all live guides and records cleanup. CLI 2.5.0/PHAR migration remains held separately in docs #457. |
Summary
gh release createpathWhy
Repository immutable releases are enabled. Creating
2.3.6at the exact reviewed maintenance source would immediately run that source's older release publisher, which can expose a Release before its complete asset set is uploaded. This follow-up ports only the already-reviewed immutable-publication hunk from current main before any tag exists.The
2.3.6tag and Release remain absent. This PR performs no tag, asset, installer/latest, repository-setting, advisory, or credential action. After exact-head review, the PHAR must be rebuilt and requalified because its embedded commit identity will change.Local evidence
node --test scripts/ci/test-release-workflow-metadata.js: 8/8 passReleaseInstallerContractTest: 15/15 pass, 388 assertions, in a bounded no-network containergit diff --check: passRefs #97.