Skip to content

feat(carriers): slice 3 regional, local, and Alaska carriers - #258

Merged
Orinks merged 10 commits into
feat/career-2.0from
wip/carrier-s3-data
Sep 27, 2026
Merged

Orinks merged 10 commits into
feat/career-2.0from
wip/carrier-s3-data

Conversation

@Orinks

@Orinks Orinks commented Sep 26, 2026

Copy link
Copy Markdown
Owner

Carrier slice 3 data, per the approved plan (docs/carrier-slice3-plan.md). This folds in the plan PR #257 (its three plan commits are the first three here), which is closed as superseded.

Carriers (24)

Tier Count Carriers
National 3 Northstar, Great Lakes Training, Summit Value (unchanged)
Regional 18 17 lower-48 (Prairie Link plus 16 new), and Chatanika Freight Lines in Alaska
Local 3 Des Plaines River Cartage (Chicago, Gary, Aurora), Basin Harbor Drayage (Los Angeles, Riverside), Knik Arm Cartage (Anchorage)
  • Names are final. Catawba Ridge Transport became Meherrin Transport (meherrin_transport). The plan's sections 1, 2, 10, 11 and 12 are updated.
  • The Tehachapi wording no longer implies CA-58 is the LA-Fresno lane.
  • Loonwater Regional has its Green Bay terminal.
  • Tier bands:
    • regional: hires within 250 air mi, run band 150-600;
    • local: hires within 50 air mi, run band 25-150.
    • Only the band maximum is applied today; the minimum waits for slice 4, so no player text promises a minimum.
  • Every new carrier has a spoken lane_area and a generated start option. That opens Alaska home cities in the picker; BC and YT stay closed.

Fallback when a carrier lets a driver go (plan section 5)

A driver is let go by check_carrier_termination, a debt termination, or a low-reputation repossession. The fallback is chosen from the driver's home city (home_city, else home_terminal_city, else current_city):

  1. The nearest regional or local that hires there, never the carrier that let the driver go.
  2. Otherwise Great Lakes Training, which hires anywhere in the lower 48.
  3. Otherwise, no carrier.

Details:

  • A repossession has no carrier doing the firing, so it skips the "never the firing carrier" filter, as the plan says.
  • The new carrier keeps the driver on sufferance (DrivingRecord.sufferance_carrier_key). The same record can't end that job again, and debt stops at the ceiling, the same way it does at Great Lakes Training.
  • An Alaska driver never goes to a lower-48 carrier.

Driver with no carrier. The save stores an empty carrier_key and carrier_name.

  • The terminal's arrival line says "You have no carrier right now. Choose Apply to a carrier to take a seat."
  • Apply to a carrier replaces the Dispatch board item.
    • It lists carriers that hire in the home city, never the one that let the driver go.
    • If none hire there, it lists carriers with a terminal in the same state; each of those says it moves the driver's home there.
    • Example: "Knik Arm Cartage: local carrier, hires into its Anchorage terminal, moves your home to Anchorage".
  • Picking a carrier starts the driver at that terminal, kept on sufferance if their record would otherwise end the job.
  • Opening the dispatch board with no carrier says why there is none.

Tests

  • 625/625 lower-48 cities are hired into by a regional and offered in the picker.
  • Every Alaska city is offered, and only Alaska carriers hire there; BC and YT are not offered.
  • For every Alaska home and every firing carrier, no lower-48 carrier appears in the fallback or in the openings.
  • The fallback rule: never the firing carrier, nearest regional or local first; Fairbanks let go by Chatanika ends up with no carrier, with Knik Arm offered as a move. These run through both the profile and the terminal menu.
  • Tier bands, unique names, and terminal yard pins.
  • Fairbanks is the one terminal city with no world company_yard/terminal pin. It is named in the test with its reason and has a ROADMAP row.

Docs

  • ROADMAP:
    • the regionals and coverage-test rows are checked off;
    • new rows for Loonwater's 636 mi span and the Fairbanks yard pin;
    • the orinks.net export row now covers the new carrierLabels and the empty carrier fields.
  • CHANGELOG bullet added.
  • profile_integrity_invariants.json is regenerated (carrierLabels).

Plan for carrier slice 3: sixteen new lower-48 regionals, an Alaska
regional with Anchorage and Fairbanks terminals that opens AK home cities
while BC and YT stay blocked, and two metro locals. Lists each carrier's
key, tier, terminal city keys, hiring footprint, lane area, and the cities
only it covers; the six cities left with nationals only; the coverage
test; and open questions. No carrier data changes.

