Sync setup-foundation specs to main and archive change.
Promote five capability specs from the completed setup-foundation change into openspec/specs and move the change to archive. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
48
openspec/specs/quality-gates/spec.md
Normal file
48
openspec/specs/quality-gates/spec.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# Quality Gates
|
||||
|
||||
## Purpose
|
||||
|
||||
Enforce standardized test scripts, architecture boundaries, and blocking CI jobs to maintain code quality across the project (SPEC §13.6, §13.9, §14.1–14.2).
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: Standardized Composer test scripts exist
|
||||
|
||||
The system SHALL expose Composer scripts equivalent to `test:unit`, `test:feature`, `test:browser`, `test`, and `quality` with the composition defined in SPEC §13.9.
|
||||
|
||||
#### Scenario: Developer runs full quality gate locally
|
||||
|
||||
- **WHEN** a developer runs `composer quality`
|
||||
- **THEN** the command executes static analysis, audits, and the applicable test suites
|
||||
|
||||
### Requirement: Architecture tests enforce domain boundaries
|
||||
|
||||
The system SHALL include Pest architecture tests that verify `App\Domain` uses strict types and does not depend on `App\Filament` or `App\Livewire`.
|
||||
|
||||
#### Scenario: Domain layer violates boundary
|
||||
|
||||
- **WHEN** code in `App\Domain` imports from `App\Filament` or `App\Livewire`
|
||||
- **THEN** the architecture test suite MUST fail
|
||||
|
||||
### Requirement: CI pipeline blocks merge on five jobs
|
||||
|
||||
The system SHALL run a CI pipeline with blocking jobs named `static`, `unit`, `feature`, `browser`, and `container` as defined in SPEC §14.1.
|
||||
|
||||
#### Scenario: Static analysis fails on pull request
|
||||
|
||||
- **WHEN** a pull request introduces a Pint, PHPStan/Larastan, or Composer audit failure
|
||||
- **THEN** the `static` job MUST fail and block merge
|
||||
|
||||
#### Scenario: Feature tests use PostgreSQL
|
||||
|
||||
- **WHEN** the `feature` CI job runs integration tests
|
||||
- **THEN** the job MUST use PostgreSQL and MUST NOT substitute SQLite
|
||||
|
||||
### Requirement: Browser tests run against FrankenPHP-served application
|
||||
|
||||
The system SHALL execute browser tests using Pest Browser/Playwright against an application served by FrankenPHP in CI.
|
||||
|
||||
#### Scenario: Browser job validates served application
|
||||
|
||||
- **WHEN** the `browser` CI job runs
|
||||
- **THEN** tests execute against the built application artifact or equivalent production-like image
|
||||
Reference in New Issue
Block a user