Skip to content

Prevent case-colliding staged package paths - #134

Merged
themuffinator merged 1 commit into
mainfrom
codex/fix-staged-icon-case-collision
Aug 26, 2026
Merged

Prevent case-colliding staged package paths#134
themuffinator merged 1 commit into
mainfrom
codex/fix-staged-icon-case-collision

Conversation

@themuffinator

Copy link
Copy Markdown
Owner

Summary

  • remove obsolete tracked .install icon copies; Meson already stages the canonical lowercase icons from assets/icons
  • reject Unicode-normalized, case-insensitive path collisions in every staged payload before CI uploads it
  • retain the macOS-specific compatibility entry point while sharing the generic collision detector
  • document the extraction fix in the 0.12.0 release material

Investigation

While downloading push-linux-x64-payload from Actions run 33002644028 on Windows, gh run download failed while extracting openQ4.icns because that path already existed. The artifact central directory contained all four tracked names:

  • OpenQ4.ico
  • OpenQ4.icns
  • openQ4.ico
  • openQ4.icns

A clean Linux checkout can preserve and upload all four, but Windows and other case-insensitive extraction targets cannot represent each pair. The lowercase files are generated/staged by Meson, so no runtime icon is lost by removing the four repository-owned .install copies.

Validation

  • python tools/tests/validation_hardening.py
  • python tools/tests/macos_metal_bridge.py
  • python tools/tests/macos_package_robustness.py
  • python tools/tests/packaging_safety.py
  • python -m py_compile tools/validation/openq4_validate.py tools/tests/validation_hardening.py
  • git diff --check origin/main...HEAD

No external code was incorporated.

@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: 08638c04dc

ℹ️ 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".

raise ValidationError(f"Staged game directory must not be a symlink: {game_dir}")
if not game_dir.is_dir():
raise ValidationError(f"Staged game directory is missing: {game_dir}")
validate_no_staged_casefold_path_collisions(root, install_root)

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 Prevent failed collision checks from uploading the payload

When this check detects a collision in a push-verification job, validation fails but the same invalid .install tree is still published because both staged-payload upload steps in .github/workflows/push-verification.yml use if: always() (lines 613-618 and 689-694). Thus a Linux-produced artifact can still contain the case-colliding paths and remain impossible to extract on Windows—the exact failure this change intends to prevent—so the payload upload must be gated on successful validation or explicitly skipped after this error.

Useful? React with 👍 / 👎.

@themuffinator
themuffinator merged commit 4752d32 into main Aug 26, 2026
21 of 25 checks passed
@themuffinator
themuffinator deleted the codex/fix-staged-icon-case-collision branch August 26, 2026 21:26
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