{
 "generated": "2026-09-24",
 "speeds_mph": [
  25,
  30,
  35,
  40,
  45,
  50,
  55,
  60,
  65
 ],
 "profile": "TA-33, 12-ft lane, 2,000-ft zone, day",
 "algebra": [
  {
   "step": "L merging taper",
   "formula": "W \u00d7 S\u00b2/60 if S \u2264 40, else W \u00d7 S (W = lane width, 12 ft here)",
   "source": "MUTCD Table 6B-4, then the jurisdiction's printed cells, flat rules or rounding"
  },
  {
   "step": "L/2 shifting taper",
   "formula": "L / 2, or full L / a table where the state says so",
   "source": "MUTCD 6B.08"
  },
  {
   "step": "Shoulder taper",
   "formula": "shoulder width \u00d7 (S\u00b2/60 or S) / 3, or L(12 ft)/3 where the state prints it that way",
   "source": "MUTCD 6B.08"
  },
  {
   "step": "Buffer",
   "formula": "Table 6B-2 row at S, or the state's table / formula / zero",
   "source": "MUTCD Table 6B-2"
  },
  {
   "step": "Road type",
   "formula": "speed band \u2192 urban-low / urban-high / rural / freeway",
   "source": "jurisdiction file"
  },
  {
   "step": "Sign spacing A/B/C",
   "formula": "Table 6B-1 row for the road type, with cells patched, one distance per band, or = L",
   "source": "MUTCD Table 6B-1"
  },
  {
   "step": "Device spacing",
   "formula": "taper min(cap, S), tangent min(cap, 2S), departure per state",
   "source": "MUTCD 6K.01 + state caps"
  },
  {
   "step": "Devices per run",
   "formula": "k = max(1, round(length / spacing)); devices = k + 1; \u00d7 rows",
   "source": "matches the layout engine"
  },
  {
   "step": "Taper floor",
   "formula": "raise to the state's published minimum for that taper type; never above the published grid",
   "source": "state table"
  },
  {
   "step": "Chain joint",
   "formula": "contiguous runs share one end device: \u22121 per joint",
   "source": "\u2014"
  },
  {
   "step": "Site allowance",
   "formula": "point = line + rate \u00d7 zone / 1000; divided 14.0, arterial 28.6 (fitted, n=1); freeway 3.0, minimal 2.0 (assumed)",
   "source": "two Arizona exports"
  },
  {
   "step": "Order quantity",
   "formula": "top of the \u00b150% (observed) or \u00b1100% (assumed) band, rounded up to 10",
   "source": "\u2014"
  }
 ],
 "jurisdictions": [
  {
   "jurisdiction": "arizona",
   "name": "Arizona",
   "group": "local",
   "source": "ADOT TTCDG + SME rulings; TCP-Rules origin/main src/data/reference/arizona.js (cites checked 2026-09-23 against 92728ca)",
   "citation_edition": null,
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 51,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 42,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 46,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 48,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 49,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 51,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "1/3 L at a 12-ft lane (arizona.js TA33_GEOMETRY.tapers.shoulder_taper, SME example L 780 -> 260; TA30R_GEOMETRY.tapers.shoulder_taper, ADOT TTCDG SA-15 'SHOULDER TAPER 1/3 L MIN'). Only where a shoulder is taken.",
    "buffer": "0 ft both ends: arizona.js BUFFER_POLICY (Jeremy Anderson 2026-08-10); SME_RULINGS AZ-9/4-NO-BUFFER (Matthew Grotts 2026-09-04)",
    "sign_spacing": "Table 6B-1 values (via AZ-i); row picked by speed per Keryk assignment, not the MUTCD's (arizona.js WORK_ZONE_SIGN_SPACING); row 'rural'",
    "taper_spacing": "ADOT 40/80 shall, yields to MUTCD below 40 mph (arizona.js CHANNELIZING_DEVICE_SPACING, DEVICE_SPACING). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), within the ADOT 40 ft taper cap (DEVICE_SPACING.taperMaxFt).",
    "tangent_spacing": "ADOT 40/80 shall, yields to MUTCD below 40 mph (arizona.js CHANNELIZING_DEVICE_SPACING, DEVICE_SPACING). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), within the ADOT 40 ft taper cap (DEVICE_SPACING.taperMaxFt).",
    "departure_spacing": "ADOT 40/80 shall, yields to MUTCD below 40 mph (arizona.js CHANNELIZING_DEVICE_SPACING, DEVICE_SPACING). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), within the ADOT 40 ft taper cap (DEVICE_SPACING.taperMaxFt).",
    "buffer_tangent_spacing": "ADOT 40/80 shall, yields to MUTCD below 40 mph (arizona.js CHANNELIZING_DEVICE_SPACING, DEVICE_SPACING). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), within the ADOT 40 ft taper cap (DEVICE_SPACING.taperMaxFt)."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "TA-10 / TA-30 / TA-30R: ADOT publishes no sheet for these; the Arizona reference governs them by the federal figure via Supplement preamble AZ-i (arizona.js TA10/TA30/TA30R_GEOMETRY, inheritedFrom federal). The federal figure is the ruled component list, amended by the Arizona overrides.",
    "Urban-freeway buffer exception: upstream Table 6B-2 on an urban freeway lane closure only (arizona.js BUFFER_POLICY.freewayException). Not SME-confirmed; 0 ft priced on TA-33. Pass --buffer-ft for that case.",
    "TA-10 R4-7 KEEP RIGHT on both approaches (SME 2026-08-13, arizona.js TA10_GEOMETRY): required, but no catalogue asset; the reference does not emit it either.",
    "Statutory, not priced (the reference emits none of these either): SA-12 R2-101 / R2-103 on every Arizona pattern with workers present (ADOT TTCDG Intro p.1; arizona.js STATEWIDE_MANDATORY_SIGNING); R4-103 MOVE OVER on every work zone with 2+ lanes, i.e. TA-30 / 30R / 33 (no asset); TA-10 step-down to 25 mph, one R2-1 per 10 mph step per approach (arizona.js SPEED_REDUCTION_POLICY). Every Arizona BOM is short these panels. Optional, not priced: R4-7a / R4-8a at 1,000 ft in the TA-33 buffer, W3-5aAZ, R2-102; R2-101 every 2,500 ft in a higher-fines area (TTCDG SA-5 Note 7).",
    "Sign size 48x48 on W-series rows (arizona.js SIGN_SIZE_POLICY, MOAS pending): not carried; the BOM counts panels, not sizes."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "maricopa",
   "name": "Maricopa County",
   "group": "local",
   "source": "MCDOT TCM TC-012; TCP-Rules origin/main src/data/reference/maricopa-county.js (cites checked 2026-09-23 against 92728ca)",
   "citation_edition": "MCDOT TCM Sept 2015 (not verified as current) reprints 2009 MUTCD numbering on TC-012: its Table 6H-3 is the 11th Edition's 6B-1, and Table 6H-4 is 6B-4. Cite TC-012 and the 6H-x names to a county reviewer; the engine's 6B-x labels are 11th Edition names for the same values.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125,
     "L_half_ft": 65,
     "L_shoulder_ft": 45,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 34,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180,
     "L_half_ft": 90,
     "L_shoulder_ft": 60,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 35,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245,
     "L_half_ft": 125,
     "L_shoulder_ft": 85,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 36,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320,
     "L_half_ft": 160,
     "L_shoulder_ft": 110,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540,
     "L_half_ft": 270,
     "L_shoulder_ft": 180,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600,
     "L_half_ft": 300,
     "L_shoulder_ft": 200,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 44,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660,
     "L_half_ft": 330,
     "L_shoulder_ft": 220,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 46,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 49,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 51,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "MCDOT TC-012 (maricopa-county.js TC012_MERGING_TAPER_BY_WIDTH) (printed cell governs)",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "TC-012 prints 1/3 L at a 12-ft lane, not at the shoulder width. No Maricopa TA prices a shoulder taper: shoulder closures are out of scope (maricopa-county.js TAPER_TYPES).",
    "buffer": "maricopa-county.js BUFFER_POLICY; PRECEDENCE.practiceOverrides MC-OVR-1 (Matthew Grotts 2026-09-04, ruled 2026-09-14); SME_RULINGS MC-9/4-NO-BUFFER",
    "sign_spacing": "MCDOT TCM TC-012 Table 6H-3, A = B = C (maricopa-county.js ADVANCE_WARNING_SIGN_SPACING) row 'rural 55 mph, 500 ft'",
    "taper_spacing": "SME ruling: flat ADOT 40 ft along tapers / 80 ft along tangents at every speed, 'EMITTED VALUES FOLLOW THIS RULING' (maricopa-county.js CHANNELIZING_DEVICE_SPACING.stateLayerConflict.smeRuling, Jeremy Anderson email 2026-08-20; ADOT TTCDG SA-5L Note 6, 'SPACING OF CHANNELIZING DEVICES SHALL BE 40' ALONG TAPERS AND 80' ALONG TANGENTS').",
    "tangent_spacing": "SME ruling: flat ADOT 40 ft along tapers / 80 ft along tangents at every speed, 'EMITTED VALUES FOLLOW THIS RULING' (maricopa-county.js CHANNELIZING_DEVICE_SPACING.stateLayerConflict.smeRuling, Jeremy Anderson email 2026-08-20; ADOT TTCDG SA-5L Note 6, 'SPACING OF CHANNELIZING DEVICES SHALL BE 40' ALONG TAPERS AND 80' ALONG TANGENTS').",
    "departure_spacing": "SME ruling: flat ADOT 40 ft along tapers / 80 ft along tangents at every speed, 'EMITTED VALUES FOLLOW THIS RULING' (maricopa-county.js CHANNELIZING_DEVICE_SPACING.stateLayerConflict.smeRuling, Jeremy Anderson email 2026-08-20; ADOT TTCDG SA-5L Note 6, 'SPACING OF CHANNELIZING DEVICES SHALL BE 40' ALONG TAPERS AND 80' ALONG TANGENTS'). (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "SME ruling: flat ADOT 40 ft along tapers / 80 ft along tangents at every speed, 'EMITTED VALUES FOLLOW THIS RULING' (maricopa-county.js CHANNELIZING_DEVICE_SPACING.stateLayerConflict.smeRuling, Jeremy Anderson email 2026-08-20; ADOT TTCDG SA-5L Note 6, 'SPACING OF CHANNELIZING DEVICES SHALL BE 40' ALONG TAPERS AND 80' ALONG TANGENTS')."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "TCM \u00a76.3.4 gates cones by WORK TYPE as well as by time of day \u2014 permitted in daylight for pilot car / flagger operations and pavement surface treatments, prohibited on lane merges or diversions. The estimator has no work-type input, so it prices the vertical panel throughout rather than switching per operation.",
    "Speed reduction TC-013: conditional overlay (maricopa-county.js SPEED_REDUCTION :2209-2233). Not an estimator input.",
    "KEEP RIGHT / KEEP LEFT reminders (R4-7 / R4-8): priced at the drawn count (TA-10 2, TA-30 4, TA-30R 2; TA-33 2 per direction deployed \u2014 TC-404 draws 4 across both directions). The standing rule places them at every intersecting road; the 700-ft interval is contradictory in the TCM, so extra reminders on a long zone are not priced.",
    "Freeway: MCDOT publishes no freeway tier; a freeway is ADOT right-of-way (run --jurisdiction arizona). --road-type freeway switches sign spacing only; up to 55 mph device spacing and signs stay county, above 55 mph Arizona drivers apply."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "phoenix",
   "name": "City of Phoenix",
   "group": "local",
   "source": "City of Phoenix TBM Key Reference Tables; TCP-Rules origin/main src/data/reference/phoenix.js (on main since 5cabc9a, 2026-09-04; cites checked 2026-09-23 against 92728ca)",
   "citation_edition": null,
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      125.0,
      125.0,
      125.0
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 50,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 30,
     "L_ft": 185.0,
     "L_half_ft": 92.5,
     "L_shoulder_ft": 61.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      185.0,
      185.0,
      185.0
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      245.0,
      245.0,
      245.0
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 40,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      320.0,
      320.0,
      320.0
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      540.0,
      540.0,
      540.0
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      600.0,
      600.0,
      600.0
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 35,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      660.0,
      660.0,
      660.0
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 33,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 49,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 51,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "TBM Table 2 (phoenix.js TABLE2_MERGING_TAPER_BY_WIDTH) (printed cell governs)",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "TBM prints 1/3 L at a 12-ft lane, not at the shoulder width",
    "buffer": "0 ft both ends, TBM publishes no buffer table (phoenix.js BUFFER_POLICY; LOOKUP.bufferSpace)",
    "sign_spacing": "sign gap = L (TBM Note 2 / Ch.6 p.52: Distance = L (phoenix.js ADVANCE_SIGN_SPACING). Above 55 mph arizona applies (falls_back_to).)",
    "taper_spacing": "TBM Table 2: taper spacing = 1 x S. Cones only are capped at 25 ft (footnote *). No tangent column - federal 2xS (phoenix.js DEVICE_SPACING)",
    "tangent_spacing": "TBM Table 2: taper spacing = 1 x S. Cones only are capped at 25 ft (footnote *). No tangent column - federal 2xS (phoenix.js DEVICE_SPACING)",
    "departure_spacing": "TBM Table 2: taper spacing = 1 x S. Cones only are capped at 25 ft (footnote *). No tangent column - federal 2xS (phoenix.js DEVICE_SPACING) (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "TBM Table 2: taper spacing = 1 x S. Cones only are capped at 25 ft (footnote *). No tangent column - federal 2xS (phoenix.js DEVICE_SPACING)"
   },
   "device_gates": [],
   "ta_overrides": [
    "_source",
    "ta-10",
    "ta-11",
    "ta-15",
    "ta-18",
    "ta-22",
    "ta-23",
    "ta-24",
    "ta-25",
    "ta-26",
    "ta-3",
    "ta-30",
    "ta-30r",
    "ta-33",
    "ta-6"
   ],
   "not_modelled": [
    "Above 55 mph every numeric driver comes from arizona.json (falls_back_to): taper, sign spacing (abc, 60-65 frozen), 40/80 device spacing, no min-device floor. The TBM cone cap (25 ft at any speed) is not carried above 55 because arizona has none; it bites only with --device-class cone.",
    "Sign spacing 'L' still applies at every lane width at or below 55 mph. phoenix.js refuses off Table 2's 10/11/12-ft grid and hands off to the state layer; the engine's falls_back_to keys on speed only.",
    "Sign size 36x36 inside the metro (phoenix.js SIGN_SIZE :557-586): not carried; the BOM counts panels, not sizes.",
    "TA-10 KEEP RIGHT trap (R4-7a x3 + R4-8a x1), centreline panel run and flag trees x2 (phoenix.js KEEP_RIGHT_TRAP; ELEMENT_MANIFESTS ta-10): no device type or asset; the reference does not emit them either.",
    "Below 25 mph phoenix.js refuses sign spacing and device spacing and hands both to the state layer (arizona, federal Table 6B-1 urban-low: 100 ft). The estimator keeps Phoenix Distance = L there (80 ft at 20 mph); its falls_back_to hands off above a speed only."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "pennsylvania",
   "name": "Pennsylvania",
   "group": "onboarded",
   "source": "PennDOT Pub 213 (4-22); TCP-Rules origin/main src/data/reference/pennsylvania.js (pa.js) at 92728ca, file last changed 5bb742d 2026-09-14.",
   "citation_edition": "PennDOT Pub 213 (4-22); MUTCD 11th Ed. as adopted by 67 Pa. Code Ch. 212, 56 Pa.B. 453 (eff. 2026-01-17) (pa.js:4, 16-18, 82-90, 192-200). Pub 213 (4-22) predates the 11th-Ed adoption; reissue pending.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 65.0,
     "L_shoulder_ft": 45.0,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 59,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 53,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 125.0,
     "L_shoulder_ft": 85.0,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 51,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 110.0,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 48,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 47,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 46,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 45,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "Pub 213 p.37 master chart, shifting taper printed at a 12-ft offset: 65 / 90 / 125 / 160 / 270 / 300 / 330 / 360 / 390 / 420 ft at 25-70 mph (pa.js SHIFTING_TAPER_TABLE :278-290). Above 70 mph the 70 row applies (nearestSpeed clamp, pa.js:1911-1912).",
    "L_shoulder": "Pub 213 p.37 shoulder-taper column, 55 mph row: 220 ft (pa.js SHOULDER_TAPER_TABLE :293-304)",
    "buffer": "MUTCD Table 6B-2 (REQUIRED upstream only, Distance E (pa.js:229-258, 1775-1804); downstream buffer 0 (pa.js:1806-1809))",
    "sign_spacing": "Pub 213 p.37 master chart (ranges 100-200 urban 25-35 / 350-500 urban 40-55 / 500-800 rural; minimum priced, SME-OPEN OQ-2) row 'urban-high'",
    "taper_spacing": "Pub 213: 1xS taper / 2xS tangent (pa.js:370-395, 1964-1972)",
    "tangent_spacing": "Pub 213: 1xS taper / 2xS tangent (pa.js:370-395, 1964-1972)",
    "departure_spacing": "Pub 213: 1xS taper / 2xS tangent (pa.js:370-395, 1964-1972) (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "Pub 213: 1xS taper / 2xS tangent (pa.js:370-395, 1964-1972)"
   },
   "device_gates": [
    {
     "when": {
      "gt_hours": 72
     },
     "device": "drum",
     "modality": "shall",
     "source": "Pub 213 GN C-1 p.16 / GA 11-A note 2 p.110 ('For operations greater than 72 hours, long-term devices shall be used')"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-11",
    "ta-18",
    "ta-21",
    "ta-22",
    "ta-23",
    "ta-24",
    "ta-3",
    "ta-30",
    "ta-30r",
    "ta-33",
    "ta-4",
    "ta-5",
    "ta-6"
   ],
   "not_modelled": [
    "ta-11: PATA 111/205 cap the activity area at 250 ft [PATA 111 note 3 p.194] - a validator, not priced. The fixed 50-ft buffer IS priced (ta_overrides.ta-11.buffer).",
    "Freeway right-side-only alternative (right side + 2 PCMS at 1/2 C and 1/2 D, GN D-12) is not priced; the dual-side option is (pa.js:1647-1648, 2587). SME-OPEN: whether the single-side alternative (signs on the right plus 2 mandatory message boards) is the default."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "virginia",
   "name": "Virginia",
   "group": "onboarded",
   "source": "VDOT VWAPM v11.0 (Jan 2026); TCP-Rules origin/main @ 92728ca, src/data/reference/virginia.js",
   "citation_edition": null,
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 130,
     "L_half_ft": 100.0,
     "L_shoulder_ft": 30,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 64,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180,
     "L_half_ft": 140.0,
     "L_shoulder_ft": 40,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 67,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 250,
     "L_half_ft": 190.0,
     "L_shoulder_ft": 60,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 73,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320,
     "L_half_ft": 240.0,
     "L_shoulder_ft": 80,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 40,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540,
     "L_half_ft": 540.0,
     "L_shoulder_ft": 120,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 48,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600,
     "L_half_ft": 600.0,
     "L_shoulder_ft": 140,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 50,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660,
     "L_half_ft": 660.0,
     "L_shoulder_ft": 150,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 53,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 1000,
     "L_half_ft": 750.0,
     "L_shoulder_ft": 160,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 62,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 1000,
     "L_half_ft": 1000.0,
     "L_shoulder_ft": 180,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 64,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "VWAPM v11.0 Table 6P-V7 p.148 (= 6B-V5). 0.75*W*S^2/60 below 45 mph; W*S from 45, 200-ft floor (Note 5); 750 ft at 60 and 1000 ft at 65-70 for W >= 10 (Notes 2-3). S = existing limit (Note 6). Column keyed to lane width; the 11-ft column is the Note 1 formula for an in-between width, rounded up to 10 ft (virginia.js:529-550 SHIFTING_TAPER_TABLE, 749-788 TABLE_6P_V7). Lane shifts out of VA scope\u2026",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "VWAPM Table 6P-V4 (MANDATORY (VWAPM 6B.06 para 09; TTC-16.0 note 8 / TTC-42.0 note 1f))",
    "sign_spacing": "VWAPM Table 6P-V3, min of range (virginia.js:280-316 ADVANCE_WARNING_SIGN_SPACING, LOOKUP.signSpacing 3822-3955) row 'divided non-limited >=50, no upper bound (Table 6P-V3 minimum; 46-49 rounds up to this row)'",
    "taper_spacing": "VWAPM Table 6P-V8 (virginia.js:596-617 DEVICE_SPACING_TABLE, 1014-1033 TABLE_6P_V8)",
    "tangent_spacing": "VWAPM Table 6P-V8 (virginia.js:596-617 DEVICE_SPACING_TABLE, 1014-1033 TABLE_6P_V8)",
    "departure_spacing": "VWAPM Table 6P-V8 (virginia.js:596-617 DEVICE_SPACING_TABLE, 1014-1033 TABLE_6P_V8) (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "VWAPM Table 6P-V8 (virginia.js:596-617 DEVICE_SPACING_TABLE, 1014-1033 TABLE_6P_V8)"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-26",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [],
   "onboarding_check": null
  },
  {
   "jurisdiction": "maryland",
   "name": "Maryland",
   "group": "onboarded",
   "source": "MdMUTCD 2011 (Complete rev4) + MDOT SHA Book of Standards MD 104.xx; TCP-Rules origin/main src/data/reference/maryland.js (last changed 46dacc5, 2026-09-14).",
   "citation_edition": "MdMUTCD 2011 Edition, Complete rev4 (ModDate 2025-07-08), on the MUTCD 10th Ed (2009) base. No 11th-Ed MdMUTCD exists. rev4 was diffed against the superseded print on 2026-09-14: no section text, table value or modality differs (TCP-Rules origin/main src/data/reference/maryland.js:127-137, 167). Cite Table 6C-1 (sign spacing), Table 6C-2 (buffer), Table 6C-3 (taper types), Table 6C-4 (L formula) and Figure 6H-x. The merging-taper, sign-spacing and buffer lines print the MD table names. Some engine lines still print federal 11th-Ed names (the governing figure 'Fig 6P-xx', '6B.08'); an MDOT SHA plan reviewer reads the MD equivalents. Mapping: engine 'Table 6B-1' = MD Table 6C-1, '6B-2' = 6C-2, '6B-3' = 6C-3, '6B-4' = 6C-4, 'Fig 6P-33' = Fig 6H-33, 'Fig 6P-10' = Fig 6H-10. On State roads the MD 104.xx Book of Standards sheet governs over MdMUTCD Table 6C-1 (Table 6C-1 Note routes State roads to the SHA sign-spacing chart).",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 95,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      300,
      300,
      300
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 30.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 83,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      300,
      300,
      300
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 35.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 75,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 69,
     "road_type": "rural"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      800,
      700,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 76,
     "road_type": "rural"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      800,
      700,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 77,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      800,
      700,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 80,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      800,
      700,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 82,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      800,
      700,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 86,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MdMUTCD Table 6C-3, 'Shoulder Taper - at least 0.33 L', taken as one third of the merging L at 12 ft: 333 ft at the 1,000-ft freeway floor (TCP-Rules origin/main src/data/reference/maryland.js:1309-1336, 2916-2922). Drawn only where the closed lane is against a shoulder: ta-33 both families, both sides; ta-30r right-lane sheets; NOT the undivided left-lane sheets (ta-30). At 40 mph and below the\u2026",
    "buffer": "MdMUTCD Table 6C-2 (STANDARD ('shall') on State roads, MdMUTCD 6C.06 para 11a)",
    "sign_spacing": "MdMUTCD Table 6C-1 row 'rural'; maryland override (A 500->800, B 500->700, C 500->1100) per MD 104.01-02 41-65 mph row; dimension run 800'/700'/1100' read on MD 104.04-03 and MD 104.03-03",
    "taper_spacing": "MD 104.05 freeway: taper 40 ft, tangent 80 ft in the buffer and 40 ft next to the work, at any speed (TCP-Rules origin/main src/data/reference/maryland.js TA33_FREEWAY_GEOMETRY.deviceSpacing, MD 104.00-09 para 7.2). A TA-33 drum job at 40 mph posted or below is a freeway or a prevailing speed above 40, so the >40 column applies. Drums: MD 104.00-10 para 7.8 allows open-tangent drums up to 500 ft\u2026",
    "tangent_spacing": "MD 104.05 freeway: taper 40 ft, tangent 80 ft in the buffer and 40 ft next to the work, at any speed (TCP-Rules origin/main src/data/reference/maryland.js TA33_FREEWAY_GEOMETRY.deviceSpacing, MD 104.00-09 para 7.2). A TA-33 drum job at 40 mph posted or below is a freeway or a prevailing speed above 40, so the >40 column applies. Drums: MD 104.00-10 para 7.8 allows open-tangent drums up to 500 ft\u2026",
    "departure_spacing": "MD 104.05 freeway: taper 40 ft, tangent 80 ft in the buffer and 40 ft next to the work, at any speed (TCP-Rules origin/main src/data/reference/maryland.js TA33_FREEWAY_GEOMETRY.deviceSpacing, MD 104.00-09 para 7.2). A TA-33 drum job at 40 mph posted or below is a freeway or a prevailing speed above 40, so the >40 column applies. Drums: MD 104.00-10 para 7.8 allows open-tangent drums up to 500 ft\u2026",
    "buffer_tangent_spacing": "MD 104.05 freeway: taper 40 ft, tangent 80 ft in the buffer and 40 ft next to the work, at any speed (TCP-Rules origin/main src/data/reference/maryland.js TA33_FREEWAY_GEOMETRY.deviceSpacing, MD 104.00-09 para 7.2). A TA-33 drum job at 40 mph posted or below is a freeway or a prevailing speed above 40, so the >40 column applies. Drums: MD 104.00-10 para 7.8 allows open-tangent drums up to 500 ft\u2026"
   },
   "device_gates": [
    {
     "device": "drum",
     "when": {
      "road_types": [
       "freeway"
      ]
     },
     "modality": "shall",
     "source": "MD 104.00-10 para 7.4: 'Drums, not cones, shall be used to form the taper on expressways/freeways.'"
    },
    {
     "device": "drum",
     "when": {
      "min_speed": 41
     },
     "modality": "should",
     "source": "MD 104.00-10 para 7.4: 'Drums, not cones, should be used to form the taper on all other roadways having a prevailing travel speed greater than 40 MPH.' Guidance, not Standard; priced as drum because the recommendation is the expected field practice."
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "D position. D = 2,600 ft on the 41-65 and Expressway/Freeway rows, settled at 450 dpi 2026-09-14; the 2,400 ft reading is retracted (TCP-Rules origin/main src/data/reference/maryland.js:527). The engine carries A/B/C only, so the fourth panel is counted but has no position.",
    "TA-33 family is picked by road type. MD 104.04 (divided, uncontrolled): 41-65 row, no taper floor, PV at >=55 mph. MD 104.05 (expressway/freeway): 1000/500/1100 row, 1,000-ft floor, PV at any speed. Pass --road-type freeway for a freeway at 65 mph or below; above 65 only the freeway row exists, and TA-33 takes the freeway family there (TCP-Rules origin/main src/data/reference/maryland.js:2694-2718).",
    "Freeway taper floor is a max(), the engine's flat rule is a set. max(W*S, 1000) (TCP-Rules origin/main src/data/reference/maryland.js:886-896). Harmless at W = 12, where W*S passes 1,000 ft only above 83 mph; wrong for a wider offset.",
    "Open-tangent drums (MD 104.00-10 para 7.8, up to 500 ft apart) are not modelled; para 7.2 is used. Precedence is SME-open (GAP-MD-DRUM-500, TCP-Rules origin/main src/data/reference/maryland.js:936-973).",
    "Divided-highway sign duplication is TRUE (median + outside shoulder) on MD 104.04 and MD 104.05: every advance sign and the G20-2; the arrow board is not duplicated. Settled TRUE 2026-09-14 (MD 104.04-03 at 600 dpi, MD 104.05-07/-08 at 400 dpi), corroborated by OOTS 6-F10 note 2; supersedes the 2026-05-28 research (TCP-Rules origin/main src/data/reference/maryland.js:1591-1619, 2822-2832, 3015-3024). Undivided sheets (ta-30, ta-30r) are single-sided and carry no duplicated rows.",
    "Protection vehicle: work location (on-road vs adjacent) and the MD 104.01-11A duration bands are not modelled, and Maryland publishes no PV position or roll-ahead distance (GAP-MD-PV-POSITION / GAP-MD-RAD). The PV is priced on-road: >=55 mph on every TA, any speed on a freeway (MD 104.01-11A, TCP-Rules origin/main src/data/reference/maryland.js:1024-1075, 2129). ta-33 / ta-30 promote the template's optional TMA (require_devices), so --include-optional does not double it.",
    "TPRS. MD 104.00-18 para 19.2 makes temporary portable rumble strips mandatory when all of daytime flagging by a certified flagger with a STOP/SLOW paddle, a two-lane roadway, duration over 3 hours and a posted limit of 40 mph or more are true, negated when an AFAD is used. This is a real TA-10 line item with no device class in the BOM, so it never appears.",
    "Fourth advance sign axis. Emitted at >=41 mph (and on the freeway row) per the MD 104.01-02 chart. Every MD 104.02/.03/.04/.05 sheet instead columns it by duration (night / >12 hr). A short-term daytime plan drawn to the sheet shows one fewer panel per side, and on a freeway the short column drops the 1500 FT LANE CLOSED panel instead (SME-open, GAP-MD-4TH-SIGN, TCP-Rules origin/main src/data/reference/maryland.js:1530-1589, 2999-3013).",
    "Maryland draws no departure taper on TA-30, TA-30R or TA-33 (a real zero; TCP-Rules origin/main src/data/reference/maryland.js:2245-2250, 2476-2480, 2743-2747, 2910-2914). Table 6C-3's 50-100 ft per lane opened applies only where one is drawn.",
    "No Maryland governing sheet is registered, deliberately. governing_sheets is left unset so the result reports 'declared fallback' rather than claiming a Maryland sheet was extracted. Maryland's own sheets (MD 104.04-03, MD 104.05-07, MD 104.02-09/-10) print word-message panels carrying distance legends - ROAD WORK 1 MILE, RIGHT LANE CLOSED 1500 FT, ONE LANE ROAD 1500 FT - where the federal figures draw symbol panels. The MUTCD codes match; the faces that come off the truck do not.",
    "Validators, not BOM quantities: work-zone speed reduction capped at 10 mph at <=65 mph and 15 mph at 70 mph (6C.01 para 15a; always the text, the old 'flat 10 mph' was a transcription error, TCP-Rules origin/main src/data/reference/maryland.js:172-185); conflicting closures no closer than 1.5 miles last-sign-to-first-sign (MD 104.00-18 para 18.3); flagger never more than 1,000 ft from the advance flagger sign (MD 104.02-09/-10 Note 1); ATSSA the only approved flagger training (6E.01 para 01a); flag-transfer method prohibited on State roads (6C.12 para 02a); minimum 10-ft lane each side of a centered work space (MD 104.02-05); word-message warning diamonds at 60 x 60 in (MD 104.01-13)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "new-jersey",
   "name": "New Jersey",
   "group": "onboarded",
   "source": "NJDOT Standard Construction Details TCD-1..TCD-22 (2016) + Work Zone Safety Set-Up Guide (2023), as encoded in the onboarding rules reference new-jersey.js @ TCP-Rules origin/main 92728ca (SME rulings 2026-08-11; 2026-08-21 written recap pending no-objection).",
   "citation_edition": "MUTCD 11th Edition (2023) \u2014 SME Troy Garver 2026-08-11: 'Yes, we should build to the new one' (edition corrected live by Melody Moyer). NJDOT sheets still cite 2009 / 'PART VI' numbering; that makes the sheets stale, not the edition. No adoption date is encoded (NJ-4). new-jersey.js :98-102, :146-150, :335 (MUTCD_TABLE_NUMBER_MAP).",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 54,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 47,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 325.0,
     "L_half_ft": 162.5,
     "L_shoulder_ft": 108.3,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 42,
     "road_type": "rural"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 40,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "NJDOT TCD-2 (PDF p.104), 'MINIMUM TAPER LENGTH L - FOR LANE WIDTHS', 10/11/12-ft columns (new-jersey.js DETAILS_TAPER_BY_WIDTH :824-834) (printed cell governs)",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "L/3 of the 12-ft merging L (WZSSG p.XI/XII; TCD-8 / TCD-14 dimension L/3). Right-lane-AND-shoulder sheets only (TCD-8 top, TCD-14 top); the left-lane sheets TCD-9 / TCD-15 have none. new-jersey.js :560-563, :587-646. Priced on right-side TA-30R and TA-33.",
    "buffer": "NJDOT TCD-4/8/9/14/15 dimension \"100' MIN.\" BUFFER at every speed. new-jersey.js :887-935, :2788-2799.",
    "sign_spacing": "NJ sign spacing (45+ mph: TCD sheet ladder, fixed positions 500/1,000/1,500/2,640 ft, new-jersey.js :1023-1127; below 45 mph: MUTCD-style road-type buckets, WZSSG p.5 note 6) row 'rural'",
    "taper_spacing": "TCD-2 columns B (taper) = 1.0 x S and D (tangent) = 2.0 x S, tabulated 25-65 mph (new-jersey.js :940-977). Departure taper: B = 1.0 x S along a taper (TCD-2 col B; new-jersey.js :3124, :3159).",
    "tangent_spacing": "TCD-2 columns B (taper) = 1.0 x S and D (tangent) = 2.0 x S, tabulated 25-65 mph (new-jersey.js :940-977). Departure taper: B = 1.0 x S along a taper (TCD-2 col B; new-jersey.js :3124, :3159).",
    "departure_spacing": "TCD-2 columns B (taper) = 1.0 x S and D (tangent) = 2.0 x S, tabulated 25-65 mph (new-jersey.js :940-977). Departure taper: B = 1.0 x S along a taper (TCD-2 col B; new-jersey.js :3124, :3159).",
    "buffer_tangent_spacing": "TCD-2 columns B (taper) = 1.0 x S and D (tangent) = 2.0 x S, tabulated 25-65 mph (new-jersey.js :940-977). Departure taper: B = 1.0 x S along a taper (TCD-2 col B; new-jersey.js :3124, :3159)."
   },
   "device_gates": [
    {
     "device": "drum",
     "when": {
      "min_hours": 48,
      "min_speed": 45
     },
     "modality": "shall",
     "source": "NJDOT WZSSG p.IV (\"Drums shall be used when the planned closure is for 48 continuous hours or more and the posted speed limit is 45 MPH or more\")"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Moving/mobile-op buffer, 70 ft min / 150 ft max ahead of each moving work area (TCD-1 sht 103 GN-12). Stationary operations only here, so it never applies; BDC25T-01 revises the floor to 60 ft and is flagged needs-SME.",
    "Departure taper is 100 ft PER LANE in NJ, so a 2-lane closure runs 200 ft. The engine carries a single downstream_taper_ft and will under-count a multi-lane departure.",
    "ROAD WORK 2 MILES not priced at 60 mph (NJ-15 open); the 2 MILES clause is absent from TCD-4/8/9 (new-jersey.js :1121-1123).",
    "TA-LS lane-shift squeeze, an NJ figure with no federal analog.",
    "NJTA (NJ Turnpike / Garden State Parkway) and PANYNJ are standalone authorities; this file does not apply there (new-jersey.js :104-107, :157-161).",
    "NJ-14: TCD sheets draw breakaway barricades in the merging taper and drums elsewhere, with no duration gate; unreconciled with the WZSSG 48 h / 45 mph drum gate this BOM applies (new-jersey.js :1005-1013)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "new-york",
   "name": "New York",
   "group": "onboarded",
   "source": "NYSDOT Standard Sheets, Book 3 of 4, 619 Work Zone Traffic Control (2026-01-01; errata through 09/01/25): 619-010 and 619-011 sheets 1-2 (approved 12/21/2022, EI 22-033; errata 05/01/2023 and 09/01/2023), 619-302 (approved 12/02/2021, EI 21-028; errata 3 eff. 05/01/2024), 619-402 and 619-504 (approved 12/02/2021 / 04/08/2022; errata 3 eff. 05/01/2024), 619-307 (approved 2025-01-10, EI 25-001/25-002), plus the adopted 2010 NYS Supplement to the MUTCD (17 NYCRR Ch. V, effective 03/16/2011) and TSMI 24-01. SCOPE: NYSDOT / New York State highway system only. STRUCTURAL FINDING, verified in the adopted supplement itself: its Part 6 contains NO Chapter 6C content \u2014 the table of contents runs 6F, 6H (notes for five typical-application figures only) and 6I \u2014 so the taper, buffer and device-spacing numbers here are STANDARD SHEET (construction/design contract) rules, not regulatory MUTCD deviations. The one number the sheets themselves present as regulatory is the advance-warning sign spacing table, which 011-06 labels 'THE SAME AS MUTCD TABLE NY6H-3'; no NY6H-3 appears in the adopted 2010 supplement's table set (it prints NY6H-1 only), so treat that cross-reference as the sheet's own claim. 619-010 General Note 1: the standard sheet details 'REFLECT THE MINIMUM REQUIREMENTS'.",
   "citation_edition": "New York automatically adopts the current national MUTCD under NYS Vehicle & Traffic Law \u00a71680, so the 11th Edition (published 12/19/2023) has been effective in New York since 01/18/2024. The engine's internal table names (6B-1, 6B-2, 6B-3, 6B-4) are therefore the correct FEDERAL citations. But every NYSDOT document a reviewer will open cites 10th-Edition-era numbering, so translate before quoting: NY 'TABLE 6C-2' = federal 6B-2 (longitudinal buffer); NY 'TABLE 6C-3' = federal 6B-3 (taper criteria); NY 'TABLE 6H-4' = federal 6B-4 (taper formulas) \u2014 verified on the superseded sheet 619-11 (approved 09/18/2008, EB 08-036), which prints 'TABLE 6H-4 FORMULAS FOR DETERMINING TAPER LENGTHS / L = WS2/60 (40 MPH OR LESS) / L = WS (45 MPH OR MORE)'; NY 'TABLE NY6H-3' = New York's five-row replacement for federal 6B-1 (advance warning sign spacing), also verified on 619-11. PROVENANCE CORRECTION: both are NYSDOT STANDARD SHEET table labels, not tables in the adopted NYS Supplement. The adopted 2010 Supplement (B-2011Supplement-adopted.pdf) and the draft 2026 Supplement tables (NYS_Supplement_Tables.pdf) were both searched in full and NEITHER contains a Table NY6H-3 or a Table 6H-4; the draft's only Part 6 table is NY6H-1 (sign sizes). The current sheets' footnote '** THIS TABLE IS THE SAME AS MUTCD TABLE NY6H-3' therefore points at NYSDOT's own 2008 sheet lineage, not at a regulatory table a reviewer can open. The only ADOPTED state supplement is the 2010 Edition, written against the 2009 (10th Ed) MUTCD; the 2026 Edition supplement to the 11th Edition exists only as SAPA draft files and TSMI 24-01 is the interim bridge.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 120.0,
     "L_half_ft": 60.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 64,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 200.0,
     "L_half_ft": 100.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 67,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 240.0,
     "L_half_ft": 120.0,
     "L_shoulder_ft": 80.0,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 70,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 80.0,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 74,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 560.0,
     "L_half_ft": 280.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 82,
     "road_type": "rural"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 86,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 680.0,
     "L_half_ft": 340.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 89,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 92,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 97,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "NYSDOT 619-011 Table 011-02 (Taper Lengths & Number of Cones), 10/11/12-ft columns; same cells in Tables 302-02, 402-03 and 504-02 (printed cell governs)",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "619-011 Table 011-02 shoulder group, 50/55/60 mph rows, '8 FT.' column: 160/4/5",
    "buffer": "NYSDOT 619-011 Table 011-03 (shall on the standard sheets; the underlying MUTCD values are Option (may be used))",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "Taper and tangent: 40 ft maximum (619-302 callout 'CONE SPACING NOT TO EXCEED 40 FT. (1 SKIP LINE)'; 619-302 Note 7, short-term active work space; 619-011 Table 011-02 footnote **). Departure: federal ~20 ft (MUTCD 6B.08 para 12); New York publishes none.",
    "tangent_spacing": "Taper and tangent: 40 ft maximum (619-302 callout 'CONE SPACING NOT TO EXCEED 40 FT. (1 SKIP LINE)'; 619-302 Note 7, short-term active work space; 619-011 Table 011-02 footnote **). Departure: federal ~20 ft (MUTCD 6B.08 para 12); New York publishes none.",
    "departure_spacing": "Taper and tangent: 40 ft maximum (619-302 callout 'CONE SPACING NOT TO EXCEED 40 FT. (1 SKIP LINE)'; 619-302 Note 7, short-term active work space; 619-011 Table 011-02 footnote **). Departure: federal ~20 ft (MUTCD 6B.08 para 12); New York publishes none.",
    "buffer_tangent_spacing": "Taper and tangent: 40 ft maximum (619-302 callout 'CONE SPACING NOT TO EXCEED 40 FT. (1 SKIP LINE)'; 619-302 Note 7, short-term active work space; 619-011 Table 011-02 footnote **). Departure: federal ~20 ft (MUTCD 6B.08 para 12); New York publishes none."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "NEW YORK CITY IS OUT OF SCOPE AND IS NOT THIS FILE. NYC DOT operates under its own street-work rules and the NYC Standard Highway Specifications, and NYSDOT's 619 standard sheets do not govern city streets. Running a NYC job against this overlay would apply NYSDOT taper, spacing and signing values that do not legally apply there; nothing in the research covers the NYC regime.",
    "THE NEW YORK STATE THRUWAY AUTHORITY IS A THIRD REGIME AND IS NOT MODELLED. It publishes its own standard sheets on its own revision cycle (thruway.ny.gov/business/contractors/standard-sheets/); a Thruway job priced against this file would carry NYSDOT numbers that the Thruway may not use, and no Thruway sheet was researched.",
    "New York's merging-taper table is two-dimensional \u2014 posted speed x LATERAL SHIFT OF TRAFFIC FLOW PATH, 4 through 12 ft. merging_taper.table_by_width carries the 10/11/12-ft columns (the lane-closure sheets' lane-width index). The 4-9 ft shift columns are not encoded: at those offsets this job falls back to the federal Table 6B-4 formula, which does not snap to New York's 40-ft skip-line increments; at 45 mph New York prints 200/240/280/320/360/400 ft across 4-9 ft where the formula gives 180/225/270/315/360/405. Taper length and the taper device count are both wrong at a 4-9 ft offset.",
    "The lane-closure sheets (619-302 / 619-402 / 619-504) index the same taper table by LANE WIDTH 10/11/12 ft while 619-011 indexes it by LATERAL SHIFT 4-12 ft. The numbers are identical, only the column label differs. This file treats the column key as offset width; a reviewer reading a lane-closure sheet will see it called lane width.",
    "New York halves the active-work-space device spacing to 20 ft center-to-center for INTERMEDIATE-TERM stationary work (619-402 sheet 1 Note 4) and to 20 ft for long-term, against 40 ft for SHORT-TERM (619-302 sheet 1 Note 7). The engine carries one tangent spacing per job and this file encodes the short-term 40 ft, so an intermediate-term or long-term New York job is under-counted through the work space by roughly half \u2014 on a 2,000-ft zone that is about 50 devices.",
    "New York requires transverse channelizing devices inside a long closed shoulder: \"6. CHANNELIZING DEVICES SHALL BE PLACED TRANSVERSELY A MINIMUM OF EVERY 800' AS SHOWN WHEN A PAVED SHOULDER HAVING A WIDTH OF 8' OR GREATER IS CLOSED FOR A DISTANCE GREATER THAN 800'.\" (619-302 Note 6; 619-402 sheet 1 Note 6; 619-307 sheet 1 Note 9 \u2014 NOT 619-307 Note 8, which is the 40-ft active-work-space spacing rule). The engine has no transverse-run concept, so these devices are missing entirely \u2014 a 2,400-ft shoulder closure omits two full transverse rows.",
    "device_spacing_departure returned NOT FOUND. 619-010, 619-011, 619-302, 619-307, 619-402, 619-504 and the NYS Supplement Part 6 were searched and New York publishes no statement specific to device spacing within the downstream/departure taper. New York dimensions that taper at 50-100 ft and draws roughly three cones in it, and carries a general 'CONE SPACING NOT TO EXCEED 40 FT. (1 SKIP LINE)' callout, but neither is departure-taper specific. The federal ~20 ft (6B.08 para 12) is used. If New York's 40-ft callout is in fact the governing value there, this file over-counts the departure taper by about half.",
    "Conflict inside New York's current sheets at 65 mph / 12-ft shift: 619-011 Table 011-02 and 619-302 Table 302-02 print 800/19/20, while 619-402 Table 402-03 and 619-504 Table 504-02 print 800/20/21. 800 ft / 40 ft = 20 skip lines and every other cell is (length/40)+1 devices, so the engine's 40-ft spacing gives 21 devices, the 402/504 reading. Confirm with an NYSDOT SME.",
    "New York's Table 011-03 buffer column has no 60 mph row and Table 011-02's taper grid does on 619-011 but not on 302/402/504. A 60 mph New York job therefore takes a FEDERAL buffer (570 ft) that New York has not printed, and a 720-ft taper that only one of the four sheets carries.",
    "New York's tables stop at 65 mph. Nothing above 65 is New York-specific \u2014 taper, shoulder taper and device floor all leave the published grid \u2014 although 65 is also the maximum posted speed on the New York State highway system, so the gap is largely theoretical. The superseded 2008 sheet 619-11 (approved 09/18/2008, EB 08-036) did carry a 70 mph column in its STANDARD TAPER LENGTHS table \u2014 verified in that sheet \u2014 and is not used.",
    "New York restricts intermediate-term and long-term taper devices to DRUMS or OVERSIZED VERTICAL PANELS (619-402 Table 402-05, 619-504 Table 504-04). The engine has no oversized-vertical-panel class, so those tapers are priced as drums; the two are equal alternates in New York and the unit cost differs.",
    "DEVICE SPACING AMBIGUITY inside New York's own device-application tables. Tables 402-05 and 504-04 give BOTH a 20 FT. and a 40 FT. maximum device-spacing row for 'SHOULDER/MERGING/SHIFTING TAPERS' with identical allowed-device marks, and on 619-402 the 20 FT. cell carries an asterisk pointing to the sheet-1 ACTIVE WORK SPACE note. This file takes the most defensible reading \u2014 40 ft in the taper always, 40 ft in the active work space for short-term, 20 ft in the active work space for intermediate and long term \u2014 but that reading is not printed anywhere. Confirm with an NYSDOT SME before hard-coding.",
    "New York prescribes the advance-warning SIGN LEGEND distances alongside the spacings (Table 011-06 columns XX / YY): AHEAD/AHEAD for both lower urban bands, 1000 FT./AHEAD for urban 45 or more, 1500 FT./1000 FT. for rural, 1 MILE / 1/2 MILE for freeway. The engine emits sign codes and quantities but carries no panel-legend field, so a New York estimate does not say which legend plate to order.",
    "New York fixes work-zone lane widths \u2014 \"1. UNLESS AUTHORIZED BY THE ENGINEER, THE MINIMUM LANE WIDTHS FOR WORK ZONE TRAVEL LANES SHALL BE AS FOLLOWS: FREEWAYS AND/OR EXPRESSWAYS IS 11'. THE MINIMUM LANE WIDTH FOR ALL OTHER TYPES OF ROADWAYS IS 10'.\" (619-010). The engine takes lane width as a caller input and never checks it against a jurisdiction minimum, so an 9-ft lane width would be priced without complaint.",
    "NY-specific BOM lines that are NOT emitted and materially change cost: roll-ahead distances (Table 011-04), positive barrier flare rates (Table 011-05), sign sizes (Tables 402-06 / 504-05), the second protective vehicle (VEH #2, 619-302 note 8, shoulder >= 8 ft) and the New York signs NYR9-11 and NYR9-12. The TA-33 TMIA (Table 011-01) and NYW8-33 are emitted.",
    "LEGAL FORCE CAVEAT, not an engine gap. Every New York value in this file comes from the 619 Standard Sheets, which are a construction/design standard incorporated into NYSDOT contracts, NOT from the adopted MUTCD supplement \u2014 the 2010 NYS Supplement's Part 6 amends only 6F, 6H and 6I and the draft 2026 Supplement only 6F/6G/6H/6L/6N/6O/6P. For non-NYSDOT work, such as a utility operating under a Highway Work Permit, confirm these numbers bind by checking the permit conditions and Standard Specification Section 619.",
    "EDITION WATCH. Book 3 (2026-01-01) is cited. The standard-sheet index also lists 619-010_E3, 619-402_E3 and 619-504_E3 rows dated April-May 2026 and _250501 files effective 05/01/2025; re-check those against the values here. Every numeric driver matches the current printings except the 9-12 ft shoulder-taper columns and the 65 mph device count. The adopted MUTCD supplement is still the 2010 Edition (dot.ny.gov/mutcd), written against the 2009 MUTCD, with the 2026 Edition in SAPA draft; TSMI 24-01 is the interim bridge.",
    "SHOULDER TAPER ABOVE AN 8-FT SHOULDER IS UNDER-READ. The current 619-011 Table 011-02 and 619-302 Table 302-02 print seven shoulder-width columns (<=4, 5-7, 8, 9, 10, 11, 12 FT.) where the superseded 2021 printing had three. This file encodes the <=4 / 5-7 / 8 FT. columns and returns the 8-FT. value for ANY shoulder 8 ft or wider. The wider columns are longer \u2014 at 55 mph the current sheet gives 160/160/160/200/200 ft across 8/9/10/11/12 ft, at 65 mph 200/240/240/280/280 ft, at 60 mph 160/200/200/240/240 ft. A job with a shoulder wider than 8 ft is short on shoulder-taper length and devices. The file's default shoulder width is 8 ft, so a run that does not pass --shoulder-width is unaffected.",
    "619-302 note 9 speed-limit sign is now emitted as one R2-1 on ta-33 (ta_overrides). It covers NYR2-2..NYR2-6 as appropriate; whether the NYR2 family survives TSMI 24-01 is open (new-york.js :2237-2243). The same note is 619-402_E3 Note 8 (intermediate-term, out of scope); it is not on 619-504_E3 or 619-307 (2025-01-10). Not emitted when a regulatory speed limit sign is already present between the 1st and 2nd advance signs \u2014 a site fact the estimate cannot see.",
    "THE DRUM GATE'S TRIGGER IS A PROXY, NOT NEW YORK'S TRIGGER. The restriction itself is verified \u2014 current Tables 402-05 and 504-04 mark only DRUMS and OVERSIZED VERTICAL PANELS as ALLOWED on shoulder/merging/shifting tapers, every cone column blank \u2014 but New York keys it to its own duration words, and 619-010 defines INTERMEDIATE-TERM as 'STATIONARY WORK THAT OCCUPIES A LOCATION MORE THAN ONE DAYLIGHT PERIOD UP TO 3 CONSECUTIVE DAYS, OR NIGHTTIME WORK LASTING MORE THAN 1 HOUR'. The taper drum rule here fires only on duration_hours >= 24, so a two-hour NIGHT job \u2014 which New York calls intermediate-term and which therefore may not be coned in the taper \u2014 is still priced as cones. Under-fires; it never over-fires.",
    "THE 45-55 MPH BAND DEFAULTS TO RURAL BY KERYK MAPPING, NOT BY NEW YORK. New York classifies urban vs rural by the 619-010 land-use test, never by speed, so the boundary had to be chosen. Federal.json sends 45 mph to urban-high (350/350/350); this file sends it to rural (500/500/500). No BOM line moves either way \u2014 no template run is keyed to A/B/C \u2014 only the printed sign spacing.",
    "TA-33 MEDIAN DUPLICATION IS UNSWEPT. Onboarding records 'no median duplication' as untested, not confirmed (new-york.js :2051, :2383). The BOM keeps the federal right + median qty 2 on W20-1, W20-5{s}, W4-2{s} and G20-2; R2-1 and NYW8-33 are priced once. If 619-302 signs one side only, set ta_overrides.ta-33.divided_highway_duplication false.",
    "TA-30 / TA-30R are NOT COVERED by onboarding (619-311 / 619-317 held, new-york.js :2195, :2410). This file prices them from the federal figure with NY drivers; nothing NY-specific is asserted for their sign sets.",
    "New York prints a device count in every taper cell of Table 011-02, equal to (taper length / 40) + 1, and notes it 'CAN BE ADJUSTED AS NECESSARY'. The 40-ft device spacing reproduces every printed count, so no separate minimum is applied."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "north-carolina",
   "name": "North Carolina",
   "group": "onboarded",
   "source": "NCDOT 2024 Roadway Standard Drawings, Division 11 Combined (https://connect.ncdot.gov/resources/Specifications/2024StandardRdwyDrawings/Division%2011%20Combined.pdf), principally RSD 1101.11 Sheets 1-4 'Traffic Control Design Tables', revision 1-24; NCDOT 2024 Standard Specifications for Roads and Structures, Division 11 (Art. 1101-2, 1130-3 Drums, 1135-3 Cones, Section 1140 Sequential Flashing Warning Lights) and Art. 1089-5(C); NCDOT 'Guidelines on the Use of Positive Protection & Mitigation Measures in Work Zones', January 2026. North Carolina does NOT adopt the federal Part 6 value tables as-is: RSD 1101.11 is NC's own table set and is binding through the Standard Specifications and the Roadway Standard Drawings. The buffer table and the advance-warning sign spacing chart REPLACE their federal counterparts; the shifting taper and the channelizing-device spacing MODIFY them; the merging taper defers; the shoulder taper follows onboarding 1/4 L (SME-OPEN vs the RSD's 1/3 L). Onboarding reference: TCP-Rules src/data/reference/north-carolina.js (nc.js, 053ba8b 2026-08-11); onboarding wins where the two differ.",
   "citation_edition": "National MUTCD, edition as adopted by NCDOT, plus the North Carolina Supplement thereto. NCDOT DOES NOT NAME AN EDITION IN EITHER GOVERNING DOCUMENT: 2024 Std. Spec. Section 101 defines the abbreviation verbatim as 'MUTCD _______Manual on Uniform Traffic Control Devices and the North Carolina Supplement thereto' with no edition, and RSD 1101.11 Sheet 4 General Note 1 says only 'REFER TO THE LATEST EDITION OF THE MUTCD.' NCDOT's January 2026 positive-protection guidelines list the 'FHWA Manual on Uniform Traffic Control Devices (MUTCD) 11th Edition' among governing documents, which is the best available evidence that the 11th Edition is the current reference, but it is an inference from a third document and not an NCDOT adoption statement. The Supplement itself could not be retrieved (see not_modelled). PRACTICAL NOTE FOR A REVIEWER: NCDOT's work-zone drawings never cite MUTCD table numbers at all, so do not cite 6B-x to an NCDOT reviewer. Map the engine's internal table names as follows \u2014 Table 6B-1 (advance sign spacing) -> RSD 1101.11 Sheet 4 'Advance Warning Sign Spacing Chart'; Table 6B-2 (longitudinal buffer) -> RSD 1101.11 Sheet 2 'Minimum Longitudinal Buffer Space'; Table 6B-3 (taper length criteria: merging at least L, shifting at least 0.5 L, shoulder at least 0.33 L, one-lane two-way and downstream 50 ft min / 100 ft max) and Table 6B-4 (the formulas L = WS^2/60 below 45 mph and L = WS at 45 mph and above) -> RSD 1101.11 Sheet 1, whose 'Taper Length Criteria for Channelizing Devices in Work Zones' block corresponds to 6B-3 and whose 'Quick Reference - L Distance Table' plus General Note 1 correspond to 6B-4. CHECKED AGAINST THE 11th EDITION ITSELF (mutcd.fhwa.dot.gov/pdfs/11th_Edition/part6.pdf, Section 6B.08, page 775): in the 11th Edition 6B-3 is 'Taper Length Criteria for Temporary Traffic Control Zones' and 6B-4 is 'Formulas for Determining Taper Length'. Do not cite 6B-4 for the criteria - that pairing is 10th-Edition (2009 Table 6C-4) habit; 6K.01 device spacing -> 2024 Std. Spec. Art. 1130-3 (drums) and Art. 1135-3 (cones).",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 31.2,
     "buffer_ft": 85.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 52,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 45.0,
     "buffer_ft": 85.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 61.2,
     "buffer_ft": 120.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 42,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 80.0,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 135.0,
     "buffer_ft": 195.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 150.0,
     "buffer_ft": 240.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 165.0,
     "buffer_ft": 290.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 720.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 345.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2700
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 780.0,
     "L_shoulder_ft": 195.0,
     "buffer_ft": 405.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2700
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "1/4 L per the NC reference (nc.js:168, 324). SME-OPEN: RSD 1101.11 Sheet 1 ('SHOULDER TAPER ... 1/3 L MINIMUM') and RSD 1101.04 Sheet 1 print 1/3 L.",
    "buffer": "RSD 1101.11 Sheet 2 of 4, 'Minimum Longitudinal Buffer Space (Feet)' (minimum - the table is titled 'MINIMUM LONGITUDINAL BUFFER SPACE (FEET)' and RSD 1101.11 Sheet 2 prints no 'shall' or 'should' of its own; its mandatory force comes from 2024 Std. Spec. Art. 1101-1 verbatim, 'Maintain traffic through work zones in accordance with these Specifications, the MUTCD, Roadway Standard Drawings, 23\u2026",
    "sign_spacing": "RSD 1101.11 Sheet 4 Advance Warning Sign Spacing Chart row 'rural'",
    "taper_spacing": "RSD 1101.02 Sheet 3 (<60 mph) / Sheet 4 (>=60 mph) of 19 (divided multi-lane, 1 lane closed) General Note 3: 'PLACE DRUMS IN TAPERS AT THE MAXIMUM SPACING EQUAL IN FEET TO THE POSTED SPEED LIMIT. PLACE DRUMS ALONG THE WORK AREA AT THE MAXIMUM SPACING EQUAL IN FEET TO 2 TIMES THE POSTED SPEED LIMIT.' No low-speed carve-out. 2024 Std. Spec. Art. 1135-3: 'Do not use cones in the upstream taper of\u2026",
    "tangent_spacing": "RSD 1101.02 Sheet 3 (<60 mph) / Sheet 4 (>=60 mph) of 19 (divided multi-lane, 1 lane closed) General Note 3: 'PLACE DRUMS IN TAPERS AT THE MAXIMUM SPACING EQUAL IN FEET TO THE POSTED SPEED LIMIT. PLACE DRUMS ALONG THE WORK AREA AT THE MAXIMUM SPACING EQUAL IN FEET TO 2 TIMES THE POSTED SPEED LIMIT.' No low-speed carve-out. 2024 Std. Spec. Art. 1135-3: 'Do not use cones in the upstream taper of\u2026",
    "departure_spacing": "RSD 1101.02 Sheet 3 (<60 mph) / Sheet 4 (>=60 mph) of 19 (divided multi-lane, 1 lane closed) General Note 3: 'PLACE DRUMS IN TAPERS AT THE MAXIMUM SPACING EQUAL IN FEET TO THE POSTED SPEED LIMIT. PLACE DRUMS ALONG THE WORK AREA AT THE MAXIMUM SPACING EQUAL IN FEET TO 2 TIMES THE POSTED SPEED LIMIT.' No low-speed carve-out. 2024 Std. Spec. Art. 1135-3: 'Do not use cones in the upstream taper of\u2026",
    "buffer_tangent_spacing": "RSD 1101.02 Sheet 3 (<60 mph) / Sheet 4 (>=60 mph) of 19 (divided multi-lane, 1 lane closed) General Note 3: 'PLACE DRUMS IN TAPERS AT THE MAXIMUM SPACING EQUAL IN FEET TO THE POSTED SPEED LIMIT. PLACE DRUMS ALONG THE WORK AREA AT THE MAXIMUM SPACING EQUAL IN FEET TO 2 TIMES THE POSTED SPEED LIMIT.' No low-speed carve-out. 2024 Std. Spec. Art. 1135-3: 'Do not use cones in the upstream taper of\u2026"
   },
   "device_gates": [
    {
     "device": "drum",
     "when": {
      "min_speed": 45
     },
     "modality": "shall",
     "source": "Art. 1135-3(B) (drums required in the taper; cones at 80 ft allowed in tangents; priced all-drum at S/2S per Art. 1130-3, no intermixing)"
    },
    {
     "device": "drum",
     "when": {
      "min_hours": 72
     },
     "modality": "shall (prohibitive)",
     "source": "2024 Std. Spec. Art. 1135-3, p. 11-11 verbatim: 'Do not use cones for longer than 3 consecutive days.'"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "NC defines the taper speed input as 'S = EXISTING POSTED SPEED LIMIT PRIOR TO THE IMPLEMENTATION OF A WORK ZONE SPEED LIMIT REDUCTION' (RSD 1101.11 Sheet 1, Note 1). The estimator takes one speed and cannot tell a pre-reduction posted limit from a reduced work-zone limit, so a job entered at the reduced speed returns a short L, a short buffer and short sign spacing all at once.",
    "RSD 1101.11 Sheet 1 verbatim: 'DO NOT INTRODUCE A MERGING OR SHIFTING TAPER WITHIN A CURVE OF THE ROADWAY.' The estimator has no horizontal-curve geometry, so it cannot detect the violation; in the field this forces the taper to be relocated and usually lengthens the upstream run, adding devices this BOM does not carry.",
    "NC's full-L shifting taper on controlled-access facilities fires only when road_type resolves to 'freeway'. A 55-80 mph controlled-access job resolves to 'rural' from the speed band and is sized at 1/2 L, roughly half the devices NC wants in the shift. The overlay warns on every 55-80 mph rural job; pass --road-type freeway to make it fire.",
    "NC's longitudinal buffer is a floor, not always the built length: RSD 1101.11 Sheet 2 Note 3 requires stopping sight distance to the merge taper, flagger or flashing arrow board and requires the closure to be EXTENDED at the buffer where that sight distance is not achieved. A BOM run at the flat 290 ft (55 mph) will under-count devices on any sight-restricted approach, where the buffer runs out toward the 495 ft SSD value instead. Use --buffer-ft with the as-built length.",
    "The below-45 mph device spacing (20 ft taper / 40 ft tangent) is NC's cone cadence (Art. 1135-3(A)) and the RSD 1101.02 Sheet 1 GN4 two-lane spacing. A below-45 TA-10 job longer than 3 consecutive days trips the Art. 1135-3 cone ban and is priced in drums, still at 20/40 per Sheet 1 GN4. Art. 1130-3 would allow those drums at S / 2S (35 ft / 70 ft at 35 mph); SME-open. TA-30, TA-30R and TA-33 are priced in drums at S / 2S at every speed.",
    "Cone SIZE class is not carried. RSD 1135.01 requires 36-inch cones on freeways and interstates and permits 28-inch as the minimum everywhere else. The estimator has one undifferentiated 'cone' class, so a freeway job returns a cone count at the wrong unit cost and the wrong truck volume.",
    "Skinny drums are a separate North Carolina device class (RSD 1180.01) that may substitute for cones on two-lane work. The estimator has no such class, so a job planned on skinny drums is priced as cones.",
    "Sequential flashing warning lights are not emitted as a BOM line. 2024 Std. Spec. Section 1140 verbatim: 'Drums are the only channelizing device allowed to mount sequential flashing warning lights' and 'The number of lights used in the drum taper shall equal the number of drums used in the taper.' On a nighttime lane closure NC therefore needs one light per drum in the merging taper \u2014 roughly 13 lights on a 55 mph, 12-ft offset merge \u2014 none of which appear in this BOM.",
    "The only minimum device count NCDOT publishes is '5 DRUMS @ 20' SPACING' called out at the 'BEGINNING OF MERGE TAPER' on RSD 1101.02 Sheet 7 of 19 (undivided multi-lane roadway, center lanes closed), revision 1-24. Sheet 7 is the TA-30 configuration. min_devices_in_taper is left null: NC publishes no general floor, and the callout is not priced. Priced, it tightens the first 100 ft of the merge taper from speed-in-feet spacing to 20 ft and adds roughly 3 devices per taper. SME-OPEN: confirm with NCDOT WZTC.",
    "Multi-lane and divided runs follow their governing sheet; TA-10 at >=45 mph does NOT. RSD 1101.02 Sheet 1 of 19 (two-lane two-way flagging / pilot car) General Note 4 asks 40 ft in tapers and shifts and 80 ft in tangents, and Sheet 17 of 19 (portable temporary signals) asks 80 ft in tangents; this file prices S/2S there (SME-open). Sheets 3, 4, 5, 6, 12 and 19 of 19 (multi-lane, divided and ramp lane closures) print the Art. 1130-3 rule (posted speed in feet in the taper, twice the posted speed along the buffer and work area). On a two-lane two-way or portable-signal job at 45 mph or above the drawing wants about 12% more taper devices than this estimate carries at 45 mph, 37% at 55 and 62% at 65.",
    "NC's two-way traffic taper: the NC reference prices TA-10 at 50 ft (nc.js:191), so this file does too (ta_overrides.ta-10.add_segments approach_taper_50). SME-OPEN: nc.js:169 prints '60-100 ft maximum'; RSD 1101.11 Sheet 1 prints '50 - 100 FEET MAXIMUM'.",
    "No deviation on the downstream taper. RSD 1101.11 Sheet 1 verbatim: 'DOWNSTREAM TAPER ...........................................100 FEET MAXIMUM'. MUTCD 11th Ed Table 6B-3 gives the downstream taper as '50 feet minimum, 100 feet maximum' (page 775 of the 11th Edition Part 6), which is the same ceiling. A '100 feet per lane, no ceiling' downstream taper is 10th-Edition (2009 MUTCD Table 6C-4) language and does not appear in the 11th Edition. downstream_taper_ft = 100 therefore matches BOTH NC and federal and needs no adjustment. What is genuinely not modelled is the 50 ft MINIMUM both documents carry: the engine holds a single downstream_taper_ft and cannot take the short end of the range, so a closure taped out at 50 ft is over-counted by roughly 1-3 devices depending on spacing.",
    "The North Carolina Supplement to the MUTCD was never retrieved. It is named as binding in 2024 Std. Spec. Section 101, but NCDOT's Transportation Mobility and Safety link is still titled 'MUTCD (2009 NC Supplement)' and did not resolve to a document, while a January 2026 NCDOT guideline cites the MUTCD 11th Edition. It is unknown whether the current Supplement touches Part 6 at all, or carries taper, buffer or spacing values that would override RSD 1101.11. Nothing from the Supplement is encoded here.",
    "The NCDOT Maintenance/Utility Traffic Control Guidelines (MUTCG) \u2014 the document closest to short-duration utility work \u2014 is published only as scanned image PDFs and was not OCR'd. It may carry maintenance-specific device counts, spacings and short-duration exemptions that differ from the construction-project Roadway Standard Drawings encoded here. OCR it before a utility pilot.",
    "NC's 'L' Distance Table stops at 70 mph and a 12 ft offset, while the buffer table runs to 80 mph. This file runs the printed formula above 70 mph and above a 12 ft offset, which reproduces the table's basis but is not something the drawing explicitly authorizes. Confirm with NCDOT WZTC before quoting a 75-80 mph or wide-offset taper.",
    "No North Carolina TA atlas is mapped: governing_sheets is unset, so the component list in each result is the federal figure's, amended by the ta_overrides from the NC reference. NCDOT's own configurations live on RSD 1101.02 Sheets 1-19 and RSD 1101.04 and have not been mapped to TA numbers.",
    "Charlotte has its own overlay (--jurisdiction charlotte). Raleigh, Durham and Wilmington are not researched; a city-street job there may carry requirements this file does not contain.",
    "RSD 1101.04 Sheet 1 of 2 (shoulder closures on divided facilities, page 32 of the Division 11 Combined PDF) DOES dimension the shoulder taper - both details label it '1/3 L' - and General Note 2 verbatim: '2- PLACE DRUMS IN THE SHOULDER TAPER AT THE MAXIMUM SPACING EQUAL IN FEET TO THE POSTED SPEED LIMIT. THE MAXIMUM SPACING OF DRUMS ALONG THE WORK AREA IS EQUAL IN FEET TO 2 TIMES THE POSTED SPEED LIMIT.' So the RSD prints 1/3 L and 1xS / 2xS spacing on the shoulder-closure sheet; this file uses the NC reference's 1/4 L (SME-open) and the 1xS / 2xS spacing. WHAT IS NOT MODELLED is the floor printed beside it: the same sheet dimensions the shoulder closure taper as '50' MIN.' as well as 1/3 L, and the engine has no minimum on the shoulder taper. At a narrow shoulder or a low speed 1/4 L (this file) or 1/3 L (RSD) falls under 50 ft, and the estimate then runs one or two devices short. It is also unconfirmed whether a separate shoulder taper length applies on controlled-access facilities, where the shifting taper gets its full-L override.",
    "RSD 1101.11 Sheet 2's buffer and sight-distance columns are keyed to DESIGN SPEED ('DESIGN SPEED (MPH)'), while RSD 1101.11 Sheet 1's 'L' table and Sheet 4's sign chart are keyed to POSTED SPEED. This engine has one speed input and feeds the posted speed to all three, so the buffer is read off the design-speed table at a posted-speed row. Design speed is normally equal to or higher than the posted speed, so where they differ this file returns a buffer that is equal to or SHORTER than the one NCDOT intends \u2014 one row low is 50-75 ft at highway speeds, about one device at tangent spacing. Confirm the design speed with NCDOT WZTC on any job where it exceeds the posted speed, and pass --buffer-ft.",
    "NC TA-30/30R/33 sign set follows nc.js SIGN_SEQUENCES (no W20-1); TA-10 keeps W20-1 per nc.js:264. SME-OPEN: TCP-Rules candidate-rules/canonical-migration/*ncdot* (NCDOT SP-11299 'Begin Road Work') emit W20-1 at 4A ON TOP of W20-5/W4-2/W20-5 on TA-30/30R/33 - one more sign per approach than this file. If that is current, drop the W20-1 code_map and add a W20-5{s} add_signs row instead.",
    "Shadow vehicle below 45 mph is not priced: nc.js:329 makes the TMA optional below 45 (roll-ahead only).",
    "TA-10 approach/departure taper devices are length-based at NC taper spacing (20 ft below 45 mph; S at 45+), not a fixed count: 50 ft -> 4 devices below 45 mph.",
    "NC caps a work zone at 2 miles (10,560 ft, nc.js:327); the estimator does not warn above it.",
    "TA-10 device spacing follows 2024 Std. Spec. Art. 1135-3 / 1130-3 (cones 20/40 ft below 45 mph; drums S/2S at 45 mph and above). nc.js publishes no device spacing. The onboarded NC TA-10 rules place cones at 15 ft in every segment up to 45 mph and 40 ft at 55-65 mph: about 45 line devices at 45 mph against this file's 11 (app count mode; 16 under --count-mode mutcd) on a 300-ft zone.",
    "SME-OPEN, TA-30R: the NC TA-30R layout marks the TMA mandatory (nc.js:597); the NCDOT equipment table makes it optional below 45 mph (nc.js:329). Below 45 mph the TMA is priced only under --include-optional."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "delaware",
   "name": "Delaware",
   "group": "onboarded",
   "source": "DE MUTCD Part 6, Delaware Edition, January 2026 (PENDING APPROVAL), per Keryk's 2026-08-25 edition decision (TCP-Rules origin/main src/data/reference/delaware.js:83-97, 337-463; last changed 46dacc5, 2026-09-14). The 2011 DE MUTCD Rev 3 (May 2018) is the edition legally in force; its values are recorded in the warnings, not encoded.",
   "citation_edition": "DE MUTCD, Delaware Edition, January 2026, PENDING APPROVAL, on the 11th-Edition numbering: Table 6B-1 (sign spacing), 6B-2 (buffer), 6B-3 / 6B-4 (tapers), \u00a76K.01 (channelizing spacing), \u00a76K.03 (cones), Figures 6P-10 / 6P-30 / 6P-33, Table 6P-3 (TMA). Encoded on Keryk's call (Connor, 2026-08-25), not an SME ruling (TCP-Rules origin/main src/data/reference/delaware.js:337-463). IN FORCE TODAY: 2011 DE MUTCD Rev 3 (May 2018), 2 DE Admin. Code 2402, 10th-Ed numbering (6C-x, 6F.63, 6H-x). A plan reviewed against the adopted manual cites 6C-x; see the edition warning.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 48,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 42,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 34,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 32,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "Figure 6P-33 / Jan 2026 Table 6B-3: shoulder taper 0.33 L, one third of the merging taper length at W = 12 ft (220 ft at 55 mph) (TCP-Rules origin/main src/data/reference/delaware.js:1793-1810). Trigger: a closed paved shoulder of 8 ft or more (Figure 6P-33 note 3, Guidance); this engine's default shoulder is 8 ft.",
    "buffer": "Figure 6P-33 marks the buffer '(optional)'; not priced (TCP-Rules origin/main src/data/reference/delaware.js:1831-1855).",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; delaware override (A 500->1000, B 500->1500, C 500->2640) per Figure 6P-33 Expressway/Freeway row at every speed (delaware.js:1865-1884)",
    "taper_spacing": "Jan 2026 \u00a76K.01 para 04 (Delaware Revision): taper 1 x speed, tangent 2 x speed, no cap. Guidance, a ceiling (TCP-Rules origin/main src/data/reference/delaware.js:748-775, LOOKUP.deviceSpacing 3740-3760). (device_spacing.by_class.cone)",
    "tangent_spacing": "Jan 2026 \u00a76K.01 para 04 (Delaware Revision): taper 1 x speed, tangent 2 x speed, no cap. Guidance, a ceiling (TCP-Rules origin/main src/data/reference/delaware.js:748-775, LOOKUP.deviceSpacing 3740-3760). (device_spacing.by_class.cone)",
    "departure_spacing": "Jan 2026 \u00a76K.01 para 04 (Delaware Revision): taper 1 x speed, tangent 2 x speed, no cap. Guidance, a ceiling (TCP-Rules origin/main src/data/reference/delaware.js:748-775, LOOKUP.deviceSpacing 3740-3760). (device_spacing.by_class.cone) (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "Jan 2026 \u00a76K.01 para 04 (Delaware Revision): taper 1 x speed, tangent 2 x speed, no cap. Guidance, a ceiling (TCP-Rules origin/main src/data/reference/delaware.js:748-775, LOOKUP.deviceSpacing 3740-3760). (device_spacing.by_class.cone)"
   },
   "device_gates": [
    {
     "when": {
      "night": true,
      "road_types": [
       "freeway"
      ]
     },
     "device": "drum",
     "modality": "shall",
     "source": "Jan 2026 \u00a76K.03 para 03B (Standard; cones prohibited on Interstates and Expressways at night; delaware.js:838-841)"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Delaware requires a lateral buffer of one full travel lane on interstates, freeways and expressways unless temporary traffic barrier separates the work area from the traveled way (2011 Rev 3 \u00a76C.06 para 15, DE Revision). The engine models the longitudinal buffer only and has no lateral-buffer driver, so a Delaware freeway closure without barrier is priced one lane narrower than it is actually built \u2014 the real job gives up an extra lane's width, which moves the device line laterally and can pull a second lane's worth of channelization and an extra shoulder taper into the BOM.",
    "Night cones: the Jan 2026 edition allows retroreflective cones at night off Interstates/Expressways at 25 ft taper / 40 ft tangent (\u00a76K.03 para 03A), and the cone class is priced at that spacing when --night is supplied. The 2011 Rev 3 bans night cones (three exceptions, \u00a76F.64 para 3A-3C) and the 2013 narrow-lane memo allows them at 15 / 20 ft with Traffic Safety approval (TCP-Rules origin/main src/data/reference/delaware.js:776-864).",
    "PCMS shoulder closure: 2011 Rev 3 \u00a76F.60 para 30B asks for six drums or cones ahead of each shoulder PCMS. The reference is silent on whether it survives into the Jan 2026 edition (SME-open). No PCMS line item is emitted.",
    "Jan 2026 \u00a76K.05 para 01 (Delaware Revision, Standard) requires prismatic retroreflective stripes on drums; 2011 Rev 3 \u00a76F.63 para 01B only recommended prismatic sheeting (TCP-Rules origin/main src/data/reference/delaware.js:850-852). The engine has no sheeting grade, so the unit cost is low.",
    "Warning lights on channelizing devices should not be used on state-maintained roads unless approved by DelDOT Traffic (2011 Rev 3 \u00a76F.63 para 10A (DE Revision); Jan 2026 \u00a76K.01 para 07A and \u00a76L.07 para 03A carry it forward, TCP-Rules origin/main src/data/reference/delaware.js:1073-1078). The engine emits no warning-light line item, so nothing is over-counted here, but a Delaware BOM should carry zero warning lights unless DelDOT has approved them and the suppression is not enforced anywhere in this file.",
    "Extension 2 x S past the downstream end of the transition (Jan 2026 \u00a76K.01 para 05, TCP-Rules origin/main src/data/reference/delaware.js:765-767). The engine's departure key is a pitch, not a length: 110 ft of device run at 55 mph is not counted.",
    "No minimum device count per taper: neither edition publishes one (TCP-Rules origin/main src/data/reference/delaware.js:748-775). The first-four-devices-at-25-ft rule implies at least four but never says so.",
    "First four taper devices at no more than 25 ft (Jan 2026 \u00a76K.01 para 04A = 2011 \u00a76F.63 para 08A; TCP-Rules origin/main src/data/reference/delaware.js:757-759). The engine carries one spacing per run, so formula tapers priced at 1 x S above 25 mph run 1-2 devices short; TA-10 fixed 50-ft tapers and night cone tapers already comply.",
    "Taper device pitch in one-lane two-way and downstream tapers: \u00a76B.08 para 12/14 say ~20 ft, \u00a76K.01 para 04 says 1 x S. Open in the reference (GAP-DE-TAPER-DEVICE-SPACING, TCP-Rules origin/main src/data/reference/delaware.js:721). This overlay uses 1 x S on the departure taper; ta-10 prices each 50-ft taper at 4 devices (~20 ft).",
    "ta-33 is pinned to the Expressway/Freeway row (1,000 / 1,500 / 2,640) at every speed via ta_overrides.ta-33.sign_spacing (TCP-Rules origin/main src/data/reference/delaware.js:1865-1884). Placement only; counts are unaffected.",
    "TA-30 centreline device run: Figure 6P-30 note 3 (Standard) puts a second device run on the centre line when only the left lane is closed on an undivided road. The reference records it as not expressible and emits nothing (GAP-DE-TA30-CENTERLINE, TCP-Rules origin/main src/data/reference/delaware.js:2183-2189); not priced here either. The 4S tangent between the two TA-30 tapers is likewise not modelled (2069-2077).",
    "Shifting taper: L is preferred on state-maintained roads (Jan 2026 Table 6B-3 note); this overlay prices 0.5 L. On ta-15 / ta-24 / ta-25 / ta-26 a state-road job is priced at about half the shifting-taper devices DelDOT prefers.",
    "DelDOT Interim Guidance \"Detours and Lane Closures on Interstates, Freeways, or Expressways\" (December 12, 2025) was reached but no driver was extracted from it into this overlay. Any interstate lane-closure or detour constraint it imposes beyond DE MUTCD Part 6 is unmodelled.",
    "Edition: the Jan 2026 Delaware Edition is PENDING APPROVAL with no Register adoption notice; the SME's working copy is the 2011 Rev 3 (TCP-Rules origin/main src/data/reference/delaware.js:337-463). If reviewers hold plans to 2011 Rev 3, the values listed in the device_spacing warning apply instead (SME-open, Delaware Q1)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "federal",
   "name": "Federal MUTCD",
   "group": "federal",
   "source": "MUTCD 11th Ed Part 6 (Dec 2023); src/data/reference/federal.js",
   "citation_edition": null,
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Option, 6B.06 para 11)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "6K.01 para 04 (Guidance)",
    "tangent_spacing": "6K.01 para 04 (Guidance)",
    "departure_spacing": "6K.01 para 04 (Guidance) (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "6K.01 para 04 (Guidance)"
   },
   "device_gates": [],
   "ta_overrides": [],
   "not_modelled": [],
   "onboarding_check": null
  },
  {
   "jurisdiction": "alabama",
   "name": "Alabama",
   "group": "state",
   "source": "ALDOT ETCL 2000 General Traffic Control Plan Notes (700-752, rev 12-1-2025) + ETCL lane-closure detail sheets 2002, 2006, 2008, 2008A, 2010, 2010A, 2024A, 2025A, 2026A (rev 11-19-2025 unless noted) + project-limit sheets 2005/2007/2009/2024/2025/2026 from the ALDOT Traffic Control Detail Library (ETCL, https://www.dot.state.al.us/publications/Design/TrafficControlDetailLibrary.html) + 2026 Std Spec Sections 728 and 740 (740.01: the plans govern over the MUTCD) + Constr Manual Div 700 SG-1",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), adopted by reference. Alabama publishes NO state MUTCD and no state supplement to Part 6. ETCL Note 744 verbatim: 'THE TRANSITION TAPER LENGTH (L) IS SHOWN IN TABLE 6B-4, AND THE BUFFER LENGTH IS SHOWN IN TABLE 6B-2 OF THE MUTCD, PART 6, 11th EDITION.' The engine's internal table names are already 11th Ed, so Table 6B-1 / 6B-2 / 6B-3 / 6B-4 and Figure 6P-x are exactly what an ALDOT plan reviewer reads. No table-name remapping needed.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 51,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 54,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 59,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 64,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 77,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 82,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 86,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 72,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 75,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "ETCL 2006, 2008, 2008A, 2010, 2010A, 2025A, 2026A print 'SHLD. TAPER' = '1/3 L', next to the merging taper L: 220 ft at 55 mph on a 12-ft lane. The plans govern over the MUTCD (Std Spec 740.01).",
    "buffer": "MUTCD Table 6B-2 (Drawn and dimensioned on ETCL 2006/2008/2010 (plans govern, Std Spec 740.01); length per MUTCD Table 6B-2)",
    "sign_spacing": "ALDOT ETCL 2002/2006/2008/2010 ladder row 'rural'",
    "taper_spacing": "Taper: ETCL Note 736, 'CHANNELIZING DRUMS SHOULD BE PLACED ON 25 FOOT INTERVALS THROUGHOUT ALL TAPERS' - a flat 25 ft, not the federal 1xS. Tangent: 50 ft O.C. drawn on every non-freeway sheet (ETCL 2002 '50'' between cones; ETCL 2006 / 2008 / 2008A / 2025A '50' O.C.'); 80 ft O.C. on the freeway/interstate sheets (ETCL 2010 / 2010A / 2026A '80' O.C.'); applied at 60 mph and up as a speed proxy\u2026",
    "tangent_spacing": "Taper: ETCL Note 736, 'CHANNELIZING DRUMS SHOULD BE PLACED ON 25 FOOT INTERVALS THROUGHOUT ALL TAPERS' - a flat 25 ft, not the federal 1xS. Tangent: 50 ft O.C. drawn on every non-freeway sheet (ETCL 2002 '50'' between cones; ETCL 2006 / 2008 / 2008A / 2025A '50' O.C.'); 80 ft O.C. on the freeway/interstate sheets (ETCL 2010 / 2010A / 2026A '80' O.C.'); applied at 60 mph and up as a speed proxy\u2026",
    "departure_spacing": "Taper: ETCL Note 736, 'CHANNELIZING DRUMS SHOULD BE PLACED ON 25 FOOT INTERVALS THROUGHOUT ALL TAPERS' - a flat 25 ft, not the federal 1xS. Tangent: 50 ft O.C. drawn on every non-freeway sheet (ETCL 2002 '50'' between cones; ETCL 2006 / 2008 / 2008A / 2025A '50' O.C.'); 80 ft O.C. on the freeway/interstate sheets (ETCL 2010 / 2010A / 2026A '80' O.C.'); applied at 60 mph and up as a speed proxy\u2026",
    "buffer_tangent_spacing": "Taper: ETCL Note 736, 'CHANNELIZING DRUMS SHOULD BE PLACED ON 25 FOOT INTERVALS THROUGHOUT ALL TAPERS' - a flat 25 ft, not the federal 1xS. Tangent: 50 ft O.C. drawn on every non-freeway sheet (ETCL 2002 '50'' between cones; ETCL 2006 / 2008 / 2008A / 2025A '50' O.C.'); 80 ft O.C. on the freeway/interstate sheets (ETCL 2010 / 2010A / 2026A '80' O.C.'); applied at 60 mph and up as a speed proxy\u2026"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "R2-1 work-zone speed assembly at a MAXIMUM 3-MILE INTERVAL through the project limits (ETCL Note 748; Note 749 covers off-hours cover/remove). The engine emits no R2-1 and has no repeat-by-distance sign mechanism, so a 6-mile Alabama project is short at least 2 R2-1 assemblies per direction.",
    "RA-1 Rebuild Alabama project sign, required on EVERY project on a state route or interstate, right-hand side, removed at completion (ETCL Note 719). Not emitted; every Alabama state-route job is short 1 sign.",
    "RS-2 'WHEN WORKERS ARE PRESENT BEGIN HIGHER FINES' and RS-3 'END HIGHER FINES', posted at the project beginning and end with an R2-1 (ETCL Note 748). Not emitted; every Alabama job is short 2 signs.",
    "shoulder drop-off signing: an edge-of-pavement drop-off >= 3 in requires shoulder drop-off signs every 1/2 mile (ETCL Note 727; Note 728 is the ~2-in-or-less centerline exception). The estimator takes no drop-off depth input, so this conditional sign run is never priced.",
    "ALDOT required sign SIZES supersede the Standard Highway Signs drawings unless the engineer approves otherwise: G20-1 48x24, G20-2 48x24, R2-1 30x36, RS-2 48x60, RS-3 48x48, W20-1 48x48 in (ETCL-2024 Temporary TCP plan sheet, Required Sign Sizes table). The BOM carries sign codes, not sizes, so an Alabama W20-1 is priced at whatever the federal sign line assumes.",
    "Type XI fluorescent-orange reflective sheeting on ALL black-on-orange construction signs (ETCL Note 701; Std Spec Articles 880.02/880.03). This is a unit-cost driver on every orange sign in the BOM and the estimator carries no sheeting grade.",
    "Device spacing OUTSIDE tapers and tangents: 10 ft in radii (ETCL Note 732) and 50 ft protecting completed work not open to traffic (ETCL Note 733). The engine has no radius or completed-work segment, so neither run is counted.",
    "holiday lane-closure blackout, 11:59 PM Dec 23 through 6:00 AM Jan 2, plus other state holidays at the project engineer's discretion (ETCL Note 752). A scheduling cap, not a quantity; the estimator takes no date.",
    "device storage setback: >= 30 ft from the roadway during non-working hours (ETCL Note 702), >= 30 ft from the traveled way for contractor vehicles during working hours (TCP Notes sheet 3 Note 19), and drums shifted to the shoulder edge during non-working hours and peak periods (ETCL Note 735). Operational plan notes with no BOM quantity.",
    "W8 surface-condition signs: conditions running more than 1 mile require signs prior to the condition and at 1-mile increments (ETCL Note 726). No W8 series is emitted and no repeat-by-distance mechanism exists.",
    "Sign mounting: all signs post-mounted where the work period exceeds 4 days, except barricade-mounted ones; temporary supports mount at a 1-ft minimum height (TCP Notes sheet 3 Note 22; ETCL Note 710). The BOM carries no mounting class, so a >4-day Alabama job is priced on the same sign line as a 1-day job.",
    "device gating: crashworthy per NCHRP Report 350 Cat 1-4 (Std Spec 740.02(b)), AFAD and sign stands from ALDOT Department List IV-3, portable rumble strips from List IV-4, pilot car a registered on-road motor vehicle (740.02(e)). TMA: Std Spec 2026 728.02 p.623 sets NCHRP 350 TL-2 at a 45-mph work-zone speed limit and TL-3 at 50 mph or more; 728.03 requires it where item 728-A is in the contract. No TMA is drawn on ETCL 2008/2010 (separate attenuator sheets 2012/2015/2028), so the template TMA stays optional and no test level is emitted.",
    "PTCI regime: a Project Traffic Control Inspector per project, Form C-25 daily inspection plus periodic nighttime inspections, ATSSA Quality Guidelines acceptance (Constr Manual Div 700 SG-1). Labour the BOM does not carry.",
    "ETCL project-limit trains (2002 two-lane; 2005/2007/2009/2024/2025/2026 multilane) are per project, not per closure. Carried as option aldot_project_limits, off by default: on multilane TAs W20-1 x3 and G20-1 per side plus G20-2 at the end; on TA-10 (two-lane sheet) G20-1 per direction and the template G20-2 made required. RS-2 / RS-3 / R2-1 in those trains are covered by the Note 748 entries above.",
    "ETCL Note 736 (25-ft taper interval) names drums and is a 'should'. Drums are the default class for the multilane TAs. On freeways ETCL 2010 GN 2 allows (Option) 36-in cones in tangents by day and 42-in cones at night, with drums required in tapers; this estimate prices the drum layout, which meets the sheet. TA-10 is priced in 36-in cones (Std Spec 740.04).",
    "TA-10 one-lane two-way taper: ETCL 2002 counts one cone per foot of lane width, applied as fixed_count = W. The taper LENGTH (50-100 ft) does not change that count.",
    "Tangent spacing is keyed to speed, not facility: ETCL 2010 draws 80 ft O.C. on freeways/interstates and 50 ft O.C. on every other sheet. The engine has no road-type-keyed tangent, so on TA-33 80 ft applies at 60 mph and up; an interstate posted below 60 mph is priced at 50 ft, which adds devices, and a 60-65 mph divided non-freeway road is priced at 80 ft, which drops devices. TA-10 (ETCL 2002) and TA-30 / TA-30R (ETCL 2006) stay at 50 ft at every speed."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "alaska",
   "name": "Alaska",
   "group": "state",
   "source": "2026 Alaska Traffic Manual Supplement (ATMS) Rev 0, eff. 2026-01-20, over MUTCD 11th Ed (Dec 2023); SSHC 2020 Section 643 as amended by Standard Modifications HSM20-45 (01/02/2024), HSM20-30 and HSM20-39 (stdmods_eng_20.pdf, updated 07/01/25); docs/jurisdictions/alaska/keryk-analysis/alaska-formulas.md (generated 2026-06-01); re-researched 2026-09-23 (reverse-research-2026-09-23/verified-changes.json). SSHC 643 is the contract layer on DOT&PF projects: it makes the buffer, 28-in cones and lane-drop drums requirements there.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023) \u2014 the SAME edition this engine baselines on. The Alaska Traffic Manual = federal MUTCD 11th Ed + the ATMS Rev 0 overlay (AS 28.01.010(d)), so table names map 1:1: 6B-1 sign spacing, 6B-2 SSD/buffer, 6B-3 taper criteria, 6B-4 taper formula, 6P-x typical applications. No 10th Ed translation needed. Alaska moved off the 2016 ATMS (a 10th Ed supplement) on 2026-01-20 \u2014 section and table numbers are 11th Ed (a Table 6C-x cite is the superseded edition), but ATMS 2026 still carries legacy Figure 6H-x references (e.g. the 6B-1 footnote, 6G/6L text); read those as 11th Ed 6P-x. ATMS Rev 0 confirmed current 2026-09-23: live PDF byte-identical (sha1 df62b87a), Adopted Revisions table p.ii reads 'None at this time'. SSHC 2020 (still in force; Std Mods through 07/01/25) cites 10th Ed numbering: its 'Table 6C-2' = 6B-2. MUTCD 11th Ed Rev 1 (Dec 2025) is referenced by DOT&PF (dot.alaska.gov/stwddes/dcstraffic/resources.shtml); Part 6 deltas not yet checked.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (REQUIRED on DOT&PF contracts: SSHC 2020 643-1.03 (Table 6C-2 = 11th Ed 6B-2) unless site conditions prohibit. Option (MUTCD 6B.06 para 11) otherwise.)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "F10: taper 1.0*S and tangent 2.0*S defer (ATMS publishes no replacement for MUTCD 6K.01 para 04). Departure 20 ft per MUTCD 11th Ed 6B.08 para 12 (Guidance, p.776; ATMS silent, so adopted unchanged): downstream taper devices 'at a spacing of approximately 20 feet'.",
    "tangent_spacing": "F10: taper 1.0*S and tangent 2.0*S defer (ATMS publishes no replacement for MUTCD 6K.01 para 04). Departure 20 ft per MUTCD 11th Ed 6B.08 para 12 (Guidance, p.776; ATMS silent, so adopted unchanged): downstream taper devices 'at a spacing of approximately 20 feet'.",
    "departure_spacing": "F10: taper 1.0*S and tangent 2.0*S defer (ATMS publishes no replacement for MUTCD 6K.01 para 04). Departure 20 ft per MUTCD 11th Ed 6B.08 para 12 (Guidance, p.776; ATMS silent, so adopted unchanged): downstream taper devices 'at a spacing of approximately 20 feet'.",
    "buffer_tangent_spacing": "F10: taper 1.0*S and tangent 2.0*S defer (ATMS publishes no replacement for MUTCD 6K.01 para 04). Departure 20 ft per MUTCD 11th Ed 6B.08 para 12 (Guidance, p.776; ATMS silent, so adopted unchanged): downstream taper devices 'at a spacing of approximately 20 feet'."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "AFAD is PROHIBITED in Alaska (ATMS 6L.02). The federal Note 5 AFAD option is dropped from TA-10 output. The engine takes no control-method input, so it cannot reject an AFAD layout: the two-flagger labour line stands, and an AFAD line must not be priced.",
    "Flagger and Worksite Traffic Supervisor certification (SSHC 643-1.04 as amended by HSM20-45, 01/02/2024, stdmods_eng_20.pdf pp.32-33). Flaggers: ATSSA Flagger/Flagging Instructor, LIUNA Flagger/TCT, IMSA WZTTC (IMSA void after 2026-12-31). WTS: ATSSA or LIUNA TCS, IMSA WZTTC (void after 2026-12-31); 4,000 hr. Twice-daily device inspection (ATMS 6D.01A; 643-3.04). The engine returns a flagger COUNT with no certification class, so the labour rate and the WTS line are both missing.",
    "Night flagger illumination is a Standard (federal and ATMS 6N.18.06; Fig 6P-10 note 7 is unrevised federal text). Alaska adds SSHC Table 643-4 (p.415): one >=2,000 W balloon light within 30 ft of each flagger; not required in the SSHC Table 643-1 (p.401) latitude/date window (none south of 61 N; Anchorage Jun 11-Jul 1; Fairbanks May 18-Jul 25). A light is not a BOM device class, so a night TA-10 in Alaska is short two balloon lights on the two-flagger layout.",
    "STOP/SLOW paddle sizing: 24 in wide with 8-in Series C letters on all roads, 18 in / 6-in only on local roads <=25 mph (ATMS 6D.02A; SSHC 643-2.01.16). Hand-signaling without a paddle is prohibited in one-lane two-way operation except for emergency responders and uniformed LEO (ATMS 6D.05.02). Paddles are not line items here, so neither the size nor the prohibition can be enforced from the BOM.",
    "Double-fine-zone signing (ATMS 6G.08; 13 AAC 40.010; 17 AAC 99.010). At minimum, per direction: R16-100 plus the Work Zone Speed Limit assembly (R2-1 + G20-5aP + R2-6aP) at the start (6G.08 05J), R16-101 plus the resumed R2-1 at the end (05K/05L), the assembly repeated at <=2 mi (05N), and R2-6aP on every existing speed sign (05M). Exceptions per 05G. The engine takes no double-fine designation, so it emits none of these: about 6 panels short per direction on a short zone.",
    "ROAD WORK NEXT XX MILES (G20-1) should be installed in advance of long-term stationary zones longer than 2 miles (ATMS 6H.35). Not emitted; a >2-mile Alaska zone is one sign short per approach.",
    "STOP FOLLOW PILOT CAR WHEN GOING YOUR WAY (R16-111) may be posted WITHOUT a flagger on minor side-road approaches during pilot-car hours per an approved TCP (ATMS 6E.04.04A), and pilot-car rigs need a rear-mounted G20-4 at >=5 ft plus a two-way radio (SSHC 643). The engine has no pilot-car mode, so it can neither drop the side-road flagger nor add the R16-111 sign.",
    "Alaska-specific Road Closed family: ROAD CLOSED AVALANCHE AREA (R11-101) and LANE CLOSED (R11-102) on Type 3 barricades at cross-street intersections inside a multi-lane closure (ATMS 6G.04). No asset exists in the sign catalog, so these are never emitted.",
    "device_class prices 28-in cones (SSHC 643-2.01 item 7), which matches the ATMS 6K.04 28-in height for tubular markers on high-speed/night work. Not carried: the tubular-marker 18-in / 2-in minimums, and the Type 3 barricade sign-coverage Guidance (should not exceed 50% of the top two rails / 33% overall, ATMS 6F.02.14).",
    "TMA host vehicle must weigh at least 15,000 lb, maximum per the manufacturer (SSHC 643-2.01.17). The federal ta-33 template does carry a TMA line, but it is optional (Note 4 'may') and prints only under --include-optional; the engine carries no vehicle weight either way, so the 15,000-lb host minimum cannot be checked from the BOM.",
    "High-visibility apparel: ANSI/ISEA 107-2004 (labels per 107-2004 or 107-2010) Class 2 tops (always) and Class E bottoms (at night for all workers, at all times for the WTS, traffic-control staff and flaggers), Level 2 retroreflective (SSHC 643-3.11). Not a BOM class; it is a crew-outfitting line the estimate omits.",
    "Positive protection guidance is elaborated in Alaska \u2014 consider temporary barrier for no-escape zones (tunnels, bridges), long-term (>=2-week) stationary zones, preconstruction operating speeds >=45 mph and overnight roadside hazards; vertical curb is not a substitute and segments must be connected (ATMS 6M.02). Barrier is length-driven and devices[] holds integer counts only, so no barrier run is priced.",
    "Reduced speed zoning routes through DOT&PF P&P 05.05.020 (ATMS 6B.01.17-19A): avoid where practical, <=10 mph reduction preferred, >10 mph only where restrictive features require it. Signed with the Work Zone Speed Limit assembly SPEED LIMIT (R2-1) + WORK ZONE (G20-5aP) + FINES DOUBLE (R2-6aP) (ATMS 6G.08 05H/05I). The engine takes the posted speed as given and emits no work-zone speed-limit assembly, so a reduced-speed Alaska zone is 3 panels short per approach and may be computing tapers off the wrong S.",
    "Table 6B-3's downstream taper range 50-100 ft defers un-amended, and this file keeps the federal 100-ft maximum in downstream_taper_ft, spaced at 20 ft (6B.08 para 12). Alaska publishes no preferred length, so a plan drawn at the 50-ft minimum carries about 3 fewer devices in the departure taper.",
    "Three low-severity ATMS specs carry no BOM line and are flagged nowhere else in this file: the flagger sign shall be removed within 15 minutes if flagging is suspended or ended (ATMS 6H.15.03A); rural side-of-road signs mount min 5 ft to the near pavement edge, post-mounted rural >=7 ft, business/commercial/residential 7 ft (ATMS 6F.02.04-04A); and detour signs in TTC incident management may carry a black legend/border on fluorescent pink (ATMS 6I.02.02, an Option \u2014 a sign face on ta-19/ta-20, not a count). Counts are unaffected; the specifications are not carried.",
    "Default shoulder width (8 ft) could not be verified: no Alaska source (ATMS 2026, SSHC 2020 643, Standard Plans index 2026-03-09) sets one. The federal 8-ft default is kept; it moves only the optional shoulder taper.",
    "Divided-highway sign duplication could not be verified: ATMS 6F.02 para 01 (Guidance, p.180) says right side, para 02 (Option) allows both sides for special emphasis, and no Alaska TA sheet rules either way. The federal Fig 6P-33 two-side posting is kept (TA-33: 6 required signs; 3 if one-side)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "arkansas",
   "name": "Arkansas",
   "group": "state",
   "source": "ARDOT Standard Roadway Drawings TC-1 / TC-2 / TC-3 (eff 08-14-2025), TC-1A / TC-6 (eff 04-09-2026); National MUTCD 11th Ed (2023, Rev.1 Dec 2025) by reference. Local: TCP-Rules/docs/jurisdictions/arkansas/source documents/state/. Only drivers the TC drawings print are set here; everything absent inherits federal.json.",
   "citation_edition": "National MUTCD 11th Ed (2023, Rev.1 Dec 2025), adopted by reference; there is no Arkansas MUTCD or supplement (ARDOT TC-1 (eff 08-14-2025) GN 1: 'MUTCD, latest edition'). The binding ARDOT layer is the TC-series Standard Roadway Drawings: TC-1, TC-2, TC-3 (eff 08-14-2025), TC-1A and TC-6 (eff 04-09-2026); TC-4 / TC-5 (11-07-19) are precast barrier only. Standard Specifications 2014 edition, amended by SS-604-3 (MASH). Revision dates checked against ardot.gov 2026-09-23. Arkansas does NOT purely defer to federal: the TC drawings print their own typical applications with numeric and sign-set deltas. Scope: ARDOT highway-construction drawings; confirm they bind permit/utility work.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 100,
     "road_type": "freeway"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 98,
     "road_type": "freeway"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 98,
     "road_type": "freeway"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 98,
     "road_type": "freeway"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 101,
     "road_type": "freeway"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 100,
     "road_type": "freeway"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 100,
     "road_type": "freeway"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 101,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 101,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "ARDOT TC-3 (eff 08-14-2025) panels A/C: buffer 500' MIN. (taper end to arrow-panel truck)",
    "sign_spacing": "ARDOT TC-3 panel A row 'freeway'; arkansas override (B 1500->1640) per ARDOT TC-3 (eff 08-14-2025) panel A (4-lane divided, short duration): W4-2 1000' before the taper, W20-5 1/2 MILE 1640' further, W20-1 1 MILE 2640' further; no speed or facility-class condition",
    "taper_spacing": "ARDOT TC-3 (eff 08-14-2025) panels A/C: channelizing devices 25' O.C. alongside the work area (panel C labels them TRAFFIC DRUMS); GN 12: tubular markers at 10' O.C. only where space prevents drums.",
    "tangent_spacing": "ARDOT TC-3 (eff 08-14-2025) panels A/C: channelizing devices 25' O.C. alongside the work area (panel C labels them TRAFFIC DRUMS); GN 12: tubular markers at 10' O.C. only where space prevents drums.",
    "departure_spacing": "ARDOT TC-3 (eff 08-14-2025) panels A/C: channelizing devices 25' O.C. alongside the work area (panel C labels them TRAFFIC DRUMS); GN 12: tubular markers at 10' O.C. only where space prevents drums. (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "ARDOT TC-3 (eff 08-14-2025) panels A/C: channelizing devices 25' O.C. alongside the work area (panel C labels them TRAFFIC DRUMS); GN 12: tubular markers at 10' O.C. only where space prevents drums."
   },
   "device_gates": [
    {
     "when": {
      "divided": true,
      "min_days": 2
     },
     "device": "drum",
     "source": "ARDOT TC-3 (eff 08-14-2025) panel C (intermediate to long term, divided): TRAFFIC DRUMS 100' O.C. in the stabilization zone and 25' O.C. at the work area; GN 12: tubular markers only where space prevents drums. Panel A (daytime short duration) draws generic channelizing devices."
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "ARDOT TC-2 GN 7, TC-3 GN 10 (eff 08-14-2025), TC-6 GN 3 (eff 04-09-2026): each trailer arrow panel or PCMS on or next to the shoulder, not behind positive barrier, shall carry conspicuity material and 5 traffic drums on the traffic side; +0..5 drums per shoulder-parked trailer, not emitted (arrow-board placement is not an input).",
    "Project-level signing (ARDOT TC-6 A/B, TC-1A, eff 04-09-2026): WZ-4 'STATE LAW NO HAND-HELD PHONE USE BY DRIVER WORK ZONE' ((2) 78x60 on freeways, (1) 36x54 otherwise); WZ-1 photo-enforced (2, 84x60) only if and where directed by the Engineer (TC-6). 0 per short-term closure; +2-4 panels per construction job.",
    "G20-1 ROAD WORK NEXT XX MILES should be used on jobs over 2 miles (ARDOT TC-3 GN 7, TC-6 GN 2); not emitted.",
    "Work-zone speed reductions only when designated in the plan: 55->45 / 65->55 step-downs with R2-1 + W3-5, extra R2-1 every 1 mile max (ARDOT TC-2 GN 2/3, TC-3 GN 1-3). The estimator takes one speed; not emitted.",
    "Departure taper device spacing is unverifiable: ARDOT prints no downstream-taper spacing; TC-3 panels A/C draw about 4-5 devices over 100 ft (~25 ft), TC-2 panel F about 3, with no written value. The federal fallback (taper spacing S) is kept; 1-3 devices at stake per taper.",
    "TA-10 buffer is unverifiable: ARDOT TC-2 panel E draws no buffer dimension (devices 'extended to a point where they are visible to approaching traffic', note 3). The federal 6B-2 buffer (495 ft @55, 6 devices) is kept as an inference.",
    "Speed-to-road-type mapping is unverifiable: ARDOT publishes no speed-to-road-type table; the TC drawings key on facility type (2-lane / undivided / divided / fully controlled access). The Keryk federal speed bands are kept.",
    "TA-30R buffer is a federal 6B-2 / Fig 6P-33 inference (Table 6B-2 by speed); ARDOT TC-2 panel F draws none, so TA-30R and TA-30 (same panel) leave it optional."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "california",
   "name": "California",
   "group": "state",
   "source": "CA MUTCD 2026 Edition (eff. Jan 18 2026) Part 6 (official 2026-camutcd-2026-6p-a11y.pdf, pages 1346+; 6K at 2026-camutcd-2026-6k-a11y.pdf) + Caltrans 2025 Standard Specifications Sec 12 (updates through 04-20-26) and 2025 Standard Plans T9-T13 (state highways, dated 7-1-25).",
   "citation_edition": "CA MUTCD 2026 Edition, cover-stamped 'FHWA's MUTCD 2023 Edition, as amended for use in California'. It adopts the federal 11th-Ed Part 6 numbering, so this engine's internal table names are already the names a California reviewer reads: Table 6B-1 (sign spacing), 6B-2 (buffer/SSD), 6B-3/6B-4 (taper), Chapter 6P (typical applications), Chapter 6K (channelizing devices). No renaming needed. California-specific tables and figures carry a '(CA)' suffix: 6B-2(CA), 6B-3(CA), 6K-101(CA), 6P-19(CA), C30(CA). The SUPERSEDED CA MUTCD 2014 Rev 9 used 10th-Ed numbering; any legacy CA note citing Table 6C-1 / 6C-2 / Figure 6H-xx is 2014-edition and translates 6C-1 -> 6B-1, 6C-2 -> 6B-2, 6H-xx -> 6P-xx.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 46,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      150,
      150,
      150
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 40,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      250
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 34,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      300,
      300,
      300
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 35,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 33,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 34,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 37,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Option, CA MUTCD 2026 Sec 6B.06 para 11 (11th Ed numbering); federal-identical values and modality.)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "CA MUTCD 2026 Table 6K-101(CA) Maximum Spacing of Channelizing Devices (6K p.1305), Guidance on ALL roads via Sec 6K.01 para 05a (p.1293) and 6P.01 para 08: Taper 20/25/30/35/40/45 ft at 20-45 mph, then 50 ft at 50-75 mph = min(S, 50). Tangent 2S up to 50 mph, then 100 ft at 55-75 mph = min(2S, 100). Footnote *: 'Maximum channelizing device spacing for all speeds on downstream tapers is 20 feet'\u2026",
    "tangent_spacing": "CA MUTCD 2026 Table 6K-101(CA) Maximum Spacing of Channelizing Devices (6K p.1305), Guidance on ALL roads via Sec 6K.01 para 05a (p.1293) and 6P.01 para 08: Taper 20/25/30/35/40/45 ft at 20-45 mph, then 50 ft at 50-75 mph = min(S, 50). Tangent 2S up to 50 mph, then 100 ft at 55-75 mph = min(2S, 100). Footnote *: 'Maximum channelizing device spacing for all speeds on downstream tapers is 20 feet'\u2026",
    "departure_spacing": "CA MUTCD 2026 Table 6K-101(CA) Maximum Spacing of Channelizing Devices (6K p.1305), Guidance on ALL roads via Sec 6K.01 para 05a (p.1293) and 6P.01 para 08: Taper 20/25/30/35/40/45 ft at 20-45 mph, then 50 ft at 50-75 mph = min(S, 50). Tangent 2S up to 50 mph, then 100 ft at 55-75 mph = min(2S, 100). Footnote *: 'Maximum channelizing device spacing for all speeds on downstream tapers is 20 feet'\u2026",
    "buffer_tangent_spacing": "CA MUTCD 2026 Table 6K-101(CA) Maximum Spacing of Channelizing Devices (6K p.1305), Guidance on ALL roads via Sec 6K.01 para 05a (p.1293) and 6P.01 para 08: Taper 20/25/30/35/40/45 ft at 20-45 mph, then 50 ft at 50-75 mph = min(S, 50). Tangent 2S up to 50 mph, then 100 ft at 55-75 mph = min(2S, 100). Footnote *: 'Maximum channelizing device spacing for all speeds on downstream tapers is 20 feet'\u2026"
   },
   "device_gates": [
    {
     "device": "cone_28in",
     "when": {
      "road_types": [
       "freeway"
      ]
     },
     "modality": "shall",
     "source": "CA MUTCD 2026 Sec 6K.03 para 01 (6K p.1294-1295)"
    },
    {
     "device": "cone_28in",
     "when": {
      "min_speed": 45
     },
     "modality": "shall",
     "source": "Keryk reading of CA MUTCD 2026 Sec 6K.03 para 01 \"other high-speed highways\" (undefined; 45 mph threshold is Keryk's)"
    },
    {
     "device": "cone_28in",
     "when": {
      "night": true
     },
     "modality": "shall",
     "source": "CA MUTCD 2026 Sec 6K.03 para 01 (6K p.1294-1295)"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-11",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Downstream taper: Table 6B-3(CA)'s 50 ft is the minimum column (footnote *** caps the maximum at 100 ft; 6B.08 para 12: 50 min / 100 max). ta-33 takes the 100 ft drawn on CA Fig 6P-33 panel A ('100 ft (optional)'), priced only under --include-optional, at 20-ft spacing (Table 6K-101(CA) footnote *). ta-30r follows panel B, which draws no downstream taper, so none is priced. ta-10 fixes its downstream taper at 6 devices.",
    "Buffer on downgrades, Table 6B-2(CA): the engine has no grade input and no per-grade buffer column, so every California estimate uses the level Table 6B-2 value. On a sustained downgrade the buffer is about 1 to 22 percent longer (e.g. 55 mph -6% = 553 vs 495 ft; 70 mph -9% = 891 vs 730 ft) and the buffer device run is under-counted by roughly that fraction.",
    "C30(CA) LANE CLOSED repetition: required ('shall') every 2,000 ft only on TA-37 (Fig 6P-37 Note 10, official 6P p.1426), which has no template here; optional on CA Fig 6P-33 (p.1418) and Fig 6P-18. State highways: every 1,000 ft on freeways (2025 Std Plan T10 Note 5), 500-1,000 ft on conventional highways (T11/T13 Note 5). Not emitted: this overlay covers local-agency work, where the sign is optional on the figures served. A state freeway TA-33 at 2,000 ft is short about 2 C30(CA).",
    "The CA MUTCD 2026 TA figures served here use the federal W/G codes. California-only codes (C30(CA), C45(CA), C24(CA), C30A(CA), SC9/SC13/SC19/SC20(CA)) appear only as CA additions, and the engine emits them only where an option adds them. Caltrans Standard Plan sheets were not checked for code differences.",
    "California-original and California-variant typical applications: TA-101(CA) (Right Lane and Bike Lane Closure on Far Side of Intersection, Fig 6P-101(CA)) and TA-102(CA) (Lane Shift on Road with Low Traffic Volumes, Fig 6P-102(CA)) have no templates in this engine, and neither do ta-19 or ta-51. A California ta-24 run returns the federal Fig 6P-24 bill of materials, not the Fig 6P-24(CA) variant.",
    "Std Spec Sec 12-3.01A device crashworthiness: California codifies Category 1 (under 100 lb, self-certified: cones, drums, delineators, channelizers), Category 2 (under 100 lb, on the FHWA acceptable-hardware list, labeled: barricades, portable sign supports) and Category 3 (100 lb and over, on the Authorized Material List: crash cushions, attenuator vehicles, temporary barriers, Type K railing). The engine carries a single device_class per job and no category validator, so it cannot check a mixed-device bill. Sec 12-3.01A(1) also forbids mixing channelizing-device types on the same alignment, which nothing here enforces. Sec 12-3.01A(2) also widens the definition of 'orange' for devices and signs to orange, red-orange, fluorescent orange or fluorescent red-orange; the engine carries no device colour attribute, so nothing checks it.",
    "Type K temporary railing sunset, Std Spec Sec 12-3.20C(2)(c): 'Do not install Type K temporary railing on projects advertised after December 31, 2026', minimum 160 ft where used. The engine emits no longitudinal-barrier line item and has no advertisement-date input, so this hard date is never surfaced.",
    "COZEEP / MAZEEP enhanced CHP enforcement: a California-only paid-enforcement program recommended on reduced-speed zones. It is a labour and agreement line, not a material, and is not priced here. The program particulars (Construction Manual 4-12, CPD 21-23, Pocket Guide) are not verified against Caltrans Construction Manual 4-12.",
    "State highways (Caltrans 2025 Standard Plans T9-T27, which CA MUTCD 6B.08 para 16 says 'should be used' there): T9 Table 1 = Table 6K-101(CA) (encoded). T9 Table 3 advance sign spacing differs from CA 6B-1 at 30-45 mph (Urban >25-40 mph 250/250/250, Urban >40 mph 350/350/350, vs CA 150/200/250/300). T10 Note 10 drops the median sign set when at least half the lanes stay open (6 -> 3 advance signs on a 1-of-2 TA-33). T10 Note 6 adds 3 transverse cones across each closed lane at each taper end and every 1,000 ft (about +9 on a 2,000-ft state freeway TA-33). None of this is in this file: the engine has no state-highway vs local-agency input. This overlay covers local-agency work. T13 (flagging on two-lane conventional highways): G20-2 and W3-4 required, not optional; flagging taper 100-150 ft vs the 50-100 ft one-lane two-way taper priced here.",
    "The CA MUTCD 2026 'Urban (high speed) 50 mph or more' row at 350/350/350 is unreachable through the speed bands above, which send 50-59 mph to the rural row at 500. See the speed_to_road_type warn; --road-type urban-high recovers it.",
    "Table 6K-101(CA) Conflict column (S/2, max 25 ft) is California-only. It applies on intermediate and short-term projects with no pavement markings or with markings that conflict with the devices. The engine has no marking-state input, so it is not modelled.",
    "TA-11: California republishes Fig 6P-11 with no California-specific Part 6 text found. Caltrans Construction Manual 4-12 was not checked for a TA-11 restriction. The ta-11 template runs against California on the federal figure with no California qualifier.",
    "shoulder_width_ft = 8 is the federal default carried forward, not a California-sourced value. Neither CA MUTCD 2026 Part 6 nor Std Plan T9 publishes a default; the 8-ft figure in CA Fig 6P-33 Note 3 is the trigger for closing a shoulder, not a default width. Pass --shoulder-width on real jobs.",
    "Transverse cones: CA Fig 6P-37 Note 8 (Standard, TA-37 only) places 3 cones or 2 Type II barricades across the closed lane at the end of each merging taper and every 2,000 ft. TA-37 has no template here, and the rule is not on CA Fig 6P-33, so there are none on ta-33.",
    "Rumble strip arrays behind the ta-10 'rumble_strips' option (CA Fig 6P-10 Note 15) are not a line item: the option adds only the two C45(CA) signs."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "chandler",
   "name": "Chandler",
   "group": "state",
   "source": "Chandler EDSM Ch.7 (Jan 2025) + Phoenix TBM via SME ruling 2026-09-01; TCP-Rules origin/main src/data/reference/chandler.js (cites checked 2026-09-23 against 92728ca)",
   "citation_edition": null,
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      125.0,
      125.0,
      125.0
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 50,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 30,
     "L_ft": 185.0,
     "L_half_ft": 92.5,
     "L_shoulder_ft": 61.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      185.0,
      185.0,
      185.0
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      245.0,
      245.0,
      245.0
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 40,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      320.0,
      320.0,
      320.0
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      540.0,
      540.0,
      540.0
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      600.0,
      600.0,
      600.0
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 35,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      660.0,
      660.0,
      660.0
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 33,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 49,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 51,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "TBM Table 2 (phoenix.js TABLE2_MERGING_TAPER_BY_WIDTH) (printed cell governs) [chandler hands off to phoenix at every speed]",
    "L_half": "MUTCD 6B.08: shifting taper = L/2 [chandler hands off to phoenix at every speed]",
    "L_shoulder": "TBM prints 1/3 L at a 12-ft lane, not at the shoulder width [chandler hands off to phoenix at every speed]",
    "buffer": "0 ft both ends, TBM publishes no buffer table (phoenix.js BUFFER_POLICY; LOOKUP.bufferSpace) [chandler hands off to phoenix at every speed]",
    "sign_spacing": "sign gap = L (TBM Note 2 / Ch.6 p.52: Distance = L (phoenix.js ADVANCE_SIGN_SPACING). Above 55 mph arizona applies (falls_back_to).) [chandler hands off to phoenix at every speed]",
    "taper_spacing": "TBM Table 2: taper spacing = 1 x S. Cones only are capped at 25 ft (footnote *). No tangent column - federal 2xS (phoenix.js DEVICE_SPACING) [chandler hands off to phoenix at every speed]",
    "tangent_spacing": "TBM Table 2: taper spacing = 1 x S. Cones only are capped at 25 ft (footnote *). No tangent column - federal 2xS (phoenix.js DEVICE_SPACING) [chandler hands off to phoenix at every speed]",
    "departure_spacing": "TBM Table 2: taper spacing = 1 x S. Cones only are capped at 25 ft (footnote *). No tangent column - federal 2xS (phoenix.js DEVICE_SPACING) (no departure-taper column published; taper spacing used) [chandler hands off to phoenix at every speed]",
    "buffer_tangent_spacing": "TBM Table 2: taper spacing = 1 x S. Cones only are capped at 25 ft (footnote *). No tangent column - federal 2xS (phoenix.js DEVICE_SPACING) [chandler hands off to phoenix at every speed]"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-11",
    "ta-15",
    "ta-18",
    "ta-21",
    "ta-22",
    "ta-23",
    "ta-24",
    "ta-3",
    "ta-30",
    "ta-30r",
    "ta-33",
    "ta-5",
    "ta-6"
   ],
   "not_modelled": [
    "Contractor identification sign: priced as SPECIAL x1 on the primary approach of every TA. Not modelled: opposing-direction copy and distance (CH-SIGN-POS), size (CH-SIGN-SIZE); colour priced black on orange (CH-5 open).",
    "EDSM p.196: cones daylight only; replaced with barricades or vertical panels after dark. Vertical panels are the default; a supplied --device-class cone is not switched at night.",
    "Flag tree (1 per direction, EDSM p.173), R4-7a / R4-8a KEEP RIGHT / LEFT, officer-instead-of-flagger (CH-2): no device type or asset.",
    "Flags on every sign (EDSM p.159): a crew task, not a plan element (CH-1 closed 2026-09-11)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "charlotte",
   "name": "Charlotte",
   "group": "state",
   "source": "City of Charlotte Work Area Traffic Control Handbook (WATCH), 2014, as encoded in TCP-Rules origin/main src/data/reference/charlotte.js (clt.js) at 92728ca, file last changed 3168b97 2026-09-02. Standalone overlay: charlotte.js publishes a value for every speed (its >= 40 mph tier is open-ended), so no falls_back_to north-carolina is set. NC's W20-1 removal and NC's 200-ft downstream buffer are deliberately NOT carried over.",
   "citation_edition": "Charlotte WATCH 2014 (clt.js:19-27, 32-58). The 2026 WATCH exists and is NOT extracted: Diagram 9 -> 9A (TA-10) and Diagram 16 -> 16A (TA-33) were revised, contents unread (clt.js:59-79). Every value here is 2014.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 100.0,
     "L_half_ft": 50.0,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 20.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 116,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 200.0,
     "L_half_ft": 100.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 71,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 200.0,
     "L_half_ft": 100.0,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 71,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 350.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 83,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 350.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 83,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 350.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 83,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 55,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 350.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 83,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 60,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 350.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 83,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 65,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 350.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 83,
     "road_type": "urban-high"
    }
   ],
   "sources_at_55": {
    "L": "WATCH D13 taper = A for a right-lane TA-33 (clt.js:893-905)",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "WATCH D13 buffer = A for a right-lane TA-33 (clt.js:856-869)",
    "sign_spacing": "WATCH Note 1 sign spacing (clt.js:831-837) row 'urban-high'",
    "taper_spacing": "WATCH cone spacing by tier: 20 ft <=25 / 40 ft 30-35 / 40 ft >=40, unsplit (clt.js coneSpacingByTier, clt.js:606-610, 796-800). At <=25 mph 20 ft is the only printed spacing, so it applies to taper and tangent. At >=30, 20 ft taper / 40 ft tangent, as the D16/D18 Charlotte candidate rules place them.",
    "tangent_spacing": "WATCH cone spacing by tier: 20 ft <=25 / 40 ft 30-35 / 40 ft >=40, unsplit (clt.js coneSpacingByTier, clt.js:606-610, 796-800). At <=25 mph 20 ft is the only printed spacing, so it applies to taper and tangent. At >=30, 20 ft taper / 40 ft tangent, as the D16/D18 Charlotte candidate rules place them.",
    "departure_spacing": "WATCH cone spacing by tier: 20 ft <=25 / 40 ft 30-35 / 40 ft >=40, unsplit (clt.js coneSpacingByTier, clt.js:606-610, 796-800). At <=25 mph 20 ft is the only printed spacing, so it applies to taper and tangent. At >=30, 20 ft taper / 40 ft tangent, as the D16/D18 Charlotte candidate rules place them. (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "WATCH cone spacing by tier: 20 ft <=25 / 40 ft 30-35 / 40 ft >=40, unsplit (clt.js coneSpacingByTier, clt.js:606-610, 796-800). At <=25 mph 20 ft is the only printed spacing, so it applies to taper and tangent. At >=30, 20 ft taper / 40 ft tangent, as the D16/D18 Charlotte candidate rules place them."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "2026 WATCH not extracted (clt.js:59-79). D9A (TA-10) and D16A (TA-33) are revised; re-verify every value when it is.",
    "Sign codes: WATCH prints W21-4 for ROAD WORK AHEAD - a source typo, priced as W20-1 (clt.js:12-13, 52-57). W9-3L/R replaces W20-5L/R (clt.js:11, 412-434).",
    "TA-30 closed-lane sign (D18, left): this file prices W9-3L (clt.js TA30_GEOMETRY 569-573 'L or R per closed lane side', and the Charlotte candidate rules). SME-OPEN: three of four reference statements give W9-3R for D18: the D18 signCodes table (clt.js:331-337), the W9-3 code table 'Diagram 18 (center of street)' (clt.js:426-431) and LOOKUP.signSequence 'W9-3R LEFT LANE CLOSED AHEAD MERGE RIGHT' (clt.js:947-952). A right-side TA-30 is priced on D13: one approach, W9-3R / W4-2R (clt.js:172-205, 937-945).",
    "TA-30R downstream buffer: clt.js says none (clt.js:751). SME-OPEN: Charlotte candidate rules ta-30r-watch-dia-13-* draw a departure buffer = A.",
    "TA-33 right lane follows clt.js LOOKUP (D13: taper = buffer = A, signs one side, barricade required, opposing W20-1). SME-OPEN: TA33_GEOMETRY and the candidate rules use D16 values for the right lane too.",
    "D13 Note 5 / D16 Note 5 diagram switches (work within 350 ft of an intersection -> D14; median too narrow -> D15) are not modelled (clt.js:182-183, 259).",
    "D16 Note 7: W6-8 may replace the arrow board in daylight (clt.js:291). Not modelled; the arrow board is priced.",
    "Type III barricades on TA-30 (D18) and on a left-lane TA-33 (D16) are unattended-overnight only and priced as optional (--include-optional). D13 (TA-30R, right-lane TA-33) requires one at all times (D13 Note 2).",
    "TMA / shadow vehicle: WATCH is silent. The federal template's optional TMA stands.",
    "D9 departure: the clt.js D9 table lists a 50-ft departure buffer (clt.js:135); TA10_GEOMETRY and the Charlotte candidate rules draw a 50-ft departure taper and no buffer (clt.js:472-481). Priced as taper.",
    "TAs without a WATCH diagram (TA-3/5/6, 11, 15, 18, 21-26) take the federal taper formula and buffer = A (100/200/350), the clt.js LOOKUP defaults (clt.js:871-873, 906). D16/D18 taper and buffer values apply to TA-30 and TA-33 only (clt.js:6)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "colorado",
   "name": "Colorado",
   "group": "state",
   "source": "Federal MUTCD 11th Ed (2023) + Colorado State Supplement to the 11th Edition (Dec 2025, eff. Jan 18 2026, TC_RES_20251203; Rev 1 adoption not confirmed) + CDOT Standard Plan S-630-1 'Traffic Controls for Highway Construction' (reissued July 1 2026, 26 sheets all dated 07/01/26, CASE NO. 1-42).",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), adopted by the Transportation Commission at TC_RES_20251203 effective 2026-01-18. Same edition as the engine's internal tables, so Table 6B-1 / 6B-2 / 6B-3 / 6B-4 and Fig 6P-x are what a CDOT reviewer reads; no 10th Ed name mapping needed. The Colorado State Supplement is a 42-page delta, not a state MUTCD; its Part 6 footprint is 6D.03, 6D.04, 6J.01 and 6J.03 (flagging and pavement markings) and it edits no Part 6 table.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 53,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 46,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone_36in",
     "ta33_line_devices_2000ft": 37,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone_36in",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Option \u2014 S-630-1 GN 24 (length left to the TCP/MHT; Keryk prices MUTCD Table 6B-2, 11th Ed))",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; colorado override (A 500->1000, B 500->1500, C 500->2640) per S-630-1 Jul 2026 Sheet 7 Case 10 (four-lane divided lane closure; Cases 1 and 5 match): advance signs at 1000/1500/2640 ft at every speed",
    "taper_spacing": "MUTCD 11th Ed 6K.01 para 04 values, restated by S-630-1 GN 18(a) 'FOR TAPERS AND TRANSITIONS, SPACING EQUALS THE NUMERICAL VALUE OF THE SPEED LIMIT (e.g. 45 MPH = 45 FEET)' and GN 18(b) 'FOR TANGENTS ALONG THE BUFFER SPACE OR WORK AREA, SPACING MAY NOT BE GREATER THAN TWO TIMES THE SPEED LIMIT (e.g. 50 MPH = 50 FEET TO 100 FEET MAXIMUM)'. No departure-taper column is published in S-630-1, so the\u2026",
    "tangent_spacing": "MUTCD 11th Ed 6K.01 para 04 values, restated by S-630-1 GN 18(a) 'FOR TAPERS AND TRANSITIONS, SPACING EQUALS THE NUMERICAL VALUE OF THE SPEED LIMIT (e.g. 45 MPH = 45 FEET)' and GN 18(b) 'FOR TANGENTS ALONG THE BUFFER SPACE OR WORK AREA, SPACING MAY NOT BE GREATER THAN TWO TIMES THE SPEED LIMIT (e.g. 50 MPH = 50 FEET TO 100 FEET MAXIMUM)'. No departure-taper column is published in S-630-1, so the\u2026",
    "departure_spacing": "MUTCD 11th Ed 6K.01 para 04 values, restated by S-630-1 GN 18(a) 'FOR TAPERS AND TRANSITIONS, SPACING EQUALS THE NUMERICAL VALUE OF THE SPEED LIMIT (e.g. 45 MPH = 45 FEET)' and GN 18(b) 'FOR TANGENTS ALONG THE BUFFER SPACE OR WORK AREA, SPACING MAY NOT BE GREATER THAN TWO TIMES THE SPEED LIMIT (e.g. 50 MPH = 50 FEET TO 100 FEET MAXIMUM)'. No departure-taper column is published in S-630-1, so the\u2026",
    "buffer_tangent_spacing": "MUTCD 11th Ed 6K.01 para 04 values, restated by S-630-1 GN 18(a) 'FOR TAPERS AND TRANSITIONS, SPACING EQUALS THE NUMERICAL VALUE OF THE SPEED LIMIT (e.g. 45 MPH = 45 FEET)' and GN 18(b) 'FOR TANGENTS ALONG THE BUFFER SPACE OR WORK AREA, SPACING MAY NOT BE GREATER THAN TWO TIMES THE SPEED LIMIT (e.g. 50 MPH = 50 FEET TO 100 FEET MAXIMUM)'. No departure-taper column is published in S-630-1, so the\u2026"
   },
   "device_gates": [
    {
     "device": "cone_36in",
     "when": {
      "road_types": [
       "freeway"
      ]
     },
     "modality": "shall",
     "source": "S-630-1 GN 15: cones >=36 in on freeways/expressways"
    },
    {
     "device": "cone_36in",
     "when": {
      "night": true
     },
     "modality": "shall",
     "source": "S-630-1 GN 15: cones >=36 in during night working hours"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-11",
    "ta-30",
    "ta-30r",
    "ta-33",
    "ta-5"
   ],
   "not_modelled": [
    "Speed-reduction cap. S-630-1 GN 3/4: a regulatory or advisory reduction 'SHALL NOT EXCEED 15 MPH PER SIGN INSTALLATION', and any reduction needs CDOT Form 568. A 65->35 job is two R2-1 steps, not one, plus the R2-12 END WORK ZONE SPEED LIMIT. The estimator takes a single posted speed and emits no speed-reduction signs, so a reduced-speed CDOT job is short the R2-1 / R2-12 chain (2+ panels per approach).",
    "GN 4 higher-fines signing. WORK ZONE (G20-5P) and FINES DOUBLE (R2-6P) plaques (GN 4; case drawings also show G20-5aP / R2-6aP) shall be posted every 2,640 ft between the BEGIN and END HIGHER FINES ZONE signs (R2-10 / R2-11, with CO variants R2-10a_CO / R2-11a_CO per Supplement 2B.25). That is ceil(zone/2640) plaque pairs plus the bracket, a zone-length-driven sign count no template emits. On a 2,000 ft TA-33 job this is at least 1 plaque pair plus 2 bracket signs, uncounted.",
    "GN 8 divided-highway sign duplication is TRUE in Colorado (divided_highway_duplication: true); a TA-5 shoulder closure carries a single W20-1 per the one-shoulder exception. Multi-lane ramps and one-way streets are not a road_type this engine carries, so a ramp or one-way job under any other TA is signed single-sided and is short by half.",
    "Cone height should-tier (S-630-1 GN 15): cones should be 36 in at >=45 mph where ADT >= 6,000. The engine has no ADT input, so only the freeway and night 36-in shall-tiers are priced.",
    "Type 1 barricade prohibition (S-630-1 GN 16): Type 1 barricades shall not be used on freeways, expressways or other roadways at 55 mph or more. No template emits barricades by type and the engine has no substitution path, so nothing flags a prohibited device.",
    "AFAD substitution (S-630-1 GN 20): 'FLAGGER STATION SHALL COMPRISE OF EITHER A FLAGGER OR AN AUTOMATED FLAGGER ASSISTANCE DEVICE (AFAD).' Federal 6D permits AFADs too. flaggers[] is a head count with no AFAD path, so a CDOT AFAD job prices 2 flaggers and 0 devices.",
    "Interstate flagging block (S-630-1 GN 21): flagging is not permitted on interstates without Region Traffic Engineer approval. TA-10 carries 2 flaggers unconditionally, so a TA-10 estimate on a Colorado interstate is a plan CDOT would not approve as drawn. The engine has no interstate input.",
    "Night flagger stations (S-630-1 GN 22): flood lights shall illuminate every flagger station during darkness (500 W minimum quartz, swivel mount, >=8 ft, station plus escape path, no glare). Light plants are not a BOM device class, so a night TA-10 is missing 2 lighting units.",
    "Two-way traffic on one roadway (S-630-1 GN 17): opposing traffic on one roadway of a normally divided highway shall be separated by approved channelizing devices for the whole length, with temporary concrete barrier through the transition zones. Barrier is length-driven and devices[] holds integer counts only, so the barrier run is uncounted.",
    "CDOT Guidelines for the Use of Positive Protection in Work Zones (2025) define High Speed as 45 mph or greater and require positive protection where high operating speeds leave workers no escape from traffic. The estimator prices no barrier, shadow vehicle or TMA from these guidelines; their triggers depend on site exposure, which the engine does not take as an input.",
    "Supplement 6D.03 para 06 requires a retroreflectorized STOP/SLOW paddle at night and permits an emergency flag carrying a STOP (R1-1) or SLOW (W20-8) face, >=18 in wide with 6-in letters, per new Figure 6D-2. Paddles are not a BOM line item here.",
    "Supplement 6J.01 elevates removal/obliteration of non-applicable long-term pavement markings from should to shall, and 6J.03 requires temporary raised markers in groups of >=3 spaced <=5 ft, every 40 ft. Pavement marking is outside this estimator.",
    "S-630-1 CASE NO. 1-42 are CDOT's own typical applications. TA-33 is the federal figure amended by Case 10 and TA-10 by GN 18(a) / Cases 17 and 19; no other case is transcribed as a component list, so other TAs use the federal figure with Colorado numeric drivers.",
    "Unverifiable: TA-30 interior lane closure. S-630-1 has no urban interior-lane typical; Case 9 (freeway center-lane closure, adds W9-3 and W12-1 with 2 arrow panels) is not an analogue. TA-30 stays the federal figure.",
    "Unverifiable: default shoulder width. Neither S-630-1 nor the Supplement publishes one; shoulder_width_ft 8 is a Keryk assumption (shoulder taper only)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "connecticut",
   "name": "Connecticut",
   "group": "state",
   "source": "CTDOT Special Provision 0971001A + CTCP plates 01-33 and sheets 0.3-0.6, Rev 03-14-25 (0.5 rev 08-20-25); 0971001A sample MPT; HDM Ch 14 (Apr 2026); RCSA 14-298-800.",
   "citation_edition": "MUTCD 11th Ed is the national standard (23 CFR 655.603). CT adoption PR2025-004 (posted 6/18/2025) is proposed only; published RCSA 14-298-800(b)(1) still cites the 2009 MUTCD (amended 1/14/2013). Governing CT documents are Special Provision 0971001A + CTCP plates Rev 03-25, whose sign spacing and taper lengths are mandatory (0971001A Signing Patterns: 'Proper distances between advance warning signs and proper taper lengths are mandatory'). The plates still cite 2009 Table 6E-1 (Plan 13).",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      1300
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "freeway"
    },
    {
     "speed_mph": 30,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      1300
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "freeway"
    },
    {
     "speed_mph": 35,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      1300
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "freeway"
    },
    {
     "speed_mph": 40,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      1300
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "freeway"
    },
    {
     "speed_mph": 45,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      1300
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "freeway"
    },
    {
     "speed_mph": 50,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      1300
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "freeway"
    },
    {
     "speed_mph": 55,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      1300
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 52,
     "road_type": "freeway"
    },
    {
     "speed_mph": 60,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      1300
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 52,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 650.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      1300
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 54,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "CTCP Plans 1/3 (Rev 03-25): '800' INSTALL 20 TRAFFIC DRUMS @ 40' SPACING', no speed split",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "CTCP Plans 1/3/10 (Rev 03-25): 'SHOULDER * TAPER' 200 ft, 5 devices @ 40 ft (optional)",
    "buffer": "CTCP Plans 1/3 (Rev 03-25): '500' 55 MPH SPEED LIMIT'",
    "sign_spacing": "CTCP plates (Rev 03-25) sign spacing row 'freeway'; connecticut override (C 2640->1300) per CTCP Plans 1/3 (Rev 03-25): W20-1 to W20-5 1300 ft",
    "taper_spacing": "CTCP Plans 1/3 (Rev 03-25): taper drums @ 40 ft, activity area '@ 80' SPACING', no speed split",
    "tangent_spacing": "CTCP Plans 1/3 (Rev 03-25): taper drums @ 40 ft, activity area '@ 80' SPACING', no speed split",
    "departure_spacing": "CTCP Plans 1/3 (Rev 03-25): taper drums @ 40 ft, activity area '@ 80' SPACING', no speed split (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "CTCP Plans 1/3 (Rev 03-25): taper drums @ 40 ft, activity area '@ 80' SPACING', no speed split"
   },
   "device_gates": [
    {
     "when": {
      "road_types": [
       "freeway"
      ]
     },
     "device": "drum",
     "source": "CTCP 0.3 \u00a77.a: limited-access taper channelization shall be drums, not cones; 42-in cones allowed only in the tangent of the closed lane or shoulder"
    },
    {
     "when": {
      "gt_hours": 36
     },
     "device": "drum",
     "source": "CTCP 0.3 \u00a77.b: duration more than 36 h -> drums replace cones on all roadways"
    },
    {
     "when": {
      "min_speed": 45
     },
     "device": "cone_42",
     "source": "CTCP 0.3 \u00a77.b: 42-in cone mandatory at posted speed >= 45 mph"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Facility class is CT's main decision axis and this estimator has no input for it. CTCP sheet 0.3 pivots the TMA rule (6.a), the arrow-board rule (5.a/5.b) and the PCMS rule (9.a) on limited access, not speed. Here TA-33 is treated as limited access and TA-30/TA-30R/TA-10 as non-limited access at every speed; a limited-access TA-30R is under-priced by the TMA, PCMS and required arrow board. Pass --road-type freeway for limited-access drum and sign spacing.",
    "CTCP Plans 1/3 print no buffer for 45-50 mph limited access; the buffer floors key on divided + speed (55/65), so a 45-50 mph TA-33 gets the 200 ft Plans 10/11 buffer.",
    "CTCP sheet 0.3 Table 1 (freeway 180-780 ft, secondary 165-715 ft) is not modelled. It applies only when the plate taper cannot be achieved; TA-30/TA-30R warn where the plate is shorter.",
    "Two-TMA minimum: a limited-access lane closure SHALL use a minimum of two TMAs to install and remove (0.3 para 6.a); TA-33 prices 2 required TMAs. Crash rating is NCHRP-350 TL-3 OR MASH TL-3 (Form 818 18.06.02); unresolved: Form 818 9.77-9.81 (MASH-only after 12/31/2019) conflicts on crash rating.",
    "Arrow board ban for alternating one-way operations and lateral shifts (0.3 para 5.e). TA-10 carries no arrow board, so nothing to remove.",
    "END ROAD WORK: CTCP sheet 0.6 Note 2 lets AA/A/D be omitted when a larger zone already carries them. The required G20-2 does not model that exception.",
    "Series 16 on TA-30/TA-30R/TA-10 is optional here: sheet 0.4 is a CTDOT-contract requirement, and the panel size (16-H state roads, 16-M town roads) depends on road ownership, which is not an input.",
    "TA-10 buffer: CTCP Plan 13 marks '40' BUFFER AREA *' at both ends, optional; no Table 6B-2 buffer. Encoded as a fixed 2 devices on the one buffer segment; the downstream 40 ft buffer is not a template segment.",
    "HDM 'downstream taper 100 ft PER LANE': the engine carries a single downstream_taper_ft, so a multi-lane departure cannot scale. Single-lane closures are unaffected.",
    "Flagger count: CTCP Plan 13 draws TWO Trafficpersons, one at each end, matching the ta-10 template's 2. CT adds a positive-control cap the BOM cannot carry: 10-minute maximum single stoppage (0971001A 9.71).",
    "Alternating one-way cap: sourced as a contract default, not a standard. CTDOT sample MPT (0971001A template) 9.71.01 Secondary Roads: alternating one-way <= 300 ft long, >= 11 ft wide, max one per project, all 'unless specified elsewhere in the Contract'. Project special provisions can change it. The engine has no zone-length cap, so it is a TA-10 warn only.",
    "Min_devices_in_taper is null: CT publishes DRAWN per-plate counts (Plan 13 5 devices; Plans 10/11 15; Plans 1/3 20) but no speed-indexed minimum-device table.",
    "Work-zone lane width: 12 ft per lane on limited access and ramps, 11 ft on secondary roads (CTDOT sample MPT 9.71.01, a contract default editable per project); Plans 12/15 draw 11 ft MIN; HDM 14-3.03 design guidance 11 ft. Not a BOM line.",
    "Parkway facility class (Merritt / Wilbur Cross / Milford SR-796): trucks are prohibited by law, and a permitted vehicle needs two amber strobes and two SMV triangles (0.3 para 11). No parkway road_type exists here and none of that equipment is a BOM class.",
    "Resolver rule: CT abolished county government in 1960 (PA 152). A CT address must never resolve to a county overlay - municipality, then CTDOT, then MUTCD.",
    "Operational rules with no BOM line: rolling road block <= 15 minutes on limited-access sign/taper work (0.3 para 4); install/remove sequencing (0.3 para 3.a-3.b); the ban on workers crossing live limited-access lanes (0.3 para 3.f); ATSSA-certified Traffic Control Supervisor on limited access (Form 818 9.71.01); the AWZSC speed-camera program under PA 23-116 (unverified, not in corpus).",
    "CT catalog codes are not substituted for the MUTCD faces (80-9604 for W20-1, 80-9848/80-9847 for W20-5R/L, 80-9612 for G20-2). Series 16 and FINES DOUBLED carry CT codes because they have no MUTCD code.",
    "Divided-highway sign duplication is mandatory in CT: 'on multi-lane divided highways advance warning signs shall be installed on both sides' (0.3 Placement of Signs). The ta-33 template posts W20-1, W20-5, W4-2 and G20-2 on both sides at qty 2. FINES DOUBLED and Series 16-E are drawn right side only on Plans 1/3 (qty 1)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "florida",
   "name": "Florida",
   "group": "state",
   "source": "FDOT Standard Plans FY 2026-27, Index 102-600 (master tables sht 1 Tbl 1-4, sht 3 Tbl 5-6) + Index 102-603 / 102-613 + Standard Specs FY 2026-27 + FDM (Jan 1 2026).",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), adopted by reference. Florida publishes NO state MUTCD and NO state supplement or asterisk/modification index \u2014 the deviations live entirely in the FDOT 102-Series Standard Plans layered on top [Index 102-600 sht 1 GN-1/GN-2]. The engine's internal 11th Ed table names (6B-1 / 6B-2 / 6B-4) are therefore the right names for a Florida reviewer, but they are NOT what governs: where FDOT prints a value the Index sheet controls, and the reviewer reads Index 102-600 sht 1 Tbl 3 (sign spacing), Tbl 4 (buffer), Tbl 2 (taper), Tbl 1 (device spacing). Cite the Index sheet first and the MUTCD table only as the baseline it replaces. Two-regime caveat: FDOT Indexes govern the State Highway System (on-system); off-system local agencies may adopt bare MUTCD minimums [102-600 sht 1 GN-1] \u2014 this file encodes the on-system, FDOT regime.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 53,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 56,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 61,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 66,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 79,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 84,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 88,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1500,
      1500,
      1500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 93,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1500,
      1500,
      1500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 97,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "FDOT Index 102-613 sht 1-4 dimension the shoulder taper 'L/3 (See General Note 4)'. The engine computes L/3 at a 12-ft lane: 180 ft at 45 mph, 280 ft at 70 mph (not 1/3 L at the 8-ft shoulder width: 120 / 187 ft). At narrower lanes the drawing's L/3 is shorter (11 ft at 55 mph: 202 ft, 1 device fewer).",
    "buffer": "MUTCD Table 6B-2 (MANDATORY minimum, Index 102-600 sht 1 Tbl 4 titled 'BUFFER LENGTH B \u2014 Min. Length')",
    "sign_spacing": "Index 102-600 sht 1 Tbl 3: one 'Min. X' distance between every sign in the series, 3 rows (Arterials & Collectors <=40 mph 200 ft; >=45 mph 500 ft; Limited Access 1,500 ft) row 'Idx 102-600 sht 1 Tbl 3 row 2: Arterials & Collectors, WZ speed >=45 mph'",
    "taper_spacing": "Index 102-600 sht 1 Tbl 1. Cones and tubular markers are spaced 25 ft in taper and 50 ft on tangent at every work-zone speed, a fixed table, not the federal 1.0*S / 2.0*S heuristic (MUTCD 6K.01 para 04). Barricades, vertical panels and drums: 25/50 ft at <=45 mph, 50 ft taper / 100 ft tangent at >=50 mph.",
    "tangent_spacing": "Index 102-600 sht 1 Tbl 1. Cones and tubular markers are spaced 25 ft in taper and 50 ft on tangent at every work-zone speed, a fixed table, not the federal 1.0*S / 2.0*S heuristic (MUTCD 6K.01 para 04). Barricades, vertical panels and drums: 25/50 ft at <=45 mph, 50 ft taper / 100 ft tangent at >=50 mph.",
    "departure_spacing": "Index 102-600 sht 1 Tbl 1. Cones and tubular markers are spaced 25 ft in taper and 50 ft on tangent at every work-zone speed, a fixed table, not the federal 1.0*S / 2.0*S heuristic (MUTCD 6K.01 para 04). Barricades, vertical panels and drums: 25/50 ft at <=45 mph, 50 ft taper / 100 ft tangent at >=50 mph. (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "Index 102-600 sht 1 Tbl 1. Cones and tubular markers are spaced 25 ft in taper and 50 ft on tangent at every work-zone speed, a fixed table, not the federal 1.0*S / 2.0*S heuristic (MUTCD 6K.01 para 04). Barricades, vertical panels and drums: 25/50 ft at <=45 mph, 50 ft taper / 100 ft tangent at >=50 mph."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Divided-highway sign duplication is MANDATORY in Florida, not conditional: Idx 102-615 sht 1 GN 6 reads verbatim 'Dual signs are required for divided roadways', and 102-613 sht 1 GN 2 omits the median array only on undivided roads, where federal Fig 6P-33 Note 1 makes the median substitution conditional. No duplication override is needed: the ta-33 template already posts every advance sign at qty 2 (right shoulder + median), and in Florida that second array cannot be dropped. G20-2 x2 (right + median) is priced at --days 2 or more (Idx 102-613 GN 5).",
    "MAS (Motorist Awareness System) is an FL-only device stack. Idx 102-613 sht 5 Note 1 requires it when all hold: multilane divided, posted >=55 mph, workers present, not barrier-protected, and lane closure >=5 days (FDM 240.2.2.12). TA-33 prices 1 PCMS (2 above 3 lanes per direction, Note 4), 2 PRS and 2 RSDU at >=55 mph and 5 days or more, assuming workers present and no barrier. The extra MAS panels (dual W20-1F / W20-XX) are not added.",
    "TA-10 buffer: Idx 102-603 sht 1 (rev 11/01/25) draws B only between the approach taper and the work area; the standard TA-10 has one B, which the engine prices. A double buffer appears only on the 102-603 sht 2 centerline-encroachment lane shift (<=24 h), out of scope.",
    "Downstream buffer: FDOT Tbl 4 is titled simply BUFFER LENGTH 'B' with no upstream/downstream split, and neither 102-613 nor 102-600 mandates a downstream buffer length; it is left to the project TTCP on TA-30/TA-33. This engine emits no downstream buffer either.",
    "Downstream taper: FDOT draws NO downstream taper on the stationary multilane typicals (102-613 sht 1-3 end with buffer B, a tangent run, then G20-2); the only downstream taper in the index is the L/2 return taper on sht 4, which undoes a lane SHIFT. Dropped on ta-33 and ta-30r; FDOT draws none on 102-613 sht 1-3.",
    "Work-zone speed reduction is not applied: FDOT's default work-zone speed is the existing posted speed (FDM 240.2.1.2). A reduction (posted >=65 -> -10 mph, posted 60 -> 55 mph) applies only with MAS (Idx 102-613 sht 5 Note 3 / FDM 240.2.2.12) or when the plans call for one (Idx 102-600 sht 3). This estimator takes one speed; for a reduced job, pass the reduced speed.",
    "Speed-reduction SIGNING, a second and separate gap: where a reduction is posted, Idx 102-600 sht 3 Speed Reduction Signing Note 4 requires the reduction be stepped down in 10-mph increments, one step per X, as a W3-5 -> R2-1 -> W20-1F sequence (not used with MAS, per Note 3), and Note 5 requires the R2-1 to REPEAT at intervals of <=1 mile rural / <=1000 ft urban through the zone. Those are FL-only sign panels with a length-driven count. This file emits none of them, so any Florida job carrying a work-zone speed reduction is short at least one W3-5/R2-1/W20-1F assembly per approach plus one R2-1 per repeat interval over the zone length.",
    "Minimum work-zone lane widths (11 ft on Interstate, 11 ft on other limited access, 10 ft on other facilities, Idx 102-600 sht 3) are not enforced. Lane width is an input here and it drives L directly, so a job entered at 12 ft on an 11-ft Interstate lane returns an L 70 ft too long at 70 mph (840 vs 770 ft).",
    "TMA crash rating: FL Std Spec 102-9.14 replaces the federal 40/45 shadow-vehicle split with a Test Level gate on POSTED speed \u2014 TL-3 required at 50 mph and above, TL-2 or TL-3 at 45 mph and below, everything after 1/1/2020 MASH-compliant per Spec 990. The BOM carries TRUCK_MOUNTED_ATTENUATOR as an undifferentiated count with no rating, so the line item cannot distinguish a TL-2 unit from a TL-3 one and the unit cost is wrong on a 50+ mph job quoted against TL-2 stock.",
    "TMA count on a STATIONARY closure is a genuine FDOT gap: Idx 102-607 codifies 1 shadow vehicle + TMA per closed lane for MOBILE operations only, and 102-613 does not depict the stationary case, leaving it to the project TTCP. Roll-ahead distance has no FDOT numeric at all (Spec 102-9.14 defers to the manufacturer's APL drawing). Neither is emitted.",
    "Type III barricades: FDM 240.2.2.9 sets 2 per 12-ft lane closed (1 for lanes under 12 ft) at a 6'-0\" minimum unit width [102-600 sht 9/10 Channelizing Device Note 2]. Deliberately NOT encoded as a device \u2014 FDM 240.2.2.9 scopes that count to closing or partially closing a ROAD OR RAMP, not to the tapers of a lane closure, so adding it to ta-33 or ta-30r would apply a ramp-closure rule to mainline work.",
    "Temporary raised rumble strips are priced on ta-10 at >=55 mph (2 sets + 2 TTC-010-25, Idx 102-603 sht 1 Note 4). The >60-minute condition is not gated (no duration input), so a TA-10 at >=55 mph lasting <=60 min is over-counted by 2 strip sets and 2 signs.",
    "One-way control: Florida authorises no devices-only / pure-YIELD alternative to TA-10 \u2014 every enumerated means in Idx 102-603 sht 1 Note 5 is active control (flagger, flag-carrying vehicle, official vehicle, pilot vehicle, traffic signal; Note 7 adds AFADs), and sole flaggers must be in sight of each other or in direct communication. The estimator prices the template's 2 flaggers and cannot reject a devices-only request. The 'not authorized' reading is unconfirmed: inferred from the absence of a FL YIELD typical.",
    "Flagger station geometry: Idx 102-603 sht 1 puts the work-side flagger 25-50 ft ahead of the approach taper and the opposing flagger 250 ft beyond the downstream taper, not an SSD-derived station. The ta-10 tapers are priced at 100 ft: 5 cones each at 25-ft spacing, 3 drums each at 50-ft spacing (>=50 mph). FDOT's 50-ft minimum would give 3 cones each.",
    "Arrow-board omission: Idx 102-613 sht 1 GN 5 lets a single-lane closure drop the arrow board AND the buffer together when it runs 60 minutes or less AND the speed limit is 45 mph or less. It applies to any single-lane closure on 102-613 (multilane), never on double/triple closures or above 45 mph. With no duration input the arrow board and the required ta-30 buffers are always priced, which is correct above 60 min.",
    "Traffic pacing is an FL-only requirement this file drops entirely: FDM 240.2.1.7, verbatim, 'Specify traffic pacing restrictions for all multilane roadways with work zone speeds of 50 mph or greater.' Every ta-33 run at 50 mph or above trips it. Like the operational caps below, it is a validator with no BOM line item of its own, but it is a Florida rule the federal baseline has no analog for and the estimator never mentions it.",
    "AFAD gating is not modelled: Idx 102-603 sht 1 Note 7 + Spec 102-9.16 / 990 permit AFADs (federal defers) but Florida gates them \u2014 two flaggers on-site, either an AFAD at each end or one AFAD + one flagger; a single flagger may run two AFADs only with an unobstructed view of both devices and both directions, restoring manual flagging on malfunction; centerline placement only if the AFAD is MASH TL-3 crash-tested; a gate arm (Spec 990) if a single shoulder AFAD controls one direction; illuminate at night. This estimator prices the ta-10 template's 2 flaggers and has no AFAD substitution path, so an AFAD layout is neither priced nor checked against the gate.",
    "Clear-zone widths (Idx 102-600 sht 3 Tbl 5: travel lanes 30/24/18/14/12 ft by speed bucket 60-70 / 55 / 45-50 / 35-40 / <=30, auxiliary lanes and single-lane ramps 18/14/10/10/10, curb-and-gutter 4 ft behind the face of curb) and minimum radii at normal crown (sht 3 Tbl 6, 30 mph -> 430 ft up to 70 mph -> 4,090 ft) are Florida-only values with no federal table behind them. Neither drives a device count, so nothing here is mis-priced, but both are departures this overlay carries no value for \u2014 a plan checked against 102-600 sht 3 will find device placement and horizontal geometry constrained in ways the BOM cannot see.",
    "Operational caps are validators this estimator does not run: lane closures on interstates and state highways posted 55 mph or above must not exceed 3 miles including taper, buffer and work zone, and must not close two consecutive interchanges [Idx 102-600 sht 3]; a limited-access lane closure lasting more than one calendar day is prohibited without District Secretary or Turnpike Executive Director approval [FDM 240.2.1.6]; temporary traffic signals may stand no more than 0.25 mile apart before a pilot vehicle is required [Idx 102-606 Note 5]. On interstates and state highways posted 55 mph or more, a --zone-length plus taper and buffer over 15,840 ft (about 14,400 ft of zone at 55 mph on ta-33) returns a number for a closure Florida would not permit.",
    "TTC-011A-25 SPEEDING FINES DOUBLED WHEN WORKERS PRESENT, G20-2 and W21-5a are priced at --days 2 or more (Idx 102-613 GN 5 / Idx 102-603 Note 6 allow omission at 24 h or less): ta-33 (TTC-011A-25 x2, G20-2 x2, W21-5a x2 off limited access), ta-10 (TTC-011A-25 x2, G20-2 x2), ta-30 (TTC-011A-25 x2, G20-2 x2), ta-30r (TTC-011A-25, G20-2, W21-5a off limited access). --duration-hours alone does not trigger them: a job over 24 h needs --days 2 or more.",
    "Dual sign codes: Florida is mid-transition between the MOT-NN-YY artwork (700-102 FY25-26) and the TTC-NNN-25 codes (102-Series FY26-27) for the same physical panels, and W20-1F is FDOT's cell-library name for MUTCD W20-1. This file emits federal MUTCD codes plus the FL-only panels TTC-011A-25 and TTC-010-25. It maps nothing to MOT-NN-YY codes or to W20-1F, so a Florida plan set or asset catalogue keyed to MOT/TTC codes will not match the BOM line labels.",
    "TA-33 and TA-30R shoulder taper is required unless the paved shoulder is <4 ft (Idx 102-613 GN 4); it is priced when --shoulder-width (or the 8-ft default) is 4 ft or more. Idx 102-613 sht 1 draws a 100-ft shoulder tangent between the L/3 shoulder taper and L; it is priced under the same 4-ft gate. On TA-30R it is priced for right-side closures only."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "georgia",
   "name": "Georgia",
   "group": "state",
   "source": "GDOT Special Provision Section 150 (SP150) Rev 8/22/2025 + GA Construction Standards 9102 (two-lane flagging), 9106 (multi-lane divided lane closure), 9107 (multi-lane undivided lane closure) (2006-2008 revisions, the current GDOT files).",
   "citation_edition": "MUTCD 11th Ed (2023) \u2014 the SAME edition the engine's table names come from, so Table 6B-1 / 6B-2 / 6B-4 are exactly what a GDOT reviewer reads. No renumbering needed. Adopted by State Transportation Board vote 2024-06-20 / Chief Engineer (Pirkle) memo 2024-09-18, effective for lets after Jan 2025. Georgia publishes NO state MUTCD and NO state supplement: every substantive TTC requirement lives in SP150, bound into each contract, and SP150 \u00a7150.1.01 (PDF p.1) says verbatim 'When any provisions of this Specification or the Plans do not meet the minimum requirements of the MUTCD, the MUTCD shall control. The 2023 Edition of the MUTCD including revisions shall be in effect for the duration of the Contract.' Projects LET BEFORE Jan 2025 run the legacy SP150 (2017-02-01) against the 10th Ed (2009) \u2014 for those cite Figure 6H-x / Table 6C-x, never 6P-x / 6B-x. This overlay targets current SP150 + 11th Ed only. The lane-closure drawings (Std 9102/9106/9107) are 2006-2008 revisions still using 2009-era codes (W20-7a); GDOT's memo says they are 'being updated', no newer versions published. Georgia follows the federal MUTCD with no state supplement; SP150 (bound into every GDOT contract) and Stds 9102/9106/9107 set contract quantities above federal, and this overlay applies them.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125,
     "L_half_ft": 65,
     "L_shoulder_ft": 30,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      4280
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 69,
     "road_type": "rural"
    },
    {
     "speed_mph": 30,
     "L_ft": 180,
     "L_half_ft": 90,
     "L_shoulder_ft": 40,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      4280
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 61,
     "road_type": "rural"
    },
    {
     "speed_mph": 35,
     "L_ft": 245,
     "L_half_ft": 125,
     "L_shoulder_ft": 55,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      4280
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 55,
     "road_type": "rural"
    },
    {
     "speed_mph": 40,
     "L_ft": 320,
     "L_half_ft": 160,
     "L_shoulder_ft": 75,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      4280
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 51,
     "road_type": "rural"
    },
    {
     "speed_mph": 45,
     "L_ft": 540,
     "L_half_ft": 270,
     "L_shoulder_ft": 120,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      4280
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 45.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 54,
     "road_type": "rural"
    },
    {
     "speed_mph": 50,
     "L_ft": 600,
     "L_half_ft": 300,
     "L_shoulder_ft": 135,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      4280
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 54,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660,
     "L_half_ft": 330,
     "L_shoulder_ft": 150,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      4280
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 55.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 54,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720,
     "L_half_ft": 360,
     "L_shoulder_ft": 160,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      4280
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 60.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 53,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780,
     "L_half_ft": 390,
     "L_shoulder_ft": 175,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      4280
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 65.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 53,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "Std 9106 note ** ('BUFFER ZONES OF 300' MINIMUM, 500' DESIRABLE ARE REQUIRED FOR TANGENT SECTIONS') and plan dimension '300' MIN BUFFER ZONE'; SP150 Rev 8/22/2025 \u00a7150.3.05.C.3",
    "sign_spacing": "Std 9106 sign spacing row 'rural'; georgia override (C 500->4280) per Std 9106 plan dimensions at every speed (Typical Dimensions table 25-65 mph): A = 500 (W4-2), B = 500 (W20-5 LANE CLOSED 1000 FT), C = 5280 - 1000 = 4280 to W20-1 ROAD WORK 1 MILE",
    "taper_spacing": "Taper: max drum spacing in tapers = the posted speed in feet (SP150 Table 150-1 right column, PDF p.37), the federal 1xS rule of MUTCD 6K.01 para 04. The departure taper takes the taper column: GDOT publishes no separate downstream column. Tangent: SP150 \u00a7150.3.05.C.3 (PDF p.38) and Std 9102/9107 cap activity-area spacing at 80 ft; the MUTCD 6K.01 2xS Guidance is applied as the conservative\u2026",
    "tangent_spacing": "Taper: max drum spacing in tapers = the posted speed in feet (SP150 Table 150-1 right column, PDF p.37), the federal 1xS rule of MUTCD 6K.01 para 04. The departure taper takes the taper column: GDOT publishes no separate downstream column. Tangent: SP150 \u00a7150.3.05.C.3 (PDF p.38) and Std 9102/9107 cap activity-area spacing at 80 ft; the MUTCD 6K.01 2xS Guidance is applied as the conservative\u2026",
    "departure_spacing": "Taper: max drum spacing in tapers = the posted speed in feet (SP150 Table 150-1 right column, PDF p.37), the federal 1xS rule of MUTCD 6K.01 para 04. The departure taper takes the taper column: GDOT publishes no separate downstream column. Tangent: SP150 \u00a7150.3.05.C.3 (PDF p.38) and Std 9102/9107 cap activity-area spacing at 80 ft; the MUTCD 6K.01 2xS Guidance is applied as the conservative\u2026",
    "buffer_tangent_spacing": "Taper: max drum spacing in tapers = the posted speed in feet (SP150 Table 150-1 right column, PDF p.37), the federal 1xS rule of MUTCD 6K.01 para 04. The departure taper takes the taper column: GDOT publishes no separate downstream column. Tangent: SP150 \u00a7150.3.05.C.3 (PDF p.38) and Std 9102/9107 cap activity-area spacing at 80 ft; the MUTCD 6K.01 2xS Guidance is applied as the conservative\u2026"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Mandatory work-zone speed reduction (SP150 \u00a7150.3.04.B.2, PDF p.30) is not applied: the engine prices the speed it is given. Five triggers, any one of which fires it on limited-access / controlled-access multi-lane divided roads \u2014 (a) a lane closure of any type or duration, (b) an elevation difference over 2 in adjacent to the lane, (c) equipment or workers within 10 ft of a travel lane, (d) temporary portable concrete barrier under 2 ft from the traveled way, (e) Engineer direction. Exception: no reduction where a pilot vehicle is used on a two-lane two-way road. Pass the posted speed PRIOR TO WORK: Std 9106/9107 key L and device spacing on it (Typical Dimensions tables headed 'POSTED SPEED MPH PRIOR TO WORK').",
    "The signing that comes with the mandatory speed reduction is not emitted: a 'Reduced Speed Ahead' sign 600 ft prior, R2-1 double-indicated, repeated at <=1 mile, and an R2-1 1,500 ft from the end of every interstate entrance taper. On a 65 or 70 mph divided job that is at least 4 extra panels the BOM does not carry.",
    "Tiered longitudinal drum spacing (40 / 80 / 200 ft by worker and hazard exposure, SP150 \u00a7150.2.04.B.3, PDF p.14). Only the 80-ft activity-area cap is encoded. The 40-ft tier (elevation difference over 2 in, or healed sections <=4:1) roughly doubles tangent devices and the estimator takes no elevation input; the 200-ft tier (workers more than 10 ft off the lane, lateral offset >=4 ft, paved flush areas >=8 ft, usable disturbed shoulders) roughly halves them.",
    "Type C arrow board is mandatory in Georgia (48 in H x 96 in W, >=15 lamps, 1-mile legibility; SP150 \u00a7150.2.03, PDF p.13), Types A and B only as an emergency stand-in until a Type C arrives, mounted >=7 ft to the bottom with automatic night dimming. The engine emits a generic ARROW_BOARD line with no type field, so a Type A or B unit prices wrong. Caution mode is restricted to shoulder, roadside and one-lane two-way work and is prohibited for one-lane operation on a two-lane two-way road.",
    "HWZ-1 / HWZ-2 / HWZ-3 increased-penalty panels (O.C.G.A. \u00a740-6-188 via SP150 \u00a7150.3.04.B, PDF p.29-33). Every construction or reconstruction segment is signed as a Highway Work Zone except non-state two-lane two-way resurfacing: HWZ-2 at the start, 600-1000 ft in advance (750 ft recommended), repeated at <=1 mile, and HWZ-3 at the end; HWZ-1 additionally marks the start of a variable-speed-limit zone (SP150 \u00a7150.3.04.B.3, PDF p.31). Rigid panels, size not reduced for two-lane. This is a project-level designation, not derivable from a TA code and a speed, so no HWZ panel is emitted \u2014 at least 2 signs per qualifying job, 3 in a VSL zone.",
    "ASTM D4956 Type XI sheeting is required on all orange construction warning signs regardless of mounting height, and Type IV/VI on channelizers (SP150 \u00a7150.2.02.A, PDF p.13). Federal 6F.01 para 11 / 2A.21 permit several sheeting types. This is a unit-cost deviation and the BOM carries no sheeting field.",
    "SP150 \u00a7150.3.04.A project W20-1 series (1500/1000/500 ft; +2 MI/1 MI/1/2 MI on divided) is project-termini signing, additive to and non-overlapping with the Std 9102/9106/9107 lane-closure signs (9106/9107 General Note 6; \u00a7150.3.04.A.1, \u00a7150.3.05.C.1). Priced once per project, not per closure, so not emitted.",
    "The class-keyed downstream-taper floor (SP150 \u00a7150.3.05.C.4, PDF p.38): ta-33 200 ft (Std 9106 single-lane figure draws 100' min; SP150 governs), ta-30r and ta-30 150 ft (Std 9107; ta-30 via added departure segments). ta-25 has no departure-taper segment and carries none. TA-10 uses the Std 9102 50-ft flagger tapers.",
    "Operational caps: lane and shoulder closures may not exceed 2 miles excluding tapers without Engineer approval, and successive closures must be at least 1 mile apart (SP150 \u00a7150.3.05.A.1, PDF p.35-36). These are validators, not quantities \u2014 the estimator will happily price a 3-mile zone GDOT would not permit.",
    "Multiple successive lane closures: one lane at a time per merging taper, with a minimum tangent of 2L of drums between individual closure tapers (SP150 \u00a7150.3.05.C.2, PDF p.37). Out of product scope (single-lane closures only), so it is never reached.",
    "Flagger regime: certification by NSC or ATSSA with 'On-line classes are not accepted', stop/slow paddle per 6D.02 on a shaft of at least 7 ft, retroreflectorized day and night, optional >=24 in square red flag, Class 2 apparel by day and Class 3 at night, night flagger stations illuminated, and an ATSSA WTCS or NSC-certified supervisor on site for interstate and limited-access work (SP150 \u00a7150.3.07.B-C, PDF p.39; \u00a7150.1.04.A, PDF p.8). All labour and equipment cost with no BOM field. The engine emits flagger COUNT only.",
    "AFADs and portable temporary traffic signals are conditional-authorize in Georgia: written request, an alternate TTC plan using certified flaggers for device failure, and Engineer approval (SP150 \u00a7150.3.07.F-G, PDF p.39-40). The engine cannot substitute either for a flagger.",
    "Mobile-operations protection vehicles need a TMA 'certified for impacts not less than sixty-two (62) mph' to MASH / NCHRP-350 TL-3, with a mobile operation defined by a 3 mph minimum travel speed (SP150 \u00a7150.3.09, PDF p.40). Portable attenuators must be rated at or above the speed limit, TL-3 at >=45 mph (\u00a7150.2.10, PDF p.19). Stationary work only here, so the mobile rule never fires, and the stationary TMA stays optional as it is federally. TMA roll-ahead distance has no numeric value in SP150 or Part 6.",
    "Ramp work: EXIT OPEN signing per Figure 6P-42 (TA-42) with exit-ramp drums tightened to 10 ft for 200 ft before and 100 ft into the temporary gore (SP150 \u00a7150.3.05.E, PDF p.38). No ramp geometry input exists.",
    "Significant-project trigger: an Interstate project inside a designated Transportation Management Area (5 TMAs in Georgia, urbanized areas over 200,000 population) occupying a location for more than three days with intermittent or continuous lane closures requires a full TMP (WZSM Policy Subpart K, PDF p.11). Nothing in the BOM changes, but the job does.",
    "Table 150-1 rounds L up to the next 5 ft; the engine also rounds L/2 and the shoulder taper up to 5 ft, though SP150 publishes those as formulas with no rounding rule. Maximum error is +5 ft and it never changes a device count at Georgia's spacings.",
    "Shoulder-closure signing: W21-5a placed 500 ft prior and repeated after 2 miles (SP150 p.36), and barrier-closed shoulders taper per Std 4960 at 10:1 or flatter. Shoulder closures are out of product scope and no panel is emitted.",
    "Unless specified elsewhere in the Contract, ALL construction signs use the MUTCD Table 6G-1 Freeway/Expressway size column on every road class (SP150 Rev 8/22/2025 \u00a7150.2.07.A.1); signs wider than 48 in go on two posts (\u00a7150.2.07.B). The BOM carries no panel-size field, so every Georgia sign line prices at the wrong size.",
    "Interim sign posts (SP150 \u00a7150.2.07, PDF p.16): square tubular per T-3A, mounted 7-8 ft to the bottom, and signs LARGER THAN 48 IN REQUIRE TWO POSTS; plywood blanks and flexible sign substrates are not permitted except for non-contract utility work. Combined with the Table 6G-1 size rule this is a real materials quantity \u2014 GA state-route advance signs sit at the 2-post threshold \u2014 and the BOM emits no post line at all.",
    "GA-only personnel line: a Law Enforcement Officer is REQUIRED at functioning signalized intersections whenever a lane closure or shift blocks movements (SP150 \u00a7150.3.08.B, PDF p.40, per O.C.G.A. \u00a740-6-20). Federal Part 6 does not codify this. The engine emits a flagger count only and has no LEO field, so any Georgia job with a signalized intersection in or adjacent to the zone understates personnel. Rarely binds on ta-33 (freeway) and routinely on the arterial templates.",
    "Reduced-speed signing is not priced. Georgia's reduction is mandatory at 65/70 mph, but SP150's quantities are not derivable from a TA code and a speed: 'repeat at <=1 mile' scales with zone length and the 1,500-ft R2-1 past each interstate entrance taper scales with ramp count, which is not an input. The MUTCD code for GDOT's 'Reduced Speed Ahead' panel is not stated in SP150. The W13-1 advisory plaques Std 9106 requires under the advance signs are priced on TA-33 at 65 mph and above.",
    "Flat Standard buffers are applied per TA (9106 300 ft, 9107 50 ft, 9102 200 ft) and the 9106 150-ft termination buffer is a segment. Not modelled: the 500-ft (9106) and 300-ft (9102) desirable buffers and the curve increase (SP150 \u00a7150.3.05.C.3-4).",
    "TA-10 device class: SP150 \u00a7150.2.04.D.2 allows 28-in cones by day at flagging stations (none at night, none on interstates). TA-10 prices 28-in cones by default and drums with --night, per the Std 9102 legend; the engine has no interstate input, so an interstate TA-10 run prices cones Georgia prohibits there.",
    "Unverifiable: departure-taper device spacing. GDOT prints none - the Std 9106/9107 downstream tapers carry no spacing dimension and SP150 \u00a7150.3.05.C.4 gives length only - so device_spacing.departure stays at S (the Table 150-1 taper column).",
    "Unverifiable: speed-to-road-type mapping. GDOT keys its lane-closure details on facility (two-lane 9102 / undivided 9107 / divided 9106), not on a speed band (SP150 \u00a7150.3.04.A.2; Std 9102/9106/9107). The 0-30 / 35-45 / 50-55 / 60-80 mph bands stay; TA-10, TA-30 and TA-30R map 60-80 mph to the rural row (9102/9107 500-ft spacing), and TA-33 maps every speed to one row, so its Std 9106 spacing and site-variance rate do not change with speed. The bands drive placement only.",
    "Std 9102/9106/9107 print sign faces with distance legends (ROAD WORK 1 MILE, LANE CLOSED 1000 FT, ROAD WORK 1500 FT, 500 FEET plate); TA-33, TA-30, TA-30R and TA-10 print those faces. Other TAs keep the federal template faces."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "gilbert",
   "name": "Gilbert",
   "group": "state",
   "source": "MUTCD 11th Ed as adopted by Code of Gilbert \u00a710-5(d) (five amendments, none numeric) + Gilbert Eng Standards \u00a74.21; TCP-Rules origin/main src/data/reference/gilbert.js (cites checked 2026-09-23 against 92728ca)",
   "citation_edition": null,
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 40,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 34,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 33,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 31,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD Table 6B-3 'at least 0.33 L'; out of scope in Gilbert (gilbert.js TAPER_TYPES :579-613)",
    "buffer": "0 ft both ends, inherited from arizona.js BUFFER_POLICY (gilbert.js BUFFER_POLICY :679-703); the adopted MUTCD makes the buffer an Option",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "Gilbert ES \u00a74.21: 1 x S in tapers (a maximum); no tangent value, MUTCD \u00a76K.01 2 x S (gilbert.js DEVICE_SPACING). No ADOT 40/80 cap. Departure taper at ~20 ft per MUTCD 6B.08 \u00b614 (speed-independent; within Gilbert ES \u00a74.21 1 x S as a maximum), the same basis as the TA-10 tapers.",
    "tangent_spacing": "Gilbert ES \u00a74.21: 1 x S in tapers (a maximum); no tangent value, MUTCD \u00a76K.01 2 x S (gilbert.js DEVICE_SPACING). No ADOT 40/80 cap. Departure taper at ~20 ft per MUTCD 6B.08 \u00b614 (speed-independent; within Gilbert ES \u00a74.21 1 x S as a maximum), the same basis as the TA-10 tapers.",
    "departure_spacing": "Gilbert ES \u00a74.21: 1 x S in tapers (a maximum); no tangent value, MUTCD \u00a76K.01 2 x S (gilbert.js DEVICE_SPACING). No ADOT 40/80 cap. Departure taper at ~20 ft per MUTCD 6B.08 \u00b614 (speed-independent; within Gilbert ES \u00a74.21 1 x S as a maximum), the same basis as the TA-10 tapers.",
    "buffer_tangent_spacing": "Gilbert ES \u00a74.21: 1 x S in tapers (a maximum); no tangent value, MUTCD \u00a76K.01 2 x S (gilbert.js DEVICE_SPACING). No ADOT 40/80 cap. Departure taper at ~20 ft per MUTCD 6B.08 \u00b614 (speed-independent; within Gilbert ES \u00a74.21 1 x S as a maximum), the same basis as the TA-10 tapers."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Arrow boards required on all arterial lane closures (\u00a710-5(d)(2)a); arterial is not an input, and the template already carries them on TA-30/30R/33.",
    "Law enforcement at signalized intersections (GIL-S1-9) and per Technical Manual No. 1 (unretrievable): no device type or input.",
    "R4-7 / R4-8 KEEP RIGHT / LEFT on TA-10 approaches: statewide position, no asset.",
    "Freeway: a freeway through Gilbert is ADOT right-of-way, outside Gilbert's sources; --road-type freeway here prints federal 1000/1500/2640 spacing and a 0 ft buffer. Run --jurisdiction arizona."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "hawaii",
   "name": "Hawaii",
   "group": "state",
   "source": "HDOT 2005 Standard Specifications \u00a7645 Work Zone Traffic Control, replaced in full by the special provision dated 12-24-2025 (DOT state-projects copy https://hidot.hawaii.gov/highways/files/2025/12/Spec05-pro-st-645a_Traffic_Control_Work_dated-12-24-2025.doc; the federal-aid and four county versions are textually identical), Table 645-I 'For Traffic Control Plan'. Hawaii adopts the national MUTCD 11th Ed with no state supplement and publishes no TA atlas, but Table 645-I replaces the federal value tables for 20-55 mph work: taper length, longitudinal buffer (a flat per-speed column, 35-335 ft), advance sign spacing and channelizing-device spacing (taper, tangent, and a 10-ft work-area column) all come from it. Above 55 mph every numeric driver is federal.",
   "citation_edition": "National MUTCD 11th Ed (Dec 2023) adopted as-is, so the engine's internal table names (6B-1, 6B-2, 6B-4, 6K.01) are the correct federal citations for anything Table 645-I does not cover \u2014 which is every speed above 55 mph.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 200.0,
     "L_half_ft": 100.0,
     "L_shoulder_ft": 66.7,
     "buffer_ft": 55.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      250
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 211,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 250.0,
     "L_half_ft": 125.0,
     "L_shoulder_ft": 83.3,
     "buffer_ft": 85.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      250
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 30.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 212,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 250.0,
     "L_half_ft": 125.0,
     "L_shoulder_ft": 83.3,
     "buffer_ft": 120.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      250
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 35.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 211,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 116.7,
     "buffer_ft": 170.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 214,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 550.0,
     "L_half_ft": 275.0,
     "L_shoulder_ft": 183.3,
     "buffer_ft": 220.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 45.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 218,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 280.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 219,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 700.0,
     "L_half_ft": 350.0,
     "L_shoulder_ft": 233.3,
     "buffer_ft": 335.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 55.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 220,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "Inferred: 1/3 x HDOT Table 645-I T (W = 12 ft or less) per MUTCD 11th Ed Table 6B-3; \u00a7645 (HDOT Std Spec \u00a7645 special provision 12-24-2025) prints no shoulder taper. 233 ft at 55, 200 at 50, 183 at 45, 117 at 40, 83 at 30-35, 67 at 20-25. Above 55 mph the federal shoulder-width formula applies. Open (HDOT to confirm): the Table 645-I footnote 'W = width of lane or shoulder' may be read as full T\u2026",
    "buffer": "HDOT \u00a7645 Table 645-I, Longitudinal Buffer Space (B) (Contract requirement: HDOT Std Spec \u00a7645 special provision 12-24-2025 645.03(F), Table 645-I 'For Traffic Control Plan')",
    "sign_spacing": "HDOT \u00a7645 SP 12-24-2025 Table 645-I sign spacing D: 250 ft (20-35 mph), 500 ft (40-45), 1,000 ft (50-55). One distance, no road-type split. row 'HDOT \u00a7645 Table 645-I sign spacing D, 46-55 mph'",
    "taper_spacing": "Table 645-I 'Spacing of Cones or Tubular Markers' (HDOT Std Spec \u00a7645 special provision 12-24-2025): TAPER = S (20-55 ft), TANGENT = S, and WORK AREA = 10 ft. No departure/downstream column is printed, so the departure taper uses the taper spacing S. Above 55 mph the federal 6K.01 spacing applies (taper S, tangent 2S).",
    "tangent_spacing": "Table 645-I 'Spacing of Cones or Tubular Markers' (HDOT Std Spec \u00a7645 special provision 12-24-2025): TAPER = S (20-55 ft), TANGENT = S, and WORK AREA = 10 ft. No departure/downstream column is printed, so the departure taper uses the taper spacing S. Above 55 mph the federal 6K.01 spacing applies (taper S, tangent 2S).",
    "departure_spacing": "Table 645-I 'Spacing of Cones or Tubular Markers' (HDOT Std Spec \u00a7645 special provision 12-24-2025): TAPER = S (20-55 ft), TANGENT = S, and WORK AREA = 10 ft. No departure/downstream column is printed, so the departure taper uses the taper spacing S. Above 55 mph the federal 6K.01 spacing applies (taper S, tangent 2S). (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "Table 645-I 'Spacing of Cones or Tubular Markers' (HDOT Std Spec \u00a7645 special provision 12-24-2025): TAPER = S (20-55 ft), TANGENT = S, and WORK AREA = 10 ft. No departure/downstream column is printed, so the departure taper uses the taper spacing S. Above 55 mph the federal 6K.01 spacing applies (taper S, tangent 2S)."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Table 645-I 'W = greater than 12 ft' taper column: W x 17 (20, 25 mph), W x 20 (30, 35), W x 30 (40), W x 45 (45), W x 50 (50), W x 55 (55); footnote 'W = width of lane or shoulder' (HDOT Std Spec \u00a7645 special provision 12-24-2025, Table 645-I; render p.645-7). Encoded for whole-foot widths of 13-24 ft; a fractional width above 12 ft uses federal Table 6B-4, which under-tapers at 20-40 mph.",
    "Table 645-I covers 20-55 mph only. Above 55 mph every numeric driver in a Hawaii estimate is federal (MUTCD 11th Ed, adopted as-is) and the 10-ft work area gives way to the federal tangent-spaced work zone.",
    "Two police officers per location (HDOT Std Spec \u00a7645 special provision 12-24-2025 645.01(A), 645.03) are priced as personnel on TA-10, TA-30, TA-30R and TA-33 (TA-10 = 2 flaggers + 2 officers). Other TAs carry none; a TCP calling for more officers is not modelled.",
    "TA-10 1,000-ft cap (HDOT Std Spec \u00a7645 special provision 12-24-2025 645.03): the engine has no zone-length cap. A longer TA-10 prices normally; ta-10 warn says so.",
    "Lane-closure limits (HDOT Std Spec \u00a7645 special provision 12-24-2025 645.03(F)): only one lane closed at a time during lane-closure hours. Lane closures 8:30 a.m.-3:00 p.m. Mon-Fri; other hours need the Engineer's written acceptance (645.03(H) contemplates night work under that exception). Oahu holiday and school-jam blackout periods apply. No count impact. TA-30 closes two lanes and carries a warn.",
    "The current \u00a7645 (HDOT Std Spec \u00a7645 special provision 12-24-2025) has no TA figures; the 2005 base Section 645 had seven (Figures 1-7, R11/97), superseded. Project-level signs (645.03(B) construction signs at project begin/end, 645.03(G) two 8x4 ft advisory signs posted 2 weeks ahead) are not per-closure and are not modelled. Unverifiable: whether G20-2, the TMA or the arrow board are required per closure in Hawaii; the federal figure's required/optional split is kept, and each result reports the federal figure as adopted by Hawaii.",
    "At 56-59 mph the federal overlay, which carries every driver above 55 mph, has no road-type band; the engine uses the rural row (500 ft sign spacing). Posted limits run in 5-mph steps, so only an entered 85th-percentile speed reaches it. 60 mph and above resolve to the federal freeway row."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "idaho",
   "name": "Idaho",
   "group": "state",
   "source": "Idaho MUTCD = federal 11th Ed adopted by reference (IDAPA 39.03.41.004, rule text 7-1-25, eff. Jan 18 2024) + Idaho Traffic Manual July 2026 (apps.itd.idaho.gov/apps/manuals/traffic_manual.pdf) as the delta source (replaces the Apr 2020 edition; Part 6 renumbered to 11th-Ed numbering, every 'No supplemental information' section deleted, per its change log) + ITD 2023 Std Spec \u00a7626 with the 2025/2026 Supplementals + ITD WZSM Program 2026. ITD publishes no TTC lane-closure or flagging standard drawings. Every Part 6 formula and table value is federal: merging taper, shifting taper, shoulder taper, one-lane two-way taper (no one-lane two-way section in TM 2026), downstream taper, buffer, sign-spacing values, device spacing (\u00a76K.01). The only arithmetic deviation is the urban row cutpoint (TM 2026 \u00a76B.04 / \u00a76O.01), encoded in speed_to_road_type. IDAPA 39.03.41.004.63 also amends Fig 6P-5 (TA-5): W16-2aP replaces W16-2P, and the A and C dimensions swap.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), adopted whole by reference at IDAPA 39.03.41.004 (7-1-25) eff. Jan 18 2024. The Idaho Traffic Manual July 2026 uses 11th-Ed numbering, so the engine's 6B-1 / 6B-2 / 6B-3 / 6B-4 / 6P-xx names are the adopted names and match the state manual. TM 2026 \u00a76B.04 / \u00a76O.01 name Table 6B-1 directly. TTC warning-sign sizes are MUTCD Table 6H-1 (TM 2026 \u00a76F.01 cites it).",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Option, MUTCD 6B.06 para 11)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "Federal \u00a76K.01 para 04: 1.0*S in taper, 2.0*S on tangent. Idaho's only spacing change (N = 50, TM 2026 \u00a76N.14) covers two-way traffic on one roadway of a divided highway, which this estimator does not model. No departure column published; engine uses taper spacing.",
    "tangent_spacing": "Federal \u00a76K.01 para 04: 1.0*S in taper, 2.0*S on tangent. Idaho's only spacing change (N = 50, TM 2026 \u00a76N.14) covers two-way traffic on one roadway of a divided highway, which this estimator does not model. No departure column published; engine uses taper spacing.",
    "departure_spacing": "Federal \u00a76K.01 para 04: 1.0*S in taper, 2.0*S on tangent. Idaho's only spacing change (N = 50, TM 2026 \u00a76N.14) covers two-way traffic on one roadway of a divided highway, which this estimator does not model. No departure column published; engine uses taper spacing. (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "Federal \u00a76K.01 para 04: 1.0*S in taper, 2.0*S on tangent. Idaho's only spacing change (N = 50, TM 2026 \u00a76N.14) covers two-way traffic on one roadway of a divided highway, which this estimator does not model. No departure column published; engine uses taper spacing."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-5"
   ],
   "not_modelled": [
    "Higher fines: IDAPA 39.03.41.004.53 (replacing MUTCD \u00a76G.08): R2-6P SHALL be used where increased fines are imposed; R2-11 SHOULD (Guidance) mark the downstream end. IDAPA .004.51 deletes R2-6aP, R2-10, R2-12 from Fig 6G-1; TM July 2026 \u00a76G.08 bars R2-1001. No TA template emits any of these codes.",
    "Median-crossover default: TM July 2026 \u00a76N.15 and WZSM 2026 Ch.5 \u00a7III.A make median crossovers the ITD default on divided-highway projects 'if traffic volumes allow', unless a Chief-Engineer waiver is issued. An Idaho divided-highway project defaults to a median crossover (TA-39-style two-way operation) instead of a TA-33 lane closure; the estimator has no crossover path, so its signs, Type 3 barricades and channelizers are absent.",
    "Idaho device specs: Type 3 barricade = 7 ft (84 in) wide (TM July 2026 \u00a76K.07; Std Spec 626.02.B), tubular markers >=36 in tall and >=3 in wide (TM 2026 \u00a76K.04; Std Spec 626.02.B), drums (TM 2026 \u00a76K.06). The estimator prices one flat device class per job, so a run Idaho expects to be tubular markers or drums is costed as cones and the unit price is wrong even though the count is right.",
    "Sign sizes: TM July 2026 \u00a76H.01 makes 48x48 the Idaho default warning sign; \u00a76F.01 allows enlarging G20-1 to 60x24 and G20-2 to 48x24 'for conventional roads'; \u00a76H.35 allows G20-1 at 60x30. Sign rows here carry a MUTCD code and a quantity but no panel size, so every Idaho sign is implicitly priced at the federal minimum (MUTCD Table 6H-1; TM 2026 \u00a76F.01 cites MUTCD Table 6H-1) rather than the larger Idaho default.",
    "TM July 2026 \u00a76N.14 two-way traffic on one roadway of a divided highway: Idaho substitutes N = 50 into the channelizing-device / RPM spacing equations (citing \u00a76K.01 and \u00a76J.03), drawn on Figs 6N-1 to 6N-3 (3 sheets) with Fig 6P-39. Figure 6N-1 (revised 2026; 6N-2/6N-3 add crossover channelization options) shows 36-in tubular markers at max 2.0 x posted speed (which coincides with the federal tangent rule this file already uses), yellow temporary RPMs at 12.5 ft halving to 6.25 ft near a device, with the paired RPMs 8 in apart. Temporary RPMs are not a BOM device class, so that entire marker line is absent from any Idaho crossover job.",
    "Temporary pavement markings: TM July 2026 \u00a76J.02 REQUIRES temporary edge lines and channelizing lines on Interstates and Expressways (optional elsewhere unless shown on plans), plus lane-reduction-transition and gore markings when they are used. Striping is not a BOM line item, so a freeway Idaho job under-reports by the full marking quantity.",
    "Flagger and TCS certification: TM July 2026 \u00a76D.01 and the ITD memo of Jan 31 2024 require current IN-PERSON certification (ATSSA / Evergreen Safety Council / National Safety Council), flagger reciprocity with WA/OR/MT/UT; TRAFFIC CONTROL SUPERVISOR reciprocity with MT/OR only, and do not recognise online certs issued after Feb 29 2024. This is a labour-qualification constraint with no line item; the estimator's flagger count is unchanged but the crew supplying it may not be eligible.",
    "Pilot car: TM July 2026 \u00a76H.37 adds WAIT FOR PILOT CAR (G20-401, 30x30 or 36x36) on low-volume intersecting roads while a pilot car operates, alongside PILOT CAR FOLLOW ME (G20-4). There is no pilot-car TA template, so choosing that control method instead of TA-10's two flaggers emits no signs at all.",
    "Spring-breakup speed-restriction markers (TM July 2026 \u00a76G.06; IDAPA 39.03.14; IC 49-1005): 6x18 in markers below R2-1, red = trucks/buses >=10,000 lb GVW restricted to 30 mph, green = restriction waived by the District Engineer (yellow deleted in 2026). Seasonal, Idaho-original, and emitted by nothing here.",
    "Positive protection: ITD WZSM 2026 Ch.5 \u00a7II.A requires Positive Protection Devices (precast concrete or steel barrier, mobile barrier trailer, or shadow vehicle with TMA) in work zones with operating speeds of 45 mph or greater AND where workers have no means of escape; an engineering study is required to forgo it. TM July 2026 \u00a76K.09 and WZSM 2026 Ch.5 \u00a7II.C make ITD Form 0283 the worksheet that decides barrier use; \u00a76M.05 covers crash cushions; \u00a7III.A allows crossovers as an alternative. The engine has no 'no worker escape' site flag, so a qualifying Idaho job is short one positive-protection line (barrier, mobile barrier, or shadow vehicle + TMA; TMAs are TL-3 at >=45 mph posted per Std Spec 626.02.J). Barrier is length-driven and not in this estimator's device set. IDAPA 39.03.41.004.59 extends \u00a76M.02 item B positive protection to all work, not only long-term stationary work.",
    "Significant projects: Interstate projects inside a TMA occupying a location for three or more consecutive days with intermittent or continuous lane closures are Significant Projects requiring a full TMP; Boise/Nampa (Ada + Canyon) is the only Idaho TMA (WZSM 2026 Ch.1 \u00a7III). Scope and documentation only -- no BOM effect -- but it changes what the job costs to run.",
    "AFAD: TM July 2026 \u00a76L.02 permits AFADs where engineering judgment finds the AFAD improves TTC-zone safety or reduces project cost (considerations A-I). The estimator has no AFAD path -- a TA-10 job is always costed as two flaggers, never as AFADs, and the Idaho engineering-judgment gate is not represented either way.",
    "W8-703 AVOID WINDSHIELD DAMAGE (TM July 2026 \u00a76H.38): an Idaho-original Part 6 warning sign for seal-coat projects, posted with a W13-1P advisory-speed plaque below. No TA template emits it, so an Idaho seal-coat job under-reports by that sign plus its plaque.",
    "DO NOT PASS / NO PASSING ZONE (TM July 2026 \u00a76J.02): Idaho directs engineering judgment on R4-1 / R4-2 / R14-3 for low-volume roads on situations lasting more than 14 days. Duration is an input here (--days) but no sign row is keyed to it, so a >14-day Idaho job emits none of those three panels.",
    "TTC pay basis (ITD 2023 Std Spec \u00a7626.04/.05 + 2025/2026 Supplementals): Idaho pays TTC by UNIT, not lump sum. Signs by SF; drums, barricades, tubular markers, vertical panels and cones (cones added by the 2025 Supplementals and carried in the 2026 Supplementals) per Each; arrow boards and PCMS by Hour or Day; flagger control and pilot car by Hour. Initial setup and final removal are incidental. This estimator's counts are quantities, not the pay schedule: signs need square footage and boards/flaggers need hours before a bid.",
    "TM July 2026 \u00a76L.100 Residential Driveway Temporary Signal (FHWA Interim Approval, optional): for residential driveways within a one-lane two-way zone controlled by a temporary traffic signal. It carries an R10-11b + TURN ONLY IN DIRECTION OF ARROW plaque. No signal-controlled TA-12 path emits it."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "illinois",
   "name": "Illinois",
   "group": "state",
   "source": "IDOT 700-series Highway Standards, Revision #229 (eff. 1/1/2026; index PDF pp.285-336, public.powerdms.com/IDOT/documents/3170312) + Illinois Supplement to the MUTCD (2025 Edition) + Std Spec \u00a7701; verified against the sheets 2026-09-23 (reverse-research verified-changes.json)",
   "citation_edition": "IMUTCD 2025 = MUTCD 11th Ed (Dec 2023) + Illinois Supplement 2025 Edition. The Supplement edits NO Part 6 table, so the engine's table names (6B-1 sign spacing, 6B-2 buffer, 6B-4 taper, Figures 6P-x) are what an IDOT reviewer reads. Every numeric deviation here comes from the Highway Standards. Pinned to IDOT Highway Standards Revision #229 (eff. 1/1/2026): 701201-05, 701206-05, 701400-12, 701401-13, 701406-13, 701421-08, 701422-10, 701501-06, 701601-09, 701901-11. Rev #230 (eff. 1/1/2027; memo pp.1-3, public.powerdms.com/IDOT/documents/3413231) swaps ROAD CONSTRUCTION AHEAD W20-I103 for ROAD WORK AHEAD W20-1 and revises the work-zone speed signs.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 52,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 55,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 58,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 62,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1500,
      1100,
      2600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 42,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1500,
      1100,
      2600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 43,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1500,
      1100,
      2600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 44,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 1000.0,
     "L_half_ft": 500.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1500,
      1100,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 51,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 1000.0,
     "L_half_ft": 500.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 500.0,
     "sign_spacing_A_B_C_ft": [
      1500,
      1100,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 51,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "IDOT 700-series drawn buffer (drawn dimension on Highway Standard)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; illinois override (A 500->1500, B 500->1100, C 500->2600) per Std 701421-08 / 701422-10 (Rev #229 pp.309-310): W4-2 1500 ft to the taper, W20-5 1/2 MILE 1100 ft before it, W20-1 1 MILE 2600 ft before that",
    "taper_spacing": "Taper: 20 ft on 701201-05 note 1, 701206-05 note 1, 701501-06 note 4, 701601-09 note 6; direction indicator barricades at 50 ft (15 m) centers at >=45 mph on 701401-13, 701406-13, 701421-08, 701422-10. Tangent: 100 ft centers at >=45 mph on 701401-13 and 701422-10 ('Type II barricades, drums, or vertical barricades at 100' centers') and in the 701406-13 work area. Below 45 mph, 701501-06 note 3\u2026",
    "tangent_spacing": "Taper: 20 ft on 701201-05 note 1, 701206-05 note 1, 701501-06 note 4, 701601-09 note 6; direction indicator barricades at 50 ft (15 m) centers at >=45 mph on 701401-13, 701406-13, 701421-08, 701422-10. Tangent: 100 ft centers at >=45 mph on 701401-13 and 701422-10 ('Type II barricades, drums, or vertical barricades at 100' centers') and in the 701406-13 work area. Below 45 mph, 701501-06 note 3\u2026",
    "departure_spacing": "Taper: 20 ft on 701201-05 note 1, 701206-05 note 1, 701501-06 note 4, 701601-09 note 6; direction indicator barricades at 50 ft (15 m) centers at >=45 mph on 701401-13, 701406-13, 701421-08, 701422-10. Tangent: 100 ft centers at >=45 mph on 701401-13 and 701422-10 ('Type II barricades, drums, or vertical barricades at 100' centers') and in the 701406-13 work area. Below 45 mph, 701501-06 note 3\u2026",
    "buffer_tangent_spacing": "Taper: 20 ft on 701201-05 note 1, 701206-05 note 1, 701501-06 note 4, 701601-09 note 6; direction indicator barricades at 50 ft (15 m) centers at >=45 mph on 701401-13, 701406-13, 701421-08, 701422-10. Tangent: 100 ft centers at >=45 mph on 701401-13 and 701422-10 ('Type II barricades, drums, or vertical barricades at 100' centers') and in the 701406-13 work area. Below 45 mph, 701501-06 note 3\u2026"
   },
   "device_gates": [
    {
     "device": "drum",
     "when": {
      "min_speed": 45,
      "min_hours": 24
     },
     "modality": "shall",
     "source": "Std 701401-13 p.303 / 701422-10 p.310: a closure not limited to one day's daylight operation uses Type II barricades, drums or vertical barricades (Rev #229)"
    },
    {
     "device": "drum",
     "when": {
      "min_speed": 45,
      "night": true
     },
     "modality": "shall",
     "source": "Std 701401-13 p.303 / 701422-10 p.310: closure not limited to daylight operation (Rev #229)"
    },
    {
     "device": "cone_28in",
     "when": {
      "min_speed": 45
     },
     "source": "Std 701901-11 sht 1 (Rev #229 p.333): 18 in. cone limited to posted speed < 45 mph; 28-36 in. cone at any posted speed"
    },
    {
     "device": "cone_28in",
     "when": {
      "night": true
     },
     "source": "Std 701901-11 sht 1 (Rev #229 p.333): only the banded 28-36 in. or >36 in. cone is permitted at night (banding is not a separate line item)"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "'RIGHT LANE CLOSED / x MILES AHEAD' signs are mandatory on a freeway or expressway when TWO lanes are closed (Std 701400). The estimator's scope is single lane closures, so the trigger never fires and the signs are never emitted.",
    "45-55 MPH MULTILANE SIGN TRAIN ON TA-30. Std 701421-08 / 701422-10 (Rev #229) use W4-2 1500 ft to the taper, W20-5 1/2 MILE 1100 ft before it and W20-1 1 MILE 2600 ft before that. TA-30R carries this ladder; TA-30 prints the 350/500 ft ladder. Placement only, no count moves.",
    "TA-30 (interior lane closures) uses the federal Fig 6P-30 component list. Std 701421-08 / 701422-10 draw right-lane closures, so their additions (W20-7, speed-limit assembly, G20-I103, second arrow board, flashing barricades) are applied to TA-30R and to TA-33 off freeway, at 45-55 mph only. TA-30 merging tapers at 45 mph and up price as direction indicator barricades at 50 ft, by analogy with those sheets. On undivided multilane roads, 701421/701422 note 1 also adds W21-1 and W20-1 facing the opposite direction; not emitted.",
    "CONE BANDING. Std 701901-11 sht 1 (Rev #229 p.333) permits only banded 28 in.+ cones at night. The class sets the 28 in. minimum at night and at >=45 mph; banding is not a line item.",
    "PERMISSIVE DOUBLING. Std 701201-05 note 2 closes with 'When drums or barricades are used, these intervals between devices may be doubled'. 'May' is permissive, so the denser count is kept.",
    "MULTI-AREA RULE. Std 701201: where the distance between work areas exceeds 2000 ft (600 m), additional warning signs, flaggers and a taper are required. The estimator takes a single contiguous zone length, so a split work area is under-counted.",
    "DAY-OPERATION SCOPE. Std 701201-05, 701406-13 and 701421-08 are day-operation sheets; 701206-05, 701401-13 and 701422-10 cover night or multi-day work. Pass --night or --days 2+ to select the 701401/701422 drum rule at >=45 mph; without either, the day-sheet values apply.",
    "POSITIVE PROTECTION / TEMPORARY CONCRETE BARRIER. No IDOT source on disk covers TCB anchoring, drop-off treatment or crashworthiness. No barrier quantity is emitted.",
    "ROAD CONSTRUCTION NEXT X MILES. Std 701901 requires this advance guide sign, placed 500 ft (150 m) in advance of the project limits, on every project 2 miles or longer, plus END CONSTRUCTION G20-I105 at the end of the job; both dual-sided on multilane highways (701901-11 sht 2). The estimator takes no project length distinct from the work-zone length, so neither sign is emitted.",
    "ROAD-TYPE KEYING, unverifiable. IDOT keys its sheets by facility and speed (freeway/expressway 701400-701406 at any speed; multilane 45-55 701421/701422; 2L2W >=45 701201/701206; urban 701501/701601) and publishes no speed-to-Table-6B-1-row mapping (Rev #229 index p.285ff). The four speed bands above are the Keryk federal mapping carried through unchanged.",
    "DOWNSTREAM TAPER LENGTH, unverifiable. No IL lane-closure sheet draws a downstream taper (Rev #229 pp.290-322), so downstream_taper_ft stays at the federal 100 ft. It only drives the optional TA-33 / TA-30R departure taper.",
    "SHOULDER WIDTH DEFAULT, unverifiable. No IDOT source sets a default shoulder width for TTC estimating (Rev #229 700-series); shoulder_width_ft stays 8. The shoulder taper is optional, so no required count moves.",
    "45-MPH SIGN TRAIN. Std 701201 draws the 2L2W advance train at 500 ft spacings and is scoped to >=45 mph. The Keryk speed bands put 45 mph in urban-high, which the 701501 table also sets at 350 ft. A 45-mph two-lane TA-10 prints 350 where 701201 draws 500. No sign count moves.",
    "WORK-ZONE SPEED AS AN INPUT. Illinois day operations commonly drop the work-zone limit to 45 mph (Std 701421 title band). The estimator has no reduced-speed input, so taper, buffer, device spacing and the road-type band all run off the posted speed passed in.",
    "ROAD CONSTRUCTION AHEAD vs ROAD WORK AHEAD. Under Rev #229 contract projects post W20-I103 ROAD CONSTRUCTION AHEAD where the template prints W20-1; maintenance and utility jobs post W20-1. Rev #230 (eff. 1/1/2027) makes W20-1 universal. The template W20-1 face is kept.",
    "TA-11 has no Illinois sheet. Flagging is the IDOT default for 2L2W work. The federal figure is used.",
    "50 MPH SIGN SPACING. The 701501/701601 urban table sets 350 ft at 50-45 mph; 701201 (2L2W >=45) draws 500. The engine cannot tell urban from rural at 50 mph, so it keeps the federal rural 500. Placement only."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "indiana",
   "name": "Indiana",
   "group": "state",
   "source": "INDOT: IMUTCD 11th Ed (Dec 2025) + IDM Ch. 503 (rev Jan 2025) + Std Spec \u00a7801 (2024 + 2026 Changes) + E 801-series standard drawings (Sept 2026 set; TCLC sealed 4/29/2026; other E 801 sheets unchanged from the Sept 2025 set except TCDV-07); docs/jurisdictions/indiana/keryk-analysis/indiana-formulas.md (generated 2026-05-28), indiana-coverage.md, indiana-vs-mutcd-deviations.csv",
   "citation_edition": "MUTCD 11th Ed (2023) as republished in the Indiana MUTCD, 11th Ed (Dec 2025, effective Jan 16 2026), adopted at 105 IAC 9. The IMUTCD reprints the federal Part 6 master tables byte-for-byte and numbers them 6B-1 \u2026 6B-4, so the engine's 11th Ed table names are exactly what a reviewer reads in the manual. The trap is the operational layer: IDM Ch. 503 and the E 801 drawings cite the 10th Ed 'Table 6C-x' labels for those same tables \u2014 6C-1 = 6B-1 (sign spacing), 6C-2 = 6B-2 (SSD / buffer), 6C-3 = 6B-3 (taper minimums), 6C-4 = 6B-4 (taper formula). Quote 6B-x from the IMUTCD, 6C-x from the IDM or an E-drawing. Source: indiana-formulas.md header note 'Numbering'; indiana-vs-mutcd-deviations.csv row 'State MUTCD supplement'.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125,
     "L_half_ft": 65,
     "L_shoulder_ft": 45,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 62,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 30,
     "L_ft": 180,
     "L_half_ft": 90,
     "L_shoulder_ft": 60,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 64,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 35,
     "L_ft": 245,
     "L_half_ft": 125,
     "L_shoulder_ft": 85,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 66,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320,
     "L_half_ft": 160,
     "L_shoulder_ft": 110,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 70,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540,
     "L_half_ft": 270,
     "L_shoulder_ft": 180,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 64,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600,
     "L_half_ft": 300,
     "L_shoulder_ft": 200,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660,
     "L_half_ft": 330,
     "L_shoulder_ft": 220,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 42,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 840,
     "L_half_ft": 420,
     "L_shoulder_ft": 280,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 46,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 840,
     "L_half_ft": 420,
     "L_shoulder_ft": 280,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 44,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "IDM 503-3.04(03)(1), 'Shoulder closure tapers ... should be calculated as 1/3 L'; every TCLC freeway sheet draws 1/3 of the 12-ft-lane L. On a freeway (840-ft L, E 801-TCDV-03 Note 1) it is 280 ft. Not keyed to the shoulder width.",
    "buffer": "MUTCD Table 6B-2 (REQUIRED on interstate and freeway lane closures by INDOT Standards; 'should be provided whenever practical' on all other highways (IDM 503-3.04(03)(3), which cites the table as 'Table 6C-2'))",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "Taper: 'spacing of channelizing devices on tapers shall be numerically equal in feet to the posted speed limit in mph' [E 801-TCLG-01 Note 4; E 801-TCLC-01 GN 4]. Tangent: cones at \u2264 40 mph 'Spacing in tangent shall be 40 ft maximum' [E 801-TCDV-04 Note 1, Standard, Sept 2022]; 50 ft at 45 mph and 100 ft at \u2265 50 mph [E 801-TCDV-04 Note 3; E 801-TCLC-01 GN 3; E 801-TCLG-01 Notes 2-3; E\u2026",
    "tangent_spacing": "Taper: 'spacing of channelizing devices on tapers shall be numerically equal in feet to the posted speed limit in mph' [E 801-TCLG-01 Note 4; E 801-TCLC-01 GN 4]. Tangent: cones at \u2264 40 mph 'Spacing in tangent shall be 40 ft maximum' [E 801-TCDV-04 Note 1, Standard, Sept 2022]; 50 ft at 45 mph and 100 ft at \u2265 50 mph [E 801-TCDV-04 Note 3; E 801-TCLC-01 GN 3; E 801-TCLG-01 Notes 2-3; E\u2026",
    "departure_spacing": "Taper: 'spacing of channelizing devices on tapers shall be numerically equal in feet to the posted speed limit in mph' [E 801-TCLG-01 Note 4; E 801-TCLC-01 GN 4]. Tangent: cones at \u2264 40 mph 'Spacing in tangent shall be 40 ft maximum' [E 801-TCDV-04 Note 1, Standard, Sept 2022]; 50 ft at 45 mph and 100 ft at \u2265 50 mph [E 801-TCDV-04 Note 3; E 801-TCLC-01 GN 3; E 801-TCLG-01 Notes 2-3; E\u2026",
    "buffer_tangent_spacing": "Taper: 'spacing of channelizing devices on tapers shall be numerically equal in feet to the posted speed limit in mph' [E 801-TCLG-01 Note 4; E 801-TCLC-01 GN 4]. Tangent: cones at \u2264 40 mph 'Spacing in tangent shall be 40 ft maximum' [E 801-TCDV-04 Note 1, Standard, Sept 2022]; 50 ft at 45 mph and 100 ft at \u2265 50 mph [E 801-TCDV-04 Note 3; E 801-TCLC-01 GN 3; E 801-TCLG-01 Notes 2-3; E\u2026"
   },
   "device_gates": [
    {
     "when": {
      "road_types": [
       "freeway"
      ]
     },
     "device": "drum",
     "source": "INDOT Std Spec \u00a7801.08: 'cones shall not be used for shift or merge tapers on freeways' (parallel \u00a7107.13; IDM 503-7.02(01)(3)). Priced as drums throughout a freeway job; 42-in cones are allowed in freeway tangents only where drums would leave an effective lane under 10 ft."
    },
    {
     "when": {
      "night": true,
      "min_speed": 45
     },
     "device": "drum",
     "source": "E 801-TCDV-04 Note 4 (Standard, Sept 2022): 28-in cones at 45 and \u2265 50 mph 'may only be used for daylight restrictions'; E 801-TCFO-01 GN 2: cones in lieu of drums only for daylight lane closures."
    },
    {
     "when": {
      "gt_hours": 72
     },
     "device": "drum",
     "source": "E 801-TCDV-04 Notes 4-5 (Standard, Sept 2022): 18-in cones daylight only, 28-in cones \u2264 40 mph and 42-in channelizers 'may not be used for long-term, stationary work (more than 3 days)'."
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Freeway merge taper: E 801-TCDV-03 Note 1 (Standard) sets 840 ft for the first merge taper on freeways, independent of posted speed. Applied as merging_taper.flat on road_type freeway. The engine has no facility-class input, so it fires only with --road-type freeway or in the 60+ mph speed band. A 55-mph interstate without --road-type freeway returns 660 ft against 840 ft drawn (3-4 devices short in the taper; shoulder taper 220 vs 280 ft).",
    "Freeway shift taper: IDM 503-3.04(03)(1) says a full 12-ft interstate/freeway shift 'should be 420 ft' (Guidance). The engine derives it as L/2 of the freeway 840-ft flat taper, so it holds only when the road type resolves to freeway. Shift tapers drive only ta-15/24/25/26; no TA-33/30/30R/10 count moves.",
    "Shoulder taper: 1/3 of the 12-ft-lane L, rounded up to 5 ft. On a freeway that is 840/3 = 280 ft. Not keyed to shoulder width, which matches the TCLC sheets.",
    "TMA crash-test level, and the contradiction Indiana has not resolved: Std Spec \u00a7801.10.1 (contract-controlling) gives TL-3 on any interstate OR any construction-zone speed > 45 mph, while IDM 503-3.05(03)7.a gives TL-3 on any interstate OR posted \u2265 50 mph. The two diverge on the 46-49 mph non-interstate band (Spec: TL-3; IDM: silent). The estimator carries no TL attribute on TRUCK_MOUNTED_ATTENUATOR, so neither reading is applied. If a TL is ever emitted, take the Spec (TL-3 above 45 mph) and flag the 46-49 mph band for INDOT.",
    "TMA count: 1 per closed lane, mandatory for shadow vehicles in interstate/freeway/divided-highway lanes or shoulders DURING MOBILE OPERATIONS [IDM 503-3.05(03) item 5]. UNVERIFIED for stationary closures: E 801-TCLC-02 and -03 (Sep 2026) draw a shadow vehicle with TMA, arrow board and strobes in the closed lane (TCLC-02 Note 5, TCLC-03 Note 3 set its roll-ahead), but no sheet states it as 'shall'. The template's optional TMA is left optional. Count impact if required: +1 TMA on a freeway TA-33.",
    "Arrow board: federal Fig 6P-30 draws one arrow board per direction, solid; its notes make only positive protection (Note 2) and the TMA (Note 3) optional. The TA-30 arrow boards are priced as required. Indiana makes the arrow board mandatory on freeway lane closures (1 per closed lane). Placement at L/3 from the taper start [E 801-TCLG-01 Note 5] and the Indianapolis DPW visibility minima (\u2265 1000 ft at \u2264 30 mph, \u2265 1500 ft above) are placement rules with no BOM effect.",
    "Staggered multi-lane shift on interstates and freeways: temporary middle lane line offset 40 ft from each temporary edge line for 12-ft lanes, 80 ft for a 12\u219211 ft reduction, successive shifts separated by 2L where a merge follows [IDM 503-3.04(03)(2); E 801-TCLC-04 Notes 5-6]. Multi-lane shifts are outside this estimator's TA set and outside SCOPE.md.",
    "Operational cap: a daytime two-lane closure may not exceed 1 mile or a half-day's operation, whichever is less [Std Spec \u00a7801.16]. The estimator accepts any --zone-length and will silently price a non-compliant 2-mile Indiana daytime closure.",
    "Temporary stoppage: 20 minutes maximum per stoppage; on a non-divided highway each closed direction needs 1 flagger at the work plus at least 1 additional warning flagger (multi-lane divided: 2 + 2), with 3 working days' written notice to the Department and the Indiana State Police [E 801-TCFO-06 Note 1; Std Spec \u00a7801.16(c)(2)]. The extra warning flagger is not added to the TA-10 flagger count of 2.",
    "Interstate advance signs: 3 MI, 2 MI and 1-1/2 MI ROAD WORK (W20-1 legend family) shall precede ROAD WORK AHEAD on interstate lane closures [E 801-TCLC-01 GN 6, Sep 2026], both shoulders. Carried as option in_interstate_mile_signs (+6 signs), OFF by default: the engine has no interstate-vs-freeway input.",
    "Worksite Speed Limit: statutorily at least 10 mph below the original posted limit, settable by INDOT without an Official Action, in three tracks (Work Zone R2-1; Intermittent-Use R2-1-B + XG20-5-B plaque + S4-4 WHEN FLASHING + amber strobes; Continuous-Use R2-1-B + plaque, no strobes), with normal-speed re-establishment 500 ft downstream and interior signs at \u2264 1 mi on segments over 2 mi [IDM 503-7.01(02)1.b-c; Std Spec \u00a7801.15(c)]. None of that assembly is emitted, and the estimator has no reduced-speed input, so the posted speed passed in drives every calculation.",
    "AADT gates: above 10,000 AADT a two-lane lane closure 'may not be suitable' and INDOT steers to a full closure, detour or median crossover; significant-project TMP gates sit at 12,000 (2-lane) / 30,000 (multilane) [IDM 503-2.05(01)#3; 503-2.02(01)2.b]. AADT is not an estimator input, so an Indiana job that should not be a lane closure at all still returns a BOM. The 'AADT < 500 \u2192 detour' rule is WZTCH-2014-sourced and absent from the Jan-2025 IDM; it is not encoded.",
    "Positive control: flagger, portable temporary traffic signal or AFAD is MANDATORY on Indiana one-lane two-way work \u2014 a devices-only TA-11 is adopted but not a valid Indiana strategy [IDM 503-2.05(01)#3]. The engine will still price ta-11. Relatedly, the TA-10 template's own 'single flagger may be used' note (MUTCD Fig 6P-10 Note 2) is reprinted verbatim in the IMUTCD but the Indiana TCFO-02/-03 typicals draw two flagger stations; the template's 2 flaggers are correct for Indiana and that option should be treated as closed here.",
    "AFAD: Indiana broadens the federal single-approach-lane condition \u2014 'AFAD use should be considered for any flagging operation regardless of permanent or temporary speed limit' (Jan-2025 IDM revision, DM 25-03) [IDM 503-7.05]. An AFAD substitutes for a flagger rather than adding to the BOM, so the flagger line, not a device line, is what would move.",
    "Divided-highway duplication: Indiana DUPLICATES advance signs on both shoulders (E 801-TCLC-02/-03, Sep 2026; every advance leader has two arrows). divided_highway_duplication is set true, so the template's qty 2 rows stand.",
    "TA-33 long-term freeway sign train: Sep 2026 E 801-TCLC-02 adds XW9-1-B 'LANE ENDS' (replacing the 2025 XW9-2B LANE ENDS MERGE) and XW1-4b, each on both shoulders; E 801-TCLC-03 drops both for short and intermediate duration. Carried as option in_long_term_freeway_signs (4 signs), OFF by default and gated to road_type freeway. --side is the closed lane; the TCLC-02 long-term typical closes the left lane and shifts traffic, so run --side left to match the sheet. The shift-taper devices of that layout are not priced.",
    "TA-10 portable rumble strips, Indiana-only: required on 50-60 mph flagging operations whenever the flagger stands more than 4 hours, SSD is inadequate, the work is at night, or an AFAD is in use [IDM 503-3.05(06) paragraph 2.a]. Flagger hours, SSD and AFAD use are not estimator inputs, so no rumble-strip line is emitted and an Indiana TA-10 at 50-55 mph can be short a set.",
    "Departure taper: required on a long-term (more than 3 days, --days 4+) freeway TA-33 (E 801-TCLC-02 Note 4: 'shall extend 100 ft ... drums spaced 20 ft'; may be omitted for work-vehicle access). E 801-TCLC-03 (short/intermediate) draws none; IDM Fig 503-7D labels it optional. device_spacing.departure = 20 ft.",
    "X-prefix sign catalog: INDOT catalogs the construction series as XW20-1, XW20-4, XW20-5(R/L), XW20-7A, XW4-2-A(R/L), XG20-2, dimensionally identical to the federal panels. The Sep 2026 E 801-TCLC set prints ROAD WORK AHEAD and END ROAD WORK (the federal legends); the E 801-TCFO flagging sheets (Sept 2022) still print ROAD CONSTRUCTION AHEAD and END CONSTRUCTION. No code_map is set: federal codes carry and no quantity moves.",
    "TA-10 sign side and plaque: the both-sides posting at \u2265 50 mph (E 801-TCFO-02; TCFO-04 Note 6) is applied as add_signs duplicates of W20-1, W20-4, W3-4 and W20-7 (18 signs at 55 mph: 16 advance + 2 END). Citation caveat: TCFO-02 is titled 'Multiple Work Areas with Posted Speed \u2265 50 mph'; INDOT has no single-work-area \u2265 50 sheet. Curves (TCFO-04: dual posts and W3-4 at all speeds) are not an input. E 801-TCFO-02/-03 also do not draw the W16-2P distance plaque, so --include-optional adds two plaques Indiana's typicals omit.",
    "Speed-to-road-type 50-55 rural / 60+ freeway: UNVERIFIED. The TCFO split at 50 mph (TCFO-02 \u2265 50 at 500 ft; TCFO-03 < 50) supports the rural band, but INDOT publishes no speed-to-freeway mapping; facility class decides the freeway treatment. Current bands kept. Supply --road-type for a 60-65 mph non-freeway road.",
    "TA-30 / TA-30R: UNVERIFIED. No INDOT sheet covers a multilane undivided non-freeway lane closure (E 801-TCLC index, Sep 2026; TCLC-12 three-lane road is not an analog). The federal templates run with Indiana drivers. Count impact unknown."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "iowa",
   "name": "Iowa",
   "group": "state",
   "source": "Iowa DOT Standard Road Plans TC-418 (divided lane closure), TC-419 (undivided lane closure), TC-213/TC-214 (flagging / pilot car), TC-402 (shoulder), all 4-18-23; Std Spec Section 2528 (ERL, revised 10/20/2026). SUDAS 8030 applies to urban contracts only and is not an Iowa DOT spec. Iowa adopts the national MUTCD 11th Ed (761 IAC 130.1, ARC 0149D, eff 4/22/26) with no Part 6 exceptions; its TC plans key taper, buffer, spacing and sign spacing to POSTED SPEED.",
   "citation_edition": "National MUTCD 11th Ed (Dec 2023) adopted as-is (761 IAC 130.1); Iowa DOT TC-418 rev 15, TC-419 rev 9, TC-213 rev 6, TC-214 rev 10, TC-402 rev 10 (all 4-18-23); Std Spec 2528 (ERL rev 10/20/2026). Federal table names (6B-1, 6B-2, 6B-4, 6K.01) govern only what the TC plans do not print.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 100.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      250
     ],
     "taper_spacing_ft": 17.5,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 12.5,
     "device_class": "channelizer_42in",
     "ta33_line_devices_2000ft": 75,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 100.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      250
     ],
     "taper_spacing_ft": 17.5,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 12.5,
     "device_class": "channelizer_42in",
     "ta33_line_devices_2000ft": 75,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 100.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      250
     ],
     "taper_spacing_ft": 17.5,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 12.5,
     "device_class": "channelizer_42in",
     "ta33_line_devices_2000ft": 75,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 100.0,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 12.5,
     "device_class": "channelizer_42in",
     "ta33_line_devices_2000ft": 51,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 630.0,
     "L_half_ft": 315.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 400.0,
     "sign_spacing_A_B_C_ft": [
      700,
      700,
      700
     ],
     "taper_spacing_ft": 22.5,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 25.0,
     "device_class": "channelizer_42in",
     "ta33_line_devices_2000ft": 64,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 630.0,
     "L_half_ft": 315.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 400.0,
     "sign_spacing_A_B_C_ft": [
      700,
      700,
      700
     ],
     "taper_spacing_ft": 22.5,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 25.0,
     "device_class": "channelizer_42in",
     "ta33_line_devices_2000ft": 64,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 770.0,
     "L_half_ft": 385.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 600.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      2000
     ],
     "taper_spacing_ft": 27.5,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 25.0,
     "device_class": "channelizer_42in",
     "ta33_line_devices_2000ft": 60,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 770.0,
     "L_half_ft": 385.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 600.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      2000
     ],
     "taper_spacing_ft": 27.5,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 25.0,
     "device_class": "channelizer_42in",
     "ta33_line_devices_2000ft": 60,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 910.0,
     "L_half_ft": 455.0,
     "L_shoulder_ft": 230.0,
     "buffer_ft": 700.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      2000
     ],
     "taper_spacing_ft": 32.5,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 25.0,
     "device_class": "channelizer_42in",
     "ta33_line_devices_2000ft": 61,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "TC-402 rev 10 T: 200 ft at 45-60 mph",
    "buffer": "Iowa DOT TC-418/TC-419 dimension E (Standard plan dimension; a RANGE at 45 mph and below.)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; iowa override (A 500->1000, B 500->1000, C 500->2000) per TC-418 A = 1000, A1 = 2000 (W20-1 to W20-5); TC-419 first gap 2A at 55+; 55-70 mph",
    "taper_spacing": "TC-418/TC-419 D halved: Std Spec 2528.03.C.1.b.4 allows 42-in channelizers in place of taper drums for up to 3 days at half the drum spacing (device_spacing.by_class.channelizer_42in)",
    "tangent_spacing": "TC-418/TC-419 D halved: Std Spec 2528.03.C.1.b.4 allows 42-in channelizers in place of taper drums for up to 3 days at half the drum spacing (device_spacing.by_class.channelizer_42in)",
    "departure_spacing": "TC-418/TC-419 D halved: Std Spec 2528.03.C.1.b.4 allows 42-in channelizers in place of taper drums for up to 3 days at half the drum spacing (device_spacing.by_class.channelizer_42in)",
    "buffer_tangent_spacing": "TC-418/TC-419 D halved: Std Spec 2528.03.C.1.b.4 allows 42-in channelizers in place of taper drums for up to 3 days at half the drum spacing (device_spacing.by_class.channelizer_42in)"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "TC-214 (pilot-car TA-10 only) doubles dimension A where ADT exceeds 5,000. ADT is not an estimator input.",
    "TC-214's F (500-2000 ft by speed x ADT), H (maximum closure length by ADT) and T (pilot-car turnaround) are project geometry the estimator does not model.",
    "TA-10 over 1/4 mile switches to TC-214 pilot car (TC-213 note 2): pilot car, W20-9, rumble strips, C = 160 ft. No zone-length gate in the engine.",
    "TC-418 note 4 at 60+ mph: R2-1 SPEED LIMIT 55 is priced (2 signs, TA-33). The extra R2-1 at 1-mile intervals over 1 mile and the speed feedback sign over 4 hours are not.",
    "TA-10 pilot-car device spacing (TC-214 C = 160 ft at 50+) and the switch to TC-214 over 1/4 mile are not keyed to zone length; TA-10 is priced as TC-213.",
    "Shifting taper: no Iowa lane-shift sheet was verified (TC-61 prints a 780-ft / 15:1 taper for its own geometry only). The federal L/2 of the Iowa M table stands. No count impact on TA-33/30/30R/10.",
    "TA-30 opposing interior closure: TC-419's left-lane panel covers one direction only; no Iowa sheet for simultaneous opposing interior closures was verified. The federal both-directions TA-30 layout is priced with Iowa numbers."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "kansas",
   "name": "Kansas",
   "group": "state",
   "source": "Federal MUTCD adopted by reference (no state MUTCD) + KDOT TE7xx Standard Drawings (FHWA approval 12-05-25, certified Dec 2025-Jan 2026: TE700 Typical Work Zone Components, TE702 Channelizing Devices, TE710, TE730/731 Flagger, TE740-748 Lane Closure) + KDOT Standard Specifications 2015 Section 805 + Kansas LTAP Field Guide 2020. Sign sets, required segments and TA-10 lead-in devices from TE730/TE744.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023, Rev 1 Dec 2025), adopted by reference by KDOT; Kansas publishes no state MUTCD and no Part 6 supplement (Std Spec 805.2(a)). TE7xx set confirmed current: FHWA approval 12-05-25, certified Dec 2025-Jan 2026 (TE700, 702, 710, 730, 731, 740-748). The sheets cite the 'currently adopted MUTCD' and print 11th-Ed values (Table 6B-1 / 6B-2 / 6B-4). No published document confirms formal 11th-Ed adoption, but the table values are identical under 10th and 11th Ed numbering. Only the Section 805 special provisions 15-08001-R03 and 15-08019-R02 remain unread (ksdot.gov 403). Name-mapping trap: the Kansas LTAP Field Guide 2020 Table 3 cites its SSD table as 'Table 6C-2 of the MUTCD' (= federal 6B-2), and Kansas figures citing '6H' mean federal Chapter 6P.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 12.5,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 60,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 15.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 55,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 17.5,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 54,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 53,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 22.5,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 58,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 56,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 27.5,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 55,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 54,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 32.5,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 52,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Drawn with no optional mark on the KDOT lane-closure/flagger typicals (TE744, TE746, TE730); lengths per the TE700 Buffer Spacing table. No KDOT text states a shall.)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "Taper REPLACES: 'Space devices in merging and shifting tapers so they do not exceed a distance in feet equal to 1/2 the posted speed limit (mph) prior to work starting' \u2014 Std Spec 2015 Section 805.3(f)(1), restated in TE700 'Channelizer Placement' note (1) as 'the spacing between devices in transition area (taper) should not exceed ... 1/2 the posted speed limit'. Half of the federal 1xS taper\u2026",
    "tangent_spacing": "Taper REPLACES: 'Space devices in merging and shifting tapers so they do not exceed a distance in feet equal to 1/2 the posted speed limit (mph) prior to work starting' \u2014 Std Spec 2015 Section 805.3(f)(1), restated in TE700 'Channelizer Placement' note (1) as 'the spacing between devices in transition area (taper) should not exceed ... 1/2 the posted speed limit'. Half of the federal 1xS taper\u2026",
    "departure_spacing": "Taper REPLACES: 'Space devices in merging and shifting tapers so they do not exceed a distance in feet equal to 1/2 the posted speed limit (mph) prior to work starting' \u2014 Std Spec 2015 Section 805.3(f)(1), restated in TE700 'Channelizer Placement' note (1) as 'the spacing between devices in transition area (taper) should not exceed ... 1/2 the posted speed limit'. Half of the federal 1xS taper\u2026",
    "buffer_tangent_spacing": "Taper REPLACES: 'Space devices in merging and shifting tapers so they do not exceed a distance in feet equal to 1/2 the posted speed limit (mph) prior to work starting' \u2014 Std Spec 2015 Section 805.3(f)(1), restated in TE700 'Channelizer Placement' note (1) as 'the spacing between devices in transition area (taper) should not exceed ... 1/2 the posted speed limit'. Half of the federal 1xS taper\u2026"
   },
   "device_gates": [
    {
     "when": {
      "night": true
     },
     "device": "drum",
     "source": "KDOT Std Spec 2015 \u00a7805.3(f) and TE702 (FHWA appr 12-05-25) table note (3) limit cones to daytime operations; the drum rule"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-11",
    "ta-15",
    "ta-18",
    "ta-22",
    "ta-23",
    "ta-24",
    "ta-25",
    "ta-26",
    "ta-3",
    "ta-30r",
    "ta-33",
    "ta-6"
   ],
   "not_modelled": [
    "Downstream taper printed 100 ft on TE744/TE730 (also TE731, TE740, TE742); downstream_taper_ft = 100 and the departure taper is required on TA-33 and TA-30R.",
    "Departure-taper spacing scope: Section 805.3(f)(1)'s header says 'Tapers' and its body says 'merging and shifting tapers'. This file prices the departure taper at the federal 1xS. Under the header reading it would be 1/2*S and a 100-ft departure taper at 55 mph would carry 5 devices instead of 3. Open question for KDOT.",
    "Restricted-roadway lane-width signing (TE700 General Note 2): lane widths shall be a minimum of 11 ft; a lane under 10 ft should be closed; a lane between 10 and 11 ft should carry restricted-roadway signing W5-1 / W5-2 / W5-4. The engine takes --lane-width and uses it for L only. A Kansas job squeezed to a 10.5-ft maintained lane is short one to three W5-x panels per approach, and a job under 10 ft should not be estimated as a lane closure at all.",
    "Milled / temporary-surface signing (TE700 General Note 4): where the open driving surface is milled, carries loose temporary material, or as directed, W8-15 GROOVED PAVEMENT or W8-7 LOOSE GRAVEL shall be posted on mainline approaches a 'C' distance after the W20-1, supplemented by a W8-15p motorcycle plaque. There is no surface-condition input, so a Kansas mill-and-overlay job is short two panels per approach.",
    "KM4-20 WORK ZONE plaque (Section 805.3(b)): the plaque shall be installed above ALL existing and temporary R2-1 Speed Limit signs between the W20-1 and the KG20-2. No base template emits R2-1. The ks_wz_speed option adds the work-zone R2-1s and their KM4-20P. R2-1s already standing inside the zone are not counted, so their KM4-20 plaques are missing.",
    "Adjacent work-zone merge (Section 805.3(b)): where two zones sit under 1 mile apart rural or under 1/4 mile apart urban, the first zone's KG20-2 and the second zone's W20-1 shall be dropped. This estimator prices one zone at a time, so back-to-back Kansas zones are over-counted by two signs.",
    "Temporary pavement-marking dimensions (Std Spec 2015 Section 805 Tables 805-1 / 805-2 / 805-3): Kansas prints its own broken-line pattern (8 ft line = 8/24/32) and RPM dimensions. The BOM prices markings as tape or paint, not equipment, and only ta-11 (yield line) and ta-24 (Note 10) touch them, so no Kansas marking quantity is computed here.",
    "Taper separation (TE700): 'a distance of at least 2L should separate merging and shifting tapers'. The engine lays out one taper per segment and models no multi-taper spacing, so a Kansas plan that needs 2L of separation may not fit the zone length given.",
    "KG20-2 substitution is applied to every template in this estimator that emits an END ROAD WORK panel (ta-3, ta-6, ta-10, ta-11, ta-15, ta-18, ta-22, ta-23, ta-24, ta-25, ta-26, ta-30r, ta-33). Section 805.3(b) names KG20-2 statewide, not per-figure, so the substitution is not scoped to the seven ta-codes the Kansas onboarding mapped. G20-2 is optional in the federal templates; TA-10 and TA-30R promote it (require_signs) and TA-33 replaces the both-shoulder row with a single right-side KG20-2 (TE744). On the other templates it still appears only with --include-optional. No OTHER Kansas K-prefix panel is remapped: the KDOT Highway Sign Manual is under revision and was not acquired. TE730/TE744 add KR2-6, KM4-20P and KR2-11 on TA-10, TA-30R and TA-33.",
    "TA-11: KDOT's positive-control posture for TA-11 (devices-only, low-volume two-lane) is UNVERIFIED \u2014 no blocking clause was found on disk, so ta-11 emits the federal figure as drawn. If KDOT in fact requires flaggers there, the estimate is short two flaggers.",
    "Arrow display mode (Section 805.3(d)): the caution / alternating-diamonds mode is permitted only for shoulder work, near-shoulder roadside work, shoulder blocking, or a temporary one-lane closure on a two-lane two-way road; a lane closure gets arrow mode. The engine emits ARROW_BOARD as a count with no mode, so the device is right and the mode is unstated.",
    "Sign sheeting (Section 805.2(b)): all work-zone ORANGE signs shall use fluorescent orange Type IV or better sheeting, other work-zone signs Type III or better, and mesh signs are prohibited. The BOM carries no sheeting class, so the panel counts are right and the material spec is missing from the order.",
    "Pilot car (Section 805 overlay / microsurfacing / curing subsections): flaggers may run traffic through a patching or curing operation unless the area or the distance between flaggers exceeds 1/2 mile, at which point a pilot car shall be required. ta-10 carries two flaggers unconditionally and the estimator has no pilot-car class, so a long Kansas flagging operation is missing a vehicle and its driver.",
    "Section 805.3(a) storage setback: vehicles, equipment, materials, tools and debris shall be stored off the right-of-way or at least 30 ft from the traveled way where practical, and anything the Engineer allows inside 30 ft shall be signed, positive-protected or channelized. Those signs and barriers are site-specific and uncounted here.",
    "Smart Work Zone queue warning (KDOT Smart Work Zone ITS special provision): where specified, real-time speed and occupancy sensors drive PCMS queue-warning and travel-time messages. It is a specified-when-bid assembly, not a default, so nothing is emitted and a Kansas project carrying the special provision is short the whole ITS package.",
    "Kansas publishes no minimum device count per taper \u2014 there is no equivalent of PennDOT Pub 213's master chart anywhere in TE700 or Section 805 \u2014 so min_devices_in_taper is null and a short Kansas taper gets whatever the 1/2*S spacing produces, with no floor.",
    "City and county overlays are not asserted. The Wichita Lane Closure Guide returned HTTP 403 and was never acquired, so a Wichita job answered under this file is answered at state level.",
    "Source-currency risk: the Section 805 text encoded here is the 2015 Standard Specifications. Special provisions 15-08001-R03 and 15-08019-R02 revise Section 805 on current contracts; their text could not be fetched (ksdot.gov 403). The Dec-2025 TE700/TE702 restate the same 1/2 S, 2 S and daytime-cone rules. The KDOT Highway Sign Manual is under revision and was not acquired. TE730/731 (flagger) and TE740-748 (lane closure/crossover) read 2026-09-23.",
    "KDOT's own typicals (TE744 lane closure, TE730 flagger) drive the TA-33, TA-30R and TA-10 sign sets and required segments. The TE744 shoulder taper is required on TA-33 and TA-30R at a paved shoulder of 6 ft or wider (--shoulder-width, else the 8-ft default).",
    "Speed-to-road-type mapping is Keryk's: TE700 names road classes and keys the urban and rural rows by speed, but KDOT publishes no speed-to-class rule for expressway/freeway. Unverifiable; no count impact.",
    "Departure taper device spacing: no KDOT value. \u00a7805.3(f)(1) covers only merging and shifting tapers, and TE744 draws the 100-ft downstream taper undimensioned for spacing. The federal 1xS stands (3 devices on 100 ft at 55 mph). Unverifiable.",
    "TA-30 (urban interior lane, both directions): no KDOT typical matches. Every KDOT lane-closure sheet (TE740-748) carries KR2-6/KR2-11 and KG20-2 and draws the buffer non-optional; if the TE744 train applies, TA-30 is short about 2 KG20-2 and 2 KR2-6/KR2-11 pairs. Unverifiable, not asserted."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "kentucky",
   "name": "Kentucky",
   "group": "state",
   "source": "KYTC Standard Drawings 2025 edition (lettings from 2025-12-11): TTC-100-05 (p31) and TTC-115-04 (p33), Traffic packet; Standard Specifications \u00a7112. Kentucky adopts the national MUTCD 11th Ed by reference (603 KAR 5:050 \u00a73(1), eff. 2025-02-18), no state supplement. KYTC's own sheets deviate: printed L per speed band, 0.33 L shoulder taper, fixed-foot device spacing, its own sign-spacing table, 4-sign advance train, required END ROAD WORK, buffer marked optional.",
   "citation_edition": "National MUTCD 11th Ed (Dec 2023) adopted by reference (603 KAR 5:050 \u00a73(1)). Federal table names are correct. KYTC TTC sheets (02-26-20 drawings in the 2025 set) still cite 10th-Ed 'Table 6C-2' (= 11th-Ed Table 6B-2, same values).",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 105.6,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 30,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 105.6,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 35,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 105.6,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 105.6,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 46,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 680.0,
     "L_half_ft": 340.0,
     "L_shoulder_ft": 224.4,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 59,
     "road_type": "rural"
    },
    {
     "speed_mph": 50,
     "L_ft": 680.0,
     "L_half_ft": 340.0,
     "L_shoulder_ft": 224.4,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 59,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 680.0,
     "L_half_ft": 340.0,
     "L_shoulder_ft": 224.4,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 60,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 840.0,
     "L_half_ft": 420.0,
     "L_shoulder_ft": 277.2,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 66,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 840.0,
     "L_half_ft": 420.0,
     "L_shoulder_ft": 277.2,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 67,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "KYTC TTC-115-04 L column, SP. LT. >=45",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "KYTC TTC-115-04 Note 8 (p33): 'TAPER LENGTH SHALL BE 0.33 L', L = the sheet's table L: 106 ft (SP. LT. <=40 row), 224 ft (SP. LT. >=45 row), 277 ft (Expressway/Freeway row). Same on TTC-120-04 Note 7 (p34) and TTC-125-04 Note 7. Required when the arrow panel sits on the shoulder or clear zone, or a paved shoulder >= 8 ft is closed.",
    "buffer": "MUTCD Table 6B-2 (Option, MUTCD 6B.06 para 11)",
    "sign_spacing": "KYTC TTC-115-04 Signing and Spacing Table row 'rural'",
    "taper_spacing": "The headline Kentucky deviation: KYTC prescribes FIXED FEET, not a multiple of speed: 40 ft through the multilane merge taper and the shoulder taper (TTC-115-04 Notes 8/9), 80 ft through the activity area (TTC-100-05 Note 7; TTC-115-04 Note 10), and 20 ft through the downstream taper (TTC-115-04 Note 11). 2025 Traffic packet pp31, 33. Against the federal 1xS / 2xS these are tighter at every\u2026",
    "tangent_spacing": "The headline Kentucky deviation: KYTC prescribes FIXED FEET, not a multiple of speed: 40 ft through the multilane merge taper and the shoulder taper (TTC-115-04 Notes 8/9), 80 ft through the activity area (TTC-100-05 Note 7; TTC-115-04 Note 10), and 20 ft through the downstream taper (TTC-115-04 Note 11). 2025 Traffic packet pp31, 33. Against the federal 1xS / 2xS these are tighter at every\u2026",
    "departure_spacing": "The headline Kentucky deviation: KYTC prescribes FIXED FEET, not a multiple of speed: 40 ft through the multilane merge taper and the shoulder taper (TTC-115-04 Notes 8/9), 80 ft through the activity area (TTC-100-05 Note 7; TTC-115-04 Note 10), and 20 ft through the downstream taper (TTC-115-04 Note 11). 2025 Traffic packet pp31, 33. Against the federal 1xS / 2xS these are tighter at every\u2026",
    "buffer_tangent_spacing": "The headline Kentucky deviation: KYTC prescribes FIXED FEET, not a multiple of speed: 40 ft through the multilane merge taper and the shoulder taper (TTC-115-04 Notes 8/9), 80 ft through the activity area (TTC-100-05 Note 7; TTC-115-04 Note 10), and 20 ft through the downstream taper (TTC-115-04 Note 11). 2025 Traffic packet pp31, 33. Against the federal 1xS / 2xS these are tighter at every\u2026"
   },
   "device_gates": [
    {
     "when": {
      "gt_hours": 72
     },
     "device": "drum",
     "modality": "shall",
     "source": "KYTC Std Spec \u00a7112.03.01: use drums or Type II barricades for operations lasting more than 3 days; cones are not permitted for these"
    },
    {
     "when": {
      "night": true
     },
     "device": "drum",
     "modality": "shall",
     "source": "KYTC Std Spec \u00a7112.03.01: drums or Type II barricades for ALL nighttime operations; cones not permitted"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "TTC-100-05 Note 5 (p31): TA-10 tapers 50-100 ft at 20 ft. The ta-10 template's fixed 6 + 6 is the 100-ft end; at the 50-ft minimum each is 4.",
    "KYTC posts a 4th advance-sign gap D (freeway 2600, >=45 1100, <=40 500 / 250). The engine carries A/B/C only; placement only, no count change.",
    "TTC-100-05 prints the <=40 row as 250/250/250/250 (applied to TA-10); TTC-115/120/125/170 print 250/250/500/500 (applied to the other TAs).",
    "The KYTC table keys to the NORMAL posted limit, not a reduced work-zone speed. The estimator takes one speed.",
    "KYTC marks the buffer OPTIONAL on TTC-100-05 Note 6, TTC-115-04, TTC-120-04 and TTC-125-04. TA-10 leaves it out by default; TA-30R and TA-33 price it at Table 6B-2 where the template draws a required buffer. TA-30 leaves it out as optional per Fig 6P-30. --include-optional prices the optional ones; use --buffer-ft 0 when it is not used.",
    "TA-30 (interior lane, both directions) has no KYTC sheet. If TTC-115-04 applies per direction: +2 W20-5, +2 G20-2, +2 departure tapers. Federal figure used.",
    "\u00a7112.03.01.A requires devices on approach and intersecting roads at least 1,500 ft from the construction limits. The estimator's side-street allowance places its signs at 150 ft.",
    "The federal TA-10 Note 3 short-duration omission of W20-1/G20-2 does not apply in KY; TTC-100-05 draws both, none optional."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "louisiana",
   "name": "Louisiana",
   "group": "state",
   "source": "LADOTD TTC Standard Plans rev 05-21-2026 (TTC-00(A),(B),(D),(E), TTC-01..19) + TTC-00(C) rev 08-19-2026 + 2026 LSSRB \u00a7713 + TEM Jan 2026. The 02-07-2025 series is superseded but still posted; the index does not say which letting date each series applies to.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), adopted as the national MUTCD with no state supplement (FHWA state map: 'Louisiana adopted the national MUTCD'). New TTC-00(A) rev 05-21-2026 note 1: MUTCD Guidance shall be followed unless an LADOTD manual says otherwise, so federal 'should' spacing is effectively mandatory. Louisiana's deltas live in the TTC Standard Plans, LSSRB \u00a7713 and the TEM. Table numbers are 11th Ed (6B-x); no remap needed. A Louisiana citation reading Table 6C-1 / Figure 6H-x is off a superseded edition; translate 6C-1 -> 6B-1, 6C-2 -> 6B-2, 6C-4 -> 6B-4, 6H-x -> 6P-x.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      150,
      150,
      100
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 66,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      150,
      150,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 48,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      150,
      150,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 46,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      150,
      150,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      1000,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 50,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      1000,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 51,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      800
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 54,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      800
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 56,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1640,
      800
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 59,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Standard: LADOTD TTC-00(C) Buffer Space column, drawn as MIN Buffer Space on TTC-03/04/06/09)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; louisiana override (A 500->1000, B 500->1640, C 500->800) per LADOTD TTC-09 rev 05-21-2026 spacing table (LA B = W4-2 to taper, LA A = W20-5 to W4-2, LA C = W3-5 to W20-5)",
    "taper_spacing": "LADOTD TTC-00(C) rev 08-19-2026 Standard Device Spacing table (drums/super cones), along taper / along tangent: 25 mph 20/40, 30 mph 30/60, 35 mph 35/70, 40-75 mph 40/80. Departure: note 6D, 'Downstream Locations & Flaggers: drums or supercones at 20' max spacing. The length of taper shall be between 50' - 100' with a minimum of 6 devices.'",
    "tangent_spacing": "LADOTD TTC-00(C) rev 08-19-2026 Standard Device Spacing table (drums/super cones), along taper / along tangent: 25 mph 20/40, 30 mph 30/60, 35 mph 35/70, 40-75 mph 40/80. Departure: note 6D, 'Downstream Locations & Flaggers: drums or supercones at 20' max spacing. The length of taper shall be between 50' - 100' with a minimum of 6 devices.'",
    "departure_spacing": "LADOTD TTC-00(C) rev 08-19-2026 Standard Device Spacing table (drums/super cones), along taper / along tangent: 25 mph 20/40, 30 mph 30/60, 35 mph 35/70, 40-75 mph 40/80. Departure: note 6D, 'Downstream Locations & Flaggers: drums or supercones at 20' max spacing. The length of taper shall be between 50' - 100' with a minimum of 6 devices.'",
    "buffer_tangent_spacing": "LADOTD TTC-00(C) rev 08-19-2026 Standard Device Spacing table (drums/super cones), along taper / along tangent: 25 mph 20/40, 30 mph 30/60, 35 mph 35/70, 40-75 mph 40/80. Departure: note 6D, 'Downstream Locations & Flaggers: drums or supercones at 20' max spacing. The length of taper shall be between 50' - 100' with a minimum of 6 devices.'"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Louisiana overrides device spacing (TTC-00(C) rev 08-19-2026: 20/40 at 25 mph ... 40/80 at 40 mph and above), the departure/flagger taper (20 ft max, 50-100 ft, min 6 devices) and device class (drums; cones at 1/2 spacing by day, none at night, no 28-in cones over 40 mph). Taper L, shifting, shoulder and buffer values match federal. TA-33 / TA-30 / TA-30R / TA-10 carry the TTC-sheet minimum signing (W3-5 and R2-1 at 45 mph and above, R11-2, required G20-2), Type III barricades and night lights.",
    "Night lights are priced on --night: Type C steady-burn lights on taper devices and the first 2 tangent devices (TTC-00(C) n7), 1 Type B light on the first lane-closure sign or pair (TTC-00(B) n3), and 2 Type B lights per barricade (TTC-00(C) n14). Without --night none are priced.",
    "Type III barricades are also required on each side of every intersection and crossover (TTC-00(C) rev 08-19-2026 notes 12-17). The estimator prices the closed-lane barricades only; intersection barricades depend on site geometry.",
    "Flaggers shall not be used on Interstate highways (TTC-00(B) rev 05-21-2026 n28). The estimator takes no facility class, so a TA-10 priced at interstate speeds carries a warning, not a block.",
    "Flagger qualification, device and apparel: qualified flagger via an ATSSA or LADOTD Work Zone Task Force-approved course, re-qualified every 4 years (TTC-00(B); LSSRB \u00a7713.3.070.B.4); minimum 18-in STOP/SLOW paddle on a 6-ft staff; ANSI Class 2 by day, Class 3 at night. The BOM carries a flagger count only.",
    "Portable changeable message sign: shall be used on all Interstate highways, and on other roadways with ADT over 20,000 where space is available, at least 2 miles ahead of the taper, with a second board about 5 miles ahead if queues pass the first (TTC-00(A)). Device spec: 3 lines x 8 characters, 18-in characters (LSSRB \u00a7713.3.030). The estimator takes no facility class or ADT, so no PCMS is priced.",
    "Work-zone speed reduction: the Engineer may approve a 10-mph drop at posted speeds of 45 mph or more (TTC-00(A) rev 05-21-2026 n39). The engine takes one speed, so a 55-mph closure is priced at 55 (L = 660 ft, buffer = 495 ft) when the signed speed is 45 (L = 540, buffer = 360); device spacing is 40/80 at both speeds. Supply --speed at the reduced limit to price the reduced layout.",
    "Reduced-speed signs repeat past major intersections and at 1-mile (rural) / 1/2-mile (urban) intervals (TTC-00(A)). The estimator prices the R2-1 panels drawn on the TTC sheets plus the end-of-zone original-speed sign (n43); distance repeats on multi-mile projects are not priced.",
    "Lane-width floor: on interstates, NHS routes, truck routes, or roads with more than 5,000 ADT and 15% trucks, a minimum 11-ft lane shall be maintained unless the existing section prevents it (TTC-00(A) rev 05-21-2026 n20); 10 ft elsewhere where practical. On mainline interstates at least 1.5 ft of paved shoulder shall remain on each side. The estimator does not check lane or shoulder widths.",
    "Arrow boards shall be 4 ft x 8 ft Type C, as close to the start of the taper as practical, and not used for lane shifts (TTC-00(A)). The BOM prices the count, not the size or type.",
    "TMA with a green/amber-light truck shall be used on all interstate projects and on roadways with ADT over 20,000 at pre-construction speed 40 mph or more (TTC-09 n5, TTC-06 n2, TTC-03/04 n6); roll-ahead = manufacturer distance + 100 ft. The estimator has no ADT or facility input, so the TMA is optional: --include-optional adds it on TA-33, TA-30, TA-30R and TA-10 (40 mph and above). The 72-hour limit in TTC-00(A) n16 is guardrail blunt-end protection, not a work-zone rule.",
    "Warning signs shall be 48 in x 48 in (TTC-00(B)); lateral offset at least 6 ft from the edge of shoulder (2 ft from back of curb in urban areas); mounting height 5 ft rural / 7 ft urban; mesh roll-up signs are prohibited. The BOM carries sign codes, not sizes, sheeting or supports.",
    "Work-area length caps: 2 miles on two-lane two-way highways, 4 miles elsewhere (TTC-00(B)). --zone-length is not checked against them.",
    "Queue analysis shall be performed before approving lane closures on all freeways and expressways (TTC-00(B) rev 05-21-2026 n19, citing TEM Section 6A.1); TEM Jan 2026 \u00a76.01 applies it to Interstates with ADT of 25,000 or more. A permitting step with no BOM quantity.",
    "Where the work area is on one side only, no conflicting operations or parking may occur on the opposite shoulder within 500 ft (TTC-00(A)). Not checked.",
    "Contract requirements with no BOM quantity: closure notice of 5 working days (10 plus a TCP for closures not in the plans) (TTC-00(B)); a TCT or TCS on site during working hours, and a TCS on site at all times on freeways, expressways, interstates, multilane roads posted 45 mph or more, and roads with ADT of 25,000 or more (LSSRB \u00a7713.3.070); traffic-control diary and TCS/TCT qualification (\u00a7713.3.070.A-D).",
    "Temporary pavement markings: minimum 4 in wide, in place by the end of each day; short-term 4-ft tape on 40-ft centers (LSSRB \u00a7713.2.010 / \u00a7713.3.050). Markings are a length pay item and are not priced.",
    "Nighttime illumination: 5 / 10 / 20 fc by task level, 5 fc minimum throughout the work area (LSSRB \u00a7713.3.080.C); lighting plan 30 days ahead (\u00a7713.3.080.E). Light plants are not priced.",
    "Temporary concrete barrier: 15-ft units on a paved surface, reflectors no more than 15 ft apart (LSSRB \u00a7713.3.040). Barrier is a length item and is not priced.",
    "Divided-highway sign duplication is true for TA-33: 'On divided highways, signs shall be placed on the right and the left as shown on the TTC standards' (TTC-00(B)). The federal template already posts each advance sign right and median; the TA-33 additions carry TTC-09's both-sides quantities.",
    "Horizontal curves with radius under 300 ft need 25-ft device spacing (TTC-00(C) rev 08-19-2026). The estimator has no curve input.",
    "TA-11: no Louisiana devices-only sheet was found, so the federal figure stands.",
    "City and parish supplements (New Orleans, Baton Rouge) are not modelled.",
    "Three Louisiana rules key on AADT (PCMS over 20,000; queue analysis and full-time TCS at 25,000 or more). The estimator takes no AADT input.",
    "+1 flagger per operation when equipment or workers encroach within 2 ft of an open lane, posted inside the work zone upstream of each operation (TTC-06 n4, TTC-09 n6, rev 05-21-2026). No encroachment input, so not priced."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "maine",
   "name": "Maine",
   "group": "state",
   "source": "MaineDOT Standard Specifications March 2026 Section 652 + MaineDOT Standard Details 2026 Edition, sheets 652(07)-(15), for contracts advertised after 8/1/2026 (repair specs posted 8/01, 8/27, 9/09/2026). Maine's own TTC table is Std Detail 652(15); the typical sheets are 652(07) two-lane flagging (TA-10), 652(09) non-interstate one-way lane closure behind temporary concrete barrier, 55 mph or less, and 652(11) expressway lane closure. These sheets are read for sign additions and numbers; the component list for each TA is the federal figure, amended by them. Numbers are unchanged from the March 2020 sheets. Maine does not defer wholesale to federal: 652(15) sets a 40 mph buffer of 325, a 5-device taper minimum and device spacing as Standards; the typical sheets require G20-2, duplicate signs on both shoulders and add W13-1 to TA-10. Anything not set here is the federal value.",
   "citation_edition": "MUTCD 11th Ed by reference (Std Spec 2026 652.2 'Part VI of the latest edition'; 652.3.4 same); Maine's own values sit on Std Detail 652(15) (2026 Ed, eff. contracts advertised after 8/1/2026). Cite 652(15), not 6B-1/6B-2/6B-4, to a Maine reviewer. Sheets use 10th-Ed code W20-7a for W20-7.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 325.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 37,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MaineDOT Std Detail 652(15) Suggested Buffer Zone Lengths (Option (published as 'Suggested'))",
    "sign_spacing": "MaineDOT Std Detail 652(15) Sign Spacing Table / 652(11) p.363 expressway spacing row 'rural'",
    "taper_spacing": "MaineDOT Standard Details 2026 Ed, Std Detail 652(15), PDF p.367 (identical in the March 2020 Ed, p.349), 'Channelization Device Spacing' (Standard): 'shall not exceed a distance in feet equal to 1.0 times the speed limit in mph when used for taper channelization, and ... 2.0 times the speed limit in mph when used for tangent channelization.' Maine hardens the federal Guidance. No separate\u2026",
    "tangent_spacing": "MaineDOT Standard Details 2026 Ed, Std Detail 652(15), PDF p.367 (identical in the March 2020 Ed, p.349), 'Channelization Device Spacing' (Standard): 'shall not exceed a distance in feet equal to 1.0 times the speed limit in mph when used for taper channelization, and ... 2.0 times the speed limit in mph when used for tangent channelization.' Maine hardens the federal Guidance. No separate\u2026",
    "departure_spacing": "MaineDOT Standard Details 2026 Ed, Std Detail 652(15), PDF p.367 (identical in the March 2020 Ed, p.349), 'Channelization Device Spacing' (Standard): 'shall not exceed a distance in feet equal to 1.0 times the speed limit in mph when used for taper channelization, and ... 2.0 times the speed limit in mph when used for tangent channelization.' Maine hardens the federal Guidance. No separate\u2026",
    "buffer_tangent_spacing": "MaineDOT Standard Details 2026 Ed, Std Detail 652(15), PDF p.367 (identical in the March 2020 Ed, p.349), 'Channelization Device Spacing' (Standard): 'shall not exceed a distance in feet equal to 1.0 times the speed limit in mph when used for taper channelization, and ... 2.0 times the speed limit in mph when used for tangent channelization.' Maine hardens the federal Guidance. No separate\u2026"
   },
   "device_gates": [
    {
     "when": {
      "road_types": [
       "freeway"
      ]
     },
     "device": "drum",
     "modality": "drawn (typical)",
     "source": "MaineDOT Std Detail 652(11) Expressway Lane Closure, 2026 Ed PDF p.363 (drums drawn in taper and tangent, 'Drums spaced at 2x speed limit')"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "652(11) expressway layout (2026 Ed p.363): W20-1 ROAD WORK 1 MILE; 2640 ft; W20-5 1/2 MILE (W13-1 optional); 500 ft R4-1; 500 ft arrow diamond with XX MPH plaque; 500 ft W4-2; 500 ft R2-1(X) WORK ZONE SPEED LIMIT FINES DOUBLED; 500 ft to the L/3 shoulder taper; both shoulders. R4-1, R4-2 and the shoulder taper are priced on freeway runs; the R2-1(X) pair is priced with --option speed_reduction. The arrow diamond (2 signs, both shoulders) is not priced: the sheet does not give its sign code.",
    "652(11) notes: 'Omit W20-1 if lane closure signing array is within project limits' and 'Road Work 2 Miles and 3 Miles signs may be needed, as per resident'. Neither is an input.",
    "652(09) (2026 Ed p.361) is a non-interstate one-way lane closure behind temporary concrete barrier, 55 mph or less. It draws drums in the taper only; the tangent is barrier, which the TA-33 template does not model. It is cited here for G20-2 and both-shoulder signing only. 652(08) Note 1 (p.360): on a shoulder closure of a day or less, Type A cones may replace drums.",
    "Std Spec March 2026 652.2.4: cones at least 28 in for all conditions (no 18-in cone); Interstate vertical panels 12x36; metal drums banned. device_class carries no height.",
    "Std Spec March 2026 652.3.6: minimum roadway width 22 ft two-way, 11 ft one-way (shall); 652(07)/(09) dimension '11' min.'. No lane-width check is run.",
    "Std Spec March 2026 652.3.4: drums or barricades at a maximum 50-ft spacing in guardrail-gap areas. No guardrail input.",
    "652(10)/(12) project approach signing (2026 Ed p.362, p.364): G20-1 ROAD WORK NEXT X MILES on expressways when the project is 3/4 mile or longer; W20-1 500 FT + G20-2 500 ft past the limit of work. There is no project-length input; +1 sign per approach on long expressway projects.",
    "652(15) gives the shoulder taper as 'at least 0.33 L' but does not say whether W is the shoulder or the lane width. It is computed at the shoulder width (147 ft at 55 mph on an 8-ft shoulder vs 220 ft at 12-ft L/3; 5 devices either way under the 5-device floor). 652(15) General Note 3 ('Shoulder taper allowed when a minimum of 10 feet can be open from centerline for lane') has no input.",
    "TA-30 / TA-30R: Maine publishes no two-way multi-lane lane-closure typical (652(07)-(14), pp.359-366; 652(09) is one-way only). Federal Fig 6P-30 governs by reference (Std Spec 652.3.4); the 652(15) numbers (buffer, 5-device floor, spacing) apply."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "massachusetts",
   "name": "Massachusetts",
   "group": "state",
   "source": "MassDOT: federal MUTCD 11th Ed (2023) + 'Massachusetts Amendments to the 11th Edition of the MUTCD' (Jan 2026), adopted by Policy Directive P-26-003 (3/2/2026); TTC geometry and component lists per MassDOT Construction Standards Section 800 drawings 851.1.1 and 852.x (issue Jan 2025, public at massdot.docs.mass.gov/hwy-construction-standards/); 700 CMR 6.00 (eff. 8/7/2020); Standard Specifications 850 / 851.1.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023) + MA Amendments (Jan 2026). Policy Directive P-26-003 (3/2/2026) adopts the Jan 2026 MA Amendments for projects advertised after 3/7/2026. TTC geometry per MassDOT Construction Standards Section 800 drawings 851.1.1 / 852.x (issue Jan 2025). mass.gov lists the 2017 'Traffic Management Plans and Detail Drawings' as SUPERSEDED. Massachusetts keeps federal numbering, so the engine's table names are what an MA reviewer reads: Table 6B-1, 6B-2, 6B-4, Figure 6P-x. A legacy MA plan may still cite 10th-Ed names; translate 6C-1 -> 6B-1, 6C-2 -> 6B-2, 6C-4 -> 6B-4, 6H-x -> 6P-x.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 54,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 47,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 46,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 42,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 40,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Required minimum = SSD at posted speed (MassDOT Construction Standards 852.x, Jan 2025))",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; massachusetts override (A 500->1000, B 500->1500, C 500->2640) per MassDOT 852.6.x/852.7.x (Jan 2025); MA draws two advance signs, C unused",
    "taper_spacing": "Federal 6K.01 para 04: 1.0*S in taper, 2.0*S on tangent; checked against MassDOT 852.x (Jan 2025).",
    "tangent_spacing": "Federal 6K.01 para 04: 1.0*S in taper, 2.0*S on tangent; checked against MassDOT 852.x (Jan 2025).",
    "departure_spacing": "Federal 6K.01 para 04: 1.0*S in taper, 2.0*S on tangent; checked against MassDOT 852.x (Jan 2025). (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "Federal 6K.01 para 04: 1.0*S in taper, 2.0*S on tangent; checked against MassDOT 852.x (Jan 2025)."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "700 CMR 6.05 decides who directs traffic by road tier: Police Detail on a High Speed Road (>=45 mph with ADT >= 4,000); certified Road Flagger on a Low Speed Road (<45 mph) or a Low Traffic High Speed Road (>=45 mph with ADT < 4,000); Road Flagger allowed on a High Speed Road where continuous connected barriers separate the work and the Awarding Authority concurs. The estimator has no ADT or barrier input. On TA-10, --option ma_police_detail swaps W20-7 for MA-W20-7b; the personnel line is still labelled flaggers.",
    "MA Road Flaggers shall be at least 18, complete the MassDOT-approved certification program and carry a valid certification card (700 CMR 6.00). The BOM carries a headcount only.",
    "The MA minimum cone height is a flat 36 in (Standard Specifications 850 / 851.1) against the federal 18 in / 28 in, and Item 851 was replaced by Item 851.1 'Traffic Cones for Traffic Management' (QTCE list). device_class carries no height; quantities are unchanged.",
    "MassDOT's TTC templates are Construction Standards 852.x (Jan 2025; 852.4.1 / 852.4.4 / 852.6.1 / 852.6.5 / 852.7.3 / 852.7.5). This overlay encodes their segments, signs, TMAs and spacing ladders. The 2017 TMP and Detail Drawings are superseded.",
    "700 CMR 6.03 lists setup length, duration and time of day as project-tiering criteria with no numeric thresholds; they are set in the Construction Zone Safety Plan or by the Awarding Authority.",
    "Sign and device edits in the Jan 2026 MA Amendments Part 6 are not reflected; geometry is from 852.x (Jan 2025). The Nov 2022 Amendments changed no geometry tables.",
    "TA-11 is priced on the federal figure. 700 CMR 6.05 frames traffic direction as Road Flaggers or Police Details; whether that precludes a devices-only setup is not settled.",
    "Shoulder width: MA publishes no default. 852.6.1/852.7.5 key the shoulder taper on the actual shoulder width. The 8-ft default is not an MA value; pass --shoulder-width.",
    "TA-30R: the shoulder taper (852.6.1) is always priced. An undivided street with no shoulder has none.",
    "Sequential warning lights (852.x Note 1, first 10 drums per lane-closure taper, dusk to dawn) are priced on --night: +10 per taper (+20 on TA-30).",
    "852.7.3 TPRS + MA-W28-1 apply only to setups of 12 h or less: --option ma_short_term_tprs prices the MA-W28-1 signs; the TPRS array is not priced. MA-R2-10a FINES DOUBLED / MA-R2-10e (2022 Amendments 6F.12 / 6F.57, >= 24 h) are not priced.",
    "TMAs are required at 45 mph and up (852.x, drawn for 45-65 mph). Below 45, TA-30/TA-33 keep the federal optional TMA; TA-30R prices none. Behind temporary barrier they may be omitted (852.7.5 Note 4); there is no barrier input.",
    "Night device class: 851.1.1 Note 2 (Guidance) asks for drums in tapers at night, cones on the tangent. The class stays cone; a warning on TA-30, TA-30R and TA-33 gives the swap."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "mesa",
   "name": "Mesa",
   "group": "state",
   "source": "City of Mesa TTCM 2nd Ed; TCP-Rules origin/main src/data/reference/mesa.js (cites checked 2026-09-23 against 92728ca). TAs with no Mesa figure (TA-30 left lane, TA-33) fall back to arizona.js (MS-G8).",
   "citation_edition": null,
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 51,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 185.0,
     "L_half_ft": 92.5,
     "L_shoulder_ft": 61.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 52,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 53,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 54,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 60,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 61,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 63,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 64,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 66,
     "road_type": "urban-high"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "FIG-03 taper criteria 'at least 0.33 L' (mesa.js TAPER_CRITERIA)",
    "buffer": "Mesa publishes no buffer; arizona.js BUFFER_POLICY 0 ft applies (mesa.js BUFFER_POLICY, MS-G3)",
    "sign_spacing": "TTCM FIG-03 row 'FIG-03 >45 mph band (Urban high speed, \u00a73.6.1), 500 ft'",
    "taper_spacing": "TTCM Table 3: taper 1 x S capped at 40 ft, tangent 2 x S capped at 80 ft; activity area shall not exceed 50 ft (\u00a73.7, new in 2nd Ed) (mesa.js CHANNELIZING_DEVICE_SPACING). Work zone min(50, 2S) (\u00a73.7 activity cap); buffer min(80, 2S). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), as arizona.json, within the Table 3 40 ft taper cap.",
    "tangent_spacing": "TTCM Table 3: taper 1 x S capped at 40 ft, tangent 2 x S capped at 80 ft; activity area shall not exceed 50 ft (\u00a73.7, new in 2nd Ed) (mesa.js CHANNELIZING_DEVICE_SPACING). Work zone min(50, 2S) (\u00a73.7 activity cap); buffer min(80, 2S). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), as arizona.json, within the Table 3 40 ft taper cap.",
    "departure_spacing": "TTCM Table 3: taper 1 x S capped at 40 ft, tangent 2 x S capped at 80 ft; activity area shall not exceed 50 ft (\u00a73.7, new in 2nd Ed) (mesa.js CHANNELIZING_DEVICE_SPACING). Work zone min(50, 2S) (\u00a73.7 activity cap); buffer min(80, 2S). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), as arizona.json, within the Table 3 40 ft taper cap.",
    "buffer_tangent_spacing": "TTCM Table 3: taper 1 x S capped at 40 ft, tangent 2 x S capped at 80 ft; activity area shall not exceed 50 ft (\u00a73.7, new in 2nd Ed) (mesa.js CHANNELIZING_DEVICE_SPACING). Work zone min(50, 2S) (\u00a73.7 activity cap); buffer min(80, 2S). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), as arizona.json, within the Table 3 40 ft taper cap."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "FIG-27 second W20-1 and far-side taper beyond the signalized intersection (MS-G13): a second taper chain, not authored by the reference either.",
    "R4-7a / R4-8a KEEP RIGHT / LEFT on FIG-27 / FIG-42 (:566, :676): drawn, no asset.",
    "FIG-28 bike-lane variant and FIG-46 AFAD variant: planner choices, not inputs.",
    "Work-zone speed limit signs, three per 1/2 mile per direction (\u00a73.6.2): FIG-29 ladder out of confirmed scope."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "michigan",
   "name": "Michigan",
   "group": "state",
   "source": "MDOT 101-GEN-SPACING-CHARTS (MAY 2021) shts 1-3 + 102-GEN-NOTES (May 2022) + the MDOT Maintaining Traffic Typicals (110-TR-NFW-2L, 123-NFW-1LC-(R), 125-NFW-2LC-(IN), 203-FW-1LC-(R), 204-FW-1LC-(L), May 2021); 2025 MMUTCD (DA 2026-02); WZSMM (12/23/2025); Std Spec 812 (2020 w/ errata); Traffic Regulator's Instruction Manual (2010). Sign sets, device class and TA-10 tapers are read from the rendered typicals.",
   "citation_edition": "2025 MMUTCD, Michigan's adoption of the federal MUTCD 11th Ed. MDOT Design Advisory DA 2026-02 (Apr 20, 2026, p.1): required for MDOT let projects whose contract documents reference the latest MMUTCD, from the 2026-08-07 bid letting; Table 1B-1 compliance-date items excluded. The 6P-x / 6B-x numbering is therefore correct for new lettings; a pre-cutover project still cites the 2011 MMUTCD (6H-x / 6C-x). Every operative number comes from the MDOT Maintaining Traffic Typicals (101-GEN-SPACING-CHARTS, invoked by 102-GEN-NOTES G1). The cited typicals (101, 102, 110, 123, 125, 203, 204) carry May 2021 / May 2022 dates; the live 101/102 match the local copies. MDOT has since posted newer typicals (105-GEN-SPEED-FW Nov 2025, 111-TR-NFW-2L-RUM Mar 2026), none of which reissue these sheets. Cite the Typical for any number in this file, not the MMUTCD.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 50.0,
     "sign_spacing_A_B_C_ft": [
      250,
      250,
      250
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 52,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 83.0,
     "sign_spacing_A_B_C_ft": [
      300,
      300,
      300
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 132.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 181.0,
     "sign_spacing_A_B_C_ft": [
      400,
      400,
      400
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 230.0,
     "sign_spacing_A_B_C_ft": [
      450,
      450,
      450
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 279.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 41,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 329.0,
     "sign_spacing_A_B_C_ft": [
      550,
      550,
      550
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 42,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 411.0,
     "sign_spacing_A_B_C_ft": [
      600,
      1200,
      1200
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 44,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 476.0,
     "sign_spacing_A_B_C_ft": [
      650,
      1300,
      1300
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 47,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MDOT 101-GEN-SPACING-CHARTS sht 1, 'GUIDELINES FOR LENGTH OF LONGITUDINAL BUFFER SPACE, B' (Option (2025 MMUTCD Section 6B buffer space); MDOT note G4 bars storage in the buffer)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; michigan override (A 500->550, B 500->550, C 500->550) per 101-GEN-SPACING-CHARTS (MAY 2021) sht 1 'D' table; D = 10 x 55 mph",
    "taper_spacing": "Below 45 mph Michigan uses 1.0 x S in the taper and 2.0 x S on the tangent. At 45 mph and above MDOT caps both at a fixed distance: 50 ft in any taper, 100 ft on any tangent (101-GEN-SPACING-CHARTS sht 2 of 3; 102-GEN-NOTES TCD1/TCD2; Std Spec 812.03.D.6.a Table 812-1 p.549). At 70 mph that is 50/100 against federal 70/140. MDOT publishes no separate downstream-taper column and caps 'any taper',\u2026",
    "tangent_spacing": "Below 45 mph Michigan uses 1.0 x S in the taper and 2.0 x S on the tangent. At 45 mph and above MDOT caps both at a fixed distance: 50 ft in any taper, 100 ft on any tangent (101-GEN-SPACING-CHARTS sht 2 of 3; 102-GEN-NOTES TCD1/TCD2; Std Spec 812.03.D.6.a Table 812-1 p.549). At 70 mph that is 50/100 against federal 70/140. MDOT publishes no separate downstream-taper column and caps 'any taper',\u2026",
    "departure_spacing": "Below 45 mph Michigan uses 1.0 x S in the taper and 2.0 x S on the tangent. At 45 mph and above MDOT caps both at a fixed distance: 50 ft in any taper, 100 ft on any tangent (101-GEN-SPACING-CHARTS sht 2 of 3; 102-GEN-NOTES TCD1/TCD2; Std Spec 812.03.D.6.a Table 812-1 p.549). At 70 mph that is 50/100 against federal 70/140. MDOT publishes no separate downstream-taper column and caps 'any taper',\u2026",
    "buffer_tangent_spacing": "Below 45 mph Michigan uses 1.0 x S in the taper and 2.0 x S on the tangent. At 45 mph and above MDOT caps both at a fixed distance: 50 ft in any taper, 100 ft on any tangent (101-GEN-SPACING-CHARTS sht 2 of 3; 102-GEN-NOTES TCD1/TCD2; Std Spec 812.03.D.6.a Table 812-1 p.549). At 70 mph that is 50/100 against federal 70/140. MDOT publishes no separate downstream-taper column and caps 'any taper',\u2026"
   },
   "device_gates": [
    {
     "when": {
      "max_hours": 12,
      "night": false
     },
     "device": "cone_42in",
     "modality": "should",
     "source": "Std Spec 812.03.D.6.a (42-in devices allowed by day on work of 12 h or less)"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Sign spacing is enumerated at the published 5-mph increments 25-75 mph only. MDOT states D as a formula (D = 10 x posted speed), but overrides carry constants, so an off-grid posted speed (27 mph, 62 mph) gets the federal Table 6B-1 row. Below 25 mph and above 75 mph MDOT publishes no D.",
    "MDOT keys channelizer spacing to the work-zone speed limit (102-GEN-NOTES TCD1/TCD2). The estimator spaces on the posted speed, so a job with a work-zone speed reduction below 45 mph is under-counted.",
    "The downstream taper is 100 ft per lane in Michigan (101-GEN-SPACING-CHARTS sht 2). One lane is closed per direction on every TA here, so one 100-ft run per direction is priced.",
    "TA-10 one-lane two-way and downstream tapers are taken at MDOT's recommended 100 ft at <=15-ft spacing (TRIM (2010) p.17, Guidance): 8 devices each. At the 50-ft minimum 110-TR-NFW-2L allows, the count is 5.",
    "MCL 247.291: 'No highway shall be closed ... until suitable barriers have been erected at the ends of the highway or of the closed portion thereof, and also at the point of intersection of such highway ... with other highways' (reprinted in MMUTCD). No per-intersection Type III barricades are priced, so a detour job is short 1-2 barricades per intersecting highway.",
    "MDOT's TMA roll-ahead table (101-GEN-SPACING-CHARTS sht 3; WZSMM Tables 8-4/8-5) is keyed by test level x TMA weight x speed band, 25 ft to 175 ft. TL-2 attenuators are prohibited at 45 mph and above (WZSMM 8.07.05), and the shadow-vehicle trigger is 45 mph and two or more lanes per direction. The estimator prices a TMA as one optional unit with no test level.",
    "The Michigan default is two Traffic Regulators, one per approach; a single regulator is allowed only when a short work area, a straight road with visibility both ways, under 400 veh/day and under 45 mph all hold (Traffic Regulator's Instruction Manual p.20). That gate is not evaluated. Flagger station siting uses federal SSD (730 ft at 70 mph), not the shorter Michigan buffer.",
    "WZSMM 8.06.03: all orange diamond warning signs should be 48 x 48 in; R5-18b and R5-18c are 48 x 48 as well. The BOM counts sign panels, not sizes.",
    "Portable rumble strips (an array of 3 at 10-20 ft, arrays at 200 ft, 65 mph ceiling, plus a W8-26 RUMBLE STRIPS AHEAD sign) and AFADs (MDOT-preferred for low-volume one-lane two-way work; pair no more than 750 ft apart under a single regulator; standby regulator past 4 hours) have no line item here.",
    "Ballast: 30 lb on freeway and 15 lb off freeway per 42-in channelizer (WZSMM 6.01.03); lights are not allowed on 42-in channelizers. Ballast is not a BOM class.",
    "The TA-33 advance sequence is duplicated on both shoulders, outside and median (203/204 sht 1), pinned with ta_overrides.ta-33.divided_highway_duplication = true.",
    "MDOT hardware rules with no BOM class: only Type III barricades may be used with motorized traffic on MDOT projects (WZSMM 6.01.06); ground-driven sign supports are required on projects longer than 14 days (Std Spec 812.03.D.1/D.3); temporary panels are 48x48x1/2 in MDO plywood on a 1-3/4 in PSST upright with four or more 35-lb sandbags per support (WZD-125-E sht 2 of 3). The estimator counts sign panels only.",
    "R5-18b is priced from --days (15 days on freeway, 90 days elsewhere). The freeway band is speed-derived on TA-33; pass --road-type freeway or rural when the facility differs."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "minnesota",
   "name": "Minnesota",
   "group": "state",
   "source": "MN MUTCD 11th Edition including Revision 1 (June 2026) Part 6 (docId=38962456) + MnDOT TTC Field Manual 2018 / Flagging Handbook 2018 (not reissued for the 11th Ed; MnDOT: 'Use it with caution') / Std Plans 5-297.x / Std Spec 2020; Minn. Stat. 169.14 subd. 5d.",
   "citation_edition": "MN MUTCD 11th Edition including Revision 1 (Commissioner Order 101556, June 4, 2026; base Order 101226, Oct 13, 2025, field-effective 2026-01-18). Part 6 PDF docId=38962456 dated June 2026. Rev 1 Part 6 changes: 6G.04.1 R11-X2 scope; R11-X2 plus Type 3 barricade removed from left-lane closures in Figs 6P-24/30/31/32 and from 6P-27; R2-6bP fine $150 -> $300. Tables 6B-1..6B-4 and Figs 6P-10/6P-33 unchanged. Edition adopted at Minn. Stat. 169.06, based on the National MUTCD 11th Ed (Dec 2023). Numbering is 11th-Ed and MATCHES this engine's table names: Table 6B-1 spacing, 6B-2 SSD/buffer, 6B-3 taper criteria, 6B-4 taper formulas, Figures 6P-x. No remap is needed for the manual. The 2018 MnDOT TTC Field Manual and Flagging Handbook still carry 10th-Ed labels for the same physical tables and are the documents a field crew holds: read 6C-2 -> 6B-2, 6C-3 -> 6B-3, 6C-4 -> 6B-4, 6H-x -> 6P-x, and the old 'Sec 6E' flagging bundle -> 6D.02 (STOP/SLOW paddle, Fig 6D-1) + 6C.05 (ANSI/ISEA 107-2015 apparel) + 6E.02 (flagger method). MN-modified items are printed with an '(M)' marker in the MN Part 6 PDF.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      325,
      325,
      325
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      325,
      325,
      325
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      600,
      600,
      600
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      600,
      600,
      600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      750,
      750,
      750
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 38,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 39,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 39,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Option, MN MUTCD 6B.06 para 11 ('If a longitudinal buffer space is used, the values shown in Table 6B-2 may be used'))",
    "sign_spacing": "MN MUTCD 11th Ed Table 6B-1 (M) 'Recommended Advance Warning Sign Minimum Spacing'. Minnesota REPLACES the federal road-type A/B/C ladder with ONE speed-keyed distance, so A = B = C is what the state publishes, not a flattening artifact. Published rows: 0-30 mph = 100 ft; 35-40 = 325 ft; 45-50 = 600 ft; 55 = 750 ft; 60-65 = 1,000 ft; 70 = 1,200 ft. Federal 100/350/500 and 1000/1500/2640 do NOT\u2026",
    "taper_spacing": "taper 1.0*S (MN MUTCD 6K.01 para 04, republished federal Guidance). Tangent 2.0*S capped at 100 ft: MN MUTCD 11th incl Rev 1 6K.01 para 04.1 (Guidance), p.6K-1: 'On high-speed roadways, the spacing between cones, tubular markers, vertical panels, and drums should not exceed 100 feet'; Fig 6K-1 (M) defines high-speed as 45 mph or more, and below 45 mph 2S is 80 ft or less, so min(2*S, 100) is\u2026",
    "tangent_spacing": "taper 1.0*S (MN MUTCD 6K.01 para 04, republished federal Guidance). Tangent 2.0*S capped at 100 ft: MN MUTCD 11th incl Rev 1 6K.01 para 04.1 (Guidance), p.6K-1: 'On high-speed roadways, the spacing between cones, tubular markers, vertical panels, and drums should not exceed 100 feet'; Fig 6K-1 (M) defines high-speed as 45 mph or more, and below 45 mph 2S is 80 ft or less, so min(2*S, 100) is\u2026",
    "departure_spacing": "taper 1.0*S (MN MUTCD 6K.01 para 04, republished federal Guidance). Tangent 2.0*S capped at 100 ft: MN MUTCD 11th incl Rev 1 6K.01 para 04.1 (Guidance), p.6K-1: 'On high-speed roadways, the spacing between cones, tubular markers, vertical panels, and drums should not exceed 100 feet'; Fig 6K-1 (M) defines high-speed as 45 mph or more, and below 45 mph 2S is 80 ft or less, so min(2*S, 100) is\u2026",
    "buffer_tangent_spacing": "taper 1.0*S (MN MUTCD 6K.01 para 04, republished federal Guidance). Tangent 2.0*S capped at 100 ft: MN MUTCD 11th incl Rev 1 6K.01 para 04.1 (Guidance), p.6K-1: 'On high-speed roadways, the spacing between cones, tubular markers, vertical panels, and drums should not exceed 100 feet'; Fig 6K-1 (M) defines high-speed as 45 mph or more, and below 45 mph 2S is 80 ft or less, so min(2*S, 100) is\u2026"
   },
   "device_gates": [
    {
     "when": {
      "min_hours": 73
     },
     "device": "cone_42",
     "modality": "shall",
     "source": "MN MUTCD 11th incl Rev 1 6K.03 para 04.1 (M): long-term (>3 days, 6N.01) cones shall be >36 in"
    },
    {
     "when": {
      "min_speed": 45
     },
     "device": "cone_28in",
     "modality": "shall",
     "source": "MN MUTCD 11th incl Rev 1 6K.03 para 01; Fig 6K-1 (M) high-speed >= 45 mph: cones at least 28 in"
    },
    {
     "when": {
      "night": true
     },
     "device": "cone_28in",
     "modality": "shall",
     "source": "MN MUTCD 11th incl Rev 1 6K.03 para 01: cones at least 28 in at night"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Minn. Stat. 169.14 subd. 5d(a): where at least one lane (or part of one) is closed and workers are present, an established limit of 50 mph or greater drops to 45 mph by statute, unless (5d(b)) the zone has positive barrier, is in place less than 24 hours, has a limit set by engineering study, or has a limit set under 5d(c). The engine takes posted speed only. A 55 mph MN lane closure with no barrier, workers present and in place 24 h or more may be computed at 45 mph: L 660 -> 540 ft, buffer 495 -> 360 ft, taper spacing 55 -> 45 ft, tangent 100 -> 90 ft. Sign spacing does not move: Table 6B-1 (M) is keyed to the posted limit prior to work. The 5d(e) start/end speed-limit signs are priced on zones of 2 days or more at 50 mph and above; barrier and engineering-study exemptions are not inputs.",
    "Minn. Stat. 169.14 subd. 5d(c) caps a work-zone reduction at 20 mph where the established limit is 55 mph or more and 15 mph where it is 50 mph or less. There is no floor.",
    "Work-zone double-fine signing: FINES DOUBLE / R2-10 / R2-11 and the R2-6bP plaque ($300; MN MUTCD Rev 1 Fig 6G-1, Minn. Stat. 169.06 subd. 4a). Not priced.",
    "MN MUTCD 11th incl Rev 1 6B.08 para 14 (M): one-lane two-way taper 50 ft min at ~10 ft or 100 ft max at ~20 ft. Both give 6 devices, so fixed_count 6 is MN-published. The only MN change from federal is the ~10-ft spacing at the 50-ft minimum.",
    "Figs 6P-11, 6P-19 and 6P-20 (M) are not yet diffed against federal; the overlay pairs federal component lists with MN numeric drivers for them. Figs 6P-10, 6P-30 and 6P-33 (M) match the template plus the overrides listed here.",
    "TA-33 departure taper left optional. The 2018 MnDOT TTC Field Manual draws a ~100 ft downstream taper at 20-ft spacing on lane closures, but no MN shall requires it for TA-33. If MnDOT requires it, add ~6 devices per TA-33.",
    "Device materials, sheeting tiers and pay items are defined in MnDOT Standard Plates and Std Spec 2020 (Sec 1404 Maintenance of Traffic; Sec 1710 Traffic Control Devices). The traffic-control pay-item section (e.g. 2563) is not modelled. Cone height gates (28 in / >36 in) are in device_class.gates.",
    "Flagging distances: the 2018 MN Flagging Handbook publishes a speed-keyed chart for device spacing, taper length and flagging-station distance. Flagging-station distance is not a BOM line item, and the chart has not been reconciled against the MN MUTCD 11th incl Rev 1 (June 2026) Part 6.",
    "TA-11: whether MnDOT field practice allows a devices-only TA-11 or requires positive control is not settled; the TA-11 flagger count comes from the federal figure.",
    "MnDOT significant-project thresholds and TMP requirements (Tech Memo 22-08-T-02), temporary barrier placement (MnDOT Temporary Barrier Guidance 2018), IWZ queue-warning / dynamic-speed / WZDx devices (IWZ Toolbox 2020) and Metro / District 3 / District 6 lane-closure permitting have no field here.",
    "Only the Part 6 master tables were checked against federal: 6B-2, 6B-3 and 6B-4 identical, 6B-1 MN-modified. Another (M)-marked Part 6 table could still move a geometry number this file treats as federal.",
    "Minneapolis and St. Paul city rules are not modelled. This file is MnDOT statewide only.",
    "Default shoulder width: MnDOT publishes none; Notes for Fig 6P-33 (p.6P-68) only reference shoulders of 8 ft or more. shoulder_width_ft stays 8 (shoulder taper only).",
    "R11-X2 and its Type 3 barricade are priced on right-lane closures at 45 mph and up (TA-33, TA-30R), as drawn on Fig 6P-33 (M). 6G.04.1 para 04 Option allows another mount; Rev 1 removed both from left-lane closure figures."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "mississippi",
   "name": "Mississippi",
   "group": "state",
   "source": "MDOT Roadway Design Standard Drawings, Traffic Control Plans section, sheets TCP-1 through TCP-17 (issue date 2017-08-01; TCP sheets carry revisions dated 12/11/25 and 4/22/26; 220 pp) at https://mdot.ms.gov/documents/Roadway%20Design/Standards/Drawings/Roadway%20Design%20Standard%20Drawings.pdf, plus MDOT Standard Specifications for Road and Bridge Construction (2017) Section 618, Maintenance of Traffic and Traffic Control Plan, printed p.439. Mississippi adopts the National MUTCD dynamically and publishes no state MUTCD and no state supplement. Most MDOT numbers are the federal number re-printed: taper length at 45 mph and up, sign spacing cells, device spacing at 40 mph and up, and the multilane buffer at 45 mph and up. Mississippi departures applied: (1) the TCP-2..5 '<40' row prints taper 320, buffer 305 and device spacing 40/80, applied to the TA-33 lane closure; (2) TCP-1's shorter flagger buffer column applies to TA-10; (3) TCP-2..5 draw a 1/3 L shoulder taper (L read at the 12-ft lane width, per the sheet's table) and a 100' exit taper, both required on TA-33; (4) TCP-1 draws G20-2 and W16-2P on both approaches, required on TA-10; (5) the URBAN (35 MPH OR LESS) speed break from the TCP-1 DISTANCE BETWEEN SIGNS table; (6) TCP-2/TCP-5 post advance signs on both shoulders; (7) the TCP-2 (<65 mph) and TCP-5 (65 mph+) TA-33 sign sets; (8) drums in the approach taper (TCP-1, TCP-2, TCP-5 General Notes).",
   "citation_edition": "National MUTCD, adopted by dynamic reference, not by edition. MDOT Std Spec 618.01.2: \"All traffic control devices shall comply with Part VI of the latest edition of the MUTCD\", and the definitions section repeats that any reference to a Section of the MUTCD \"shall mean that Section of the latest version of the Manual on Uniform Traffic Control Devices\". As of September 2026 the latest edition is the 11th Edition with Revision 1 (Federal Register 2026-04365, effective 2026-03-05), so the engine's table names are the Mississippi citations: Table 6B-1 advance sign spacing, Table 6B-2 stopping sight distance (used as the longitudinal buffer via 6B.06 para 11, an Option), Table 6B-3 taper length criteria and Table 6B-4 taper formulas, Section 6B.08 taper types, Section 6K.01 para 04 channelizing-device spacing. MDOT's TCP sheets print their own unnumbered tables and no MUTCD table numbers.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 42,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      500,
      1100
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MDOT Std Dwg TCP-2 (rev 12/11/25) PDF p.125, TCP-3..5 identical; GN1: the layout shall be based on the table. At 40 mph and below the '<40' row governs: 320 ft, printed for a 12-ft lane only; a 10- or 11-ft lane takes 320 x W/12 (267, 293). The federal formula (W x S^2/60) gives less below 40 mph and is not used there. From 45 mph up the 12-ft TAPER LENGTH column equals the federal L = W x S (45\u2026",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MDOT Std Dwg TCP-2 PDF p.125 (both panels) and TCP-5 PDF p.128, TCP-3/4 same: '1/3 L' dimensioned upstream of the merging taper, drums drawn starting on the shoulder, no optional marking. L is read at the 12-ft lane width, per the sheet's table.",
    "buffer": "MDOT TCP-2..5 LONGITUDINAL BUFFER SPACE (shall (GN1) with Engineer-adjust footnote: \"BUFFER SPACE MAY BE ADJUSTED AS NEEDED ACCORDING TO ROADWAY GEOMETRY TO MEET SIGHT DISTANCE REQUIREMENTS, AS DIRECTED BY THE ENGINEER.\")",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; mississippi override (A 500->1000, C 500->1100) per MDOT TCP-2 (rev 12/11/25) PDF p.125 drawn dimensions",
    "taper_spacing": "MDOT Std Dwg TCP-2 (rev 12/11/25) PDF p.125 MAXIMUM CHANNELIZING DEVICE SPACING: '<40' row taper 40 / tangent 80, then 1.0 x / 2.0 x speed; TCP-3..5 identical.",
    "tangent_spacing": "MDOT Std Dwg TCP-2 (rev 12/11/25) PDF p.125 MAXIMUM CHANNELIZING DEVICE SPACING: '<40' row taper 40 / tangent 80, then 1.0 x / 2.0 x speed; TCP-3..5 identical.",
    "departure_spacing": "MDOT Std Dwg TCP-2 (rev 12/11/25) PDF p.125 MAXIMUM CHANNELIZING DEVICE SPACING: '<40' row taper 40 / tangent 80, then 1.0 x / 2.0 x speed; TCP-3..5 identical. (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "MDOT Std Dwg TCP-2 (rev 12/11/25) PDF p.125 MAXIMUM CHANNELIZING DEVICE SPACING: '<40' row taper 40 / tangent 80, then 1.0 x / 2.0 x speed; TCP-3..5 identical."
   },
   "device_gates": [
    {
     "device": "drum",
     "when": {
      "min_hours": 24,
      "tas": [
       "ta-33"
      ]
     },
     "modality": "shall for tapers; may for the drum-or-42-in-cone choice in tangents",
     "source": "MDOT EXTENDED PERIOD sheets TCP-3/TCP-4 General Note 3 (PDF pp.126-127, 4-lane lane-closure sheets: drums in all tapers, drums or 42-in cones in tangents; 24-h threshold inferred, MDOT gives no hours)"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-33"
   ],
   "not_modelled": [
    "TCP-1 flagger buffer applies to TA-10 only. TA-11 and other flagger templates take federal Table 6B-2.",
    "MDOT's EXTENDED PERIOD sheets TCP-3 and TCP-4 ban the 28-in cone: drums in every taper, drums or 42-in cones/tubular markers in tangents. The WORK DAY ONLY sheets for the same roads, TCP-2 and TCP-5, allow the 28-in cone. 'Extended period' is not defined in hours, so the drum gate is set at 24 h and fires only when --duration-hours or --days > 1 is supplied. It applies to TA-33 only (TCP-3/TCP-4 are 4-lane sheets). It then prices the whole job as drums, where TCP-3/TCP-4 allow 42-in cones in tangents.",
    "Speed coverage: TCP-1 tops out at 65 mph, TCP-2 through TCP-5 at 70 mph, and TCP-2 and TCP-3 are titled 'for posted speed limit less than 65 MPH'. Above those speeds every value is federal.",
    "TCP-11 (temporary construction crossover) requires drums at 20 ft on centre through the buffer space. There is no crossover template, so it is not priced.",
    "No MDOT sheet publishes a shifting-taper length or a minimum channelizing-device count in a taper; both fall through to the federal manual (Table 6B-3; no federal minimum count).",
    "MDOT's buffer and sign-spacing tables carry an Engineer-discretion clause: \"BUFFER SPACE MAY BE ADJUSTED AS NEEDED ACCORDING TO ROADWAY GEOMETRY TO MEET SIGHT DISTANCE REQUIREMENTS, AS DIRECTED BY THE ENGINEER\" and Std Spec 618's \"approximate ... may be adjusted as necessary to fit field conditions\". A Mississippi plan may legitimately differ from this estimate.",
    "TA-33 is signed on drawn dimensions at every speed. TCP-2 (PDF p.125, below 65 mph): 1000' / 500' / 1100' / 2600'. TCP-4 and TCP-5 (PDF pp.127-128, 65 mph and up) dimension 1000' / 500' / 500' / 500' / 600' / 400' / 1600' with (1500'), (1/2 MILE) and (1 MILE) callouts: the W20-5 ladder is 1000/500/1100, the same as TCP-2, and the 500' cells are the R2-1 / W3-5 / R16-3 stations between. Placement only.",
    "At 65+ mph (TCP-4 Note 9, TCP-5 Note 11) a fluorescent orange plaque is required on every R2-1 and W3-5; TCP-2 draws one on the reduced R2-1. Plaques are not priced.",
    "TCP-4 Note 6 / TCP-5 Note 8: two more reduced R2-1 per entrance ramp inside the speed zone, located by the Engineer. Not priced; add 2 x ramps.",
    "Speed-to-road-type bands 46-59 rural and 60-80 freeway: MDOT keys RURAL and EXPRESSWAY/FREEWAY by facility, not speed, and its URBAN row runs 40-70 (TCP-1 PDF p.124). Pass --road-type when the facility differs. Placement only.",
    "TA-30 and TA-30R: MDOT has no undivided multilane or interior-lane closure sheet, and TCP-2 ('4-LANE: MEDIAN LANE OR OUTSIDE LANE CLOSURE') is drawn with separated carriageways. The federal component list is kept. If TCP-2 governs TA-30R, the TA-33 shoulder and exit tapers and the TCP-2 sign set apply (about +5 signs single-sided: W20-5, R16-3, W3-5, 2 x R2-1; +6 devices at 55 mph)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "missouri",
   "name": "Missouri",
   "group": "state",
   "source": "MoDOT Engineering Policy Guide (EPG) Category 616 Temporary Traffic Control (pages revised Jan-May 2026) + National MUTCD 11th Ed (Dec 2023) Part 6 + MoDOT Std Plans 616.10BF (9 sheets) and 616.20E (5 sheets), both eff. 7/1/2025 + Std Specs for Highway Construction 2026 Ed (certified 4/28/2026) Secs 616 and 1063 + Quality Standards for TTC Devices (Apr 2024, now EPG 616.24); re-verified against primary sources 2026-09-23",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), which MoDOT applies through EPG Category 616; EPG 616.1.3: TTC devices 'shall comply with the applicable provisions of the EPG'. Missouri publishes NO standalone state MUTCD. The engine's internal table names are 11th Ed, so Table 6B-1 / 6B-2 / 6B-3 / 6B-4 and Figure 6P-x are federally correct with no remapping. A MoDOT plan reviewer reads EPG article numbers: 616.2.4 = Tbl 6B-1 (sign spacing), 616.2.6 = Tbl 6B-2 (buffer/SSD), 616.2.8.1 = Tbl 6B-3 (taper criteria), 616.2.8.2 = Tbl 6B-4 (taper formulas); chapters map 616.1-616.16 = 6A-6P in order (616.4 = 6D flagger, 616.5 = 6E, 616.7 = 6G, 616.8 = 6H, 616.11 = 6K, 616.12 = 6L, 616.14 = 6N, 616.16 = 6P); 616.18 speed limits; 616.24 Quality Standards; 616.27 TCFO (MoDOT forces only). EPG 616 pages revised Jan-May 2026 (EPG Category 616 index, oldid 58569). Cite both labels to a Missouri reviewer.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Option, MUTCD 6B.06 para 11 (11th Ed numbering) = EPG 616.2)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "taper 1xS, tangent 2xS per federal MUTCD 6K.01 para 04 (EPG 616.11). departure 20 ft per EPG 616.2.8.4 (Guidance): 'a downstream (closing) taper should have an approximate length of 100 feet with devices placed at a spacing of approximately 20 feet'; Table 616.2.8.1 prints Downstream Taper = 100 feet (oldid 58006, 12 Jan 2026).",
    "tangent_spacing": "taper 1xS, tangent 2xS per federal MUTCD 6K.01 para 04 (EPG 616.11). departure 20 ft per EPG 616.2.8.4 (Guidance): 'a downstream (closing) taper should have an approximate length of 100 feet with devices placed at a spacing of approximately 20 feet'; Table 616.2.8.1 prints Downstream Taper = 100 feet (oldid 58006, 12 Jan 2026).",
    "departure_spacing": "taper 1xS, tangent 2xS per federal MUTCD 6K.01 para 04 (EPG 616.11). departure 20 ft per EPG 616.2.8.4 (Guidance): 'a downstream (closing) taper should have an approximate length of 100 feet with devices placed at a spacing of approximately 20 feet'; Table 616.2.8.1 prints Downstream Taper = 100 feet (oldid 58006, 12 Jan 2026).",
    "buffer_tangent_spacing": "taper 1xS, tangent 2xS per federal MUTCD 6K.01 para 04 (EPG 616.11). departure 20 ft per EPG 616.2.8.4 (Guidance): 'a downstream (closing) taper should have an approximate length of 100 feet with devices placed at a spacing of approximately 20 feet'; Table 616.2.8.1 prints Downstream Taper = 100 feet (oldid 58006, 12 Jan 2026)."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-15",
    "ta-24",
    "ta-25",
    "ta-26",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "WORK-ZONE SPEED REDUCTION, the headline Missouri deviation (EPG 616.18, oldid 57906). Table 616.18 'Recommended Maximum Speed Reductions': recommended maximum 10 mph reduction when workers are in or within 10 ft of the traffic lane or for head-to-head operations; none when workers are more than 10 ft beyond the travelway; reductions over 10 mph 'shall be documented ... approved by the District Work Zone Coordinator'; the posted work-zone limit shall not go below 35 mph except where a local ordinance allows; reductions over 20 mph should be staged in two stages (Guidance). EPG 616.18: work zones SHALL be designed to the normal posted speed limit, so tapers/buffers use the normal posted speed, not the reduced one - pass the normal posted speed. The estimator takes no worker-proximity, duration or reduction input and emits no R2-1 stepdown assemblies or labour to cover existing SPEED LIMIT signs.",
    "WORK ZONE FINE sign set (EPG 616.18.1, oldid 57906; EPG 616.18.1 cites RSMo 304.582.1 directly). Carried as option_signs mo_work_zone_fine (--option mo_work_zone_fine, gated to >=60 mph) on TA-33 (CONST-3A x1, R4-1 x2, G20-5aP x2, R4-2 x2, CONST-3X x2), TA-30 (same), TA-30R (same as TA-33) and TA-10 (CONST-3A x1). CONST-3A quantity per approach is unconfirmed (EPG Fig 616.18.3.3); priced at 1. EPG 616.18.1 specifies two CONST-3X (SPEEDING/PASSING) plates. It is OFF by default because the other three warrant conditions (>4 h, reduced limit in effect, workers without positive protection) are not estimator inputs; the DO NOT PASS / PASS WITH CARE / CONST-3X rows apply only with two lanes in the direction of travel. On other TAs the option is ignored.",
    "70-MPH MISSOURI CEILING: EPG Table 616.2.6 stops at 70 mph / 730 ft and Missouri's statutory maximum speed is 70. buffer.max_ft clamps the buffer to 730 ft, so a 75-mph request returns 730 ft, not the federal 820 ft. Missouri sets no buffer floor (EPG 616.2.6).",
    "DEVICE SPACING: the shift-taper ~10 ft device spacing (short-term, markings not modified) is a Missouri addition with no federal counterpart (EPG 616.2.8.2 Guidance, oldid 58006; MUTCD 11th 6B.08 paras 07-08 has no 10-ft figure). Short-term duration and unmodified markings are not estimator inputs, so a Missouri shift taper is priced at 1xS; affects TA-15/24/25/26 (a warning prints there), not TA-10/30/30R/33. Downstream (~20 ft, encoded as device_spacing.departure) and one-lane two-way ~20 ft are federal restatements (6B.08 paras 12, 14); ta-10's fixed_count 6 already matches.",
    "TCFO MAXIMUM WORK-ZONE LENGTHS (EPG 616.27.2.7.1, oldid 58202): urban 1 mile, rural divided 2 miles, rural undivided 3 miles. This is a 'recommended maximum' (not a cap) for MoDOT-forces maintenance only; EPG 616.27 'is applicable to maintenance operations ... any field operation performed by a MoDOT employee' and does not apply to contract/permit jobs. No validator is needed.",
    "Mounting per Std Plan 616.10BF sht 1 Table A (eff. 7/1/2025): post 5 ft rural undivided / 7 ft rural divided & urban; Type 1 portable at the same heights only where post mounting is not feasible, 3-ft lateral clearance; Type 2 portable 12 in for <=3-day stationary or progressive work; multilane and 3+ lane facilities revert to post heights. The 616.27 7-ft figure is MoDOT-forces only; there is no conflict. BOM carries no mounting class, so post vs portable stand cost is not priced.",
    "MAINTENANCE SIGN CLASS (EPG 616.27): MoDOT maintenance TTC uses MGS roll-up signs rather than the contract Std Plan 616.10 panel layouts. The BOM carries sign codes only - no sign class, substrate or mounting - so a Missouri maintenance job is priced on the same sign lines as a contract job. Same gap as mounting.",
    "TEMPORARY PAVEMENT MARKING INTERVALS (EPG 616.27): 40 ft standard, 20 ft at intersections and transitions. The BOM carries no pavement-marking line item at all, so none of this is priced.",
    "DEVICE QUALITY STANDARDS as a placement requirement (Quality Standards for TTC Devices, April 2024, now EPG 616.24). A changeable message sign must be delineated by 5 channelizers forming a 100-ft taper, unless the CMS is more than 15 ft from the edge of shoulder, beyond the ditch line, or behind curb or temporary traffic barrier. The estimator prices no CMS and no CMS delineation, so a Missouri job that deploys a CMS is short 5 channelizers. The 5-channelizer taper binds the CMS, not the flashing arrow panel.",
    "TRAINING: contractor needs a certified Work Zone Specialist (Std Spec 2026 Sec 616.3.3, 4-yr recert) and flagger certification cards for flaggers and AFAD/PSFD/pilot operators (616.4.3, 4-yr); MoDOT Level 2/3 (EPG 616.25/616.26) is for MoDOT staff. No BOM quantity.",
    "Contract TAs are MUTCD 6P by reference (EPG 616.16.2); Std Plan 616.10BF is device details only (no TA layouts, freeway sheets or TMA thresholds). Std Plan 616.20E (pavement treatments, two-lane only, eff. 7/1/2025) differs: sign spacing 200/350/500/1000, buffer 250/360/495/730, tangent channelizer 40/80/80/120 by band 0-35/40-45/50-55/60-70, 100-ft one-lane taper with 5-device minimum, W20-1/W20-4/W20-7a, daylight only. Not applied here: there is no project-type input (a resurfacing TA-10 at 55 would be tangent 80 vs 110 ft, +7 devices over 2,000 ft). MoDOT-internal Tables 616.16.3.3/616.16.3.4 are for MoDOT forces only.",
    "All 54 federal TA figures are adopted by reference through EPG 616.16 (6P) with no figure redrawn. ta_overrides carries the WORK ZONE FINE option set, sequential warning lights and shift-spacing warnings only. dividedHighwayDuplication for ta-33 is inherited from federal Fig 6P-33 and is unconfirmed.",
    "Whether MoDOT design practice blocks a devices-only TA-11 posture (as Indiana does) or permits it is unconfirmed. The default here is 'permit', per the federal posture.",
    "St. Louis City and Kansas City local TTC supplements were not researched. A Missouri job inside either city may be governed by a local supplement this file does not carry.",
    "Tables 616.2.4, 616.2.6, 616.2.8.1 and 616.2.8.2 read at EPG 616.2 oldid 58006 (12 Jan 2026); values match federal except the urban speed break (35/40), the ~10 ft shift-taper spacing (EPG 616.2.8.2) and the single 100-ft downstream taper length (Table 616.2.8.1).",
    "SEQUENTIAL WARNING LIGHTS AND DIBs (EPG 616.11.1, 616.11.8, Std Spec 2026 Sec 616.5.2.3): priced. Night freeway TA-33 / TA-30R adds one sequential light per merging-taper device (road type freeway stands in for interstate; there is no interstate input). Jobs of 4+ days price the merging taper in direction indicator barricades (long-term stationary).",
    "DEFAULT SHOULDER WIDTH (unverifiable): shoulder_width_ft stays 8. No MoDOT contract source sets a default; the only figure found is internal EPG Table 616.16.3.4 note 4 'Based on 10 ft. shoulder width' (MoDOT forces only, oldid 58632). At 10 ft the optional TA-33 shoulder taper would be 183 vs 147 ft."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "montana",
   "name": "Montana",
   "group": "state",
   "source": "MUTCD 11th Ed adopted whole, no supplement (MDT Chief Engineer design memo Oct 22 2024 p.1-2) + MDT Detailed Drawings \u00a7618 (2026 set, detailed_drawings/2026/618-Traffic-Control.pdf; sheets rev Jun 27 2024 / Jun 26 2025) + MDT Std Spec 2026 \u00a7618 ('The Detailed Drawings and the MUTCD provide traffic control requirements for the contract', 618.03.2 p.618-1). Anything this file does not set inherits federal.json. Montana does NOT defer to federal: the contract drawings change device class, the TA-10 sign, flagging tapers and buffer, the shoulder taper, the divided merging taper and the urban sign-spacing band. Re-verified against the MDT sheets 2026-09-23.",
   "citation_edition": "FHWA MUTCD 11th Ed (Dec 2023), adopted whole with no supplement, conformance Jan 1 2026 (MDT design memo Oct 22 2024). There is no state MUTCD. The MT sheets print no MUTCD table numbers.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 54,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 46,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 47,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 960.0,
     "L_half_ft": 480.0,
     "L_shoulder_ft": 320.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 50,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 960.0,
     "L_half_ft": 480.0,
     "L_shoulder_ft": 320.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 47,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 960.0,
     "L_half_ft": 480.0,
     "L_shoulder_ft": 320.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 44,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 960.0,
     "L_half_ft": 480.0,
     "L_shoulder_ft": 320.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 41,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MDT DD 618-21 (p.14) / 618-22 / 618-23: '960' PLASTIC DRUMS TAPER (LENGTH ASSUMES AN 80 M.P.H. APPROACH SPEED)', drawn on every divided four-lane sheet; 618-M3 note 2: 'Ensure taper is at least 960''. Rural and interstate sheets only; urban multi-lane sheets 618-U20/U30/U40 print L = 125/245/540 at 25/35/45 mph (Table 6B-4).",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MDT DD 618-U15 (p.35) note 4, 618-U20 (p.37), 618-U40 (p.41) note 5: shoulder taper '1/3 L', L from the 12-ft table; 'may be omitted if paved shoulder is less than 8''. Divided: 618-M3 (p.29) note 1 'USE A MINIMUM 320' SHOULDER TAPER' (= 960/3, via the TA-33 flat rule).",
    "buffer": "MUTCD Table 6B-2 (Option, 6B.06 para 11)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "MUTCD 6K.01 para 04; departure 20 ft and buffer at G: MDT DD 618-U01/U15/U20/U40 (p.31/35/37/41)",
    "tangent_spacing": "MUTCD 6K.01 para 04; departure 20 ft and buffer at G: MDT DD 618-U01/U15/U20/U40 (p.31/35/37/41)",
    "departure_spacing": "MUTCD 6K.01 para 04; departure 20 ft and buffer at G: MDT DD 618-U01/U15/U20/U40 (p.31/35/37/41)",
    "buffer_tangent_spacing": "MUTCD 6K.01 para 04; departure 20 ft and buffer at G: MDT DD 618-U01/U15/U20/U40 (p.31/35/37/41)"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Device class by run: MDT draws plastic drums in tapers and flexible guide posts on tangent and work-area runs (DD 618-00 note 1; 618-U20 legend). Priced that way. Downstream tapers are drums on 618-12, 618-U01 and 618-21; urban multi-lane 618-U20/U30 draw them as flexible guide posts.",
    "Type III barricade B(III) on urban TA-30R (1) and TA-30 (2) is priced from DD 618-U20 / 618-U30. Rural and divided sheets draw B(III) at other positions; those are not priced.",
    "R2-15* / G20-2 on rural TA-10 and on TA-33 come from project-wide layouts (DD 618-20, 618-04) and the MDT-forces guideline (618-M3, 618-M1), not the work-area sheets, so they are not required per closure. Rural TA-10 R2-15 is option 'mt_project_signing'. Urban sheets (618-U01, U20, U30) draw R2-15 and G20-2, and they are priced there.",
    "UNVERIFIABLE: advance sign spacing on rural two-lane and freeway. MDT publishes no A/B/C table for these classes. 618-M1 uses 500 ft between every sign; 618-M3 puts W4-2R 940 ft ahead of the taper, then 800/800/800/900/900 ft interleaved with R2-1, W3-5, R2-15; contract sheet 618-21 draws other distances. Federal 6B-1 rows kept. No count impact. DD 618-12 prints fixed rural flagging distances (-650/-1250/-1500/-2000/-3000); these are not modelled as A/B/C.",
    "MT-unique sign assets: R2-15*, R2-4D*, W23-2* ('* denotes signs unique to Montana', DD 618 sheets). R2-4D (end of speed zone past the work area) is not emitted.",
    "TA-10 buffer 100 ft is flat; MDT allows it longer on downgrades (DD 618-12 note 3). Not an input here.",
    "Urban TA-30R (DD 618-U20) also draws W20-1 and G20-2 for opposing traffic; the single-direction template does not emit them.",
    "DD 618-21 draws 2,250 ft of guide-post tangent between the end of the 960-ft taper and BEGIN WORK AREA; the engine uses a Table 6B-2 buffer. About +15 devices if adopted. Unconfirmed with MDT.",
    "Night flagging accessories (MDT Std Spec 2026 \u00a7618.03.14.A.1 balloon lights at each flagger station; A.4 LED-lit W20-7a): not priced. The A.5 temporary portable rumble strips (3 at each W3-4) are priced on night TA-10."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "nebraska",
   "name": "Nebraska",
   "group": "state",
   "source": "NDOT Standard Plans 920-R7, 921-R8, 922-R11, 923-R2, 924-R4, 926 (standard-plans.pdf pp.130-142; Standard Plans TOC dated 2026-12-01, no 92x change in the May/Dec 2026 change lists) + 2017 Standard Specifications \u00a7422 (https://dot.nebraska.gov/media/g4qp4y0d/2017-specbook.pdf) + Nebraska 2025 Supplement to the MUTCD. Re-verified against the plan sheets 2026-09-23.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), per the Nebraska 2025 Supplement p.i Introduction: 'This manual consists of the 11th Edition of the MUTCD... subject to such modifications as is set forth in this supplement'. Cite Table 6B-1 / 6B-2 / 6B-3 / 6B-4 and Figure 6P-x. NDOT's MUTCD page names the 2009 MUTCD with Revisions 1 & 2; the 2025 Supplement names the 11th Ed; the numbers are identical, and which edition governs is an open question. Under the 2009 manual a reviewer reads Table 6C-1 / 6C-2 / 6C-3 / 6C-4 and Figure 6H-x. The TTC drawings that govern are NDOT Standard Plans 920-R7 to 926, drafted on the 2009 MUTCD (R6 '2009 MUTCD UPDATE', Jun 2014) and still current (TOC 2026-12-01); the plan sheets carry the numbers used here.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      7960
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 41,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      7960
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 40,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      7960
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      7960
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 37,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "NDOT Std Plan 920-R7 sh2 (p.131): shoulder taper 1/3 L minimum (Guidance 'about one-third L'); L comes from the lane-width table (10/11/12 ft, no shoulder column). Std Plan 926 sh1 (p.141) draws 'SHOULDER TAPER 1/3 L, PLASTIC DRUMS AT S SPACING' beside the 12-ft lane taper. Interpretation: L read at 12 ft.",
    "buffer": "MUTCD Table 6B-2 (Option, MUTCD 6B.06 para 09-11 (11th Ed numbering))",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; nebraska override (A 500->1000, B 500->1600, C 500->7960) per NDOT Std Plan 926 sh1 (p.141): W4-2 at 1000 ft, W20-5 1/2 MILE at 2600 ft, W20-5 1 MILE, W20-1G 2 MILES (~10560 ft); note 12 low-volume reduction to 1500 ft / 1/2 mi / 1 mi at the Engineer's direction",
    "taper_spacing": "NDOT Std Plan 920-R7 sheet 2 of 3 (p.131): taper spacing S, tangent spacing 2S (926 sh1: 'plastic drums at S spacing' in tapers, 'drums or 42\" cones at 2S spacing' in tangent). Departure: 920-R7 sh2 'Downstream Tapers' (Guidance): 'minimum length of about 100 feet per lane, with devices spaced about 20 feet apart'.",
    "tangent_spacing": "NDOT Std Plan 920-R7 sheet 2 of 3 (p.131): taper spacing S, tangent spacing 2S (926 sh1: 'plastic drums at S spacing' in tapers, 'drums or 42\" cones at 2S spacing' in tangent). Departure: 920-R7 sh2 'Downstream Tapers' (Guidance): 'minimum length of about 100 feet per lane, with devices spaced about 20 feet apart'.",
    "departure_spacing": "NDOT Std Plan 920-R7 sheet 2 of 3 (p.131): taper spacing S, tangent spacing 2S (926 sh1: 'plastic drums at S spacing' in tapers, 'drums or 42\" cones at 2S spacing' in tangent). Departure: 920-R7 sh2 'Downstream Tapers' (Guidance): 'minimum length of about 100 feet per lane, with devices spaced about 20 feet apart'.",
    "buffer_tangent_spacing": "NDOT Std Plan 920-R7 sheet 2 of 3 (p.131): taper spacing S, tangent spacing 2S (926 sh1: 'plastic drums at S spacing' in tapers, 'drums or 42\" cones at 2S spacing' in tangent). Departure: 920-R7 sh2 'Downstream Tapers' (Guidance): 'minimum length of about 100 feet per lane, with devices spaced about 20 feet apart'."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Flagging shall be performed only by certified flaggers carrying a valid Flagger Certification Card, except in an emergency or for work not expected to last over 15 minutes (NDOT 2017 Std Specs \u00a7422.03.12.b; 920-R7 sh2 'Flaggers'). Certification is the 45-minute 'The Flagger' video plus an 80% exam score (\u00a7422.03.12.g). The 2017 text states no card validity term. This estimator counts flagger stations, never flagger qualification, and takes no emergency input. It changes crew eligibility and labour cost on every ta-10 job, not the device count.",
    "Operational duties from NDOT 2017 Std Spec \u00a7422: daily device inspection (\u00a7422.03.1.e(2)); response within 4 hours of a deficiency notice or no device payment for that day (\u00a7422.03.1.f); hard covers on out-of-use signs, same size, at least 1/8 in (3 mm) spacer, not bolted through (\u00a7422.02.5); a 24/7 repair contact given at the preconstruction conference (\u00a7422.03.1.d). None are device counts, but the sign-cover rule adds a fabricated item per covered sign and the inspection cadence adds labour days.",
    "Nebraska construction-sign SIZE matrix: the Standard Highway Signs section dimensions the federal W-series across five Nebraska classes (Single-Lane Conventional / Multi-Lane Conventional / Freeway / Minimum / Oversized) \u2014 e.g. W20-7 Flagger is 36x36 conventional, 48x48 freeway, 30x30 minimum, 48x48 oversized. The estimator emits sign CODES with no size, so the fabrication cost of a freeway-class Nebraska sign is not distinguished from a conventional one.",
    "Figure 6P.01, the single Nebraska-original TA ('Typical Traffic Control on Non-Highway Road Closed to Traffic', 2025 Supplement). It codifies sign selection (R11-2, R11-2A, R11-3A, R11-4, R1-1, W20-3A/3B/3C, W40-11) and Type III barricades, with no taper, buffer, spacing or A/B/C dimensions. It is outside the single-lane-closure scope, so it is not priced.",
    "No Nebraska positive-control mandate was found for TA-11 (low-volume two-lane closure), so devices-only is assumed permitted. If a plan sheet blocks it, ta-11 jobs would need flaggers this estimate does not carry.",
    "City overlays are not asserted. Omaha publishes its own Public Works Traffic Barricade Manual (March 2022): a city Traffic Control Manager certification (ATSSA or Nebraska LTAP training passed within 4 years) for anyone designing TTC inside the city, a three-type barricade taxonomy (Deformable Devices / Type II / Type III), Omaha-original excavation thresholds (barricade any excavation deeper than 1-1/2 in; add barricade fencing deeper than 3 ft), and City Traffic Engineer approval for any device the Omaha manual and the MUTCD do not cover. Lincoln publishes the thinner LTCG (2010), which defers to the current MUTCD. Both defer on taper, buffer, sign spacing and the TA figures, so no number in this file changes but an Omaha job answered under nebraska.json carries none of those city gates.",
    "NDOT Std Plan 926 sheet 1 note 10 (p.141): one plastic drum or Type III barricade in the centre of the closed lane about every 1/4 mile, as directed by the Engineer. Priced on TA-33 at 50 mph and up as floor(zone/1320) drums; not priced on TA-30R.",
    "The NDOT 926 set is priced on TA-33 at 50 mph and up only. Below 50 mph the 926 additions are not applied: urban 924-R4 sh1 'Lane Closed Near Intersection' (p.138) draws one W20-5, no Type III barricade, no existing-speed R2-1 and no shoulder taper. If 926 governs a TA-30R closure, it adds a shoulder taper (1/3 L, drums at S; about +4-5 drums at 55 mph), a second W20-5, the existing-speed R2-1, 2 Type III barricades, the closed-lane drums and double posting. None are priced on TA-30R. R41-17B is priced on TA-30R at every speed (924-R4 sh1 below 50 mph; 926 sh1, double-posted, at 50 and up).",
    "Device class: NDOT requires drums in tapers and allows drums or 42-in cones in the tangent (920-R7 sh1; 926 notes 6-7). Drum is priced throughout; a 42-in cone tangent would be cheaper.",
    "NDOT 920-R7 sh3 note G (p.132): double fines (R41-17B) and reduced-speed signing are not required for short-duration work under 12 h. Sign rows cannot gate on duration, so R41-17B is always emitted on TA-10, TA-30, TA-30R and TA-33; urban jobs carry it per 924-R4 sh1 Typical Advanced Signing.",
    "NDOT reduced work-zone speed signing (R2-1/R2-1WZ at the reduced limit at 500 ft and W3-5 at 1600 ft on 926; 921-R8 note 20) is posted only when a speed reduction is authorized. No input carries that, so none are emitted (+4 to +6 signs on a reduced-speed TA-33). The existing-speed R2-1/R2-1WZ assembly is emitted; 926 note 11 drops it when another speed-limit sign is within 1/2 mile, and 921-R8 sh2 when it is within 1500 ft of the reduced speed ahead sign.",
    "Nebraska sets no interstate/freeway design-speed floor for the merging taper. The taper is computed on posted speed, so a 55-mph-posted Nebraska interstate taper is 12 x 55 = 660 ft, not 840."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "nevada",
   "name": "Nevada",
   "group": "state",
   "source": "NDOT Signing, Striping, and Traffic Control Design Guide (December 2022, 1st Ed), Section 6 (Tables 6-2, 6-3, 6-4; dot.nv.gov showpublisheddocument/20978) + NDOT 2014 Standard Specifications \u00a7624/\u00a7625 (still listed as current) + NRS 484A.430 + NRS 484B.130 (work-zone signing).",
   "citation_edition": "NRS 484A.430 adopts NO MUTCD edition by reference: it only directs NDOT to adopt a manual conforming 'so far as possible' to the national system. NDOT adoption of the 11th Ed is not confirmed by any NDOT source. Nevada publishes its own TTC tables in the NDOT Signing, Striping, and Traffic Control Design Guide (December 2022, 1st Ed), Section 6: Table 6-2 (advance sign spacing), Table 6-3 (merging taper and device spacing), Table 6-4 (buffer). The guide predates the 11th Ed and cites 10th Ed (2009) numbering throughout: \u00a76C.02, \u00a76C.08, \u00a76E, Table 6E-1, Fig 6H-14, Table 6H-3. The 2014 Std Spec \u00a7624/\u00a7625 also cite the 10th Ed. Map to the engine's 11th Ed names: 6C-1 = 6B-1, 6C-2 = 6B-2, 6C-4 = 6B-4, 6H-x = 6P-x.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      300,
      300,
      300
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 92,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      300,
      300,
      300
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 30.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 81,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      400,
      400,
      400
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 35.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 72,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      400,
      400,
      400
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 67,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      600,
      600,
      600
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 45.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 65,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      600,
      600,
      600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 62,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2640
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 55.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 58,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 56,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 65.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 54,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "NDOT SSTC Design Guide Table 6-4 (NDOT SSTC Design Guide Table 6-4, p.6-9 (PDF p.107))",
    "sign_spacing": "NDOT SSTC Design Guide Table 6-2 (on federal 6B-1 base, all cells overridden) row 'rural'; nevada override (A 500->1000, B 500->1600, C 500->2640) per NDOT Table 6-2: 55-80 mph row; 51-54 mph read up to the next printed row",
    "taper_spacing": "NDOT Signing, Striping, and Traffic Control Design Guide (December 2022, 1st Ed), Section 6 Table 6-3, p.6-8 (PDF p.106): one column, 'Taper and Channelization Device Spacing (ft)' = S at every speed (20 at 20 mph ... 80 at 80). Body text calls the table 'NDOT's required merging taper length and channelizing device spacing'. Departure: \u00a76.4.3 Termination Area, p.6-9 (PDF p.107), Guidance\u2026",
    "tangent_spacing": "NDOT Signing, Striping, and Traffic Control Design Guide (December 2022, 1st Ed), Section 6 Table 6-3, p.6-8 (PDF p.106): one column, 'Taper and Channelization Device Spacing (ft)' = S at every speed (20 at 20 mph ... 80 at 80). Body text calls the table 'NDOT's required merging taper length and channelizing device spacing'. Departure: \u00a76.4.3 Termination Area, p.6-9 (PDF p.107), Guidance\u2026",
    "departure_spacing": "NDOT Signing, Striping, and Traffic Control Design Guide (December 2022, 1st Ed), Section 6 Table 6-3, p.6-8 (PDF p.106): one column, 'Taper and Channelization Device Spacing (ft)' = S at every speed (20 at 20 mph ... 80 at 80). Body text calls the table 'NDOT's required merging taper length and channelizing device spacing'. Departure: \u00a76.4.3 Termination Area, p.6-9 (PDF p.107), Guidance\u2026",
    "buffer_tangent_spacing": "NDOT Signing, Striping, and Traffic Control Design Guide (December 2022, 1st Ed), Section 6 Table 6-3, p.6-8 (PDF p.106): one column, 'Taper and Channelization Device Spacing (ft)' = S at every speed (20 at 20 mph ... 80 at 80). Body text calls the table 'NDOT's required merging taper length and channelizing device spacing'. Departure: \u00a76.4.3 Termination Area, p.6-9 (PDF p.107), Guidance\u2026"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "\u00a7624.03.01: one-way traffic operation SHALL NOT exceed 1,800 m (6,000 ft) unless otherwise approved in writing by the Department. The estimator accepts any --zone-length and applies no cap, so a TA-10 job entered at, say, 8,000 ft returns a device count for a layout Nevada does not permit without written approval. Device counts are correct for the length given; only the legality check is missing.",
    "\u00a7624.03.01: on mobile and shift operations, tapers SHALL be moved ahead so the lag behind work activities does not exceed 1.6 km (1 mi). This estimator prices stationary operations only, so it never applies, but a mobile Nevada job would need repeated taper relocation the BOM does not price.",
    "\u00a7624.03.01: during non-working hours a traffic cone SHALL be placed immediately in front of any construction sign standing within 3 m (10 ft) of the travelway. On any Nevada job left up overnight that is roughly one extra cone per advance-warning sign \u2014 for a three-sign approach, six cones on a two-approach job. The estimator emits none of them and under-counts cones on every overnight Nevada job.",
    "\u00a7624.03.01: existing posted speed limits SHALL remain in effect unless the Department gives written approval, and speed-reduction signs SHALL be adjusted with the work. The estimator takes the posted speed as given and never models a reduced work-zone speed, so it cannot flag a plan that assumes an unapproved reduction.",
    "\u00a7624.03.03: flaggers SHALL hold a valid flagger card from an approved instructional course and be at least 18; pilot-car drivers SHALL hold a valid flagging card (\u00a7624.03.04). A Traffic Control Supervisor with worksite-traffic-control certification is required whenever a TCS pay item appears in the proposal (\u00a7624.03). These are labor and contractual line items; the estimator prices devices and signs only.",
    "\u00a7624.03.03: apparel and paddle specs \u2014 Vest Pattern 3 / Performance Class 2 by day, Class 3 at night, manufacturer certificates of compliance; STOP/SLOW paddle 18 in wide with 6 in series-C letters on a rigid ~5 ft handle; flagger stations adequately illuminated at night with Engineer-approved flood lights at Contractor expense. Night flagger lighting is a real cost line the estimator does not emit.",
    "\u00a7625.02.07: Nevada catalogs a portable beacon-light one-way-control system (clear strobe + 8 in red stop light + 8 in yellow caution light, visible >= 100 ft, 12-V, ~10 ft mast, QPL-listed) as an alternative to a flagger on one-lane two-way control. The estimator has no such device and always prices flaggers on TA-10, so a Nevada job using the beacon system is priced as the wrong labor and device mix.",
    "\u00a7625.02.02-.07: an NDOT Qualified Products List gate binds changeable message signs, temporary impact attenuators, truck-mounted attenuators, water-filled barrier, portable precast barrier, portable beacon-light systems and reflective markers. The estimator prices generic devices with no QPL eligibility flag, so a line it emits may name a product Nevada will not accept.",
    "\u00a7625.02.01: arrow boards used at night SHALL carry a photoelectric sensor for automatic lamp dimming. That is a spec on the arrow board unit, not a count, so it changes unit cost rather than quantity.",
    "\u00a7625.03.01: sign covers SHALL completely block the message day or night, with no burlap or fabric and no adhesive tape on the sign face. Covers are not emitted as a line item on phased Nevada jobs.",
    "dividedHighwayDuplication for TA-33 is unverified. It lives on NDOT 2024 Standard Plans TC-2..TC-20 (public at dot.nv.gov showpublisheddocument/23088), which were not read. Not set, so the template ships the duplicated count: 6 advance signs, 8 with --include-optional. If NDOT signs one side, it posts 3 (4).",
    "shoulder_width_ft is 8, the engine default carried from federal.json, NOT an NDOT value \u2014 Nevada publishes no shoulder-width default. Any shoulder-taper number this overlay produces is federal geometry at an assumed width.",
    "The NDOT Sign Supplement (Nevada-specific panel designs) was not acquired. Federal construction-series codes are assumed to stand; the DOUBLE PENALTIES and END WORK ZONE panel codes are descriptive.",
    "Las Vegas and Reno municipal overlays are not modelled. Only a one-page Las Vegas TTC quick-reference was acquired; the full municipal handbooks were not. A job inside either city may be governed by a local regime this overlay does not see.",
    "NRS 484B.130(3) work-zone signing (DOUBLE PENALTIES IN WORK ZONES, BEGIN WORK ZONE, END WORK ZONE) is priced on TA-10, TA-30, TA-30R and TA-33, one per direction of travel, not duplicated on the median. RTC of Southern Nevada DWG 627 adds END DOUBLE PENALTIES panels in Clark County; that regional detail is not priced.",
    "Tangent spacing option: NDOT Table 6-3 footnote * lets rural interstate channelization at 55+ mph (except tapers) widen to 80 ft, with three drums placed diagonally at half-mile increments. It is an option, so tangents are priced at S. TA-33 at 65 mph / 2000 ft would drop from 43 to 35 tangent devices and add 3 drums per half mile.",
    "TMA / shadow vehicle: unverified. \u00a7625.02.05 (2014 Std Spec) is a TMA product spec (arrow board with each TMA; QPL); no condition requiring a TMA was found in the spec or the design guide. Requirements would sit on NDOT 2024 Standard Plans TC-2..TC-20, which were not read. Template defaults kept.",
    "Std Spec \u00a7625.03.01 requires devices per the Nevada Work Zone Traffic Control Handbook. It was not acquired. It may carry sign or device detail this overlay does not model.",
    "Speeds above 80 mph are not legal in Nevada (NRS 484B.600(1)(e)); the engine does not reject them and falls back to the 80-mph rows or federal values."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "new-hampshire",
   "name": "New Hampshire",
   "group": "state",
   "source": "NHDOT Work Zone Traffic Control Standard Plans TC-1 through TC-9 (rev 7/27/2026; index https://www.dot.nh.gov/doing-business-nhdot/contractors/standard-plans-road-construction). NH adopts the MUTCD by reference with no state supplement and defers on taper formula, buffer and sign spacing. Its TC sheets amend the Part 6 device sections and set a lane-shift rule the federal manual does not. Written 2026-09-15; updated 2026-09-23 against the NHDOT index.",
   "citation_edition": "NHDOT TC-1..TC-9 (rev 7/27/2026) amend Part VI of the MUTCD 2023 Edition (per the NHDOT index title). Section labels are mapped to 11th-Ed numbering (6K.03/6K.04/6K.06, Tables 6B-1..6B-4); 2026 sheet labels unconfirmed. Last readable sheets: 2022 rev (6F.64/6F.67, Table 6-1C). TC-5 is now a Highway Design detail sheet (rev 06/04/2026). No separate NH MUTCD supplement.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 125.0,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 180.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 245.0,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 320.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 540.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 600.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 660.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 720.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 780.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "NHDOT TC-6 Lane Shifts - Divided Highways (rev 04/20/2022; reissued 7/27/2026): every lane-shift taper dimensioned 'L MIN.' at all speeds.",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Option \u2014 no NH mandatory-buffer flip on interstate or freeway, and no NH absolute floor.)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "Defers to federal 6K.01 para 04. Departure ~20 ft per the MUTCD downstream-taper Guidance (6B.08): 50-100 ft with devices about 20 ft apart.",
    "tangent_spacing": "Defers to federal 6K.01 para 04. Departure ~20 ft per the MUTCD downstream-taper Guidance (6B.08): 50-100 ft with devices about 20 ft apart.",
    "departure_spacing": "Defers to federal 6K.01 para 04. Departure ~20 ft per the MUTCD downstream-taper Guidance (6B.08): 50-100 ft with devices about 20 ft apart.",
    "buffer_tangent_spacing": "Defers to federal 6K.01 para 04. Departure ~20 ft per the MUTCD downstream-taper Guidance (6B.08): 50-100 ft with devices about 20 ft apart."
   },
   "device_gates": [
    {
     "when": {
      "divided": true
     },
     "device": "drum",
     "modality": "shall",
     "source": "NHDOT TC-1 Amend. 6 (6K.06, drums primary on divided highways)"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "TC-7's barrier taper rate (Portable Concrete Barrier standard; GR-24/GR-25 12.5-ft MASH are current, GR-23 withdrawn after 12/31/2019) is separate from the lane-shift taper and is not modelled.",
    "NH's amendments are process as well as geometry - \u00a7619 advance-notification requirements and flagger credentialing. Neither produces a BOM line.",
    "NHDOT TC-1 Amend. 5 (6K.04): tubular markers shall be >= 42 in x 3 in. The engine has no tubular class, so it cannot price one.",
    "NHDOT TC-1 Amend. 9: R9-20 on all approaches when lane+shoulder < 14 ft and speed <= 40 mph (Guidance). The engine has no lane+shoulder width input, so it is not added.",
    "Open: the 2026 TC-4/TC-9 Note 4 may move the full-L shift-taper break from >50 to >=45 mph (unconfirmed). The 2022 >50 mph break is kept.",
    "Shoulder taper, unverifiable: TC-4 and TC-6 (2026) dimension '1/3 L MIN.' but do not say whether L is taken at the shoulder width or a 12-ft lane. width_keyed is kept; at 55 mph the 12-ft reading is 220 ft vs 147 ft, about 1-2 devices.",
    "Open: the 2026 TC-4 may label tangents 4S (2022 printed 2S; unconfirmed). 2*S is kept. If 4S, the TA-33 55 mph 2,000-ft line falls from 36 to about 24.",
    "TA-10, unverifiable: NHDOT publishes no flagging typical application and TC-1 (2026) does not amend 6P-10 or the W20-4 / W3-4 signing. The federal figure stands, with the 100-ft maximum one-lane two-way taper (Table 6B-3 minimum is 50 ft, about 4 fewer devices).",
    "Open: the 2026 TC-1 amendment number for the cone night rule has not been re-read.",
    "R50-1 (NH work-zone speeding fines, RSA 256:107-a; SG-5, TC-3) is posted on construction projects where required. It is project signing, not part of a short-term TA, so it is not priced."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "new-mexico",
   "name": "New Mexico",
   "group": "state",
   "source": "NMDOT 2019 Standard Specifications Sec. 618 / 701 / 702 (still governing per the Feb 2026 SSP index) + SSP Modifying Sec 702 (5/14/24) + NMDOT 2019 Standard Drawings, June 2026 Letting full set (702-03-3/4, 702-03-4/4, 702-04-1/2, 702-04-2/2, 702-05-1/1 (12/11/2019, eff. Jan 2020), 702-06-1/1) + NMAC 18.31.6; re-verified against primary sources 2026-09-23",
   "citation_edition": "New Mexico has NO state MUTCD and NO state supplement. It adopts the National MUTCD directly and by phrase: NMAC 18.31.6.7(BH) defines MUTCD as 'latest edition', 18.31.6.14(K)(8) requires the construction traffic control plan to conform to it, and NMDOT Std Spec 618.1 reads 'in accordance with the Contract and the MUTCD, current edition'. NM never names an edition number. The federal 11th Ed (2023) adoption deadline passed 2026-01-18, so the operative manual is the 11th Edition, so 11th-Ed numbers apply: Table 6B-1 (sign spacing), 6B-2 (buffer/SSD), 6B-3 (taper criteria), 6B-4 (taper formulas), Figures 6P-x. The MUTCD in force is the 11th Ed, but NMDOT's live Standard Drawings (Dec 2019 sheets, June 2026 Letting set) cite 10th-Ed numbers: 702-04-1/2 Table 1 says 'Based on Table 6C-1' (= 11th 6B-1). NM Table 2 on 702-05-1/1 and 702-04-1/2 (buffer/taper/drum) corresponds to 11th 6B-2/6B-4. EDITION PROVISIONAL: NM inherits whatever FHWA's current edition is, and the NMDOT spec book (2019 Ed, still governing per the Feb 2026 SSP index; Std Spec 618.1 and 702.3.1 adopt 'MUTCD, current edition') and Standard Drawings (Dec 2019 sheets) both predate the 11th-Ed cutover.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Drawn (dimensioned, not optional) on NMDOT Std Drawings 702-05-1/1 and 702-04-1/2)",
    "sign_spacing": "MUTCD Table 6B-1 (NMDOT 702-05-1/1 Table 1 equivalent) row 'rural'",
    "taper_spacing": "NMDOT Std Drawing 702-05-1/1 (12/11/2019, eff. Jan 2020, in June 2026 Letting set, PDF p.398) Table 2: taper drum spacing S, buffer drum spacing 2S; callout 'MAX. DRUM SPACING AT 2.0X POSTED SPEED'. Same as MUTCD 6K.01 para 04. No departure column; departure 20 ft per the MUTCD downstream-taper Guidance (6B.08), which NM adopts.",
    "tangent_spacing": "NMDOT Std Drawing 702-05-1/1 (12/11/2019, eff. Jan 2020, in June 2026 Letting set, PDF p.398) Table 2: taper drum spacing S, buffer drum spacing 2S; callout 'MAX. DRUM SPACING AT 2.0X POSTED SPEED'. Same as MUTCD 6K.01 para 04. No departure column; departure 20 ft per the MUTCD downstream-taper Guidance (6B.08), which NM adopts.",
    "departure_spacing": "NMDOT Std Drawing 702-05-1/1 (12/11/2019, eff. Jan 2020, in June 2026 Letting set, PDF p.398) Table 2: taper drum spacing S, buffer drum spacing 2S; callout 'MAX. DRUM SPACING AT 2.0X POSTED SPEED'. Same as MUTCD 6K.01 para 04. No departure column; departure 20 ft per the MUTCD downstream-taper Guidance (6B.08), which NM adopts.",
    "buffer_tangent_spacing": "NMDOT Std Drawing 702-05-1/1 (12/11/2019, eff. Jan 2020, in June 2026 Letting set, PDF p.398) Table 2: taper drum spacing S, buffer drum spacing 2S; callout 'MAX. DRUM SPACING AT 2.0X POSTED SPEED'. Same as MUTCD 6K.01 para 04. No departure column; departure 20 ft per the MUTCD downstream-taper Guidance (6B.08), which NM adopts."
   },
   "device_gates": [
    {
     "when": {
      "night": true
     },
     "device": "drum",
     "source": "NMDOT Std Spec 2019 \u00a7702.3.1 (cones daylight-only; drums with Type C lights at night)"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "New Mexico is NOT a pure defer-to-federal state. The NMDOT Standard Drawings (June 2026 Letting set) confirm federal taper, buffer and S/2S spacing numbers, but 702-05-1/1 adds a 5-station speed-reduction sign train with required END ROAD WORK on TA-33, and draws divided closures in drums (priced on TA-33); Std Spec 702.3.1 bans cones at night; SSP 702 requires rumble strips on intermediate and long-term work. Sign spacing is keyed by Interstate vs Non-Interstate, not speed; TA-10, TA-30 and TA-30R are never Interstate and take the Non-Interstate row at 50 mph and up.",
    "Traffic Control Supervisor. A certified TCS (ATSSA, ACNM, or a Department-accepted agency; re-certified every 4 years per Std Spec 618.2.1.1) is the contract default wherever Section 618 Traffic Control Management is a contract item, supervising on a 24-hour basis throughout the Project (618.2/618.2.3), with a small-project exception at 618.2.2. This is a LABOR line the estimator does not emit, so an NM job's traffic-control-management cost is missing from every estimate.",
    "Flagger certification. NM requires a Flagger Training certificate (ATSSA/ACNM wallet card) in the field before flagger control work, plus refresher training (Std Spec 618.2.1). The engine counts flagger HEADS (TA-10 returns 2) but carries no certification attribute or cost premium, so a certified-flagger rate is never applied.",
    "Traffic Control Diary. The contractor maintains a diary recording devices and deliveries (Std Spec 618). A paperwork deliverable with no line item; nighttime inspection at least weekly once devices are in use more than 7 days (618.2.2.2) is likewise unpriced.",
    "Device materials. NMDOT specifies retroreflective sheeting type and extruded/aluminum panel borders and corner radii by sign height (1-1/8 in / 2 in / 3 in borders, 6/9/12 in radii) at Std Spec 701.2.4, incorporated into construction devices by 702.2.1. The estimator prices a generic sign, so the NM fabrication spec never reaches the unit cost.",
    "The -NM- sign catalog. NM sign codes match the national MUTCD UNLESS the code contains '-NM-', which marks a state-specific sign with its own stock number, size and legend (NMDOT Sign Code Listing 2005). That listing is not on disk, so no ta_overrides.code_map is written. If a Part 6 -NM- variant exists for W20-1, W20-5R, W4-2R or G20-2, this overlay emits the federal code and the wrong stock number. Contrast Arizona, which maps G20-2 -> G20-2AZ.",
    "Standard Drawings are public (June 2026 Letting set). 702-05-1/1 confirms S taper / 2S buffer and work-space drum spacing. No NM flagging (TA-10) sheet exists: 702-11 was deleted Jan 2020.",
    "The 2005 Sign Code Listing and NMDOT Design Manual Ch. 910 (Signing & Pavement Markings) are both unacquired. Ch. 910 is expected to reference the MUTCD with no Part 6 numeric delta, but that is an expectation, not a verified reading.",
    "Std Spec 618.2.4 Signal Coordination and Operation requires PE-stamped alternate traffic-signal-timing plans within the work zone and along detour routes for long-term closures lasting more than 5 calendar days. Signal timing, not signing, and not a materials line - the estimator emits nothing for it.",
    "Edition is provisional. NM adopts 'latest edition' and is modelled here against federal 11th Ed (2023). If FHWA issues a 12th Edition, NM's numbers move on the federal publication date with no NM action, and this overlay would be silently stale.",
    "Departure (downstream) taper spacing is the federal ~20 ft (MUTCD 6B.08 Guidance), which NM adopts; 702-05-1/1 prints no departure column.",
    "Whether NMDOT permits the federal devices-only TA-11 as drawn is unconfirmed; no NMDOT positive-control block was found (contrast Indiana). ta-11 runs on federal values.",
    "TPRS (NMDOT SSP Modifying \u00a7702, 5/14/24, \u00a7702.2.6, \u00a7702.3.1.3, Table 702.3.1.3:1): TPRS SHALL be installed on intermediate and long-term stationary operations when crews are present and in advance of horizontal curves; MAY on short-term lane closures, shoulder work, flagging and one-lane two-way when work is 1 hr or more at 25 mph or more. Array = 3 TPRS, 11 ft each; array spacing <=40 mph 10 ft, 41-55 15 ft, 56-64 20 ft, 65+ 35 ft+. Priced as TEMPORARY_PORTABLE_RUMBLE_STRIP (3 per array; 6 on TA-10 and TA-30, one array per approach): required on jobs of 2+ days and on night jobs (intermediate-term: MUTCD 11th Ed 6N.01, nighttime work over 1 hr), optional on 1-day daytime jobs. Curve placement and crew presence are not inputs.",
    "\u00a7702.3.1 (Standard): Type A or B flashing warning lights and flags are required to call attention to advance warning construction signing. Priced as one SIGN_LIGHT and two SIGN_FLAG per W-series sign (flag pair is a house convention; \u00a7702.3.1 sets no count). On TA-33 the 2 advance R2-1 stations are counted; the 2 resume R2-1 and G20-2 are not. Lights on signs are incidental (\u00a7702.5.1 item 4).",
    "Project-limit signing (Std Drawings 702-03-3/4, 702-03-4/4, eff. March 2020): BOP/EOP ROAD WORK NEXT XX MILES / END ROAD WORK plus NMDOT project panels (SP-1/SP-2/SP-3), once per project, not per TA; both sides on Interstates and 4-lane divided, right side only on 2-lane.",
    "UNVERIFIED - shifting and shoulder tapers: no live NM sheet or spec clause sets them; 702-05-1/1 prints only the merging-taper column. Kept at federal L/2 and 1/3 L at an 8-ft shoulder; no NM source gives the 8-ft default shoulder.",
    "UNVERIFIED - TA-10 flagging: no NM flagging drawing is in force (702-11-1/2 and 2/2 deleted effective January 2020, no replacement in the June 2026 index; \u00a7618.2.1 requires flagger certification only). Tapers, sign set (W20-4 vs W3-4) and flagger count stay federal Fig 6P-10 / 6B.08.",
    "UNVERIFIED - TA-30R / TA-30: no live NMDOT sheet covers an undivided multi-lane lane closure (702-05-1/1 is 'for Divided Interstates & Non-Interstates'). Sign sets stay federal / app convention.",
    "UNVERIFIED - NMAC 18.31.6.7(BH) 'latest edition' text and the 2005 -NM- Sign Code Listing were not retrieved in the 2026-09-23 re-check; the adoption fact rests on Std Spec 'MUTCD, current edition' and the FHWA state map.",
    "Night drums carry Type C steady-burn lights (Std Spec 2019 \u00a7702.3.1): one per drum on night runs. Not emitted.",
    "Open: whether the 702-05-1/1 speed-reduction train (W3-5a x2, R2-1 x4) applies to a TA-33 closure posted below 45 mph. The sheet is titled for Divided Interstates & Non-Interstates and sets no speed floor; it is priced at every speed."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "north-dakota",
   "name": "North Dakota",
   "group": "state",
   "source": "NDDOT Traffic Control Requirements for NDDOT Operations on Highways and Streets (TCR), 2025 Ed, eff. 2025-05-01 (no 2026 edition) + NDDOT Std Spec 2025 Sec 704 (adopted 2025-07-01) + Std Drawing D-704-12 Shoulder Closure Tapers (08/01/24); MUTCD 11th Ed adopted by the NDDOT Director under NDCC Ch. 39-13 (Traffic Operations Manual Jan 2026 p.4); verified against primary sources 2026-09-23",
   "citation_edition": "MUTCD 11th Ed (Dec 2023) adopted by reference, no state supplement (NDDOT Traffic Operations Manual Jan 2026 p.4); 6B-x / 6P-x numbering unchanged. NDDOT's own typical applications are TCR 2025 Figs 1-31, which print their own A/B/C tables per figure. Cite TCR figure + note alongside the 6B-x table.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 34.7,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 50.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 68.1,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 88.9,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 150.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 166.7,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      750,
      1000,
      1500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 183.3,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      750,
      1000,
      1500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      750,
      1000,
      1500
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 216.7,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "NDDOT TCR 2025 p.16: shoulder taper 0.33 L with W = shoulder width + 2 ft (8-ft shoulder + 2 ft = 10 ft); 1/3 x 10/12 = 0.2778 of the 12-ft L. p.17 10-ft Shoulder Taper (0.33L) column prints these values rounded to 5 ft (55 mph = 185; computed 183). Keyed to the 10-ft column; a supplied --shoulder-width does not change it.",
    "buffer": "MUTCD Table 6B-2 (Option (TCR 2025 p.15 'Longitudinal Buffer Space (optional)'))",
    "sign_spacing": "NDDOT TCR 2025 multi-lane A/B/C table row 'rural'; north-dakota override (A 500->750, B 500->1000, C 500->1500) per NDDOT TCR 2025 Fig 13 table p.44: Urban Expressway/Freeway (60 mph or less)",
    "taper_spacing": "NDDOT TCR 2025 p.18 'Cones' (Standard): taper spacing a maximum of S ft, channelization a maximum of 2S; p.14 'Max spacing = S / 2S'. Downstream and one-lane two-way tapers: p.16 '100 ft taper = 5 cones spaced 20 ft apart'.",
    "tangent_spacing": "NDDOT TCR 2025 p.18 'Cones' (Standard): taper spacing a maximum of S ft, channelization a maximum of 2S; p.14 'Max spacing = S / 2S'. Downstream and one-lane two-way tapers: p.16 '100 ft taper = 5 cones spaced 20 ft apart'.",
    "departure_spacing": "NDDOT TCR 2025 p.18 'Cones' (Standard): taper spacing a maximum of S ft, channelization a maximum of 2S; p.14 'Max spacing = S / 2S'. Downstream and one-lane two-way tapers: p.16 '100 ft taper = 5 cones spaced 20 ft apart'.",
    "buffer_tangent_spacing": "NDDOT TCR 2025 p.18 'Cones' (Standard): taper spacing a maximum of S ft, channelization a maximum of 2S; p.14 'Max spacing = S / 2S'. Downstream and one-lane two-way tapers: p.16 '100 ft taper = 5 cones spaced 20 ft apart'."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Shoulder-closure drum spacing: NDDOT Std Drawing D-704-12 (08/01/24) spaces drums at 1/2 S on shoulder tapers. The optional TA-33 shoulder taper is priced at S spacing: 4 devices at 55 mph instead of 8.",
    "150-ft TMA roll-ahead (TCR p.10)",
    "night flagger station illumination (TCR p.3; Spec 704.04 K.6)",
    "portable rumble strip arrays 10/15/20 ft (TCR p.12) - the RUMBLE STRIPS AHEAD signs are priced on TA-10 above 45 mph, the strip arrays (1 per approach) are not; the duration / scheduled-work condition is not an input",
    "pilot car + 2 flaggers (TCR p.11)",
    "reduced-speed signs Figs 9/12/14 incl. MINIMUM FEE $150 plate",
    "sign size 36 in 2-lane / 48 in 4+ lanes (TCR p.18)",
    "5 drums at 5 ft at arrow panel (D-704-12)",
    "TA-30 (interior lane, multi-lane street): NDDOT TCR 2025 has no interior-lane or opposing-direction figure (Table of Figures p.V; Fig 13 is exterior-lane only; Intro p.3 refers uncovered situations to the MUTCD). TA-30 follows the federal figure. If Fig 13 applies by analogy: +2 G20-2, +1 TMA."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "ohio",
   "name": "Ohio",
   "group": "state",
   "source": "OMUTCD (Ohio Supplement to MUTCD 11th Ed, eff 2026-01-16 + Fed MUTCD) + ODOT TEM Part 6/12 (2026-01-16) + C&MS 2023 w/ Jan 2026 update + MT-series SCDs thru 2025-07-18. Operative buildable sheets: MT-97.10 (TA-10), MT-95.30 (divided multi-lane), MT-95.31/32 (undivided multi-lane right/left), MT-95.50 (queue layer). Ohio values are transcribed from ODOT sources; not SME-reviewed.",
   "citation_edition": "Ohio is on the 11th Edition. The Ohio Supplement supplements MUTCD 11th Ed (2023) and adds no renumbering, so Table 6B-1 / 6B-2 / 6B-3 / 6B-4 and Section 6B.08 read the same to an ODOT plan reviewer as they do here. Authority hierarchy, most specific first: C&MS Item 614 (contract) -> MT-series SCDs -> ODOT TEM Part 6/12 (ODOT-administered work only) -> Ohio Supp + Fed MUTCD = OMUTCD (statewide floor, ORC 4511.09).",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 132.0,
     "L_half_ft": 66.0,
     "L_shoulder_ft": 32.0,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 72,
     "road_type": "rural"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 74,
     "road_type": "rural"
    },
    {
     "speed_mph": 35,
     "L_ft": 252.0,
     "L_half_ft": 126.0,
     "L_shoulder_ft": 56.0,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 76,
     "road_type": "rural"
    },
    {
     "speed_mph": 40,
     "L_ft": 324.0,
     "L_half_ft": 162.0,
     "L_shoulder_ft": 72.0,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 48,
     "road_type": "rural"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 53,
     "road_type": "rural"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 600.0,
     "L_shoulder_ft": 136.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 53,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 660.0,
     "L_shoulder_ft": 152.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 54,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 720.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 45,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 780.0,
     "L_shoulder_ft": 176.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 45,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "Ohio Supp Tbl 6B-3 p.OH Part 6-6: 'L; however, may be at least 0.5 L when speed is less than 50 mph'; \u00a76B.08 \u00b608/\u00b608a (statewide)",
    "L_shoulder": "ODOT SCD MT-95.30/31/32 rev 07-18-2025 sht P.1 Table II 'Shoulder Taper Rate Minimum' (4:1 at 25 mph, 5:1, 7:1, 9:1, 15:1, 17:1, 19:1, 20:1, 22:1, 24:1 at 70 mph) + sht P.3 Note 2B (shall): 'The minimum acceptable length for the shoulder taper shall be ... shoulder taper rate.' L_shoulder = shoulder width x rate: 8 ft at 55 mph = 152 ft. The Ohio Supp Tbl 6B-3 row [p.OH Part 6-6] reads 'at least\u2026",
    "buffer": "MUTCD Table 6B-2 (Option, MUTCD 6B.06 para 11 (11th Ed numbering; Ohio does not promote it))",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "MT-95.30/31/32 rev 07-18-2025 sht P.1 Tbl II: taper spacing = S ft. Tangent spacing is a step table: 40 ft at <=35 mph, 80 ft at 40-55 mph, 120 ft at 60-70 mph (MT-95.30, divided). Downstream taper devices about 20 ft apart (TEM 602-5.5: 'a downstream taper should have a minimum length of 50 feet and a maximum length of 100 feet, with devices spaced about 20 feet apart'; MT-97.10 sht P.1).",
    "tangent_spacing": "MT-95.30/31/32 rev 07-18-2025 sht P.1 Tbl II: taper spacing = S ft. Tangent spacing is a step table: 40 ft at <=35 mph, 80 ft at 40-55 mph, 120 ft at 60-70 mph (MT-95.30, divided). Downstream taper devices about 20 ft apart (TEM 602-5.5: 'a downstream taper should have a minimum length of 50 feet and a maximum length of 100 feet, with devices spaced about 20 feet apart'; MT-97.10 sht P.1).",
    "departure_spacing": "MT-95.30/31/32 rev 07-18-2025 sht P.1 Tbl II: taper spacing = S ft. Tangent spacing is a step table: 40 ft at <=35 mph, 80 ft at 40-55 mph, 120 ft at 60-70 mph (MT-95.30, divided). Downstream taper devices about 20 ft apart (TEM 602-5.5: 'a downstream taper should have a minimum length of 50 feet and a maximum length of 100 feet, with devices spaced about 20 feet apart'; MT-97.10 sht P.1).",
    "buffer_tangent_spacing": "MT-95.30/31/32 rev 07-18-2025 sht P.1 Tbl II: taper spacing = S ft. Tangent spacing is a step table: 40 ft at <=35 mph, 80 ft at 40-55 mph, 120 ft at 60-70 mph (MT-95.30, divided). Downstream taper devices about 20 ft apart (TEM 602-5.5: 'a downstream taper should have a minimum length of 50 feet and a maximum length of 100 feet, with devices spaced about 20 feet apart'; MT-97.10 sht P.1)."
   },
   "device_gates": [
    {
     "device": "drum",
     "when": {
      "night": true
     },
     "modality": "shall",
     "source": "the no-cones-along-tapers-at-night rule (MT-95.30/31/32 Note 13B(d); MT-97.10 Note 8B(c))"
    },
    {
     "device": "drum",
     "when": {
      "min_hours": 24,
      "tas": [
       "ta-33",
       "ta-30",
       "ta-30r"
      ]
     },
     "modality": "shall",
     "source": "the continuous day-and-night closure rule (TEM Part 6 605-11.3 item 1; MT-95.30/31/32 Note 13B(a))"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "TMA barrier condition. C&MS 614.03(D) requires a TMA on a multi-lane highway at 45 mph and above in a closed lane or shoulder without portable or permanent barrier. Encoded as required at 45+ mph on ta-33 / ta-30 and ta-30r. The estimator takes no barrier input, so a barrier-protected job still prices the TMA. On TA-10 the TMA is plan-call-out only [MT-97.10 Note 12C].",
    "TMA count per work area. C&MS 614.03(D): 'Furnish a TMA for each work area if two or more localized work areas occur within the same stationary work zone and are separated by more than 700 feet.' The estimator models one contiguous work zone, so it never adds the second or third TMA.",
    "TMA roll-ahead spacing. C&MS Table 614.03-1 sets the shadow-vehicle-to-work-area distance by speed and shadow-vehicle weight class (150/100/74 ft stationary at 22,000 lb and above; 172/123/100 ft at 9,900-22,000 lb). A placement dimension; no BOM line changes.",
    "Night cones beyond the taper. The night gate prices every run as drums (conservative). Ohio allows night cones beyond the transition taper at 40 ft max and 42 in min (TEM 605-11.2, 605-11.3; MT-95.3x Note 13B(c),(e)). That cheaper mix is not modelled.",
    "TA-10 closure-length cap. MT-97.10 sht P.2 Note 2: 'the closure shall not be more than 2000' long unless approved by the Engineer. The minimum length between closures shall be 2000'. Only one side of the road shall be closed in any one work zone.' A TA-10 zone over 2,000 ft needs the Engineer's approval.",
    "downstream_taper_ft carries one number where Ohio publishes a range. Ohio Supp Tbl 6B-3, TEM 602-5.5 and MT-95.30/31/32 sht P.1 all say 50 ft min / 100 ft max. 100 ft is taken (the published max). At the 50-ft min the departure taper falls from 6 devices to 4 at 20-ft spacing. MT-95.30/31/32 draw it as a standard element, so ta-33 and ta-30r require it.",
    "R11-H5a higher-fines sign: entrance-ramp repeats (TEM 605-4.2) are not counted; ramps are not an input. The mainline signs are priced on TA-33 for work of 30 days or more over 0.50 mile.",
    "Work Zone Speed Zone. TEM Part 12 1203-2.9.1 triggers a WZSZ on a multi-lane highway with a pre-construction limit of 55 mph or more, a condition at least 0.5 mile long that reduces lane or shoulder functionality, and an expected duration of at least three hours. That adds the DSL sign assembly (48 x 60 in R2-1 with digital insert, 48 x 12 in G20-H5bP WORK ZONE plaque, two 12-in beacons, trailer-mounted, per SS 908 908.02.A) and requires every existing speed-limit sign within 1 mile in advance of and inside the zone to be removed or covered. Not priced.",
    "Temporary portable rumble strips. MT-97.20 Note 2 permits them only on a two-lane facility, short-term stationary, with crews in the traveled way and a one-lane two-way pattern running; Note 3 excludes wet, icy, chip-seal and rutted surfaces. Where they apply, Note 7 adds two arrays of three 11-ft strips per direction plus a W8-H15a-48 RUMBLE STRIPS panel between W20-4 and W20-7. Not priced.",
    "MT-95.50 queue-management advance signing. Note 3A adds Extra Advance Warning Sign Groups of W20-1 + W20-5 + W3-H4b plus distance plaques; TEM 641-5.2 places the first group a whole number of miles upstream equal to the longest anticipated queue, then repeats at 1-2 mile intervals. Queue length is not an input. Median signing does not apply on undivided highways [MT-95.50 Note 2D].",
    "Long-zone overlays. TEM 607-4 adds a double-yellow No-Passing Zone of length A on the closed-lane approach in long-term TA-11 operations (pavement marking). Ohio Supp 6H.38 para 06a adds the W8-H12a NO EDGE LINES sign wherever work obliterates the edge line, repeated every 2 miles.",
    "M4-H9 (L/R), Ohio's DETOUR-with-advance-arrow code, added to the SDMM on 2026-01-16 [TEM Part 6 607-7]. The federal figures call for 'M4-9 (modified)'. Its panel dimensions are not in the compiled 2021 SDMM, so no code_map entry is written.",
    "MT-series sign sequences are not transcribed in full. MT-95.31/32 sht P.1 adds an optional W13-1P-24 advisory-speed plaque under the W20-5 and places G20-2-48 a distance A past the downstream taper; MT-97.10 defaults every W-series diamond to 48 in, 36 in only when the approach speed limit is 40 mph or less [MT-97.10 sht P.2 Note 6B]. Each TA uses the federal figure's sign list with the Ohio additions above.",
    "Work-zone clear zone E, MT-95.30/31/32 sht P.1 Tbl II: 15 ft at 40 mph and below, 19 ft at 45-50, 23 ft at 55, 30 ft at 60-70 on divided highways. It decides whether a work area needs channelization or barrier at all; not represented.",
    "Shifting taper on ODOT-administered work: TEM 602-5.3 requires L for every shift taper on freeways, expressways and multi-lane highways regardless of speed. The statewide rule is encoded; the ODOT-work rule only warns. TEM 602-5.7 extends it to lane-width transitions, which no template draws.",
    "MT-97.10 sht P.2 Note 8D (shall): a minimum of two drums close the paved shoulder on TA-10. Not counted: +2 devices where a paved shoulder exists.",
    "MT-97.10 draws its own 100' post-work run '(optional)', so it is not added on TA-10. The TA-33/30R 100-ft post-work run is added."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "oklahoma",
   "name": "Oklahoma",
   "group": "state",
   "source": "ODOT Traffic Control Standards T-501..T-507 (2009 Specifications, rev 2010-2013) + ODOT Guidelines for Temporary Traffic Control (ODOT-TTC-TE-08-0001) + ODOT 2019 Std Spec Sec 880 + ODOT 23 CFR 630 Subpart K Guidance (eff. 12/31/2025, posted 2026-01-21) + ODOT Quality Control Standards for TTC Devices; verified against primary sources 2026-09-23",
   "citation_edition": "MUTCD 11th Ed (2023), in force via OAC 730:35-7-2 (FHWA MUTCD by reference) and confirmed by ODOT Subpart K Guidance eff. 12/31/2025 (p.4: Title 730 requires 'MUTCD 11th Edition'). OK 2009 Supplement = Parts 1/8 only (no Part 6). State numbers: ODOT Traffic Control Standards T-501..T-507 (2009 Specs) and Guidelines for TTC (2008). Cite Tables 6B-1/6B-2/6B-4 and Fig 6P-x, plus ODOT T-502/T-507.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 46,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 40,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 34,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 33,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 36,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Option/should, MUTCD 11th Ed 6B.06 para 11)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "ODOT T-502 / TCS2-1 rev 00 (5/23/2010), 'Spacing Channelizing Devices (MAXIMUM)': taper = S through 45 mph, flat 50 ft at 50-75 mph; tangent = 2S through 45 mph, flat 100 ft at 50-75 mph. T-502 is the contract standard sheet and supersedes the uncapped S/2S in Guidelines for TTC Table 2/3 (2008). Departure/downstream taper devices at approximately 20 ft (ODOT Guidelines \u00a7Tapers 'Downstream\u2026",
    "tangent_spacing": "ODOT T-502 / TCS2-1 rev 00 (5/23/2010), 'Spacing Channelizing Devices (MAXIMUM)': taper = S through 45 mph, flat 50 ft at 50-75 mph; tangent = 2S through 45 mph, flat 100 ft at 50-75 mph. T-502 is the contract standard sheet and supersedes the uncapped S/2S in Guidelines for TTC Table 2/3 (2008). Departure/downstream taper devices at approximately 20 ft (ODOT Guidelines \u00a7Tapers 'Downstream\u2026",
    "departure_spacing": "ODOT T-502 / TCS2-1 rev 00 (5/23/2010), 'Spacing Channelizing Devices (MAXIMUM)': taper = S through 45 mph, flat 50 ft at 50-75 mph; tangent = 2S through 45 mph, flat 100 ft at 50-75 mph. T-502 is the contract standard sheet and supersedes the uncapped S/2S in Guidelines for TTC Table 2/3 (2008). Departure/downstream taper devices at approximately 20 ft (ODOT Guidelines \u00a7Tapers 'Downstream\u2026",
    "buffer_tangent_spacing": "ODOT T-502 / TCS2-1 rev 00 (5/23/2010), 'Spacing Channelizing Devices (MAXIMUM)': taper = S through 45 mph, flat 50 ft at 50-75 mph; tangent = 2S through 45 mph, flat 100 ft at 50-75 mph. T-502 is the contract standard sheet and supersedes the uncapped S/2S in Guidelines for TTC Table 2/3 (2008). Departure/downstream taper devices at approximately 20 ft (ODOT Guidelines \u00a7Tapers 'Downstream\u2026"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Low-speed rural sign-spacing alternative: on lower-speed rural highways ODOT accepts a spacing of 8 to 12 times the speed limit in mph (ODOT Guidelines for TTC, note under Table 1). A 50 mph rural job prints the 500 ft rural row where ODOT would accept 400 to 600 ft. Sign counts do not move; placement does.",
    "Downstream taper is 'approximately 100 feet per lane' in Oklahoma (ODOT Guidelines for TTC \u00a7Tapers; T-502 '100 feet per lane'). One lane is priced; a 2-lane closure runs 200 ft.",
    "Significant Project / TMP regime (ODOT 23 CFR 630 Subpart K Guidance 2026-01-21): an interstate-system project inside a designated TMA (greater OKC and Tulsa metro, plus Oklahoma, Canadian, Cleveland and Tulsa counties) occupying a location for 3 days or more is a Significant Project and requires a full TMP (TTC plan + Transportation Operations Plan + Public Information Plan). No TMP line item is priced.",
    "Positive protection: ODOT requires a Positive Protection Devices Checklist (Subpart K Guidance Appendix B) after the TMP/engineering study, and shadow vehicles with impact attenuators behind workers. Barrier is length-driven and is not priced.",
    "Crashworthiness: ODOT Quality Control Standards gate temporary device acceptance to NCHRP Report 350, while the Jan-2026 Subpart K guidance frames MASH acceptance forward. No quantity moves; a MASH-only rental fleet may not clear the ODOT QPL gate.",
    "Retroreflectivity: devices that are damaged or have lost significant retroreflectivity shall be replaced (ODOT Guidelines for TTC \u00a7Channelizing Devices). No replacement or attrition allowance is priced.",
    "TA-11: ODOT publishes no positive-control requirement for TA-11, so the federal devices-only low-volume treatment is priced as drawn.",
    "Table 1's rural and expressway-freeway rows are road class, not speed; Oklahoma publishes no speed key for them. The rural (50-55) and freeway (60-80) speed bands are an estimate; supply --road-type when the class is known.",
    "From ODOT T-501..T-507, not priced: T-501 wing barricade each side before the first advance sign; T-507 G20-1A on projects of 1 mile or more, and CS-14 + R2-1 every 1/2 mile; STAY ALERT and FINES DOUBLE panels. 2019 Std Spec 880.02: two flaggers per Flagger sign-day.",
    "Channelizer spacing across lane lines: T-501 / TCS1-1 rev 01 (3/21/2011) general notes say 'When channelizing devices are used to direct traffic across existing lane lines or edge lines, the spacing ... SHALL be reduced 50%.' Read literally this halves merging-taper spacing (25 ft at 55 mph), but T-502's own minimum counts are built on 50-ft taper spacing, so the sheets conflict. T-502 spacing is priced; if the 50% reduction applies, the TA-33 merging taper at 55 mph goes from about 15 to 27 devices.",
    "TA-30R: ODOT publishes no TA-30R equivalent (Guidelines for TTC pp.40-41). The federal sign set is kept (G20-2 optional). If the TA-33 treatment applies, +1 G20-2."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "oregon",
   "name": "Oregon",
   "group": "state",
   "source": "ODOT: Oregon Temporary Traffic Control Handbook (OTTCH) 2026 Edition (in force Jan 1 2026; adopted via OAR 734-020-0005) + Oregon Supplement to the MUTCD 11th Ed (Jan 2026) + ODOT TCP Design Manual (Jan 2026). Verified against OTTCH 2026 on 2026-09-23.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), adopted with the Oregon Supplement (Jan 2026), so the federal table names (6B-1, 6B-2, 6B-4, 6K.01) are the federal citations. The Oregon Supplement defers Part 6 to the OTTCH for work zones of 72 hours or less, so an ODOT reviewer reads OTTCH names. Mapping: Table 6B-4 -> OTTCH Table 2-1 (taper formula); Table 6B-3 -> OTTCH Table 2-2 (taper ratios); Table 6B-1 and Table 6B-2 -> OTTCH Table 2-4 (sign spacing and buffer); pre-computed taper + cone quantities -> OTTCH Table 2-3; Fig 6P-10 (TA-10) -> OTTCH Diagram 320; Fig 6P-11 (TA-11) -> OTTCH Diagram 350. Above 72 hours the governing documents are the ODOT TCP Design Manual + Std Specs 00220/00221/00225, which this overlay does not apply.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 35.0,
     "buffer_ft": 75.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 50,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 50.0,
     "buffer_ft": 100.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 44,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 70.0,
     "buffer_ft": 125.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 42,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 90.0,
     "buffer_ft": 150.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 150.0,
     "buffer_ft": 180.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 42,
     "road_type": "rural"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 170.0,
     "buffer_ft": 210.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 40,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 185.0,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 38,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 285.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 37,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 325.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone_28in",
     "ta33_line_devices_2000ft": 37,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "OTTCH Table 2-3 shoulder column (L/3, printed at a 10-ft shoulder per the Table 2-3 footnote: 'Shoulder taper length \"L/3\" are based on 10 foot shoulder widths'), 55 mph = 185 ft",
    "buffer": "OTTCH Table 2-4 'Buffer' Space (Option \u2014 OTTCH 2.1: 'Buffer spaces should be provided when space is available, but are optional.' No Oregon buffer floor.)",
    "sign_spacing": "OTTCH Table 2-4 row 'rural'",
    "taper_spacing": "OTTCH 2026 2.3 p.16: taper spacing = S ft, tangent = 2S ft (same as MUTCD 6K.01). Downstream and one-lane two-way tapers: 20 ft, 4-6 cones.",
    "tangent_spacing": "OTTCH 2026 2.3 p.16: taper spacing = S ft, tangent = 2S ft (same as MUTCD 6K.01). Downstream and one-lane two-way tapers: 20 ft, 4-6 cones.",
    "departure_spacing": "OTTCH 2026 2.3 p.16: taper spacing = S ft, tangent = 2S ft (same as MUTCD 6K.01). Downstream and one-lane two-way tapers: 20 ft, 4-6 cones.",
    "buffer_tangent_spacing": "OTTCH 2026 2.3 p.16: taper spacing = S ft, tangent = 2S ft (same as MUTCD 6K.01). Downstream and one-lane two-way tapers: 20 ft, 4-6 cones."
   },
   "device_gates": [
    {
     "when": {
      "min_speed": 45
     },
     "device": "cone_28in",
     "source": "OTTCH 2026 Ed 4.2 p.37 (shall): 'Twenty-eight-inch (28-inch) cones shall be used on roads with speeds of 45 mph or greater, or at night.'"
    },
    {
     "when": {
      "night": true
     },
     "device": "cone_28in",
     "source": "OTTCH 2026 Ed 4.2 p.37 (shall): 28-inch cones at night"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "TMA / protection vehicle is not required here. OTTCH 2026 4.4 p.42 is Guidance ('should') and applies only when workers are exposed and not behind positive protection; Diagram 510 note 7 makes the TMA optional ('with or without a TMA may be used'). The template's optional TMA rows stand.",
    "Arrow board volume triggers: OTTCH 2026 4.3 says non-freeway multi-lane arrow boards should also be used for heavy volumes, limited sight distance or unexpected closures. Those are not inputs, so TA-30 / TA-30R / non-freeway TA-33 below 45 mph carry a board only at night.",
    "The OTTCH covers work zones of 72 hours or less. Longer work and ODOT construction projects fall under the ODOT TCP Design Manual (Jan 2026) and Std Specs 00220/00221/00225, which this overlay does not apply. TCP Design Manual 2.4.1 p.37: on ODOT construction projects, cones and tubular markers are spaced 20 or 40 ft (40 ft at 45 mph and above). A 2,000-ft TA-33 work-zone run at 55 mph would take 51 devices at 40 ft instead of 19 at 110 ft (+32), so the line count goes from 38 to about 70. The trigger is an ODOT construction project, which the engine cannot take as input.",
    "Pilot car: OTTCH 3.10 and Diagram 340 say a pilot car should be used when the distance between the two Flagger W20-7 signs exceeds one mile, or when line of sight between flagger stations cannot be held. That adds a PILOT CAR FOLLOW ME (G20-4) sign and a vehicle to a TA-10 job. Flagger-sign separation is not an input.",
    "Twenty-minute stoppage (OTTCH 3.1; Diagram 320 note 9): guidance on flagger delay, not a materials quantity.",
    "Temporary Pedestrian Accessible Route: OTTCH 1 says all road users including those with disabilities shall be accommodated by a TPAR and that TPAR channelizing devices shall be continuous. That drives device counts on a sidewalk job (TA-28/29), which this estimator does not price.",
    "ODOT device gating: portable traffic signals need a permit plus State Traffic Engineer approval and must be on the ODOT Qualified Products List (Diagram 330); LED STOP/SLOW paddles must be on the QPL; flaggers must hold ODOT certification cards; apparel is ANSI 107-2015 Class II minimum. None of this is a quantity, but all of it changes what can be put on the truck for an Oregon job.",
    "Sign-spacing field limits: OTTCH Table 2-4 notes cap the field expansion of the table dimensions \u2014 non-freeway spacing SHALL NOT exceed 2x the table value, freeway SHOULD NOT exceed 1.5x \u2014 and require a 30-ft longitudinal offset where the same message is posted on both sides of the highway. The engine has no place to carry either rule. Neither changes a BOM quantity; both change where a crew may legally stand a sign.",
    "Merging-taper cone offset: at >=45 mph OTTCH 2.3 offsets merging-taper cones 1 ft per cone, and below 40 mph the offset varies with lane width. This is a placement rule with no effect on count, recorded so nobody looks for it later.",
    "Oregon's own sign codes: CG20-2A END ROAD WORK, and CW-prefix warning signs (e.g. CW11-1, CW15-10, CW21-10, CW21-11, CW23-3). They are dimensionally compatible with the federal panels, so no code_map is set, but an Oregon plan sheet prints the Oregon codes. Confirm with ODOT before this drives a sign order.",
    "OTTCH Table 2-4 stops at 70 mph. Above 70 a non-freeway road falls back to the federal Table 6B-1 row (500 ft), lower than Oregon's 700-ft 60-70 tier. Oregon posts no non-freeway road above 70 mph.",
    "Oregon Diagram 350 (Self-Regulating Lane Closure) is Oregon's low-volume single-lane analogue to federal TA-11 and permits devices-only operation under volume and sight-distance gating. Diagrams 345 (oiling/chip seal) and 370 (in-street transit) have no federal TA. None is priced here."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "rhode-island",
   "name": "Rhode Island",
   "group": "state",
   "source": "RIDOT Traffic Design Manual (March 2025), Section 1.6 and Chapter 5; the five RIDOT Approved Temporary Traffic Control Plan sheets posted on the RIDOT Utility Permits page (https://www.dot.ri.gov/business/utilitypermits/, all dated 12-23-08); RIDOT Standard Specifications for Road & Bridge Construction ('Blue Book'), February 2026 Ed. (August 2026 posting) Sections 922/923/926/937; Rhode Island Standard Details (Feb 24, 2025). Rhode Island adopts the national MUTCD 11th Edition WHOLE with no state supplement (TDM 1.6). Most drivers reproduce federal values. RIDOT-specific values: buffer column, 25-ft two-way taper spacing (TA-10), L/3 shoulder taper and TMA (TA-33), R.I. Std 27.1.1 fines sign (drawn on each approach of the four RIDOT lane-closure, lane-shift and freeway shoulder-closure sheets; work-side approach only on the two-lane shoulder closure).",
   "citation_edition": "National MUTCD 11th Ed (Dec 2023), adopted in its entirety with NO state supplement (RIDOT Traffic Design Manual Section 1.6). The engine's internal table names ARE the correct Rhode Island citations: Table 6B-1 (sign spacing), Table 6B-2 (buffer / SSD), Table 6B-3 (taper length criteria), Table 6B-4 (taper formula), Section 6B.08 (taper and downstream device placement), Section 6K.01 para 04 (channelizing-device spacing; 6K.02 is Pedestrian Channelizing Devices and is NOT the spacing citation). Do NOT cite the 10th-Edition 6C-1 / 6C-4 / 6H-x names: RIDOT's Traffic Design Manual cites 11th-Edition sections throughout (6A.01-6P.01, 6B.01, 6C.02-6C.03, 6K.01-6K.02, 6M.02, 6M.05, 6N.01) and the Utility Permits page republishes Table 6P-1 and TA-1 through TA-54 as verbatim 11th-Edition pages. The five RIDOT typical sheets that carry RIDOT's own numbers are dated 12-23-08 and predate the 11th Edition by fifteen years; their Note 1 reads 'ALL TEMPORARY TRAFFIC CONTROL SET-UPS AND DEVICES ... SHALL CONFORM TO THE LATEST EDITION OF THE \"MANUAL ON UNIFORM TRAFFIC CONTROL DEVICES\" (MUTCD) WITH ALL REVISIONS', so the sheets point at the current manual rather than displacing it.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 55.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 85.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 120.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 170.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 220.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 280.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 40,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 340.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 420.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 490.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 65.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 36,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "RIDOT Typical Lane Closure on Freeway or Expressway and both Typical Shoulder Closure sheets (12-23-08) dimension the transition L/3; L read at 12 ft, the only L RIDOT prints. Offset unconfirmed by RIDOT.",
    "buffer": "rhode-island buffer table (Guidance. RIDOT footnotes the column 'Suggested' on four sheets and marks it '*' (Required per that sheet's legend) on Typical Lane Shift on Two-Lane Roadway. Federal Table 6B-2 is also not a Standard, so RIDOT's own printed column governs.)",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'",
    "taper_spacing": "Note 5 on 'TYPICAL LANE CLOSURE ON FREEWAY OR EXPRESSWAY', 'TYPICAL SHOULDER CLOSURE ON FREEWAY OR EXPRESSWAY' and 'TYPICAL SHOULDER CLOSURE ON TWO-LANE ROADWAY', and Note 6 on 'TYPICAL LANE SHIFT ON TWO-LANE ROADWAY' (all 12-23-08): 'MAXIMUM SPACING OF CHANNELIZATION DEVICES IN A TAPER IS EQUAL IN FEET TO THE SPEED LIMIT IN MPH. MAXIMUM SPACING OF CHANNELIZATION DEVICES IN A TANGENT SECTION IS\u2026",
    "tangent_spacing": "Note 5 on 'TYPICAL LANE CLOSURE ON FREEWAY OR EXPRESSWAY', 'TYPICAL SHOULDER CLOSURE ON FREEWAY OR EXPRESSWAY' and 'TYPICAL SHOULDER CLOSURE ON TWO-LANE ROADWAY', and Note 6 on 'TYPICAL LANE SHIFT ON TWO-LANE ROADWAY' (all 12-23-08): 'MAXIMUM SPACING OF CHANNELIZATION DEVICES IN A TAPER IS EQUAL IN FEET TO THE SPEED LIMIT IN MPH. MAXIMUM SPACING OF CHANNELIZATION DEVICES IN A TANGENT SECTION IS\u2026",
    "departure_spacing": "Note 5 on 'TYPICAL LANE CLOSURE ON FREEWAY OR EXPRESSWAY', 'TYPICAL SHOULDER CLOSURE ON FREEWAY OR EXPRESSWAY' and 'TYPICAL SHOULDER CLOSURE ON TWO-LANE ROADWAY', and Note 6 on 'TYPICAL LANE SHIFT ON TWO-LANE ROADWAY' (all 12-23-08): 'MAXIMUM SPACING OF CHANNELIZATION DEVICES IN A TAPER IS EQUAL IN FEET TO THE SPEED LIMIT IN MPH. MAXIMUM SPACING OF CHANNELIZATION DEVICES IN A TANGENT SECTION IS\u2026",
    "buffer_tangent_spacing": "Note 5 on 'TYPICAL LANE CLOSURE ON FREEWAY OR EXPRESSWAY', 'TYPICAL SHOULDER CLOSURE ON FREEWAY OR EXPRESSWAY' and 'TYPICAL SHOULDER CLOSURE ON TWO-LANE ROADWAY', and Note 6 on 'TYPICAL LANE SHIFT ON TWO-LANE ROADWAY' (all 12-23-08): 'MAXIMUM SPACING OF CHANNELIZATION DEVICES IN A TAPER IS EQUAL IN FEET TO THE SPEED LIMIT IN MPH. MAXIMUM SPACING OF CHANNELIZATION DEVICES IN A TANGENT SECTION IS\u2026"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Buffer: the 55-65 mph rows on a non-freeway job come from the freeway sheets (no two-lane sheet prints them), and Note 4 lets the Engineer adjust distances in the field. Pass --buffer-ft to override.",
    "RIDOT's fixed TAPER AND BUFFER LENGTHS taper column ('* Required') is not carried as a table, only as the federal formula it reproduces. Consequence: below 25 mph and at any offset narrower than 12 ft the engine computes 6B-4 rather than reading a RIDOT cell. That is deliberate \u2014 RIDOT's table has no offset column and no row below 25 mph, so a flat reading would invent requirements (660 ft at a 10-ft offset, 125 ft at 20 mph). At a 12-ft offset between 25 and 65 mph the two are identical to the foot.",
    "The 600-ft cap on the shifted tangent between the two shift tapers is not applied. 'TYPICAL LANE SHIFT ON TWO-LANE ROADWAY' Note 5: 'THE MAXIMUM ALLOWABLE LENGTH OF THE SHIFTED TANGENT SECTION FOR THE TEMPORARY TRAFFIC CONTROL SET-UP SHOWN IS 600 FEET.' The engine takes zone length as an input and has no cap on it, so a Rhode Island lane-shift job entered with a zone longer than 600 ft will be priced as one continuous setup where RIDOT's sheet requires a different plan.",
    "The L/3 return leg dimensioned on the lane-shift sheet, where the shift runs off onto the shoulder, is not emitted as a segment. It would add roughly one third of a taper's devices to every Rhode Island lane-shift job that uses the shoulder.",
    "The shoulder-taper offset assumption is unconfirmed. RIDOT dimensions the shoulder transition 'L/3' and publishes only a 12-ft-offset L table, so shoulder_taper reads L at 12 ft. Federal Table 6B-3 uses the same '1/3 L' wording but computes L at the offset width, which on an 8-ft shoulder at 55 mph gives 147 ft rather than 220 ft. RIDOT has not said which it expects. The shoulder taper is fixed at L(12 ft)/3; --shoulder-width does not change it. Treat it as a +/-33% band on any Rhode Island shoulder job until RIDOT answers.",
    "Advance-warning sign PANEL SIZE is not carried. Note 8 on the freeway sheets: 'THE SIZES OF ALL DIAMOND SHAPED ADVANCE WARNING SIGNS SHALL BE 48\" X 48\"'; the two-lane sheets require 36 in x 36 in. The BOM emits an MUTCD code and a face, not a panel dimension, so a Rhode Island freeway job will be quoted at whatever panel size the supplier defaults to \u2014 which is a real unit-cost difference between a 36-in and a 48-in diamond.",
    "RIDOT minimum lane widths are not carried and they differ by sheet family: 11 ft on the two freeway sheets and on the two-lane lane-shift sheet, 10 ft on the two-lane lane-closure and shoulder-closure sheets, 'unless otherwise shown', measured from the edge of the channelizing devices. The engine takes lane width as an input and never checks it against a state minimum.",
    "RIDOT pay units are not carried, and they differ by device in a way that changes costing: Standard Specifications Section 923.05 pays plastic pipe barricades and fluorescent traffic cones by EA but Polyethylene Drum Barricades by BDAY (barrel-days). A drum-priced Rhode Island job multiplies by duration; a cone-priced one does not. The engine returns a count, never a pay unit.",
    "Two RIDOT drum rules are stated but not encoded as device-class gates, because neither keys on an engine input. TDM Section 5.3 'shall': drums whenever channelizing devices supplement Type III barricades used for ROAD CLOSURES \u2014 the engine has no road-closure flag. TDM Section 5.3 'should': drums instead of cones where enhanced positive guidance is warranted \u2014 no threshold published. Every Rhode Island job here is priced as cones unless --device-class is passed.",
    "Rhode Island splits its TTC values by FACILITY (two Freeway/Expressway sheets against three two-lane sheets) and its sign spacing by URBAN vs RURAL AREA, while this engine derives one road type from posted speed alone. speed_to_road_type is the unmodified federal speed mapping and every band carries a warning naming the --road-type flag that overrides it. No RIDOT source sets any speed boundary, so none was invented here \u2014 in particular a 55 mph limited-access job resolves to 'rural' and needs --road-type freeway to pick up RIDOT's 1000/1500/2640 ladder and 48-in panels.",
    "Rhode Island publishes no minimum number of devices in a taper, and no departure- or downstream-taper spacing or downstream taper length outside the two-lane lane-closure sheet, where Note 6 gives 100 ft max at 25 ft (see TA-10). All three were searched for in the Traffic Design Manual, the Blue Book, the Standard Details and the five typical sheets. Elsewhere the minimum device count is not set, departure spacing falls back to taper spacing and the downstream taper is the federal 100 ft. These are federal fallbacks, not Rhode Island values.",
    "Positive-protection thresholds are Rhode Island-specific, BOM-relevant and outside every driver this schema carries. TDM Table 5-4 sets minimum MASH test levels by route: TL-4 on I-95, I-195 and I-295, segments of US 1 and US 6, RI 4/10/24/37/78/99/138/146/403 and the Airport Connector; TL-3 elsewhere; TL-3 crash cushions throughout. Nothing in this file costs barrier, so a Rhode Island job needing TL-4 barrier will be under-quoted by the entire barrier line.",
    "SOURCES NOT RETRIEVED, either of which could supersede the 2008 sheets. The RIDOT Typical TTCPs referenced in Traffic Design Manual Section 5.6.1 live on the RIDOT Project Management Portal, which is login-gated; the bridge-inspection TTCP set is obtainable only from the RIDOT Project Manager. Neither was read. Either could supersede the 2008 sheets that the buffer table, the TA-10 25-ft taper spacing, the TA-33 shoulder taper and TMA, and the R.I. Std 27.1.1 fines sign rest on.",
    "Municipal overlays were not checked. Scope was RIDOT state-owned roadways only; Providence, Warwick, Cranston and Newport may impose their own permit conditions on work in city right-of-way, and none of them is represented here.",
    "Unverifiable: TA-10 downstream buffer. RIDOT Typical Lane Closure on Two-Lane Roadway (12-23-08) draws and channelizes a 'DOWNSTREAM BUFFER SPACE' between the work space and the downstream 100-ft taper, but gives no length. Not counted; understates TA-10 by those devices (unknown).",
    "Unverifiable: shoulder width default. None of the five RIDOT sheets publishes a default shoulder width; shoulder_width_ft stays at 8.",
    "Sign spacing on TA-33 at 40-55 mph resolves by speed band (350 or 500 ft). RIDOT's freeway/expressway sheet uses 1000/1500/2640 by FACILITY; pass --road-type freeway on a limited-access job. Placement only, no count change.",
    "The fines sign code 'RI-27.1.1' is the R.I. Standard Detail number, not an MUTCD code; RIDOT assigns none.",
    "TA-33 downstream taper is left optional, as federal Fig 6P-33 draws it. The RIDOT Typical Lane Closure on Freeway or Expressway (12-23-08) appears to draw an undimensioned downstream taper past the work space; RIDOT gives no length or spacing for it. If it is required, TA-33 is short about 2-3 devices at 55 mph (100 ft at the taper spacing)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "south-carolina",
   "name": "South Carolina",
   "group": "state",
   "source": "SCDOT Supplement to the MUTCD, rev. 02-24-2023, Chapter Six (Sections 6C.04 and 6C.08); SCDOT 'Work Zone Traffic Control Procedures and Guidelines for SCDOT Maintenance Activities' (WZTCM), February 1, 2019 \u2014 Temporary Traffic Control Zone, Traffic Control Devices, Work Zone Traffic Control Procedures and Roadway Characteristics chapters, plus Standard Drawings 505-01 (sheet LCPS-3), 505-03-A (sheet LCPS-9) and 510-01-A (sheet LCI-3); SCDOT Engineering Directive ED-19, Third Revision, September 16, 2025. South Carolina is NOT a federal-as-is state: it replaces the merging-taper length with three fixed road-class values, replaces the federal speed-multiple device spacings with flat feet, publishes a device-type matrix the federal manual has no analog for, and moves two cells of the advance-warning sign ladder. Also read: SCDOT WZTC Design Guidelines (Nov 1, 2016) and the SC Work Zone Safety Guidelines handbook 2023 (for municipalities, counties, utilities and contractors).",
   "citation_edition": "SCDOT adopts the national MUTCD and publishes no standalone state MUTCD. ED-19 (Third Revision, 9/16/2025): the 11th Edition is adopted effective January 1, 2026, replacing the 2009 (10th) Edition, which ran May 1, 2011 through December 31, 2025. As of today South Carolina is an 11th-Edition state, so the engine's internal federal table names are the correct federal citations: Table 6B-1 (advance warning sign spacing), 6B-2 (stopping sight distance / buffer), 6B-3 (taper length criteria), 6B-4 (taper length formulas). REVIEWER MAPPING: every SCDOT document that actually carries a South Carolina number predates that adoption and is written against 10th-Edition numbering \u2014 the Supplement quotes Tables 6C-1, 6C-3 and 6C-4 by name and the WZTCM is dated February 1, 2019. Read 6C-1 -> 6B-1, 6C-2 -> 6B-2, 6C-3 -> 6B-3, 6C-4 -> 6B-4. Cite every South Carolina value by its SCDOT document and section (Supplement Ch. Six 6C.04 / 6C.08; WZTCM Tables 2, 3, 4, 9, 10; Standard Drawings 505-01 / 505-03-A / 510-01-A), NEVER by MUTCD table number \u2014 no re-issued supplement or WZTCM was found on scdot.org as of 2026-09-15.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 250.0,
     "L_half_ft": 125.0,
     "L_shoulder_ft": 250.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 99,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 250.0,
     "L_half_ft": 125.0,
     "L_shoulder_ft": 250.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 99,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 250.0,
     "L_half_ft": 125.0,
     "L_shoulder_ft": 250.0,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 25.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 101,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 40,
     "L_ft": 700.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 250.0,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 61,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 700.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 250.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 62,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 700.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 250.0,
     "buffer_ft": 400.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 63,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 55,
     "L_ft": 700.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 250.0,
     "buffer_ft": 400.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 63,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 700.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 250.0,
     "buffer_ft": 400.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 63,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 800.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 300.0,
     "buffer_ft": 400.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "SC Work Zone Safety Guidelines 2023 p.6 ('at least 1/2 L') and Drawings 8/10 dimension the shifting taper at 0.5 x the federal formula L: 125/160/270/300/330 ft at 35/40/45/50/55 mph. 60-80 mph continue 0.5 x 12 x S. WZTCM Table 2 p.6: 'Shifting Taper: at least 0.5 L. Note: Use Table 1 to calculate L.' The fixed 250/700/800 ft adopted lengths (Supplement 6C.08) are merging-taper lengths.",
    "L_shoulder": "WZTCM Feb 2019 pp.26-27: primary/secondary shoulder closure CASE I, 250-ft taper",
    "buffer": "SC Work Zone Safety Guidelines 2023 p.4: federal 6B-2 guideline clamped to the 200-400 ft shall (shall be 200-400 ft when used (Handbook 2023 p.4); values = 6B-2 guideline on the same page, clamped to that range)",
    "sign_spacing": "SCDOT Supplement rev. 02-24-2023 Sec. 6C.04 sign spacing table row 'rural'",
    "taper_spacing": "WZTCM Feb 2019: taper 25 ft (<=35 mph) / 50 ft (40+) per Drawings 505-01 LCPS-3, 505-03-A LCPS-9, 510-01-A LCI-3; tangent 25 ft (<=35) / 50 ft (40+) per p.23 and Table 10, 100 ft at 65+ per LCI-3; downstream taper 25 ft (p.20: no less than 5 devices at 10-25 ft).",
    "tangent_spacing": "WZTCM Feb 2019: taper 25 ft (<=35 mph) / 50 ft (40+) per Drawings 505-01 LCPS-3, 505-03-A LCPS-9, 510-01-A LCI-3; tangent 25 ft (<=35) / 50 ft (40+) per p.23 and Table 10, 100 ft at 65+ per LCI-3; downstream taper 25 ft (p.20: no less than 5 devices at 10-25 ft).",
    "departure_spacing": "WZTCM Feb 2019: taper 25 ft (<=35 mph) / 50 ft (40+) per Drawings 505-01 LCPS-3, 505-03-A LCPS-9, 510-01-A LCI-3; tangent 25 ft (<=35) / 50 ft (40+) per p.23 and Table 10, 100 ft at 65+ per LCI-3; downstream taper 25 ft (p.20: no less than 5 devices at 10-25 ft).",
    "buffer_tangent_spacing": "WZTCM Feb 2019: taper 25 ft (<=35 mph) / 50 ft (40+) per Drawings 505-01 LCPS-3, 505-03-A LCPS-9, 510-01-A LCI-3; tangent 25 ft (<=35) / 50 ft (40+) per p.23 and Table 10, 100 ft at 65+ per LCI-3; downstream taper 25 ft (p.20: no less than 5 devices at 10-25 ft)."
   },
   "device_gates": [
    {
     "when": {
      "night": true
     },
     "device": "cone_42",
     "modality": "shall",
     "source": "WZTCM Feb 2019 p.24 / Table 4 (42-in cones or drums at night)",
     "_source": "WZTCM (Feb 1, 2019): \"The 28\" or 36\" standard traffic cones are acceptable traffic control devices for daytime lane closure setups and 42\" oversized traffic cones or portable plastic drums are the required traffic control devices for nighttime lane closure setups\" (Work Zone Traffic Control Procedures, 'LANE CLOSURES', p. 24) and \"Utilize portable plastic drums or 42\" oversized traffic cones during nighttime flagging operations\" (same chapter, p. 21). Table 4 (pp. 9-10) says the same: every NIGHT lane-closure row reads 42\" Cones / Drums. SCDOT requires the 42-inch cone at night, not the drum \u2014 the drum is named 'the preferred traffic control device for channelization and delineation of a travel way during the hours of darkness' (Traffic Control Devices chapter, p. 9), which is a preference, not a requirement. Priced at the cheapest device SCDOT permits at night. NIGHT SHOULDER CLOSURES ARE THE EXCEPTION and are not expressible here: 'Portable plastic drums are the required traffic control devices for nighttime shoulder closures' on both primary/secondary and interstate roadways (pp. 26-27), and drums are also required for delineating a pavement edge. Price those as drums by hand."
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Interstates posted 55-60 mph: the 800-ft taper, 100-ft tangent spacing, 300-ft shoulder taper and interstate sign set are keyed to 65+ mph (interstate-only speeds in SC). A 55-60 mph interstate gets primary values unless --road-type freeway is passed for the sign set: taper 100 ft short (2 devices), tangent about twice the devices, shoulder taper 50 ft short (1 device).",
    "Buffer is encoded as federal 6B-2 clamped to the handbook 2023 p.4 200-400 ft shall. Handbook Drawing 10 conflicts at 50-55 mph (425 / 495). Drawing shadow-vehicle setbacks ('150' MINIMUM' low speed, '250' MINIMUM' 40-60 mph and interstate) and the 100 ft TMA-to-work gap are not encoded.",
    "Shifting taper is 0.5 x the federal formula L at a 12-ft lane (handbook 2023 Drawings 8/10). The Design Guidelines' 1.0 L (p.12, Table 2) is SCDOT contract-design practice only.",
    "Night flagging CMS is priced on TA-10 night jobs only (+2). A day job that runs into darkness needs --night.",
    "Right-side-only signing at 35 mph and below (LCPS-3 505-01, handbook Drawing 1A) is applied on TA-33 through the urban-low sign rows. Other TAs sign as their templates draw.",
    "TA-33 LCPS-9 / LCI-3 sign set is encoded at 40+ mph (urban-high / rural / freeway). W3-5 and R2-1 assume an authorized work-zone speed reduction: --option sc_speed_reduction. The same set is not applied to TA-30R: no SCDOT source confirms it there. LCI-3's CMS is not emitted.",
    "WZTCM CASE II shoulder work (beyond 15 ft, within 30 ft of the travel lane) needs advance signs only, no taper. The engine has no CASE I/II input; a CASE II job is over-counted by the shoulder-taper run.",
    "WZTCM Table 4 device SIZING is not carried: one device class per job. Unenforced: 36-in minimum cones on daytime interstate closures, no 28/36-in cones on dual lane closures, no 42-in cones for pavement-edge delineation, Type III microprismatic sheeting. Each changes unit cost.",
    "Day-to-night carry-over: 28/36-in cones must be swapped for 42-in cones or drums at dark (WZTCM pp. 9-10, 24). That is a second device set; this BOM prices one. Night SHOULDER closures and pavement-edge delineation require DRUMS (pp. 26-27); no closure-type input.",
    "Drawing 505-01 side-street note: 'NO LESS THAN 4 TRAFFIC CONTROL DEVICES ALIGNED TO CREATE A MINIMUM 50' RADIUS'. Side streets are variance, not BOM lines.",
    "SCOPE GAP. The contract 600-series lane-closure standard drawings and Standard Specifications Section 601 were not retrieved. The WZTCM targets SCDOT maintenance forces; the handbook 2023 targets utilities and contractors.",
    "EDITION GAP. SCDOT adopted the MUTCD 11th Ed effective Jan 1, 2026 (ED-19), but every SC value here comes from 10th-Ed-era documents (Supplement rev 02-24-2023, WZTCM Feb 2019, Design Guidelines Nov 2016, handbook 2023). Confirm with SCDOT Traffic Engineering that the Part 6 values survive."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "south-dakota",
   "name": "South Dakota",
   "group": "state",
   "source": "SDDOT Standard Plates 634.xx (apps.sd.gov/HP20StandardPlates, Published Date 2027 set) govern: 634.23 (flagger lane closure, TA-10), 634.47 (4-lane undivided right lane closed, TA-30R), 634.48 (4-lane undivided left lanes closed both directions, TA-30), 634.64 (lane closure without barrier, TA-33; dated Sep 22 2021), 634.63 (with speed reduction; Apr 8 2025), 634.61 (shoulder closed). Plus SDDOT Standard Specifications \u00a7634 (Version 10-7-2026), Construction Manual Ch.15 Work Zone Traffic Control (rev Sep 2023) and SDCL 32-25-19.1.",
   "citation_edition": "National MUTCD by reference, current edition at letting (Std Spec \u00a7634.1; 11th Ed after 2026-01-18, no SDDOT adoption bulletin found). SD numbers come from SDDOT Standard Plates 634.xx, so the edition changes only the federal fallback citation. 10th-Ed reviewers: 6B-1=6C-1, 6B-2=6C-2, 6B-4=6C-4, Fig 6P-x=6H-x.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 57,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 58,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 67,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 68,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 84,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 54,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      750,
      750,
      750
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 58,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 63,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1000,
      1000
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "cone_42",
     "ta33_line_devices_2000ft": 64,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "SDDOT Std Plates 634.64/634.47 Taper Length (L) column (printed cell governs)",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "SDDOT Plates 634.64 / 634.47 dimension the shoulder taper L/3 of the plate L column.",
    "buffer": "south-dakota buffer table (Plate dimension (Length of Longitudinal Buffer Space table))",
    "sign_spacing": "MUTCD Table 6B-1 row 'rural'; south-dakota override (A 500->750, B 500->750, C 500->750) per SDDOT Std Plates 634.xx: 55 mph = 750 ft",
    "taper_spacing": "SDDOT Std Plates 634.47/.48/.61/.63/.64 G table: G = 25 ft (2G = 50) at 0-45 mph; 40 ft (2G = 80) for 42-in cones at 50-80 mph. (device_spacing.by_class.cone_42) + 40-ft cone cap in tapers",
    "tangent_spacing": "SDDOT Std Plates 634.47/.48/.61/.63/.64 G table: G = 25 ft (2G = 50) at 0-45 mph; 40 ft (2G = 80) for 42-in cones at 50-80 mph. (device_spacing.by_class.cone_42)",
    "departure_spacing": "SDDOT Std Plates 634.47/.48/.61/.63/.64 G table: G = 25 ft (2G = 50) at 0-45 mph; 40 ft (2G = 80) for 42-in cones at 50-80 mph. (device_spacing.by_class.cone_42) + 40-ft cone cap in tapers (no departure-taper column published; taper spacing used)",
    "buffer_tangent_spacing": "SDDOT Std Plates 634.47/.48/.61/.63/.64 G table: G = 25 ft (2G = 50) at 0-45 mph; 40 ft (2G = 80) for 42-in cones at 50-80 mph. (device_spacing.by_class.cone_42)"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "SD governs by SDDOT Standard Plates 634.xx (apps.sd.gov/HP20StandardPlates). TA-10 = 634.23, TA-33 = 634.64 / 634.63, TA-30R = 634.47, TA-30 = 634.48, shoulder = 634.61. The plates' L, A, G and buffer tables drive this overlay.",
    "SDDOT Standard Plate 634.63 (Apr 8 2025, 2 sheets): tables identical to 634.64. Its speed-reduction sign package is priced on TA-33 under --option speed_reduction (65 step-down W3-5 + R2-1 on facilities posted 75/80 mph, W3-5 45 + R2-6aP, R2-1 45, resume R2-1 at posted speed, speed feedback sign; posted >45 mph only). Not modelled: 'ROAD WORK AHEAD sign is only required in advance of the first lane closure'; 500 ft min from the end of the taper to the work space (warned on TA-33); 5 mi max closure; 3 mi min no-work gap.",
    "Lane-closure LENGTH cap (CM Ch.15 pp.15-1/15-2): on interstate / high-speed >=45 mph divided multilane, a closure is capped at 5 miles (10 miles only for a <=1-day very-high-production operation such as chip seal), shortened below 5 miles if 5 miles exceeds one day's production, with a minimum 3-mile gap between separate closures excluding tapers. The estimator accepts any --zone-length and will price a single 7-mile SD closure that SDDOT would split into two closures plus a 3-mile gap \u2014 which adds a second complete advance-sign package and a second merging taper the estimate never counts.",
    "Two-way-on-one-roadway is EXEMPT from the length cap but needs Region Engineer approval past 12 miles, and structure work is limited by structure count/spacing (example: 1 structure or 1 mile unless structures fall within 2 miles) with a project-specific plan note (CM Ch.15 pp.15-1/15-2). Neither constraint is expressible as a zone length here.",
    "Lane-closure DURATION / idle removal (CM Ch.15 p.15-2): an interstate closure SHOULD be removed when no work occurs for >=3 calendar days (concrete curing counts as work), and a closure SHOULD NOT be set up on a Friday when no Saturday/Sunday work is planned \u2014 install Monday instead. The estimator takes a `days` input but has no idle model, so it never prices the extra tear-down / re-set-up cycles these rules force on a stop-start SD job.",
    "Work-zone SPEED REGIME (SDCL 32-25-19.1; CM Ch.15 pp.15-2/15-3/15-4): the typical lane-closure work-zone speed is 65 mph or posted minus 10 mph; 45 mph is allowed only where traffic is immediately adjacent to the work AND workers are present, and the 45-mph zone must stay within 1/4 mile of active work (<=1/4 mi upstream, <=1/4 mi downstream), with the SPEED LIMIT 45 signs removed when workers are absent. Structure work with limited lane widths or movable barrier may post 45 mph 24/7 over the full structure closure length. Two-way-on-one-roadway may run up to 65 mph by engineering evaluation. Off-system reductions fall outside SDCL 32-25-19.1 and belong to the local city or county. Plates key every table on posted speed prior to work, so enter the posted speed. A reduced work-zone limit only changes the regulatory signs (--option speed_reduction on TA-33).",
    "75/80-mph STEP-DOWN (CM Ch.15 p.15-3, shall): a facility posted 75 or 80 mph must include a 65-mph step-down in advance of any 45-mph zone. Priced on TA-33 under --option speed_reduction (W3-5 x2 + R2-1 x4). No other TA carries it.",
    "DOT 299 APPROVAL GATE (CM Ch.15 p.15-3, shall): a reduced work-zone limit is NOT enforceable and must NOT be posted until the DOT 299 Work Zone Speed Request clears Region Traffic Engineer -> Operations Traffic Engineer -> Director of Operations + Secretary of Transportation + Secretary of Public Safety + Highway Patrol Superintendent (plus named District Highway Patrol approval), submitted at least one week before the reduction starts. Nothing in the BOM represents this gate; a job priced at a reduced speed without an approved DOT 299 is priced at a speed that cannot legally be posted.",
    "DOUBLED-FINES + WZ SPEED SIGN SEQUENCE (SDCL 32-25-19.1; CM Ch.15 p.15-4): an R2-6aP FINES DOUBLE plaque is REQUIRED in advance of regulatory work-zone speed signs where workers are present, inside a W3-5 Reduced Speed Limit Ahead -> R2-1 Speed Limit (+ optional G20-5aP WORK ZONE plaque) -> R2-12 End Work Zone Speed Limit sequence on non-interstate roads. TA-33 --option speed_reduction prices W3-5, R2-6aP and R2-1. G20-5aP and R2-12 are in no template, and no TA other than TA-33 carries the assembly.",
    "FLAGGER requirements (Std Spec \u00a7634.3 C): flaggers must be certified, at least 18, hold a current SD certification valid 2 years with proof carried on site, staff the STOP/SLOW paddle on a 5-7 ft staff, and work stations must be illuminated to >=108 lux (10 foot-candles) during darkness. The estimator counts flagger heads only \u2014 it carries no certification cost and no lighting line item, so SD night flagging (TA-10 especially) is under-priced by the light plant.",
    "GRADE-EDGE DELINEATION (Std Spec \u00a7634.3 E): reflectorized devices on unfinished grades at a maximum 264 ft on tangents and 132 ft on curves sharper than 3 degrees, required for all nighttime hours. This is a device run parallel to the closure that no TA template contains; on an SD grading job it is an entire additional device line the BOM omits.",
    "POSITIVE PROTECTION (CM Ch.15 pp.15-10/15-11, 23 CFR 630 Subpart K): temporary barrier decisions come from an engineering study with NO SD numeric trigger, following a documented hierarchy (remove the hazard, detour, minimize exposure, maximize separation, sequence the work, full/onsite diversion). The estimator never adds temporary barrier and cannot decide when SD would.",
    "Work-zone ITS (CM Ch.15 pp.15-7/15-9): queue-warning systems are considered for all major interstate projects between I-90 Rapid City Exits 52-67 and around the Sioux Falls interstate loop, with variable speed limits stepping down to 45 then 30 mph on queue detection, and Radar Speed Feedback Signs require 18-inch numerals on interstate / >=15-inch elsewhere delineated with at least 2 drums. None of these devices \u2014 and specifically the >=2 RSFS drums, which ARE channelizing devices \u2014 is counted here.",
    "Enforcement and gap-section items the BOM does not carry: the DOT Cop program (off-duty Highway Patrol paid speed enforcement, ~250 hrs per Region, Apr 24 - Nov 23 season, contractor request process; CM Ch.15 pp.15-5/15-7, severity low / 'may') is a labor cost with no device line; the 3-mile gap section between closures keeps the prevailing limit unless engineering judgment says otherwise, so no extra speed-sign package is assumed there; and a closure-length deviation needs Director of Operations or Construction & Maintenance Engineer approval (CM Ch.15 p.15-1). Portable DMS rules and Sturgis Rally seasonal volume are advisory plan-notes, not counts.",
    "Departure-taper spacing: not dimensioned. The plates (634.47/634.64) draw the downstream taper at 100 ft max with devices undimensioned. The engine reuses the taper spacing G (25 ft \u2264 45 mph, 50 ft above; 40 ft for 42-in cones).",
    "Std Spec \u00a7634.2 requires Category I/II/III devices to meet TL-3 of NCHRP 350 or MASH and Category IV devices (PCMS, arrow boards, portable traffic signals, lighting) to be delineated with retroreflective devices, and \u00a7634.3 requires ANSI/ISEA 107 Class 2 or 3 high-visibility apparel. None of these is a BOM quantity, and the Cat-IV delineation devices in particular are uncounted channelizers attached to each arrow board and PCMS.",
    "The SDDOT Work Zone Safety & Mobility Plan PDF is image-only and unread, so its significant-project AADT/duration thresholds and its Subpart J/K detail are not applied. Construction Manual Ch.16 (route-restriction signing) is cross-referenced but not acquired. Anything those two documents add is outside this overlay.",
    "Shifting taper: no SD shifting-taper plate read (not in 634.23/.47/.48/.61/.63/.64). The engine default L/2 of the plate L stands.",
    "MUTCD edition: Std Spec (Version 10-7-2026) \u00a7634.1 binds work to 'the current edition of the MUTCD at the time of letting'; no SDDOT adoption record was found. The 11th Ed is used for the federal fallback; plate values govern regardless of edition.",
    "Divided-highway duplication stays on (template qty 2): Plates 634.64 and 634.63 draw every advance sign (W20-1, W20-5, W4-2R) with leaders to posts on both the median side and the right shoulder.",
    "Plate 634.61 shoulder closure prints L = 1125 at 70-80 mph; no stand-alone shoulder-closure TA is priced here, and the lane-closure plates' 960 drives the TA-33 / TA-30R shoulder taper."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "tempe",
   "name": "Tempe",
   "group": "state",
   "source": "Phoenix TBM adopted by Tempe TBM ES \u00a74.2 (five modifications; only mod 4, a >= 50 ft short-term cone taper, is numeric, and it is duration-gated and not modelled); TCP-Rules origin/main src/data/reference/tempe.js (cites checked 2026-09-23 against 92728ca)",
   "citation_edition": null,
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      125.0,
      125.0,
      125.0
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 51,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      180.0,
      180.0,
      180.0
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      245.0,
      245.0,
      245.0
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 42,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      320.0,
      320.0,
      320.0
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      540.0,
      540.0,
      540.0
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      600.0,
      600.0,
      600.0
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 46,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      660.0,
      660.0,
      660.0
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 48,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 49,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 0.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "vertical_panel",
     "ta33_line_devices_2000ft": 51,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4 [tempe hands off to arizona for ta-33]",
    "L_half": "MUTCD 6B.08: shifting taper = L/2 [tempe hands off to arizona for ta-33]",
    "L_shoulder": "1/3 L at a 12-ft lane (arizona.js TA33_GEOMETRY.tapers.shoulder_taper, SME example L 780 -> 260; TA30R_GEOMETRY.tapers.shoulder_taper, ADOT TTCDG SA-15 'SHOULDER TAPER 1/3 L MIN'). Only where a shoulder is taken. [tempe hands off to arizona for ta-33]",
    "buffer": "0 ft both ends: arizona.js BUFFER_POLICY (Jeremy Anderson 2026-08-10); SME_RULINGS AZ-9/4-NO-BUFFER (Matthew Grotts 2026-09-04) [tempe hands off to arizona for ta-33]",
    "sign_spacing": "sign gap = L (Tempe carries Phoenix TBM Note 2 through to TA-33: advance sign distance = L (tempe.js OPEN_FLAGS TP-M2; ADVANCE_SIGN_SPACING). Only the sign spacing follows Phoenix; every other TA-33 driver is Arizona's (tempe.js manifest ta-33: arizona.js governs).) [tempe hands off to arizona for ta-33]",
    "taper_spacing": "ADOT 40/80 shall, yields to MUTCD below 40 mph (arizona.js CHANNELIZING_DEVICE_SPACING, DEVICE_SPACING). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), within the ADOT 40 ft taper cap (DEVICE_SPACING.taperMaxFt). [tempe hands off to arizona for ta-33]",
    "tangent_spacing": "ADOT 40/80 shall, yields to MUTCD below 40 mph (arizona.js CHANNELIZING_DEVICE_SPACING, DEVICE_SPACING). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), within the ADOT 40 ft taper cap (DEVICE_SPACING.taperMaxFt). [tempe hands off to arizona for ta-33]",
    "departure_spacing": "ADOT 40/80 shall, yields to MUTCD below 40 mph (arizona.js CHANNELIZING_DEVICE_SPACING, DEVICE_SPACING). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), within the ADOT 40 ft taper cap (DEVICE_SPACING.taperMaxFt). [tempe hands off to arizona for ta-33]",
    "buffer_tangent_spacing": "ADOT 40/80 shall, yields to MUTCD below 40 mph (arizona.js CHANNELIZING_DEVICE_SPACING, DEVICE_SPACING). Departure 20 ft = MUTCD 6B.08 downstream-taper Guidance (~20 ft), within the ADOT 40 ft taper cap (DEVICE_SPACING.taperMaxFt). [tempe hands off to arizona for ta-33]"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Cites are to TCP-Rules origin/main 92728ca (2026-09-22). The file moves; grep for the symbol, not the line.",
    "TA-30R takes its layout from arizona.js; its numerics stay Phoenix's (Distance = L, 0 buffer, 1 x S).",
    "Short-term operations <= 60 min: operating arrow panel + light bar and a >= 50 ft cone taper (Tempe \u00a74.2 mod 4, tempe.js :282). Duration is not an input.",
    "Flag tree (1 per direction), R4-7a / R4-8a KEEP RIGHT / LEFT, W16-1P SHARE THE ROAD on bike-lane closures, uniformed officer (mod 3): no device type, asset or input.",
    "TA-33 layout and signs are Arizona's (no Tempe sheet, TP-M2). Its numeric drivers follow the Tempe carry-throughs (tempe.js OPEN_FLAGS TP-M2): Phoenix Table 2 and Distance = L to 55 mph, Arizona above.",
    "Night: Phoenix TBM Ch.6 \u00a7VIII requires an arrow panel in place of each flag tree at night (tempe.js EQUIPMENT_REQUIREMENTS :769-774). The reference treats darkness as not conditionable (tp-assume-short-term-daytime), so --night adds nothing."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "tennessee",
   "name": "Tennessee",
   "group": "state",
   "source": "TDOT Work Zone Design Manual (Mar 2022) Tables 6-28 / 6-29 / 6-30 / 2-3 + Std Spec Section 712 (Apr 1, 2026; 712.01/.02 adoption wording unchanged from Jan 2021) + T-WZ Standard Roadway Drawings (April 2025 set, rev 03-26-25; T-WZ-11 / -16 / -18 / -40 / -41 / -42, tn.gov/content/dam/tn/tdot/traffic-engineering/april-2025/T-WZ-NN.pdf). Where a 2025 T-WZ sheet conflicts with the 2022 WZDM, the sheet is newer and governs the plan.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), adopted in its entirety by reference. Std Spec 712.01 binds the contractor to 'the current edition of the MUTCD, including all addenda'; 712.02 repeats 'except as herein modified'. There is no Tennessee MUTCD and no narrative supplement, so the 11th-Ed table names (6B-1, 6B-2, 6B-4) are what a TDOT reviewer reads. The WZDM (Mar 2022) predates the T-WZ 11th-Ed update and still carries 10th-Ed cites: its table cites 6C-x map to 11th-Ed 6B-x, and its device cites 6F.63-6F.71 moved to 11th-Ed Chapter 6K / 6L. The T-WZ sheets are stamped 'REV. 03-26-25: UPDATED TO CONFORM TO MUTCD 11TH EDITION'.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 420.0,
     "L_half_ft": 420.0,
     "L_shoulder_ft": 116.7,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 10.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 10.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 99,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 480.0,
     "L_half_ft": 480.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 68,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 540.0,
     "L_half_ft": 540.0,
     "L_shoulder_ft": 150.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 20.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 68,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 600.0,
     "L_half_ft": 600.0,
     "L_shoulder_ft": 166.7,
     "buffer_ft": 300.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 660.0,
     "L_half_ft": 660.0,
     "L_shoulder_ft": 183.3,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 53,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 720.0,
     "L_half_ft": 720.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 54,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 55,
     "L_ft": 780.0,
     "L_half_ft": 780.0,
     "L_shoulder_ft": 216.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 57,
     "road_type": "freeway"
    },
    {
     "speed_mph": 60,
     "L_ft": 840.0,
     "L_half_ft": 840.0,
     "L_shoulder_ft": 233.3,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 60,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 900.0,
     "L_half_ft": 900.0,
     "L_shoulder_ft": 250.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 63,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "Computed from T-WZ-11 rev 03-26-25 'COMPUTATION FOR DISTANCE L': L = W x S formula, S = 10 MPH OVER EXISTING POSTED SPEED, at all speeds and widths (printed cell governs)",
    "L_half": "'A shifting taper should have a length of approximately L' (TDOT WZDM Table 2-3). Full L, computed with Tennessee's +10 design-speed bump where the merging taper carries it.",
    "L_shoulder": "T-WZ-11 rev 03-26-25: L/3 shoulder taper drawn and dimensioned on both panels, L = W x (posted + 10) at all speeds with no S^2 branch, W = 10 ft for shoulders up to 10 ft (WZDM Table 6-28 note). 10 x (S + 10) / 3: 25 mph = 117 ft, 55 mph = 217 ft. A shoulder wider than 10 ft is not scaled.",
    "buffer": "TDOT WZDM Table 6-28 Buffer B (Option \u2014 WZDM \u00a72.1 'A longitudinal buffer space may be used'. Not mandated on any facility class.)",
    "sign_spacing": "MUTCD Table 6B-1 row 'freeway'",
    "taper_spacing": "WZDM Mar 2022 Table 6-30 p.6-51 'Spacing for channelizing devices': 40 ft for speeds > 40 mph (freeways included), 20 ft below 40 mph, 10 ft at radii / < 30 mph. Table 6-30 pitch applies to the taper and departure taper. Tangent: T-WZ-11 rev 03-26-25 draws 40' in the taper and 80' (TYP) on the tangent (80 = 2 x 40); 2S below 40 mph (federal default; no TN tangent value below 40). Table 6-30 has\u2026",
    "tangent_spacing": "WZDM Mar 2022 Table 6-30 p.6-51 'Spacing for channelizing devices': 40 ft for speeds > 40 mph (freeways included), 20 ft below 40 mph, 10 ft at radii / < 30 mph. Table 6-30 pitch applies to the taper and departure taper. Tangent: T-WZ-11 rev 03-26-25 draws 40' in the taper and 80' (TYP) on the tangent (80 = 2 x 40); 2S below 40 mph (federal default; no TN tangent value below 40). Table 6-30 has\u2026",
    "departure_spacing": "WZDM Mar 2022 Table 6-30 p.6-51 'Spacing for channelizing devices': 40 ft for speeds > 40 mph (freeways included), 20 ft below 40 mph, 10 ft at radii / < 30 mph. Table 6-30 pitch applies to the taper and departure taper. Tangent: T-WZ-11 rev 03-26-25 draws 40' in the taper and 80' (TYP) on the tangent (80 = 2 x 40); 2S below 40 mph (federal default; no TN tangent value below 40). Table 6-30 has\u2026",
    "buffer_tangent_spacing": "WZDM Mar 2022 Table 6-30 p.6-51 'Spacing for channelizing devices': 40 ft for speeds > 40 mph (freeways included), 20 ft below 40 mph, 10 ft at radii / < 30 mph. Table 6-30 pitch applies to the taper and departure taper. Tangent: T-WZ-11 rev 03-26-25 draws 40' in the taper and 80' (TYP) on the tangent (80 = 2 x 40); 2S below 40 mph (federal default; no TN tangent value below 40). Table 6-30 has\u2026"
   },
   "device_gates": [
    {
     "when": {
      "night": true
     },
     "device": "drum",
     "modality": "shall",
     "source": "T-WZ-40 note A, T-WZ-41 note B, T-WZ-42 note A (rev 03-26-25): 'FLEXIBLE DRUMS OR CONES MAY [BE] USED FOR SHORT TERM LANE CLOSURES (DAY TIME ONLY). FLEXIBLE DRUMS SHALL BE USED FOR LONG TERM (OVERNIGHT) CLOSURES.'"
    },
    {
     "when": {
      "min_hours": 12
     },
     "device": "drum",
     "modality": "shall",
     "source": "WZDM Mar 2022 5.2.1 p.5-5 (SHALL, in the Flexible Drums block): Type B channelizing devices shall be used if the zone is installed more than 12 hours or left unattended; paid as 712-04.01 Flexible Drums. 'Unattended' is not an input; only the 12-hour arm is evaluated."
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Lane widths: Table 6-28 prints W < 10, 12, 14 and 16 ft columns; 11, 13 and 15 ft cells follow the printed columns' pattern ((S+10)^2 x W / 60 through posted 45, W x (S+10) above), not the note formula. TA-33 uses the T-WZ-11 formula at 8-16 ft.",
    "Speeds outside Table 6-28: rows run 25-70 mph in 5-mph steps; a 20 mph row is carried on the same pattern. Tennessee's statutory maximum is 70 mph, so 75 and 80 do not arise; an odd posted speed on TA-30 / TA-30R falls back to the federal formula at the unbumped speed, under-length. TA-33 applies the T-WZ-11 formula at 20-80 mph.",
    "Advance sign spacing at 45 mph non-freeway: WZDM Table 6-29's bands overlap (35-45 prints 350, 45-55 prints 500), and no TN document reconciles them. 45 mph stays on urban-high (350). A plan read off the 45-55 row carries signs 500 ft apart. One sign position, no quantity change. Open: which Table 6-29 row owns 45 mph.",
    "Successive-taper separation: 'TDOT specifies a minimum length of 2X L between the end of the first taper and the beginning of the next taper' (WZDM Table 2-3). No federal analog. The engine has no inter-taper gap driver and no template that places two tapers in series, so this changes no count today; it would lengthen any multi-taper layout.",
    "Flashing arrow board display modes: Std Spec 712.04.C is a SHALL \u2014 single arrow (lane closure only), double arrow and four-point caution ONLY; 'Do not use the sequential arrow configuration, chevron arrow configuration, and horizontal bar configuration.' Flash rate 25-40/min, min on-time 50%, min 7 ft mount. The BOM carries ARROW_BOARD as an integer count with no mode attribute, so the count is right and the spec constraint is invisible. It changes which board can be rented, not how many.",
    "Divided-highway duplication: the federal right + median posting stands. T-WZ-11 rev 03-26-25 draws every advance sign with two leader lines to two supports (median side and closure-side shoulder), both panels; the 'FOR LEFT LANE CLOSURE USE SIGNS W20-5L AND W4-2L' note swaps legends only. T-WZ-64 is the exit-ramp special case and does not govern TA-33.",
    "Flagger delay caps: 'within 2 minutes or 1/4 mile, but shall not exceed 5 minutes or a 1 mile maximum' without Department authorization (Std Spec 712.04.A). An operational validator, no BOM quantity.",
    "Flagger certification (ATSSA / NSC / TTAP / ABET-accredited university) and the uniformed-officer / THP rules (712.04.B: 48 hr notice, POST academy + 4 hr FHWA work-zone training, marked vehicle, monthly enforcement log). Labour qualifications, not line items.",
    "Sign-install rules: drive supports >= 3.5 ft into soil / 1 ft into rock (d1 + 3.5*d2 = 42 in), and do not display advance warning signs more than 48 hr before construction (1 week if the face is fully covered) \u2014 Std Spec 712.04. Affects mobilisation and truck rolls, not sign counts.",
    "Work-zone lane width: >= 45 mph requires 11 ft min, < 45 mph 10 ft min with 1 ft shy (WZDM Ch. 2). The estimator accepts any lane width and does not validate it against the posted speed.",
    "Speed management: advisory speed first, regulatory work-zone speed only when warranted, recommended maximum reduction 10 mph (WZDM 2.8, Tables 2-18/2-19). No regulatory speed sign is emitted and the posted speed is never reduced before L is computed.",
    "Governing sheets: T-WZ-11 (rev 03-26-25) governs TA-33. T-WZ-40 (rev 03-26-25, near-side-of-intersection closure) is the TA-30R analog: its G20-2 and X / 2X device spacing are encoded, but its sign faces (ROAD WORK 1500 FT, RIGHT LANE CLOSED 1000 FT) and 500-ft sign spacing are not, so TA-30R keeps the federal figure.",
    "Drum-for-Type-II-barricade substitution (WZDM 5.2.1, SHALL) has no line to act on: no template emits a Type II barricade. The 'left unattended' arm of the Type B rule is not an input; only the >12-hour arm is gated.",
    "TA-33 departure taper: T-WZ-11's standard setup draws none; the barrier-rail panel shows '100' (OPTIONAL)' at 40 ft (rev 06-28-19 'ADDED ... OPTIONAL BARRELS TO THE DOWN STREAM END'). WZDM Table 2-3: 'When used, this taper should ...' (Guidance). TA-33 departure taper is optional, priced at 40 ft under --include-optional.",
    "Merging taper on undivided TAs (TA-30R / TA-30): T-WZ-40 (2025) computes L at POSTED speed (55 -> 660), while WZDM 2022 Table 6-28 cells carry the +10 bump, and its footnote marker sits on the 'Freeways' heading. The Table 6-28 cells are kept (55 -> 780) until confirmed. If the sheet governs, TA-30R at 55 loses about 2 taper devices.",
    "TA-10 keeps the federal figure, 100-ft flagger taper and sign set (W20-1 / W20-4 / W20-7, optional G20-2). The flagger and downstream tapers keep the federal figure count (6 each over 100 ft). Table 6-30 pitch is not applied to them. Buffer (Table 6-28) and tangent spacing still apply. TDOT publishes no flagger standard drawing in the April 2025 T-WZ set; WZDM Table 2-3 gives the flagger taper as 50 ft min / 100 ft max (Guidance). T-WZ-36 is YIELD-controlled, not flagging.",
    "TA-30 interior lane closure: TN interior-closure sheets are T-WZ-13/14/15 (freeway / expressway); no urban interior-lane sheet was located. Federal figure with Tennessee drivers.",
    "Arrow board: T-WZ-11 note G says a second arrow board MAY be used. Not priced.",
    "Table 6-28 shoulder-closure formula note (W < 10, S = posted + 10) switches to L = WS above S = 45. Applied at 12 ft it gives 600 / 660 at posted 40 / 45, against the printed 500 / 605. The printed cells are used on TA-30 / TA-30R."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "texas",
   "name": "Texas",
   "group": "state",
   "source": "TxDOT: 2025 TMUTCD Part 6 (Texas MUTCD, Nov 2025, eff. Jan 18 2026) + Item 502 + CWZTCD + TxDOT BC standard sheets. Deviations: Table 6B-1A single X sign distance; Table 6B-2A buffer; Texas-revised freeway figure ladder 1000/1600/2600; CW16 distance plaques on Figs 6P-30/6P-33; TA-30 Note 1 deleted; BC(8)-21 freeway drum rule (contract layer). Everything else defers: merging taper formula (Table 6B-4A, identical algebra), shifting taper 0.5 L, shoulder taper 0.33 L, one-lane two-way and downstream tapers 50-100 ft (Table 6B-3), device spacing 1xS taper / 2xS tangent (sec 6K.01). No interstate design-speed floor and no mandatory buffer.",
   "citation_edition": "2025 TMUTCD (eff. Jan 18 2026, 43 TAC). Federal 11th-Ed Part 6 structure; Fig 6P-N = TA-N. Texas replaces Tables 6B-1, 6B-2 and 6B-4 with 6B-1A, 6B-2A and 6B-4A (federal marked DELETED); 6B-3 unchanged. Texas-edited figures: 6P-10, 6P-30, 6P-33 and the freeway TAs.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 60.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 47,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 90.0,
     "sign_spacing_A_B_C_ft": [
      120,
      120,
      120
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 42,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 120.0,
     "sign_spacing_A_B_C_ft": [
      160,
      160,
      160
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      240,
      240,
      240
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 36,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 195.0,
     "sign_spacing_A_B_C_ft": [
      320,
      320,
      320
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 240.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 295.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2600
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 34,
     "road_type": "freeway"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 350.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2600
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 410.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2600
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 31,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "TMUTCD 2025 Table 6B-2A (TX) Longitudinal Buffer Space (Option - TMUTCD 2025 sec 6B.06: 'A longitudinal buffer space may be placed in advance of a work space... If a longitudinal buffer space is used, the values shown in Table 6B-2A may be used.' Texas adds no mandatory-buffer flag (contrast Indiana) and no absolute floor (contrast Florida's 155 ft).)",
    "sign_spacing": "TMUTCD 2025 Table 6B-1A (TX) row 'freeway'; texas override (B 1500->1600, C 2640->2600) per TMUTCD 2025 Fig 6P-33 p.1033 panels A/B (Texas-revised, blue): 1000/1600/2600 ft; same on Figs 6P-34/35/37/39. Figure dimension, not a Standard.",
    "taper_spacing": "Defers on both. TMUTCD 2025 sec 6K.01: the spacing 'should not exceed a distance in feet equal to 1 times the speed limit in mph when used for taper channelization and should not exceed a distance in feet equal to 2 times the speed limit in mph when used for tangent channelization', a restatement of MUTCD 11th Ed sec 6K.01 para 04. Table 6B-4A tabulates the same pair, 30 mph -> 30 ft taper / 60\u2026",
    "tangent_spacing": "Defers on both. TMUTCD 2025 sec 6K.01: the spacing 'should not exceed a distance in feet equal to 1 times the speed limit in mph when used for taper channelization and should not exceed a distance in feet equal to 2 times the speed limit in mph when used for tangent channelization', a restatement of MUTCD 11th Ed sec 6K.01 para 04. Table 6B-4A tabulates the same pair, 30 mph -> 30 ft taper / 60\u2026",
    "departure_spacing": "Defers on both. TMUTCD 2025 sec 6K.01: the spacing 'should not exceed a distance in feet equal to 1 times the speed limit in mph when used for taper channelization and should not exceed a distance in feet equal to 2 times the speed limit in mph when used for tangent channelization', a restatement of MUTCD 11th Ed sec 6K.01 para 04. Table 6B-4A tabulates the same pair, 30 mph -> 30 ft taper / 60\u2026",
    "buffer_tangent_spacing": "Defers on both. TMUTCD 2025 sec 6K.01: the spacing 'should not exceed a distance in feet equal to 1 times the speed limit in mph when used for taper channelization and should not exceed a distance in feet equal to 2 times the speed limit in mph when used for tangent channelization', a restatement of MUTCD 11th Ed sec 6K.01 para 04. Table 6B-4A tabulates the same pair, 30 mph -> 30 ft taper / 60\u2026"
   },
   "device_gates": [
    {
     "device": "drum",
     "when": {
      "road_types": [
       "freeway"
      ],
      "min_hours": 72.01,
      "tas": [
       "ta-33"
      ]
     },
     "modality": "shall (TxDOT standard sheet, contract layer; not a TMUTCD Standard)",
     "source": "TxDOT BC(8)-21 Note 1: 'For long term stationary work zones on freeways, drums shall be used as the primary channelizing device'; long-term stationary = more than 3 days (BC(4)-21)."
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Expressway and freeway sign spacing: Table 6B-1A prints no A/B/C for expressways and freeways ('All Speeds -> See Typical Applications (Chapter 6P)'). The Texas-revised figures dimension 1000/1600/2600 ft (Fig 6P-33 p.1033 and every freeway TA), encoded as the freeway override. TA-33 gets it at 50 mph and above; other TAs only at --road-type freeway (or TA-30R at 60+ mph). It is a figure dimension, not a Standard. No cone count depends on it.",
    "Below 25 mph Texas publishes no Table 6B-1A row. The overrides start at 25 mph, so a posted speed under 25 falls through to the federal Table 6B-1 row for whatever road type is in play - 100 ft on urban-low, which happens to equal Texas's 25-mph value, but 350 or 500 ft if a caller forces urban-high or rural. Texas has not published a value to use there.",
    "Texas codes are not applied. ta_overrides adds the Fig 6P-30/6P-33 distance plaques under federal codes (W16-2aP, W16-3aP; TX CW16-2aP, CW16-3aP), and every code printed is federal. The 2025 TMUTCD uses CW-prefixed construction-warning codes (CW20-1, CW20-5T, CW4-2) and T-suffix Texas-original panels (R20-3T, G20-6T, G20-7T / CW21-1T). Sign quantities are unaffected.",
    "CWZTCD device-legality gate (TxDOT Item 502) is not enforced. Every traffic-control device used on a Texas job shall appear on the TxDOT Compliant Work Zone Traffic Control Device List, and Item 502 requires the crew to implement the TCP shown on the plans using approved CWZTCD products. This estimator emits a generic cone, drum or barricade with no membership check, so a BOM produced here can name a device Texas will not accept on a state contract. Affects unit cost and procurement, not device count.",
    "Texas first-classes two one-lane two-way control methods this estimator cannot price. The pilot-car method (sec 6E.04, G20-4 PILOT CAR FOLLOW ME) sits alongside the flagger method, and the devices-only STOP or YIELD control method (sec 6E.06, Fig 6P-11) is PERMITTED on low-volume roads - the opposite of Indiana's block. A ta-10 estimate here always prices two flaggers and never emits G20-4 or a pilot-vehicle line, so a Texas job run under pilot car carries the wrong labour line. The STOP/YIELD method IS priceable - TA-11 (Fig 6P-11, 0 flaggers) runs against this overlay - but the caller has to pick --ta ta-11; nothing here routes a Texas job to it.",
    "No statewide TxDOT flagger certification was found in the 2025 TMUTCD Part 6 text - sec 6D.01 requires 'adequate training in safe temporary traffic control practices' and sec 6D.02 a STOP/SLOW paddle, but no state-issued licence number. If TxDOT runs a certification programme outside Part 6 it would change the flagger labour rate, which this estimator does not carry.",
    "City overlays are absent. Houston, Dallas, Austin and San Antonio each maintain a ROW / MOT manual layered on the TMUTCD. None is modelled, so a job inside those city limits may be governed by values this overlay does not have.",
    "Dimensioned geometry on the TxDOT TCP(#) and BC(#) standard sheets is image-only CAD and is not read. TA-33 and TA-30 report the Texas-revised TMUTCD figures (federal figure, amended); other TAs keep the federal figure with Texas numeric drivers. TA-33 duplication: divided_highway_duplication true (TMUTCD 2025 Fig 6P-33 p.1033 panels A/B post CW20-1, CW20-5T, CW4-2 and G20-2 right and median; figure depiction, not a Standard); the template's qty 2 stands.",
    "TA-30R basis is unverifiable: Texas has no TA-30R figure. TMUTCD 2025 sec 6N.11 para 06 (p.954, Option) says undivided four-lane roads use TTC 'similar to' Fig 6P-33, without saying whether 1000/1600/2600 or Table 6B-1A X applies. TA-30R keeps speed-keyed bands (freeway ladder at 60+ mph). Flag for SME.",
    "TxDOT BC(8)-21 drum gate keys on road type 'freeway' and duration >3 days. Default runs (days=1) supply no duration, so the gate only warns. Intermediate-term freeway 'should use drums' (BC(8)-21 Note 2) is warn-only. TA-30R is excluded from the gate: sec 6N.11 covers non-access-controlled highways, and BC(8)-21 Note 1 applies to freeways only.",
    "TA-33 below 50 mph reads Table 6B-1A X and a non-freeway road class, so the 1/2 MILE plaque and the BC(8)-21 freeway drum gate do not apply there. Fig 6P-33 itself draws the 1000/1600/2600 ladder at any speed; the 50-mph switch is open for SME confirmation."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "utah",
   "name": "Utah",
   "group": "state",
   "source": "Utah MUTCD, 2009 Edition with revisions through June 30, 2015, incorporated by Utah Admin Code R920-1-2 (amended by Utah State Bulletin 2015-18, effective 8/24/2015). Operative work-zone rules: UDOT Standard Specification Section 01554 Traffic Control (2026 and 2027 spec books) plus the UDOT Standard Drawings TC series, both public PDF books on connect.udot.utah.gov/business/standards. UDOT 2026 Standard Specifications, Section 02893 is Overhead Sign/VMS Structure, not traffic control. Every number in this file is read off the TC chart: UDOT Standard Drawings, 2026 book TC 4A 'Taper, Buffer Zone & Sign Spacing Chart' (sheet dated 12-Mar-2025, p399) = 2027 book TC 3A (p396). Chart values are identical in both books. TA mapping: TA-10 = TC 14A detail 14-2 (2027: TC 13A); TA-30 = TC 8-2 (2027: TC 7); TA-33 = TC 8-1 / TC 4A (2027: TC 7).",
   "citation_edition": "MUTCD 10th Ed (2009) lineage. R920-1-2 incorporates the Utah MUTCD 2009 Edition with revisions through June 30, 2015 (Bulletin 2015-18, eff. 8/24/2015); the older 'revisions through December 2011 / Bulletin 2012-18' reading is superseded. Mapping from the engine's internal (11th Ed) names to what Utah prints: '6B-1', '6B-2', '6B-3' and '6B-4' ALL map to one UDOT chart, UDOT Standard Drawings, 2026 book TC 4A 'Taper, Buffer Zone & Sign Spacing Chart' (sheet dated 12-Mar-2025, p399) = 2027 book TC 3A (p396). Cite that chart to a UDOT reviewer, not 6B-x / 6P-x. Edition: no 11th-Ed adoption found, but the official DAR page could not be read (404), and 2027 Spec 01554 1.2.K cites a 'Manual on Uniform Traffic Control Devices - Utah Supplement', a sign of a coming 11th-Ed cutover. Which book governs (2026 or 2027) depends on the contract advertisement date; the numeric chart is the same in both.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 60,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 30.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 52,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 35.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 40.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 45.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 42,
     "road_type": "rural"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 40,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 55.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 39,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 60.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 38,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 65.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 38,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "UDOT TC 4A/TC 3A 'Length of Buffer (BZ)*' (Standard drawing; footnote *: 'MAY BE REDUCED WITH THE APPROVAL OF THE ENGINEER')",
    "sign_spacing": "UDOT TC 4A / TC 3A 'Minimum Sign Spacing (SS)' chart row 'rural'",
    "taper_spacing": "UDOT Standard Drawings, 2026 book TC 4A 'Taper, Buffer Zone & Sign Spacing Chart' (sheet dated 12-Mar-2025, p399) = 2027 book TC 3A (p396), 'Channelizing Devices' item C: 'ON TANGENT: S x 2 = SPACING UP TO 120 FT MAXIMUM'. No taper spacing is printed; items A/B set taper counts instead (see min_devices_in_taper). Taper spacing is S; the item A/B count sets the floor.",
    "tangent_spacing": "UDOT Standard Drawings, 2026 book TC 4A 'Taper, Buffer Zone & Sign Spacing Chart' (sheet dated 12-Mar-2025, p399) = 2027 book TC 3A (p396), 'Channelizing Devices' item C: 'ON TANGENT: S x 2 = SPACING UP TO 120 FT MAXIMUM'. No taper spacing is printed; items A/B set taper counts instead (see min_devices_in_taper). Taper spacing is S; the item A/B count sets the floor.",
    "departure_spacing": "UDOT Standard Drawings, 2026 book TC 4A 'Taper, Buffer Zone & Sign Spacing Chart' (sheet dated 12-Mar-2025, p399) = 2027 book TC 3A (p396), 'Channelizing Devices' item C: 'ON TANGENT: S x 2 = SPACING UP TO 120 FT MAXIMUM'. No taper spacing is printed; items A/B set taper counts instead (see min_devices_in_taper). Taper spacing is S; the item A/B count sets the floor. (no departure-taper column\u2026",
    "buffer_tangent_spacing": "UDOT Standard Drawings, 2026 book TC 4A 'Taper, Buffer Zone & Sign Spacing Chart' (sheet dated 12-Mar-2025, p399) = 2027 book TC 3A (p396), 'Channelizing Devices' item C: 'ON TANGENT: S x 2 = SPACING UP TO 120 FT MAXIMUM'. No taper spacing is printed; items A/B set taper counts instead (see min_devices_in_taper). Taper spacing is S; the item A/B count sets the floor."
   },
   "device_gates": [
    {
     "when": {
      "divided": true
     },
     "device": "drum",
     "source": "UDOT 2026 Std Dwg TC 2A note 11 (p391): 'DO NOT USE CONES ON FREEWAYS, DIVIDED HIGHWAYS, OR ROADS WITH A SPEED OF 55 MPH OR GREATER'"
    },
    {
     "when": {
      "min_speed": 55
     },
     "device": "drum",
     "source": "UDOT 2026 Std Dwg TC 2A note 11 (p391): 'DO NOT USE CONES ON FREEWAYS, DIVIDED HIGHWAYS, OR ROADS WITH A SPEED OF 55 MPH OR GREATER'"
    },
    {
     "when": {
      "road_types": [
       "freeway"
      ]
     },
     "device": "drum",
     "source": "UDOT 2026 Std Dwg TC 2A note 11 (p391): no cones on freeways"
    },
    {
     "when": {
      "gt_hours": 72
     },
     "device": "drum",
     "source": "UDOT 2026 Std Dwg TC 2A note 12 (p391: cones only up to 3 days; over 3 days is a drum job)"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Work-zone speed-reduction TEO gate: UDOT allows a reduction of up to 10 mph to the posted speed for up to 20 days without a Traffic Engineering Order; a reduction greater than 10 mph or lasting more than 20 days requires an approved TEO from the Engineer for Traffic Safety (UDOT, Use of Variable Speed Limits in Construction Zones - Concept of Operations, Dec 2015). The engine takes one speed and no TEO flag. No device or sign count changes, but a reduced work-zone speed entered as --speed shortens L, the buffer and the device spacing without recording that the reduction needs approval.",
    "Variable Speed Limits: UDOT deploys VSL in work zones (UDOT, Use of Variable Speed Limits in Construction Zones - Concept of Operations, Dec 2015). A VSL changeable speed-limit sign assembly is not priced; it adds a line item on VSL corridors.",
    "UDOT flagging taper (TA-10) is 50 ft at <=40 mph and 100 ft at >=45 mph (TC 4A/TC 3A 'One Lane Two-Way Flagging Taper Length'). The count is fixed at 5 by item B, so the length does not move the BOM; the 50-ft length itself is not modelled.",
    "TC 1 note 4 (2026): 'USE A DOWNSTREAM TAPER FOR OPERATIONS LONGER THAN 3 DAYS.' Priced from --days 4 up on TA-10, TA-30 (each direction), TA-30R and TA-33 (5 devices per taper on TA-10 and TA-30). Duration-hours alone does not trigger it. The note 12 drum gate fires above 72 hours (over 3 days).",
    "Taper-count floors (TC 4A/TC 3A items A-B) are W+1 for merging/shifting and ceil(W/3)+1 for shoulder/one-lane-two-way/downstream, read at the job's lane and shoulder width.",
    "Tangent device spacing speed conflict in the 2026 book: TC 1 note 3 and TC 4A note 1 take S from the work-zone posted speed, while 2026 Spec 01554 3.2.B takes the preconstruction speed. 2027 01554 3.4.B uses the work-zone speed. The engine uses the single --speed supplied.",
    "2027 book device class (TC 1A drops the 2026 TC 2A cone bans, notes 3-13): 2027 Spec 01554 3.4.B.1-2 requires drums/directional barricades for taper devices on freeways, divided highways and >=50 mph, and drums or vertical panels (no cones) for night work; 2027 01554 1.6.B.1 drops cones from the Category 1 list. Priced on the 2026 book gates. A 2027-book contract needs --device-class drum (or vertical_panel) for night work.",
    "UDOT TC 3B worker-exposure score (2026 p398): 20-30 points requires at a minimum ONE of positive protection devices, device spacing cut to at most half, or a longitudinal/lateral buffer plus a TMA; 31+ requires positive protection (barrier, or a shadow vehicle with attenuator). TMA rating TL-2 at <=45 mph, TL-3 above (2026 Spec 01554 2.3.E). The engine has no exposure input, so the TMA stays optional. When triggered: +1 TMA, or about 2x tangent devices, not both.",
    "TA-30R left-side signing (2026 TC 4A note 5): left copies of W20-1, W20-5, W4-2 and G20-2 are priced on --divided at 45 mph and above. The 2+ lanes condition is true by TA-30R's definition. UDOT prints no high-speed threshold; 45 is the MUTCD high-speed break.",
    "TC 8-2 (TA-30) draws W1-4 / R4-7 shift signs, and TC 1 note 8 requires 2L between successive maneuvers. Neither is in the federal TA-30 component list or expressible as a segment gap; not added.",
    "Salt Lake City publishes its own Traffic Control Manual. It is not read, and no Utah city or county overlay exists, so a Salt Lake City job is answered with statewide Utah values.",
    "TA-33 with no adequate shoulder: the arrow board goes in the first third of the taper and the shoulder taper drops (TC 4A notes 3-4). The estimate always prices the shoulder taper (4 devices on an 8-ft shoulder; at 30 mph and lower its length is 1/3 of the 180-ft chart row scaled to the shoulder width).",
    "TC 4A / TC 3A '30 AND LOWER = 180 ft' taper row is printed for a 12-ft lane closure only. At 30 mph and lower, 10- and 11-ft lanes run the federal formula (25 mph: 104 / 115 ft). The W+1 device floor governs the count at those widths, so the count is unaffected.",
    "TA-30R: TC 4A notes 3-4 shoulder taper (arrow board on shoulder) not priced; TA-30R assumes a curbed street with no usable shoulder. On a shouldered road add 4 devices (ceil(8/3)+1)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "vermont",
   "name": "Vermont",
   "group": "state",
   "source": "VTrans Standard Drawings T-1 rev 2, T-10 / T-11 / T-12 / T-21 rev 1 (Jun 24 2025) + 2024 Standard Specifications \u00a7630 / \u00a7641.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), adopted by reference at 23 V.S.A. \u00a7 1025 'as amended'. There is no Vermont state MUTCD and no formal state supplement, so Table 6B-1 (sign spacing), 6B-2 (buffer/SSD), 6B-4 (taper) and Figure 6P-10 / 6P-33 are the names a VT reviewer reads. Cutover: a project advertised before Oct 1 2025 may run the 2009 (10th) Ed until substantial completion; on those plans the same content reads as Table 6C-1 / 6C-4 and Figure 6H-x. After Jan 18 2026 all projects are 11th Ed (VTrans TEI 25-200).",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 34.7,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      3140
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 50,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      3140
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 68.0,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      3140
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 90.0,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      3140
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 40,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 150.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      3140
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 42,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 170.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      3140
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 40,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 185.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      3140
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      3140
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 215.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      3140
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 36,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "VTrans T-12 rev 1 (Jun 24 2025) table, 'SHOULDER W=10 FT (L/3)' column: 55 mph = 185 ft",
    "buffer": "MUTCD Table 6B-2 (Minimum \u2014 a called-out design dimension on T-12 (divided-highway lane closure); Option, 6B.06 para 11, elsewhere)",
    "sign_spacing": "VTrans T-11 rev 1 fixed divided-highway ladder row 'rural'; vermont override (A 500->1000, B 500->1500, C 500->3140) per VTrans T-11 rev 1: W4-2 1000 ft from the beginning of the merging taper, W20-5 '1/2 MILE' at 2500, W20-1 at 5640 ft, at every speed",
    "taper_spacing": "Defers. T-12's 'CHANNELIZING DEVICE SPACING' columns (taper 30\u219230 \u2026 65\u219265; tangent 30\u219260 \u2026 65\u2192130) restate federal \u00a76K.01 para 04 (\u22641\u00d7S taper, \u22642\u00d7S tangent). T-12 prints no departure-taper spacing column, so the federal value applies: MUTCD 11th Ed 6B.08 Guidance, downstream taper devices spaced about 20 ft apart.",
    "tangent_spacing": "Defers. T-12's 'CHANNELIZING DEVICE SPACING' columns (taper 30\u219230 \u2026 65\u219265; tangent 30\u219260 \u2026 65\u2192130) restate federal \u00a76K.01 para 04 (\u22641\u00d7S taper, \u22642\u00d7S tangent). T-12 prints no departure-taper spacing column, so the federal value applies: MUTCD 11th Ed 6B.08 Guidance, downstream taper devices spaced about 20 ft apart.",
    "departure_spacing": "Defers. T-12's 'CHANNELIZING DEVICE SPACING' columns (taper 30\u219230 \u2026 65\u219265; tangent 30\u219260 \u2026 65\u2192130) restate federal \u00a76K.01 para 04 (\u22641\u00d7S taper, \u22642\u00d7S tangent). T-12 prints no departure-taper spacing column, so the federal value applies: MUTCD 11th Ed 6B.08 Guidance, downstream taper devices spaced about 20 ft apart.",
    "buffer_tangent_spacing": "Defers. T-12's 'CHANNELIZING DEVICE SPACING' columns (taper 30\u219230 \u2026 65\u219265; tangent 30\u219260 \u2026 65\u2192130) restate federal \u00a76K.01 para 04 (\u22641\u00d7S taper, \u22642\u00d7S tangent). T-12 prints no departure-taper spacing column, so the federal value applies: MUTCD 11th Ed 6B.08 Guidance, downstream taper devices spaced about 20 ft apart."
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "TA-30 / TA-30R, unverifiable: VTrans publishes no interior or single lane-closure sheet for multi-lane streets. T-21 rev 1 (three-lane) is the only multi-lane undivided sheet (W20-1, W20-5, W4-2 both sides, W1-4, G20-2 each end, arrow panel drawn near the merging taper (Note 4), L/2 buffer, 100-ft / 5-device downstream taper). Federal values are kept until someone rules that T-21 governs.",
    "G20-1 'ROAD WORK NEXT XX MILES' SHALL be installed in advance of any TTC zone more than two miles long, distances to the nearest whole mile (T-10 Note 2; T-12 Note 7). The >2-mile trigger is federal (\u00a76H.35 para 01, Guidance); Vermont's delta is the should\u2192shall upgrade. No template emits G20-1, so a Vermont job with --zone-length above 10,560 ft is short one G20-1 panel per approach.",
    "Temporary barrier flare rate, a genuine Vermont numeric ladder with no federal analog: rigid barrier 1:8 at 30 mph flattening to 1:20 at 65 mph, semi-rigid 1:7 to 1:15 (T-12 taper table; T-13). The engine carries no barrier geometry and no barrier line item, so a Vermont TA-33 job behind temporary barrier is missing both the flare length and the barrier count.",
    "Temporary speed program: work-zone speed zones SHOULD be a maximum of 10 mph below the existing posted speed and need a temporary speed limit certificate approved by the Chief Engineer, 3 weeks processing (\u00a7641.07). The gated signing is not emitted: R2-1 SPEED LIMIT XX with the G20-5aP WORK ZONE plaque above (T-11 Note 5), W3-5 SPEED REDUCTION WARNING (T-11 Note 4), and VR-355 'FINE DOUBLED FOR SPEEDING IN WORK ZONE', a Vermont-original regulatory sign (T-11 Note 3). On a certificated job the sign count runs short by up to 3 panels plus a plaque per approach, and existing speed-limit signs must be covered (T-11 Note 6) \u2014 also not a line item.",
    "Sign size: Vermont diamond-shaped construction signs SHALL be 48 in x 48 in (T-1 Note 3), against the 36x36 conventional minimum. The BOM counts panels, never sizes, so every Vermont warning-sign row is priced at an unstated size and the real panel cost is higher.",
    "Cone spec: \u00a7641.05 sets a 28-in minimum height for ALL conditions, stricter than the federal 18-in daytime/low-speed floor in \u00a76K.03 para 01, plus Type III sheeting and a weighted-or-nailed ballast rule (sliced tires only). The engine has a single flat cone class with no height or sheeting attribute, so a low-speed Vermont job is priced at a cone the state does not allow.",
    "T-12 Note 5 \u2014 'PLACE LAST CHANNELIZING DEVICE 100 FEET BEYOND THE ANTICIPATED WORK ZONE TERMINAL POINT EACH DAY' \u2014 is an imperative on Vermont's operative divided-highway sheet, but no Vermont document calls that run a taper. ta-33's departure_taper is therefore left OPTIONAL, as federal Fig 6P-33 draws it (panel A only). If a reviewer reads Note 5 as requiring devices past the terminal on every Vermont divided-highway closure, ta-33 is short about 3 devices at 55 mph (100 ft at the taper spacing, since Vermont publishes no departure-spacing column). Not encoded as required_segments because that would be an interpretation, not a quoted rule.",
    "Spare devices: when PCMS or PAB pay items are in the contract, one spare unit stays on site: a PCMS, or a PAB if no PCMS is used (\u00a7641.05). On a TA-33 with no PCMS that is one spare arrow board, not modelled. A non-operational unit falls back to flaggers until repaired within 24 hours, and PCMS/PAB rental is measured at a 5-day minimum (\u00a7641.08). PCMS is capped at 2 phases x 3 lines x 8 characters and the arrow board must be Type C; neither is a BOM attribute.",
    "Personnel, all Vermont-only and all outside the BOM's device classes: flaggers need a 4-hour instructor-certified course within the last 24 months with proof on site (\u00a7630.04); the Uniformed Traffic Officer must be a sworn officer with a marked LE vehicle that may not park inside the MUTCD buffer or within 25 ft of a railroad centerline (\u00a7630.03); every traffic-control person carries a working two-way radio (\u00a7630.02(b)-(c)); night apparel is ANSI/ISEA 107 Class 3 including Class E pants (\u00a7630.02(b)-(c)). These drive the labour line, which this estimator does not produce.",
    "Operational programs the engine cannot express: temporary signals need AASHTO 80-mph wind load and solar+battery with 20 days autonomy, concrete bases not required (\u00a7641.04); night work needs a written request 21 calendar days ahead plus a foot-candle lighting plan (\u00a7641.03); only one ramp at a time may be closed inside an interchange (\u00a7641.02); and all devices come off the traveled way during non-working hours (\u00a7641.02; signs covered per T-1 Note 2), which turns a multi-day Vermont job into repeated setup/teardown the --days input does not price.",
    "Shoulder width stays at the federal 8-ft assumption. T-12 prints its shoulder-taper column at a 10-ft offset, but Note 10 makes that a table assumption, not a statement that Vermont shoulders are 10 ft \u2014 it is a site fact, so it is left to --shoulder-width rather than baked into the overlay.",
    "Vermont's road-type taxonomy is wider than the four federal Table 6B-1 rows: T-11/T-12/T-13 divided-highway closures, T-21 three-lane, T-20 expressway and freeway termination. The engine keys A/B/C on the four federal rows only, so a Vermont three-lane or termination job is answered from the nearest federal row.",
    "Sign mounting and structure: post bottom >= 5 ft (7 ft urban) above the edge of pavement, lateral offsets of 6/4/2 ft, NCHRP 350 or MASH crashworthy stands, two 3 lb/ft flanged channel posts or 2-in square steel in anchors, roll-up sheeting >= Type VI fluorescent orange and post-mounted >= Type VII/VIII/IX (\u00a7641.05; T-1 Notes 6-12). Stands, posts and sheeting are not BOM classes, so the hardware behind every Vermont sign panel is unpriced.",
    "T-10 intersecting-highway signing: Vermont's approach-signing sheet requires advance signs at each end of the zone AND on all intersecting public highways (T-10 Notes 1-3). The engine reports side-street W20-1s as variance.side_street_signs (+0..2, reported not added) and ta-33's not_derivable list keeps them out of the line items, so on a Vermont job every intersecting public highway inside the zone is one W20-1 short of the published requirement.",
    "T-35 longitudinal drop-off treatment: Vermont publishes a drop-off standard keyed to location (adjacent to the traveled way / between adjacent lanes / beyond shoulder or curb) with Type 1 / Type 2 treatments, W8-11 UNEVEN LANES signs, and channelizing devices whenever the drop-off is left overnight (T-35). Federal \u00a76 is qualitative here. The estimator has no drop-off input and no W8-11 row, so a Vermont paving or milling job carrying an overnight edge drop-off is short the W8-11 panels and the delineation devices that go with them.",
    "T-12's shoulder column prints 60 ft at 30 mph where 1/3 L at a 10-ft offset gives 50. The engine has no shoulder-taper cell override and returns 50, so a 30 mph Vermont TA-33 with a 10-ft shoulder runs 10 ft short on the shoulder taper (0-1 device)."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "washington",
   "name": "Washington",
   "group": "state",
   "source": "WSDOT / WAC 468-95 (WSR 25-20-055, filed 9/26/25, eff. 10/27/25) + WAC 296-155-305 (L&I flagging) + WSDOT Plan Sheet Library TC-series typicals (TC320/TC420 4/2/2024, TC361/TC371 9/24/2024, TC107 10/31/2025 PRELIMINARY) + Design Manual M 22-01.23 Ch.1010 (Sept 2024) + Flagging Operations Manual M 3146 v1.2 (Jan 2026) + Traffic Manual M 51-02.11 Ch.5.",
   "citation_edition": "MUTCD 11th Ed (Dec 2023), adopted by WAC 468-95-010 and amended by WAC 468-95-300 to -310 (WSR 25-20-055, eff. 10/27/25). The WAC cites 11th-Ed numbering (Table 6B-1, 6K.01, 6D.05/.06, 6F.02, 6H.27/.34, 6J.02, Fig 6H-1). Tables 6B-2, 6B-3 and 6B-4 are unamended federal. No table renaming needed.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 27.8,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 60,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 40.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 40.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 62,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 54.4,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 45,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 71.1,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 47,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 120.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 62,
     "road_type": "rural"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 133.3,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 50,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 680.0,
     "L_half_ft": 340.0,
     "L_shoulder_ft": 146.7,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 53,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 160.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      800,
      800,
      800
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 55,
     "road_type": "rural"
    },
    {
     "speed_mph": 65,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 173.3,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      800,
      800,
      800
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 59,
     "road_type": "rural"
    }
   ],
   "sources_at_55": {
    "L": "WSDOT TC361 sht 1 / TC371 sht 1A (9/24/2024) and TC107 sht 1A (10/31/2025) 'Lane closure taper length = L' at 12-ft lanes (printed cell governs)",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "MUTCD 6B.08: shoulder taper = 1/3 L at the shoulder width",
    "buffer": "MUTCD Table 6B-2 (Option, MUTCD 6B.06 para 09-11 (11th-Ed numbering; WA adopts it unamended))",
    "sign_spacing": "WAC 468-95-300 (amends MUTCD Table 6B-1, Guidance/Recommended). Washington replaces the federal A/B/C ladder with one recommended spacing per band, so A = B = C is what the state publishes. Bands: Freeways & Expressways 1000' +/-; Highways/Roads/Streets 60-70 mph 800' +/-; 45-55 mph 500' +/-; 35-40 mph 350' +/-; 20-30 mph 200' +/- (100' +/- on urban streets <=25 mph). row 'WAC 468-95-300, 45-55\u2026",
    "taper_spacing": "WAC 468-95-301 (amends 6K.01 para 04, Guidance 'should not exceed'): taper <= min(S, 40), tangent <= min(2S, 80). WSDOT typicals print tighter maxima: TC361/TC371 sht 1A 50-65(70) mph = 40/80, 45 mph = 30/60; TC107 sht 1A freeway 45-75 = 40/80; TC320 45 mph tangent 60; TC420 sht 1 35-40 mph tangent 60, 20-30 mph tangent 40. Values at 40 mph and below come from the TC420 flagger plan; the taper\u2026",
    "tangent_spacing": "WAC 468-95-301 (amends 6K.01 para 04, Guidance 'should not exceed'): taper <= min(S, 40), tangent <= min(2S, 80). WSDOT typicals print tighter maxima: TC361/TC371 sht 1A 50-65(70) mph = 40/80, 45 mph = 30/60; TC107 sht 1A freeway 45-75 = 40/80; TC320 45 mph tangent 60; TC420 sht 1 35-40 mph tangent 60, 20-30 mph tangent 40. Values at 40 mph and below come from the TC420 flagger plan; the taper\u2026",
    "departure_spacing": "WAC 468-95-301 (amends 6K.01 para 04, Guidance 'should not exceed'): taper <= min(S, 40), tangent <= min(2S, 80). WSDOT typicals print tighter maxima: TC361/TC371 sht 1A 50-65(70) mph = 40/80, 45 mph = 30/60; TC107 sht 1A freeway 45-75 = 40/80; TC320 45 mph tangent 60; TC420 sht 1 35-40 mph tangent 60, 20-30 mph tangent 40. Values at 40 mph and below come from the TC420 flagger plan; the taper\u2026",
    "buffer_tangent_spacing": "WAC 468-95-301 (amends 6K.01 para 04, Guidance 'should not exceed'): taper <= min(S, 40), tangent <= min(2S, 80). WSDOT typicals print tighter maxima: TC361/TC371 sht 1A 50-65(70) mph = 40/80, 45 mph = 30/60; TC107 sht 1A freeway 45-75 = 40/80; TC320 45 mph tangent 60; TC420 sht 1 35-40 mph tangent 60, 20-30 mph tangent 40. Values at 40 mph and below come from the TC420 flagger plan; the taper\u2026"
   },
   "device_gates": [
    {
     "when": {
      "min_speed": 45,
      "tas": [
       "ta-30",
       "ta-30r",
       "ta-33"
      ]
     },
     "device": "drum",
     "modality": "guidance",
     "source": "DM M 22-01.23 1010.07(1) (drums recommended on tangents, required on lane-closure tapers; TC361/TC371/TC107 draw drums throughout)"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "Lateral buffer: WSDOT Design Manual M 22-01 Ch.1010.06(2) provides a 2-FOOT LATERAL BUFFER between the open travel lane and the work space / device line on multilane roadways >=45 mph (optional at <=40 mph). This engine models longitudinal geometry only and carries no lateral offset, so nothing changes in the count. What it would change: the device line sits 2 ft further into the closed lane, which narrows the usable work space by 2 ft and can push a marginal closure from one lane to a lane-plus-shoulder.",
    "WAC 468-95-301's 120-ft working-hours ingress/egress gap is not applied. The engine carries a single tangent spacing, so a live construction entrance inside the work zone is priced at the 80-ft cap. Each entrance the crew actually opens to 120 ft removes roughly 1 device per 240 ft of run.",
    "WAC 468-95-302 (adds a Standard to 6D.06): a single flagger SHALL NOT flag from the center of an intersection unless separate flaggers control each approach; a law-enforcement officer is exempt. This is a labor constraint, not a materials one. TA-10 stays at flaggers=2; a Washington job with an intersection in the zone may need one flagger per approach, which the BOM's flagger count will understate.",
    "WAC 468-95-3015 (adds a Standard to 6D.05): flagger directions at a signalized intersection shall not conflict with the signal, and the signal must be shut down or put in all-red flash. This is a plan note and a signal-tech line item. Neither is a BOM class here.",
    "Work-zone speed-limit reduction: WSDOT Traffic Manual M 51-02 Ch.5 sections 5-18/5-19 (RCW 47.48.010/.020) makes a 10 mph reduction (15 mph option) standard practice on roadways >=45 mph, with State Traffic Engineer approval. It is approval-gated, so it is NOT auto-applied. If it is approved, every speed-driven number in the estimate moves: L, the Table 6B-2 buffer, and both device spacings are computed at the reduced limit. Re-run with the reduced speed to see that job.",
    "WAC 468-95-304: signs on portable supports below Part 2 mounting heights should not be used for more than 7 days (R9-8..R9-11a, R11 series, W1-6..W1-8, M4-10 and E5-1 excepted). The estimator takes a `days` input but has no sign-support class, so an 8-day Washington job is priced with portable stands when it needs post-mounted signs.",
    "WAC 468-95-310: temporary pavement markings should remain until permanent markings are practical to install. Markings are not a BOM class here.",
    "Washington publishes no minimum device count per taper - no equivalent of PennDOT Pub 213's master chart - so min_devices_in_taper is null and a short taper gets whatever the spacing produces, with no floor.",
    "Numeric drivers (L rounding, spacing, departure spacing, device class, TA-33 and TA-30R shoulder taper, TA-30 / TA-30R / TA-33 attenuator) come from WSDOT TC371/TC361/TC107/TC320/TC420 and DM 1010. The component list is still the federal figure. TA-33's departure taper stays optional: TC371 note 6 labels it '(OPTIONAL)'. Below 45 mph the TA-33 / TA-30R shoulder taper stays optional (the TC sheets are 45+ mph).",
    "City and county overlays (Seattle SDOT, Redmond) are not modelled; a Seattle job is answered at state level.",
    "TC320 (45+ flagging): a protective vehicle is drawn ahead of the work area; it becomes a transportable attenuator if the buffer is shortened (priced as an optional TMA at 45+ mph). The PV itself is not a BOM class.",
    "--include-optional does not double the TA-33 or TA-30 attenuator (require_devices promotes the template row). The TA-30R TMA is an add: the template has none.",
    "TA-33 divided-highway duplication stays at the federal template's both-shoulder posting. TC371 draws right-side signs only, but Std Spec M 41-10 2-04.3(5)C assumes signs on both shoulders for freeways and multilane 45+; the sources conflict.",
    "TA-30: no WSDOT typical for the interior-lane geometry was found in the TC-300 listing (only TC361 right-lane multilane and TC371 divided). The federal template is priced with Washington numbers and the DM 1010.08(3) attenuator at 45+ mph; the TC361/TC371 mPCMS is not carried to TA-30.",
    "Shoulder width default 8 ft is an estimator assumption. WSDOT L/3 tables key on <6, 6 and 10-ft shoulders (TC371 sht 1A) and DM 1010.04(5)(b) uses 8 ft only as a threshold; no WA default shoulder width could be verified.",
    "WAC 468-95-305/-306 (RCW 47.36.200): MOTORCYCLES USE EXTREME CAUTION sign W21-1701 and plaque W21-1701P (replaces W8-15P). May mount below W8-7, W8-15, W21-801, W8-16 or W8-24 when the warning is aimed at motorcyclists. It depends on the surface condition, which is not an estimator input, so it is not priced."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "west-virginia",
   "name": "West Virginia",
   "group": "state",
   "source": "WVDOH \"Manual on Temporary Traffic Control for Streets and Highways,\" March 2006 Edition, adopted by Commissioner's Order entered March 9, 2006 under W.Va. Code \u00a717C-3-1 as \"the official Manual of the West Virginia Department of Transportation, Division of Highways\" (it superseded the 1994 WV manual); plus WVDOH Standard Specifications Roads and Bridges, 2023 Edition (12-16-22), \u00a7636 Maintaining Traffic. West Virginia does NOT use federal MUTCD Part 6 for work zones: \u00a7636.3 of the 2023 Specifications, verbatim, \"All traffic control devices shall be fabricated and installed according to the manual, \u201cManual on Temporary Traffic Control for Streets and Highways\u201d, latest version, published by the Division. The type of construction operation being performed will dictate the traffic control case (scheme) to be used as outlined in this manual\", and \u00a7636.9 repeats it for device installation (\"in accordance with standards detailed in the manual ... latest version, published by the Division\"). ADOPTION INSTRUMENT: 157CSR5 \u00a72.2 (eff. 2021-07-20) adopts the TTC Manual 2006 by name to supersede MUTCD Part VI; \u00a72.1 adopts the MUTCD 2009 Ed (apps.sos.wv.gov DocId=56947). The rule pins the 2006 edition, so \u00a7636.3's 'latest version' wording does not float. Manual PDF: https://webapps.transportation.wv.gov/TWS/WVDOTDocumentStorageMigration/PDF/Transportation/highways/traffic/Documents/TemporaryTrafficControlManual2006.pdf ; Specifications PDF: https://webapps.transportation.wv.gov/TWS/WVDOTDocumentStorageMigration/PDF/Transportation/highways/TechnicalSupport/specifications/Documents/2023_Standard_(12-16-22).pdf . Written 2026-09-15 from the research packet.",
   "citation_edition": "West Virginia's own \"Manual on Temporary Traffic Control for Streets and Highways,\" March 2006 Edition (WVDOH), NOT the national MUTCD. The manual's structure mirrors the 2003 National MUTCD Part 6, so its table numbering is NEITHER 10th Edition (6C-1 / 6C-4) NOR 11th Edition (6B-1 / 6B-4). A WV plan reviewer reads WV table and Case names. Mapping the reviewer needs, engine name -> what to cite in West Virginia: Table 6B-1 advance sign spacing -> WV Table C-1 \"Suggested Advance Warning Sign Spacing\" (\u00a7C.04, manual p.12); Table 6B-2 longitudinal buffer / stopping sight distance -> WV Table C-2 \"Stopping Sight Distance as a Function of Speed\" (manual p.16); Table 6B-4 taper length L -> WV Tables C-3 and C-4 (\u00a7C.08 Tapers, manual p.17); 6K.01 / 6B.06 channelizing-device spacing -> WV \u00a7F.58 Channelizing Devices (manual p.77) and Standard Specification \u00a7636.13; the federal TA figure atlas -> WV's own \"Case\" sheets, Case A1-A18 (PDF pp.142-159), B-, C- and D-series sheets (pp.160-181; spot-verified B3 p.163, B6 p.170, C1 p.172, C3 p.174, D5 p.181 - these are numbered series, not single sheets), E1-E17 (pp.182-198) and F1-F8 (pp.199-206). The federal TA numbers this engine keys on map to WV Cases only approximately: TA-33 (stationary lane closure on a divided highway) is WV Case E4 (multilane, divided, day or night, SINGLE lane closure - stationary, PDF p.185), with Case E5 the double-lane-closure companion; TA-10 (lane closure on a two-lane road using flaggers) is closest to WV Case A6 (two-lane two-way, short-term, daytime, PDF p.147). No WVDOH adoption of the MUTCD 11th Edition (2023) for temporary traffic control was found.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 116.7,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 63,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 116.7,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 55,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 116.7,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 350.0,
     "L_half_ft": 175.0,
     "L_shoulder_ft": 116.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 46,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 550.0,
     "L_half_ft": 275.0,
     "L_shoulder_ft": 183.3,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 48,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 46,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 48,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 725.0,
     "L_half_ft": 362.5,
     "L_shoulder_ft": 241.7,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 52,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 800.0,
     "L_half_ft": 400.0,
     "L_shoulder_ft": 266.7,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1500,
      2640
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 20.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 53,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "WV Case E3 (PDF p.184) dimensions the shoulder taper '1/3 L', where GN1 defines L by the 12-ft closure table; Table C-3 'at least 0.33L' (Guidance). Case E4 (PDF p.185) draws the same shoulder taper ahead of the merge.",
    "buffer": "WVDOH TTC Manual 2006 Table C-2, Stopping Sight Distance as a Function of Speed (manual p.16 / PDF p.25) (Option (may) - \u00a7C.06 Activity Area, manual p.13 / PDF p.22 (\u00a7C.06 runs manual pp.13-14; the table of contents lists C.06 at p.13). The buffer is not mandatory in West Virginia. Under an \"Option:\" heading, verbatim: \"Buffer spaces may be positioned either longitudinally or laterally with\u2026",
    "sign_spacing": "WV Table C-1 row 'rural'",
    "taper_spacing": "WV Case E4 (PDF p.185) dimensions the TA-33 taper '50' CTRS.'; \u00a7F.58: spacing shown on a Case governs over the 1.0 x S rule. 1.0 x S is kept below 50 mph, where it is tighter.",
    "tangent_spacing": "WV Case E4 (PDF p.185) dimensions the TA-33 taper '50' CTRS.'; \u00a7F.58: spacing shown on a Case governs over the 1.0 x S rule. 1.0 x S is kept below 50 mph, where it is tighter.",
    "departure_spacing": "WV Case E4 (PDF p.185) dimensions the TA-33 taper '50' CTRS.'; \u00a7F.58: spacing shown on a Case governs over the 1.0 x S rule. 1.0 x S is kept below 50 mph, where it is tighter.",
    "buffer_tangent_spacing": "WV Case E4 (PDF p.185) dimensions the TA-33 taper '50' CTRS.'; \u00a7F.58: spacing shown on a Case governs over the 1.0 x S rule. 1.0 x S is kept below 50 mph, where it is tighter."
   },
   "device_gates": [
    {
     "when": {
      "night": true
     },
     "device": "drum",
     "modality": "shall (plan note)",
     "source": "WVDOH TTC Manual 2006 Case E4 General Note 2 (PDF p.185: \"OVERNIGHT OPERATIONS ILLUSTRATED, FOR DAYLIGHT OPERATIONS, MAY USE CONES INSTEAD OF DRUMS.\")"
    },
    {
     "when": {
      "gt_hours": 24
     },
     "device": "drum",
     "modality": "shall (plan note)",
     "source": "WVDOH TTC Manual 2006 Case E2 General Note 2 (PDF p.183: \"FOR DAYLIGHT OPERATIONS ONLY USE CONES OR DRUMS AS DIRECTED BY THE ENGINEER (MORE THAN 24 HOURS USE DRUMS).\")"
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-33"
   ],
   "not_modelled": [
    "The Case E-series 45/60/65 mph taper minimums are keyed on a 12-ft offset with no divided or road-type gate. An undivided 12-ft job at 45, 60 or 65 mph therefore picks up the multilane minimum - 550 for 540, 725 for 720, 800 for 780. At most one extra device per taper, in the conservative direction. The 50 and 55 mph cells are not encoded, so no West Virginia taper is driven below Table C-4.",
    "TA-33 taper spacing is set to Case E4's '50' CTRS.' (1.0 x S below 50 mph). Case E2 'CONES AT 25' CENTERS' and Case A6's 25-50 ft taper centres are not applied: the TA-10 tapers keep the federal fixed counts.",
    "The Case E4 / E5 row \"40 OR LESS - 350\" is applied to TA-33 only. Other TAs at 40 mph or less run on WV's Table C-4 formula (L = W*S^2/60), because the 350-ft row is a multilane divided minimum. The flat 350 ft does not scale with lane width: a 14-ft lane at 40 mph gives 373 ft under Table C-4, so the flat value understates it.",
    "Standard Specification \u00a7636.13 caps Channelizer Cones at 25 ft in ALL lane or shoulder tapers, day or night, and at 40 ft where 50 ft is otherwise called for at night: \"If specified in the project plans, Channelizer Cones may be utilized for channelization of traffic in lieu of drums. Note, when used for closures that will be in effect at night, these devices shall be spaced at a maximum of forty (40) feet where a spacing of fifty (50) feet is normally called for in the Traffic Control Manual. In addition, the maximum spacing of these devices in all lane or shoulder tapers, day or night, shall be twenty-five (25) feet.\" This is NOT applied as a cone cap here, because \u00a7636.13 is a contract specification binding WVDOH contract work and not necessarily utility or municipal work, and which population this tool serves is an open question. On a WVDOH contract job substituting channelizer cones for drums, every taper count in this estimate is roughly half what WV requires.",
    "TA-33 work area: Case E4's first 500 ft at 50-ft centres is modelled (work_zone_first_500). The rest is at the tangent rule (100 ft above 50 mph). GN11 (shall) asks 50 ft wherever work is actually underway; a job with work along the whole zone needs about twice the devices on the remainder.",
    "West Virginia publishes no minimum device count in a taper anywhere - not in \u00a7C.08 Tapers, not in \u00a7F.58 Channelizing Devices, and not on any Case A/B/C/D/E/F sheet. min_devices_in_taper is null, so no floor is applied and no floor is invented. A WV taper count here is purely taper length divided by spacing.",
    "\u00a7F.58 requires devices to be extended past the transition where they could mislead traffic: \"When channelizing devices have the potential of leading vehicular traffic out of the intended vehicular traffic space, the channelizing devices should be extended a distance in feet of 2.0 times the speed limit mph beyond the end of the transition area.\" That is an extra run of up to 2S ft at tangent spacing, conditional on geometry the estimator cannot see, and no devices are added for it.",
    "Cases E4 and E5 draw no downstream taper; the last device ends the work area and 500 ft of clear road runs to END ROAD WORK. The TA-33 departure taper is optional here and is priced only under --include-optional (WV Table C-3: 100 ft at 20 ft, 6 devices), which then adds devices E4 does not draw. 100 ft is per lane; the engine holds one downstream_taper_ft, so a multi-lane departure is under-counted.",
    "The component lists behind every West Virginia estimate are federal MUTCD TA figures. TA-33 and TA-10 are amended by Case E4 and Case A6 (governing_sheets). TA-30 and TA-30R have no direct WV Case and run on the federal figure with WV numeric drivers. The WV Case sheets have not been transcribed as component lists.",
    "Rule pins the 2006 edition (157CSR5 \u00a72.2, eff. 2021-07-20); \u00a72.1 adopts MUTCD 2009 Ed; no 11th Ed adoption found. Re-check 157CSR5 for amendment.",
    "WVDOH Standard Details Book Volume II (January 2019) covers signing, signals, lighting, markings and ITS and contains NO temporary traffic control sheets, and the 'Revised Standard Details Volume 3' index page did not resolve on the rebuilt site. It has not been confirmed that the Case sheets inside the TTC manual really are West Virginia's only TTC standard drawings.",
    "The 'Maintenance Work Zone Safety - Pocket Guide of MUTCD Guidance on Temporary Traffic Control' (October 2008) hosted on the WVDOH training site restates generic national MUTCD tables, not West Virginia values, and its buffer and taper tables differ in presentation from WV Tables C-2, C-3 and C-4. Nothing in this overlay is taken from it; it is named here only because it is WVDOH-hosted and could be mistaken for a West Virginia authority.",
    "WV Case E4 GN3 (PDF p.185; E6 GN2 p.187): if equipment encroaches on the open lane, add 1 flagger + 1 W20-7 at 500 ft. Conditional; not priced.",
    "TA-30 / TA-30R have no direct WV Case. E4 GN5 (undivided, lane next to the centerline: omit median signs, sign the opposite direction per Case A4) is the nearest; E6 covers freeway interior lanes. If E4 applies, the 4-sign chain and required END ROAD WORK carry over (+1 W20-5 and +1 G20-2 per approach). Federal figures used.",
    "Default shoulder width 8 ft is not a WV value (\u00a7C.08 p.18 publishes none). Moot for the shoulder taper, which now reads 1/3 of the 12-ft L.",
    "TA-10 work area is priced at 50-ft centres over the whole zone (Case A6). A6 caps work at 1,000 ft (taper + work area); a longer zone is outside A6 and needs an approved TCP.",
    "Drum gates come from the multilane Case E sheets (E4 GN2, E2 GN2). They also apply to TA-10. Case A6 is daytime only, so a night TA-10 is outside A6 and is priced at drums as the conservative unit."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "wisconsin",
   "name": "Wisconsin",
   "group": "state",
   "source": "WMUTCD 2023 (FHWA MUTCD 11th Ed + WisDOT blue supplements) with the two enumerated delta documents wmutcd-edits.pdf and wmutcd-stds-deviations.pdf; WisDOT Standard Spec 643; Wis. Stat. 340.01(22e). WisDOT's own numeric layer: Work Zone Field Manual (WZFM) 2026 (PDF 2026-01-30; Fig 9 distance charts p.33), SDD 15D12 v17 (May 2026), SDD 15D20 v12 (May 2026), TEOPS 6-1 (Dec 2025).",
   "citation_edition": "MUTCD 11th Ed (Dec 2023). WMUTCD 2023 republishes federal Part 6 verbatim in black type and carries every WisDOT supplement in blue; both delta documents already use 11th-Ed numbering (6C / 6D / 6E / 6F / 6H / 6J / 6K + TA##). No 10th-to-11th-Ed numbering translation is needed, so the engine's own table names are what a WisDOT reviewer reads: Table 6B-1, Table 6B-2, Table 6B-4 and Fig 6P-xx.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 45.0,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 64,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      200,
      200,
      200
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 67,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 85.0,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 72,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 110.0,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 77,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 90,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 46,
     "road_type": "freeway"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 48,
     "road_type": "freeway"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 50,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      1000,
      1600,
      2600
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 50.0,
     "device_class": "drum",
     "ta33_line_devices_2000ft": 52,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "WZFM 2026 Fig 9 p.33 'Shoulder Taper (L/3) (12' lane)'",
    "buffer": "MUTCD Table 6B-2 (Option, MUTCD 6B.06 para 11; WMUTCD republishes it unamended.)",
    "sign_spacing": "MUTCD Table 6B-1 row 'freeway'; wisconsin override (B 1500->1600, C 2640->2600) per WZFM 2026 Fig 9 p.33 'Multi-Lane Divided 50 mph and Greater'; SDD 15D12-17a v17 (2600'/1600'/1000' gaps); WZFM 6-9 DH72HSLC p.101",
    "taper_spacing": "WMUTCD 2023 6K.01 (Standard): drums <=50 ft taper / <=100 ft tangent at >=50 mph; <=25 / <=50 ft at 25-45 mph; 1xS / 2xS at <=20 mph. wmutcd-edits.pdf p.62 rationale: these 'govern on all projects in the state ... absolute maximum conditions for use in Wisconsin'. Drums shall be used in tapers on the state highway system. Any other channelizing device is spaced at half the drum maximum (applied\u2026",
    "tangent_spacing": "WMUTCD 2023 6K.01 (Standard): drums <=50 ft taper / <=100 ft tangent at >=50 mph; <=25 / <=50 ft at 25-45 mph; 1xS / 2xS at <=20 mph. wmutcd-edits.pdf p.62 rationale: these 'govern on all projects in the state ... absolute maximum conditions for use in Wisconsin'. Drums shall be used in tapers on the state highway system. Any other channelizing device is spaced at half the drum maximum (applied\u2026",
    "departure_spacing": "WMUTCD 2023 6K.01 (Standard): drums <=50 ft taper / <=100 ft tangent at >=50 mph; <=25 / <=50 ft at 25-45 mph; 1xS / 2xS at <=20 mph. wmutcd-edits.pdf p.62 rationale: these 'govern on all projects in the state ... absolute maximum conditions for use in Wisconsin'. Drums shall be used in tapers on the state highway system. Any other channelizing device is spaced at half the drum maximum (applied\u2026",
    "buffer_tangent_spacing": "WMUTCD 2023 6K.01 (Standard): drums <=50 ft taper / <=100 ft tangent at >=50 mph; <=25 / <=50 ft at 25-45 mph; 1xS / 2xS at <=20 mph. wmutcd-edits.pdf p.62 rationale: these 'govern on all projects in the state ... absolute maximum conditions for use in Wisconsin'. Drums shall be used in tapers on the state highway system. Any other channelizing device is spaced at half the drum maximum (applied\u2026"
   },
   "device_gates": [],
   "ta_overrides": [
    "ta-10",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "WMUTCD 6K.01 half-spacing rule for substitute devices is applied through device_spacing.by_class when the job class is cone, tubular marker, vertical panel or 42-in channelizer. A mixed layout (drums in the tapers, another device in the tangent) is not priced: run the tangent device class by hand.",
    "Facility class is not an input. WMUTCD 6K.01 makes drums in tapers a shall on the state highway system, and WZFM 2026 p.17 says 'For lane and shoulder closures on all highways, only use drums in the tapers.' The 28-in cone height floor is a state highway system / Interstate rule (WMUTCD 6K.03 para 01). The drum spacing bands apply on every road (6K.01). The default class here is drum.",
    "Statutory END ROAD WORK: encoded. WMUTCD 6H.36 (Standard) and Wis. Stat. 340.01(22e) require G20-2 (WI plate G20-2A) at the end of every stationary area. ta-10 / ta-30r / ta-33 promote the template G20-2 row with require_signs and code_map it to G20-2A; ta-30 has no G20-2 row, so two G20-2A are added. Not encoded: the exemption inside a larger work zone that already carries it (SDD 15D20 v12; WZFM 3-3 note 4).",
    "TA-11 / one-lane two-way YIELD elimination. 'WisDOT eliminates the use of the yield control in these situations'; if STOP signs are used both directions shall be stopped, and on low-volume State Trunk / Connecting / through highways STOP signs shall be used where the far end is visible. Otherwise flaggers, AFADs or a temporary signal per engineering judgment. This is a control-mode rule the estimator has no field for, and no template emits the R1-1 STOP pair a devices-only Wisconsin STOP layout requires. ta-11 under this file returns the federal YIELD-figure bill, which is not a legal Wisconsin layout.",
    "Cone height and the 42-inch cone assembly. WMUTCD 6K.03 para 01 sets a 28-inch minimum cone height for state-highway / Interstate emergency TTC, and Std Spec 643.2.2 separately requires '42-inch cone assemblies' to be on the WisDOT Approved Products List - a procurement product class, not a height standard. This file takes 28 in as the height floor and treats 42-in cone assemblies as an APL product class. Neither is a count. WMUTCD 6K.03 para 04 also allows traffic cones to mark wet pavement markings (may), which adds a cone use case, not a cone count, and is not emitted here.",
    "TMA on encroachment: the WMUTCD edits make the TMA a shall on TA-4 (work vehicle encroaching, p.118), TA-17 (shadow vehicle, p.144), TA-35 (Shadow Vehicle 2, p.180) and mobile operations (6N.01 para 18, p.93). None applies to ta-33: the TA-33 edit (p.176) is the END ROAD WORK Support row only, and WZFM 6-8 / 6-9 draw no TMA. The ta-33 TMA stays optional. TMA roll-ahead distance defers to the attenuator manufacturer.",
    "Standard Spec 643 contractor cadence and device specs: restore damaged or disturbed devices within 2 hours of becoming aware [643.3 para 8]; maintain retro-reflectance of signs, drums, posts and barricades at not less than 50 percent of the minimum [643.3 para 6]; repair or re-message PCMS within 2 hours [643.3]; APL gating on drums, barricades, tubular markers, arrow boards, sign sheeting and 42-inch cone assemblies [643.2.2]; prismatic sheeting with new plywood bases and no tape or adhesive sign covers [643.2.3]; a 24-hour emergency-service contact label on every drum, barricade rail, arrow board, sign back, PCMS and cone, in non-reflective letters at least 3/4 in [643.2.1]; and review devices for adequacy and appropriateness immediately after each setup, replacing any device the ATSSA quality guide defines as unacceptable [643.3 para 5-7]. None is a BOM quantity, but the APL gate and the prismatic / label specs change the unit that must be ordered, and the 50 percent retro floor plus the 2-hour clock are replacement-rate drivers this estimator does not price.",
    "Wisconsin flagger regime. Flaggers on the state highway system shall be certified [WMUTCD 6D.01]; nighttime flagging requires ANSI/ISEA 107-2015 Class 3 apparel and Class E high-visibility pants shall be worn during all hours [6C.05 para 07]; the STOP/SLOW paddle shall be on a rigid handle at least 5 feet tall [6D.02 para 02]; flagger stations shall be illuminated with auxiliary lighting independent of roadway illumination [6D.06]; a pilot-car driver should also be a certified Wisconsin flagger [6E.04]. ta-10 returns a flagger COUNT of 2 and nothing else \u2014 no certification gate, no apparel line, no 5-ft paddle, no light plant.",
    "Speed band gap at 46-49 mph. WMUTCD 6K.01 publishes drum bands for >=50 mph and for 25-45 mph and nothing between. The expressions here put 46-49 mph in the 25-45 branch (25 ft taper / 50 ft tangent), the tighter and more conservative of the two readings. Posted speeds are multiples of 5 so this band is unreachable in practice, but a 47 mph 85th-percentile input would land there.",
    "Downstream tapers: 5-2 (all speeds), 5-3 (all speeds) and 6-8 (<=45) draw a 100 ft downstream taper; 6-9 / 15D12 (>=50) draw none. Required on ta-30r and ta-30; required on ta-33 at <=45 mph and optional above. No separate departure spacing is set, so downstream tapers take the Wisconsin drum TAPER band, not the federal ~20 ft. ta-10's two-way tapers are optional, 5 devices each if used (WZFM 3-10 note 4, 3-11 note 2).",
    "Temporary raised pavement marker substitution. Wisconsin tightens the SOLID-line values of 6J.03 para 04 from 12.5 ft to 10 ft for markers and from 25 ft to 20 ft for retroreflective or illuminated units; the broken-line rule of para 03 (groups of at least 3 at <=5 ft, every 40 ft) is the federal text restated. Pavement markers are not a device class in this estimator, so neither value is emitted.",
    "Divided-highway duplication: federal default (right + median) kept. Component lists are the federal figures amended by the WZFM layouts named in governing_sheets.",
    "Road-type keying: the federal speed-to-row mapping is carried (0-30 urban-low, 35-45 urban-high, 50-55 rural, 60-80 freeway), except on ta-33, where 50-80 maps to freeway so the WZFM Fig 9 divided >=50 chart (1000/1600/2600) applies, and on ta-10 / ta-30 / ta-30r, where 60-80 stays rural with the divided >=50 chart applied as a stand-in (the undivided and flagging charts stop at 55 mph). An undivided 50-55 mph road stays at A = 500 (SDD 15D20-12b).",
    "Divided-highway sign spacing on TA-30R / TA-30 run with --divided at 50-55 mph: the 1000/1600/2600 row is reached only through ta-33's road-type bands. Pass --road-type freeway on any other divided 50-55 mph job.",
    "SDD 15D20-12a/b/c note 1: G20-1 ROAD WORK NEXT X MILES (60x24), one per direction, only when the work area is over 2 miles (10,560 ft). Sign rows cannot gate on zone length, so it is not emitted: +1 per direction on zones over 10,560 ft.",
    "Reassurance drums with two closed lanes: 6 across every 1000 ft (WZFM 6-2 note 3), not 3. The estimator has no closed-lane count, so ta-33 always prices one lane. The 5 drums at 10 ft in front of the arrow board are 'as needed' (SDD 15D12-17a) and are not priced.",
    "WZFM 6-9 notes 1-4 / SDD 15D12: on 65-70 mph roads, if a 55 mph work-zone speed limit is implemented, add R2-1 assemblies (1500 ft past each entrance ramp, every 3 miles) plus a resume speed limit sign 200 ft minimum past END ROAD WORK. Conditional; not priced.",
    "Overnight warning lights (WZFM 2026 p.18, p.20; SDD 15D12 / 15D20) are priced only when --night is supplied. A daytime closure left in place overnight needs them too. The Type C count is taken from the taper lengths at the WI drum taper spacing, so it can differ by a device or two from the channelizing line where tapers share an end device."
   ],
   "onboarding_check": null
  },
  {
   "jurisdiction": "wyoming",
   "name": "Wyoming",
   "group": "state",
   "source": "WYDOT 'Traffic Control for Roadway Work Operations' (Nov 2011 work-ops field guide) + 2021 Std Spec \u00a7703 + Std Plans Division 700 (Feb 2026). Provisional: WYDOT has not confirmed an 11th-Ed adoption.",
   "citation_edition": "MUTCD 10th Ed (2009), adopted by WYDOT Transportation Commission resolution 'as modified by the preceding, and excepting those provisions in conflict with existing state requirements' (WYDOT MUTCD Adoption Statement; Sec. 1A.13 amended). There is no Wyoming MUTCD and no redrawn Part 6. Cite Figure 6H-x, sign spacing Table 6C-1, taper criteria/formula Table 6C-3 / 6C-4, longitudinal buffer / SSD Table 6C-2 (\u00a76C.06 \u00b611) \u2014 NEVER 6P-x / 6B-1 / 6B-2 / 6B-4, which are the engine's internal 11th Ed names and do not match what a WYDOT reviewer reads. Table 6E-1 is the identical-value flagger-station SSD table (\u00a76E.08) and is not the buffer source. Re-walk every citation on the 11th-Ed cutover. Printed template notes use the engine's 11th Ed names; the 2009 equivalents are 6P-n -> 6H-n, 6B-1 -> 6C-1.",
   "rows": [
    {
     "speed_mph": 25,
     "L_ft": 125.0,
     "L_half_ft": 62.5,
     "L_shoulder_ft": 41.7,
     "buffer_ft": 155.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 25.0,
     "tangent_spacing_ft": 50.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 49,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 30,
     "L_ft": 180.0,
     "L_half_ft": 90.0,
     "L_shoulder_ft": 60.0,
     "buffer_ft": 200.0,
     "sign_spacing_A_B_C_ft": [
      100,
      100,
      100
     ],
     "taper_spacing_ft": 30.0,
     "tangent_spacing_ft": 60.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 43,
     "road_type": "urban-low"
    },
    {
     "speed_mph": 35,
     "L_ft": 245.0,
     "L_half_ft": 122.5,
     "L_shoulder_ft": 81.7,
     "buffer_ft": 250.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 35.0,
     "tangent_spacing_ft": 70.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 41,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 40,
     "L_ft": 320.0,
     "L_half_ft": 160.0,
     "L_shoulder_ft": 106.7,
     "buffer_ft": 305.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 40.0,
     "tangent_spacing_ft": 80.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 38,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 45,
     "L_ft": 540.0,
     "L_half_ft": 270.0,
     "L_shoulder_ft": 180.0,
     "buffer_ft": 360.0,
     "sign_spacing_A_B_C_ft": [
      350,
      350,
      350
     ],
     "taper_spacing_ft": 45.0,
     "tangent_spacing_ft": 90.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 39,
     "road_type": "urban-high"
    },
    {
     "speed_mph": 50,
     "L_ft": 600.0,
     "L_half_ft": 300.0,
     "L_shoulder_ft": 200.0,
     "buffer_ft": 425.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 50.0,
     "tangent_spacing_ft": 100.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 37,
     "road_type": "rural"
    },
    {
     "speed_mph": 55,
     "L_ft": 660.0,
     "L_half_ft": 330.0,
     "L_shoulder_ft": 220.0,
     "buffer_ft": 495.0,
     "sign_spacing_A_B_C_ft": [
      500,
      500,
      500
     ],
     "taper_spacing_ft": 55.0,
     "tangent_spacing_ft": 110.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 36,
     "road_type": "rural"
    },
    {
     "speed_mph": 60,
     "L_ft": 720.0,
     "L_half_ft": 360.0,
     "L_shoulder_ft": 240.0,
     "buffer_ft": 570.0,
     "sign_spacing_A_B_C_ft": [
      750,
      1000,
      1000
     ],
     "taper_spacing_ft": 60.0,
     "tangent_spacing_ft": 120.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 35,
     "road_type": "freeway"
    },
    {
     "speed_mph": 65,
     "L_ft": 780.0,
     "L_half_ft": 390.0,
     "L_shoulder_ft": 260.0,
     "buffer_ft": 645.0,
     "sign_spacing_A_B_C_ft": [
      750,
      1000,
      1000
     ],
     "taper_spacing_ft": 65.0,
     "tangent_spacing_ft": 130.0,
     "departure_spacing_ft": 25.0,
     "device_class": "cone",
     "ta33_line_devices_2000ft": 33,
     "road_type": "freeway"
    }
   ],
   "sources_at_55": {
    "L": "MUTCD Table 6B-4",
    "L_half": "MUTCD 6B.08: shifting taper = L/2",
    "L_shoulder": "WYDOT work-ops (Nov 2011) Table 1 p.12 'Shoulder Taper 1/3 L Minimum', with W defined only as 'lane width in feet' (Taper Formula p.12); Table 2 p.12 prints the Shoulder Taper 1/3 L column at a 12-ft lane (45->180, 55->220, 70->280). No WYDOT source keys the shoulder taper to shoulder width. Std Plan 703-2H sht 2 (Feb 2026) draws a 200' MIN shoulder taper at 45 mph, above both bases.",
    "buffer": "WYDOT work-ops Table 2 p.12 (= MUTCD 2009 Table 6C-2) (REQUIRED at >=50 mph (work-ops p.15, shall-grade); Option below 50 mph (10th Ed \u00a76C.06 \u00b611))",
    "sign_spacing": "MUTCD 2009 Table 6C-1 / WYDOT work-ops Table 6 row 'rural'",
    "taper_spacing": "Both defer. Taper spacing 'equal to the speed limit used to determine the taper length' (60 mph -> 60 ft) and tangent spacing 'equal to two times the speed limit' (60 mph -> 120 ft), work-ops p.15-16 + Table 3 p.16; Std Plan 703-5E Spacing-on-Taper (20->20 ... 70->70) and Spacing-on-Tangent (20->40 ... 70->140) columns confirm both. The 2x tangent restates federal \u00a76F.63 \u00b608. Departure taper: 25\u2026",
    "tangent_spacing": "Both defer. Taper spacing 'equal to the speed limit used to determine the taper length' (60 mph -> 60 ft) and tangent spacing 'equal to two times the speed limit' (60 mph -> 120 ft), work-ops p.15-16 + Table 3 p.16; Std Plan 703-5E Spacing-on-Taper (20->20 ... 70->70) and Spacing-on-Tangent (20->40 ... 70->140) columns confirm both. The 2x tangent restates federal \u00a76F.63 \u00b608. Departure taper: 25\u2026",
    "departure_spacing": "Both defer. Taper spacing 'equal to the speed limit used to determine the taper length' (60 mph -> 60 ft) and tangent spacing 'equal to two times the speed limit' (60 mph -> 120 ft), work-ops p.15-16 + Table 3 p.16; Std Plan 703-5E Spacing-on-Taper (20->20 ... 70->70) and Spacing-on-Tangent (20->40 ... 70->140) columns confirm both. The 2x tangent restates federal \u00a76F.63 \u00b608. Departure taper: 25\u2026",
    "buffer_tangent_spacing": "Both defer. Taper spacing 'equal to the speed limit used to determine the taper length' (60 mph -> 60 ft) and tangent spacing 'equal to two times the speed limit' (60 mph -> 120 ft), work-ops p.15-16 + Table 3 p.16; Std Plan 703-5E Spacing-on-Taper (20->20 ... 70->70) and Spacing-on-Tangent (20->40 ... 70->140) columns confirm both. The 2x tangent restates federal \u00a76F.63 \u00b608. Departure taper: 25\u2026"
   },
   "device_gates": [
    {
     "when": {
      "night": true
     },
     "device": "cone_42",
     "source": "WYDOT work-ops p.10 (operations left in place overnight: >=42-in cones or >=36-in drums)"
    },
    {
     "when": {
      "min_hours": 24,
      "max_days": 1
     },
     "device": "cone_42",
     "source": "WYDOT work-ops p.10 (operations left in place overnight: >=42-in cones or >=36-in drums)",
     "note": "--days counts truck rolls, so a multi-day job is set up and removed each day. The gate reads --duration-hours on a single set-up."
    }
   ],
   "ta_overrides": [
    "ta-10",
    "ta-11",
    "ta-15",
    "ta-18",
    "ta-21",
    "ta-22",
    "ta-23",
    "ta-24",
    "ta-26",
    "ta-30",
    "ta-30r",
    "ta-33"
   ],
   "not_modelled": [
    "WY downstream taper: sources conflict. Work-ops Table 1 p.12 says 100 ft per lane minimum. Fig 8 p.33 draws 50-100 ft. Std Plans 703-2H sht 2 and 703-5E sht 2 draw a 100-ft max taper, optional. The engine carries 100 ft. A 2-lane closure (200 ft under Table 1) under-counts. The ta-33 departure taper stays optional unless --include-optional is passed.",
    "Minimum device count: WY publishes its own formula, devices = (taper length / device spacing) + 1 (work-ops p.15, Table 3 p.16), tabulated on Std Plan 703-5E as 20->5, 25->6, 30->7, 35->8, 40->9, 45-70->13. No floor is encoded because that column is a 12-FOOT-LANE table: at W=12 it is arithmetically identical to the engine's own count (12*S / S + 1 = 13), so it would change nothing, and at a narrower lane it would invent devices WYDOT never required (10-ft lane at 55 mph needs 11, the 12-ft column says 13). Pass W=12 and the published count is reproduced exactly.",
    "Speed ceiling (open SME question): WYDOT's taper+buffer ladder ends at 70 mph (Std Plan 703-5E) / 75 mph (work-ops Table 2), yet Wyoming interstates are posted at 75-80 mph. Above the published ladder the engine keeps computing the formula (80 mph / 12 ft -> L = 960 ft) and clamps the buffer at the 75 mph row (820 ft). Both are extrapolations WYDOT has never printed. The engine has no way to stop at 70 mph, so an over-70 estimate must be SME-confirmed.",
    "MASH16 TL-3 device mandate (Std Spec \u00a7703.2.1) \u2014 a device qualification gate, not a count. It changes what a contractor may bring to a WYDOT job and therefore the unit cost, and nothing in this output checks it.",
    "AADT-keyed TMA mandate: TMA required at AADT >= 10,000 (>= 5,000/direction) on the Interstate and >= 5,000 on two-lane roads for mobile/short-duration work, and 'if a TMA is not available a lane closure shall be used' (work-ops p.17). The estimator takes no AADT input, and ta-33's TMA line stays optional.",
    "T-1 speed-reduction permit: a regulatory reduction more than 15 mph below posted requires an approved T-1 (Operating Policy 25-6, work-ops p.16), and Std Plan 703-3I directs 45 mph through an active four-lane work zone with up to 65 mph between zones. The estimator takes ONE posted speed. A 65->45 reduction changes L, the buffer and every device spacing, and it is a T-1 job. Std Plan 703-5E also publishes a typical posted->reduced ladder (30->20, 35->25, 40->30, 45->30, 50->35, 55->40, 60->45, 65->45, 70->45 mph) whose 60/65/70 rows are themselves >15-mph reductions; that ladder is not encoded either.",
    "PCMS legibility spec: <=2 phases, <=3 lines each, letters >=18 in at >=45 mph / >=10 in below 45 mph or truck/trailer-mounted mobile, 2-8 s display, no animation or scroll (work-ops p.19-22; Tables 4-5 carry WY's recommended abbreviation and maintenance message sets). No template emits a PCMS, so none of this is priced or gated.",
    "WY no-passing-zone signing on an obliterated centerline: advance NO CENTER STRIPE, then DO NOT PASS (right) + NO PASSING ZONE pennant (left), PASS WITH CARE on restore, tabs every 40 ft (work-ops p.11; Std Spec 703.4.7). It bears on the two-lane templates (ta-10 / ta-11); none of those signs is emitted.",
    "Signs on both sides of a divided highway: work-ops p.8 (shall), keyed to road type. divided_highway_duplication true keeps ta-33's right + median set. Undivided templates (ta-30, ta-30r) post one side.",
    "Pilot-car one-lane two-way control (PILOT CAR FOLLOW ME guide sign, flagger at each end, work-ops Fig 14 p.41; \u00a7107.11.4 / \u00a7703.4.3). WYDOT treats the pilot car as a first-class control method and prefers devices/pilot car over flaggers (a flagger 'should be considered only if other forms of traffic control will not work'). No pilot-car template exists, so TA-10 is priced as a two-flagger job.",
    "Advance-sign survey distances (1300-1500 ft full access-controlled / 500-800 ft over 45 mph / 350-500 ft at or below 45 mph, work-ops p.24) and the ROAD WORK NEXT X MILES panel (G20-1, Std Plan 703-6H item S-10). Neither sign is emitted.",
    "Nighttime flagger illumination (discernible at 1000 ft, >=4000K, 14,000-80,000 lumens, mounted 15-25 ft) and sign mounting by duration (portable supports at 1 ft up to 2 weeks, breakaway posts beyond). Real WY line items with no BOM device class.",
    "Temporary pavement markings (yellow temporary centerline on two-lane two-way, white edge + yellow center when an interstate is run two-lane two-way, no motorist guidance markers there, permanent markings within 14 days \u2014 Std Spec \u00a7703.4.8) and the WC-3 / WC-4 barricade striping detail (Std Plan 703-1I, 24-in max spacing between barricades). Neither is a BOM class here.",
    "Std Plan 703-5E half-road-closure rules for undivided multilane: minimum traveled-way width 11 ft[3.4 m] (one note on the same sheet says 10 ft[3 m] \u2014 WYDOT's own sheets disagree and it is left unencoded), 42-in cone or tubular marker as the primary device with the 28-in cone a daylight-only approved substitute, and a tightened 10-ft max device spacing in double-yellow conflict zones. Half-road closures are outside this estimator's single-lane-closure scope.",
    "Whole-state: Wyoming is PROVISIONAL. It is still on the 2009 MUTCD with no confirmed 11th-Ed adoption. If WYDOT cuts over, every citation above and the buffer/SSD basis must be re-walked before this overlay is trusted.",
    "The overnight device rule sits in a HIGH-WIND paragraph (work-ops p.10) and the overlay applies it unconditionally, because wind is not an input. It also reads 42 in where Std Plan 703-1I sht 3 (Feb 2026) reads 36 in for night use. A night job, or a closure left in place overnight (>=24 h), is priced at the 42-in cone, the conservative of the two.",
    "TA-30R sign set: no WYDOT one-sided multilane lane-closure figure exists. TA-30R follows work-ops Fig 11 p.36 (2 signs per direction), as TA-30 does; Std Plan 703-3I (interstate) draws W20-1/W20-5/W4-2.",
    "Edition: WYDOT's resolution page (dot.state.wy.us/home/administration/rules_regs/MUTCD.html, live 2026-09-23) still adopts the 2009 MUTCD. A secondary source (roadsigns.com 2026) claims 11th-Ed adoption; confirm against Transportation Commission minutes before re-baselining. Overlay stays PROVISIONAL."
   ],
   "onboarding_check": null
  }
 ]
}