The math

The sail log

Sail life is money, and the only accurate way to count it is to have the hours count themselves. Here is how a tap on a tablet becomes a number of minutes — and what that number is worth.

What is being counted

One row in the log is one interval a sail was flying: this sail, up at this instant, down at that one. Everything else — total hours, hoist counts, the wind it saw, how it has performed over its life — is computed from that one shape.

The rows fill themselves as the crew taps sails up and down in Race Control. Nobody stops to log anything; the tap is a thing they were doing anyway.

1 Snapshots, not deltas

The obvious design is to record changes: kite up, jib down. It is also the fragile one, because a stream of changes only reconstructs the truth if every single event arrives, in order, exactly once. Miss one on a boat with a marginal 4G signal in a bay behind a hill, and the ledger is wrong from that moment until the end of the day — and nothing downstream can tell.

So the platform records state, not change:

Every sail change carries the complete set flying at that instant — with the empty set meaning everything is down.

Three things fall out of that, and all three matter on a boat:

  • A dropped event costs one boundary, not the rest of the day. The next tap that does arrive re-establishes the whole truth. The error is bounded by the gap, not by the remaining hours.
  • An undo is just the previous set, sent again. No special case, no compensating event.
  • A sail change is one atomic instant. Swapping one kite for another never passes through a state in which two spinnakers were flying — which a pair of separate up/down events would.

2 Runs, not pairs

Given a day of snapshots, each sail’s intervals are the maximal runs of consecutive snapshots that contain it. Walking through the day in order, at each snapshot:

close every open interval whose sail is not in this set open an interval for each sail in this set that is not already open

Read as a sentence: a sail that is still up stays up — it does not come down and go back up again.

That last clause is the whole design in four words, because hoist count means hoists. Suppose the crew taps the same set three times in half an hour — a re-confirmation, a correction to something else in the set, a tap while checking the screen. Pairing events naively gives three hoists of the main, two of them zero minutes long. Runs give one hoist of thirty minutes, which is what happened.

The other half of the same rule: a sail that does come down and go back up is genuinely a second hoist, because the run broke. An interval of no duration at all is dropped rather than stored — it is not a hoist, and counting it would inflate the number that tells an owner when to order a replacement.

Nothing closes an interval for you

A sail still up at the last snapshot of the day stays open, indefinitely, until somebody closes it.

The platform cannot tell a sail still flying from a tablet that went flat. A guessed down-time would enter the season’s totals as if it had been measured.

So an open interval counts toward no total. It is shown, it is flagged, and the log offers to close it now or to let you type the real time — but the number stays out of the accounts until a person supplies the missing half. Totals throughout the log count closed, non-voided intervals only; a sail that is up right now reads “flying now” and adds nothing.

3 Your corrections always win

The derived rows are recomputed from the boat’s snapshots every time a new tap lands. That is what keeps them right, and it is also the obvious way to destroy somebody’s hand-typed correction. So there is a rule about who owns a row:

RowWhat re-derivation does to it
from the appRecomputed — its times follow the snapshots.
correctedLeft alone. Editing a recorded row’s times or its sail makes it yours; the recorded version is kept underneath, and no twin appears beside it.
typed inLeft alone, always — and it hides any recorded interval of the same sail that overlaps it.
voidedLeft alone, and stays struck out of every total. Voiding says the interval did not happen; it does not change its numbers.

Hiding applies only within one sail. Main, jib and kite overlapping is a boat sailing downwind, not a conflict, so different sails overlap freely.

There is a matching asymmetry in deletion that is worth understanding before it surprises you. A row the app recorded cannot be deleted — deleting it would last exactly until the next tap re-derived it — so the log offers void instead, which is durable: struck out of every total, still listed, dimmed, and surviving re-derivation by construction. A row you typed in yourself hard-deletes; and doing so un-hides the recorded interval it was covering. If something similar reappears afterwards, that is the boat’s own record resurfacing, not the delete failing.

4 The wind a sail has seen

Total hours undersell a sail. Twenty hours in ten knots is a different life from twenty hours in twenty-five, and the second one is what wears a sail out. So each sail’s log answers in wind.

The intervals are clipped to whatever window you are looking at, then for each second of flying time the platform takes the true wind speed from the per-second summary. One second, one number. Then:

median wind = median of those per-second values sampled minutes = how many of them there were, ÷ 60

Read as a sentence: the typical breeze this sail flew in, and how much of its flying time that figure actually rests on.

A median rather than a mean, because one squall should not move the answer for a season, and one minute of a broken instrument reading 90 knots should move it not at all.

The bands

