Methodology / Assumptions

Assumptions register

Every scalar constant and interpretive choice in the scoring pipeline, in one place. Each row states the value, what it governs, the direction of its bias, and where it lives in code. This register is auto-generated from src/config/scoring-constants.ts— the single source of truth shared by the Rust processor, Node build scripts, and browser scoring code.

How to read this table

Bias vocabulary

Every assumption is tagged with its direction of bias, following the Australian Zoning Atlas convention:

toward the networkFavours the network — the score is at least as good as reality.
toward the argumentFavours our argument — rare, justified below.
neutral / sweptMidpoint convention, tested bidirectionally in the robustness harness.
diagnosticThreshold for display or qualification — not a modelling choice.

Candour

Assumptions that cut the other way

The master principle says every ambiguous call resolves in the network's favour. Two assumptions run the other way and are written up explicitly so they are not hidden:

G-NAF occupancy lead

G-NAF addresses register around property titling, typically a few months before residents move in. This means growth-corridor population registers slightly early, which slightly favours our argument (unserved areas show as populated sooner), not the network. This is the smaller error versus the 5-year Census lag it replaced and is quantified in the population refresh spec. The magnitude is small and stated.

League-table eligibility gates

Requiring 3 stops, 5,000 catchment population, and 6 weekday trips before a suburb or route can appear in a league table favours the network by excluding the very worst-served phantom cases from rankings. Excluded localities are the opposite of well-served — a 2-stop suburb with a flag stop is not "almost on the list", it is barely scored at all. The eligibility gates are stated alongside every ranking.

