Skip to content

Complete Mail correctness, current parity, and package boundaries - #470

Merged
binaryfire merged 12 commits into
0.4from
audit/mail-correctness-parity
Aug 3, 2026
Merged

Complete Mail correctness, current parity, and package boundaries#470
binaryfire merged 12 commits into
0.4from
audit/mail-correctness-parity

Conversation

@binaryfire

@binaryfire binaryfire commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

This completes the Mail package correctness and current-parity work. It fixes queue routing, message callback ordering, attachment boundaries, SES v2 tenant forwarding, fake behavior, facade metadata, and split-package dependencies. It also ports the relevant current Laravel tests and keeps Hypervel's long-lived worker and pooled-transport behavior explicit.

For more details, see: docs/plans/2026-08-03-1909-mail-correctness-current-parity-and-package-boundaries.md

What changed

Delivery and queues

  • Apply explicit queue names before dispatch and pass the owning queue factory through delayed delivery.
  • Accept enum queue identifiers across the real mailer, contracts, fake, and facade while preserving the non-nullable queueOn and laterOn aliases.
  • Render message content before callbacks so direct sends and mailable envelope callbacks can inspect or replace the final body, matching current Laravel.
  • Add the current assertHasNoAttachments assertion.

Attachments

  • Restrict URL attachments to HTTP and HTTPS.
  • Restore current single-label host support in Str::isUrl, including internal service URLs such as http://mail/....
  • Resolve storage disks once, avoid MIME lookups when a type is supplied, and let unknown MIME fall back instead of passing false into a string boundary.
  • Keep the Filesystem contract narrow while documenting the dynamic adapter methods used by shipped local and pooled disks.
  • Document the supported string and resource data shapes that PHP cannot express natively.

Fakes and facade metadata

  • Make MailFake own every side-effecting mail entry point so a test cannot accidentally reach a real transport or queue.
  • Consume selected mailers exactly once on successful, invalid, and failing operations.
  • Preserve queue identifiers, selected mailers, and named recipients on recorded mailables.
  • Correct MailFake assertion types and NotificationFake callable handling.
  • Generate the Mail facade from the concrete forwarded mailer surface rather than the narrower contract.

Transports and package boundaries

  • Forward non-empty X-SES-TENANT-NAME headers as the SES v2 TenantName option.
  • Keep SES v2-only support intentional and documented; no SES v1 compatibility layer is added.
  • Stop on-demand sendmail and log transports from inheriting unrelated named-mailer configuration.
  • Remove unnecessary direct Notifications and Testing dependencies and declare the Symfony packages used by shipped source.
  • Preserve pooled mailers behind TransportPoolProxy and document when disabling pooling is appropriate for concrete transport inspection.

Tests and documentation

  • Port and merge current Laravel attachment, queue, fake, assertion, callback-ordering, and SES coverage.
  • Revalidate every existing Mail integration path, including storage attachments, locale handling, queued delivery, Markdown, encoding, and sent messages.
  • Move affected tests onto framework test bases, use worker-safe temporary directories, and complete truthful native test typing.
  • Add focused coverage for Console's scheduled-output Mailer callback consumer and package metadata.
  • Update the canonical Mail guide and keep package READMEs concise.

Compatibility and performance

Supported Laravel Mail APIs, named arguments, protected extension points, callback shapes, queue identifiers, and facade forwarding are preserved or restored. Callback metadata now uses the actual supported Closure|string boundary instead of mixed; values outside that union were never valid Mail behavior.

No request-scoped registry, lock, retry, cache, context state, or compatibility wrapper is introduced. Message callback ordering moves existing work without adding work. Storage attachments perform fewer container/disk resolutions and skip unnecessary metadata I/O. Other changes are constant-time checks at existing operation boundaries or test/documentation-only changes.

