Amends 0011: the reporting and read-model
capabilities here are built in the platform. The 0011 row changes are in the final pass (ADR
0227).
Amended by 0260: a consumer’s
read model of another service’s data is a
@Projection fed by that service’s integration events.Context
Modules needed reports, data imports and exports, and read models for history. The owner’s answers P7, AN2, DX-1 and DX-2 (mem L821–824, 2026-10-20) fix these. The analytics service and the tenant dashboard builder are OS items, not Stackra packages.Decision
- Reports and read models (P7). A
@Reportquery is compiled to SQL. Exports run as queue jobs that write a file. A@Projectionread model supports anasOfquery. - Report widgets (AN2). A module’s
@Reportmetrics appear as panel widgets (0164). - Imports (DX-1).
@Importablereads CSV, XLSX and JSON. It suggests a column mapping with AI, supports a dry run, upserts by key, resumes after failure, and rolls back a batch as a whole. - Exports (DX-2). List exports respect the caller’s permissions. Exports can be scheduled.
- The analytics service and the tenant dashboard builder are not Stackra packages.
Consequences
- An export of data is a queue job, so a large export does not block a request.
- An import that fails halfway can be retried without duplicating rows, because it upserts by key.
Enforcement
planned — the import dry run and batch rollback are covered by the importable conformance tests, and export jobs check permissions per row.Alternatives
- Reports as ad-hoc SQL in actions: rejected by 0160.
Supersedes and sources
Supersedes: none. Amends: 0011 (final pass for the row changes). Sources: owner answers P7 (intent-map item, accepted), AN2 (stackra-decisions-2026-10-19.md L821), DX-1 (L823), DX-2 (L824), 2026-10-20.