51 lines
3.2 KiB
Markdown
51 lines
3.2 KiB
Markdown
|
|
# examples/golden/
|
||
|
|
|
||
|
|
Two **distinct** families of golden fixtures live here. Do not conflate them.
|
||
|
|
|
||
|
|
| Family | Location | Maps | Consumed by | Purpose |
|
||
|
|
|--------|----------|------|-------------|---------|
|
||
|
|
| **Schema-shape fixtures** | `valid_report.json`, `invalid_report.json` | (a hand-authored report) → accept / reject | `scripts/validate_report.py` | Pin the frozen machine-report schema contract. |
|
||
|
|
| **Classifier goldens** | `classifier/<n>-<name>/` | input doc-tree (`input/`) → expected classification (`expected.json`) | hermetic `tests/test_classifier_golden.py` + a live model-regression harness | Layer-2 reversion protection for the *classifier* — pin which subtype + op-kind + tier a given doc-tree should yield. |
|
||
|
|
|
||
|
|
Both families are reversion-protection artifacts; changing either is **human-gated**
|
||
|
|
per the META-RULE in `invariants.md`.
|
||
|
|
|
||
|
|
## Schema-shape fixtures
|
||
|
|
|
||
|
|
Hand-authored machine-report JSON files used to verify the schema-validator
|
||
|
|
script (`scripts/validate_report.py`).
|
||
|
|
|
||
|
|
## Contents
|
||
|
|
|
||
|
|
| File | Purpose | Expected validator result |
|
||
|
|
|------|---------|--------------------------|
|
||
|
|
| `valid_report.json` | Well-formed machine report exercising a realistic spread of entry types: deterministic `delete-range` (confirm), deterministic `move-to-archive` (auto), deterministic `insert-frontmatter` (auto, no anchor — exercises the no-anchor path), and a generative distillation entry (confirm). | Exit 0 (accepted) |
|
||
|
|
| `invalid_report.json` | Malformed report with a safety-critical invariant #10 violation: a `delete-range` entry (destructive, irreversible) that records `safety_tier: "auto"` when the derivation yields `"confirm"`. All other fields are otherwise valid so the validator reports only this specific violation. | Exit 1 (rejected), one violation on `entries[0].safety_tier` |
|
||
|
|
|
||
|
|
## Invariants exercised
|
||
|
|
|
||
|
|
- **Invariant #10** (`safety_tier` derivation): `invalid_report.json` is the
|
||
|
|
canonical fixture for this invariant — it is structurally sound except for the
|
||
|
|
safety-tier mismatch.
|
||
|
|
- **Invariant #11** (`op_type`↔`exact_edit` biconditional): both fixtures
|
||
|
|
include deterministic entries with `exact_edit` and a generative entry without
|
||
|
|
one, exercising both directions of the biconditional.
|
||
|
|
|
||
|
|
## Classifier goldens (`classifier/`)
|
||
|
|
|
||
|
|
Input doc-tree → expected classification. See `classifier/README.md` for the full
|
||
|
|
case table, the two harnesses (hermetic unit + live model-regression), and the
|
||
|
|
regeneration recipe. Five cases, each pinning one taxonomy edge to a **distinct**
|
||
|
|
`exact_edit.kind` (plus one generative case) so the suite covers the kind table +
|
||
|
|
tier derivation:
|
||
|
|
|
||
|
|
| Dir | class / subtype | kind | tier | scanner signal |
|
||
|
|
|-----|-----------------|------|------|----------------|
|
||
|
|
| `1-orphaned` | stale / orphaned | `delete-range` | confirm | `broken_reference` |
|
||
|
|
| `2-superseded` | stale / superseded | `move-to-archive` | auto | `stale_name_location` |
|
||
|
|
| `3-completed-in-place` | stale / completed-in-place | `insert-frontmatter` | auto | `archive_to_live_ratio` |
|
||
|
|
| `4-duplicated` | stale / duplicated | `dedupe` | auto | `stale_name_location` (no dedicated dup signal — see case notes) |
|
||
|
|
| `5-distill` | bloat / distill | (none, generative) | confirm | `archive_to_live_ratio` |
|
||
|
|
|
||
|
|
Enforced hermetically by `tests/test_classifier_golden.py` (no model, no network).
|