LifeCard validator audit

Requires mateprobe==0.1.0a4. These APIs are not available in a2.

examples/lifecard_validator_audit.py is an opt-in, read-only demonstration of the validator audit API against a local LifeCard checkout. It imports LifeCard's existing Phase 4 fixture helpers at runtime; no LifeCard card, state, or private fixture is copied into this repository.

Run it with the Python environment that has LifeCard and its dependencies installed:

PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=src python examples/lifecard_validator_audit.py \
  --lifecard-root /path/to/Lifecard \
  --output /tmp/lifecard-audit.json

The JSON output includes the audit report, an SHA-256 manifest for the LifeCard runtime and fixture source files, and the stable finding attribution used for violation IDs (lifecard.CardValidatorPipeline:<code>:<path>). The adapter constructs a fresh pipeline, spec, and state for every case and never writes to the LifeCard checkout.

The generated JSON includes the local lifecard_root path and validator evidence. Keep reports from a private checkout local; remove private paths and review finding messages before sharing a sanitized reproduction. These generated reports are not included in this repository.

The cases are authored targeted stress cases. They demonstrate three useful boundaries: a short label restatement is reported; padding the repeated label to at least 90 characters bypasses the current anti-bureaucracy guard; and a whitespace-only control remains accepted. An empty-effects case exercises the meaningful effect finding. The padded case is separately inventoried as a broader, length-independent policy challenge, beyond the current guard's declared scope. These labels are policy declarations for this demonstration, not an independent gold set or a claim that the adapter discovered unknown defects.

The 90-character behavior is intentional context for the example: LifeCard's current guard only computes overlap for outcome bodies shorter than 90 characters. The padded survivor does not violate that stated short-text contract; it exposes a gap only against the separate, broader length-independent obligation. The adapter records the observed result and does not change LifeCard.

Ordinary LifeCard pytest tests answer whether individual examples satisfy the validator. This audit adds paired baseline/variant cases, explicit relation and validity labels, stable violation IDs, and aggregate reporting. It does not replace LifeCard's tests or claim a reduction in test code.