16 min read / ,

Day 2 Update: Unblocked -- Full PR List, Confidence Ratings, and What's Next

TLDR Unblocked from Laravel org with full PR list and confidence ratings.

This is a follow-up to yesterday’s post. I was unblocked from the Laravel GitHub organisation yesterday — thank you.

Since being unblocked, I’ve been submitting the fixes I had queued up. The scope has grown well beyond the original 25 patches. Here’s the full accounting of everything that’s been submitted, what still lives on forks/gists, confidence levels for each fix.

Master tracking gist: GitHub Gist


The numbers

  • 91 PRs submitted to upstream laravel/* repos
  • 39 open, 45 closed, 1 merged
  • 26 repos touched
  • 30 gists with standalone patches
  • Plus 100 PRs on my personal forks (many overlap with upstream submissions)

I know that’s a lot. Apologies for the influx — I’ve been trying to submit gradually and push to my own forks first to avoid overwhelming maintainers. Many of the closed ones were closed by maintainers (understandably), and the fixes for those still live on my forks if anyone wants to pick them up.


Context

I’ve been using Claude Code to systematically work through open issues across the Laravel ecosystem. Every fix targets an existing open issue that already has community reports. The process was:

  1. Find issues with multiple reports or long comment threads
  2. Have Claude Code analyse the root cause and write a fix
  3. Run the repo’s full test suite
  4. Test on my Windows machine (and macOS where applicable)
  5. Document before/after results

I develop sometimes on Windows 11 Pro (AMD Ryzen 9 9950X3D, PHP 8.4 via Herd, WSL2, Docker Desktop). A lot of the Windows-specific issues I have experienced first hand from using it. The Laravel team is predominantly on macOS, so some Windows edge cases are easy to miss — it is a different testing surface that I happen to cover. I’ve also verified the cross-platform fixes on macOS (Darwin 25.3.0, PHP 8.4.19) Mac 2021 M1 16gb which is getting old now but still good.

These PRs may still need proper review and testing and need to consider edge cases that I may not be aware of. Laravel team also have to consider if they want to support the features and changes I have added. I’m not expecting anything to be merged on faith. Some may need adjustments, and I’m happy to iterate. Anyone can replicate what I’ve done by pointing Claude Code at these same issues — the fixes themselves aren’t special, but hopefully the testing and documentation saves some review time.


Already merged (1)

This one made it in:

RepoPRTitle
laravel/dusk#1189Fix findButtonByText to prefer exact text match over contains

Open upstream PRs — by repo

laravel/cloud-cli (29 open)

This was the deepest dive. The cloud CLI is relatively new and had a lot of low-hanging fruit — bug fixes, missing features, and test coverage. It also adds some additional features (nice to haves). I have combined all these efforts into 1 big PR on my own fork and will be testing and reviewing the forked cloud-cli and reporting on any bugs or issues I find from actual real world testing.

PRTitleConfidenceNotes
#25Fix token deduplication and stale token accumulation85%Straightforward data cleanup
#32Add —hide-secrets flag to redact env var values80%New feature, clean implementation
#33Add —token flag and LARAVEL_CLOUD_API_TOKEN env var support80%Standard CLI auth pattern
#34Fix inconsistent error handling between commands and resolvers75%Touches many files — needs careful review
#35Fix token validation performance with cached org names80%Performance improvement
#36Enable commented-out application command tests70%Tests may have been disabled for a reason
#37Improve resolver error messages with specific failure context85%UX improvement, additive
#42Fix wrong RequestException import in 7 commands90%Clear bug — wrong class imported
#43Comprehensive test coverage — 87 files, 378 tests, 3% to 100%65%Massive — needs thorough review
#52Fix 5 bugs found during test coverage work85%Found while writing tests
#53Add missing CLI options for non-interactive create commands75%Feature addition
#54Refactor: decompose Ship.php from 788 to 152 lines60%Major refactor — may not match team’s vision
#58Fix database command bugs — restore, snapshot, cluster update80%Multiple targeted fixes
#63Add —hide-secrets flag to redact connection credentials80%Security feature
#64Add global —application and —environment flags70%Opinionated UX change
#70Add environment:start and environment:stop commands70%New commands — depends on API support
#71Add deployment:logs command75%New command
#72Add env:variables delete and metrics commands70%New commands
#74Fix 8 reliability issues in cloud ship command80%Bug fixes in critical path
#75Auto-show deployment logs on failure85%UX improvement
#80Add command aliases and cloud use context command70%Opinionated UX
#81Add env:pull and env:push commands for .env file sync75%New feature
#82Add —dry-run flag for deploy and ship commands80%Safety feature
#87Fix credential leak in DatabaseOpen and remove dead code90%Security fix
#90Fix InstanceDelete return constant and AuthToken empty tokens guard85%Small targeted fixes
#92Fix incorrect documentation in markdown files90%Docs only
#95Fix hardcoded URLs for private Cloud compatibility85%Makes self-hosted work
#101Add cloud status command75%New command
#102Add debug, health check, and ci:setup commands70%New commands

laravel/forge-cli (4 open)

PRTitleConfidenceNotes
#109Fix critical bugs: missing DB types, null references, path logic85%Multiple clear bugs
#110Fix typo, password exposure, version check error handling85%Security + UX
#111Hide unimplemented command, centralise DB types, null safety75%Code quality
#125Fix php_uname() ValueError on PHP 8.4+95%Clear PHP version compat fix

laravel/forge-sdk (2 open)

PRTitleConfidenceNotes
#206Fix missing return values, URL inconsistencies, comparison operators80%Multiple small fixes
#207Fix incorrect and inconsistent docstrings75%Docs

laravel/forge-monitor (2 open)

PRTitleConfidenceNotes
#76Fix critical bugs: incorrect import, null returns, SQL interpolation85%Security + correctness
#77Improve error handling in commands, notifications, config validation75%Hardening

laravel/forge-database-backups (1 open)

PRTitleConfidenceNotes
#10Fix security vulnerabilities and improve reliability80%Security fixes in backup script

laravel/larachat (1 open)

PRTitleConfidenceNotes
#6Migrate to Laravel AI SDK with conversation memory60%Large migration — may not match direction

Fixes on forks (not yet submitted upstream)

These are ready to submit gradually. All live on my GitHub forks with full PR descriptions and test results.

Windows Fixes

Fork PRIssueTitleConfidenceNotes
JoshSalway/sail #1sail #850Windows/WSL detection in sail script85%Tested on Git Bash + Windows PHP
JoshSalway/sail #2sail #843.sh -> .sql for testing DB init95%Matches existing PostgreSQL approach
JoshSalway/sail #3sail #815xvfb-run for headed browser tests80%Works in Docker, transparent for non-browser
JoshSalway/sail #4sail #809Update sail share default host/port90%Config fix
JoshSalway/octane #1octane #1100POSIX signal constant fallbacks for Windows90%defined() checks are safe, zero behaviour change on Linux/macOS
JoshSalway/octane #3octane #1077Propagate #[Singleton] attribute bindings75%Needs real Octane testing
JoshSalway/octane #4octaneFix null worker crash in Swoole during reload80%Edge case fix
JoshSalway/prompts #1prompts #201Static spinner for —no-ansi85%Fallback rendering
JoshSalway/prompts #2prompts #189Fix nested Symfony style tags80%Regex fix
JoshSalway/installer #1installer #410Only run post-root-package-install if exists90%Guard check
JoshSalway/installer #2installer #465Apply package manager to GitHub workflows85%Template fix
JoshSalway/installer #3installer #441Remove unsupported formatting tags90%Simple removal
JoshSalway/installer #4installer #471Prevent infinite loop on self-update failure85%Guard against edge case
JoshSalway/wayfinder #1wayfinder #160Fix TypeError on inline variable assignment80%Edge case in TS generation
JoshSalway/wayfinder #2wayfinder #190Fix array_is_list TypeError on overlapping paths85%Clear bug
JoshSalway/wayfinder #3wayfinder #195Emit generic type parameters in TS conversion75%TypeScript edge case

Cross-Platform Fixes

Fork PRIssueTitleConfidenceNotes
JoshSalway/framework #2framework #56652Fix memory leak in query log for Octane workers85%Clear leak
JoshSalway/framework #4framework #58377Remove unnecessary clone in SessionManager95%One-line fix, 93 tests pass
JoshSalway/framework #5framework #57456Fix previousPath() for external referrers85%URL handling fix
JoshSalway/framework #6framework #59012Fix TypeError in Http::retry() with null callback90%Type safety fix
JoshSalway/framework #7framework #57961Catch UniqueConstraintViolationException in session85%Race condition guard
JoshSalway/framework #8framework #59024Locale-independent MySQL lost connection detection80%Internationalisation fix
JoshSalway/framework #9framework #53278Skip maintenance.php with cache driver85%Logic fix
JoshSalway/framework #10frameworkFix File::types() discarding chain config80%Validation fix
JoshSalway/framework #11frameworkFix inconsistent accessor attribute name conversion75%Edge case
JoshSalway/framework #12frameworkAdd configurable key prefix to ThrottleRequestsWithRedis70%Feature addition
JoshSalway/framework #13frameworkFix FileStore cache deserialization with sub-10-digit timestamps80%Edge case fix
JoshSalway/framework #14frameworkSet working directory for schedule:work subprocess85%Path resolution fix
JoshSalway/cashier-stripe #1cashier-stripe #1817Webhook reconciliation for failed swap payments75%Has a consistency window — needs review
JoshSalway/cashier-stripe #3cashier-stripe #1773Fix subscription type race condition80%Concurrency fix
JoshSalway/cashier-stripe #4cashier-stripe #1824Fix webhook failing to clear trial_ends_at90%Clear null-handling bug
JoshSalway/cashier-paddle #1cashier-paddle #310Webhook race conditions in subscription creation80%Same pattern as Stripe fix
JoshSalway/horizon #1horizon #1678Release unique job locks when clearing queues85%Lock cleanup
JoshSalway/horizon #2horizon #1704Scope WaitTimeCalculator to supervisor queues80%Metric accuracy
JoshSalway/horizon #3horizon #1698Fix null access in JobPayload::id() for corrupt jobs90%Null guard
JoshSalway/horizon #4horizon #1668Fix ‘delayed until’ showing wrong time85%Display bug
JoshSalway/horizon #5horizon #1647Fix AutoScaler not respecting minProcesses on startup80%Scaling logic
JoshSalway/telescope #1telescope #1691Fix 401 behind Docker/reverse proxy after Sentinel80%Proxy detection
JoshSalway/telescope #2telescope #1693Fix ExtractTags crash for listeners with event-typed tags()85%Type handling
JoshSalway/telescope #3telescopeFix crash recording events for composite key models80%Edge case
JoshSalway/telescope #4telescopePrevent duplicate migrations on telescope:install85%Idempotency
JoshSalway/echo #1echo #475Fix WebSocket channel leak on React unmount85%Resource cleanup
JoshSalway/folio #1folio #148Fix route() helper positional parameters80%Routing fix
JoshSalway/pail #1pailFix crash on malformed JSON log lines90%Error handling
JoshSalway/pail #2pailShow deprecation warnings with deprecation logging80%Feature
JoshSalway/passport #1passport #1894Fix session serialisation with JSON format80%Serialisation fix
JoshSalway/socialite #1socialite #754Fix PKCE session crash in stateless mode85%Session/state handling
JoshSalway/socialite #2socialite #740Make redirect config key optional90%Config flexibility
JoshSalway/pulse #1pulse #476Replace md5() with sha2() for MySQL 9.690%Forward compat
JoshSalway/scout #1scoutUse model primary key for database queries80%Query correctness
JoshSalway/serializable-closure #1serializable-closureFix crash with method-only attributes80%Edge case
JoshSalway/fortify #1fortifyFix lowercase_usernames not respected on password reset85%Consistency fix
JoshSalway/jetstream #1jetstreamFix hasTeamRole() TypeError when pivot role is null90%Null guard
JoshSalway/nightwatch #1nightwatchFix duplicate assignment, double Clock, incorrect uInt32 max85%Multiple small bugs
JoshSalway/nightwatch #8nightwatchRemove unused Number class90%Dead code
JoshSalway/nightwatch #9nightwatchAdd NotificationFailed event support75%Feature addition
JoshSalway/nightwatch #10nightwatchAdd unit tests for utility and infrastructure classes70%Test coverage
JoshSalway/mcp #1mcp #138Prevent OAuth routes overriding existing routes85%Route conflict
JoshSalway/mcp #2mcp #143Render tool exceptions as MCP errors85%Error handling

Gist-only patches (original 25 from day 1)

These are the original patches from yesterday’s post, all verified on both Windows and macOS with full test suites. Many have since been submitted as fork PRs above or are ready to submit upstream.

IssueTitleConfidenceGistFork PR
wayfinder #128Replace DIRECTORY_SEPARATOR with / in TS imports95%PatchFixed upstream (repo restructured)
installer #472proc_open with inherited stdio for Windows TTY80%PatchFork #5
vs-code-extension #575Detect absolute paths before base_path()80%PatchFork #1
prompts #191Regex newline counting for Windows PHP_EOL95%PatchFork #3
octane #1034Respect —poll flag for FrankenPHP watcher85%PatchFork #2 (closed)
vite-plugin-wayfinder #10Pass Vite root as cwd, shell:true70%PatchFork #1
cashier-stripe #1759Webhook race condition duplicate subscriptions85%PatchFork #2 (closed)
framework #58207OOM jobs retry infinitely with maxExceptions75%PatchFork #16
framework #56395Pipeline memory leak — two-line fix95%PatchFork #17
reverb #344TypeError crash — operator precedence bug90%PatchFork #1
serializable-closure #126v2.0.9 regression breaks Bus::chain85%PatchFork #2
horizon #1535Silent 60-second queue stalls — add logging90%PatchFork #6
cashier-stripe #1817swapAndInvoice free upgrade — webhook reconciliation75%PatchFork #1 (open)
pulse #461Multi-server deadlocks — atomic Redis lock80%PatchFork #2
framework #57070Sub-minute scheduling skips at boundaries90%PatchFork #18
reverb #273Presence channels wrong user list at scale65%PatchFork #2
octane #1004Zero-downtime deployment with symlinks70%PatchFork #5
framework #57262incrementEach() updates ALL rows — data corruption90%PatchFork #3 (closed)
framework #58377SessionManager duplicate Redis connections95%PatchFork #4 (open)
wayfinder #161Dashed route names produce invalid TS identifiers75%PatchFork #4
wayfinder #178,#159Inertia imports + parameter shadowing75%PatchFixed upstream (repo restructured)
scout #957Timeout jobs block queue forever95%PatchFork #2
framework #56652Query log memory leak in Octane workers85%PatchFork #2 (open)

Last thoughts

If any maintainers are reading this — sorry again for the volume. I try to ensure every fix is documented with before/after test results and links back to the original issue.

If there are problems with any of these fixes or you’d prefer a different approach, I’m happy to adjust. The full details for every fix are in the master gist.

Previous post: 25 Laravel Bug Fixes — Tested, Verified, Ready to Merge