Skip to content

build(php): Raise minimum version to 8.4#60

Merged
MarjovanLier merged 1 commit into
mainfrom
chore/php-8.4-upgrade
Jun 27, 2026
Merged

build(php): Raise minimum version to 8.4#60
MarjovanLier merged 1 commit into
mainfrom
chore/php-8.4-upgrade

Conversation

@MarjovanLier

@MarjovanLier MarjovanLier commented Jun 27, 2026

Copy link
Copy Markdown
Owner

Summary

Raises the supported PHP floor from 8.3 to 8.4 across the whole toolchain and aligns every version reference. The library code stays 8.4-compatible (no 8.5-only syntax).

Changes

Platform / build

  • composer.json: require php ^8.4
  • Dockerfile: php:8.4-cli-alpine
  • CI matrix now ["8.4", "8.5"] (drops 8.3); codecov job on 8.4
  • phpstan.neon phpVersion: 80400; rector.php PHP_84 / UP_TO_PHP_84

Code

  • nameFix(): reverted an experimental 8.5 pipe-operator rewrite back to the typed one-liner. The pipe form forced untyped wrapper closures that broke static analysis and required PHP 8.5; the one-liner is shorter, fully typed, and runs on the 8.4 floor.

Benchmark (RemoveAccentsComplexityBenchmark)

  • Guard the str_repeat count as a non-negative int.
  • Fold each removeAccents() result into a printed checksum so the pure calls cannot be optimised away (also resolves staticMethod.resultUnused).

Docs

  • README, CONTRIBUTING, docs site, CLAUDE.md, and review config updated to 8.4+.

Notes

  • Two 8.3 references are intentionally kept because changing them would make them false: the phpstan.neon typed-constant note (typed constants arrived in 8.3) and the historical benchmark-measurement record in docs/performance.md.
  • This raises the minimum version, so it is a compatibility break for consumers still on PHP 8.3 and should be released accordingly.

Verification

  • PHPStan (max, scoped to src/): no errors
  • Mago: no issues
  • Pest: 201 passed (889 assertions)

Summary by CodeRabbit

  • Bug Fixes

    • Improved string replacement handling to use more reliable built-in checks.
  • Tests

    • Strengthened benchmark measurements so results are fully exercised and can’t be optimised away.
    • Added safer input handling to avoid invalid repeat counts during benchmark generation.

Move the supported PHP floor from 8.3 to 8.4 across the toolchain.
Drop 8.3 from the CI matrix (now 8.4 and 8.5), bump the Docker image,
phpstan and rector targets, and align every version reference in the
README, docs site, and contributor guides. Revert an experimental 8.5
pipe operator in nameFix back to the typed one-liner so the code runs
on the 8.4 floor.

Also tighten the removeAccents benchmark surfaced by static analysis:
guard the str_repeat count as a non-negative int and fold each result
into a printed checksum so the pure calls cannot be optimised away.

Signed-off-by: Marjo Wenzel van Lier <marjo.vanlier@gmail.com>
Copilot AI review requested due to automatic review settings June 27, 2026 04:03
@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Ignoring CodeRabbit configuration file changes. For security, only the configuration from the base branch is applied for open source repositories.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1fd8977e-1cef-4779-9926-264f2d016158

📥 Commits

Reviewing files that changed from the base of the PR and between f7485d3 and 6615fd1.

⛔ Files ignored due to path filters (14)
  • .coderabbit.yaml is excluded by none and included by none
  • .github/workflows/codecov.yml is excluded by none and included by none
  • .github/workflows/php.yml is excluded by none and included by none
  • CLAUDE.md is excluded by none and included by none
  • CONTRIBUTING.md is excluded by none and included by none
  • Dockerfile is excluded by none and included by none
  • README.md is excluded by none and included by none
  • composer.json is excluded by none and included by none
  • docs/_config.yml is excluded by none and included by none
  • docs/contributing.md is excluded by none and included by none
  • docs/getting-started.md is excluded by none and included by none
  • docs/index.md is excluded by none and included by none
  • phpstan.neon is excluded by none and included by none
  • rector.php is excluded by none and included by none
📒 Files selected for processing (2)
  • src/StringManipulation.php
  • tests/Benchmark/RemoveAccentsComplexityBenchmark.php

📝 Walkthrough

Walkthrough

The PR qualifies global PHP function calls in StringManipulation::strReplace() and updates the remove-accents benchmark to retain computed results, accumulate and print a checksum, and clamp generated repeat counts to non-negative values.

Changes

