Last reviewed: 2026-07-22. Base branch: main.
This file is a plain-language map of the project as it exists on main. It does not replace the README, roadmap, audit docs, or source comments. It points to them so a reviewer can see the whole shape without reading every file first.
Outcome Receipts creates grounded reports from service data. It connects narrative claims, charts, definitions, comparisons, and provenance so readers can trace where each number came from.
Package metadata checked in this pass:
- Python package
outcome-receiptsfor Python>=3.12.
- Nonprofits writing grant, board, or impact reports from service CSVs.
- Funders and reviewers who want numbers tied back to definitions and source data.
- Maintainers building no-model reporting workflows with verifiable outputs.
- A Python library and CLI for report config, drafting, charts, comparisons, provenance, trace, and verification.
- A digest-pinned, non-root container for the same offline CLI.
- Examples for board, grant, and housing reports.
- Docs for roadmap, user research, decisions, audits, and I18N.
- Evaluation reports and tests for definitions, grounding, traces, reports, and verification.
- Config-driven receipts that can be checked after generation.
- Six bounded evidence workflows for restatement, migration, requirement change, contract milestones, partner rollup, and equity review.
- Published
1.0contracts for report specs, receipts manifests, and workflow artifacts.
- src/outcome_receipts/ contains the deterministic metric engine (
engine.py), the receipt and spec models (models.py), the fail-closed grounding gate (grounding.py), config loading, the template drafter, charts, period comparison, provenance, the trace view, report export, the hash-chained export ledger (ledger.py), the spec scaffolder, report and workflow verification (verify.py,workflows.py), the eval harness, and the CLI. - examples/ contains small report inputs.
docs/adr/is the canonical decision log;docs/decisions/preserves the pre-migration grounding, templates, comparison, and trace choices.- eval/ contains report material.
- tests/ checks the report and verification behavior.
Observed source and operations surfaces:
Makefileeval/pyproject.tomlsrc/
GitHub workflow files checked:
.github/workflows/ci.yml.github/workflows/release.yml
- Every number in a report must trace to a receipt (the exact query, row count, and a hash of the data slice). The grounding gate is fail-closed: a number without a receipt blocks the export instead of passing through.
- No number comes from a model. The deterministic engine computes every figure; the optional drafting seam (v0.3, off by default) only writes prose around already-receipted figures.
- Verification is part of the output contract:
receipts verifyre-derives every figure from the spec and cited data, whilereceipts verify-workflowvalidates workflow versions, relationships, digests, aggregate-only fields, and receipt-composed lineage. Each export appends to a hash-chained ledger so the reporting history is tamper-evident. - A derived workflow value is labeled
receipt_composed; it cannot be mistaken for a row-backed receipt. Rollups verify every partner bundle and reject suppressed inputs.
- It does not decide whether a program worked.
- It cannot fix bad source data or missing definitions.
- Human sign-off is still needed before sending a report to funders or a board.
The repository inventory is enforced by scripts/check_conformance.py, schema
tests, generated-artifact drift checks, and source hygiene checks. Vendored
provider licenses, dependency folders, and generated caches are excluded.
Primary docs checked:
CHANGELOG.mdCITATION.cffCLAUDE.mdCODE_OF_CONDUCT.mdCONTRIBUTING.mdLICENSENOTICEREADME.mdSECURITY.mddocs/I18N.mddocs/RESEARCH-ROADMAP.mddocs/RESPONSIBLE-TECH-AUDITS.mddocs/ROADMAP.mddocs/THREAT-MODEL.mddocs/USER-RESEARCH.mddocs/decisions/0000-record-architecture-decisions.mddocs/decisions/0001-engine-receipts-grounding.mddocs/decisions/0002-templates-charts-comparison.mddocs/decisions/0003-definitions-provenance-trace-verify.mddocs/decisions/0004-hash-chained-export-ledger.mdeval/report.md
Representative test files checked:
tests/test_charts.pytests/test_comparison.pytests/test_config_sections.pytests/test_data_checks.pytests/test_definition.pytests/test_draft_and_config.pytests/test_engine.pytests/test_evaluate.pytests/test_grounded_sections.pytests/test_grounding_gate.pytests/test_grounding_locale.pytests/test_kind.pytests/test_ledger.pytests/test_provenance.pytests/test_report_sections.pytests/test_scaffold.pytests/test_trace.pytests/test_verify.py
Validation is the complete make verify gate: lint, strict typing, tests and
coverage, documentation/source hygiene, localization, security scans,
accessibility, generated cards and eval, compatibility fixtures, and locked-down
container verification.