The same per-second values are also grouped into bands two knots wide — lower bound included, upper bound excluded, so 10.0 knots belongs to the 10–12 band and never to 8–10. The top band is left open: a boat that saw 43 knots once should not need somebody to have guessed 44 in advance.

Bands with nothing in them are absent rather than shown as zero. There is no minimum count either — a band the sail spent one second in is reported. That is deliberate: the list is the shape of the sail’s use, not a summary of it, so there is no threshold to tune and no quiet cutoff to discover.

The coverage line

Wind data exists only where the instruments were recording, and sails go up on deliveries and practice days when nobody is logging telemetry. The platform therefore reports two numbers and never one:

Total minutes is the sail’s life. Sampled minutes is how much of that life had wind data behind it. Reporting one number would mean either overstating the evidence or understating the sail.

Whenever the two differ, the page says so in as many words — how much of the flying had wind data, what percentage that is, and that the median and the bands rest on the sampled part only.

5 The performance trend

The last question is the one an owner actually wants answered: is this sail still fast? The platform’s answer is a chart, and everything about how it is built is shaped by how easy it would be to answer that question dishonestly.

Only steady sailing gets a vote

A percentage of target measured through a tack says nothing about a sail. So the analysis first cuts the sailing into steady segments, using deliberately conservative rules:

  • Upwind and downwind are recognised inside guarded wind-angle bands, with dead zones around head-to-wind and dead downwind, so wobbling through an axis can never look like a maneuver.
  • A state must hold for ten seconds to count as a state, and a boat under two knots is drifting rather than sailing.
  • Fifteen seconds are trimmed from both ends of every run — the speed sag going into a maneuver and the rebuild coming out are not steady sailing — and what remains must still be at least thirty seconds long.

The number

For each surviving second, the boat’s speed is compared with what the polar says it should be doing at that wind speed and angle:

percent of target = boat speed / target boat speed × 100

Read as a sentence: how much of the boat’s own potential was the boat sailing, with this sail up?

A use’s point on the chart is the median of those per-second percentages, and its scatter is the median distance of those percentages from that median — a spread that is measured rather than assumed. Where the polar has nothing to say at that wind and angle, the second is skipped: a percentage of an invented target is an invented percentage.

A use with fewer than two minutes of steady sailing in it — roughly one leg’s worth — is plotted hollow, with no percentage at all. It keeps its place on the axis and reports how many seconds it had, because a use that could not be measured is information, and dropping it silently would make the chart look better-evidenced than it is.

Every sail against itself

The horizontal axis is not the calendar. It is the sail’s cumulative flying hours — its own life — so two sails bought a year apart are read on the same scale. And the baseline each sail is judged against is its own:

baseline = median of the sail's points within its first 5 flying hours

Read as a sentence: compare the sail with how it went when it was new, not with the sail next to it in the locker.

A heavy all-purpose main and a light-air main differ in absolute percent of target for ever, and that difference says nothing whatsoever about wear. The band drawn around the baseline is the median of the points’ own scatter — again measured, not invented — which is what lets you tell a real dip from noise.

When the yardstick moves

Two things can change the number without anything changing about the sail: somebody uploads a new polar, or a calibration correction takes effect. Both are drawn on the chart as labelled vertical marks.

Every point on the chart is measured against the boat’s currently active polar, including points from before it was uploaded. That is the deliberate choice: measuring each use against whatever polar was current at the time would put a permanent step in the middle of a healthy sail’s chart on the day somebody uploaded a VPP file. A new polar re-levels everything at once, and the trend inside is untouched. A mark that falls outside the plotted span is dropped — every point is on one side of it, so there is no step for it to explain.

A trend, not a verdict. Sea state, crew, rig tune, what else was up at the time, and a team simply getting better at using a sail are all real and none of them are modelled.

Read the chart as evidence for a conversation with your sailmaker. It is good at showing that something changed, and roughly when. It cannot tell you what — and a platform that pretended otherwise would be selling confidence rather than measurement.

Two gaps, named rather than left to be found: with no polar for the boat there is no yardstick and the chart says so instead of substituting the tuning-target table, whose angle convention is a different thing; and a sail whose intervals are all still open has nothing closed to plot.

Where this trend stops, and what continues it

Everything above is one number per hoist, over the whole life of the sail, in whatever wind it happened to see. It answers is anything happening, and it has one blind spot it cannot see past: a tired sail that holds target boat speed by sailing lower reads as unchanged here, because the comparison is speed at the angle that was actually sailed.

Measuring sail degradation is the second half. It measures speed made good against the polar’s best speed made good — which falls whether the boat is slower or lower — conditions every number on the point of sail and the 2-knot wind band, puts a confidence interval on the difference between the sail’s earliest and latest sailing, and compares two sails on the days they both flew. It also names the sixteen limits that method carries.