[skip changelog]
Regenerate the plan without the duplicated sections 3-5 and regionals
6-16. Settle the count at 17 lower-48 regionals, keep the four wide
spans, and add a Green Bay terminal so all 625 lower-48 cities get a
regional. Replace the Milwaukee termination fallback with a home-city
rule, add Knik Arm Cartage as a second Alaska carrier, keep the Alaska
regional inside Alaska, and note ALCAN through-freight as future work.
Record a trademark screen of every name; sixteen names are replaced.
Add a ROADMAP row for TWIC on LA/Long Beach port drayage.

[skip changelog]
Replace twelve plant, animal, and seaweed names with river, valley, and
range names under the realism re-cut's name rule, and screen all 20
names against FMCSA SAFER, the USPTO trademark search (now reached
through its public JSON endpoint), and the web. Record the Loonwater
span, the thin Knik Arm Cartage footprint, and the fallback rule as
resolved, add a no-AK-driver-on-a-lower-48-carrier test, and add a
ROADMAP debt row for the Kenai Peninsula and Seward.

[skip changelog]
Catawba Ridge Transport becomes Meherrin Transport (meherrin_transport):
the Meherrin River runs on the VA/NC line between Richmond and Greensboro,
inside the carrier's footprint, and the bare word screens clean where
"Catawba" hit three freight-named registrants in the lane area.

The Tehachapi name line no longer implies CA-58 is the LA-Fresno lane
(that runs I-5 over Tejon Pass); CA-58 is inside the lane area, so the
name stays. The open questions are resolved, sufferance is written into
the fallback rule, and the local tier drops short_haul_bias.

[skip changelog]
data/carriers.json grows to 24 carriers: 16 new regionals join Prairie
Link (hire within 250 air mi, loads up to 600 mi), Chatanika Freight
Lines hires across Alaska out of Anchorage and Fairbanks, and three
locals (Des Plaines River Cartage, Basin Harbor Drayage, Knik Arm
Cartage) hire within 50 mi with loads up to 150 mi. Loonwater Regional
gets its Green Bay terminal. Every new carrier has a spoken lane area
and a generated start option, so Alaska home cities open in the picker.

A driver let go is taken on by a regional or local that hires at home,
nearest terminal first and never the carrier that let them go, else by
Great Lakes Training, else is home with no carrier. The new carrier
keeps them on sufferance. With no carrier, the terminal offers "Apply
to a carrier" in place of the dispatch board.
All 625 lower-48 map cities are hired into by a regional (and offered
in the picker); every Alaska city is offered and hired into only by
Alaska carriers; BC and YT stay closed. For every Alaska home and every
firing carrier, neither the fallback nor the openings ever name a
lower-48 carrier. The fallback is never the firer, prefers the nearest
regional or local, and leaves a Fairbanks driver let go by Chatanika
home with no carrier, with Knik Arm Cartage offered as a move. Tier
bands, unique names, and terminal yard pins are pinned; Fairbanks is
a carrier-owned terminal, no world pin needed.

[skip changelog]
The regionals and coverage test rows are done. New rows: Loonwater's
636 mi terminal span (KEEP, Bismarck stays, loads obey the 600 mi band)
and Fairbanks' missing world yard pin. Knik Arm's next-in-line row
stays, and the orinks.net export row now names the 20 new carrier
labels and the empty carrier fields an unassigned driver saves.

[skip changelog]
Home terminals are carrier-owned yards synthesized from
terminal_city_keys, never a world pin, so Fairbanks is not an
exception. The terminal test now checks that terminal cities are real
map cities and that each has a carrier-owned "{Carrier} {City}
terminal", with Fairbanks shown as needing no world pin. The ROADMAP
Fairbanks row closes on the same wording.

Two slice 4 debts: hourly or per-move pay for local carriers, and a
short-haul board bias for locals under its own setting, not the
"training loads" one.

[skip changelog]
Carrier name no longer falls back to the starter carrier; the hub,
objective, training, business and trust text speak a no-carrier state.
Let-go wording says near your terminal when no home city is saved, and
the fallback never writes home_city. No trust line with no carrier; the
sufferance last-chance line says the seat will not be ended. Hub hides
the truck menus with no carrier.
A clean record on sufferance speaks no record line. Resetting a career
with no carrier picks the nearest carrier hiring at the home city (the
current city when none is saved), so Alaska stays in Alaska. With no
carrier, career stats and the dealer say there is no truck and the
career list names the city only. A firing is said before the hub line,
which now describes the terminal after it.
@Orinks
Orinks force-pushed the wip/carrier-s3-data branch from 05798b5 to 5ebbdd2 Compare September 27, 2026 01:16
@Orinks Orinks changed the title feat(career): slice 3 regional, local, and Alaska carriers feat(carriers): slice 3 regional, local, and Alaska carriers Sep 27, 2026
@Orinks
Orinks merged commit b681cd6 into feat/career-2.0 Sep 27, 2026
5 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