Validation

  • Ran focused Mail, Mail integration, Support fake, Console, Validation, and Filesystem coverage while implementing each change.
  • Regenerated and verified the Mail facade documentation.
  • Ran the complete composer fix gate, including formatting, both PHPStan configurations, the parallel component suite, Testbench package mode, and dogfood.
  • Completed final caller/callee, Laravel API, coroutine state, worker lifetime, hot-path, dead-code, and overengineering review.

Summary by CodeRabbit

  • New Features

    • Queue mail using string or enum identifiers.
    • Support SES tenant routing through the X-SES-TENANT-NAME header.
    • Added mailable assertions for confirming no attachments are present.
    • Expanded mail-fake support for HTML, plain text, delayed delivery, queue selection, and named recipients.
  • Bug Fixes

    • Restricted attachment URLs to HTTP and HTTPS.
    • Improved attachment MIME detection and preservation of explicit MIME types.
    • Improved URL validation for internationalized and single-level hostnames.
  • Documentation

    • Expanded mail documentation covering attachments, queues, SES, and transport inspection.

Intercept every side-effecting MailFake delivery entry point so tests cannot accidentally reach a real transport or queue. Consume explicit mailer selection exactly once across success and failure while preserving recipients, queue names, enum identifiers, and real-mailer validation behavior.

Correct MailFake assertion callback types and NotificationFake callable handling, port the current upstream fake coverage, and record the remaining EventFake parity work separately.
Apply explicit queue names before dispatch, pass the owning queue factory through delayed delivery, and support enum queue identifiers across optional and named-queue entry points without weakening their nullability contracts.

Render message content before callbacks so direct sends and mailable envelope callbacks observe and may replace the final body. Complete the no-attachment assertion, preserve legacy storage MIME behavior, and revalidate the narrowed callback contract through Console scheduled output.
Restrict remote attachments to HTTP and HTTPS while restoring current single-label URL support at the shared Str boundary. Resolve storage disks once, preserve explicit MIME types, and let unknown MIME fall back without violating Symfony string contracts.

Keep the intentionally narrow Filesystem contract instead of introducing adapter capability machinery, document native resource shapes, and cover URL, storage, pooled-adapter, and attachment target behavior with focused and integration regressions.
Read a non-empty X-SES-TENANT-NAME header from the Symfony message and forward it as the SES v2 TenantName option without mutating shared transport configuration.

Cover present, absent, and empty tenant headers while retaining Hypervel intentional SES v2-only transport support.
Build on-demand transports only from their supplied configuration, replace stale container access and suppressions, and retain the Laravel protected provider extension point with accurate documentation.

Declare the Mail split package actual direct and optional dependencies, point facade metadata at the concrete forwarded mailer surface, regenerate the facade, and pin package and facade invariants with focused tests.
Move the affected Mail tests onto framework-owned test bases, add truthful native method types, and retain current upstream mailable, Markdown, data, header, assertion, and attachable-message coverage.

Give image and Markdown fixtures worker-safe temporary-directory ownership with exception-safe cleanup, eliminating committed-tree writes and redundant per-test unlink calls.
Add the repository-required native void return types to the remaining Mail transport tests without changing their transport ordering, failure, resend, or logging assertions.

This completes the touched Mail test surface consistently while preserving the existing behavioral coverage.
Apply truthful native types throughout the Mail integration suite while retaining the shared environment-owning base case and every rendering, locale, queue, Markdown, encoding, and sent-message scenario.

The storage attachment integration remains with the attachment-boundary commit because it directly proves the corrected adapter and resolver behavior.
Document HTTP-only remote attachments, no-attachment assertions, enum queue identifiers, SES v2 tenant headers, and the stable configuration boundary exposed by pooled mailers in the canonical Mail guide.

Keep package READMEs minimal: record intentional SES v2-only support and existing cloud-storage guidance for Mail, and restore the HTTP badge, canonical Requests guide link, approved differences, and final provenance ordering.
Add the signed-off Mail design with its verified findings, rejected concerns, implementation boundaries, regression strategy, performance analysis, and Laravel-facing result.

