Forecast correlated milestone slippage

Forecast joint portfolio milestone slippage from complete historical episode-by-category planned/actual duration ratios: fit log-error marginals and a positive-definite shrinkage Gaussian copula, mix shared and idiosyncratic shocks, propagate durations through the current dependency DAG, and report joint confidence, finish distributions, and tail value at risk.

What it's for

Gives executives and investors a portfolio-level answer ordinary project trackers cannot: the probability every linked milestone lands, how common shocks cascade through dependencies, and how much value sits in the tail.

What you give it

Inputs split into evidence read from your connected systems, calibration your team owns, and numerical controls that affect precision but never the result's meaning.

Field Type Role Required
confidence_level number ≥ 0.8, ≤ 0.99 Your calibration Optional
correlation_shrinkage number ≥ 0, ≤ 1 Your calibration Optional
current_milestones array of objects (6 fields) ≥ 1 item Evidence Yes
historical_milestones array of objects (5 fields) ≥ 100 items Evidence Yes
max_detail_rows integer ≥ 1, ≤ 500 Numerical control Optional
portfolio_shock_fraction number ≥ 0, ≤ 1 Your calibration Optional
seed integer Numerical control Optional
simulations integer ≥ 500, ≤ 20000 Numerical control Optional
target_joint_on_time_probability number ≥ 0.5, ≤ 0.999 Your calibration Optional

Each current_milestones record

