REPRODUCIBLE EVIDENCE

Test the findings.
See the limits.

Known inputs, independently written expectations and actual production-engine output. Every XER fixture is available to download and run yourself.

Suite XER-tests-1.0 · Published 2026-10-06 · Scoring model v1.2
29/29Expected-result matches
20/20Diagnostic codes exercised
4Known-limit cases disclosed
EXPECTED VS ACTUAL

Download. Validate. Compare.

Each list shows the rule, affected-record count and internal task IDs. The resource example below is tested separately.

clean-chain

Connected control

Matches expectation

Four activities, three FS links, no configured exceptions.

Expected
No findings
Actual engine result
No findings

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 100/100
open-logic

Isolated incomplete task

Matches expectation

The added activity has neither a predecessor nor a successor.

Expected
PP-101: 1 [task 5]; PP-102: 1 [task 5]; PP-103: 1 [task 5]
Actual engine result
PP-101: 1 [task 5]; PP-102: 1 [task 5]; PP-103: 1 [task 5]

Boundary: The first start and finish in file order are exempted automatically; they are not verified contractual milestones.

Download test XER ↗ · Calculated score 96/100
negative-float

Negative float

Matches expectation

A110 has -8 hours of total float.

Expected
PP-201: 1 [task 2]
Actual engine result
PP-201: 1 [task 2]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 97/100
excessive-float

Float above 352 hours

Matches expectation

One hour above the fixed 44 × 8-hour threshold.

Expected
PP-202: 1 [task 2]
Actual engine result
PP-202: 1 [task 2]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 99/100
hard-constraint

Mandatory start

Matches expectation

A110 contains the mandatory-start constraint code.

Expected
PP-301: 1 [task 2]
Actual engine result
PP-301: 1 [task 2]

Boundary: A legitimate constraint can still be flagged; the rule does not decide whether it is justified.

Download test XER ↗ · Calculated score 99/100
long-duration

Duration above 352 hours

Matches expectation

A110 original duration exceeds the fixed threshold.

Expected
PP-401: 1 [task 2]
Actual engine result
PP-401: 1 [task 2]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 99/100
zero-duration

Zero-duration task

Matches expectation

An ordinary task has zero original duration; start/finish milestones remain exempt.

Expected
PP-402: 1 [task 2]
Actual engine result
PP-402: 1 [task 2]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 100/100
status-conflict

Complete without actual finish

Matches expectation

A110 is complete but its actual finish is blank.

Expected
PP-501: 1 [task 2]
Actual engine result
PP-501: 1 [task 2]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 98/100
out-of-sequence

Started FS successor

Matches expectation

A120 has started while its FS predecessor is incomplete.

Expected
PP-502: 1 [task 3]
Actual engine result
PP-502: 1 [task 3]

Boundary: A review heuristic, not a P6 retained-logic calculation.

Download test XER ↗ · Calculated score 99/100
lead

Negative lag

Matches expectation

The A110 → A120 relationship has an eight-hour lead.

Expected
PP-601: 1 [task 3]
Actual engine result
PP-601: 1 [task 3]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 98/100
long-lag

Lag above 40 hours

Matches expectation

One hour above the fixed five × eight-hour lag threshold.

Expected
PP-602: 1 [task 3]
Actual engine result
PP-602: 1 [task 3]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 99/100
non-fs

SS relationship

Matches expectation

A start-to-start relationship is surfaced for review.

Expected
PP-603: 1 [task 3]
Actual engine result
PP-603: 1 [task 3]

Boundary: Non-FS does not mean invalid; justified overlap may be appropriate.

Download test XER ↗ · Calculated score 99/100
blank-type

Missing relationship type

Matches expectation

A relationship type is blank.

Expected
PP-606: 1 [task 3]
Actual engine result
PP-606: 1 [task 3]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 98/100
unsupported-type

Unsupported relationship type

Matches expectation

The unsupported type triggers both the non-FS review and invalid-type check.

Expected
PP-603: 1 [task 3]; PP-606: 1 [task 3]
Actual engine result
PP-603: 1 [task 3]; PP-606: 1 [task 3]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 97/100
duplicate-code

Duplicate activity codes

Matches expectation

Two records share A110; both are listed.

Expected
PP-701: 2 [task 2, 3]
Actual engine result
PP-701: 2 [task 2, 3]

Boundary: PP-701 checks activity codes, not duplicate internal task_id values.

Download test XER ↗ · Calculated score 97/100
negative-remaining

Negative remaining duration

Matches expectation

A110 has -1 hour remaining.

Expected
PP-702: 1 [task 2]
Actual engine result
PP-702: 1 [task 2]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 99/100
future-actual

Actual after data date

Matches expectation

Start milestone actual start is later than the stated data date.

Expected
PP-703: 1 [task 1]
Actual engine result
PP-703: 1 [task 1]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 97/100
missing-calendar

Unknown calendar reference

Matches expectation

A110 references a calendar absent from CALENDAR.

Expected
PP-704: 1 [task 2]
Actual engine result
PP-704: 1 [task 2]

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 98/100
threshold-boundary

Exact thresholds do not trigger

Matches expectation

Exactly 352 duration/float hours and 40 lag hours are allowed by strict greater-than comparisons.

Expected
No findings
Actual engine result
No findings

Boundary: Small synthetic fixture; it does not establish field accuracy across all P6 versions.

