Problem
Dashboards and exports can show totals without enough lineage to reproduce each figure from provider events, ledger journals, domain records, FX quotes, and valuation rules.
Scope
- Assign immutable lineage IDs to raw events, normalized transactions, journals, projections, snapshots, and report cells.
- Record transformation name/version, input IDs/hashes, execution ID, code revision, and effective policy versions.
- Expose drill-down from report total to constituent records and original evidence without leaking unrelated user data.
- Add deterministic rebuild tooling for a report or single metric.
- Detect orphan inputs, cycles, duplicated contributions, stale projections, and policy-version mismatches.
- Preserve lineage across corrections through supersedes/reverses links.
- Export a machine-readable evidence bundle with a signed manifest.
Acceptance criteria
- Every material report value has a complete acyclic lineage path.
- Rebuild from the manifest reproduces the normalized output.
- Corrections do not erase prior lineage.
- Access control applies at every drill-down layer.
- Missing lineage blocks publication for regulated/financial reports.
Required tests
Multi-source aggregation, reversal and restatement, partial rebuild, deleted/anonymized user data, access isolation, cycle/orphan detection, and signed bundle verification.
Non-goals
Do not build a general-purpose data warehouse; cover ChainMove financial evidence paths.
Problem
Dashboards and exports can show totals without enough lineage to reproduce each figure from provider events, ledger journals, domain records, FX quotes, and valuation rules.
Scope
Acceptance criteria
Required tests
Multi-source aggregation, reversal and restatement, partial rebuild, deleted/anonymized user data, access isolation, cycle/orphan detection, and signed bundle verification.
Non-goals
Do not build a general-purpose data warehouse; cover ChainMove financial evidence paths.