Skip to content

Float-Path Partition & Driving (ADR 0289 / 0299 / 0300 / 0307) ​

Architectural guide for the unified Critical Path & Float Risk workspace (Float Paths tab).

Worker contract ​

Persistent criticalPath.worker with typed messages: load / analyze / diff / dispose.

  • Transfers numeric SoA buffers (typed arrays) — no activity name/code strings on the worker boundary.
  • PATH_NETWORK_COLUMNS_V (ADR 0300 / 0307): remaining duration is derived at analyze time; not packed.
  • Relationship free float (RFF) is cached per file.
  • Float-path partition results are LRU-cached by target (depth 3).
  • Calendar horizons are derived from task date min/max ± padding (ADR 0307 / CP-10); out-of-horizon instants degrade explicitly instead of silently clamping.

This supersedes the prior Path Risk collect+rank worker path for this surface (ADR 0274 partial supersession).

Relationship free float (RFF) — ADR 0299 / CP-01 ​

E   = applyLag on SCHEDOPT lag calendar of predecessor anchor + lag minutes
RFF = work minutes on successor calendar between E and successor anchor
driving = RFF ≤ 1 work-minute

When lag is zero, RFF = W_cs(Ap, As) (O(1) per edge). Lag placement still honours all four P6 SCHEDOPT options (predecessor / successor / 24-hour / project-default); residual measurement is always on the successor calendar. Kernel derived CPM also threads per-edge SCHEDOPT lag calendars into forward/backward passes (ADR 0308 / CP-11).

RFF is additive forensic evidence. It MUST NOT overwrite P6-stored total_float_hr_cnt or free float (ADR 0142).

Multiple Float Paths partition ​

  1. Path 1 — reverse walk along driving edges only from the selected target (ADR 0307 / CP-02). When no driving predecessor exists, the trace stops and raises DEFECT_NODE_PATH_BREAK; the Path Integrity Index is penalised. Paths 2..N may still use the any-edge walk.
  2. Longest-path remaining on Path 1 is (W(ES_{head}, EF_{target})) in working time on the target calendar — not a BFS of remaining duration (ADR 0307 / CP-04).
  3. Paths 2..N — heap-ranked by relative float; each path records a join onto a lower-numbered path.
  4. Cap N ≤ 25.
  5. When XER float_path / float_path_order are populated, the observed partition is authoritative. Agreement is Jaccard membership overlap matched by task_code (not path-number equality). When nothing is comparable, agreement is null and the UI shows an em-dash (ADR 0307 / CP-08).
  6. Calendar-transition defects compare definition signatures (weekday shifts + exceptions), not calendar ids (ADR 0307 / CP-12).

Dynamic near-critical threshold T — ADR 0300 / CP-03 / X-04 ​

D_rem = W_c_target(data_date, EF_target) / 60   # working hours, not calendar-days × h_day
T_hours = 0.05 × D_rem                          # integer minutes via floor(remainingMin × pct / 100)

When auto resolution is impossible (missing dates / calendar), threshold = 0 with source: 'fallback' and a visible threshold_unresolved partial state (no silent 40 h fixed band). Optional user override (hours) with linked days / % UI (ADR 0290). Compression / Path Risk cockpit still use the deprecated calendar-day helpers until Phase 3 (ADR 0306).

Run-length encoded logic spine ​

Presentation compresses consecutive spine nodes that share WBS / status banding (RLE) and windows the visible segment for pan performance. Domain math remains unchanged; compression is UI-only (ADR 0290).

Privacy-first Primavera P6 schedule analytics.