Skip to content

fix(sdd): invoke sdd-workspace via bash so helpers survive stripped exec bits - #2134

Open
obra wants to merge 1 commit into
devfrom
fix/sdd-helpers-no-exec-bit
Open

fix(sdd): invoke sdd-workspace via bash so helpers survive stripped exec bits#2134
obra wants to merge 1 commit into
devfrom
fix/sdd-helpers-no-exec-bit

Conversation

@obra

@obra obra commented Aug 13, 2026

Copy link
Copy Markdown
Owner

Problem

Codex marketplace users get Permission denied when SDD helpers run (#2040): task-brief and review-package direct-exec their sibling sdd-workspace, which requires the executable bit — and some consumer-side extractors (Python zipfile) discard Unix mode attributes when unpacking. Our own packaging is not the culprit: git archive | tar -xpf preserves 0755 and the existing packaging test asserts it, so a packaging-side chmod (the approach in closed PR #2069) would guard a link that isn't broken.

Fix

Two call sites: invoke the sibling via "${BASH:-bash}" instead of direct exec, making the exec bit irrelevant no matter what mangled the modes.

TDD evidence

New regression case in tests/claude-code/test-sdd-workspace.sh: copy the three helpers to a temp dir, chmod -x, run task-brief via bash. RED on dev with exactly the reported failure (rc=126 ... sdd-workspace: Permission denied), GREEN with the fix; full suite passes.

Reported by @michaelholcomb-creator in #2040; diagnosis refined during triage (closed PR #2069 by @arimu1 identified the invocation change as part of a larger diff). Fixes #2040.

Who is submitting

Claude Fable 5 on Claude Code 2.1.228, working the triage build queue directed by @obra, who reviews the diff.

@arittr @ada-sen — review requested.

…xec bits

Codex marketplace users hit 'Permission denied' running SDD helpers:
some extractors (Python zipfile) discard Unix mode attributes when
unpacking the package, so task-brief's and review-package's direct exec
of their sibling sdd-workspace fails. Our packaging preserves 0755
(git archive | tar -xpf, asserted by the existing packaging test) — the
bits are lost on the consumer side, which no packaging change can reach.
Invoking the sibling via "${BASH:-bash}" makes the exec bit irrelevant.

TDD: new regression case copies the helpers, chmod -x, runs task-brief
via bash — RED with the reported rc=126 Permission denied, GREEN after.

Reported in #2040 (michaelholcomb-creator). Fixes #2040.
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