# STRUST v1 evidence-bounded project case study

This package audits what can be supported by the surviving STRUST v1 artifact.
The answer is narrow: the historical PDF contains a ten-row result table, but
the executable COBOL/Java subjects, fixtures, raw outputs, comparator policy,
and environment manifest are not preserved. The package therefore treats
STRUST v1 as a **project case study**, not as validated research or a benchmark.

The source table records eight `Pass` rows and two `Fail` rows. The surrounding
historical prose nevertheless claims 100% accuracy. The reproducible analysis
derives an 8/10 recorded pass rate and exposes that 20-percentage-point internal
contradiction. It does not relabel the rows as independent ground truth and does
not attach confidence intervals or hypothesis tests to a hand-selected,
outcome-known case list.

A second-cycle evidence graph links five claim classes to ten artifact classes.
Under this locally declared graph, 2 of 19 required links survive and one of the
five modeled outcome claim classes, recorded table arithmetic, is fully
auditable. No single missing artifact would complete any blocked modeled claim.

## Evidence chain

- `inputs/historical_strust_v1.pdf` is the pre-reconstruction PDF recovered
  from Git commit `96dba8008ce831118da87b968dc2b48df79eb373`, path
  `public/pdfs/Strust.pdf`, blob `68ae5dc6837114f4f0cb53837826b97bfea87291`.
- `inputs/historical_ledger.csv` is a literal transcription of Table I on page
  7. The historical labels are retained as `intended_class` and
  `recorded_status`; they are not called independent ground truth.
- `study_config.json` records the source SHA-256, claim locators, evidence
  inventory, and publication classification.
- `run_analysis.py` validates the source hash, derives all displayed counts,
  and generates both publication figures.
- `evidence_graph.py` evaluates the locally declared claim-artifact graph,
  declared missing bundles, and one-at-a-time artifact recovery.
- `research.json` binds the question, claims, report, results, code, figures, and
  final PDF by SHA-256. `build_manifest.py` regenerates it after the PDF build.

## Reproduce

From this directory, using the existing Python/matplotlib and LaTeX runtime:

```powershell
python run_analysis.py
python -m unittest discover -s tests -v
latexmk -pdf -interaction=nonstopmode -halt-on-error paper.tex
latexmk -c
python build_manifest.py
python run_analysis.py --check
```

The analysis intentionally has no network step and no package installation
step.

## Outputs

- `results/case_audit.csv`: source rows plus a mechanically derived success
  indicator.
- `results/evidence_inventory.csv`: explicit present/missing artifact controls.
- `results/summary.json`: all headline numbers and provenance fields.
- `results/claim_evidence_edges.csv` and `results/evidence_survival.csv`:
  required links and claim-level artifact coverage.
- `results/artifact_recovery_counterfactual.csv`: one-at-a-time recovery audit.
- `figures/claim_evidence_survival.{pdf,png}`: 2-of-19 survival map.
- `figures/ledger_evidence_audit.{pdf,png}`: case-level outcome strip and
  artifact inventory.
- `paper.pdf`: the concise project case study.
- `research.json`: claim ledger and package checksum inventory.

## Interpretation boundary

The package supports an arithmetic and provenance audit of one historical
document. It does **not** support claims about conversion accuracy, feasibility,
production use, scalability, vendor comparison, statistical significance, or
generalization to COBOL systems. A valid follow-up would publish executable
subjects and raw traces, freeze the comparator before evaluation, use
independently labeled blinded cases, and report `MATCH`, `DIVERGE`, and
`INCONCLUSIVE` separately.