Download test XER ↗ · Calculated score 100/100
ten-hour-calendar · KNOWN LIMITATION

Known limitation: fixed eight-hour thresholds

Matches expectation

The engine flags 400 hours, although this is 40 ten-hour days.

Expected
PP-401: 1 [task 2]
Actual engine result
PP-401: 1 [task 2]

Boundary: Threshold checks and finding day labels use eight-hour equivalents, not calendar-aware working days. A match here records the limitation; it does not endorse the result.

Download test XER ↗ · Calculated score 99/100
ss-overlap · KNOWN LIMITATION

Known limitation: legitimate SS overlap

Matches expectation

A started successor with an incomplete SS predecessor still triggers PP-502.

Expected
PP-502: 1 [task 3]; PP-603: 1 [task 3]
Actual engine result
PP-502: 1 [task 3]; PP-603: 1 [task 3]

Boundary: PP-502 does not evaluate relationship type or lag. Legitimate overlap can be overflagged.

Download test XER ↗ · Calculated score 98/100
missing-data-date · KNOWN LIMITATION

Known limitation: no data-date test

Matches expectation

No parseable data date means PP-703 cannot test a future actual.

Expected
No findings
Actual engine result
No findings

Boundary: No finding does not confirm date integrity when the comparison date is absent.

Download test XER ↗ · Calculated score 100/100
absent-calendar-field · KNOWN LIMITATION

Known limitation: absent calendar field

Matches expectation

With no clndr_id column in TASK, the calendar-reference rule is skipped.

Expected
No findings
Actual engine result
No findings

Boundary: No PP-704 finding is not proof that calendar data is complete.

Download test XER ↗ · Calculated score 100/100
multiple-projects

Multiple projects rejected

Matches expectation

Prevents combining unrelated project dates and scores.

Expected
Reject file: multiple projects
Actual engine result
Rejected: This XER contains multiple projects. Export one project at a time so dates, scores and resource weights refer to the same project.

Boundary: Export one project per XER.

Download test XER ↗
no-task-records

Missing TASK table rejected

Matches expectation

A file without activity records cannot produce a validation score.

Expected
Reject file: No TASK records
Actual engine result
Rejected: No TASK records were found. Upload a valid Primavera P6 XER export.

Boundary: This is a parser rejection test, not a complete XER-schema validator.

Download test XER ↗
demo-before

Published before sample

Matches expectation

The exact NT-1.0 sample used on the homepage and in reports.

Expected
PP-101: 1 [task 7]; PP-102: 1 [task 7]; PP-103: 1 [task 7]; PP-201: 3 [task 4, 5, 6]; PP-202: 1 [task 7]; PP-301: 1 [task 3]; PP-401: 1 [task 4]; PP-502: 1 [task 5]; PP-601: 1 [task 3]; PP-602: 1 [task 4]; PP-603: 1 [task 4]; PP-703: 1 [task 5]
Actual engine result
PP-101: 1 [task 7]; PP-102: 1 [task 7]; PP-103: 1 [task 7]; PP-201: 3 [task 4, 5, 6]; PP-202: 1 [task 7]; PP-301: 1 [task 3]; PP-401: 1 [task 4]; PP-502: 1 [task 5]; PP-601: 1 [task 3]; PP-602: 1 [task 4]; PP-603: 1 [task 4]; PP-703: 1 [task 5]

Boundary: Synthetic teaching fixture; not a customer project or verified recovery programme.

Download test XER ↗ · Calculated score 81/100
demo-after

Published corrected sample

Matches expectation

Zero configured findings after the teaching edits.

Expected
No findings
Actual engine result
No findings

Boundary: A score of 100 does not prove recovery feasibility, completeness or contractual compliance.

Download test XER ↗ · Calculated score 100/100
RESOURCE EXAMPLE · RWP-1.0

A separate hand-calculated Progress Measurement Sheet (PMS) check

MeasureExpectedActual
Total budget units400 hours400 hours
A110 budget weight25%25%
A110 actual / budget50%50%
Project weighted resource progress12.5%12.5%

Both assignments use labour hours. This checks the resource arithmetic only, not physical completion, productivity or P6 Units % Complete. Mixed units must not be aggregated without an approved common basis.

Reproduce and challenge a result

  1. Choose a case and download its XER. Keep the suite version with the file.
  2. Run the file in the free validator. Rejection cases should produce the stated error.
  3. Compare all rule codes, counts and task IDs with this page. Download the JSON for a machine-readable record.
  4. For the main demo, compare NT-1.0 and its PDF, Excel, CSV and JSON exports under the same scoring version.
  5. Send a minimal, authorised example and expected/actual difference to support@planproof.co. Do not include confidential project data without permission.

Further limits: evidence displays retain at most 250 records per finding; counts include all matches. Several checks exclude completed activities. Numeric blanks can be interpreted as zero. Missing or partial data can therefore produce an apparently clean score. No finding is a substitute for reviewing data completeness.

Read the exact rule methodology →

Analytics preferences

Optional first-party analytics use a random browser identifier to record pages viewed, selected product events, referring domain and country-level location. Raw schedule content and IP addresses are not stored in these analytics. You can reject analytics and keep using PlanProof.

Current choice: No choice saved

Necessary sign-in and service storage are separate from optional analytics. Your choice is saved in this browser when local storage is available.

Privacy information