> ## Documentation Index
> Fetch the complete documentation index at: https://docs.instructorphp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# V2.3.0

## What's New

v2.3.0 introduces the first substantial Symfony integration baseline for InstructorPHP.
The monorepo now includes a first-party `Cognesy\Instructor\Symfony\` bundle surface with
framework-owned configuration, service wiring, delivery seams, observability, and testing support.

This release also broadens Symfony 8 compatibility in the root package, tightens the Symfony-facing
logging path, and expands the framework documentation significantly.

## Symfony Integration

### First-party bundle surface in the monorepo

The main package now autoloads `Cognesy\Instructor\Symfony\` and includes the initial Symfony
bundle/configuration baseline directly in the monorepo. The package now owns:

* one `instructor` config root with explicit subtrees
* container bindings for core runtime services
* framework-native wiring for inference, embeddings, and structured output
* AgentCtrl runtime seams for HTTP, CLI, and Messenger flows
* native-agent registry, schema, tool, capability, and session wiring

This is the first release where Symfony stops looking like scattered integration glue and starts
looking like a supported framework surface.

### Delivery, progress, telemetry, and sessions

`packages/symfony` now includes explicit delivery seams for queued AgentCtrl prompts, queued
native-agent prompts, runtime observation forwarding, CLI observation formatting, progress updates,
and package-owned telemetry/exporter lifecycle wiring.

Session persistence is also now explicit under `instructor.sessions`, with built-in in-memory and
file-backed paths for native agents.

### Testing and migration guidance

Symfony now ships a much broader test harness and documentation set, including quickstart,
configuration, runtime surfaces, sessions, telemetry, logging, delivery, operations, testing, and
migration guides.

That gives Symfony users a clearer path for both greenfield adoption and migration from custom
bundle glue.

## Logging And Observability

Symfony-facing logging ownership moved further toward the framework package in this release.

`packages/symfony` now includes package-owned logging factory/wiring, while `packages/logging`
adds correlation enrichment that merges telemetry and runtime identifiers more consistently.

The legacy standalone Symfony logging bundle path remains present, but it is now documented as a
deprecated compatibility path in favor of `instructor.logging` and the first-party Symfony package.

## Compatibility

### Symfony 8 and DocBlock 6

The root package now allows `phpdocumentor/reflection-docblock:^5.6 || ^6.0`.

This removes the Composer conflict that blocked Symfony 8 applications already pinned to
`phpdocumentor/reflection-docblock:^6`, which was the main compatibility issue reported after the
v2.2.0 release.

## Documentation And QA

This release adds a large amount of framework documentation and also restores docs QA coverage that
had regressed in several packages.

That work is mostly invisible in runtime behavior, but it matters for release quality: the docs
snippets now lint cleanly again across the release-notes/docs QA sweep.

## Upgrade Notes

* If you are integrating with Symfony, start from the new `packages/symfony/docs/` guides and the `instructor` config root instead of building custom container glue around lower-level packages.
* If you depend on the legacy Symfony logging bundle wiring from `packages/logging`, treat it as a compatibility path. The forward-looking integration surface is the Symfony package plus `instructor.logging`.
* If your Symfony 8 application already requires `phpdocumentor/reflection-docblock:^6`, this release removes the root-package conflict and should install cleanly.
* The Symfony integration now ships in the monorepo package. Dedicated split-package publication for `cognesy/instructor-symfony` follows the normal split/bootstrap flow and may lag behind the monorepo release momentarily.
