Reuse and recovery practice
Quarry Reporting runs the same preparation on another extract. A reusable workflow still needs a defined source schema and output meaning. Packaging a rule in a macro doesn't make a renamed field or a changed type disappear. Inspect the current input when a refresh fails, then repair the named contract deliberately.
The hands-on tasks reuse the local macro wrapper, numeric Interface control and embedded parameter table. The decision tasks cover desktop behavior that the basic simulator only introduces. Keep those boundaries in mind: an Interface value in a table isn't a complete analytic application. Finish each task with an inspectable stream, and use the requested field names and types so another report can consume it without guessing.
input: {"source":"main"}
macro: {"workflow":{"name":"Trim notes","nodes":[{"id":"input","type":"input","x":70,"y":90,"config":{"source":"input"}},{"id":"tool1","type":"formula","x":230,"y":90,"config":{"field":"Note","expression":"Trim([Note])","type":"V_WString"}}],"edges":[{"from":"input","output":"O","to":"tool1","input":"I"}],"output":{"node":"tool1","anchor":"O"}}}
Worked example: A macro receives the incoming table under its input contract. Its nested workflow must transform that stream rather than a hardcoded sample file.