Skip to content

feat(carriers): start new careers at the hiring carrier's terminal - #255

Merged
Orinks merged 4 commits into
feat/career-2.0from
wip/carrier-s2-start-flow
Sep 26, 2026
Merged

Orinks merged 4 commits into
feat/career-2.0from
wip/carrier-s2-start-flow

Conversation

@Orinks

@Orinks Orinks commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

Carrier slice 2: the new-career start flow uses carrier-owned home terminals.

#253 has merged; this PR targets feat/career-2.0 and is rebased on its tip a38930f8.

Changes

  • Flow order: region → home city → carrier. Every item is plain menu text for screen readers.
  • Picker: lists only cities where is_offerable_home_city is true and a start option offers a carrier that hires there. Alaska, British Columbia, and Yukon stay blocked until an Alaska regional exists. A region with no offerable city is left out.
  • Carrier list: only carriers that hire in the picked city. Nationals appear for every lower-48 city; Prairie Link appears only within 250 air miles of its Kansas City, Omaha, or Wichita terminals. Each row ends with "Truck starts at {Carrier} {City} terminal."
  • Start location: the truck starts at the hiring carrier's nearest terminal (current_city = home_terminal_city, parked_facility = "{Carrier} {City} terminal"). A Milwaukee pick with Northstar starts in Chicago at Northstar Freight Lines Chicago terminal. A start never falls back to another carrier's far-away terminal.
  • First-day briefing: says orientation and truck assignment happen at the carrier terminal (owner-operators: lease orientation), with no home-time claims.
  • Career reset: restarts from the old home terminal city.
  • Unchanged: the Great Lakes fallback on termination and solvency (change_carrier).
  • Orientation travel: when the carrier terminal is in another city than the picked home city, the company-driver briefing adds "The carrier covered your travel from {Home city} and a hotel for orientation." Owner-operators and hires whose terminal is in their home city don't hear it. The picked city is saved as home_city (the integrity export fixture and blocker row include it), and a ROADMAP row for the carrier home-time slice keeps the terminal city from silently becoming the driver's home.
  • CHANGELOG says the picker now enforces the home-base rule and adds a start-flow bullet. ROADMAP slice 2 rows are checked off.

Tests

  • ff-core: test_a_start_puts_the_truck_at_the_hiring_carriers_terminal, test_a_regional_start_out_of_range_never_takes_a_far_away_home, test_start_options_for_a_city_are_only_carriers_that_hire_there
  • app: test_home_picker_offers_only_cities_where_a_carrier_hires (Healy, Anchorage, and Whitehorse excluded; Chicago and Milwaukee included), test_milwaukee_pick_with_northstar_starts_at_the_chicago_terminal, test_carrier_list_shows_only_carriers_that_hire_in_the_home_city (Wichita/Hutchinson vs Boston), test_prairie_link_row_near_wichita_starts_at_the_wichita_terminal, test_carrier_rows_say_where_the_truck_starts, test_owner_operator_briefing_names_the_lease_terminal, test_every_offered_home_city_has_a_carrier_that_hires_there, test_a_hire_away_from_the_terminal_hears_the_carrier_covered_travel, test_a_hire_in_the_terminal_city_hears_no_travel_line, test_an_owner_operator_hears_no_travel_line
  • Start-default tests updated for the new order: main-menu new-career walk, app smoke flows, online-offer picker, legacy same-name guard, first-day briefing rows, and the dispatch playtest scenario.

@Orinks
Orinks force-pushed the wip/carrier-s2-start-flow branch from 35bfbc2 to da92dba Compare September 26, 2026 20:00
The new-career flow is region, then home city, then carrier. The picker
lists only cities where is_offerable_home_city holds and a start option
offers a carrier that hires there, so Alaska, BC, and Yukon stay out. The
carrier list shows only carriers that hire in the picked city: nationals
across the lower 48, Prairie Link only within 250 air miles of its
terminals. Each row says where the truck starts.

The truck starts at that carrier's nearest terminal: current_city is
home_terminal_city and parked_facility is "{Carrier} {City} terminal".
The first-day briefing says orientation and truck assignment happen there.
A start never falls back to another carrier's far-away terminal. A career
reset restarts from the old home terminal city.

Slice 2 ROADMAP rows are checked off and the CHANGELOG says the picker
enforces the home-base rule.
When the carrier terminal city differs from the picked home city, the
company-driver first-day briefing adds: "The carrier covered your travel
from {Home city} and a hotel for orientation." Owner-operators and hires
whose terminal is in their home city do not hear it.

The picked home city is now saved as home_city, so the driver's home is
kept apart from the terminal city; a career reset restarts from it. The
profile integrity export fixture gains the field, and the integrity
blocker row lists it. A ROADMAP row for the carrier home-time slice keeps
the terminal city from ever silently becoming the driver's home.
@Orinks
Orinks changed the base branch from wip/carrier-s1-home-fix to feat/career-2.0 September 26, 2026 20:24
@Orinks
Orinks force-pushed the wip/carrier-s2-start-flow branch from da92dba to e8ddac3 Compare September 26, 2026 20:24
A reset starts over from the saved home city. A career from before the
home city was recorded seeds the reset from its old terminal city, and
that terminal city was then saved as the driver's home; it now stays
blank. Tests cover both reset paths.
The home city help and the carrier list announcement counted start rows,
so the owner-operator start (leased to a listed carrier) read as an extra
carrier: Milwaukee now says 3 carriers hire there and Wichita 4. The
first-day briefing uses the shared service-area phrase, and a test comment
is re-indented.

[skip changelog]
@Orinks
Orinks merged commit 6e852f2 into feat/career-2.0 Sep 26, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant