Skip to content

Latest commit

 

History

History
41 lines (35 loc) · 2.33 KB

CONTRIBUTING.md

File metadata and controls

41 lines (35 loc) · 2.33 KB

Contributing

Run Composer validation, focused PHPUnit coverage, PHPStan, and the public boundary check for changed code. Run composer check-http-only-platform for HTTP-client dependency changes; it resolves PHP8.1/Guzzle7/PSR-message1 with cURL and OpenSSL disabled and exercises a real HTTP call without TLS functions.

The production graph remains independent of Laravel, Illuminate, framework bundles/containers, Core and Server. The owned native Guzzle handler delegates HTTP serialization, framing and total socket deadlines to HTTP_Request2. Its OpenSSL dependency is optional, preserving HTTP-only installations. Thin adapters share one deadline across CONNECT/TLS and reject incomplete-transfer warnings. The reviewed stable floors and neutral Symfony contracts/polyfills are listed in resources/dependency-boundary.json. The boundary check covers declared and transitive production packages. Change that closed support list or dependency floor with an owning product decision and compatibility/security tests.

Before publishing a tag, run RELEASE_TAG=<exact-version> composer check-release-identity. The installed Composer version, extra.durable-workflow.product-train, quickstart package versions and worker registration must identify that same PHP SDK release. Protocol versions and the supported Server baseline are separate compatibility declarations. Align release metadata before tagging a stable patch, even when development previously reserved a future prerelease.

Replay and payload-codec fixes also follow the organization regression-corpus contract. A replay fix adds one minimal history or command-sequence JSON fixture under tests/fixtures/replay-regressions/. A codec fix adds the shared wire fixture under tests/fixtures/codec-regressions/ and to every other applicable official binding.

Fixtures preserve the value and type, framing, and stable failure policy. Existing evidence is append-only; protocol evolution adds a new fixture with a supersedes identity. Every new replay fixture added with a replay fix is executed through the official PHP replayer at both revisions: it must fail on the target revision and pass with the candidate fix. Install Composer dependencies, then run:

python scripts/ci/validate-regression-corpus.py --base-ref <target>