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-minuteWhen 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
- 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. - 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).
- Paths 2..N — heap-ranked by relative float; each path records a join onto a lower-numbered path.
- Cap N ≤ 25.
- When XER
float_path/float_path_orderare populated, the observed partition is authoritative. Agreement is Jaccard membership overlap matched bytask_code(not path-number equality). When nothing is comparable, agreement isnulland the UI shows an em-dash (ADR 0307 / CP-08). - 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).
Related
- Product guide: Critical Path & Float Risk
- At-Risk Filter
- Constraints Display
- ADRs: 0142, 0270, 0277, 0279, 0289, 0290, 0299, 0300