You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: end-to-end report rendering - data/layout/Page-IR pipeline with HTML/SVG/PDF/PNG backends, chart & cross-tab drawing, formula evaluator, live-DB and saved-data sources, byte-faithful .rpt writer, and a render-parity test corpus
|`rpt`| Pure I/O. Decodes the **stored** facts from the bytes: container → records → typed model. |
25
-
|`rpt-engine`|**Derived** analytics computed on top of the model (e.g. field use counts, formula analysis). |
26
-
|`rpt-to-xml`| Exports a report to a structured XML document. |
27
-
|`rpt-cli`| The `rpt` inspection CLI. |
25
+
|`crystal-formula`| The standalone Crystal/Basic formula-language engine (no `.rpt` coupling). |
26
+
|`rpt-cli`| The `rpt` inspection CLI; its `xml-dump` subcommand exports a report to a structured XML document and owns the **derived** analytics (`export::analysis`: field use counts, summaries, formula analysis). |
28
27
29
28
**The boundary is load-bearing.** If a value is read directly from the file, decode it in `rpt`. If a value is _computed
30
-
or inferred_ (not present in the bytes), it belongs in `rpt-engine` — not as a stored field on an `rpt` model struct.
29
+
or inferred_ (not present in the bytes), it belongs in the derive layer (`rpt-cli`'s `export::analysis`, the XML exporter) — not as a stored field on an `rpt` model struct.
31
30
Keeping I/O separate from derivation is the core design rule.
32
31
33
32
## The `.rpt` format
@@ -43,21 +42,21 @@ Keeping I/O separate from derivation is the core design rule.
43
42
44
43
## Tests and XML baselines
45
44
46
-
The regression suite in `crates/rpt-to-xml/tests/baseline.rs` exports a set of public sample reports (under
45
+
The regression suite in `crates/rpt-cli/tests/baseline.rs` exports a set of public sample reports (under
47
46
`tests/fixtures/`) to XML and compares the output against committed baselines. To keep results deterministic across
48
47
machines, the exporter runs inside a [Bubblewrap](https://github.com/containers/bubblewrap) sandbox with the report
49
48
bind-mounted at a fixed path, so path-derived attributes are identical everywhere.
50
49
51
50
Run it (requires `bwrap` on Linux):
52
51
53
52
```sh
54
-
cargo test -p rpt-to-xml --test baseline
53
+
cargo test -p rpt-cli --test baseline
55
54
```
56
55
57
56
When a change _intentionally_ alters the XML output, regenerate the baselines and review the diff:
58
57
59
58
```sh
60
-
RPT_BLESS=1 cargo test -p rpt-to-xml --test baseline
59
+
RPT_BLESS=1 cargo test -p rpt-cli --test baseline
61
60
```
62
61
63
62
Only commit baseline changes you can explain. A mismatch prints a git-style unified diff showing exactly which lines
0 commit comments