Verify standard Homebrew lifecycle compatibility #28

Closed
opened 2026-10-16 09:16:23 +00:00 by phg · 2 comments
Owner

Parent: Plan the signed IODD Tool prerelease
Type: research
Mode: AFK

Question

What do the current official Homebrew cask hooks, staging/bookkeeping paths and upgrade/reinstall/uninstall/zap phases actually permit, and which concrete standard-cask invocation patterns can satisfy the already-selected shared signed lifecycle contract?

Investigate the private account-owned destination, continuous worker-lifetime exclusion, signed old/new helper authority, caller exit and phase gaps, rollback/retained bundles, and evidence preservation. In particular, reconcile actual Homebrew bookkeeping (including .metadata where applicable) with the inspected purge/export admission rules. Trace first-party docs and source; distinguish documented guarantees, source-version behavior and untested hypotheses. Report a feasible route or a precise conflict for human resolution, without silently relaxing the accepted contract or proposing a daemon/brew wrapper/security bypass.

Record how prerelease cask versions and fully qualified Git-URL taps affect this route. This is fact finding, not a real install/upgrade trial and not an approval of a final cask. Do not install Homebrew, change an app, acquire real credentials or run privileged commands. Commit one evidence-linked report under docs/research/ on research/prerelease-homebrew-lifecycle; link its branch, exact commit, artifact and delegated-task context from the resolution.

Parent: [Plan the signed IODD Tool prerelease](https://git.s1q.dev/phg/iodd-tool/issues/27) Type: research Mode: AFK ## Question What do the current official Homebrew cask hooks, staging/bookkeeping paths and upgrade/reinstall/uninstall/zap phases actually permit, and which concrete standard-cask invocation patterns can satisfy the already-selected shared signed lifecycle contract? Investigate the private account-owned destination, continuous worker-lifetime exclusion, signed old/new helper authority, caller exit and phase gaps, rollback/retained bundles, and evidence preservation. In particular, reconcile actual Homebrew bookkeeping (including .metadata where applicable) with the inspected purge/export admission rules. Trace first-party docs and source; distinguish documented guarantees, source-version behavior and untested hypotheses. Report a feasible route or a precise conflict for human resolution, without silently relaxing the accepted contract or proposing a daemon/brew wrapper/security bypass. Record how prerelease cask versions and fully qualified Git-URL taps affect this route. This is fact finding, not a real install/upgrade trial and not an approval of a final cask. Do not install Homebrew, change an app, acquire real credentials or run privileged commands. Commit one evidence-linked report under docs/research/ on research/prerelease-homebrew-lifecycle; link its branch, exact commit, artifact and delegated-task context from the resolution.
phg self-assigned this 2026-10-16 09:17:32 +00:00
Author
Owner

Research claim and delegated context

Claimed by phg before work for Verify standard Homebrew lifecycle compatibility, a child of Plan the signed IODD Tool prerelease. Isolated AFK primary-source research is now running; production code and release execution remain outside scope.

  • Delegated task: node:delegated-task:command%3Amcp%3Abe5e5d8b-8159-412e-a97a-d75495eadd8e%3Adelegate-task%3Aiodd-prerelease-map27-homebrew-r1.
  • Backing child thread: thread:delegated-task:command%3Amcp%3Abe5e5d8b-8159-412e-a97a-d75495eadd8e%3Adelegate-task%3Aiodd-prerelease-map27-homebrew-r1.
  • Stable request: iodd-prerelease-map27-homebrew-r1.
  • Expected research branch: research/prerelease-homebrew-lifecycle.
  • Expected artifact: docs/research/prerelease-homebrew-lifecycle.md.
  • Parent will append the named resolution pointer to the map after reviewing the result; the researcher does not edit the shared map body.
## Research claim and delegated context Claimed by phg before work for [Verify standard Homebrew lifecycle compatibility](https://git.s1q.dev/phg/iodd-tool/issues/28), a child of [Plan the signed IODD Tool prerelease](https://git.s1q.dev/phg/iodd-tool/issues/27). Isolated AFK primary-source research is now running; production code and release execution remain outside scope. - Delegated task: `node:delegated-task:command%3Amcp%3Abe5e5d8b-8159-412e-a97a-d75495eadd8e%3Adelegate-task%3Aiodd-prerelease-map27-homebrew-r1`. - Backing child thread: `thread:delegated-task:command%3Amcp%3Abe5e5d8b-8159-412e-a97a-d75495eadd8e%3Adelegate-task%3Aiodd-prerelease-map27-homebrew-r1`. - Stable request: `iodd-prerelease-map27-homebrew-r1`. - Expected research branch: `research/prerelease-homebrew-lifecycle`. - Expected artifact: `docs/research/prerelease-homebrew-lifecycle.md`. - Parent will append the named resolution pointer to the map after reviewing the result; the researcher does not edit the shared map body.
Author
Owner

Resolution — standard Homebrew source compatibility and current conflicts

Research for Verify standard Homebrew lifecycle compatibility, under Plan the signed IODD Tool prerelease, is sufficiently answered by the pinned source findings below. Closing this AFK research question does not approve a cask, resolve a human choice, qualify runtime behavior, or waive any gate in Set validation gates and the implementation handoff or Qualify and package the native app.

The report traces the official hooks, staging/bookkeeping and first-install/upgrade/reinstall/uninstall/zap/rollback paths. The strongest candidate transport is the standard vendor installer script: calling signed IODDLifecycle directly, plus signed removal, without a Homebrew-managed app move. A complete compatible route is not established at the inspected lifecycle commit. In particular:

  • Homebrew saves the recipe under the token root's .metadata before invoking installer/preflight artifacts. 44b4247 rejects .metadata unconditionally during actual-token purge admission, so a normal first install cannot pass that pinned admission. A stock app artifact also introduces a staged symlink and performs its own code moves outside the product lease. Homebrew stage, IODD inventory.
  • Installer failure/refusal still enters Homebrew cleanup that attempts to purge the current staged version. A helper's instruction to preserve unknown evidence cannot veto that cleanup. Separate helper calls do not continuously hold the product lease across old removal, new installation, rollback or final purge. Homebrew's .upgrading copies are temporary, not retained recovery authority. Artifact failure cleanup, upgrade phases.
  • Reinstall internally forces the old uninstall, even without outer --force; its missing uninstall script can therefore be skipped. A mandatory explicit uninstall-preflight run is a candidate availability guard, not a solution to all cleanup/phase gaps. Zap purges all staged versions even without a zap stanza. Internal force, missing script.
  • Concrete prerelease version strings can use token iodd-tool. An iodd-tool@beta token conflicts with the inspected exact-token-root policy. Explicit Git-URL tap setup and fully qualified standard commands work as naming/trust interfaces; they do not change the lifecycle/cleanup behavior. The report leaves final version/tap coordinates to the human decision.

Follow-up questions for Agree the manual and Homebrew lifecycle handoff: bounded genuine-bookkeeping admission and evidence preservation on refusal; enforceable worker/code safety across Homebrew phase/purge gaps and caller death; old/new/retained signed helper authority and registration reconciliation after partial failure. These questions remain open. No daemon, wrapper, home crawl, arbitrary destination/lease override, security bypass, or extra mutation matrix is proposed.

Committed artifact and publication limitation

  • Local branch: research/prerelease-homebrew-lifecycle (refs/heads/research/prerelease-homebrew-lifecycle). It was renamed from the task-owned fresh branch; no existing local branch of that name was overwritten.
  • Exact report commit: 24e7fd6afc03dfcf684d72a58b76614534f4373b — only docs/research/prerelease-homebrew-lifecycle.md is included.
  • Report in the task worktree (local artifact, not a hosted blob).
  • Worktree: /Users/phg/.t3/worktrees/iodd-tool/t3-3aeb4108; clean after commit. The exact committed content can be recovered with git show 24e7fd6afc03dfcf684d72a58b76614534f4373b:docs/research/prerelease-homebrew-lifecycle.md.
  • Non-force push attempted only to the new research ref on origin; it failed: forgejo@git.s1q.dev: Permission denied (publickey). Remote branch existence could not be verified through SSH; a read-only HTTPS check also required authentication. No successful publication or hosted branch/artifact URL is claimed. Existing tracker access was used without acquiring credentials or changing tracker/remote configuration. Main and integration were untouched; no PR was used.

Evidence and delegated context

Retrieved 16 October 2026 UTC. Latest official release observed: Homebrew 7.0.9, published 8 October 2026, commit cdc1ca503231b9a96da64526774915d913c3ec9f; separately compared HEAD 19fe946b9a257cb41ebb5cef5c592ba7923d1f3b (16 October 2026). IODD observations are explicitly bound to 381442f79cd5736fceaffa15d5f1edacb1ca8842 and 44b4247d83811ce4232b1f04f65021adf590116d; starting preserved-history main was b8334e758a8fb11d61b7af8d3ed6f0f632a4216b. The report separates accepted policy, official documentation, pinned source observations and inferences and gives precise source URLs. It makes no assertion about uninspected live branches.

Retained from the parent's research-start comment:

  • Delegated task: node:delegated-task:command%3Amcp%3Abe5e5d8b-8159-412e-a97a-d75495eadd8e%3Adelegate-task%3Aiodd-prerelease-map27-homebrew-r1.
  • Backing child thread: thread:delegated-task:command%3Amcp%3Abe5e5d8b-8159-412e-a97a-d75495eadd8e%3Adelegate-task%3Aiodd-prerelease-map27-homebrew-r1.
  • Stable request: iodd-prerelease-map27-homebrew-r1.

No app build/test, actual install/upgrade, privileged command, signing, credential provisioning, device/image/VM access or runtime proof occurred. Documentation reference/line checks and git diff --cached --check passed. Claim remains assigned to phg. Only this research ticket is resolved; the parent will append the named resolution pointer to the map serially.

## Resolution — standard Homebrew source compatibility and current conflicts Research for [Verify standard Homebrew lifecycle compatibility](https://git.s1q.dev/phg/iodd-tool/issues/28), under [Plan the signed IODD Tool prerelease](https://git.s1q.dev/phg/iodd-tool/issues/27), is sufficiently answered by the pinned source findings below. Closing this AFK research question does **not** approve a cask, resolve a human choice, qualify runtime behavior, or waive any gate in [Set validation gates and the implementation handoff](https://git.s1q.dev/phg/iodd-tool/issues/6) or [Qualify and package the native app](https://git.s1q.dev/phg/iodd-tool/issues/24). The report traces the official hooks, staging/bookkeeping and first-install/upgrade/reinstall/uninstall/zap/rollback paths. The strongest candidate transport is the standard vendor `installer script:` calling signed IODDLifecycle directly, plus signed removal, without a Homebrew-managed `app` move. **A complete compatible route is not established at the inspected lifecycle commit.** In particular: - Homebrew saves the recipe under the token root's `.metadata` before invoking installer/preflight artifacts. `44b4247` rejects `.metadata` unconditionally during actual-token purge admission, so a normal first install cannot pass that pinned admission. A stock `app` artifact also introduces a staged symlink and performs its own code moves outside the product lease. [Homebrew stage](https://github.com/Homebrew/brew/blob/cdc1ca503231b9a96da64526774915d913c3ec9f/Library/Homebrew/cask/installer.rb#L153-L223), [IODD inventory](https://git.s1q.dev/phg/iodd-tool/src/commit/44b4247d83811ce4232b1f04f65021adf590116d/Sources/IODDCore/NativeCaskPurgeInventory.swift). - Installer failure/refusal still enters Homebrew cleanup that attempts to purge the current staged version. A helper's instruction to preserve unknown evidence cannot veto that cleanup. Separate helper calls do not continuously hold the product lease across old removal, new installation, rollback or final purge. Homebrew's `.upgrading` copies are temporary, not retained recovery authority. [Artifact failure cleanup](https://github.com/Homebrew/brew/blob/cdc1ca503231b9a96da64526774915d913c3ec9f/Library/Homebrew/cask/installer.rb#L330-L386), [upgrade phases](https://github.com/Homebrew/brew/blob/cdc1ca503231b9a96da64526774915d913c3ec9f/Library/Homebrew/cask/upgrade.rb#L383-L528). - Reinstall internally forces the old uninstall, even without outer `--force`; its missing uninstall script can therefore be skipped. A mandatory explicit uninstall-preflight `run` is a candidate availability guard, not a solution to all cleanup/phase gaps. Zap purges all staged versions even without a zap stanza. [Internal force](https://github.com/Homebrew/brew/blob/cdc1ca503231b9a96da64526774915d913c3ec9f/Library/Homebrew/cask/installer.rb#L267-L275), [missing script](https://github.com/Homebrew/brew/blob/cdc1ca503231b9a96da64526774915d913c3ec9f/Library/Homebrew/cask/artifact/abstract_uninstall.rb#L602-L627). - Concrete prerelease version strings can use token `iodd-tool`. An `iodd-tool@beta` token conflicts with the inspected exact-token-root policy. Explicit Git-URL tap setup and fully qualified standard commands work as naming/trust interfaces; they do not change the lifecycle/cleanup behavior. The report leaves final version/tap coordinates to the human decision. Follow-up questions for [Agree the manual and Homebrew lifecycle handoff](https://git.s1q.dev/phg/iodd-tool/issues/31): bounded genuine-bookkeeping admission and evidence preservation on refusal; enforceable worker/code safety across Homebrew phase/purge gaps and caller death; old/new/retained signed helper authority and registration reconciliation after partial failure. These questions remain open. No daemon, wrapper, home crawl, arbitrary destination/lease override, security bypass, or extra mutation matrix is proposed. ### Committed artifact and publication limitation - Local branch: `research/prerelease-homebrew-lifecycle` (`refs/heads/research/prerelease-homebrew-lifecycle`). It was renamed from the task-owned fresh branch; no existing local branch of that name was overwritten. - Exact report commit: `24e7fd6afc03dfcf684d72a58b76614534f4373b` — only `docs/research/prerelease-homebrew-lifecycle.md` is included. - [Report in the task worktree](/Users/phg/.t3/worktrees/iodd-tool/t3-3aeb4108/docs/research/prerelease-homebrew-lifecycle.md) (local artifact, not a hosted blob). - Worktree: `/Users/phg/.t3/worktrees/iodd-tool/t3-3aeb4108`; clean after commit. The exact committed content can be recovered with `git show 24e7fd6afc03dfcf684d72a58b76614534f4373b:docs/research/prerelease-homebrew-lifecycle.md`. - Non-force push attempted only to the new research ref on `origin`; it failed: `forgejo@git.s1q.dev: Permission denied (publickey).` Remote branch existence could not be verified through SSH; a read-only HTTPS check also required authentication. **No successful publication or hosted branch/artifact URL is claimed.** Existing tracker access was used without acquiring credentials or changing tracker/remote configuration. Main and integration were untouched; no PR was used. ### Evidence and delegated context Retrieved **16 October 2026 UTC**. Latest official release observed: **Homebrew 7.0.9**, published **8 October 2026**, commit `cdc1ca503231b9a96da64526774915d913c3ec9f`; separately compared HEAD `19fe946b9a257cb41ebb5cef5c592ba7923d1f3b` (16 October 2026). IODD observations are explicitly bound to `381442f79cd5736fceaffa15d5f1edacb1ca8842` and `44b4247d83811ce4232b1f04f65021adf590116d`; starting preserved-history main was `b8334e758a8fb11d61b7af8d3ed6f0f632a4216b`. The report separates accepted policy, official documentation, pinned source observations and inferences and gives precise source URLs. It makes no assertion about uninspected live branches. Retained from the parent's research-start comment: - Delegated task: `node:delegated-task:command%3Amcp%3Abe5e5d8b-8159-412e-a97a-d75495eadd8e%3Adelegate-task%3Aiodd-prerelease-map27-homebrew-r1`. - Backing child thread: `thread:delegated-task:command%3Amcp%3Abe5e5d8b-8159-412e-a97a-d75495eadd8e%3Adelegate-task%3Aiodd-prerelease-map27-homebrew-r1`. - Stable request: `iodd-prerelease-map27-homebrew-r1`. No app build/test, actual install/upgrade, privileged command, signing, credential provisioning, device/image/VM access or runtime proof occurred. Documentation reference/line checks and `git diff --cached --check` passed. Claim remains assigned to phg. Only this research ticket is resolved; the parent will append the named resolution pointer to the map serially.
phg closed this issue 2026-10-16 09:29:51 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
phg/iodd-tool#28
No description provided.