feat(initializer): scaffold local calculation report projects
Summary
npm create cs-object my-report
create project and install versioned dependencies
private Python environment and Chromium
cd my-report
npm run dev
editable page, verified calculation API and PDF
Adds the public initializer package, agent-neutral project guidance and an installed-project acceptance check. Includes merged #66; based on current main. Generated projects and test artifacts stay outside this repository.
Evidence
-
Before: Starting a local report required manually assembling the CLI, Python environment and startup command.
After: The literal three-command flow passes from packed npm packages and a Python wheel through a temporary local registry. The generated project uses installed versioned dependencies. -
Before: Workspace tests did not establish that a freshly generated project could render and download its report.
After: Browser input edits, an output-only curl response, PDF downloads, retained evidence hashes, restart behavior and the canonical two-panel calculation pass in the generated consumer. The original submission included page-by-page PDF inspection bound to exact file hashes. This main update is verified by automated generated-project consumers. -
Before: Public release dependencies were not qualified together.
After: The archive check qualifies installation without publishing. Public npm/PyPI availability remains a separate release requirement. -
Before: Cubic identified one acceptance file mixing registry, processes, browser scenarios and evidence.
After: Private helpers separate those responsibilities. Workspace tests, lint, typechecks, CI checks and all six isolated projects pass on latest main; the focused generated-project check also passes after the split. Final Cubic inspection led to bounded subprocess buffers with complete disk logs. Its further orchestration-split suggestion is declined because the entry point states the ordered acceptance journey while private helpers own the mechanisms.
Current verification
Merged main to incorporate #66ās concurrency, retention-error, integer-input and UI evidence fixes. On aea0c6c, the local full suite, lint and typecheck pass. The focused installed initializer check passes the three-command flow, browser edits, calculation API, PDF/evidence hashes and restart behavior through a temporary registry. Fresh CI on aea0c6c passes all 706 tests (596 TypeScript/Node and 110 Python), lint, typecheck, all six isolated projects, installed consumers including the generated-project flow, and CodeQL. The refreshed review has no findings.
Merge Danger
Door: two-way
No package publication or deployment is included.
Blast Radius: setup
Requires Node 24, Python 3.11+ and a Chromium installation. The initializer preserves the generated project when setup fails so users can retry.