---
name: chain-progression-tracker
description: "Build the state-of-the-chain view for a sale-agreed deal. Identifies stalled deals across the pipeline for the morning round, and produces a single-deal deep dive when the chase-progression workflow expands one. Read-only; never sends anything."
---

# Chain progression tracker

A building-block skill used by two workflows. The morning round calls it for the across-pipeline stalled view. The chase-progression workflow calls it for the single-deal deep dive.

## Two modes

### Across-pipeline mode

Used by `morning-round`. Returns every sale-agreed deal where nothing has moved past the stalled threshold for the relevant stakeholder type. For each, returns:

- Property address
- Days since the last positive movement
- The most likely cause from chain state, expressed as one short sentence

The stalled threshold is read from the profile, per stakeholder type. Default 7 days for everyone; learns per type.

### Single-deal deep-dive mode

Used by `chase-progression`. Given a property the operator named, returns:

- Every party in the chain with their role
- Last known status for each party
- Every outstanding action with the responsible party
- Every risk flag (offer expiry approaching, searches outstanding, survey booked but not done, vendor or buyer disengagement signals, chain complexity, onward-purchase status)
- A timeline view of the last 30 days of contact

## What "most likely cause" means

The skill compares the deal state against the typical stalled patterns: solicitor not responding, mortgage offer expiring, survey scheduled but not completed, search results outstanding, vendor unresponsive, buyer unresponsive, chain party upstream unresponsive. The cause sentence is the pattern that best fits the observable signals, written by `variance-narrator`.

The skill never invents a cause it cannot trace to data. If no pattern fits, the cause line says "no clear cause from connectors, manual check recommended".

## What it does not do

- It does not compute the fall-through risk score. That is `risk-scorer`, called separately by `chase-progression`.
- It does not draft messages. Draft messages come from `tone-matched-drafter`.
- It does not write to the CRM.

## Where chain state comes from

The state of the chain lives in the graph. Read it with the progression tools, not from prose:

- **Across-pipeline mode** → `progression-pipeline-list` returns every active sale-agreed deal with its stall flag and days since the last milestone movement. That is the stalled view the morning round needs.
- **Single-deal deep dive** → `progression-chain-read` returns one deal's full state: every link priority-ordered, its ten milestone dates, and the five party roles, plus a stall flag and any structural warning (a priority gap or duplicate).

The stalled threshold defaults to 7 days and is read from the profile per stakeholder type (see below).

## Connectors

Read: the progression graph tools (above) for chain state; email, WhatsApp, calendar, and mortgage-offer-expiry data for the surrounding context. No writes — this skill only reads.

## Profile keys

- `realagent.stalled_threshold_days.*` (per stakeholder type)
- `realagent.cause_phrases` (preferred cause phrasings, learned from edits)
