Skip to content

Pre-release 4.2.99 → master — task 4.1 SCC-1 container swap - #69

Open
agissept wants to merge 4 commits into
pre-release/4.2.98from
pre-release/4.2.99
Open

agissept wants to merge 4 commits into
pre-release/4.2.98from
pre-release/4.2.99

Conversation

@agissept

Copy link
Copy Markdown
Member

Task 4.1 — SCC-1 window, member #1: illuminate/container

First SCC-1 core member cut to a real v13 package. illuminate/container:^13 depends
only on contracts (already ^13 from the seed phase), so it flips independently ahead
of the support-gated remainder of the window.

Commits

  • 69421972 prep — sweep 84 ->bindShared(->singleton( (32 service providers).
  • f1fff797 prep — 15 $this->app['k'] = $this->app->share(fn)$this->app->singleton('k', fn).
  • f63ca120 swap — illuminate/container ^13 to require (out of replace); delete fork
    src/Illuminate/Container/ tree; Application BindingResolutionException import → Contracts;
    delete tests/Container/ (vendored dep, tested upstream); conform tests/{Foundation,Mail,Exception}.

Verification

  • Application extends v13 Container with zero signature break (make/bound/extend
    overrides LSP-compatible; confirmed via isolated class_exists probes).
  • Fork suite 1489 green (−157 = removed container unit tests).
  • Runtime smoke: v13 Container loads from vendor, singleton() memoizes, Contracts exception resolves.

Stack / notes

Stacks on #68 (4.2.98 seed). Tag 4.2.99 cut on this branch tip (pre-merge) so the app
canary can composer-pull it. composer.lock is gitignored in the fork.

Remaining SCC-1 = the support-gated atomic remainder (support/http/session/cache/cookie/
encryption/events/filesystem/redis/database/bus), a separate release.

agissept and others added 4 commits September 18, 2026 16:09
…4.1, SCC-1 container-prep)

Prepares the SCC-1 atomic window: v13's illuminate/container has singleton()
but no bindShared()/share(). Migrate all 84 fork callers (32 service providers)
from ->bindShared() to ->singleton() while the fork container still ships both.

Semantics: fork bindShared($a,$c) = bind($a, share($c), true); singleton($a,$c)
= bind($a,$c,true). The share() wrapper is a redundant static-var memoization on
top of the shared-instance cache — dropping it converges to v13 behavior. Fork
suite green (1646, 0 fail).

bindShared()/share() methods are KEPT in the container (app service providers
still call them until the app matched-pair conform); they go with the container
swap in the atomic window. The Foundation\Application BindingResolutionException
import redirect is also deferred to the window (fork concrete extends \Exception,
not the Contracts type).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ask 4.1, SCC-1 container-prep)

Second prep slice for the container swap: v13 illuminate/container has no share().
The 15 legacy `$this->app['key'] = $this->app->share($closure)` bindings (Events,
Routing x4, CachedRouting, Exception x6, Mail x3) are the L4.0 idiom where share()
memoizes a closure via a static var and offsetSet binds it non-shared. In v13
`$app['key'] = $closure` binds NON-shared, so the singleton must be explicit:
rewritten to `$this->app->singleton('key', $closure)`.

View Factory's own share() (view-data sharing, different API) is untouched.
Fork suite green (1646, 0 fail).
Missed in the bindShared sweep because an rtk-proxied grep wrongly reported zero
->share( callsites; re-verified via `rtk proxy grep`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…13 (task 4.1, SCC-1 window)

First SCC-1 core member cut over to a real v13 package. illuminate/container:^13
depends only on contracts (already ^13 from the seed phase), so it flips
independently ahead of the support-gated remainder of the window.

- composer.json: illuminate/container ^13 -> require, removed from replace.
- Deleted fork src/Illuminate/Container/ tree (v13 package shadows it via the
  longer Illuminate\Container\ PSR-4 prefix; concrete classes now vendored).
- Foundation\Application: BindingResolutionException import -> Contracts (v13
  moved it there; docblock-only @throws, no runtime path).
- tests/Container/ deleted (157 tests): these unit-test the container itself,
  now a vendored package tested upstream — the fork must not re-test a dependency.
- tests/{Foundation,Mail,Exception}: bindShared()/share()/exception refs adapted.

Application extends v13 Container with no signature break (make/bound/extend
overrides compatible; verified via isolated class_exists probes). Fork suite green
(1489, 0 fail; -157 from the removed container tests). composer.lock is gitignored.

Prep landed earlier this branch: bindShared() sweep (6942197), share() sweep (f1fff79).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ask 4.1, container swap)

illuminate/container v13 dropped the L4 bindShared()/share() API. Fork src already
moved to singleton() (commits 6942197/f1fff797), but third-party & vendor-fork
service providers still call them on the app at boot and can't all be patched
(tomgrohl/laravel4-php71-encrypter is third-party packagist). Re-expose both as thin
BC shims on Foundation\Application (which extends the v13 container):
bindShared($a,$c) => singleton($a,$c); share() returns the memoizing closure.

Unblocks boot for spatie/laravel-blade-x, laracasts/commander,
tomgrohl/laravel4-php71-encrypter, barryvdh/laravel-ide-helper. Transitional —
remove at the Foundation swap (task 4.5). Fork suite green (1489).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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