User Manual
Complete reference for ScheduleGate — a CLI tool for DCMA 14-Point Schedule Assessments, schedule version comparison, column validation, and YAML pattern compliance checks on Microsoft Project exports.
schedulegate v1.0.6 · DCMA PAM Rev. B · August 2026Installation
ScheduleGate is distributed as a single binary — no runtime dependencies required.
macOS
Download schedulegate from your purchase email. Move it to a directory on your PATH:
Windows
Download schedulegate.exe. Place it in a directory on your PATH, or run directly:
Linux
Download schedulegate-linux. Make executable and move to PATH:
$ mv schedulegate-linux /usr/local/bin/schedulegate
Verify
Confirm the installation:
Quick Start
Run a full DCMA 14-point assessment on your schedule export:
Generate an HTML report, CSV database, and Excel exceptions workbook:
--html report.html \
--csv history.csv \
--exceptions-report exceptions.xlsx \
--customer "Acme Corp" --project "P-1042" \
--status-date 05/19/2026 --verbose
Product Tiers
ScheduleGate uses a license key system to gate features. All tiers unlock the same core engine — the difference is which output formats and commands are available.
| Feature | Community (Free) | Pro ($99/yr) | Team ($299/yr) | Enterprise ($999/yr) | Lifetime ($199) |
|---|---|---|---|---|---|
assess — terminal output |
✓ 1/month | ✓ Unlimited | ✓ Unlimited | ✓ Unlimited | ✓ Unlimited |
--html / --csv / --exceptions-report |
✗ | ✓ | ✓ | ✓ | ✓ |
--json / --json-output |
✗ | ✓ | ✓ | ✓ | ✓ |
compare — version comparison |
✗ | ✓ | ✓ | ✓ | ✓ |
check-patterns — YAML rules |
✗ | ✓ | ✓ | ✓ | ✓ |
validate — column check |
✓ | ✓ | ✓ | ✓ | ✓ |
| License expiry | N/A | 1 year + 7-day grace | 1 year + 7-day grace | 1 year + 7-day grace | Never expires |
compare and check-patterns commands are fully blocked.
The validate command is always free.
schedulegate license set <key>.
License Management
Your license key is validated, stored in ~/.schedulegate.yaml,
and automatically used on every run. You can also pass a key for a single
run with the global --license-key flag.
Global flags: --config <file> overrides the
config file location (default ~/.schedulegate.yaml);
--license-key <key> provides a key for a single run.
Commands
SG-.... Stored to config automatically.
$ schedulegate license set SG-abc123...
$ schedulegate license clear
assess — DCMA 14-Point Assessment
Reads a schedule file (Excel or CSV) and computes up to 14 health metrics defined by the DCMA Program Assessment and Reporting Manual (PAM). Each metric produces a pass/fail verdict, a percentage value, and — where applicable — a per-task exceptions list.
Pro Terminal output is available on all tiers (1/month on Community). HTML, CSV, Excel, and JSON outputs require Pro or above.
Flags
.xlsx or .csv.
Positional argument — must be the first argument after assess. Required.
--metrics 1,5,12 — Logic, Hard Constraints, Critical Path Test.
YYYY-MM-DD · MM/DD/YYYY · MM/DD/YY
--customer "Lockheed Martin"
--project "N00019-24-C-1234"
--html ./reports/assessment.html
--csv ./db/history.csv
--exceptions-report exceptions.xlsx
--json-output report.json
"0-100" (default) · "fraction" (auto-multiplies by 100)
"US" (MM/DD first, default) · "EU" (DD/MM first)
Logic 3.2% [7 / 219]
compare — Schedule Version Comparison
Takes two schedule files — a Previous version and a Current version — and benchmarks them using a three-pillar scoring engine to quantify schedule stability, reliability, and scope churn.
Pro Requires a Pro license key or above.
Flags
assess command.
Scoring Pillars
The overall score (0–100) is a weighted composite of three pillars:
Friction Index (Ghost Tasks)
A Ghost Task is a task whose planned start date is in the past (before the status date) but is still at 0% complete. These are tasks that should have started but haven't — they represent immediate execution bottlenecks.
The tool aggregates Ghost Tasks by their top-level WBS to show which phase of the project is stuck.
Detailed Task Analysis (--detailed)
When using --detailed with --html, the report includes a
row-by-row breakdown of every significantly changed task:
| Symbol | Meaning | Impact |
|---|---|---|
⊕ | New Task | Scope Churn — task added in current version |
× | Deleted | Scope Churn — task removed |
⊠ | Delayed | Stability — finish slipped > 2 days |
← | Pulled In | Stability — finishing earlier than planned |
🐢 | Bloated | Reliability — duration grew > 10% |
👻 | Ghost Task | Reliability — start in past, 0% complete |
📝 | Modified | Neutral — minor name/date changes |
□ | Unchanged | Neutral — no significant changes |
validate — Column Schema Validation
Checks whether a schedule file contains the columns expected by the DCMA
assessment engine. Reads only the header row — does not parse task data.
Use this as a pre-flight check before running assess.
Free Always available — no license key required.
Flags
assess.Output Statuses
| Status | Meaning |
|---|---|
| READY | All 7 required columns found. Schedule is ready for assessment. |
| INCOMPLETE | One or more required columns missing. Check the column list below. |
Required Columns
| Canonical Name | Example MS Project Header |
|---|---|
task_id | Task ID, ID |
name | Name, Task Name |
duration | Duration |
start | Start |
finish | Finish |
predecessors | Predecessors, Predecessor |
percent_complete | % Complete, Percent Complete |
Summary nor
Rollup column is present, the tool silently degrades all 14 DCMA metrics
because it cannot distinguish summary rows from work tasks.
check-patterns — YAML Pattern Compliance
Validates that a schedule contains tasks matching user-defined patterns, expressed as glob rules in a YAML file. Useful for verifying schedule templates, checking discipline coverage, or enforcing naming conventions.
Pro Requires a Pro license key or above.
Flags
assess.assess.YAML Rules Format
Each rule specifies a set of glob patterns to match against task fields, plus count constraints:
Key rules:
- All matching is case-insensitive — both pattern and field value are lowercased.
- Glob syntax — uses
*,?,[...](Gopath.Match). - AND logic across fields — a task must match ALL fields in the
matchmap. - Summary and milestones excluded — only work (leaf) tasks are evaluated.
- Duration constraints subtract from the effective count: matching tasks that fail duration constraints are still listed with
--detailedbut excluded from the pass/fail count.
Supported Match Fields
| YAML Key | Aliases | Task Field |
|---|---|---|
name | task_name | Task Name |
wbs | wbs_code | WBS |
id | task_id | Task ID |
resources | resource_names | Resources |
predecessors | — | Predecessors |
constraint_type | — | Constraint Type |
discipline | task_discipline | Discipline |
mechanical_segment_nbr | mech_segment, mechanical_segment | Mechanical Segment Nbr |
control_segment_nbr | control_segment, controls_segment | Control Segment Nbr |
Output Statuses
| Status | Meaning |
|---|---|
| COMPLIANT | All rules passed. Schedule meets expected patterns. |
| NON-COMPLIANT | One or more rules failed. Check which patterns are missing or over-represented. |
Output Formats
--verbose for raw counts.
Flags:
--html
Flags:
--csv
Flag:
--exceptions-report (assess only)
Flag:
--json
Flag:
--json-output
Audit Reference
The overall score shown at the top of the report is:
A metric is excluded from the denominator only when it returns N/A (currently only Metric 10 — Resources, when no resource column is present). Binary metrics (Metric 12) count as 1 pass or 1 fail, never fractional.
Most metrics operate on the work task population, defined as tasks where all of the following hold:
IsSummary = false— roll-up summary rows are excludedIsMilestone = false— zero-duration milestones are excluded
Metrics that additionally restrict to incomplete tasks further require
PercentComplete < 100.
Metric 5 (Hard Constraints) includes milestones but excludes summaries.
Metric 13 (CPLI) includes milestones in its completion task scan.
The Predecessors column is a delimited string of relationship tokens.
Split on commas and semicolons, then parsed with the grammar:
RelType = FS | SS | FF | SF (default: FS if omitted)
sign = + (positive lag) | - (negative lag / lead)
unit = d (days) | w (weeks)
| Token | Interpretation | Affects |
|---|---|---|
5 | Task 5, FS, no lag — compliant | Metric 1, 4 |
5FS | Task 5, Finish-to-Start — compliant | Metric 1, 4 |
5SS | Task 5, Start-to-Start — non-FS violation | Metric 4 |
5FS+3d | Task 5, FS, +3 day lag violation | Metric 3 |
5FS-3d | Task 5, FS, –3 day lead violation | Metric 2 |
| Field | Unit / Type | Metric(s) |
|---|---|---|
TotalSlack | Decimal working days (float) | 6, 7, 12, 13 |
BaselineDuration | Decimal working days (float) | 8 |
PercentComplete | 0–100 (numeric) | 1–11, 14 |
Start / Finish | Forecast dates | 9, 13 |
ActualStart / ActualFinish | Actual dates (nil = not set) | 9 |
BaselineFinish | Date (nil = no baseline) | 11, 14 |
ConstraintType | String (case-insensitive) | 5 |
DCMA 14-Point Metrics
Measures whether every incomplete work task is wired into the network — i.e., has at least one incoming (predecessor) and one outgoing (successor) logic link.
The percentage of incomplete non-summary, non-milestone tasks missing a predecessor, a successor, or both.
All tasks where IsSummary = false,
IsMilestone = false, and
PercentComplete < 100.
Successor presence is inferred: a task has a successor if its Task ID appears in any other task's Predecessors field.
Pass when result ≤ 5%. Lower is better.
Negative lag (a "lead") allows a successor to start before its predecessor finishes. DCMA treats this as artificial schedule compression; the PAM goal is zero.
The percentage of predecessor relationships on incomplete tasks carrying a negative lag value.
Individual predecessor links on incomplete work tasks. Denominator is relationships, not tasks.
Pass when result equals 0% (zero tolerance).
Positive lags introduce waiting time between predecessor and successor without an explicit task. DCMA requires delays to be modelled as real tasks so they can be tracked and resourced.
The percentage of predecessor links on incomplete tasks carrying a positive lag value.
Same as Leads: individual predecessor links on incomplete work tasks.
Pass when result ≤ 10%. Insert an intermediate task to model the delay.
Finish-to-Start (FS) is the only relationship type that models true sequential work. SS, FF, and SF often mask schedule compression or insufficient decomposition.
Proportion of all predecessor links on incomplete work tasks using Finish-to-Start.
All predecessor links on incomplete work tasks. Bare tokens default to FS.
Pass when result ≥ 90%. Higher is better; 100% is ideal.
Hard constraints lock a task to a specific date, overriding network-driven scheduling. They inflate float and prevent the critical path from being computed correctly.
Percentage of incomplete tasks (including milestones) carrying a hard constraint.
Pass when result ≤ 5%. Replace with ASAP or SNET where possible.
Excessive total float indicates a task is poorly connected to the network — usually caused by missing successor links, hard constraints, or an unrealistically late project finish.
Percentage of incomplete work tasks with TotalSlack > 44 working days.
44 working days (~2 calendar months).
Pass when result ≤ 5%. Lower is better.
Negative float means a task is already late relative to its constraint or project finish date.
Percentage of incomplete work tasks with TotalSlack < 0.
- Hard constraint overriding logic
- Duration longer than available time window
- Predecessor chain longer than expected finish
Pass when result ≤ 5%. Zero is ideal.
Long work packages are harder to track, resource, and recover. DCMA requires work packages ≤ 60 working days (3 months).
Percentage of incomplete work tasks with BaselineDuration > 60 working days.
BaselineDuration (working days). Uses baseline, not current duration.
Pass when result ≤ 10%. Break violating tasks into sub-tasks.
Dates inconsistent with the status date indicate a stale schedule or incorrect actuals.
Incomplete work tasks only. Status date defaults to today unless --status-date is set.
Pass when result equals 0% (zero tolerance).
--status-date to the schedule's actual data
date to avoid false positives on this metric.
Resource-loading is required for earned value analysis. Unresourced tasks cannot yield reliable BCWS/BCWP values.
Percentage of incomplete work tasks with at least one resource assigned.
If no task has a resource, the metric is N/A and excluded from the tally.
Pass when result ≥ 95%. Higher is better.
A task is "missed" when its baseline finish date has passed but it is not yet 100% complete.
Percentage of work tasks with BaselineFinish ≤ StatusDate
that are still incomplete.
Only tasks due by the status date are in the denominator.
Pass when result ≤ 5%. Update actuals or re-baseline.
A valid critical path must exist: at least one work task with zero or negative total float, confirming the scheduler drives the finish date through network logic.
Binary: does any work task have TotalSlack ≤ 0? Yes = Pass.
Their float values are roll-ups or trivially zero by constraint, producing false positives.
Pass when at least one critical work task exists.
CPLI quantifies schedule efficiency relative to the critical path. Below 1.0 signals the project cannot finish on time under current conditions. Above 1.0 indicates margin.
Ratio of "available time plus total float" to remaining critical path duration.
Scans all non-summary tasks (milestones included) and picks the one with the latest Finish.
Step 2 — calDays = (completionTask.Finish − StatusDate) in whole days
Step 3 — CPL = calDays × (5 ÷ 7)
Step 4 — TF = completionTask.TotalSlack
Step 5 — CPLI = (CPL + TF) ÷ CPL
If CPL ≤ 0, CPLI returns 1.0 / Pass automatically.
BEI measures how many tasks were actually completed relative to how many were planned to be complete by the status date.
Ratio of completed work tasks to all work tasks whose baseline finish was on or before the status date.
Work tasks only. Tasks with null BaselineFinish are
excluded from the denominator but counted in numerator if complete.
Denominator = COUNT(work tasks where BaselineFinish ≤ StatusDate
AND BaselineFinish != null)
BEI = Numerator ÷ Denominator
schedulegate v1.0.6 · DCMA PAM Rev. B metrics · Updated August 2026