Skip to content

chore(release): Merge v2.1.0 back into develop - #35

Merged
soulevilx merged 4 commits into
developfrom
master
Jul 25, 2026
Merged

chore(release): Merge v2.1.0 back into develop#35
soulevilx merged 4 commits into
developfrom
master

Conversation

@soulevilx

Copy link
Copy Markdown
Contributor

Sync the released v2.1.0 master history back into develop after successful release validation and publication.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@soulevilx, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 18 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: c010b032-4fc1-49b8-ada1-1491832267c0

📥 Commits

Reviewing files that changed from the base of the PR and between 65159bf and 622e033.

⛔ Files ignored due to path filters (1)
  • composer.lock is excluded by !**/*.lock
📒 Files selected for processing (12)
  • .github/workflows/ci.yml
  • CHANGELOG.md
  • README.md
  • UPGRADE-2.0.md
  • composer.json
  • docs/00-architecture/01-project-overview.md
  • docs/00-architecture/05-data-flow.md
  • docs/00-architecture/business-context-and-goals.md
  • docs/01-getting-started/installation.md
  • docs/04-development/templates-and-writing-rules.md
  • tests/Unit/Adapters/GuzzleHttpClientAdapterAsyncTest.php
  • tests/Unit/Adapters/GuzzleHttpClientAdapterTest.php
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch master

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.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests dependencies ci/cd labels Jul 25, 2026
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Release 2.1.0: support Guzzle 7.10+ and add compatibility CI job

✨ Enhancement 🧪 Tests 📝 Documentation ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Allow installing with Guzzle 7.10+ or 8 via Composer constraints.
• Add CI job to run the test suite against a Guzzle 7 dependency stack.
• Update docs/changelog and adjust tests to use version-neutral GuzzleException fixtures.
Diagram

graph TD
  A["ClientBuilder / HttpClient"] --> B["TransportAdapterInterface"] --> C["GuzzleHttpClientAdapter"] --> D["Guzzle Client"]
  D --> E["Guzzle 7.10+"]
  D --> F["Guzzle 8.x"]
  G["GitHub Actions CI"] --> H["Guzzle 7 compat job"] --> I["composer test"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. CI matrix for Guzzle versions
  • ➕ Single job definition with a version matrix (easier to extend to more versions).
  • ➕ Makes ordering/gating (e.g., benchmark after both) explicit and scalable.
  • ➖ Slightly more YAML complexity.
  • ➖ May increase total CI runtime if not tuned (parallelism/strategy).
2. Use 'prefer-lowest' + constrained updates in CI
  • ➕ Catches compatibility issues caused by lowest-allowed transitive versions, not just Guzzle major line.
  • ➕ Often surfaces subtle dependency constraint problems earlier.
  • ➖ Slower and sometimes noisier CI due to broad dependency churn.
  • ➖ May be overkill if the primary risk is just Guzzle 7 vs 8 behavior.

Recommendation: Current approach (separate Guzzle 7 compatibility job that swaps dependencies and runs the same test suite) is a pragmatic, low-risk way to enforce the new Composer contract. If CI duplication becomes a maintenance burden, move the compatibility job into a matrix keyed by the target Guzzle constraint.

Files changed (13) +44 / -14

Tests (2) +4 / -2
GuzzleHttpClientAdapterAsyncTest.phpUse version-neutral GuzzleException fixture for async rejection test +2/-1

Use version-neutral GuzzleException fixture for async rejection test

• Replaces a TransferException-based fixture with an anonymous exception implementing GuzzleException. Avoids constructor/signature differences between Guzzle 7 and 8 while still exercising the adapter’s generic GuzzleException wrapping behavior.

tests/Unit/Adapters/GuzzleHttpClientAdapterAsyncTest.php

GuzzleHttpClientAdapterTest.phpUse version-neutral GuzzleException fixture for sync send test +2/-1

Use version-neutral GuzzleException fixture for sync send test

• Swaps a TransferException fixture for an anonymous exception implementing GuzzleException in the non-bad-response error path. Ensures the unit test remains compatible across both supported Guzzle major versions.

tests/Unit/Adapters/GuzzleHttpClientAdapterTest.php

Documentation (8) +14 / -9
CHANGELOG.mdDocument v2.1.0 release and Guzzle 7.10+/8 support +5/-0

Document v2.1.0 release and Guzzle 7.10+/8 support

• Adds a 2.1.0 entry dated 2026-07-25. Notes that the package supports Guzzle 7.10+ and 8 with Guzzle 8 option validation as the portable contract.

CHANGELOG.md

README.mdUpdate README to advertise Guzzle 7.10+ / 8 compatibility +2/-2

Update README to advertise Guzzle 7.10+ / 8 compatibility

• Adjusts feature bullets and migration notes to reflect support for both Guzzle 7.10+ and 8. Keeps guidance aligned with the updated dependency contract.

README.md

UPGRADE-2.0.mdClarify upgrade guidance for Guzzle 7/8 dependency lines +1/-1

Clarify upgrade guidance for Guzzle 7/8 dependency lines

• Replaces the “Guzzle 8 required” statement with guidance that both Guzzle 7.10+ and 8 are supported. Adds notes about aligning PSR-7/Promises versions with the selected Guzzle major line.

UPGRADE-2.0.md

01-project-overview.mdReflect dual Guzzle 7.10/8 support in dependency table +1/-1

Reflect dual Guzzle 7.10/8 support in dependency table

• Updates the architecture overview dependency evidence to match the new Guzzle constraint in composer.json.

docs/00-architecture/01-project-overview.md

05-data-flow.mdUpdate transport dependency docs to include Guzzle 7.10/8 +1/-1

Update transport dependency docs to include Guzzle 7.10/8

• Adjusts the documented Guzzle transport dependency line to match the new supported versions.

docs/00-architecture/05-data-flow.md

business-context-and-goals.mdRevise goals/contract to include Guzzle 7.10+ support +2/-2

Revise goals/contract to include Guzzle 7.10+ support

• Updates the supported contract and goals sections to state that both Guzzle 7.10+ and 8 are supported behind the transport adapter interface.

docs/00-architecture/business-context-and-goals.md

installation.mdUpdate installation evidence for Guzzle 7.10+ or 8 requirement +1/-1

Update installation evidence for Guzzle 7.10+ or 8 requirement

• Changes the stated dependency evidence to reflect that the package can be installed with either Guzzle 7.10+ or Guzzle 8.

docs/01-getting-started/installation.md

templates-and-writing-rules.mdAdjust docs template wording for Guzzle 7.10+/8 phrasing +1/-1

Adjust docs template wording for Guzzle 7.10+/8 phrasing

• Updates the writing template snippet to refer to “Guzzle 7.10+ or 8” instead of only Guzzle 8.

docs/04-development/templates-and-writing-rules.md

Other (3) +26 / -3
ci.ymlAdd Guzzle 7 compatibility CI job and gate benchmarks on it +24/-1

Add Guzzle 7 compatibility CI job and gate benchmarks on it

• Introduces a dedicated workflow job that installs a Guzzle 7.10 dependency stack and runs the test suite. Updates the benchmark job to depend on both the main tests and the new compatibility job.

.github/workflows/ci.yml

composer.jsonRelax Guzzle requirement to allow ^7.10 or ^8.0 +1/-1

Relax Guzzle requirement to allow ^7.10 or ^8.0

• Updates the required Guzzle dependency constraint to support both major lines. This enables consumers pinned to Guzzle 7 to adopt the library without upgrading to Guzzle 8.

composer.json

composer.lockRefresh lockfile metadata after dependency constraint change +1/-1

Refresh lockfile metadata after dependency constraint change

• Updates the lockfile content hash to reflect the modified Composer dependency graph. (Full package resolution changes are implied by the lock update.)

composer.lock

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.72%. Comparing base (4a4f217) to head (622e033).
⚠️ Report is 1 commits behind head on develop.

Additional details and impacted files
@@            Coverage Diff             @@
##             develop      #35   +/-   ##
==========================================
  Coverage      98.72%   98.72%           
  Complexity       940      940           
==========================================
  Files             71       71           
  Lines           2198     2198           
==========================================
  Hits            2170     2170           
  Misses            28       28           
Flag Coverage Δ
unittests 98.72% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

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

@soulevilx
soulevilx merged commit 3361340 into develop Jul 25, 2026
31 checks passed
@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

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

Grey Divider


Remediation recommended

1. Allows Guzzle 7 dependency 📘 Rule violation ⚙ Maintainability
Description
The PR changes the documented and enforced dependency contract from guzzlehttp/guzzle:^8.0 to
^7.10 || ^8.0, which conflicts with the compliance requirement that 2.0+ documentation must
specify Guzzle ^8.0 as required. This can cause integration/audit confusion because the package’s
required-dependency statement no longer matches the mandated 2.0+ dependency requirement.
Code

composer.json[31]

+        "guzzlehttp/guzzle": "^7.10 || ^8.0",
Evidence
PR Compliance ID 11 requires 2.0+ documentation to specify Guzzle ^8.0 as a required dependency;
the PR changes both the enforced dependency constraint and the 2.0+ docs to allow Guzzle 7.10+,
contradicting that requirement.

AGENTS.md: For 2.0+ Documentation, State Required Dependencies and Non-Integration Constraints
composer.json[31-31]
README.md[231-231]
UPGRADE-2.0.md[3-3]

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

## Issue description
The PR updates `composer.json` and multiple 2.0+ docs to state/support `guzzlehttp/guzzle:^7.10 || ^8.0`, but the compliance checklist requires 2.0+ documentation to specify Guzzle `^8.0` as required.

## Issue Context
This PR appears to intentionally broaden the supported Guzzle range, but the compliance requirement (PR Compliance ID 11) explicitly calls out Guzzle `^8.0` for 2.0+ documentation.

## Fix Focus Areas
- composer.json[31-31]
- README.md[23-23]
- README.md[231-231]
- UPGRADE-2.0.md[3-3]
- docs/00-architecture/01-project-overview.md[63-63]
- docs/00-architecture/05-data-flow.md[384-384]
- docs/00-architecture/business-context-and-goals.md[11-11]
- docs/01-getting-started/installation.md[35-35]
- docs/04-development/templates-and-writing-rules.md[405-405]

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


2. Guzzle 7 CI coverage gaps 🐞 Bug ☼ Reliability
Description
The new guzzle-7-compatibility job runs composer test without the MongoDB service/env used by
the main test job, so MongoDB integration coverage will be skipped and/or delayed by connection
timeouts. It also uses a raw composer update path that will run Composer lifecycle scripts
(including post-update-cmd), adding unnecessary side effects/variance to CI.
Code

.github/workflows/ci.yml[R169-174]

+      - name: Install Guzzle 7 dependency stack
+        run: |
+          composer update guzzlehttp/guzzle --with-all-dependencies --with 'guzzlehttp/guzzle:^7.10'
+
+      - name: Run Guzzle 7 compatibility tests
+        run: composer test
Evidence
The workflow job definition shows it runs composer update and composer test without MongoDB
services/env, while the repository defines a post-update-cmd script that will execute on `composer
update`; Mongo integration tests attempt a real ping and only skip after a caught failure, which can
add timeouts and reduces integration validation in this job.

.github/workflows/ci.yml[153-175]
composer.json[124-125]
tests/Feature/Logging/MongoDbLoggingTest.php[93-102]

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

### Issue description
The `guzzle-7-compatibility` CI job currently differs materially from the main `tests` job:
- It does not provision MongoDB or set `MONGODB_URI`, so MongoDB integration tests cannot validate a working Mongo instance and may incur connection timeouts before skipping.
- It runs `composer update ...` directly, which triggers Composer lifecycle scripts (notably `post-update-cmd`), adding side effects and variability.

### Issue Context
This job is meant to validate runtime compatibility with Guzzle 7, so it should be deterministic and as close as possible to the primary test environment, or it should explicitly scope itself (e.g., unit-only) so it doesn’t give a false sense of full-suite compatibility.

### Fix Focus Areas
- .github/workflows/ci.yml[153-175]

### Implementation notes
Choose one of these approaches:
1) **Full-suite parity**: add the same `mongodb` service + `MONGODB_URI` env as the `tests` job, and install dependencies via the same mechanism (`ramsey/composer-install@v4`) before pinning Guzzle 7.
2) **Scoped unit validation**: keep the job lightweight by running only unit tests (e.g., `composer test:unit`) and explicitly document that it does not run integration coverage.

Additionally, consider disabling scripts for the dependency switch step (e.g., `composer ... --no-scripts`) to avoid running `post-update-cmd` in CI when it’s not needed.

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



Informational

3. TransferException path untested 🐞 Bug ⚙ Maintainability
Description
The adapter unit tests replaced a real TransferException fixture with a generic anonymous
GuzzleException, so behavior specific to TransferException is no longer exercised by the test
suite. This reduces regression protection for concrete exception handling while claiming
cross-version Guzzle compatibility.
Code

tests/Unit/Adapters/GuzzleHttpClientAdapterTest.php[R92-93]

+            new class ('Transfer error') extends \RuntimeException implements \GuzzleHttp\Exception\GuzzleException {
+            },
Evidence
Both sync and async adapter tests replaced TransferException fixtures with an anonymous
RuntimeException implementing GuzzleException, so the suite no longer exercises the concrete
TransferException type.

tests/Unit/Adapters/GuzzleHttpClientAdapterTest.php[88-101]
tests/Unit/Adapters/GuzzleHttpClientAdapterAsyncTest.php[77-91]

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

### Issue description
The tests no longer cover the concrete `\GuzzleHttp\Exception\TransferException` type; they now only cover a generic `GuzzleException` implementation. This reduces confidence that the adapter handles the real `TransferException` correctly across supported Guzzle versions.

### Issue Context
The change was likely made because `TransferException` constructor signatures differ across Guzzle majors. You can keep cross-version compatibility while still exercising the concrete exception type by instantiating it via reflection based on constructor arity.

### Fix Focus Areas
- tests/Unit/Adapters/GuzzleHttpClientAdapterTest.php[88-101]
- tests/Unit/Adapters/GuzzleHttpClientAdapterAsyncTest.php[77-91]

### Implementation notes
Add (or re-add) a test case that throws a real `TransferException` by constructing it in a version-tolerant way, e.g. via `ReflectionClass` and choosing args based on `getNumberOfParameters()`. Keep the existing generic `GuzzleException` test if it’s still valuable for broader coverage.

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


Grey Divider

Qodo Logo

Comment thread composer.json
"require": {
"php": "^8.5",
"guzzlehttp/guzzle": "^8.0",
"guzzlehttp/guzzle": "^7.10 || ^8.0",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

1. Allows guzzle 7 dependency 📘 Rule violation ⚙ Maintainability

The PR changes the documented and enforced dependency contract from guzzlehttp/guzzle:^8.0 to
^7.10 || ^8.0, which conflicts with the compliance requirement that 2.0+ documentation must
specify Guzzle ^8.0 as required. This can cause integration/audit confusion because the package’s
required-dependency statement no longer matches the mandated 2.0+ dependency requirement.
Agent Prompt
## Issue description
The PR updates `composer.json` and multiple 2.0+ docs to state/support `guzzlehttp/guzzle:^7.10 || ^8.0`, but the compliance checklist requires 2.0+ documentation to specify Guzzle `^8.0` as required.

## Issue Context
This PR appears to intentionally broaden the supported Guzzle range, but the compliance requirement (PR Compliance ID 11) explicitly calls out Guzzle `^8.0` for 2.0+ documentation.

## Fix Focus Areas
- composer.json[31-31]
- README.md[23-23]
- README.md[231-231]
- UPGRADE-2.0.md[3-3]
- docs/00-architecture/01-project-overview.md[63-63]
- docs/00-architecture/05-data-flow.md[384-384]
- docs/00-architecture/business-context-and-goals.md[11-11]
- docs/01-getting-started/installation.md[35-35]
- docs/04-development/templates-and-writing-rules.md[405-405]

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

Comment thread .github/workflows/ci.yml
Comment on lines +169 to +174
- name: Install Guzzle 7 dependency stack
run: |
composer update guzzlehttp/guzzle --with-all-dependencies --with 'guzzlehttp/guzzle:^7.10'

- name: Run Guzzle 7 compatibility tests
run: composer test

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

2. Guzzle 7 ci coverage gaps 🐞 Bug ☼ Reliability

The new guzzle-7-compatibility job runs composer test without the MongoDB service/env used by
the main test job, so MongoDB integration coverage will be skipped and/or delayed by connection
timeouts. It also uses a raw composer update path that will run Composer lifecycle scripts
(including post-update-cmd), adding unnecessary side effects/variance to CI.
Agent Prompt
### Issue description
The `guzzle-7-compatibility` CI job currently differs materially from the main `tests` job:
- It does not provision MongoDB or set `MONGODB_URI`, so MongoDB integration tests cannot validate a working Mongo instance and may incur connection timeouts before skipping.
- It runs `composer update ...` directly, which triggers Composer lifecycle scripts (notably `post-update-cmd`), adding side effects and variability.

### Issue Context
This job is meant to validate runtime compatibility with Guzzle 7, so it should be deterministic and as close as possible to the primary test environment, or it should explicitly scope itself (e.g., unit-only) so it doesn’t give a false sense of full-suite compatibility.

### Fix Focus Areas
- .github/workflows/ci.yml[153-175]

### Implementation notes
Choose one of these approaches:
1) **Full-suite parity**: add the same `mongodb` service + `MONGODB_URI` env as the `tests` job, and install dependencies via the same mechanism (`ramsey/composer-install@v4`) before pinning Guzzle 7.
2) **Scoped unit validation**: keep the job lightweight by running only unit tests (e.g., `composer test:unit`) and explicitly document that it does not run integration coverage.

Additionally, consider disabling scripts for the dependency switch step (e.g., `composer ... --no-scripts`) to avoid running `post-update-cmd` in CI when it’s not needed.

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

Comment on lines +92 to +93
new class ('Transfer error') extends \RuntimeException implements \GuzzleHttp\Exception\GuzzleException {
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Informational

3. Transferexception path untested 🐞 Bug ⚙ Maintainability

The adapter unit tests replaced a real TransferException fixture with a generic anonymous
GuzzleException, so behavior specific to TransferException is no longer exercised by the test
suite. This reduces regression protection for concrete exception handling while claiming
cross-version Guzzle compatibility.
Agent Prompt
### Issue description
The tests no longer cover the concrete `\GuzzleHttp\Exception\TransferException` type; they now only cover a generic `GuzzleException` implementation. This reduces confidence that the adapter handles the real `TransferException` correctly across supported Guzzle versions.

### Issue Context
The change was likely made because `TransferException` constructor signatures differ across Guzzle majors. You can keep cross-version compatibility while still exercising the concrete exception type by instantiating it via reflection based on constructor arity.

### Fix Focus Areas
- tests/Unit/Adapters/GuzzleHttpClientAdapterTest.php[88-101]
- tests/Unit/Adapters/GuzzleHttpClientAdapterAsyncTest.php[77-91]

### Implementation notes
Add (or re-add) a test case that throws a real `TransferException` by constructing it in a version-tolerant way, e.g. via `ReflectionClass` and choosing args based on `getNumberOfParameters()`. Keep the existing generic `GuzzleException` test if it’s still valuable for broader coverage.

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd dependencies documentation Improvements or additions to documentation tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants