Skip to content

fix(ci): recover immutable releases and retain honest public upgrade checks - #9

Merged
cyaolong merged 14 commits into
mainfrom
codex/v060-release-pipeline-fix
Oct 23, 2026
Merged

cyaolong merged 14 commits into
mainfrom
codex/v060-release-pipeline-fix

Conversation

@cyaolong

@cyaolong cyaolong commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

The v0.6.0 release workflow failed when checkout's lightweight local tag collided with the remote annotated tag. Use an independent fetch ref and verify the exact release commit; every manual validation/publication job checks out the immutable requested tag. The official v0.6.0 tag and all 25 shipped files remain unchanged.

Adds repeatable public installation and genuine v0.5.0 upgrade checks with isolated credentials, valid legacy recovery records, private file permissions, native PowerShell 5.1 setup, complete runtime/MCP checks and observed uninstall completion. Website metadata verification uses the scoped read-only Actions token only in its verification step, avoiding shared-runner anonymous API limits; installers receive no token. Failed self-updates retain version/doctor diagnostics and remain failed. Official-installer upgrades are an explicitly separate path.

Validation:

Website commit 2d117885 synchronizes only 25 CLI installer/version/guide files, explicitly approved by the user. Four deployed files match Release bytes and all five language installation pages reference v0.6.0. User working trees and business data were not used in post-release checks.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review 🔄 Running since 2026-10-23T15:16:34.692532Z 80af951 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 727c983d5b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tests/post_release_upgrade.py Outdated
assert len(names)==len(set(names))==22
assert replies[2]['result']['isError'] is False
caps=replies[2]['result']['structuredContent']
assert sum(len(caps[key]) for key in ('videoModels','imageModels','audioModels'))==16

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Count models using the actual MCP capability response

The shipped capabilities_list tool returns structuredContent with snapshotVersion, publishedAt, and a single models array, not videoModels, imageModels, and audioModels. Running the MCP exchange locally confirms that this assertion raises KeyError: 'videoModels'. Consequently, every new public-install-and-upgrade matrix job fails during fresh-install verification and never exercises the v0.5.0 upgrade. Count caps['models'] instead.

Useful? React with 👍 / 👎.

self.install('actual-v050-install','v0.5.0',old)
self.cli('isolated-key',old,'auth','set-key','--stdin','--no-verify',input='hc-isolated-release-test-not-a-real-key\n')
config=Path(old['HOLYCRAB_CONFIG_DIR']);plans=config/'upload-plans';plans.mkdir(exist_ok=True)
(config/'attempts.json').write_text(json.dumps({'retainedAttempt':{'state':'unknown','taskId':'known-task'}}))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Create the retained attempts ledger with private permissions

On Linux and macOS with a typical umask of 022, write_text() creates this ledger with mode 0644, but state.load_attempts() explicitly rejects any Unix ledger with group or other permission bits. After the MCP assertion is corrected, this fixture therefore causes the upgraded installation's doctor --json check in verify_new() to fail despite a successful upgrade. Create the fixture through write_private_json() or explicitly set mode 0600 before running the CLI.

Useful? React with 👍 / 👎.

@cyaolong cyaolong changed the title fix(ci): preserve immutable release tags and automate public upgrades fix(ci): recover immutable releases and retain honest public upgrade checks Oct 23, 2026
@cyaolong
cyaolong merged commit 4d8ba6c into main Oct 23, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant