Skip to content

add bundle-install design spec (.app directory bundles)#198

Merged
jaemk merged 2 commits into
masterfrom
260718.bundle-install-spec
Jul 20, 2026
Merged

add bundle-install design spec (.app directory bundles)#198
jaemk merged 2 commits into
masterfrom
260718.bundle-install-spec

Conversation

@jaemk

@jaemk jaemk commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Design spec for #145 phase A (directory bundles, macOS .app), for sign-off before implementation. Docs only, no code changes.

  • Add specs/bundle-install.md: builder API (bundle_root_in_archive + bundle_install_path, macOS default detection via the .app ancestor of current_exe()), pipeline (verify -> extract to same-filesystem staging -> whole-tree stash-and-rollback swap with MoveAll semantics -> exe-aside for the running image), Managing around sudo or missing permissions #112 preflight interaction, error/rollback guarantees, non-goals, and testing strategy including the manual macOS matrix CI cannot cover.
  • Record two findings from auditing Extract::extract_into: unix permission bits are already preserved for zip (masked to 0o777, tested), so the issue thread's manual unix_mode() handling is not needed; and zip symlink entries were extracted as regular files containing the target text, which corrupts .app framework symlinks and the publisher's code signature. That bug is fixed in fix zip symlink extraction, clean up cfg-gated test imports #199 (BNDL-4-2 records the resolved behavior).
  • .deb/.msi stay a docs-only recipe (no install_package helper); restart-after-swap composes with the existing restart module.

The sign-off surface is the "Open questions" section: setter naming, mutual-exclusion semantics, macOS default detection, non-macOS in-bundle swaps, no-copy-fallback staging, the verify_binary target in bundle mode, error variant names, and App Translocation handling (Q8, the standalone symlink fix, is resolved by #199).

jaemk added 2 commits July 19, 2026 21:49
…alls

Design doc for #145 phase A (maintainer sign-off before implementation):
`bundle_root_in_archive`/`bundle_install_path` builder API, whole-tree
stash-and-rollback swap with `MoveAll` semantics, same-filesystem staging,
preflight interaction, non-goals (.deb/.msi recipe-only, no signing/notarizing,
no escalation), test strategy, and the open API questions. Also records that
zip symlink entries are currently extracted as regular files (a standalone bug
for .app framework symlinks; see BNDL-4-2).
@jaemk
jaemk force-pushed the 260718.bundle-install-spec branch from b20f38a to 2b3fcb1 Compare July 20, 2026 01:49
@jaemk
jaemk merged commit 91b0531 into master Jul 20, 2026
3 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