Shell 1.12.1: a catalog install keeps the tarball's file modes #44
Open
michael
wants to merge 1 commits from
claude/shell-tar-exec-bits into main
pull from: claude/shell-tar-exec-bits
merge into: :main
:main
:claude/vista-cues-picker
:claude/vista-cues
:claude/overflow-tap-module
:claude/layouts-menu-not-shown
:claude/timers-ltc-spawn-error
:claude/shell-tar-exec-bits
:claude/resi-cues-startup-pause
:claude/pco-multi-service-types
:claude/proddash-alerts-feature-67694f
:claude/send-message-module-refactor-9af19a
:claude/update-error-message
:claude/prodcom-filter-button-visibility-8a1d2d
:claude/spl-prebuilt-helper
:claude/timers-prebuilt-helper
:claude/release-builds
:claude/unbundled-shell
:claude/module-helper-rules
:claude/pco-song-key
:claude/timers-video-countdown
:claude/spl-build-retry
:claude/timers-build-retry
:claude/shell-keep-executables
:claude/shell-module-update-reload
:claude/timers-capture-install
:claude/pco-ableset-progress
:claude/proddash-ableset-module-6c2556
:claude/timers-second-phase
:claude/pco-teams-tile
:claude/resi-stage-cues
:claude/service-times-module
:claude/band-lineup-docs-tidy
:claude/band-lineup-display-1-3-10
:claude/spl-devices-without-binary
:claude/pco-message-match
:claude/grid-size
:claude/band-lineup-module
:claude/layout-audit
:claude/update-safety
:claude/module-rules
:claude/themes
:claude/admin-pin-trim
:claude/tile-chrome
:claude/readme-slack-module
:claude/slack-send-target
:claude/propresenter-now
:claude/gitea-is-home
:claude/admin-pin
:claude/shell-1-5-0
:claude/self-hosted-forge
:claude/no-campus-defaults
:claude/proddash-app-tweaks
:claude/slack-module
:claude/dashboard-round-2026-09
:claude/proddash-menubar-launcher-6eb34e
:claude/pco-plan-module-f711b9
:claude/prodcom-orientation-channels-icon-bcf897
:claude/prodash-propresenter-timers-cea871
:claude/proddash-app-build-gnwq7y
:claude/timers-ltc-stage-display
:claude/propresenter-timers-module
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The bug (AB, 2026-10-04, 1.10.2 rollout)
parseTardiscarded each tar entry's mode, soinstallModulewrote every downloaded file withfs.writeFileSync's default 0644 — including the prebuilt helpers modules ship underbin/(Timers 1.7.0'sltc-capture-*, SPL 0.5.0'sspl-capture-*).spawn()then failed with EACCES: SPL showed its error and LTC showed a misleading "No signal" (its own bug, fixed separately in the Timers 1.7.1 PR). AB was hand-fixed withchmod +x; NA's pending 1.10.2 rollout would hit the same thing, so this should land and ship first.carryOverExecutables(1.9.2) never applied here: it only carries executables the download does not include, and these downloads include the helpers.The fix
parseTarkeeps the header's mode field (octal at offset 100) — permission bits only, defaulting to 0644; setuid/sticky from an archive are deliberately dropped.installModule's staging writes and the archive-based shell update both pass the mode towriteFileSync.Version
main was 1.12.0 (the PR #34 1.9.3 bump and PR #39's 1.10.1 are both already merged underneath it) → 1.12.1.
Testing
tools/unbundled.test.js's mock repo now shipsdemo2.0.0 with an executablebin/demo-capture(0755), and a new step ④ installs the update from the catalog and asserts the execute bit survived — alongside the existing 1.9.2 carry-over check (a per-machine executable the download lacks is still kept). Verified the new assertion fails against the unfixedinstallModule. All four shell tests pass:unbundled,update-check,layout-roundtrip,alerts.🤖 Generated with Claude Code
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.