v0.4.0: Plugin-based architecture rewrite#20
Merged
Merged
Conversation
added 10 commits
February 13, 2026 09:12
Remove the monolithic v1 architecture (Services/, old commands, old test suite) to make way for the plugin-based v2 analysis engine.
Plugin-based analysis engine with priority-ordered analyzer chains, $ref-deduplicating schema registry, AST caching, three-layer merge engine, and route discovery with filtering.
OpenAPI spec builder with tag/security/schema support, multi-format output (JSON, YAML, Postman), built-in plugins (BearerAuth, Pagination, CodeSamples, Spatie Data/QueryBuilder, JSON:API, Laravel Actions), spec linting, breaking-change diffing, and TypeScript type generation.
Rewrite config with plugin system, code samples, tag documentation (descriptions, x-tagGroups, trait tags, externalDocs), analysis priority, and multi-domain support. Add Tag description parameter, ExcludeFromDocs attribute, and rewire service provider for the plugin-based architecture.
361 tests covering the full v2 pipeline: route filtering, tag/summary inference, request/response analysis, error detection, code samples, pagination, deprecation, route constraints, model binding, policy introspection, spec linting, breaking-change diffing, TypeScript generation, Postman export, and tag documentation features.
Complete rewrite covering the plugin-based analysis engine, all PHP attributes, configuration options, runtime capture, documentation viewers, output formats, plugin system, built-in plugins, integrations, CI/CD usage, and new tag documentation features (descriptions, x-tagGroups, trait tags, externalDocs).
The ext-yaml extension uses different quoting conventions (double quotes, ~ for null) than the built-in converter. Use regex matching so tests pass regardless of whether the extension is installed.
The ext-yaml extension uses different quoting conventions (double quotes, ~ for null) than the built-in converter. Use regex matching so tests pass regardless of whether the extension is installed.
…entation into v2-rewrite
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
RequestBodyExtractor,ResponseExtractor,QueryParameterExtractor,SecuritySchemeDetector,OperationTransformer,ExceptionSchemaProvider) with priority-ordered chains$refdeduplicationLaravel Actions)
api:generate,api:lint,api:diff,api:types,api:clear-cache,api:pluginsx-tagGroups,x-traitTag,externalDocsBreaking Changes
documentation:generate→api:generate(--file→--domain).documentation:captureanddocumentation:validateremoved.3.0.2→3.1.0Services\*classes removed (replaced by plugin architecture)Services\CapturedResponseRepository→Repository\CapturedResponseRepositorytermsOfService→terms_of_service,generationsection restructuredphpstan/phpdoc-parser: ^2.0added as requiredMigration
documentation:generate→api:generatephp artisan vendor:publish --tag="api-documentation-config"Services\*imports with plugin interfacesopen_api_versionto3.0.2)