feat(dev-tooling): add console_run feature_all parameter - #172
Merged
Martin Bens (SpiGAndromeda) merged 1 commit intoSep 4, 2026
Merged
Conversation
The deprecation gate `FEATURE_ALL=major bin/console cache:clear` was the one console workflow with no MCP path. Under MCP enforcement a session had to drop to a raw wrapper command. `console_run` now takes an optional `feature_all` parameter (`major` or `true`) that carries the variable into the command's environment. The assignment is prefixed inside the wrapped command string rather than in front of the wrapper process, so the shell that finally runs the command (the container's, the VM's, or the host's) is the one that applies it. A variable on the wrapper process would not cross the docker, docker-compose, vagrant, and ddev wrappers. The enum is the whole accepted surface, enforced by the schema validator and again in `tool_console_run()` for calls that reach the tool without the validator in front, so no caller-controlled string reaches the wrapped shell. BATS tests cover the prefix through the real `wrap_command` for the native and docker-compose environment types, the unchanged command when the parameter is absent, both rejection layers, and composition with `env` and `output_file`. `dev-tooling` goes 3.19.0 to 3.20.0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Agent Skills ExportBuilt 7 skill packages: |
Martin Bens (SpiGAndromeda)
deleted the
feat/dev-tooling-console-feature-all
branch
September 4, 2026 09:37
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.
console_runon thephp-toolingserver gains an optionalfeature_allparameter, so the deprecation gate —FEATURE_ALL=major bin/console cache:clear— has an MCP path instead of forcing a session under MCP enforcement to drop to a raw wrapper command (docker compose exec -T -e FEATURE_ALL=major web bin/console cache:clear).feature_allWhen the new optional parameter is present (
majorortrue), the console command's process environment inside the target environment carriesFEATURE_ALL=<value>. The assignment is prefixed inside the wrapped command string (FEATURE_ALL=major bin/console …) rather than placed in front of the wrapper process, so the shell that finally runs the command — the container's, the VM's, or the host's — is the one that applies it: docker, docker-compose, and vagrant embed the string in a remotebash -c, native evals it locally, and ddev rejoins its argv through the container'sbash -c. The parameter combines freely with the existing surface —feature_all: "major"pluscommand: "cache:clear"is the deprecation gate in one call, includingenvandoutput_file.The enum is the whole accepted surface, and no generic env-var map is added: arbitrary names and values would reach the wrapped shell as caller-controlled strings, so a future variable gets another named, enum-bounded parameter. The value is enforced by the vendored schema validator and again inside
tool_console_run()for a call that reaches the tool without the validator in front, so nothing new reaches a shell unquoted. The template-syncedshared/layer is untouched; the prefix lives inconsole.sh's command construction.Limits
The prefix is asserted through the real
wrap_commandfor the native and docker-compose environment types (docker-compose with its call-time container/workdir resolution stubbed); docker, vagrant, and ddev rest on readingwrap_command, not on tests. ThatFEATURE_ALL=majoractually flips flag state in a live Shopware is taken from the flag's documented behavior rather than re-measured — no container ran during development.