Field Type Required
category string (non-empty) Yes
deadline_days number (≥ 0) Yes
id string (non-empty) Yes
remaining_duration_days number (> 0) Yes
requires array of string Optional
value_at_risk number (≥ 0) Optional
Example input
{
  "current_milestones": [
    {
      "category": "platform",
      "deadline_days": 12,
      "id": "foundation",
      "remaining_duration_days": 12,
      "requires": [],
      "value_at_risk": 100
    },
    {
      "category": "product",
      "deadline_days": 24,
      "id": "launch",
      "remaining_duration_days": 12,
      "requires": [
        "foundation"
      ],
      "value_at_risk": 200
    },
    {
      "category": "security",
      "deadline_days": 36,
      "id": "assurance",
      "remaining_duration_days": 12,
      "requires": [
        "launch"
      ],
      "value_at_risk": 300
    }
  ],
  "historical_milestones": [
    {
      "actual_duration_days": 10,
      "category": "product",
      "episode_id": "episode-0",
      "id": "milestone-history-0-product",
      "planned_duration_days": 10
    },
    {
      "actual_duration_days": 10.696352246247812,
      "category": "platform",
      "episode_id": "episode-0",
      "id": "milestone-history-0-platform",

Truncated for display — the full payload is 877 lines.

What you get back

This is the actual output of running the example above — computed by the same function the platform calls, not an illustration.

Example output
{
  "assumptions": [
    "Historical planned-versus-actual duration ratios are comparable to current remaining-duration estimates within a stable planning and delivery epoch.",
    "The shrinkage Gaussian copula and governed portfolio-shock fraction adequately represent dependence, while the dependency DAG captures prerequisite timing.",
    "Deadlines and value-at-risk amounts are owner-governed and do not double count dependent milestone value."
  ],
  "correlation_diagnostics": [
    {
      "left_category": "platform",
      "right_category": "product",
      "shrunk_correlation": 0.7751
    },
    {
      "left_category": "platform",
      "right_category": "security",
      "shrunk_correlation": 0.7748
    },
    {
      "left_category": "product",
      "right_category": "security",
      "shrunk_correlation": 0.7233
    }
  ],
  "decision": "correlated_portfolio_slippage_risk_material",
  "executive_summary": {
    "conditional_tail_value_at_risk": 600,
    "correlation_joint_probability_delta": 0.112,
    "expected_value_at_risk": 311.6,
    "independent_joint_on_time_probability": 0.256,
    "joint_on_time_probability": 0.368,
    "portfolio_finish_day_p50": 36.3855,
    "portfolio_finish_day_p90": 46.3225,
    "target_joint_on_time_probability": 0.8,
    "value_at_risk_quantile": 600
  },
  "limitations": [
    "This is a reference-class slippage forecast, not a causal diagnosis of why a team or milestone is late.",
    "Unseen categories use a disclosed global fallback; novel shocks, scope changes, resource contention, and feedback can exceed historical tails.",
    "Correlation is not causation, and the independent comparison is a sensitivity baseline rather than the true counterfactual portfolio."
  ],
  "method": "shrinkage_gaussian_copula_dependency_milestone_forecast_v1",
  "milestone_forecast": [
    {
      "category": "platform",

Truncated for display — the full payload is 88 lines.

How it works

Forecasting & survival — Estimate when something completes or fails, with censoring and unresolved work handled honestly rather than dropped.

  1. 1 Build complete historical portfolio episodes containing one planned and actual duration for every governed milestone category; model their log duration ratios and reject constant, sparse, or incomplete category histories.
  2. 2 Estimate category location/scale and cross-category dependence, shrink the empirical correlation toward independence, project it to a positive-definite correlation matrix, and combine a governed shared-shock fraction with milestone-specific noise.
  3. 3 Draw correlated duration multipliers, fall back visibly to the global history for unseen categories, and evaluate every simulation in dependency-topological order so prerequisite slippage propagates to downstream finish dates.
  4. 4 Compare joint on-time confidence with the governed commitment target and an independent-shock sensitivity baseline; report milestone miss probabilities, portfolio finish tails, expected loss, VaR, and conditional tail value at risk.

Before you trust it

Every tool in the catalog ships with the conditions under which its answer is meaningful — and the conditions under which it should abstain instead of guessing.

Assumptions & guardrails

  • Training examples precede their outcomes, censoring and unresolved work are represented, and deployment populations remain comparable to validation cohorts.
  • Historical and current planned-duration semantics, milestone categories, scope discipline, cadence, and delivery regime are comparable, with failures and large overruns retained rather than censored.
  • The Gaussian copula, shrinkage, shared-shock fraction, and reference window cover relevant dependence and tail behavior; the dependency DAG is complete and acyclic.
  • Deadlines and value-at-risk inputs are finance/product-owned, dependency value is not double counted, and resource contention absent from the DAG is modeled or disclosed.
  • A predictive interval or risk estimate is not a deadline promise, causal explanation, or individual-performance judgment.
  • This is a portfolio reference-class forecast, not a causal diagnosis of why a milestone or team is late and not a named-person performance score.
  • Correlation and dependency propagation do not prove organizational causation; novel scope, resource, market, or technical shocks can exceed the historical model.
  • Value at risk is conditional on owner-supplied exposure and must not be presented as audited financial loss or revenue attribution.

Minimum evidence

  • historical_milestones: at least 100 rows/items
  • current_milestones: at least 1 rows/items

How to validate it

Use chronological train/calibration/test windows, compare proper scores and decision value with a simple baseline, and recalibrate only from outcomes resolved after prediction time.

Calibrating it to your org

Same for everyone

The mathematical kernel, validation rules, method version, and JSON output semantics are organization-independent; no tenant-trained coefficients or company benchmark is embedded in the function.

Specific to you

  • complete historical portfolio episodes with one planned/actual duration ratio per governed milestone category
  • current remaining-duration estimates, dependency-topological order, and unseen-category fallback diagnostics
  • milestone identity and category, baseline plan version, scope-change policy, actual completion, episode construction, dependency DAG, current remaining duration, deadline, value at risk, joint confidence, shock fraction, shrinkage, and tail level

Calibration workflow

  1. 1 Define the management decision, target outcome, aggregate unit, privacy boundary, cadence, and prediction/intervention horizon for this organization.
  2. 2 Build a tenant-scoped historical cohort using only information available before each prediction or decision; preserve zero periods, censoring, assignment probabilities, and unresolved outcomes when the method requires them.
  3. 3 Estimate statistical parameters on training history, but obtain costs, utilities, risk tolerance, practical-effect thresholds, capacity, and policy constraints from accountable decision owners.
  4. 4 Validate on later time windows or held-out aggregate units at the deployment grain, against a simple baseline and the function-specific validation strategy.
  5. 5 Deploy only if the returned decision clears evidence, overlap, calibration, robustness, and guardrail checks; warning, unsupported, schema-gap, and fallback decisions are abstentions.
  6. 6 Monitor realized outcomes, data drift, coverage, and decision regret; recalibrate at a governed cadence or after a detected regime/definition change, never merely because a stakeholder dislikes the result.

Call it from your AI

You don't wire up 388 tools in your MCP client. The GitRevio MCP server exposes 18 tools, three of which let an agent search the catalog, read a tool's schema, and run it — so the assistant finds this one on its own.

gitrevio_capabilities_search
  { "q": "forecast joint portfolio milestone slippage from" }
  → finds "forecast_correlated_milestone_slippage"

gitrevio_capability_describe
  { "capability_id": "forecast_correlated_milestone_slippage" }
  → returns the input schema and agent guidance shown on this page

gitrevio_capability_run
  { "capability_id": "forecast_correlated_milestone_slippage", "arguments": { ... } }
  → returns the result shown above

Works in Claude Desktop, Claude Code, Cursor, Cline, Continue.dev, Goose and Aider. See the MCP server.

Related tools

Audit KPI threshold bunching

Detect a post-target excess concentration immediately above a governed KPI threshold: compare within-unit pre/post local mass and above-versus-below mirror asymmetry, bootstrap whole units, report density bins and a smoothed log-density jump, and explicitly refuse to equate bunching with individual gaming or intent.

Statistical audit & measurement

Solve robust policy across causal models

Choose an aggregate policy across competing interventional causal models and a bounded posterior credal set: derive model-by-action expected utility from outcome probabilities, compute exact lower/upper utility and adversarial model weights, minimize worst-case regret, expose model disagreement and value of perfect model information, and fail closed when any causal evidence gate fails.

Causal inference & experiment design

Audit commercial technical commitment integrity

Audit signed commercial promises against explicitly allocated technical scope, dependency order, funded capacity, acceptance criteria and evidence; expose orphan scope, double allocation, cycles, late plans and maximum contractual penalty without interpreting legal rights from engineering activity.

Constrained optimization

Audit decision execution fidelity

Audit whether approved decisions actually became verified implementation at the promised aggregate-unit and component grain, with whole-unit bootstrap uncertainty and simultaneous gates for fidelity, overdue scope, unverifiable evidence, exceptions and critical gaps.

Statistical audit & measurement

Audit release risk prediction integrity

Audit a complete eligible-change release-risk cohort for point-in-time prediction lineage, exact change-to-deployment linkage, mature mutually exclusive outcomes, selective labels, score-triggered intervention contamination, calibration and false alarms before the score influences a release decision.

Forecasting & survival

Audit sunk cost escalation

Audit whether cumulative sunk cost predicts aggregate project continuation after project fixed effects, checkpoint time, forward value, success probability, remaining cost, and future irreversibility, with project-cluster bootstrap uncertainty.

Statistical audit & measurement

See every tool in Delivery forecasting & commitments →

Ready to See Your Engineering work clearly?

Request a free demo