# GEARM 0.1 Regression Suite — GEARM-A14

GEARM-A14 establishes a release-facing regression baseline for the GEARM 0.1 machine-artifact stack created by GEARM-A1 through GEARM-A13.

The purpose of A14 is **change detection**, not semantic approval. A regression failure means that the current artifact stack no longer matches the governed 0.1 baseline or no longer produces the established A12/A13 machine outcomes. It does not decide whether that change is desirable. Intentional changes require explicit review and a governed replacement of the baseline.

## Artifacts

- `baseline.json` — canonical GEARM 0.1 regression snapshot.
- `run_regression.py` — deterministic fail-closed regression runner.
- `regression-report.json` — packaged result from the established A14 baseline.
- `requirements-regression.txt` — runtime dependency bounds.

## What is locked

A14 detects drift in:

- A1 concept identities, counts and canonical registry content;
- A2 relationship identities, counts and canonical registry content;
- A3 invariant identities, statements, requirement/validation classifications and machine-constraint coverage status;
- A4 RDF graph triple count and isomorphic graph fingerprint;
- A5 JSON-LD context content and the absence of a default `@vocab`;
- A6 SHACL graph fingerprint, Shape count and 180-invariant coverage distribution;
- A7 and A8 JSON Schema identities, definitions and canonical content;
- all A9 JSON/JSON-LD example payloads;
- the A10/A11 46-testcase inventory, expected outcomes and fixture payloads;
- A12 and A13 executable implementation fingerprints;
- the normative M9 invariant table;
- selected raw machine-artifact file fingerprints.

A14 then runs A13 live. A13 in turn runs the full A12 testcase suite. The release-facing baseline therefore requires both:

```text
A12  46 / 46 expectation-matched
A13  51 / 51 reconciliation checks PASS
```

## Run

From `static/specs/gearm/0.1/`:

```bash
python regression/run_regression.py --suite
```

Write a JSON report:

```bash
python regression/run_regression.py \
  --suite \
  --json-report regression/regression-report.json
```

Quiet CI-style execution:

```bash
python regression/run_regression.py \
  --suite \
  --quiet \
  --json-report regression/regression-report.json
```

## Exit status

- `0` — regression baseline and live A12/A13 outcomes match.
- `2` — dependency, package, parse or runtime problem.
- `5` — one or more regression checks differ from the governed baseline.

## Intentional change and re-baselining

The runner **does not provide an automatic in-place refresh** of `baseline.json`.

A candidate snapshot can be emitted for review:

```bash
python regression/run_regression.py \
  --emit-candidate-baseline /tmp/gearm-0.1-baseline.candidate.json
```

This command does not modify the canonical baseline. A candidate should be compared with the current baseline, reconciled with the normative GEARM change, and only then adopted through the normal governed specification process.

This policy prevents an unintended regression from being hidden by simply re-running the tool with an update flag.

## Conformance boundary

A14 protects machine-artifact stability and repeatability. It does not replace GEARM semantic assessment and does not establish Product, architectural, regulatory, analytical-quality, or complete GEARM conformance.

```text
A14 PASS
    = established machine baseline preserved

A14 PASS
    != complete GEARM conformance
```
