Skip to content

🐛 fix(qa): validate ICU patterns on locked segments at project creation#4513

Merged
Ostico merged 5 commits intodevelopfrom
fix-icu-check-not-performed-on-blocked-segments
Apr 21, 2026
Merged

🐛 fix(qa): validate ICU patterns on locked segments at project creation#4513
Ostico merged 5 commits intodevelopfrom
fix-icu-check-not-performed-on-blocked-segments

Conversation

@Ostico
Copy link
Copy Markdown
Contributor

@Ostico Ostico commented Apr 20, 2026

Summary

ICU string validation was silently skipped on locked (101% ICE) segments during project creation. QAProcessor::createQA() instantiated QA without passing MessagePatternComparator or the $string_contains_icu flag, causing ICUChecker::hasIcuPatterns() to always return false.

This PR fixes the bug and consolidates all ICU source-segment detection into a single shared utility (ICUSourceSegmentDetector), eliminating the last inline containsComplexSyntax() && isValidSyntax() duplication in GetSegmentsController.

Type

  • feat — new user-facing feature
  • fix — bug fix
  • refactor — restructure without behavior change
  • chore — build, deps, config, docs
  • perf — performance improvement
  • test — test coverage

Changes

File Change
lib/Model/ProjectCreation/QAProcessor.php Add $icuEnabled param, use ICUSourceSegmentDetector::sourceContainsIcu(), pass comparator + flag to QA
lib/Model/ProjectCreation/ProjectManager.php Pass icuEnabled from project metadata to QAProcessor
lib/Utils/LQA/ICUSourceSegmentDetector.php New shared static utility — single source of truth for ICU source detection
lib/Utils/LQA/ICUSourceSegmentChecker.php Refactored to delegate to ICUSourceSegmentDetector
lib/Controller/API/App/GetSegmentsController.php Replace inline ICU detection with ICUSourceSegmentDetector::sourceContainsIcu()
tests/unit/Model/ProjectCreation/QAProcessorTest.php 4 new ICU detection regression tests
tests/unit/Model/ProjectCreation/TestableQAProcessor.php Updated constructor signature + spy fields

Testing

  • vendor/bin/phpunit --exclude-group=ExternalServices --no-coverage passes
  • ./vendor/bin/phpstan analyse passes (2 pre-existing errors in View/APIDoc.php)
  • Manual testing performed (describe below)
  • New tests added for changed behavior
  • Regression tests added for bug fixes

2118 tests, 17699 assertions — all green.

AI Disclosure

  • No AI tools were used in this PR
  • AI tools were used — details below

Claude Code (claude-opus-4-6) — ICU fix, shared detector extraction, codebase-wide refactoring audit, test generation.

Notes

Codebase audit confirmed all ICU detection sites now use the shared utility:

  • QAProcessor — calls ICUSourceSegmentDetector::sourceContainsIcu() directly
  • GetSegmentsController — calls ICUSourceSegmentDetector::sourceContainsIcu() directly (this PR)
  • SetTranslationController, GetWarningController, XliffReplacerCallback — via ICUSourceSegmentChecker trait, which delegates to the detector

Copilot AI review requested due to automatic review settings April 20, 2026 13:28
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes project-creation QA so ICU MessageFormat validation is applied to locked (101% ICE) segments when ICU is enabled for the project, aligning behavior with existing tag-validation flows. It also enables stricter PHPStan @throws checking and regenerates the baseline, adding a backlog file for incremental cleanup.

