feat(initializer): scaffold local calculation report projects

Merged
VI
25d ago
+2069-7

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.