ConstantValueGovernsBiasSource
HEADWAY_HALF_SATURATION28Half-saturation wait in minutes: wait at which headway_score = 50.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
HEADWAY_EXPONENT2.2Headway curve exponent (power-law steepness).neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
FREQ_HEADWAY_WEIGHT0.6Headway / span / reliability split within the frequency key.one-sided toward the networkscoring-constants.ts
FREQ_SPAN_WEIGHT0.3one-sided toward the networkscoring-constants.ts
FREQ_RELIABILITY_WEIGHT0.1one-sided toward the networkscoring-constants.ts
HEADWAY_PEAK_WEIGHT0.6Peak / off-peak / weekend split within the headway score.one-sided toward the networkscoring-constants.ts
HEADWAY_OFFPEAK_WEIGHT0.25one-sided toward the networkscoring-constants.ts
HEADWAY_WEEKEND_WEIGHT0.15one-sided toward the networkscoring-constants.ts
SPAN_MIDPOINT12Midpoint of the service-span logistic curve (span_hours at which hours_score = 50).neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
SPAN_SCALE4.329Scale parameter of the service-span logistic curve.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
RELIABILITY_EXPONENT0.663Exponent for the days-of-week reliability curve: reliability = 100 * (active_days/7)^exponent.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
COV_NETWORK_WEIGHT0.7Network / local split within the coverage key (before intermodal bonus).one-sided toward the networkscoring-constants.ts
COV_LOCAL_WEIGHT0.3one-sided toward the networkscoring-constants.ts
COV_HUB_WEIGHT0.5Network sub-weights: hub reachability / orbital directness / CBD access.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
COV_ORBITAL_WEIGHT0.3neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
COV_CBD_WEIGHT0.2neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
COV_WALK_WEIGHT0.5Local sub-weights: walk catchment / feeder / active transport.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
COV_FEEDER_WEIGHT0.3neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
COV_ACTIVE_WEIGHT0.2neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
INTERMODAL_BONUS_CAP20Maximum intermodal bonus points.one-sided toward the networkscoring-constants.ts
HUB_SCORE_SUPER100Hub score ladder: super hub, city loop / major hub, route into city, other.one-sided toward the networkscoring-constants.ts
HUB_SCORE_MAJOR_MIN85one-sided toward the networkscoring-constants.ts
HUB_SCORE_MAJOR_MAX95one-sided toward the networkscoring-constants.ts
HUB_SCORE_CITY_ROUTE65one-sided toward the networkscoring-constants.ts
HUB_SCORE_OTHER40one-sided toward the networkscoring-constants.ts
PENALTY_FLOOR0.5Floor of the penalty multiplier (never goes below this).one-sided toward the networkscoring-constants.ts
PENALTY_MIDPOINT35Midpoint of the penalty logistic curve (trigger_score at which multiplier = 0.75).neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
PENALTY_SLOPE12Slope (steepness) of the penalty logistic curve.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
VIABILITY_THRESHOLD50A route is "viable" if its best stop scores above this.one-sided toward the networkscoring-constants.ts
BEST_VIABLE_WEIGHT0.7Weight of the best viable route in the address score.one-sided toward the networkscoring-constants.ts
DIVERSITY_WEIGHT0.3Weight of the diversity bonus in the address score.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
DIVERSITY_BREAKPOINTS[0, 1, 2, 3, 4, 5]Diversity bonus breakpoints: quality-weighted route count → bonus.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
DIVERSITY_BONUS_VALUES[0, 20, 50, 70, 85, 100]neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
NO_VIABLE_CAP49Cap for address score when no viable route exists.one-sided toward the networkscoring-constants.ts
GRID_CELL_SIZE_M250Grid cell size in metres.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
CATCHMENT_RADIUS_M800Walking catchment radius in metres.one-sided toward the networkscoring-constants.ts
REACH_THRESHOLD0.4Minimum share of dwellings that must reach a viable route for verdict purposes.diagnosticscoring-constants.ts
MIN_GRID_CELLS3Minimum number of populated grid cells to use grid scoring.diagnosticscoring-constants.ts
RADIUS_400_M400Walk radii in metres.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
RADIUS_800_M800neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
RADIUS_1500_M1500neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
INTERCHANGE_RADIUS_M150Interchange radius in metres.one-sided toward the networkscoring-constants.ts
ROUTE_WEIGHT_FREQUENCY0.45one-sided toward the networkscoring-constants.ts
ROUTE_WEIGHT_CATCHMENT0.25neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
ROUTE_WEIGHT_CONNECTIVITY0.2neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
ROUTE_WEIGHT_DIRECTNESS0.1neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
SCHOOL_SPECIAL_MIN_TRIPS6School-special detection gates.one-sided toward the networkscoring-constants.ts
SCHOOL_SPECIAL_MIN_DAYS4one-sided toward the networkscoring-constants.ts
DIRECTNESS_GOOD_RATIO1.2Directness score breakpoints: circuity ratio.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
DIRECTNESS_POOR_RATIO2.5neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
CONNECTIVITY_HEADWAY_GATE60Connectivity: minimum headway score to count as a quality interchange.one-sided toward the networkscoring-constants.ts
LEAGUE_TABLE_MIN_STOPS3Minimum stops for a suburb to appear in the league table.one-sided toward the networkscoring-constants.ts
LEAGUE_TABLE_MIN_CATCHMENT_POPULATION5000Minimum catchment population for a route to appear in a league table.one-sided toward the networkscoring-constants.ts
LEAGUE_TABLE_MIN_WEEKDAY_TRIPS6Minimum weekday trips for a route to appear in a league table.one-sided toward the networkscoring-constants.ts
PLAN_PEAK_HEADWAY_MIN10one-sided toward the networkscoring-constants.ts
PLAN_OFFPEAK_HEADWAY_MIN15one-sided toward the networkscoring-constants.ts
PLAN_SPAN_START_HOUR4Declared policy: start of service span.one-sided toward the networkscoring-constants.ts
PLAN_SPAN_END_HOUR24Declared policy: end of service span.one-sided toward the networkscoring-constants.ts
PLAN_COST_PER_KM6.5Assumed bus operating cost per service km.one-sided toward the argumentscoring-constants.ts
PLAN_COV_400_WEIGHT1Coverage-value weights: 400m/800m/POI.one-sided toward the networkscoring-constants.ts
PLAN_COV_800_WEIGHT0.4one-sided toward the networkscoring-constants.ts
PLAN_POI_WEIGHT400one-sided toward the networkscoring-constants.ts
PLAN_STOP_SPACING_M400Stop spacing for proposed routes.one-sided toward the networkscoring-constants.ts
CAR_BETA0.05Gravity-decay constant (BETA) — placeholder, not yet calibrated.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
CAR_CUMULATIVE_WINDOW_MIN45Cumulative accessibility time window in minutes.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
CAR_BAND_COMPETITIVE1.5Car-competitiveness ratio band edges.neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
CAR_BAND_TOLERABLE2neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
CAR_BAND_POOR3neutral / midpoint convention, swept bidirectionallyscoring-constants.ts
BAND_GOOD_MIN85diagnosticscoring-constants.ts
BAND_DECENT_MIN70diagnosticscoring-constants.ts
BAND_PATCHY_MIN50diagnosticscoring-constants.ts
BAND_POOR_MIN30diagnosticscoring-constants.ts
BAND_STRANDED_MIN0diagnosticscoring-constants.ts
ROUTE_CATCHMENT_RADIUS_M400one-sided toward the networkscoring-constants.ts
ROUTE_CONNECTIVITY_RADIUS_M150one-sided toward the networkscoring-constants.ts

Total: 75 constants. Every constant in scoring-constants.ts is represented above; the CI build will fail if any are missing. The Code & mechanics page shows how each constant feeds into the scoring formulas.