CPP Lens v1.0.0 is live at criticalpathpartners.ca/viewer/. Drop an XER into the page, get 29 sections of schedule diagnostics back in milliseconds, and click Run Deep Forensic to hand the analysis off to the CPP engine without your activity names ever leaving your browser.
This post is the launch note. It explains what Lens does, what it is honest about, and how it fits next to the forensic deliverables we already ship.
criticalpathpartners.ca/viewer/ — the entire viewer is a single 110 KB HTML file. Pure vanilla DOM, no framework, no CDN call. Drop one XER on the left to populate the 29 sections. Drop a second XER on the right to enable the Compare group.
1. What it actually does
Lens reads a Primavera P6 XER file in your browser and renders it across six sidebar groups. Twenty-nine sections in total — a deep tour of one schedule, then a comparison surface for two.
Overview
Schedule
Visual
Compare and Period
CPP Forensic (the moat)
Tools
2. The Deep Forensic handoff — privacy you can audit
The Deep Forensic button on the CPP Forensic tab hands the analysis off to the CPP engine. The engine is the same cpp-forensic-mcp service that drives every Critical Path Partners deliverable; it is hosted at mcp.criticalpathpartners.ca and reachable today through the new /lens/run endpoint. Five forensic methods are exposed:
- Windows analysis (MIP 3.3) — contemporaneous-period attribution to owner, contractor, or concurrent causes.
- Time impact analysis (MIP 3.7) — prospective fragnet insertion against a baseline.
- Collapsed as-built (MIP 3.8) — remove excusable events from the as-built to surface a but-for completion date.
- Claim workbench — mixed-evidence ledger, chain-of-custody diff, trust scoring, slip-to-evidence linkage.
- Schedule risk analysis — Monte Carlo P50/P80 with sensitivity ranks.
Anonymization is on by default. Before any bytes leave the tab, Lens strips activity names, WBS names, task memos, UDF text, and activity-code names — replacing them with stable opaque tokens (ACT_0001, WBS_0001, …). The map that lets you restore those names stays in the browser. Only its SHA-256 hash travels with the request, so the result you get back can be receipt-validated against the model you uploaded without the engine ever having seen the original strings.
Five deep-forensic runs per IP per day, fifty polls per IP per day. This is enough for a real evaluation pass on a schedule, and not enough to use as someone's CPM engine. If you have a job that needs more — that is what an engagement is for.
3. What Lens does not pretend to be
Lens is not a forensic opinion. It is a viewer, a fast triage surface, and a privacy-preserving handoff to the engine that does produce forensic opinions. The Deep Forensic result HTML carries a Lens-attribution footer for that reason — the artifact is a CPP engine output, not a CPP analyst opinion.
Two limitations to call out:
- MPP files are not yet supported. v0.1 of the facade ships XER-only ingest. MPP-to-XER conversion lands in v0.2.
- The Float Burndown panel in the forensic dashboard returns a "panel unavailable" notice today — the Python port of the burndown engine is pending; the JavaScript engine at
cpm-engine.jssection M is the canonical implementation. The rest of the forensic analysis is intact.
Both are scoped on the v0.2 list. The launch ships honest about them rather than papering over.
4. Built on the same open stack
Lens is built on two MIT-licensed libraries we already ship:
@criticalpathpartners/lens-parser— the in-browser XER parser, byte-identical parity with the canonical Python parser. 248 tests.cpp-cpm-engine— the forensic CPM engine that backs the Deep Forensic facade. We open-sourced it earlier this month. 878 tests, Sigstore-signed CI, reproducible bit-identical across npm, GitHub, the MCP registry, and the hosted MCP.
The viewer itself — cpp-lens-viewer — will be published after v1.1 stabilizes the Deep Forensic wiring in the wild.
5. How to evaluate this honestly
The fastest way is to run your own schedule through it. Drop the XER on the page and skim the 29 sections. If you do not get an answer to the question you brought, that is a result we want to hear about. The "How Lens compares" section in the Overview group lays out, in plain language, where Lens is on par with the wider viewer landscape and where it is deliberately different.
If you want a deeper analyst pass — an expert reading the same schedule and turning it into a defendable opinion — that is the engagement on the other end of the Talk to CPP button.
Open Lens on your own XER
One page. One file. Drop a schedule and inspect it. No signup, no install.
criticalpathpartners.ca/viewer/ →