Skip to content

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

Open
agissept wants to merge 3 commits into
pre-release/4.2.96from
pre-release/4.2.97
Open

agissept wants to merge 3 commits into
pre-release/4.2.96from
pre-release/4.2.97

Conversation

@agissept

Copy link
Copy Markdown
Member

Konteks

Rilis 4.2.97 = enabler Wave-4 (task 4.0): naikkan vendor floor fork ke floor Laravel 13 supaya illuminate/*:^13 bisa co-install saat SCC-1 cutover (§1b Vendor-floor collision, PR #65). Independen dari 2.5. (Menggantikan #66 yang ter-close saat rename branch.)

Dependency

  • symfony/* ~6.4^7.4, symfony/var-dumper^7.4.
  • nesbot/carbon ^2.71^3.8.4 — kepaksa: carbon 2 mengunci symfony/translation ^6.
  • monolog/monolog ^2.10^3.10 (→3.12).
  • brick/math, flysystem ^3, symfony/uid, league/uri ikut transitif nanti saat 4.1 require illuminate/*:^13.

Fork dibikin kompat (suite fork 1647 hijau, 0 signature-break)

Symfony 7 (typed returns): Console\Command::execute():int; Console\Application::add():?Command + buang override fluent setAutoExit (parent :void); Foundation\Application::terminate & Http\StackedHttpKernel::terminate :void; Http\Request::createFromBase — JSON replace() in-place (Symfony 7 $request->request typed InputBag).
carbon 3: getMinutes()diffInMinutes() kini signed+float → dulu negatif untuk TTL masa depan → cache write ke-skip diam (akar 6 gagal CachedRouting) → now()->diffInMinutes($ttl) cast int (Repository + TaggedCache).
monolog 3: Log\Logger tak berubah (konstanta level & string-level log() masih ada di v3; diverifikasi smoke useFiles/log/level-filter). Fix bug laten LogServiceProvider (use Monolog\Logger naungi kelas se-namespace → new Logger(new Logger()) dua-dua Monolog; ctor ber-type monolog 3 → fatal saat boot) via alias MonologLogger.
Test: FoundationArtisanTest — mock Command asli (find():Command) + capture ArrayInput (run():int).

Verifikasi

  • composer update symfony/* carbon monolog -W resolve (exit 0); composer validate ok.
  • Probe autoload 448 kelas fork: 0 signature-break.
  • ./vendor/bin/phpunit: 1647 test, 3659 assertion, 21 skipped — identik baseline pra-bump.
  • composer.lock gitignored (konvensi library).

Merge → tag 4.2.97. Setelah landas, Wave 4.1 SCC-1 tak lagi ke-block installability.

🤖 Generated with Claude Code

agissept and others added 3 commits September 18, 2026 00:25
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>
registerSmtpTransport() fell back to an EMPTY scheme when encryption wasn't
'tls', so `new Dsn('', ...)` made symfony/mailer 7's EsmtpTransportFactory throw
UnsupportedSchemeException at boot for any non-tls / unset-encryption mail config
(plain smtp, STARTTLS, or an unconfigured env). Mirror stock Laravel: the else
branch is 'smtp'. Latent under symfony/mailer 6 too; surfaced consuming 4.2.97.

Verified: transport builds for enc ''/null/tls across ports (tls+465 → smtps,
else → smtp); fork suite 1647 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@agissept
agissept changed the base branch from master to pre-release/4.2.96 September 17, 2026 17:26
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