# Specification Quality Checklist: Billing & Subscription Truth Layer v1 **Purpose**: Validate specification completeness, boundedness, and readiness before implementation **Created**: 2026-05-04 **Feature**: [spec.md](../spec.md) ## Content Quality - [x] The package stays on one bounded subscription truth follow-through over Specs 247 and 251 instead of inventing a billing engine, invoice layer, or customer portal. - [x] The spec remains product- and behavior-oriented rather than reading like a low-level implementation diff. - [x] The package explicitly names the repo-real anchors it builds on: `WorkspaceEntitlementResolver`, `WorkspaceCommercialLifecycleResolver`, `ViewWorkspace`, `WorkspaceSettings`, onboarding activation, and review-pack generation. - [x] Mandatory repo sections for scope, RBAC, shared-pattern reuse, testing, proportionality, and candidate rationale are completed. ## Requirement Completeness - [x] No `[NEEDS CLARIFICATION]` markers remain. - [x] Requirements are testable and bounded to one current subscription record, one resolver, existing lifecycle gating, one system mutation surface, and one read-only admin summary. - [x] The package makes fallback behavior explicit for workspaces without a subscription record. - [x] The package forbids a second runtime gate and keeps onboarding or review-pack behavior on the existing lifecycle resolver. - [x] Canonical proof commands match across `spec.md`, `plan.md`, `quickstart.md`, and `tasks.md`. ## Candidate Selection Gate - [x] The selected candidate exists in `docs/product/spec-candidates.md` and `docs/product/roadmap.md` as `Billing & Subscription Truth Layer v1`. - [x] Related anchor specs were checked for completion or close-out signals and treated as context only: Specs 247 and 251 are already repo-real and implemented. - [x] The chosen slice is smaller and more bounded than deferred alternatives such as provider sync, invoices, or a customer billing portal. - [x] The selected slice explicitly closes the remaining manual-promotion gap between plan or lifecycle truth and durable subscription truth. ## Feature Readiness - [x] The package justifies a new persisted entity and explains why more workspace-setting keys are insufficient. - [x] The package keeps Filament on Livewire v4, provider registration unchanged in `apps/platform/bootstrap/providers.php`, global search unchanged, and assets unchanged. - [x] The package keeps `/system` as the mutation plane and `/admin` read-only for subscription truth. - [x] The package forbids provider-specific billing semantics, invoices, checkout, and portal scope. ## Test Governance - [x] Planned proof stays bounded to one new `Unit` family plus focused extensions to existing `Feature` suites. - [x] No new heavy-governance or browser family is introduced by default. - [x] Fixture growth remains bounded to one new factory plus existing workspace, onboarding, and review-pack helpers. - [x] The review outcome, workflow outcome, and test-governance outcome are carried into `plan.md` and `tasks.md`. ## Notes - Reviewed against `.specify/memory/constitution.md`, `docs/product/spec-candidates.md`, `docs/product/roadmap.md`, `specs/247-plans-entitlements-billing-readiness/spec.md`, `specs/251-commercial-entitlements-billing-state/spec.md`, current entitlement and lifecycle code under `apps/platform`, and the active 274 prep artifacts on 2026-05-04. - No application implementation was performed while preparing this package. ## Review Outcome - **Outcome class**: `acceptable-special-case` - **Workflow outcome**: `keep` - **Test-governance outcome**: `keep` - **Reason**: The package promotes the remaining commercial manual-promotion gap as one bounded source-of-truth follow-through. It keeps lifecycle as the only runtime gate, adds only one current subscription entity, and stays off provider, invoice, and portal scope. - **Workflow result**: Ready for implementation.