# Data Model: Full Suite Failure Classification & CI Lane Baseline

Spec `295` introduces no application entity, table, model, enum, migration, or persisted runtime artifact. Its only modeled data is spec-local workflow truth for implementation: a bounded failure-classification artifact and one final CI readiness decision.

## Spec-Local Artifact: `failure-classification.md`

`failure-classification.md` records the classification state for implementation. It is not product truth and must not be read by the application.

### Failure Group

| Field | Meaning |
|---|---|
| `Group` | One failing test file, assertion cluster, wrapper failure, report failure, artifact failure, budget breach, or environment failure sharing the same cause and owner |
| `Observed Command` | Exact command that produced the signal |
| `Seam` | One pinned CI/suite seam |
| `Category` | One pinned failure-classification category |
| `Observed Failure` | Concise description of the failure evidence |
| `Candidate Owner` | Existing script, support class, guard test, product area, or follow-up package likely responsible |
| `Fix In 295?` | `yes`, `no`, or `only-if-ci-contract-proven` |
| `Follow-up` | Follow-up spec/lane decision, or `none` when resolved |
| `Status` | `pending`, `classified`, `fixed`, `resolved`, `follow-up-required`, or `environment-blocked` |

## Pinned Categories

| Category | Meaning |
|---|---|
| `ci-signal-restored` | Full suite or lane split is green and usable as a CI signal |
| `ci-wrapper-or-manifest-regression` | Wrapper, composer script, workflow binding, or lane manifest no longer invokes the intended lane |
| `artifact-publication-regression` | Required report/JUnit/budget/profile/trend artifacts are not generated or staged as contracted |
| `budget-or-trend-baseline-drift` | Tests pass or mostly pass, but runtime budget/trend baseline output is stale or no longer interpretable |
| `product-runtime-or-test-regression` | A real app/test behavior failure outside the CI wrapper/report/artifact contract |
| `browser-lane-regression` | Existing browser lane or smoke failure that needs browser-specific follow-up unless it is a CI artifact issue |
| `flaky-or-environment` | Nondeterministic, local container, browser runtime, database, queue, or runner issue |
| `follow-up-spec-required` | Confirmed out-of-scope failure needing a separate spec/lane owner |
| `resolved-or-not-needed` | Initially suspected group that no longer needs work after rerun or adjacent classification |

## Pinned CI / Suite Seams

| Seam | Meaning |
|---|---|
| `raw-full-suite` | Direct `sail artisan test --compact` complete suite signal |
| `fast-feedback-lane` | Existing fast-feedback wrapper and manifest selection |
| `confidence-lane` | Existing confidence wrapper and manifest selection |
| `heavy-governance-lane` | Existing heavy-governance wrapper and manifest selection |
| `browser-lane` | Existing browser wrapper and smoke selection |
| `profiling-or-junit-support` | Support lanes used for profiling or durable machine-readable output |
| `lane-reporting` | `scripts/platform-test-report` and `TestLaneReport` output |
| `artifact-publication` | `scripts/platform-test-artifacts` and lane artifact contracts |
| `budget-trend-baseline` | `TestLaneBudget`, lane thresholds, and trend-history classification |
| `legacy-cutover-regression-guard` | Failures that appear to challenge the retired route/panel baseline from Specs `287` to `293` |
| `provider-verification-regression-guard` | Failures that appear to challenge Spec `294` provider/verification semantics |

## Final Readiness Decision

| Decision | Meaning |
|---|---|
| `restored-ci-signal` | Full suite and required lanes are green or have only non-blocking documented budget notes |
| `classified-follow-up-required` | CI is not fully green, but every remaining red group is classified with follow-up ownership |
| `blocked-by-environment` | Classification cannot complete because local/runner environment failures prevent trustworthy signal collection |

## Invariants

- Every failing group must use exactly one pinned category and one pinned seam.
- `ci-signal-restored` may be used only when the relevant command output is green.
- Product/runtime failures cannot be fixed in `295` unless the classification proves a direct CI/lane contract defect.
- Retired `/admin/t/...` or TenantPanelProvider behavior must never be restored as a remedy.
- The same category and seam names must appear in `spec.md`, `plan.md`, `tasks.md`, `quickstart.md`, `checklists/requirements.md`, and `failure-classification.md`.
