Skip to content

Prevent metadata leaks in cask ZIPs - #39

Merged
VladimirBrejcha merged 1 commit into
mainfrom
codex/rr23-cask-zip-metadata
Aug 31, 2026
Merged

Prevent metadata leaks in cask ZIPs#39
VladimirBrejcha merged 1 commit into
mainfrom
codex/rr23-cask-zip-metadata

Conversation

@VladimirBrejcha

Copy link
Copy Markdown
Contributor

Why

Default macOS archive behavior can serialize resource and extended-attribute metadata as AppleDouble entries. Filtered archive listings can then hide the unsafe payload.

Changed

  • package app-only ZIP candidates with explicit metadata-suppression flags
  • validate the hidden candidate through a bounded Python standard-library contract before checksum or publication
  • clear stale outputs and publish mode-0644 ZIP/checksum candidates fail-closed
  • add portable and real/fake macOS regressions plus manifest/spec coverage

Verification

  • focused cask packaging tests: 7/7
  • documentation tests: 51/51
  • full repository suite, including app tests: green
  • implementation and spec-only harness profiles: green
  • public-source and independent exact-diff reviews: clean
  • agent closeout: passed

Residual risk

The standard-library central inventory does not prove absence of orphan local records. This remains bounded by the trusted system archive producer and is documented without adding a second ZIP parser.

Why:
- Default ditto packaging can serialize signed-app metadata as AppleDouble entries while filtered inspection misses the unsafe payload.

Changed:
- Package with explicit metadata-suppression flags, validate a hidden app-only candidate through Python zipfile, and publish normalized ZIP/checksum outputs only after validation.
- Add deterministic portable and macOS regressions plus manifest and specification contracts for the defense.

Verification:
- npm test
- npm run agent:verify -- --profile implementation
- npm run agent:verify -- --profile spec-only
- npm run verify:public-surface
- Independent cask regression, public-source, and exact-diff reviews

Affected:
- Cask ZIP packaging and final-candidate validation
- Documentation regressions, verification routing, and packaging specifications

Refs:
- RR23 cask ZIP metadata regression

Session:
- task-sessions/rr23-cask-zip-metadata-20260901
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 31, 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 Completed 2026-08-31T17:08:10.878940Z 6b74cf6 PR opened
ℹ️ 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.

@fiveonecode-autopilot

Copy link
Copy Markdown

Autopilot needs your choice — AD-20260901-001

Review finding (External review):
The active PR changes a guarded verifier or bootstrap implementation file.
Autopilot will not run HEAD verifier code or HEAD bootstrap until this exact implementation identity is authorized.
Keep-blocked does not run old product source; it refuses HEAD verifier/bootstrap and does not push.

Concrete operator choices:

  • Authorize this contract change: accept HEAD implementation, then Autopilot may run HEAD verifier and HEAD bootstrap.
  • Keep blocked until HEAD reverts: leave the PR blocked; Autopilot must not push, must not run HEAD bootstrap, and must not run HEAD verifier.

Implementation identity (paths and blob SHAs):
.agents/manifests/implementation-foundation.yaml@ee67acf9d5d78c2010b7cf59f41f733af2e21de0..82dc7e8ab9f107c161d337d62aafb92824136a71;.agents/manifests/specs.yaml@6074926b0e0966b83bb6bd1e7d41a753eb1f0af9..b9b4df6581f9ed72e519e605d42899ee8be06b2b

Guarded hits:

  • .agents/manifests/implementation-foundation.yaml (base blob ee67acf9d5d78c2010b7cf59f41f733af2e21de0, head blob 82dc7e8ab9f107c161d337d62aafb92824136a71)
  • .agents/manifests/specs.yaml (base blob 6074926b0e0966b83bb6bd1e7d41a753eb1f0af9, head blob b9b4df6581f9ed72e519e605d42899ee8be06b2b)
    Prevent metadata leaks in cask ZIPs #39

Autopilot's assessment:
The active PR changes a guarded verifier or bootstrap implementation file.
Autopilot will not run HEAD verifier code or HEAD bootstrap until this exact implementation identity is authorized.
Keep-blocked does not run old product source; it refuses HEAD verifier/bootstrap and does not push.

Concrete operator choices:

  • Authorize this contract change: accept HEAD implementation, then Autopilot may run HEAD verifier and HEAD bootstrap.
  • Keep blocked until HEAD reverts: leave the PR blocked; Autopilot must not push, must not run HEAD bootstrap, and must not run HEAD verifier.

Implementation identity (paths and blob SHAs):
.agents/manifests/implementation-foundation.yaml@ee67acf9d5d78c2010b7cf59f41f733af2e21de0..82dc7e8ab9f107c161d337d62aafb92824136a71;.agents/manifests/specs.yaml@6074926b0e0966b83bb6bd1e7d41a753eb1f0af9..b9b4df6581f9ed72e519e605d42899ee8be06b2b

Guarded hits:

  • .agents/manifests/implementation-foundation.yaml (base blob ee67acf9d5d78c2010b7cf59f41f733af2e21de0, head blob 82dc7e8ab9f107c161d337d62aafb92824136a71)
  • .agents/manifests/specs.yaml (base blob 6074926b0e0966b83bb6bd1e7d41a753eb1f0af9, head blob b9b4df6581f9ed72e519e605d42899ee8be06b2b)

Autopilot recommends:
Authorize this verifier implementation change — Autopilot will accept this exact HEAD verifier/bootstrap implementation identity, then may run HEAD verifier and HEAD bootstrap.

Choose what Autopilot should do next:

  1. authorize-contract-change — Autopilot will accept this exact HEAD verifier/bootstrap implementation identity, then may run HEAD verifier and HEAD bootstrap.
  2. keep-blocked-until-head-reverts — Autopilot will leave the PR blocked until HEAD reverts the guarded implementation. It will not push, will not run HEAD bootstrap, and will not run HEAD verifier.

Reply with exactly one:
Autopilot decision AD-20260901-001: choose authorize-contract-change
Autopilot decision AD-20260901-001: choose keep-blocked-until-head-reverts

Local artifact: job 20260901-010608-6e11e1f3-d022-4ee0-ac91-b5bed57b1437/report.md

@VladimirBrejcha VladimirBrejcha added the autopilot:on Enable Autopilot processing for this PR label Aug 31, 2026
@fiveonecode-autopilot

Copy link
Copy Markdown

Autopilot recorded decision AD-20260901-001: selected authorize-contract-change.

Operator: @VladimirBrejcha

@fiveonecode-autopilot

Copy link
Copy Markdown

Reviewed top-level PR feedback and left the current code unchanged.

These items were posted as PR review bodies or conversation comments rather than unresolved review threads, so this acknowledgement is recorded on the PR timeline.

@VladimirBrejcha
VladimirBrejcha merged commit 16148c2 into main Aug 31, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autopilot:on Enable Autopilot processing for this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant