Skip to content

Pre-release 4.2.97 → master — task 4.0 (vendor floor: Symfony 7 + carbon 3 + monolog 3) - #66

Closed
agissept wants to merge 2 commits into
masterfrom
migration/4.0a-symfony-7
Closed

agissept wants to merge 2 commits into
masterfrom
migration/4.0a-symfony-7

Conversation

@agissept

Copy link
Copy Markdown
Member

Konteks

Slice pertama dari enabler Wave-4 (task 4.0): naikkan vendor floor fork menuju Laravel 13 supaya illuminate/*:^13 bisa co-install nanti (lihat §1b Vendor-floor collision — PR #65). Independen dari 2.5 → langsung ke master.

Perubahan dependency

  • symfony/* ~6.4^7.4, symfony/var-dumper^7.4.
  • nesbot/carbon ^2.71^3.8.4ikut karena kepaksa: carbon 2 mengunci symfony/translation di ^6, tak bisa hidup bareng symfony/translation ^7.
  • monolog tetap ^2 (tak ada kaitan symfony) — ditunda ke slice berikut bareng illuminate/log:^13.

Fork dibikin kompatibel (suite fork: 1647 hijau, 0 signature-break, sama seperti baseline)

Area BC Symfony 7 / carbon 3 Fix
Console\Command::execute return kini : int : mixed: int
Console\Application::setAutoExit parent kini : void (tak bisa fluent) hapus override, setAutoExit(false) jadi statement sendiri
Console\Application::add return : ?Command tambah : ?Command
Foundation\Application::terminate, Http\StackedHttpKernel::terminate TerminableInterface : void tambah : void
Http\Request::createFromBase $request->request kini typed InputBag untuk JSON replace() in-place, bukan assign ParameterBag
Cache Repository/TaggedCache::getMinutes carbon 3 diffInMinutes() signed + float now()->diffInMinutes($ttl) + cast int (dulu instance($ttl)->diffInMinutes() → negatif untuk TTL masa depan → write ke-skip diam-diam; ini juga akar CachedRouting cache-miss)
FoundationArtisanTest find(): Command, run(): int mock Command asli + capture ArrayInput via matcher

composer.lock gitignored (konvensi library) — konsumen resolve sendiri.

Verifikasi

  • composer update "symfony/*" nesbot/carbon -W resolve (exit 0).
  • Probe autoload semua 448 kelas fork: 0 signature-break.
  • ./vendor/bin/phpunit: 1647 test, 3659 assertion, 21 skipped — identik baseline pra-bump.

Belum (follow-up 4.0)

monolog 2→3 (rewrite Log ke LogRecord/Level, sinkron 2.13) — slice terpisah. Setelah 4.0 lengkap, Wave 4.1 SCC-1 baru installable.

🤖 Generated with Claude Code

agissept and others added 2 commits September 17, 2026 21:56
First slice of the Wave-4 enabler (task 4.0): raise the fork's vendor floor
toward Laravel 13's so illuminate/*:^13 becomes co-installable later.

symfony/* ~6.4 → ^7.4, symfony/var-dumper ~6.4 → ^7.4. carbon is dragged to
^3.8.4 by necessity: carbon 2 caps symfony/translation at ^6, so it cannot
coexist with symfony/translation ^7. monolog stays ^2 (no symfony coupling;
deferred to a later slice with illuminate/log:^13).

Fork code made compatible with the new floor (fork suite: 1647 green, 0
signature breaks, unchanged from baseline):
- Console\Command::execute(): mixed → int (Symfony 7 typed return).
- Console\Application: drop fluent setAutoExit() override (parent is now
  : void) and move setAutoExit(false) out of the make() chain; add() gets
  : ?Command return type.
- Foundation\Application::terminate / Http\StackedHttpKernel::terminate get
  : void (TerminableInterface typed return).
- Http\Request::createFromBase: for JSON, replace() into the existing InputBag
  instead of assigning a ParameterBag (Symfony 7 typed $request->request).
- Cache Repository/TaggedCache getMinutes(): carbon 3 diffInMinutes() is now
  signed + float → use now()->diffInMinutes($ttl) and cast to int (was
  instance($ttl)->diffInMinutes(), which went negative for future TTLs and
  silently skipped the write — also the root cause of the CachedRouting misses).
- FoundationArtisanTest: mock a real Command (find(): Command) and capture the
  ArrayInput via the matcher, since run(): int no longer returns the input.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Completes the vendor-floor bump for task 4.0: monolog/monolog ^2.10 → ^3.10
(→ 3.12), reaching Laravel 13's floor. Log\Logger already parsed levels via
the Monolog\Logger::* constants (still present in monolog 3) and logs with
string levels (monolog 3 log() still accepts them), so it needed no change —
verified by a smoke over useFiles()/log()/level-filtering under monolog 3.

Fixes a latent wiring bug in LogServiceProvider surfaced by monolog 3's typed
constructor: `use Monolog\Logger` shadowed the same-namespace
Illuminate\Log\Logger, so `new Logger(new Logger($env), $events)` built two
Monolog loggers and passed a Monolog logger where a string name is required.
(Latent since the 3.5 Writer→Logger rename created the name collision; the app
runs an older tag and the fork suite doesn't cover register(), so it never
fired.) Alias the import to MonologLogger so the outer resolves to the fork
wrapper again.

Fork suite: 1647 green, 0 signature breaks.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@agissept agissept changed the title feat(deps): bump fork vendor floor to Symfony 7 + carbon 3 (task 4.0a) feat(deps): bump fork vendor floor to Symfony 7 + carbon 3 + monolog 3 (task 4.0) Sep 17, 2026
@agissept agissept closed this Sep 17, 2026
@agissept
agissept deleted the migration/4.0a-symfony-7 branch September 17, 2026 15:07
@agissept agissept changed the title feat(deps): bump fork vendor floor to Symfony 7 + carbon 3 + monolog 3 (task 4.0) Pre-release 4.2.97 → master — task 4.0 (vendor floor: Symfony 7 + carbon 3 + monolog 3) Sep 17, 2026
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