Record every Mail and shared finding in the audit ledger, amend completed Contracts, Support, Filesystem, Console, and HTTP work units, add only the six genuine cross-package dependencies, and mark Mail complete in the package checklist.
@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in: 20 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

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: bdb46375-962d-478f-ae56-b5bf3a0369d6

📥 Commits

Reviewing files that changed from the base of the PR and between 0a7de8d and a2d2f35.

📒 Files selected for processing (7)
  • docs/plans/2026-07-12-0915-framework-coroutine-state-lifecycle-audit-ledger.md
  • docs/plans/2026-08-03-1909-mail-correctness-current-parity-and-package-boundaries.md
  • src/mail/src/MailManager.php
  • src/mail/src/Transport/SesV2Transport.php
  • src/support/src/Facades/Notification.php
  • tests/Integration/Mail/SendingMarkdownMailTest.php
  • tests/Mail/MailSesV2TransportTest.php
📝 Walkthrough

Walkthrough

The pull request audits and updates Mail behavior across contracts, delivery, attachments, queues, transports, fakes, package metadata, documentation, and tests. It also adds cross-package validation and coroutine-safe test fixtures.

Changes

Mail contracts and delivery

Layer / File(s) Summary
Mail APIs and queue handling
src/contracts/src/Mail/*, src/mail/src/Mailer.php, src/mail/src/Mailable.php
Queue names accept strings or enum cases. Mail callbacks use `Closure
Attachments and transports
src/mail/src/Attachment.php, src/mail/src/MailManager.php, src/mail/src/Transport/SesV2Transport.php
URL attachments require HTTP or HTTPS. Storage MIME handling preserves explicit values. SES v2 forwards non-empty tenant headers. On-demand transports no longer inherit named-mailer fallbacks.
Support APIs and fakes
src/support/src/Facades/Mail.php, src/support/src/Testing/Fakes/*, src/support/src/Str.php
The Mail facade exposes additional mailer methods. MailFake supports named recipients, queue APIs, and one-shot mailer selection. URL validation supports single-label and Unicode hosts.

Validation and package integration

Layer / File(s) Summary
Mail regression coverage
tests/Mail/*, tests/Integration/Mail/*, tests/Console/Scheduling/EventTest.php
Tests cover queue propagation, callback ordering, attachments, SES tenant forwarding, transport isolation, scheduled mail output, and typed integration setup.
Support and package validation
tests/Support/*, tests/Mail/PackageMetadataTest.php, tests/Mail/MarkdownCoroutineSafetyTest.php
Tests cover MailFake, NotificationFake, URL parsing, package metadata, facade declarations, and worker-owned temporary directories.
Documentation and audit records
docs/plans/*, docs/todo.md, src/boost/docs/mail.md, src/mail/README.md, src/http/README.md
The audit ledger, package guidance, SES v2 behavior, pooled transport inspection, queue enum support, and attachment assertions are documented.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 17.42% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the PR’s main focus on Mail correctness, Laravel parity, and package-boundary updates.
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.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch audit/mail-correctness-parity

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.

@greptile-apps

greptile-apps Bot commented Aug 3, 2026

Copy link
Copy Markdown

Greptile Summary

This PR completes Mail package parity and correctness work across delivery, queue routing, attachment handling, test fakes, transport configuration, package metadata, and documentation.

  • Expands queue APIs to accept enum identifiers and preserves the owning queue factory for delayed delivery.
  • Reorders message rendering and callbacks, improves attachment URL and MIME handling, and forwards SES v2 tenant metadata.
  • Extends MailFake behavior and assertions while correcting facade and package dependency metadata.
  • Adds broad unit and integration coverage for the changed Mail behavior.

Confidence Score: 5/5

The PR appears safe to merge because no eligible new or outstanding blocking failure remains.

No blocking failure remains.

Important Files Changed

Filename Overview
src/mail/src/Mailer.php Updates callback ordering and enum-capable queue routing while passing the configured queue factory through immediate and delayed mailable dispatch.
src/support/src/Testing/Fakes/MailFake.php Expands fake-owned mail entry points, one-shot mailer selection, queue metadata preservation, and recipient recording.
src/mail/src/Attachment.php Restricts URL attachments to HTTP(S), resolves storage disks once, and treats unknown MIME metadata as an inference fallback.
src/mail/src/Mailable.php Improves storage attachment MIME handling and adds an assertion that verifies all attachment collections are empty.
src/mail/src/MailManager.php Uses typed container resolution, isolates on-demand transport construction from named-mailer presentation settings, and retains pooled transport behavior.
src/mail/src/Transport/SesV2Transport.php Maps a non-empty SES tenant header into the SES v2 TenantName request option.
src/support/src/Str.php Restores URL recognition for single-label hosts while retaining caller-supplied protocol restrictions.
src/mail/composer.json Declares directly used Symfony packages, removes unrelated hard dependencies, and documents optional integration requirements.
src/contracts/src/Mail/MailQueue.php Widens optional queue identifiers to support strings and unit enums consistently with the queue subsystem.
src/support/src/Testing/Fakes/NotificationFake.php Corrects callable handling in notification fake assertions with corresponding test coverage.

Reviews (2): Last reviewed commit: "fix(mail): preserve exact SES tenant nam..." | Re-trigger Greptile

@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: 5

🧹 Nitpick comments (1)
src/support/src/Str.php (1)

515-529: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Document the host regex adaptation.

Str::isUrl() diverges from the Symfony/Laravel host expression: the single-level branch remains ASCII-only, and the global \.? accepts a trailing dot. If this is intentional, update the header comment to record the deliberate adaptation, not “derived from Symfony 5.0.7”.

🤖 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 `@src/support/src/Str.php` around lines 515 - 529, The header comment for
Str::isUrl() should document the deliberate host-regex adaptations: the
single-level hostname branch is ASCII-only and the optional global dot permits a
trailing dot. Replace the misleading “derived from Symfony 5.0.7” wording while
leaving the regex behavior unchanged.

Source: Coding guidelines

🤖 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 `@src/mail/src/MailManager.php`:
- Around line 145-147: Remove or rewrite the comment preceding the mailer
construction in MailManager so it accurately describes the behavior implemented
by the surrounding code; do not claim that a container instance is assigned to
Mailer when this method only creates the mailer and optionally configures its
queue.

In `@src/mail/src/Transport/SesV2Transport.php`:
- Around line 40-42: Update the tenant handling around tenantName() to preserve
the non-empty value "0": use an explicit null check in the assignment condition
so it is added to SES V2 options, and change the tenantName() return logic to
treat only an empty string as absent rather than using truthiness. Add coverage
for an X-SES-TENANT-NAME value of "0".

In `@src/support/src/Testing/Fakes/NotificationFake.php`:
- Line 56: Update the Notification facade’s assertSentTo callback parameter type
to match NotificationFake::assertSentTo, using callable|int|null and removing
string from the union so numeric strings are handled by the fake as counts.

In `@tests/Integration/Mail/SendingMarkdownMailTest.php`:
- Line 159: Remove the unused $mailable assignment in the
MarkdownEmbedImageMailable test and pass the new mailable instance directly to
Mail::to(...)->send().

In `@tests/Support/SupportTestingNotificationFakeTest.php`:
- Around line 252-262: Move UserStub and LocalizedUserStub into the
Hypervel\Tests\Support\SupportTestingNotificationFakeTest namespace, updating
all references and hardcoded class-name strings. Also move MailableStub,
QueueableMailableStub, LocalizedRecipientStub, and FailingQueueMailableStub into
Hypervel\Tests\Support\SupportTestingMailFakeTest, updating their references and
assertion strings; leave MailFakeMailerName and MailFakeQueueName unchanged.
Affected sites: tests/Support/SupportTestingNotificationFakeTest.php:252-262 and
tests/Support/SupportTestingMailFakeTest.php:646-707.

---

Nitpick comments:
In `@src/support/src/Str.php`:
- Around line 515-529: The header comment for Str::isUrl() should document the
deliberate host-regex adaptations: the single-level hostname branch is
ASCII-only and the optional global dot permits a trailing dot. Replace the
misleading “derived from Symfony 5.0.7” wording while leaving the regex behavior
unchanged.
🪄 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: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26618074-04b0-4e24-b015-8a595abfeadc

📥 Commits

Reviewing files that changed from the base of the PR and between ffad019 and 0a7de8d.

📒 Files selected for processing (56)
  • docs/plans/2026-07-12-0900-framework-coroutine-state-lifecycle-audit.md
  • docs/plans/2026-07-12-0915-framework-coroutine-state-lifecycle-audit-ledger.md
  • docs/plans/2026-08-03-1909-mail-correctness-current-parity-and-package-boundaries.md
  • docs/todo.md
  • src/boost/docs/mail.md
  • src/contracts/src/Mail/MailQueue.php
  • src/contracts/src/Mail/Mailer.php
  • src/filesystem/src/ServeFile.php
  • src/http/README.md
  • src/mail/README.md
  • src/mail/composer.json
  • src/mail/src/Attachment.php
  • src/mail/src/MailManager.php
  • src/mail/src/MailServiceProvider.php
  • src/mail/src/Mailable.php
  • src/mail/src/Mailer.php
  • src/mail/src/Message.php
  • src/mail/src/TextMessage.php
  • src/mail/src/Transport/SesV2Transport.php
  • src/support/src/Facades/Mail.php
  • src/support/src/Str.php
  • src/support/src/Testing/Fakes/MailFake.php
  • src/support/src/Testing/Fakes/NotificationFake.php
  • tests/Console/Scheduling/EventTest.php
  • tests/Integration/Mail/AttachingFromStorageTest.php
  • tests/Integration/Mail/MailableTestCase.php
  • tests/Integration/Mail/MailableWithSecuredEncodingTest.php
  • tests/Integration/Mail/MailableWithoutSecuredEncodingTest.php
  • tests/Integration/Mail/MarkdownParserTest.php
  • tests/Integration/Mail/RenderingMailWithLocaleTest.php
  • tests/Integration/Mail/SendingMailWithLocaleTest.php
  • tests/Integration/Mail/SendingMarkdownMailTest.php
  • tests/Integration/Mail/SendingQueuedMailTest.php
  • tests/Integration/Mail/SentMessageMailTest.php
  • tests/Mail/AttachableTest.php
  • tests/Mail/AttachmentTest.php
  • tests/Mail/MailFailoverTransportTest.php
  • tests/Mail/MailLogTransportTest.php
  • tests/Mail/MailMailableAssertionsTest.php
  • tests/Mail/MailMailableDataTest.php
  • tests/Mail/MailMailableHeadersTest.php
  • tests/Mail/MailMailableTest.php
  • tests/Mail/MailMailerTest.php
  • tests/Mail/MailManagerTest.php
  • tests/Mail/MailMarkdownTest.php
  • tests/Mail/MailMessageTest.php
  • tests/Mail/MailResendTransportTest.php
  • tests/Mail/MailRoundRobinTransportTest.php
  • tests/Mail/MailSesV2TransportTest.php
  • tests/Mail/MailableAlternativeSyntaxTest.php
  • tests/Mail/MailableQueuedTest.php
  • tests/Mail/MarkdownCoroutineSafetyTest.php
  • tests/Mail/PackageMetadataTest.php
  • tests/Support/SupportStrTest.php
  • tests/Support/SupportTestingMailFakeTest.php
  • tests/Support/SupportTestingNotificationFakeTest.php

Comment thread src/mail/src/MailManager.php Outdated
Comment thread src/mail/src/Transport/SesV2Transport.php Outdated
Comment thread src/support/src/Testing/Fakes/NotificationFake.php
Comment thread tests/Integration/Mail/SendingMarkdownMailTest.php Outdated
Comment thread tests/Support/SupportTestingNotificationFakeTest.php
Treat only an absent or empty X-SES-TENANT-NAME header as unset so valid numeric tenant names such as "0" reach the SES v2 request unchanged. Add a counterfactual regression for the numeric case.

Regenerate the Notification facade from the corrected fake signature, remove a stale MailManager comment and an unused integration-test assignment, and keep the audit records aligned with the evidence.
@binaryfire

Copy link
Copy Markdown
Collaborator Author

@coderabbitai Thanks for the review. The follow-up is in a2d2f35f9.

Changed:

  • Preserved every non-empty SES v2 tenant name exactly, including the valid value "0", with a counterfactual regression.
  • Removed the stale MailManager container comment.
  • Regenerated the Notification facade from the corrected fake signature.
  • Removed the unused mailable assignment from the failover-clone integration test.

No change:

  • Kept the flat Support test namespaces. They match the complete Hypervel and Laravel fake-test family, currently have no duplicate declarations, and converting only two files would add recurring porting churn without fixing a demonstrated collision.
  • Kept the Str::isUrl() regex and comment. Both are byte-identical to current Laravel; describing them as a Hypervel adaptation would be inaccurate.
  • Kept the repository's existing documentation standard instead of applying the generic docstring threshold. Hypervel requires useful Laravel-style method docs and rejects inventory comments that only restate code.

Focused Mail, integration Mail, Notification fake, and facade-lint checks pass. The full composer fix gate is green.

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

git show --no-ext-diff --format=fuller --stat a2d2f35f9
git show --no-ext-diff --format= -- \
  a2d2f35f9 -- \
  src/mail/src/Transport/SesV2Transport.php \
  tests/Mail/MailSesV2TransportTest.php \
  src/mail/src/MailManager.php \
  src/support/src/Facades/Notification.php \
  tests/Integration/Mail/SendingMarkdownMailTest.php

printf '\n--- Follow-up commit patch ---\n'
git show --no-ext-diff --format= a2d2f35f9

Length of output: 37003


@binaryfire Verified a2d2f35f9.

The SES v2 transport now preserves "0" and every other non-empty tenant name. The new regression fails against the previous truthiness check.

The Notification facade metadata now matches NotificationFake::assertSentTo(). The stale MailManager comment and unused test assignment are removed.

I accept the retained Support test namespaces, the Laravel-identical Str::isUrl() code and comment, and the repository documentation standard. These concerns do not require changes.

🐇 ✅


✏️ Learnings added
Learnt from: binaryfire
URL: https://github.com/hypervel/components/pull/470

Timestamp: 2026-08-03T23:27:44.298Z
Learning: In this Hypervel repository, flat namespaces for Support fake tests are intentional. They match the broader Hypervel and Laravel fake-test family and must not be changed solely to avoid theoretical duplicate declarations when no collision exists.

Learnt from: binaryfire
URL: https://github.com/hypervel/components/pull/470

Timestamp: 2026-08-03T23:27:44.298Z
Learning: In `src/support/src/Str.php`, the `Str::isUrl()` regular expression and its related comment are byte-identical to current Laravel. Do not describe this code as a Hypervel adaptation or request changes that would diverge from that upstream implementation without a demonstrated defect.

Learnt from: binaryfire
URL: https://github.com/hypervel/components/pull/470

Timestamp: 2026-08-03T23:27:44.298Z
Learning: Hypervel documentation follows Laravel-style method documentation. Useful method documentation is required, but inventory comments that only restate code are rejected; do not apply a generic documentation-density threshold.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

You are interacting with an AI system.

@binaryfire
binaryfire merged commit 4dcf2a4 into 0.4 Aug 3, 2026
38 checks passed
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.

1 participant