Two weeks ago we shipped cpp-cpm-engine as an MIT-licensed public repository. Today we shipped v2.9.13 to npm, to the Model Context Protocol registry, and bit-identical across the four canonical CPP deployment surfaces. The engine that drives every Critical Path Partners forensic deliverable is now reproducible on your own machine in under a minute.
This is not a marketing post. It is a methodology post. Under FRE 702 as amended in December 2023, and the proposed FRE 707 currently moving through the rules committee, an expert's reasoning and methodology have to be reliable to a preponderance of the evidence. Closed-engine forensic-scheduling tools cannot deliver that. The vendors in this space — SmartPM, Nodes & Links, ALICE, Acumen Fuse — treat the CPM math as proprietary. None of them can hand an opposing expert a one-command reproduction path. We can.
From any terminal with Node 18+:
npm install cpp-cpm-engine
Or, to reproduce the full verification suite:
git clone https://github.com/danafitkowski/cpp-cpm-engine && cd cpp-cpm-engine && npm install && npm run test:all
Measured at five seconds on a 2023-era laptop (Win11, Node 22, NVMe SSD). 744 unit tests pass. 32 fixtures times 346 cross-validation checks pass. DCMA-14 and AACE 29R-03 compliance checks pass.
1. The four public deployment surfaces, locked to one SHA-256
One engine. Four canonical install paths. Bit-identical hash across all four.
npm install cpp-cpm-engine · npmjs.com/package/cpp-cpm-engine. Public registry. Globally mirrored. Versions immutable once published.v2.9.13 matches today's npm publish, byte for byte.https://mcp.criticalpathpartners.ca/cpm-engine.js. The same file served live by the CPP MCP server. Anyone can curl it and hash it.io.github.danafitkowski/cpp-cpm-engine at registry.modelcontextprotocol.io points to the same canonical repository. AI-driven forensic-analysis workflows discover the server there.2. What the test suite actually proves
744 unit tests, 32 fixtures times 346 cross-validation checks, DCMA-14 and AACE 29R-03 compliance gates.
cpm.py) that drives batch claim-preparation pipelines. They are kept bit-identical via a 32-fixture, 346-check cross-validation harness that runs in CI on every commit. JS and Python disagree on a single Early Start by even one minute and the build fails. This is how an opposing expert can be confident the dashboard they are reviewing and the DOCX they are reading were computed from the same primitives.3. Sigstore-signed CI runs on a public transparency log
The build is signed by GitHub Actions OIDC and logged to Rekor. CPP cannot edit either.
cosign protocol and the signatures are appended to the Rekor public transparency log.4. AACE-canonical, Daubert-disclosed
Every method-id matches AACE. The Daubert disclosure is built into the engine.
method_id on every output. The label set is restricted to AACE-canonical strings. There is no "MIP 3.7 windows" mislabel (which circulates in some commercial tooling); windows analysis is MIP 3.3 per AACE 29R-03, and the engine refuses to emit any other label for that method. Same discipline for MIP 3.6, MIP 3.7, MIP 3.8.buildDaubertDisclosure(), which produces a four-prong methodology statement aligned with FRE 702 (testability, peer review, error rate, general acceptance). The output names the engine version, the method-id, the topology hash of the input data, the calendar version, and a link to the canonical methodology document. An expert disclosure that uses this output can be cross-examined against the underlying engine code, line for line.verifyReport() recomputes the topology hash from a disclosed report and confirms engine_version lock-step. A CLI (cli_verify.py) lets opposing experts run the check without installing the entire suite. The CPP MCP server exposes a public /verify endpoint for the same purpose.5. The math is sixty years old. The discipline is new.
None of this should be commercial confidential in 2026.
6. What CPP is asking the industry to do
If a forensic engine cannot be reproduced by the opposing expert, it should not be admissible.
How to participate
The minimal path:
npm install cpp-cpm-engine
The full reproduction path:
git clone https://github.com/danafitkowski/cpp-cpm-engine
cd cpp-cpm-engine
npm install
npm run test:all
That is it. No license server. No SaaS portal. No phone call with a sales engineer. MIT license. Fork it. Audit it. File an issue if you find a bug. If it stands up to peer review, it stands up to court.
The brand-discipline rules — no truncation in user-facing output, AACE-canonical labels, Daubert disclosure built in — are documented in CONTRIBUTING.md. Pull requests that violate them fail CI.
The companion repositories shipped at the same time:
cpp-xer-parser— canonical Primavera P6 XER parser and generator with MIP 3.4 half-step support, MIT-licensed.cpp-critical-path-validator— critical path validation, DCMA-14 assessment, and logic health review for P6 schedules, MIT-licensed.
The whole world can watch the verification runs at github.com/danafitkowski/cpp-cpm-engine/actions/workflows/verify.yml. We would rather correct the record than defend it.