Changes:

  • Pass an icuEnabled flag into QAProcessor and create/pass a MessagePatternComparator + sourceContainsIcu into QA during project creation.
  • Add unit tests covering ICU enabled/disabled detection and an end-to-end “broken ICU target produces warnings” scenario.
  • Enable new PHPStan exception/throws rules and baseline existing violations (plus a tracking backlog file).

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
lib/Model/ProjectCreation/QAProcessor.php Adds ICU detection and passes comparator/flag into QA during processing.
lib/Model/ProjectCreation/ProjectManager.php Wires icuEnabled from ProjectStructure::$metadata into QAProcessor.
tests/unit/Model/ProjectCreation/QAProcessorTest.php Adds ICU-focused unit tests (detection and error reporting).
tests/unit/Model/ProjectCreation/TestableQAProcessor.php Updates overridden createQA() signature and captures comparator/flag for assertions.
phpstan.neon Enables stricter throws/exception checking configuration.
phpstan-baseline.neon Regenerated baseline to account for newly enabled PHPStan rules.
phpstan-throws-backlog.txt Adds a list of files to fix sequentially for throws-rule cleanup.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread lib/Model/ProjectCreation/QAProcessor.php
Comment thread .github/scripts/pr-readiness-check.js Fixed
Copilot AI review requested due to automatic review settings April 20, 2026 15:33
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 10 out of 12 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/pr-readiness-check.yml Outdated
Comment thread lib/Model/ProjectCreation/QAProcessor.php
Comment thread lib/Model/ProjectCreation/ProjectManager.php
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 10 out of 12 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread lib/Model/ProjectCreation/QAProcessor.php
Copilot AI review requested due to automatic review settings April 20, 2026 16:17
@Ostico Ostico review requested due to automatic review settings April 20, 2026 16:17
Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 20, 2026

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/PHPMailer/PHPMailer/zipball/d1ac35d784bf9f5e61b424901d5a014967f15b12
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/d28d4827f934469e7ca4de940ab0abd0788d1e65
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/aws/aws-sdk-php/zipball/df2a6c362ddce2ede3ac3a8286f5788847e614b4
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/defuse/php-encryption/zipball/f53396c2d34225064647a05ca76c1da9d99e5828
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/dg/bypass-finals/zipball/920a7da2f3c1422fd83f9ec4df007af53dc4018b
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/elastic/elastic-transport-php/zipball/1d476af5dc0b74530d59b67d5dd96ee39768d5a4
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/elastic/elasticsearch-php/zipball/1771284cb43a7b653634d418b6f5f0ec84ff8a6d
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/ezyang/htmlpurifier/zipball/b287d2a16aceffbf6e0295559b39662612b77fcf
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/google-gemini-php/client/zipball/d61ebe8e8f7acc2aa66ce2e8a57c23bf32e1e340
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/1a7dd2368adb7ee4d5d07f828ae2dd7ecc43247c
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/googleapis/google-api-php-client/zipball/703ba9acfaf4ba71306108207feafb6d1d137eb0
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/googleapis/google-auth-library-php/zipball/870c17ee3a1d73338d39a9ffa77a700ba77f5a83
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/googleapis/php-jwt/zipball/47ad26bab5e7c70ae8a6f08ed25ff83631121380
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/77bebeb4c6c340bb3c11c843b2cffd8bbfde4d5e
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/cwh/zipball/6525267600ba9823d06254c6cecdb5d35a47e0c8
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/emoji-to-entity-converter/zipball/33ecdffbf49b3402be44215a6a8a56966201bafb
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/icu-intl/zipball/bc036f29104ec7211bfe63d3bf49dd2e82741d0c
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/klein.php/zipball/ca6f61506d7bdb291c0b203c36a1a9cf1b9cdd05
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/lara-php/zipball/08266e0592f719e24d9d486e4e05d9c65a59b1e5
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/simple-s3/zipball/dae184c71e6aaf3969eb4e17ad2b7813a37ce85f
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/subfiltering/zipball/1ce898350ca6a9aa17180c98ae78b5a8d7a4d3a7
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/whole-text-finder/zipball/cc2d7d227ffc329dfe2890a788d5669b626d3353
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/xliff-parser/zipball/500e940162d5de36b4d9877ee26c07d4c78c258e
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/matecat/xml-dom-parser/zipball/0ddc8a4987619ee8a05e035d0c9c08278ced2c3f
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/opentelemetry-php/api/zipball/6f8d237ce2c304ca85f31970f788e7f074d147be
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/opentelemetry-php/context/zipball/3c414b246e0dabb7d6145404e6a5e4536ca18d07
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/orhanerday/open-ai/zipball/2ccdf2f6b4287b9e570a1ddcf33083b7ad9f7e9c
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/phplang/scope-exit/zipball/239b73abe89f9414aa85a7ca075ec9445629192b
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/phpseclib/phpseclib/zipball/d59c94077f9c9915abb51ddb52ce85188ece1748
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/phpstan/phpstan/zipball/231397213efb7c0a066ee024b5c3c87f2d3adfa0
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/phptal/PHPTAL/zipball/69926771955ce722605e62ec0259ebf7bc0a2ef4
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/predis/predis/zipball/2033429520d8997a7815a2485f56abe6d2d0e075
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/comparator/zipball/c284f55811f43d555e51e8e5c166ac40d3e33c63
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/environment/zipball/7b8842c2d8e85d0c3a5831236bf5869af6ab2a11
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/a25bde1f8f83849f441ef5713c6466e470872a71
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/phpunit/zipball/92f7744ca5f5701c9e4b4a60d9e143f2d84956da
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/stevenmaguire/oauth2-microsoft/zipball/f24f79d8c47224d24a1240270ca3b0a4c1521ed4
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/stomp-php/stomp-php/zipball/a5d00577756c9d9995e725e3271473d24bfc148b
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/swaggest/json-diff/zipball/7ebc4eab95bcc73916433964c266588d09b35052
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/swaggest/php-json-schema/zipball/1f3a77a382c5d273a0f1fe34be3b8af4060a88cd
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/cache/zipball/e3e76b9ba0dff3dfe08ebda500723976dd9de407
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/config/zipball/2d19dde43fa2ff720b9a40763ace7226594f503b
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/console/zipball/2e322c76cdccb302af6b275ea2207169c8355328
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/dependency-injection/zipball/cd7881a6dc84b780411199cd0584e1a53a3b9ba7
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/filesystem/zipball/58b9790d12f9670b7f53a1c1738febd3108970a5
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/polyfill-php82/zipball/34808efe3e68f69685796f7c253a2f1d8ea9df59
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/symfony/var-exporter/zipball/398907e89a2a56fe426f7955c6fa943ec0c77225
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/thephpleague/oauth2-client/zipball/26e8c5da4f3d78cede7021e09b1330a0fc093d5e
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/thephpleague/oauth2-facebook/zipball/ec6d62a00b548c6cd56d7b734346b9e6befbfbbb
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/thephpleague/oauth2-github/zipball/84211f62b757f7266fe605a0aa874a32f52c24fd
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/thephpleague/oauth2-linkedin/zipball/f9ab661ca37884067ca286412b6c17304d3c2fac
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)
  • https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4
    • Triggering command: /usr/bin/php8.3 /usr/bin/php8.3 -n -c /tmp/zc3UqL /usr/bin/composer install --no-interaction --prefer-dist (http block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI review requested due to automatic review settings April 20, 2026 16:36
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 17 changed files in this pull request and generated 1 comment.

Comment thread phpstan.neon Outdated
Copilot AI review requested due to automatic review settings April 20, 2026 17:07
@Ostico Ostico force-pushed the fix-icu-check-not-performed-on-blocked-segments branch from 564c188 to 62cfbbc Compare April 20, 2026 17:07
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated no new comments.

… GetSegmentsController

Centralize the last remaining duplicated `containsComplexSyntax() && isValidSyntax()`
pattern to use ICUSourceSegmentDetector::sourceContainsIcu(), consistent with all other
ICU detection sites (QAProcessor, trait consumers).
Copilot AI review requested due to automatic review settings April 20, 2026 17:28
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.

Comment on lines +20 to +23
* When ICU is enabled for the project, the processor also detects ICU MessageFormat
* patterns in each segment and passes a {@see MessagePatternComparator} to QA so that
* ICU consistency is validated alongside tag checks.
*
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

The PR description lists additional changes/files (PR readiness workflow + scripts, PR template, phpstan @throws rules, phpstan-throws-backlog.txt) that don’t appear to be present in this PR’s code changes. Please either include those files/changes in the PR, or update the description to match what’s actually being merged to avoid confusion for reviewers and release notes.

Copilot uses AI. Check for mistakes.
@Ostico Ostico merged commit f27a93b into develop Apr 21, 2026
13 checks passed
@Ostico Ostico deleted the fix-icu-check-not-performed-on-blocked-segments branch April 21, 2026 09:06
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.

4 participants