Route Readiness โ One Answer per Route Option
How RoadScope turns the constraint verdicts of a route option into one status per declared load, how a human decision sits next to it, and why every channel quotes the same rows.
One Status per Route Option and Load
A map can hold several route options (a route or a chain of declared legs). For every option and every declared load, RoadScope aggregates the constraint verdicts of the POIs on that option into a single readiness status. No new rule is applied at this level โ the status is a roll-up of the same PASS / MARGINAL / FAIL / NOT EVALUATED verdicts described in *Constraint Verdicts in Reports*.
Each row also names the governing constraint per dimension (the worst evaluated height, width and weight margin with its POI), counts the work required, and lists the top reasons in plain language.
Computed Status vs Human Decision
Highlight and split route sections
Editors can open Highlight sections on an existing route, drag snapped A/B boundaries or enter kilometre distances, then preview and confirm Approved (green), Blocked (red), or Clear decision. Clear returns only that range to unreviewed; revisions retain audit history. An explanatory note is required when calculated readiness is Blocked or Needs work. Manual green never removes engineering failures or grants transport clearance, and can be recorded without a declared load.
The existing readiness display switch controls manual highlights and calculated casings together. Saved decisions and coverage cards remain available when styling is hidden. Geometry changes withhold old highlights as stale until fresh review. Shared viewers can see the saved highlights but cannot change them.
Saving mixed green/red decisions offers a non-destructive split. No retains the original and its highlights; Split remains available later. Preview lists every child name, length and status, including unreviewed gaps. Creation is atomic and retry-safe, preserves full-resolution geometry and multipart breaks, retains the source and its original POI links, and adds child-specific associations. The source can optionally be hidden locally; it is never deleted or archived. Published scopes and delivery assignments are not expanded.
The status is computed and never edited by hand. Separately, a person can record a decision on the option โ Recommended, Under review or Rejected โ with a note. The decision stores the computed status at the moment it was taken. Both are always shown side by side, and when they disagree (for example *Recommended* on a *Blocked* option, or a decision taken when the status was different) a mismatch warning is printed next to the row. The decision is provenance and accountability; it does not change the computed status.
The Same Answer Everywhere
The readiness rows are computed once on the server and quoted, never re-derived, by every channel:
GET /api/surveys/{surveyId}/route-readiness returns the rows with the same status values (clear, needs_work, blocked, incomplete) and margins; decisions are read and recorded under /route-readiness/decisionsFreshness
Rows are recomputed from the current measurements when a report is generated and are cached briefly for the map and Max; each surface shows when the readiness was computed. Changing a POI measurement, the declared load or a route changes the answer everywhere at once.