String replacement and benchmark correctness

Layer / File(s) Summary
Qualified global function calls
src/StringManipulation.php
strReplace() uses fully qualified \is_string() and \strlen() in the single-character fast path.
Benchmark checksum and input clamp
tests/Benchmark/RemoveAccentsComplexityBenchmark.php
run() stores removeAccents() results, accumulates a checksum, prints it after the loop, and makeString() clamps the repeat count with max(0, ...).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

Review effort 3/5

Suggested reviewers

  • qodo-code-review
🚥 Pre-merge checks | ✅ 10
✅ Passed checks (10 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title follows conventional commits and accurately reflects the PHP 8.4 minimum-version bump.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Strict Type Declarations ✅ Passed All 3 PHP files in src/ have declare(strict_types=1); immediately after <?php and before namespace.
No Debugging Functions ✅ Passed No var_dump, var_export, print_r, dd, or dump calls were found in src/; the production tree is clean.
Test Coverage ✅ Passed StrReplace’s single-char optimisation is already covered by tests; the benchmark edits are test harness only and don’t need PHPUnit coverage.
Performance Complexity ✅ Passed PASS: The touched paths remain linear (strtr/str_replace, bounded benchmark loops), and the repo documents O(n)/O(1) complexity for non-trivial methods.
Security Best Practices ✅ Passed No hardcoded secrets/API keys found; the docs examples validate input and use prepared statements, and CI uses secret references only.
✨ 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 chore/php-8.4-upgrade

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@codecov

codecov Bot commented Jun 27, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (f7485d3) to head (6615fd1).

Additional details and impacted files
@@             Coverage Diff             @@
##                main       #60   +/-   ##
===========================================
  Coverage     100.00%   100.00%           
  Complexity        32        32           
===========================================
  Files              1         1           
  Lines             61        61           
===========================================
  Hits              61        61           

☔ 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.

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request upgrades the library's minimum PHP version requirement from PHP 8.3 to PHP 8.4 across all configuration files, documentation, Dockerfile, Composer settings, PHPStan, and Rector configurations. Additionally, it optimizes global function calls in StringManipulation.php using fully-qualified names, and updates the benchmark test suite to prevent dead-code elimination of pure function calls by accumulating and printing a checksum. There are no review comments provided, so I have no feedback to evaluate.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

build(php): Raise minimum PHP version to 8.4
⚙️ Configuration changes 📝 Documentation 🐞 Bug fix 🕐 20-40 Minutes

Grey Divider

Description

• Raise minimum supported PHP version from 8.3 to 8.4 across tooling and CI.
• Align static analysis, Docker image, and docs to the new PHP floor.
• Fix benchmark safety/validity and keep library code compatible with PHP 8.4.
Diagram

graph TD
  Dev["Maintainer"] --> Docs["Docs & guides"] --> Composer["composer.json (PHP ^8.4)"] --> CI["GitHub Actions (8.4/8.5)"]
  CI --> Docker["Dockerfile (php:8.4)"]
  CI --> Static["PHPStan/Rector (8.4)"] --> Lib["StringManipulation src"] --> Bench["RemoveAccents benchmark"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Keep PHP 8.3 support (delay floor bump)
  • ➕ Avoids a breaking change for consumers still on 8.3
  • ➕ Preserves broader compatibility without forcing a major release
  • ➖ Blocks adoption of 8.4-only features and tooling targets
  • ➖ Maintains extra CI/tooling burden for a deprecated runtime
2. Keep 8.3 CI job as non-blocking signal
  • ➕ Provides early warning if code accidentally remains 8.3-compatible or breaks unexpectedly
  • ➕ Can ease downstream transition while still declaring 8.4 as the supported floor
  • ➖ Adds CI time/cost and can create confusion about what is officially supported
  • ➖ May encourage relying on accidental 8.3 compatibility

Recommendation: Proceed with the PR’s approach if the intent is an explicit compatibility break: it consistently updates the runtime floor across composer, CI, Docker, and static analysis, and it avoids introducing 8.5-only constructs. Ensure the release is versioned/announced as a breaking change (and consider a short upgrade note) so consumers on PHP 8.3 are not surprised.

Files changed (16) +41 / -34

Enhancement (1) +1 / -1
StringManipulation.phpUse fully-qualified global functions in single-char strReplace fast-path +1/-1

Use fully-qualified global functions in single-char strReplace fast-path

• Updates the single-character replacement optimization to call \is_string and \strlen explicitly, improving consistency with namespaced code and static analysis expectations.

src/StringManipulation.php

Bug fix (1) +10 / -3
RemoveAccentsComplexityBenchmark.phpStabilize benchmark by consuming results and guarding str_repeat count +10/-3

Stabilize benchmark by consuming results and guarding str_repeat count

• Stores and consumes removeAccents() results via a checksum to avoid dead-code elimination and resolve unused-result static analysis warnings. Guards the str_repeat multiplier with max(0, ...) to ensure a non-negative repeat count.

tests/Benchmark/RemoveAccentsComplexityBenchmark.php

Documentation (7) +16 / -16
CLAUDE.mdAlign Claude project guidance to PHP 8.4+ +3/-3

Align Claude project guidance to PHP 8.4+

• Updates the project overview and recommended Docker usage to reference PHP 8.4+. Updates CI description to match the 8.4/8.5 matrix.

CLAUDE.md

CONTRIBUTING.mdBump contributor local PHP requirement to 8.4+ +1/-1

Bump contributor local PHP requirement to 8.4+

• Updates contributor prerequisites to state PHP 8.4+ for optional local development without Docker.

CONTRIBUTING.md

README.mdUpdate README requirements and examples to PHP 8.4+ +4/-4

Update README requirements and examples to PHP 8.4+

• Updates library introduction, Docker testing notes, local testing notes, and system requirements to reference PHP 8.4+ instead of 8.3+.

README.md

_config.ymlUpdate docs site description to PHP 8.4+ +1/-1

Update docs site description to PHP 8.4+

• Adjusts the docs site metadata description to reference PHP 8.4+.

docs/_config.yml

contributing.mdUpdate docs contributing requirements/standards to PHP 8.4+ +2/-2

Update docs contributing requirements/standards to PHP 8.4+

• Updates docs contributor prerequisites and PHP standards to reference PHP 8.4+ instead of 8.3+.

docs/contributing.md

getting-started.mdRaise documented runtime requirement to PHP 8.4+ +1/-1

Raise documented runtime requirement to PHP 8.4+

• Updates getting-started requirements to state PHP 8.4+ with strict typing.

docs/getting-started.md

index.mdAlign docs homepage to PHP 8.4+ requirements +4/-4

Align docs homepage to PHP 8.4+ requirements

• Updates site front-matter description, intro copy, and system requirements to reference PHP 8.4+ rather than 8.3+.

docs/index.md

Other (7) +14 / -14
.coderabbit.yamlUpdate CodeRabbit guidance to PHP 8.4+ +4/-4

Update CodeRabbit guidance to PHP 8.4+

• Updates repository description and review guidance to reference PHP 8.4+ instead of 8.3+. Also tweaks phrasing/parentheses in the FOOP guideline text.

.coderabbit.yaml

codecov.ymlRun codecov job on PHP 8.4 +2/-2

Run codecov job on PHP 8.4

• Updates the Codecov workflow to set up PHP 8.4 instead of 8.3 for coverage reporting.

.github/workflows/codecov.yml

php.ymlDrop PHP 8.3 from CI test matrix +1/-1

Drop PHP 8.3 from CI test matrix

• Adjusts the GitHub Actions test matrix to run on PHP 8.4 and 8.5 only, removing 8.3.

.github/workflows/php.yml

DockerfileMove Docker base image to PHP 8.4 +1/-1

Move Docker base image to PHP 8.4

• Updates the Docker base image from php:8.3-cli-alpine to php:8.4-cli-alpine to match the new minimum PHP version.

Dockerfile

composer.jsonRequire PHP ^8.4 and update package metadata text +3/-3

Require PHP ^8.4 and update package metadata text

• Raises the Composer PHP requirement from ^8.3 to ^8.4 and aligns description/scripts messaging to PHP 8.4+ feature adoption.

composer.json

phpstan.neonTarget PHP 8.4 for PHPStan analysis +1/-1

Target PHP 8.4 for PHPStan analysis

• Bumps PHPStan's configured phpVersion from 80300 to 80400 to match the new minimum supported runtime.

phpstan.neon

rector.phpUpdate Rector PHP version and rule set to PHP 8.4 +2/-2

Update Rector PHP version and rule set to PHP 8.4

• Moves Rector configuration from PHP_83/UP_TO_PHP_83 to PHP_84/UP_TO_PHP_84, aligning automated refactoring targets with the new floor.

rector.php

Copilot AI 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.

Pull request overview

This PR raises the project-wide minimum supported PHP version from 8.3 to 8.4 and updates the toolchain (Composer, Docker, CI, static analysis, Rector) and documentation to consistently reflect that new floor, while keeping library code compatible with PHP 8.4.

Changes:

  • Updated platform/tooling version references (Composer PHP requirement, Docker base image, CI matrices, PHPStan and Rector target versions).
  • Adjusted the RemoveAccentsComplexityBenchmark to consume results (avoid unused-result warnings) and guard str_repeat() against negative counts.
  • Refreshed documentation and contributor guidance to state PHP 8.4+.

Reviewed changes

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

Show a summary per file
File Description
tests/Benchmark/RemoveAccentsComplexityBenchmark.php Consumes benchmark results and guards repeat count to keep benchmark tooling robust.
src/StringManipulation.php Minor tweak to the optimized single-char strtr() fast path condition.
rector.php Updates Rector target version/sets to PHP 8.4.
README.md Updates stated PHP requirement to 8.4+.
phpstan.neon Updates PHPStan target version to 8.4.
docs/index.md Updates docs site to reflect PHP 8.4+ requirement.
docs/getting-started.md Updates getting-started requirements to PHP 8.4+.
docs/contributing.md Updates contributing prerequisites to PHP 8.4+.
docs/_config.yml Updates docs site description to PHP 8.4+.
Dockerfile Bumps base image to php:8.4-cli-alpine.
CONTRIBUTING.md Updates local PHP version note to 8.4+.
composer.json Raises PHP requirement to ^8.4 and updates description text.
CLAUDE.md Updates guidance and CI description to PHP 8.4+.
.github/workflows/php.yml Drops PHP 8.3 from the CI matrix.
.github/workflows/codecov.yml Runs Codecov job on PHP 8.4.
.coderabbit.yaml Updates config text to PHP 8.4+ and minor wording punctuation.

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


// Optimize single character replacements using strtr which is faster for this case
if (is_string($search) && is_string($replace) && strlen($search) === 1) {
if (\is_string($search) && \is_string($replace) && \strlen($search) === 1) {
@qodo-code-review

qodo-code-review Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Extension requirements mismatch 🐞 Bug ⚙ Maintainability
Description
README states mbstring and intl are required, but composer.json does not declare them under
require, so Composer will not enforce these prerequisites. This leaves the project metadata and
documentation inconsistent about what a valid runtime environment is.
Code

README.md[R246-249]

+- **PHP 8.4 or later** (strict typing enabled)
- **`mbstring` extension** for multi-byte string operations
- **`intl` extension** for internationalisation and advanced Unicode support
- **Enabled `declare(strict_types=1);`** for robust type safety
Evidence
The README claims runtime requirements for mbstring/intl, but composer.json only requires PHP
^8.4 and does not list any ext-* requirements, so the package metadata does not match the
documented prerequisites.

README.md[244-249]
composer.json[45-47]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`README.md` documents `mbstring` and `intl` as required extensions, but `composer.json` does not declare `ext-mbstring` / `ext-intl` in `require`. This makes the documented requirements and the package metadata inconsistent.

### Issue Context
Composer only enforces platform/extension requirements when they are listed in `composer.json` as `ext-*` requirements.

### Fix Focus Areas
- README.md[244-249]
- composer.json[45-47]

### Suggested fix
Choose one of the following and make both files consistent:
1) If the extensions are truly required at runtime: add
  - `"ext-mbstring": "*"`
  - `"ext-intl": "*"`
  to `composer.json -> require`.

2) If they are not required: remove or soften the README requirements (e.g., mark them as optional / only needed for specific use-cases).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Previous review results

Review updated until commit 6615fd1

Results up to commit 6615fd1


🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Great, no issues found!

Qodo reviewed your code and found no material issues that require review
Auto-approved notes - no code review findings
- 'auto_approve_for_no_suggestions' flag enabled

Qodo Logo

@qodo-code-review

Copy link
Copy Markdown
Contributor

Changelog updates: 🔄

2026-06-27 *

Changed

  • Raised the minimum supported PHP version to 8.4 and aligned tooling/CI/documentation accordingly.
  • Improved benchmark robustness to prevent invalid inputs and avoid dead-code elimination.

to commit the new content to the CHANGELOG.md file, please type:
'/update_changelog --pr_update_changelog.push_changelog_changes=true'

@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit 6615fd1

@claude

claude Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Code Review — PR #60: Raise minimum version to 8.4

This PR is a clean, well-scoped version bump: it consistently updates PHP references across CI, Docker, Composer, static analysis, and docs. The benchmark changes add a dead-code-elimination guard and a defensive repeat-count clamp. All changes are internally consistent with the stated goal. Three actionable issues and two minor observations follow.


Finding 1 — Phan config not updated (.phan/config.php lines 57–61)

Both target_php_version and minimum_target_php_version are still '8.3', and the auto-generated comment on line 57 still references the old composer requirement:

// Automatically inferred from composer.json requirement for "php" of "^8.3"
'target_php_version' => '8.3',

// Minimum PHP version to check compatibility against
'minimum_target_php_version' => '8.3',

Every other static-analysis tool (phpstan.neonphpVersion: 80400, rector.phpPHP_84) was updated, but Phan was missed. With these settings Phan analyses the code as if targeting PHP 8.3, so it won't catch 8.4-specific type changes, deprecations, or new built-in signatures. Additionally, the comment on line 50 lists '8.3' as the maximum enumerated value; if Phan v5 does not accept '8.4', it silently falls back to null (runtime-version detection), making the intent doubly unclear.

Fix: Update both keys to '8.4' and correct the comment to reference ^8.4.


Finding 2 — Inconsistent global-namespace qualification in strReplace (src/StringManipulation.php line 232)

The PR qualifies three built-in calls with a leading backslash on line 231, but the strtr call on the very next line is left unqualified:

if (\is_string($search) && \is_string($replace) && \strlen($search) === 1) {
    return strtr($subject, [$search => $replace]);  // ← no backslash
}

The optimization rationale for the backslash (avoiding namespace resolution at compile time) applies equally to strtr. As written, the method is internally inconsistent within a single if-block.

Fix: return \strtr($subject, [$search => $replace]);


Finding 3 — max(0, …) guard in makeString is unreachable (tests/Benchmark/RemoveAccentsComplexityBenchmark.php line 102)

$string = str_repeat(self::BASE, max(0, (int) ceil($length / strlen(self::BASE))));

self::LENGTHS = [100, 500, 1000, 2000, 5000] (all positive integers) divided by strlen(self::BASE) (36, a positive integer) always yields a positive float. ceil() returns a float ≥ 1, and the (int) cast preserves that — the clamp to 0 can never fire. The only scenario where it would fire (BASE = '') causes a division-by-zero before max() is reached, so the guard protects nothing.

The PR description presents this as a real fix ("Guard the str_repeat count as a non-negative int"), but it is dead code. It adds noise by implying a reachable negative-count scenario.

Fix: Remove the max(0, …) wrapper: (int) ceil($length / strlen(self::BASE)).


Minor observation 1 — Checksum only samples the last loop result

for ($i = 0; $i < self::ITERATIONS; ++$i) {
    $result = StringManipulation::removeAccents($testString);
}
$duration = microtime(true) - $start;
$checksum += strlen($result);  // ← only the last iteration's result

The checksum accumulates strlen($result) once per LENGTHS entry, capturing only the final iteration's output. All 9 999 intermediate $result assignments are provably unused. A sufficiently aggressive optimizer could eliminate those iterations. Moving $checksum += strlen($result) inside the loop makes every call's result observable and removes the theoretical weakness. For today's PHP this is low-risk, but it's easy to fix and makes the intent unambiguous.


Minor observation 2 — Warmup loop assigns to $result unnecessarily

for ($i = 0; $i < self::WARMUP; ++$i) {
    $result = StringManipulation::removeAccents($testString);
}
// $result is immediately overwritten by the timed loop

The warmup's purpose is to prime OPcache/JIT, not to capture a result. Assigning to $result implies the value matters, but it is clobbered before $checksum is touched. A bare call (StringManipulation::removeAccents($testString)) inside the warmup loop would make the intent clearer and avoid the false impression that the warmup output feeds into the checksum.


Summary

Severity File Issue
High .phan/config.php:58,61 target_php_version and minimum_target_php_version not bumped to 8.4
Medium src/StringManipulation.php:232 strtr not backslash-qualified unlike adjacent \is_string/\strlen
Low tests/Benchmark/…:102 max(0, …) guard is dead code — can never fire for valid LENGTHS
Nit tests/Benchmark/…:62 Checksum only samples last iteration result
Nit tests/Benchmark/…:51 Warmup assigns to $result that is immediately clobbered

🤖 Generated with Claude Code

@MarjovanLier MarjovanLier merged commit 6d9207c into main Jun 27, 2026
16 checks passed
@MarjovanLier MarjovanLier deleted the chore/php-8.4-upgrade branch June 27, 2026 04:36
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.

2 participants