Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Agents
php-concept/core-2
claude-code
cursor
phpstan
http-kernel
routing
request-context
psr-7
error-handling
config

Skeleton підключає цей проєкт через symlink:

Install
php artisan boost:add-skill php-concept/core-2

Save this content to: AGENTS.md

# Concept Core 2 — інструкції для агента

> Цей repo — **тонке ядро**. Повний контекст (skeleton, extensions, symlink) — у
> [`/var/www/concept-skeleton-dev-2/AGENTS.md`](/var/www/concept-skeleton-dev-2/AGENTS.md).

## Швидкий контекст

- **Active code**: `src/`
- **Old reference (не видаляти поки мігруємо)**: `storage/src/`
- **Old configs (reference, не підключені)**: `storage/config/`
- **Namespace**: `Concept\Core\`
- **PHP**: 8.4, PHPStan level 9

Skeleton підключає цей проєкт через symlink:

```
/var/www/concept-skeleton-dev-2/vendor/php-concept/core-2 → /var/www/concept-core-2/
```

## Що входить у тонке ядро

| Компонент | Файл |
|-----------|------|
| Application | `src/App.php` |
| HTTP runner | `src/Http/HttpRunner.php` |
| HTTP kernel provider | `src/Providers/Http/HttpKernelServiceProvider.php` |
| Route strategy | `src/Http/Routing/RouteStrategy.php` |
| Resolver contract | `src/Http/Contracts/ArgumentResolverInterface.php` |
| Interceptor contract | `src/Http/Contracts/RouteInterceptorInterface.php` |

## Що НЕ входить у ядро (→ extensions у skeleton)

- FormRequest / Validation
- Caster / Valinor
- Session, View, Database, Telemetry, Console, …
- **Config** — extension на фінальному етапі (зараз **без ConfigInterface**)

Див. `storage/src/` та `storage/config/` як reference для міграції.

## Конфігурація — без ConfigInterface

Під час міграції **ядро не використовує ConfigInterface**. Усі налаштування передаються skeleton-ом явно (масиви, параметри конструкторів providers).

`storage/config/` — PHP-файли старого додатку (`app.php`, `db.php`, `routes.php`, …). Reference only; не autoload, не bootstrap.

Config extension (пізніше) читатиме конфіги і прокидатиме значення в glue — ядро лишається без Config.

## RequestContext lifetime

- `App::requestFromGlobals` — FPM/FrankenPHP entry: `fromGlobals` + `reset`/`set` RequestContext.
- `HttpRunner::handle` — `set($request)` на вході; `reset()` **лише після успішного** dispatch (fail лишає context для Whoops). RoadRunner може передати готовий PSR-7 прямо в `handle`.
- `RouteStrategy` — оновлює context на enriched request перед handler; **не** скидає.
- Whoops `RenderHttpErrorHandler` — читає `RequestContext::current()`; наступний `requestFromGlobals` / `handle` затирає context.

## Enriched request — без container refresh

`RouteStrategy::prepareRequest()` додає route vars у PSR-7 attributes і повертає enriched request для resolvers/handler.

Entrypoint: `$app->requestFromGlobals(...)` → `$app->handle($request)`. У контейнері `ServerRequestInterface` **не** реєструється.

Extensions отримують request явно (resolver args, method params) або через `RequestContext` під час HTTP lifecycle.

## Argument resolvers — core (implemented)

`src/Http/Routing/Resolvers/`:

1. **ServerRequestArgumentResolver** — type hint `ServerRequestInterface`
2. **RouteParameterArgumentResolver** — param name ∈ route `$vars`, raw value

Registered by skeleton via `HttpKernelServiceProvider` constructor (`$resolvers` chain).

## Залежності (composer.json)

- `league/container`, `league/route`
- `laminas/laminas-diactoros`, `laminas/laminas-httphandlerrunner`

Без Valinor, без validator, без twig/plates.

## Перевірка

```bash
cd /var/www/concept-core-2
vendor/bin/phpstan
```

---

*Детальний roadmap і поточний стан — у skeleton AGENTS.md.*

Concept Core 2 — інструкції для агента

Цей repo — тонке ядро. Повний контекст (skeleton, extensions, symlink) — у /var/www/concept-skeleton-dev-2/AGENTS.md.

Швидкий контекст

  • Active code: src/
  • Old reference (не видаляти поки мігруємо): storage/src/
  • Old configs (reference, не підключені): storage/config/
  • Namespace: Concept\Core\
  • PHP: 8.4, PHPStan level 9

Skeleton підключає цей проєкт через symlink:

/var/www/concept-skeleton-dev-2/vendor/php-concept/core-2 → /var/www/concept-core-2/

Що входить у тонке ядро

Компонент Файл
Application src/App.php
HTTP runner src/Http/HttpRunner.php
HTTP kernel provider src/Providers/Http/HttpKernelServiceProvider.php
Route strategy src/Http/Routing/RouteStrategy.php
Resolver contract src/Http/Contracts/ArgumentResolverInterface.php
Interceptor contract src/Http/Contracts/RouteInterceptorInterface.php

Що НЕ входить у ядро (→ extensions у skeleton)

  • FormRequest / Validation
  • Caster / Valinor
  • Session, View, Database, Telemetry, Console, …
  • Config — extension на фінальному етапі (зараз без ConfigInterface)

Див. storage/src/ та storage/config/ як reference для міграції.

Конфігурація — без ConfigInterface

Під час міграції ядро не використовує ConfigInterface. Усі налаштування передаються skeleton-ом явно (масиви, параметри конструкторів providers).

storage/config/ — PHP-файли старого додатку (app.php, db.php, routes.php, …). Reference only; не autoload, не bootstrap.

Config extension (пізніше) читатиме конфіги і прокидатиме значення в glue — ядро лишається без Config.

RequestContext lifetime

  • App::requestFromGlobals — FPM/FrankenPHP entry: fromGlobals + reset/set RequestContext.
  • HttpRunner::handle — set($request) на вході; reset() лише після успішного dispatch (fail лишає context для Whoops). RoadRunner може передати готовий PSR-7 прямо в handle.
  • RouteStrategy — оновлює context на enriched request перед handler; не скидає.
  • Whoops RenderHttpErrorHandler — читає RequestContext::current(); наступний requestFromGlobals / handle затирає context.

Enriched request — без container refresh

RouteStrategy::prepareRequest() додає route vars у PSR-7 attributes і повертає enriched request для resolvers/handler.

Entrypoint: $app->requestFromGlobals(...) → $app->handle($request). У контейнері ServerRequestInterface не реєструється.

Extensions отримують request явно (resolver args, method params) або через RequestContext під час HTTP lifecycle.

Argument resolvers — core (implemented)

src/Http/Routing/Resolvers/:

  1. ServerRequestArgumentResolver — type hint ServerRequestInterface
  2. RouteParameterArgumentResolver — param name ∈ route $vars, raw value

Registered by skeleton via HttpKernelServiceProvider constructor ($resolvers chain).

Залежності (composer.json)

  • league/container, league/route
  • laminas/laminas-diactoros, laminas/laminas-httphandlerrunner

Без Valinor, без validator, без twig/plates.

Перевірка

cd /var/www/concept-core-2
vendor/bin/phpstan

Детальний roadmap і поточний стан — у skeleton AGENTS.md.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
adachsoft/api-version-bundle