Skip to content

[#2843] Suppressed Composer output of the initial tooling install and adopted the standard progress helpers. - #2858

Merged
AlexSkrypnyk merged 6 commits into
mainfrom
feature/2843-suppress-tooling
Jul 29, 2026
Merged

[#2843] Suppressed Composer output of the initial tooling install and adopted the standard progress helpers.#2858
AlexSkrypnyk merged 6 commits into
mainfrom
feature/2843-suppress-tooling

Conversation

@AlexSkrypnyk

@AlexSkrypnyk AlexSkrypnyk commented Jul 29, 2026

Copy link
Copy Markdown
Member

Closes #2843

Summary

The ahoy entrypoint bootstraps drevops/vortex-tooling into vendor/ before every command, so on a fresh clone the first ahoy <anything> was preceded by ten lines of raw Composer progress output before the requested command produced a single line of its own. The highlighted No composer.lock file present warning was the most misleading part: it refers to the throwaway vendor-temp/ project the bootstrap creates, not to the user's site, so it read as a problem with their clone.

Every mutating Composer call in scripts/vortex-tooling.sh now runs through a helper that captures its output and replays it on stderr only when the command fails, preserving Composer's own exit code rather than flattening it. VORTEX_DEBUG=1 still streams the output as it happens, matching the set -x behaviour already in the script.

composer --quiet was deliberately not used. It also suppresses failure messages, and because this bootstrap runs from the ahoy entrypoint, a silent failure would abort every command including the ones needed to recover.

Changes

scripts/vortex-tooling.sh

  • Adopted the standard progress helpers (info, note, task, pass, fail) used by the shipped tooling scripts, replacing the absence of any progress reporting in this script.
  • Added a composer_run() helper that streams Composer directly under VORTEX_DEBUG=1 and otherwise captures stdout and stderr, writing them to stderr and returning Composer's exit code only when the command fails.
  • Routed the mutating Composer calls through it: the config writes, require --no-update, and install. The read-only composer show and composer config lookups keep their existing capture, since their output is consumed rather than displayed.
  • Bracketed the install with info "Started Vortex tooling installation." and a closing pass line, both emitted only on runs that actually install. The early-exit guard means every subsequent command prints nothing at all.
  • Labelled the replayed Composer output with fail so a failure report is not an unexplained blob.

.vortex/tests/phpunit/Functional/ToolingBootstrapTest.php

  • testBootstrap now matches both output streams in full rather than probing for individual Composer strings, since unanticipated output would slip past a list of negative substring checks. The installing path asserts stdout is exactly the two progress messages and stderr is empty; the short-circuit path asserts both streams are empty, as does the repeated short-circuited run.
  • Added testBootstrapReplaysComposerOutputOnFailure, which forces an unresolvable tooling constraint and asserts the failure is reported, the suppressed Composer output still reaches the terminal, and vendor-temp/ is cleaned up. This is the assertion that pins the design choice against a future simplification to composer --quiet.
  • Added an OUTPUT_ENV constant used by every output assertion. It restores Composer's default verbosity, which the harness otherwise suppresses through SHELL_VERBOSITY (without it the assertions would hold regardless of the script's behaviour), and pins TERM so the progress helpers' colour branch is deterministic across environments.
  • Extended prepareProject() with an optional tooling-constraint override used by the new failure test.

Generated

  • .vortex/installer/tests/Fixtures/handler_process/_baseline/scripts/vortex-tooling.sh is the regenerated installer snapshot of the same script, with the VORTEX_DEV fenced block stripped as the installer does for consumer sites. Produced by ahoy update-snapshots, not hand-edited.

Before / After

BEFORE                                          AFTER
──────                                          ─────

$ a build                                       $ a build
                                                │
┌──────────────────────────────────────┐        ├─ [INFO] Started Vortex tooling installation.
│ No composer.lock file present.       │        ├─ [ OK ] Finished Vortex tooling installation.
│ Updating dependencies to latest ...  │        │
│ Loading composer repositories ...    │        └─ [INFO] Started reset.
│ Updating dependencies                │
│ Lock file operations: 1 install ...  │
│   - Locking drevops/vortex-tooling   │        Composer output appears only on failure:
│ Writing lock file                    │
│ Installing dependencies from lock    │        ├─ [FAIL] Composer command failed.
│ Package operations: 1 install ...    │        └─ <full Composer output on stderr,
│   - Installing drevops/vortex-...    │            with Composer's exit code preserved>
│ Generating autoload files            │
└──────────────────────────────────────┘        Subsequent commands print nothing at all -
  ten lines of throwaway-project detail          the early-exit guard short-circuits before
  before the command's own first line            any output.
                                                
[INFO] Started reset.                           VORTEX_DEBUG=1 streams Composer verbatim.

Summary by CodeRabbit

  • New Features

    • Added clearer progress and success messages during tooling installation.
    • Composer output is now shown only in debug mode, while failures display relevant error details.
    • Development tooling installations now support configured patches and local development sources.
  • Bug Fixes

    • Repeated bootstrap runs now exit cleanly without duplicate output.
    • Improved cleanup of temporary installation files after successful or failed runs.
  • Tests

    • Added coverage for deterministic bootstrap output and Composer failure handling.

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

The bootstrap script centralizes Composer execution to suppress successful output and replay failures. Functional tests cover installation, short-circuit, and dependency-resolution failure output, including temporary-directory cleanup.

Changes

Tooling bootstrap output

Layer / File(s) Summary
Composer output handling
scripts/vortex-tooling.sh
Adds composer_run to capture Composer output, preserve debug mode, and replay output on failure.
Bootstrap installation wiring
scripts/vortex-tooling.sh
Routes throwaway-project configuration and installation commands through composer_run, including patch handling and completion output.
Bootstrap output and failure coverage
.vortex/tests/phpunit/Functional/ToolingBootstrapTest.php
Controls command output, updates exact output assertions, forces dependency-resolution failure, and verifies failure output and cleanup.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant BootstrapTest
  participant VortexTooling
  participant composer_run
  participant Composer
  BootstrapTest->>VortexTooling: Run bootstrap with controlled environment
  VortexTooling->>composer_run: Configure and install tooling
  composer_run->>Composer: Execute Composer
  Composer-->>composer_run: Return output and status
  composer_run-->>VortexTooling: Suppress success or replay failure output
  VortexTooling-->>BootstrapTest: Return bootstrap result
Loading

Possibly related PRs

  • drevops/vortex#2811: Updates the same bootstrap test and related tooling installation behavior.

Suggested labels: A2

Poem

I’m a bunny with a quieter shell,
Composer’s success now whispers well.
When errors hop from the tooling den,
Their clues come bounding back again.
Clean temp paths, and all is well.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is specific, concise, and matches the main change: suppressing Composer output during tooling install.
Linked Issues check ✅ Passed The changes implement the requested suppression of initial tooling install output and preserve failure output behavior.
Out of Scope Changes check ✅ Passed The added progress helpers, debug handling, and test updates all support the installer-output suppression objective.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/2843-suppress-tooling

Comment @coderabbitai help to get the list of available commands.

@AlexSkrypnyk AlexSkrypnyk added the A1 Board worker 1 label Jul 29, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.vortex/tests/phpunit/Functional/ToolingBootstrapTest.php:
- Line 165: Rename the prepareProject parameter from $tooling_constraint to
$toolingConstraint, and update the corresponding named argument at the caller
and the parameter usage within prepareProject while preserving existing
behavior.
- Around line 69-83: The assertions around the ToolingBootstrapTest invocation
must verify exact silent output rather than only absence of selected strings: at
.vortex/tests/phpunit/Functional/ToolingBootstrapTest.php lines 69-83, assert
that the non-short-circuit path has only the installation announcement on stdout
and empty stderr, while the short-circuit path has empty stdout and stderr; at
line 109, capture the repeated invocation’s returned process and assert both
output streams are empty.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 7ae26c43-c046-4720-b665-b29c62fce9f2

📥 Commits

Reviewing files that changed from the base of the PR and between f5d9960 and b1abb7b.

⛔ Files ignored due to path filters (1)
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/scripts/vortex-tooling.sh is excluded by !.vortex/installer/tests/Fixtures/**
📒 Files selected for processing (2)
  • .vortex/tests/phpunit/Functional/ToolingBootstrapTest.php
  • scripts/vortex-tooling.sh

Comment thread .vortex/tests/phpunit/Functional/ToolingBootstrapTest.php Outdated
Comment thread .vortex/tests/phpunit/Functional/ToolingBootstrapTest.php
@github-actions

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

2 similar comments
@AlexSkrypnyk

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 44.44444% with 10 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.39%. Comparing base (b04386a) to head (21e105a).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
scripts/vortex-tooling.sh 44.44% 10 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2858      +/-   ##
==========================================
- Coverage   86.91%   86.39%   -0.52%     
==========================================
  Files         100       93       -7     
  Lines        4830     4683     -147     
  Branches       47        3      -44     
==========================================
- Hits         4198     4046     -152     
- Misses        632      637       +5     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Jul 29, 2026

Copy link
Copy Markdown

📖 Documentation preview for this pull request has been deployed to Netlify:

https://6a699108754f21a0c63fdea6--vortex-docs.netlify.app

This preview is rebuilt on every commit and is not the production documentation site.

@github-actions

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

2 similar comments
@AlexSkrypnyk

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

@github-actions

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

1 similar comment
@AlexSkrypnyk

This comment has been minimized.

@github-actions

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

2 similar comments
@AlexSkrypnyk

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

@github-actions

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

2 similar comments
@AlexSkrypnyk

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

@AlexSkrypnyk AlexSkrypnyk changed the title [#2843] Suppressed Composer output of the initial tooling install. [#2843] Suppressed Composer output of the initial tooling install and adopted the standard progress helpers. Jul 29, 2026
@AlexSkrypnyk AlexSkrypnyk added the Needs review Pull request needs a review from assigned developers label Jul 29, 2026
The ahoy entrypoint bootstraps 'drevops/vortex-tooling' before every command, so on a fresh clone ten lines of Composer progress preceded the requested command. The 'No composer.lock file present' warning refers to the throwaway 'vendor-temp/' project and read as a problem with the user's site.

Every mutating Composer call now runs through a helper that captures its output and replays it on stderr only when the command fails, preserving Composer's exit code. 'VORTEX_DEBUG=1' still streams the output as it happens. A single '[INFO]' line announces the install so a fresh clone does not sit silent.

'composer --quiet' was not used: it also suppresses failure messages, and a failing bootstrap aborts the ahoy entrypoint and blocks every command.
The short-circuit path exits before any Composer call, so asserting the absence of Composer output there duplicated the assertion that the announcement line is not printed.
…ring probes.

Negative substring checks still passed when the bootstrap emitted unanticipated output, so they did not actually prove the output suppression or the silent short-circuit.
The bootstrap printed a hand-rolled announcement line and reported nothing on completion, unlike every other shipped script. It now defines the same 'info'/'note'/'task'/'pass'/'fail' block and brackets the install with a started message and a closing '[ OK ]' line, with '[FAIL]' labelling the replayed Composer output.

The output assertions pin 'TERM' so the colour branch of the helpers is deterministic across environments.
@AlexSkrypnyk
AlexSkrypnyk force-pushed the feature/2843-suppress-tooling branch from 3bb7e24 to 21e105a Compare July 29, 2026 05:21
@AlexSkrypnyk
AlexSkrypnyk enabled auto-merge (squash) July 29, 2026 05:22
@AlexSkrypnyk AlexSkrypnyk added the AUTOMERGE Pull request has been approved and set to automerge label Jul 29, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.vortex/tests/phpunit/Functional/ToolingBootstrapTest.php:
- Line 30: Update the OUTPUT_ENV constant in ToolingBootstrapTest to include
VORTEX_DEBUG set to 0, preserving the existing SHELL_VERBOSITY and TERM values
so the merged process environment consistently disables debug output.

In `@scripts/vortex-tooling.sh`:
- Around line 38-42: Update composer_run so the VORTEX_DEBUG=1 streaming
Composer invocation is handled through an if/else rather than exiting directly
under set -e; on failure, call fail "Composer command failed." and return
Composer’s original status, while preserving successful execution behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 068cf2a0-4854-427f-8a1f-e39d82e83366

📥 Commits

Reviewing files that changed from the base of the PR and between 3bb7e24 and 21e105a.

⛔ Files ignored due to path filters (1)
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/scripts/vortex-tooling.sh is excluded by !.vortex/installer/tests/Fixtures/**
📒 Files selected for processing (2)
  • .vortex/tests/phpunit/Functional/ToolingBootstrapTest.php
  • scripts/vortex-tooling.sh

* regardless of the script's behaviour, and the progress helpers emit ANSI
* colour whenever the terminal reports support for it.
*/
protected const OUTPUT_ENV = ['SHELL_VERBOSITY' => 0, 'TERM' => 'dumb'];

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== file list ==\n'
git ls-files '.vortex/tests/phpunit/Functional/ToolingBootstrapTest.php' 'scripts/vortex-tooling.sh' | cat

printf '\n== outline: ToolingBootstrapTest ==\n'
ast-grep outline .vortex/tests/phpunit/Functional/ToolingBootstrapTest.php --view expanded || true

printf '\n== outline: vortex-tooling.sh ==\n'
ast-grep outline scripts/vortex-tooling.sh --view expanded || true

printf '\n== relevant snippets ==\n'
nl -ba .vortex/tests/phpunit/Functional/ToolingBootstrapTest.php | sed -n '1,180p'
printf '\n--- scripts/vortex-tooling.sh ---\n'
nl -ba scripts/vortex-tooling.sh | sed -n '1,220p'

printf '\n== search for VORTEX_DEBUG and env merging ==\n'
rg -n "VORTEX_DEBUG|OUTPUT_ENV|env override|merge.*env|environment" .vortex tests scripts -g '!**/vendor/**' || true

Repository: drevops/vortex

Length of output: 1040


🏁 Script executed:

#!/bin/bash
set -euo pipefail
git ls-files '.vortex/tests/phpunit/Functional/ToolingBootstrapTest.php' 'scripts/vortex-tooling.sh'

Repository: drevops/vortex

Length of output: 236


🏁 Script executed:

#!/bin/bash
set -euo pipefail
pwd

Repository: drevops/vortex

Length of output: 171


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== ToolingBootstrapTest excerpt ==\n'
sed -n '1,260p' .vortex/tests/phpunit/Functional/ToolingBootstrapTest.php

printf '\n== vortex-tooling.sh ==\n'
sed -n '1,220p' scripts/vortex-tooling.sh

printf '\n== search for command helper and env merging ==\n'
rg -n "proc_open|passthru|shell_exec|exec\(|env\s*=|OUTPUT_ENV|VORTEX_DEBUG|SHELL_VERBOSITY|TERM|putenv|inherit.*env|merge.*env" .vortex tests scripts -g '!**/vendor/**' || true

Repository: drevops/vortex

Length of output: 50370


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== locate FunctionalTestCase ==\n'
fd -a 'FunctionalTestCase.php' . || true

printf '\n== outline candidate test base classes ==\n'
for f in $(fd -a 'FunctionalTestCase.php' .); do
  echo "--- $f ---"
  ast-grep outline "$f" --view expanded || true
done

printf '\n== search for cmd / cmdFail implementation ==\n'
rg -n "function cmdFail|function cmd\(|protected function cmd|public function cmd|cmdFail\(" .vortex tests -g '!**/vendor/**' || true

printf '\n== likely helper file excerpts ==\n'
for f in $(rg -l "function cmdFail|function cmd\(" .vortex tests -g '!**/vendor/**' | head -n 20); do
  echo "--- $f ---"
  nl -ba "$f" | sed -n '1,260p'
done

Repository: drevops/vortex

Length of output: 3545


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== ProcessTrait ==\n'
sed -n '1,220p' .vortex/tests/phpunit/Traits/ProcessTrait.php

printf '\n== related docs ==\n'
sed -n '1,120p' .vortex/tests/CLAUDE.md

printf '\n== search for env handling in process helpers ==\n'
rg -n "env:|array_merge|+ \\\$env|Process|setEnv|putenv|inherit" .vortex/tests/phpunit/Traits .vortex/tests/phpunit/Functional -g '!**/vendor/**' || true

Repository: drevops/vortex

Length of output: 5686


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '1,220p' .vortex/tests/phpunit/Traits/ProcessTrait.php

Repository: drevops/vortex

Length of output: 3044


🌐 Web query:

Symfony Process env array merges inherited environment variables or replaces them; unset variable behavior and defaults

💡 Result:

In the Symfony Process component, environment variables are inherited by default [1][2]. When you provide an array of environment variables to a Process, these variables are merged with the system's existing environment variables [1]. Environment Variable Merging and Replacement When you pass an array of environment variables to a Process (e.g., via the constructor or the run/start methods), these explicitly provided values take precedence over the inherited system environment variables [1][3]. If a key in your provided array matches an existing environment variable, the inherited value is effectively replaced by the one you provided [1][3]. Unsetting Variables To prevent a specific inherited environment variable from being passed to the child process, you can explicitly set that variable's value to false in the environment array [1][4]. For example: $process = new Process(['command'], null, [ 'UNWANTED_VAR' => false, ]); This signals the component to exclude the variable from the environment block passed to the underlying system process [1]. Important Considerations - Inheritance is mandatory: The option to disable inheritance entirely was deprecated and removed in earlier versions (around Symfony 4.0), meaning processes now always inherit system environment variables [2][5]. - Value Types: Ensure that the values in your environment array are strings or types that can be cast to strings. Passing arrays as values within the environment array can lead to errors such as "Array to string conversion" when the component processes them [6][7]. - Implementation Details: Internally, the component performs a merge between the system's inherited environment (collected via getenv and $_SERVER/$_ENV) and your provided array [3][8]. When unsetting via false, the internal logic filters or diffs these arrays to ensure the excluded variables are not passed to the final execution command [3].

Citations:


🌐 Web query:

Symfony\Component\Process\Process constructor env parameter inherit current environment documentation

💡 Result:

In Symfony's Process component, processes launched via the Process class automatically inherit all environment variables defined in the current system environment [1][2][3]. When providing an environment variable array to the Process constructor via the env parameter, these variables are merged with the existing environment [1][2]. If you need to prevent a specific environment variable from being inherited by the child process, you can explicitly set that variable to false within the env array provided to the constructor [1][2][4]. Example of passing custom variables while disabling an inherited one: $process = new Process(['command'], null, [ 'CUSTOM_VAR' => 'value', 'APP_ENV' => false, // Prevents inheritance of APP_ENV ]); If the env parameter is passed as null to the constructor, the child process will simply inherit the full environment of the current PHP process [5][6][7].

Citations:


🌐 Web query:

Symfony Process env parameter inherit or replace current environment docs

💡 Result:

In the Symfony Process component, environment variables defined in the system are always inherited by default [1][2]. The legacy method inheritEnvironmentVariables() has been removed and is no longer available [1][2]. To manage environment variables when running a process: 1. Inherit and Extend: Any environment variables passed to the Process constructor or execution methods (like run(), mustRun(), or start()) are merged with the system's environment variables [3][4][2]. 2. Remove/Disable Specific Variables: If you need to prevent the process from inheriting specific system environment variables, you can explicitly remove them by setting those keys to false in the environment array provided to the process [3][5][6]. Example of removing environment variables: $process = new Process(['your_command'], null, [ 'APP_ENV' => false, 'UNWANTED_VAR' => false, ]); $process->run; By setting a variable to false, the Process component treats it as removed from the environment block passed to the underlying process execution [3][4].

Citations:


🌐 Web query:

Symfony\Component\Process\Process environment variables false unset inherit current env

💡 Result:

In the Symfony Process component, environment variables are inherited from the current system environment by default [1][2][3]. There is no configuration option to completely disable this inheritance [2][3]. To prevent specific environment variables from being inherited by the process you are executing, you must explicitly set them to false in the environment variable array provided to the Process constructor or its execution methods [1][4]. Example: $process = new Process(['your_command'], null, [ 'VAR_TO_UNSET' => false, 'ANOTHER_VAR' => false, ]); $process->run; This mechanism allows you to maintain the necessary system environment (such as PATH or other critical variables) while ensuring that specific variables from the parent process do not leak into the child process [1][5]. The older method, Process::inheritEnvironmentVariables, has been removed [3].

Citations:


Set VORTEX_DEBUG=0 in OUTPUT_ENV
ProcessTrait merges this array with the inherited process env, so a parent VORTEX_DEBUG=1 still reaches scripts/vortex-tooling.sh and can change the Composer output these assertions depend on. .vortex/tests/phpunit/Functional/ToolingBootstrapTest.php:30

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.vortex/tests/phpunit/Functional/ToolingBootstrapTest.php at line 30, Update
the OUTPUT_ENV constant in ToolingBootstrapTest to include VORTEX_DEBUG set to
0, preserving the existing SHELL_VERBOSITY and TERM values so the merged process
environment consistently disables debug output.

Comment thread scripts/vortex-tooling.sh
Comment on lines +38 to +42
composer_run() {
if [ "${VORTEX_DEBUG-}" = "1" ]; then
composer "$@"
return
fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Emit the standard failure marker in debug mode.

When VORTEX_DEBUG=1, a failed Composer command exits through set -e before reaching fail "Composer command failed." at Line [48]. Debug failures therefore have a different failure contract and omit the standard [FAIL] message. Handle the streaming call in an if/else, emit fail, and return Composer’s original status.

Proposed fix
 composer_run() {
+  local output status=0
   if [ "${VORTEX_DEBUG-}" = "1" ]; then
-    composer "$@"
-    return
+    if composer "$@"; then
+      return 0
+    else
+      status=$?
+      fail "Composer command failed."
+      return "${status}"
+    fi
   fi
 
-  local output status=0
   output=$(composer "$@" 2>&1) || status=$?
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
composer_run() {
if [ "${VORTEX_DEBUG-}" = "1" ]; then
composer "$@"
return
fi
composer_run() {
local output status=0
if [ "${VORTEX_DEBUG-}" = "1" ]; then
if composer "$@"; then
return 0
else
status=$?
fail "Composer command failed."
return "${status}"
fi
fi
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/vortex-tooling.sh` around lines 38 - 42, Update composer_run so the
VORTEX_DEBUG=1 streaming Composer invocation is handled through an if/else
rather than exiting directly under set -e; on failure, call fail "Composer
command failed." and return Composer’s original status, while preserving
successful execution behavior.

@github-actions

Copy link
Copy Markdown

Code coverage (threshold: 90%)

  Classes: 100.00% (1/1)
  Methods: 100.00% (2/2)
  Lines:   98.55% (204/207)
Per-class coverage
Drupal\ys_demo\Plugin\Block\CounterBlock
  Methods: 100.00% ( 2/ 2)   Lines: 100.00% ( 10/ 10)

@AlexSkrypnyk

This comment has been minimized.

2 similar comments
@AlexSkrypnyk

This comment has been minimized.

@AlexSkrypnyk

Copy link
Copy Markdown
Member Author

Code coverage (threshold: 90%)

  Classes: 100.00% (1/1)
  Methods: 100.00% (2/2)
  Lines:   98.55% (204/207)
Per-class coverage
Drupal\ys_demo\Plugin\Block\CounterBlock
  Methods: 100.00% ( 2/ 2)   Lines: 100.00% ( 10/ 10)

@AlexSkrypnyk
AlexSkrypnyk merged commit fa098d0 into main Jul 29, 2026
34 checks passed
@AlexSkrypnyk
AlexSkrypnyk deleted the feature/2843-suppress-tooling branch July 29, 2026 05:37
@github-project-automation github-project-automation Bot moved this from BACKLOG to Release queue in Vortex 1.x Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A1 Board worker 1 AUTOMERGE Pull request has been approved and set to automerge Needs review Pull request needs a review from assigned developers

Projects

Status: Release queue

Development

Successfully merging this pull request may close these issues.

Suppress initial tooling install

1 participant