gcego/runtime
gcego/runtime is a lightweight Laravel/PHP package that provides a runtime layer for managing execution context and service bootstrapping. It integrates cleanly with existing applications and helps keep runtime concerns organized and predictable.
Runtime::execute() becomes the single entry point for actions, data queries, form submissions and package-defined operations. That means one place to reason about authorization, validation and error responses instead of N controllers, Livewire methods and ad-hoc service calls — which is a product decision about consistency of behaviour across surfaces, not just an engineering nicety.TenantResolver/PanelResolver and explicitly never from request input; authorization is fail-closed via a single ExecutionAuthorizer (GateExecutionAuthorizer, ability gcego-runtime.execute). This supports committing to multi-tenant isolation and "deny by default" in customer-facing security questionnaires and enterprise procurement.gcego/rendering; runtime is now execution-only. This is a packaging decision worth endorsing — you can ship execution-kernel changes without dragging Blade/Livewire/styling along, and the dependency surface shrinks (gcego/components, livewire/livewire, illuminate/view dropped). It also means two artefacts to version and a coordinated upgrade when either moves.HandlerRegistry categories, ExecutionMiddleware, ObservesLifecycle). Buy is defensible when you have more than one entry surface and more than one team writing operations.ExecutionException + ErrorCategory (HTTP status and a public message) lets you standardize customer-facing errors and telemetry without leaking internals — directly supports SLAs, support tooling and localized/public error copy.ExecutionTrace, the OperationExecuting/OperationExecuted/OperationFailed events and RuntimeInspector/RuntimeDiagnostic give support and on-call a real answer to "what happened to this request?" — an argument for buying rather than hand-rolling logging around ad-hoc call sites.ExecutionScope enforces nesting depth (execution.max_depth) and keeps the subject across nested operations, and the package refuses to execute before Core has booted. These are guardrails you can advertise as reliability features rather than debug in production.shouldReceive()), so QA can cover the kernel without standing up full feature flows — relevant if you gate releases on automated coverage.Adopt when most of the following hold:
gcego/core ^1.0, gcego/registry ^1.1, gcego/blueprints ^1.0). Runtime depends on all three; the value proposition is ecosystem-shaped, not standalone.Look elsewhere or defer when:
gcego/rendering; runtime alone will not render anything, and Livewire blueprint hosting has been removed (Livewire\BlueprintHost, hosts.blueprint, gcego-runtime.livewire.* are gone).Runtime::render(), renderAuthorized(), identityOf(), canRender(), hostedBlueprint() moved to Gcego\Rendering\RenderEngine (hostedBlueprint() → authorizedBlueprint()); view component renamed to <x-gcego-rendering::render>; config keys gcego-runtime.rendering.* / gcego-runtime.authorization.* → gcego-rendering.*; ability now gcego-rendering.render; RuntimeInspector::inspect() no longer takes a target; RuntimeReport lost renderers/missingRenderers; RenderDiagnostic → RuntimeDiagnostic; capability runtime.livewire removed. Migration is a real project, not a composer bump.Diligence items before signing off:
\Runtime can collide with existing code or confuse IDE/static analysis; check your codebase for Runtime usage.For executives (one paragraph): This release delivers the GCEGO execution kernel — a single, governed entry point through which every action, query and form submission flows. It gives us a consistent, auditable authorization checkpoint that is deny-by-default and builds tenant/user context from the authenticated session rather than from request input, plus standardized error categories and execution traces. Commercially that means stronger answers in enterprise security reviews, fewer silent authorization bugs, and faster incident diagnosis. Two caveats to price in: it requires PHP 8.3 and Laravel 13, so it is tied to our framework upgrade; and it is a breaking release that splits rendering into a separate package, so adoption includes a migration task and a second dependency to track. Recommendation: approve as part of the Laravel 13 upgrade plan, not as a standalone lift-and-shift.
For engineering (summary): Replace ad-hoc dispatch with Runtime::execute() / attempt() / contexts(). Define immutable, identifier-only Operations (make, action, query, submit, on, with) and register typed handlers in HandlerRegistry (action, query, form, plus package-defined categories) implementing OperationHandler/ActionHandler/QueryHandler/FormSubmissionHandler, with optional ValidatesOperation, AuthorizesOperation, ObservesLifecycle and ExecutionMiddleware. Context is a trusted, immutable ExecutionContext from ExecutionContextFactory (guard + TenantResolver/PanelResolver) — never from request input. Authorization is fail-closed through ExecutionAuthorizer/GateExecutionAuthorizer (ability gcego-runtime.execute), configurable via gcego-runtime.execution.ability, .middleware, .max_depth. Results and failures come back as ExecutionResult/ExecutionTrace or the ExecutionException hierarchy with ErrorCategory for HTTP status and public messaging. Use RuntimeInspector (RuntimeDiagnostic, RuntimeReport::$handlers) to verify handler/category/override registration in CI, and hook OperationExecuting/OperationExecuted/OperationFailed for logging and metrics. Nested operations are isolated by ExecutionScope and depth-limited; execution is refused before Core has booted. Rendering is no longer in this package — pull gcego/rendering and use Gcego\Rendering\RenderEngine (authorizedBlueprint() replaces hostedBlueprint()) and <x-gcego-rendering::render>.
Ask: sequence adoption behind the Laravel 13 / PHP 8.3 upgrade; scope a dedicated migration ticket for the rendering extraction and config/ability renames; add CI coverage that asserts RuntimeInspector output matches the expected handler registry before each release.
How can I help you explore Laravel packages today?