Sub-issue of #406 (umbrella: showcase workspace completion — the forecastlab control story). Parallel after Foundation (E1 #407).
Purpose
Export bundle MVP (export-only; import/restore is explicitly out of scope for this umbrella): a POST /demo/workspaces/{id}/export endpoint writing artifacts/showcase/<workspace>/ with a versioned manifest JSON (config, run summary, scenario plan snapshots, model-artifact references) and SHA-256 checksums, export validation, and an Export button on the workspace panel. Path handling reuses the LocalFSProvider traversal-prevention pattern with pathlib.Path.resolve() under an allow-listed root.
Sub-tasks
To be decomposed via issue-to-subtasks when this epic is picked up.
Purpose
Export bundle MVP (export-only; import/restore is explicitly out of scope for this umbrella): a
POST /demo/workspaces/{id}/exportendpoint writingartifacts/showcase/<workspace>/with a versioned manifest JSON (config, run summary, scenario plan snapshots, model-artifact references) and SHA-256 checksums, export validation, and an Export button on the workspace panel. Path handling reuses theLocalFSProvidertraversal-prevention pattern withpathlib.Path.resolve()under an allow-listed root.Sub-tasks
To be decomposed via
issue-to-subtaskswhen this epic is picked up.