Fix required-check shell executable selection so Windows and custom shell setups run Galley-owned required checks with the intended executable and invocation style.#68
Merged
shinpr merged 2 commits intoMay 25, 2026
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Goal
Fix required-check shell executable selection so Windows and custom shell setups run Galley-owned required checks with the intended executable and invocation style.
Acceptance Criteria
AC1When an environment profile setsrequired_checks.shell_pathto a recognized shell executable path, Galley shall use that path as the required-check executable and infer the shell invocation style from the executable name.AC2When bothrequired_checks.shellandrequired_checks.shell_pathare set, Galley shall treatshell_pathas the more specific executable selection and shall not invoke that executable using an incompatible shell style fromshell.AC3Ifrequired_checks.shell_pathis set to an unrecognized executable name, then Galley shall use an explicit non-autorequired_checks.shellas fallback shell kind metadata and shall fail profile validation when no usable shell kind can be determined.AC4When Windows required checks request Bash throughrequired_checks.shell: bashand noshell_pathis set, Galley shall prefer standard Git for Windows Bash discovery over PATH-discovered WSL launchers, WindowsApps shims, or other non-standard Bash entries.AC5The environment profile schema, examples, docs, and Galley skill guidance shall describerequired_checks.shell_pathas an executable override that may stand alone when the executable name is recognized, takes precedence overrequired_checks.shellwhen both are present, and usesrequired_checks.shellonly as fallback kind metadata for unrecognized executable names.AC6Required-check run evidence and failure messages shall record the shell kind actually used for invocation and the executable path actually launched forshell_path-only,shellplusshell_path, and Windows Bash discovery cases.Final Verification
claude plugin validate plugins/galley: passedgo test ./internal/profile ./internal/result: passedgo run ./cmd/galley schema generate: passedgo run ./cmd/galley profile validate --kind environment examples/environment-local.yaml: passedpython3 plugins/galley/skills/galley/scripts/test_create_task_skeleton.py and python3 -m json.tool over packaged plugin/schemas/marketplace JSONs: passedtest -z "$(find . -name '*.go' -not -path './.git/*' -print | xargs gofmt -l)": passedgo test ./...: passedgo build -o /tmp/galley ./cmd/galley: passedgo run ./cmd/galley schema check: passedgo run ./cmd/galley task validate examples/afk-task.yaml: passedgo run ./cmd/galley profile validate --kind quality examples/quality-default.yaml: passedpython3 -m json.tool schemas/claude-result.schema.json >/dev/null: passed./scripts/smoke-local.sh: passedKey Decisions
claude-decision-1How to express the shell_path contract in a YAML example that must stay valid? -> Add YAML comments describing the precedence rule, the recognized-basename stand-alone rule, and the fallback metadata rule for unrecognized basenames, while setting shell: "auto" and shell_path: "/bin/bash" to keep validation passing and to illustrate the precedence concretely.claude-decision-2When required_checks.shell is bash on Windows with no shell_path and no standard Git for Windows Bash is discoverable, should the resolver return an error or silently fall back to cmd.exe? -> Return a resolver error that names required_checks.shell_path as the explicit override.Risks
R1compatibility: Changingrequired_checks.shell_pathvalidation and precedence affects the environment profile contract and required-check subprocess invocation semantics.