Conversation
Major additions in one batch — work spans framework internals, dev tooling,
and self-hosted docs.
framework / core
- Wire the Service Provider pipeline that already lived in Kernel under
the misleading `loadServices` name. `loadProviders`/`finalizeProviders`
now read `Env::get('providers')` and call before()/after() around the
middleware+controller run. before() pre-flight, after() post-flush.
- Move PSR-4 autoload mapping out of `config/Providers.php` (where it
was misnamed) into new `config/Autoload.php`. Providers.php is now an
actual list of ServiceProvider classes. Bootstrap/Autoload.php reads
the new `autoload` key with a legacy fallback to `providers`.
- Container: add buildPlan cache to skip ReflectionClass on repeat
resolves. ~3 µs faster per make() steady state, real win under
persistent workers (RoadRunner / FrankenPHP) where plans live across
requests.
- Response::send(): two bugs. Stop clobbering Content-Type set by the
controller with Accept-negotiated value (was emitting literal "*/*").
Stop double json_encode'ing string bodies in the application/json
branch. Both needed for /heartbeat JSON to render correctly.
- DebugTimer: timeline(includeOpen=true) reports in-progress spans so
mid-request observers see middleware + controller frames that haven't
end()'d. New record(label, cat, startNs, endNs) injects closed spans
retroactively (used to backfill the pre-dt() autoload window).
- RequestRecorder self-instruments via a "recorder snapshot" span so
its own work is visible in the recording it writes.
- Kernel: wrap finalizeProviders + add 'kernel construct' + 'request
init' spans. Full lifecycle now accounts for ~93% of total_ms with
every named phase visible.
/heartbeat (new)
- Built-in self-check endpoint. 9 subsystem probes (php, config,
container, routes, middlewares, providers, storage, database, assets)
rolled up to ok / degraded / down. HTTP 200 / 503 for probes.
- performance section: lifecycle timeline (closed + open spans), last
completed request (read from recorder for 100% closed picture), 6
synthetic micro-benchmarks (median of 5 cold runs), memory + opcache
stats.
- HTML view at ?view=html (or browser Accept negotiation) — waterfall
chart with light/dark theme, tinted cards for warn/fail checks,
striped animation for in-progress spans, top-right corner ribbons,
coverage % per timeline.
/new + / (scaffolder UI)
- Move scaffolder from Welcome to /new (config-gated, default route
overrideable). / now renders the same Scaffolder page.
- Typed create/remove for 11 artifacts: page, controller, model,
service, repository, middleware, provider, observer, dto, vo, plus
`resource` composite (model + repository + service + page).
- Slash commands: /create [type] <name>, /remove [type] <name>, /docs
<keywords>. Suggestions dropdown opens on focus, filters as you type,
Tab/arrow/Enter navigation.
- Default scaffold template upgraded — opts out of dark Layout, uses
zinc/white palette, includes back-link CTA, theme switcher per page.
/docs/ (new — static page)
- Self-hosted docs at public/docs/index.html. Vue 3 + Tailwind 4 +
Prism, all from CDN. 45 topics across 8 categories: Introduction,
Getting Started, Routing & HTTP, Wisp, Architecture, Data, Helpers
& Internals, Tooling.
- Three-column layout: left sidebar (categorized nav with scroll-spy),
center content (anchored sections), right sidebar (on this page rail
+ quick links). Header sticky with search.
- Every topic has a syntax-highlighted code example with Copy button.
- Theme switcher synced with the rest of the app via localStorage.
other
- app/Routes/Api.php: closure route → ApiController so the optimize
route cache can include it.
- Welcome.vue rewritten as a landing page (was the scaffolder).
- About.vue (new) — example of the new default scaffold template.
- app/Resources/css/app.css + app.ghost.tpl: minor.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (31)
📝 WalkthroughWalkthroughThis PR introduces a complete code-scaffolding system with UI, framework health-check diagnostics, dark-mode support across application pages, configuration reorganization, and a comprehensive documentation SPA. Core framework changes include provider lifecycle transition, Container build-plan caching, Response content-type preservation, and enhanced debug timing. ChangesDark Mode and Application Pages
Code Scaffolder Feature
Health Check and Diagnostics System
Framework Core Infrastructure: Config, Providers, Container, Response, Debug
Documentation
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Poem
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint skipped: no ESLint configuration detected in root package.json. To enable, add Comment |
Major additions in one batch — work spans framework internals, dev tooling, and self-hosted docs.
framework / core
loadServicesname.loadProviders/finalizeProvidersnow readEnv::get('providers')and call before()/after() around the middleware+controller run. before() pre-flight, after() post-flush.config/Providers.php(where it was misnamed) into newconfig/Autoload.php. Providers.php is now an actual list of ServiceProvider classes. Bootstrap/Autoload.php reads the newautoloadkey with a legacy fallback toproviders./heartbeat (new)
/new + / (scaffolder UI)
resourcecomposite (model + repository + service + page)./docs/ (new — static page)
other
Summary by CodeRabbit
Release Notes
New Features
Improvements