Kosciuszko NP · Main Range
How this works
Every figure on the brief is computed by a deterministic model from public weather data and one depth observation. A language model may draft the wording of the daily call, but it works only from those computed figures and cannot introduce a number of its own. This page explains the model — and its limits.
The pipeline
Each morning, Aspect fetches hourly forecast data from Open-Meteo for six points on the range (Thredbo top station, Mt Kosciuszko, Mt Twynam, Guthega, Dead Horse Gap, Charlotte Pass), requesting site elevation explicitly — the default grid height is a cell average and badly wrong in terrain this steep. It combines that with the latest Snowy Hydro snow-depth reading at Spencers Creek (1830 m), scores every aspect at every site for today plus four days, and publishes the result as a single validated snapshot. The page you read is a rendering of that snapshot — if a refresh fails, the previous snapshot stays up with a staleness warning rather than silently pretending to be current.
Solar & surface model
Sun position uses the full NOAA algorithm, then irradiance is decomposed onto each 30° slope: direct beam by geometry, diffuse by sky view, plus ground reflection. It is hemisphere-correct — the midday sun sits to the north here, so the corn cycle runs NE → N → NW through the day.
Each hour, the model adds up the energy arriving at and leaving the snow surface, and keeps a running total. Four terms, any of which can be negative: absorbed sunlight; radiative loss to the sky (~70 W/m² under a clear sky, suppressed by cloud); heat exchanged with the air, which scales with wind; and latent heat, where humid air condensing onto snow releases a great deal of energy and dry air sublimating away removes it.
The running total is signed, and that is the whole point. Above zero it measures ripeness — how wet and worked the surface is, which is what the class names describe (frozen → firm → corn → soft → slush). Below zero it measures cold content: how much energy a refrozen crust has to absorb before it can begin to soften at all. That is why a morning window is a timing question rather than a sunrise question.
Refreeze is therefore an energy call, not a temperature one. A clear, calm night radiates heat away fast enough to set the surface hard with the air sitting near zero — the classic spring corn morning. A windy, overcast night at the same air temperature sets nothing at all. The model reads those as different mornings, because they are. Overnight the total is bounded below, since only the top few centimetres take part in the daily cycle; during a thaw it is bounded above, because there is a limit to how much water a surface layer can hold; and after sunset it drains, so an evening grades down over hours instead of slamming shut.
“Corn” also has to be earned. Softening on a surface that has not been through at least two melt-freeze cycles since the last snowfall is wet snow, not corn — the grain coarsening that makes corn ski the way it does takes repeated cycling. Those days say so.
The model also tracks whether a face has been wet at allsince the last snowfall, because “has not melted” and “was wet and refroze” are completely different surfaces to ski. Snow that has never melted is chalk: dry, settled, edgeable, with no window to time and none needed. Snow that melted and refroze is frozen— actual crust, and the only surface here the page will tell you to bring ski crampons for. A cold week that used to read “not a day to plan around” on every face now says where the chalk is, which on this range is usually the shaded half of the compass — and 21 of the 51 routes descend it.
Fresh snow is also brighter than old snow, and reflects far more of the sun that would otherwise melt it. The model decays reflectivity from fresh toward aged over days, faster once a surface starts cycling. That is worth two to three hours of window timing on the days right after a fall — which the page previously got wrong in the confident direction.
Scoring
Hourly quality is a continuous curve peaking at the centre of the corn band. The aspect score blends peak quality (55%) with the mean of the best three hours (45%), scaled by how long the contiguous good window lasts. A published window only counts hours that are in daylight and above a quality floor, so it never runs past sunset and never opens on snow that has barely crossed into “soft”.
Wind loading is assigned to lee aspects and scouring to windward, but only when there is loose snow to move — snow that has fallen recently, or that has not been wet since it did. Cold air over a crust moves nothing, whatever the forecast gust says. How much moves goes as roughly the cube of wind speed above the threshold, decays with a half-life of about a day and a bit, and is wiped by rain or a thaw.
Loading is treated as a hazard fact, not a quality one. It keeps its flag and its note at full volume and barely touches the score: a lee slope is often the deepest and best-skiing snow on the hill, and is exactly where a slab sits. What quality it does cost comes from the snow genuinely being different — drifted, then slabbed — and moves smoothly rather than in steps. Scouring is the opposite case and keeps a real penalty, because scoured snow simply skis badly.
Wind speed itself comes from three places, because none is trustworthy alone: the modelled 10 m wind reads single digits while the tops are blowing 40+, gusts stand in for what the range actually feels, and the free-air wind is interpolated to each site's own elevation from the pressure levels that bracket the crest.
What a score means
The 0–100 number is only as useful as its anchors, so they are fixed and behavioural — each band names a decision, not a feeling. This is the calibration contract: the cuts move only against what testers report from the hill, never to flatter a given day.
| Score | Band | What it means for your day |
|---|---|---|
| 80+ | Prime | Plan the day around it. This is why you keep gear in the car. |
| 65–79 | Good | You'd drive for this and, most days, not regret it. The go/no-go line. |
| 50–64 | Fair | Worth it if you're already up there — not worth a special trip. |
| 35–49 | Marginal | Travel-day skiing: turns are possible, quality isn't the point. |
| under 35 | Skip | The mountain is telling you to do something else. |
The two calibration questions on the feedback form — “worth the drive, in hindsight?” after a day out, and “did you regret not going?” on a day you watched but skipped — exist to test exactly this table. A run of “no, not worth it” on 65+ days, or “yes, I regretted it” on sub-65 days, is the evidence that moves a cut.
Depth & elevation
Snow depth is anchored to the Spencers Creek reading rather than the weather model's snow field, which is unreliable in Australian conditions. The profile either side of that anchor is worked out differently, because different evidence answers each question. Below it, depth tapers to a snowline — and that is exactly what the Deep Creek and Three Mile Dam courses measure, so when they report, the taper is fitted to them. Above it, depth grows multiplicatively, so a thin year reads thin everywhere; nothing measures that, because every snow course on the range sits below Spencers Creek, so it stays a stated assumption.
The reading itself is weekly at best. It is now carried forward to today using modelled snowfall and melt, with a stated ± that grows both with the reading's age and with how much of that span the forecast data actually covers — so a run of storms opens routes without waiting for the next survey, and a long gap says plainly how much it is guessing. The snowline, elevation bands and approach verdicts all follow from that carried-forward anchor, and the page still flags loudly when the reading is more than eight days old.
The aspect rose is scored three times over the same weather column, re-cast to roughly 1600, 1940 and 2200 m, so the Low / Mid / High toggle means “same place, different height”, not a change of location. Temperature falls with height at a fixed rate, dew point falls more slowly, wind rises, and — the one that matters in a storm — precipitation is re-split between rain and snow at each height. The forecast provider works that split out once, at the height of its own grid square, and does not redo it: on a day when the freezing level sits mid-range, that paints the same rain-on-snow mix across the whole range when the bottom is being rained on and the top is collecting snow. The workings table shows whichever band you have selected, not always the middle one.
Three discrete bands, not a continuous dial, because underneath it is one weather column and a fixed lapse rate — finer resolution would be false precision. A fixed lapse also cannot represent an inversion, and on an inversion morning the elevation picture is the other way up; that is a known limit rather than a modelled one.
Prose — where the language model sits
The scoring engine makes every call; templates turn those calls into sentences. When configured, Claude rewrites the daily verdict's wording from the computed figures — it is told the judgement is already made and it may not change it, soften a caution, or use any number not present in the data. A validator then checks every numeric token in the output against the input set; a single unexplained figure and that day falls back to the template. "The workings" section states which path produced the text you're reading. No language model ever touches a score, a window, a depth or a flag.
Confidence
Forecast skill decays with lead time, so every day starts from a tier by how far out it is: high (today, tomorrow), medium (2–3 days), low (4+). But lead time alone says nothing about the day in front of you, so the tier is then tested against how much the forecast actually agrees with itself.
A 31-member ensemble is run through the same overnight energy balance the page uses — the night needs no sunlight, so this is the real calculation and not a stand-in for it. That gives a genuine probability: the surface sets hard in this manyruns out of thirty-one. When the members split on that, or on whether precipitation falls as rain or snow at your height, or when a second independent model disagrees about the night, the confidence drops and the day's call says so in words.
Agreement can only lower the tier, never raise it above what lead time allows. An ensemble varies its starting conditions, not its physics, so runs agreeing at five days out means one model is consistently confident — which is not the same thing as the day being predictable.
Tuning constants — documented, not measured
| Constant | Value | What it sets |
|---|---|---|
cornLower / cornUpper | 3 / 14 | The corn band. If the page says 10:00 and you find it frozen at 11:00, this is what to raise. |
longwaveLossWm2 | 70 | Clear-sky radiative loss a slope must beat before melting. |
physics.kH / kL | 7 / 3 | How hard wind and humidity push the surface around, in W/m² per °C at calm — doubling at 30 km/h. The negative side is what lets a cold gale hold a sunny face frozen. |
hardSetUnits | 2 | How deep the overnight energy deficit must go before the set counts as hard. Softening without one is scored as wet spring snow, with a capped ceiling. |
coldContentFloorUnits | −6 | The most cold a refrozen surface can bank — about 2.7 mm water-equivalent of energy to pay back before it softens. |
minCornCycles | 2 | Melt-freeze cycles since the last snowfall before softening earns the name “corn”. |
chalkQualityBase | 66 | What dry, never-melted snow is worth, ageing down to a floor of 52. The old model scored it 12. |
albedoFresh / albedoAged | 0.85 / 0.62 | How much sunlight fresh and old snow reflect. Absorbed energy scales with what is left, so this is a 2.5× swing in melt drive after a fall. |
gustTransportFactor | 0.6 | Fraction of the gust speed treated as transport wind — the model's sustained 10 m wind badly understates exposed ridges. |
meltRateDivisorWm2 | 42 | Absorbed W/m² per unit of the surface energy total — one unit is about 0.45 mm water-equivalent. |
depth.lapseCmPer100m | 19 | Depth change with elevation; recomputed when both Snowy Hydro sites report. |
product.persistenceFloor | 0.6 | How much a long window beats a brief perfect one. Can rank a slow shaded aspect above a fast solar one on warm days. |
These are physically reasonable starting points, not measured values. Every one of them now lives in a single documented config object, tagged with where its value came from — measured, from the literature, or assumed — and every published snapshot carries a fingerprint of the exact constants that produced it, so a day checked on the hill can be traced back to the call it is being scored against. The honest test is whether the model's call matches what is found up there, logged over a season. Until there is enough of that log, treat the rankings as a strong hypothesis.
Recorded rime — an honest caveat, not a computed surface
The model scores softening; it is blind to rime — the hard, opaque ice that plasters the tops when sub-freezing cloud is driven onto the terrain by wind. So on the day's view, when the recent record shows a riming spell (a day with three or more hours of near-saturated air below freezing under a transport-strength wind, in the trailing few days), the safety strip carries a plain-language warning that the high faces may be armoured and icy regardless of the softening forecast. It is a flag about what the model cannot see, deliberately worded as such — never a surface class, and it never moves a score, a window or a ranking.
What this is not
There is no snowpack layering, no persistent-weak-layer tracking, and no field observation anywhere in this model. It cannot see a wind slab, a buried crust, or a cornice. It is a timing-and-aspect planning tool. Check the Mountain Safety Collective Main Range report before travelling, carry the gear, and make the real decision at the trailhead with your own eyes.