skills/hypogenic/references/evaluation.md
All bundled operations in this reference are deterministic and model-free. They do not establish scientific truth.
The pinned upstream serializer writes a JSON object whose keys are hypothesis text and whose values contain:
hypothesis: same text as the object key;acc: finite number in [0, 1];reward: finite ranking value;num_visits: non-negative integer;correct_examples: [row_index, label] pairs;num_select in some literature/union outputs.Inspect without echoing text:
python3 scripts/inspect_outputs.py hypotheses \
--input outputs/hypotheses.json \
--root .
The report includes file SHA-256, bank size, normalized duplicate counts, length/statistic ranges, and a bounded sample of hypothesis SHA-256 values. Candidate strings are never printed or interpreted.
Stored acc and reward are algorithm state from the generation/update
workflow. They are not an independently reproduced evaluation and should not
be described as p-values, confidence intervals, causal effects, or scientific
validation.
The upstream inference CLI logs metrics but does not define a durable prediction artifact. This skill therefore uses a small local interchange schema:
{
"schema_version": "1.0",
"dataset_manifest_sha256": "<64 lowercase hex>",
"hypothesis_bank_sha256": "<64 lowercase hex>",
"split": "test",
"records": [
{
"id": "stable-nonsecret-id",
"label": "class-a",
"prediction": "class-a"
}
]
}
prediction may be null for an abstention or extraction failure. IDs must be
unique. Do not store prompts, chain-of-thought, provider responses, credentials,
or raw sensitive features in this file. Replace the placeholder hashes in
assets/result.example.json with hashes of the exact reviewed artifacts.
Inspect structure:
python3 scripts/inspect_outputs.py results \
--input results/test_predictions.json \
--root .
The report redacts IDs, labels, and predictions; category values are represented by short SHA-256 fingerprints.
Freeze a plan before looking at test metrics:
python3 scripts/evaluate_local.py plan \
--config reviewed_run_config.json \
--manifest dataset_manifest.json \
--root .
The plan records:
It does not read dataset rows or invoke a model.
python3 scripts/evaluate_local.py report \
--results results/test_predictions.json \
--root . \
--expected-split test
Implemented metrics:
coverage: non-null predictions divided by all records;accuracy_all_records: exact matches divided by all records; null predictions
count as incorrect;accuracy_covered_records: exact matches among non-null predictions;macro_f1_all_records: unweighted mean of per-label F1 over the union of
observed true and non-null predicted labels;<missing> prediction column.All arithmetic uses the supplied saved strings exactly. There is no label normalization beyond schema validation. A custom label extractor must be frozen before test evaluation and its behavior documented.
Report at minimum:
hypogenic version, source commit, and artifact hash;The local tool does not calculate confidence intervals or significance tests. Choose those methods from a prespecified design that respects dependence, repeated seeds, multiple comparisons, class imbalance, and the data-generating process.
Predictive benchmark performance can show that a textual heuristic was useful for a declared classification setup. It does not by itself establish:
Validate promising candidates using independent data, domain-expert review, appropriate controls, alternative explanations, sensitivity analyses, and, where warranted, prospective or experimental tests.