Bash Navigation Software

Navigation tools that work
with no signal at all

Six marine tools you open in a browser and use at sea: celestial navigation, the rules of the road, tides, the boat’s log, the weather, and a study machine that ships empty. They install to a home screen, cache themselves, and keep working with the aircraft mode on. No account, no server, and nothing leaves the device. Underneath, every one is generated from and checked against a POSIX sh and awk implementation of the same thing — which is why the two agree.

Drag the latitude. This is the real thing out of the weather app, not a picture of it — the wind round a low, with the angle it crosses the isobars at computed for the dials. Near the equator the air pours almost straight down the gradient; at high latitude it nearly follows the isobars. The pressure slider changes the speeds and leaves the angle alone, which is the part most people get backwards. Press Make it a high and wind the pressure up until the arrows vanish, because past a certain steepness no wind can hold a high together at all.

# three star sights, taken at morning twilight
celnav sight "2026-08-29 07:30:00" Dubhe     C "19 32.1"
celnav sight "2026-08-29 07:34:00" Bellatrix C "49 37.2"
celnav sight "2026-08-29 07:38:00" Markab    C "29 01.3"
celnav fix
The intercept plot: dead reckoning at the centre, three lettered lines of position, and the fix where they cross with its error ellipse
The same thing, as your terminal prints it
INTERCEPT PLOT  (AP at centre, N up)
                             |    N :          //
                             |      :        //
                             |      :      //
-                            |      :     //
----                         |      :   //
    ----                     |      :  //
        ----                 |      ://
            ----             |     ///
                ----         |    //:
                    ----     |  //  :
                        ---- | //   :
                            -@b-.   :
W                           /|  ----:                                   E
..........................//..c.....+a--.................................
                        //    |     :   ----
                       //     |     :      -----
                     //       |     :          -----
                    //        |     :              -----
                  //          |     :                  -----
                 //           |     :                      -----
               //             |     :                          -----
             //               |     :                              -----
            //                |     :                                  --
          //                  |     :
         //                   |     :
       //                     |     :
     ///                      |   S :                       5 nm per row
AP = +    LOP = lettered line    fix = @    1 row = 5 nm, 1 column = 2.5 nm
The plotting sheet the app draws. Your assumed position at the centre, one lettered line of position for each sight, and the fix where they cross — about ten miles north and sixteen west of where you thought you were.

celnav

A computed almanac, sight reduction with the full working shown, the fix, the running fix — and a training mode that teaches the whole subject from first principles.

colregs

The international rules of the road: lights and shapes drawn from any angle, encounter scenarios, sound signals, and fifteen lessons on the rules themselves.

tides

Harmonic prediction for 8,334 stations worldwide, each in its own standard time. The table and the curve, with the turns marked.

deck-log

The boat’s records in one book: the deck log, engine, provisions and spares. Append-only, UTC, corrections as new entries — because a log has standing after an incident.

weather

Reads your own observations and reasons about what is coming, showing its working. It cannot forecast without a network; it can make you your own forecaster.

bashnav

The launcher: one command in front of the other five, for when you are cold and the screen is wet and five names is four too many.

Open them on a phone, an iPad, or a laptop

The six tools — offline, installable, no account

Each is its own page with its own manifest and service worker, so each installs as a separate home-screen icon and caches itself on first load. Each one tells you on its own screen whether it is cached yet, rather than leaving you to guess.

They are not ports in the loose sense. Every lesson file and every data table is produced by running the awk engine’s own functions and capturing what they print rather than transcribed, and the test suite regenerates all of them on every run and compares them with what is committed — so a change to the shell that has not reached the browser fails at the desk rather than at sea. The shared arithmetic is held to the same standard: 21,264 comparisons for the rules of the road and 4,099 for contact management, against every awk on the machine.

The celestial engine was additionally diffed against the awk over 20,568 reference values when it was ported, and reproduces the shell tool’s own self-test against an independent reference ephemeris to 0.151′. The self-test runs on every suite run; that 20,568-row comparison was a one-off and its harness is not yet in the repository, which is a gap and is recorded as one.

To install one: in Safari, Share then Add to Home Screen; on a Mac, Add to Dock. Prove it once at the dock rather than at sea: open every screen, turn the network off, relaunch from the icon.

The launcher: six tiles, one per tool, with instructions for adding each to the home screen and an explanation of what offline means here
One screen, six tools. Each is a separate page so each gets its own icon on the home screen, and each caches itself the first time you open it with a signal. After that they run with no network at all — which is worth proving once at the dock rather than discovering at sea: open every screen, turn the network off, and relaunch from the icon.

Design

Why it is built this way

Three constraints shaped both tools, and each one has a consequence worth knowing.

Tool one

celnav — celestial navigation, offline

You give it a sextant altitude, a time and a rough position. It gives you a line of position, a fix, and every number in between.

Accuracy, measured rather than claimed

Checked against an independent high-precision ephemeris over 1990–2076, sampling every 11 days. The figures are total angular error in apparent position.

BodyRMSWorst
57 navigational stars and Polaris0.005′0.011′
Sun0.06′0.22′
Moon0.11′0.33′
Venus, Mars0.06–0.09′0.42′
Jupiter, Saturn0.01–0.03′0.06′

One arcminute is one nautical mile. The almanac contributes well under half a mile everywhere, which puts it comfortably below a good sextant observation from a small vessel — your instrument and your clock stay the limiting factors, as they should be. The fix arithmetic was checked separately against 200 randomised worldwide cases with exact synthetic sights: every one with sound geometry recovered the true position within 0.11 nm.

A note of caution: a phone camera is worth about two to three arcminutes once calibrated — the same order as a plastic lifeboat sextant, several times worse than a metal one in practised hands. Uncorrected lens distortion can cost tens of arcminutes, which is why the build carries a star-field calibration and says so on the page when it has not been done.

It teaches, as well as computes

Thirty-three lessons in nine modules from first principles, an annotated walkthrough of one real sight in ten steps, six kinds of drill generated from the real almanac and marked, and a sandbox where you change one number and watch the navigational triangle move. All of it is in the browser build too — the drills included, which means a drill is the same problem on either: a seed is the problem’s name, so red 4821 worked on deck can be checked at a terminal. And there the walkthrough’s three figures are the app’s own drawings rather than pictures of a terminal.

The sight reduction screen: a sight being entered, the three sights already kept with their Hc, Zn and intercept, and the fix below with its error ellipse and plotting sheet
A sight from any sextant. Enter the UT, the body and the sextant altitude and it works the correction chain, keeps the sight, and crosses it with the others. The three here are the worked example from the manual — Dubhe, Bellatrix and Markab from 35° 00′ N 040° 00′ W — and the fix comes out ten miles north and sixteen west of the assumed position, with an error ellipse of 0.9 by 0.7 of a mile. The camera is the third way of getting an altitude in here, not the first.
The almanac screen: a UT date and time, a list of bodies, and a table of Greenwich hour angle, declination, semi-diameter and horizontal parallax for that instant, with Aries at the top
The almanac, computed rather than looked up. Greenwich hour angle and declination for any instant you can name, with the semi-diameter and horizontal parallax a sight needs, and the stars’ and planets’ sidereal hour angle and magnitude underneath. Aries is always shown, because every star sight is worked from it. There is no year to run out and no volume to leave ashore.
The noon sight screen: a DR position and date, a sextant reading at the maximum, and below it the time the sun crosses the meridian, the equation of time, the altitude to expect, and the latitude the reading gives
The two latitudes that need no fix. A noon sight asks almost nothing of the clock — the altitude sits at a stationary point, so it changes as the square of the time either side of it, and this screen says by how much for the day and position you give it. Leave the sextant reading empty and it tells you when the sun crosses and how high to expect it; fill it in afterwards and it gives you the latitude. There is a Polaris screen beside it that does the same from one star, all night, and prints both the first-order correction and the exact one every time — the gap between them is what the almanac’s a1 and a2 columns exist to supply.
A polar plot of the sky with the zenith at the centre and the horizon at the rim, north up and east right: twenty-five bodies above five degrees shown as dots, with three of them ringed and labelled 1, 2 and 3
What is up, and which three to shoot. The zenith at the centre, the horizon at the rim, north up and east right — the way a star finder is drawn and the way the sky looks when you tip your head back. Everything above five degrees is plotted; the three that are ringed are the ones to take, chosen to make the smallest of their three azimuth separations as large as it can be, because three bodies in the same quarter of the sky give three lines that cross at a shallow angle and an error ellipse that is long. The screen behind it gives the twilight times in UT and local mean time, so you know the half hour you have to work in.
The Pub. 249 screen: the entering arguments derived from a sight, a seven-row page of the tables with the reader's own LHA marked, the conversion rule at its foot, and below it a comparison that names the reader's mistake as an interpolation applied the wrong way
The sight reduction tables, generated, and a tutor that marks your working. Every entry in Pub. 249 is the navigational triangle solved for whole degrees of latitude, declination and LHA — which is what the app already does for any arguments at all. Restrict them to integers and the engine is the table, so there is no data file, no copyright question, and the exact page your sight needs rather than the handful an extract would carry. It derives the entering arguments, two of which are not free choices, prints the page with the conversion rule at its foot, and then marks what you read off it. The reading here is wrong in a particular way, and the screen says which way: the interpolation was applied backwards. That is the point — the engine has already solved the same sight exactly, so a difference belongs either to the table's rounding, which is small and bounded, or to one of a handful of slips, each of which has a size of its own.
A polar plot with the zenith at the centre: three great-circle arcs join the zenith, the north celestial pole and the body, labelled 90 minus L, 90 minus Hc and 90 minus d
One spherical triangle, and three sliders. All of celestial navigation is the triangle zenith–pole–body, and its three given parts are the three sliders: the co-latitude from your zenith to the elevated pole, the polar distance from the pole to the body, and the local hour angle between them. Move one and the drawing follows, with the computed altitude and azimuth underneath. The shell draws this in characters on a grid; a browser can draw the great circles themselves, so these are the actual arcs rather than an approximation of them — and when the body goes below the horizon they are cut off at the rim rather than run into the margin, because a picture cannot honestly show a body you cannot see.

Tool two

colregs — the rules of the road

The lights are not drawings. Each one is described by its position on the vessel, its height, and its arc of visibility, and the program works out what you can see from where you are standing. Shoot her from astern and the masthead lights correctly disappear.

A vessel restricted in her ability to manoeuvre seen from 040 degrees: red over white over red, with her sidelights
The same thing, as your terminal prints it
WHAT DO YOU SEE?
----------------------------------------------------------------------
masthead height
                                    R
                                    W
                                    :
                                    R
                                    :W
                                    ::
                                    ::
                                    ::
                               G    ::
                               :    ::
                               :    ::
                               :    ::
deck                           :    ::
                 =================================
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

----------------------------------------------------------------------
You are broad on her starboard bow.
Letters are the colours: W white  R red  G green  Y yellow
Red over white over red: a vessel restricted in her ability to manoeuvre, and you are broad on her port bow — which is why the sidelight showing is the red one. She is making way, so she carries her ordinary lights as well. Every light also carries its colour as a letter, so the pattern is unambiguous in night mode, in plain text, and for anyone who does not see red and green.
Day shapes against a daylight sky: one black ball at the foremast head and one at each end of the fore yard
Three balls, and where they are matters. One at the foremast head and one at each end of the fore yard: a vessel engaged in mine clearance, and you keep a thousand metres clear of her. The screen is drawn against a bright sky because day shapes are seen by day — except in night mode, where a bright panel would cost a dark-adapted eye twenty minutes and that outranks fidelity.
An encounter laid out with the lights seen, the bearing, and four courses of action to choose between
The same thing, as your terminal prints it
WHAT DO YOU DO?
----------------------------------------------------------------------
                         HEAD  UP
                       .................
                .......                 .......
             ....                             ....
          ...                                     ...
        ..                                           ..
      ...                                             ...
     ..                .................                ..
    ..              ...                 ...              ..
   .              ...                     ...    HER       .
  ..             ..                         .. \           ..
  .              .             ^             .  :           .
  .              .             |             ..  ::         .
  .              .            YOU            .     :        .
  ..             ..                         ..             ..
   .              ...                     ...              .
    ..              ...                 ...              ..
     ..                .................                ..
      ...                      .                      ...
        ..                                           ..
          ...                                     ...
             ....                             ....
                .......                 .......
                       .................

----------------------------------------------------------------------
You are a power-driven vessel under way.
You see a power-driven vessel showing her red sidelight, on your starboard beam, heading as drawn.
----------------------------------------------------------------------
 a) Stand on: she must keep clear of you.
 b) Give way: alter to starboard and pass under her stern.
 c) Give way: alter to port to cut across ahead of her.
 d) Slow down and let her decide.
Head up, you in the middle. You are a 12 m yacht under sail, crossing a traffic separation scheme; she is a container ship following the lane, broad on your starboard bow. Being under sail does not help you here — Rule 10(j) says a sailing vessel shall not impede a power-driven vessel following a lane, and Rule 10(c) says cross on a heading as nearly as practicable at right angles to the flow.

Plotting a developing situation

The snapshot asks who gives way. This asks the harder question: is there a risk at all, how close will she come, and does your action actually open the distance? Three observations six minutes apart, with the scatter a hand bearing compass really gives you.

A relative-motion plot on the twelve mile radar scale: five marks three minutes apart running in toward own ship, with the closest point of approach marked at 100 yards
A steady bearing and a closing range. Five marks, three minutes apart, on the smallest radar range scale that still holds her — and the closest point of approach she will make if neither of you alters: a hundred yards astern. Answer the three questions and the app works the solution, then replays both tracks under the action you chose and tells you the CPA it actually produced.
A sound signal drawn as bars against a time axis: five short blasts in quick succession
Five short and rapid blasts. A script cannot make a noise, so the signals are drawn against time instead — a short blast about a second, a prolonged one four to six. This is the doubt signal, Rule 34(d): I do not understand your intentions, or I doubt you are taking sufficient action to avoid collision.

Tool three

tides — harmonic prediction, 8,334 stations

Not a downloaded table that expires. The harmonic constants are aboard, and the prediction is computed from them for any date, past or future, with no network.

No tidal current data. NOAA has 4,430 current stations but United States waters only, and worldwide coverage is the point of the thing — so it is left out rather than offered for a quarter of the planet.

A day at New London: the station and datum, the curve across twenty-four hours with the present height marked, the four turns in a table, a depth and clearance calculator, and the sun and moon for the day
A day at New London. The curve, the four turns with their heights, and the question a tide table exists to answer: enter the charted depth and your draught and it tells you what is under the keel, or the charted clearance and your air draught and it tells you what is over the mast. Sun, moon and twilight for the same day underneath, because that is the other thing you want at a glance.
Searching 8,334 stations by name: the words new and lon typed in any order, four matching stations listed with their regions
Finding the station. Type any part of the name in any order — new lon finds New London — or give a latitude and longitude and it offers the nearest. It will not compute a tide from a position alone, and says why: a tide depends on the shape of the coast and the resonance of the basin, so every place needs constants somebody measured there.

Tool four

deck-log — the boat’s records

The deck log, the engine, provisions and spares, in one book kept by one person at one moment. A watch stander says the report once; nobody says it three times at 0400.

The deck-log entry screen: the UTC timestamp and watch slot, four tabs for deck, weather, engine and stores, and the deck fields with the sea state scale
An entry, in four parts. Deck, weather, engine and stores, each declined or logged on its own, so a watch that saw nothing worth recording says so rather than leaving a hole. Position, course and speed are carried forward from the last entry and accepted by pressing return. Wind is true, not apparent — apparent changes on every tack, and backing against veering is the most useful rule at sea.
The boat screen: open defects, what is in the locker, the shopping list, equipment with its parts, and the registry as text
The boat, replayed from the log. Nothing here is stored as a state to be kept in step: the open defects, the spares aboard and the shopping list are all worked out by replaying the log. Log that you fitted an impeller and the locker count falls by one, with no second place to update and no way for the two to disagree.

Tool five

weather — read your own barometer

With no network it cannot forecast. No GRIBs, no synoptic charts, no models. What it does is make you your own forecaster from the barometer, the sky and the wind — and it says so in its own about rather than implying otherwise.

Celestial is what you do when GPS dies. This is what you do when the sat comms die.

The forecast screen: it will not show its own forecast until yours is entered, with fields for wind direction and speed, pressure and sea state
Yours first. It holds its own forecast back until you have written yours down — because a forecast you read before committing is not a forecast you made, and the whole point is to turn you into your own forecaster. Then it scores both against what actually happened. There is no observation in the log it can cheat from either: it has no network at all.
The 500 millibar chart screen: fields for the bearing and distance of the surface low, its pressure, and the hemisphere
From a 500 mb chart. The app cannot fetch a chart and never will, but a 500 mb chart arrives by HF radiofax, on an SSB receiver, with no connectivity at all — which is exactly the situation the rest of this is built for. Give it three numbers off the fax and it walks the rules on the steering flow above the surface weather.
The gunnery demonstration: a gun at the centre of a full compass rose, trained north, the shell’s track curving right of the aim, sliders for bearing and latitude, a Fire button, and three named components with their figures — turning with the earth, the Eötvös effect, and the shell’s own climb and fall
Coriolis, demonstrated by naval gunfire. Train the gun anywhere round the compass, set the latitude from 80° S to 80° N, and fire. The lesson behind it stands off the planet and works in the frame where nothing curves and nothing pushes: what is conserved is angular momentum about the earth’s axis. A shell fired north from 45° N is carried closer to that axis, must run faster east to keep u × r, and outruns the slower ground beneath — fired south it lags the faster ground. Going north, east is to your right; going south, west is to your right. Both deflect right. But that story only explains a shot that changes its distance from the axis, and an east–west one does not — so the demonstration names all three components and shows them change as you train the gun. Turning with the earth is 2Ω·V·sin φ, about 176 m at 45° N and the same at every bearing. The Eötvös effect acts on the east–west component alone, so a shell fired east carries 169 m further and one fired west falls that much short. Its own climb and fall adds 61 m to the west whichever way the gun points, and — unlike the other two — does not reverse with hemisphere. Which is why fired north at 45° N the drift is 115 m and fired south it is 238 m: both right, not both the same. The gun trains the full 360° for exactly that reason — the westward term only adds to the drift on the bearings whose right-hand side faces west, and a half-circle cannot reach them.
The wind demonstration: three dotted isobars round a low, eight arrows standing on the middle one and crossing it inward at a shallow angle, a dashed tangent at each arrow’s foot showing the gradient-wind direction, sliders for latitude, surface and pressure gradient, and a button to make it a high
And the same circle, for the wind. Larry asked for this one and asked for the science to be checked first, which was the right instinct: the version he described had the wind crossing the isobars less as the pressure gradient rose. It does not. In a frictionless balance the wind already follows the isobars exactly, at every gradient and every latitude, so there is nothing for centrifugal force to improve on — and what turns the wind across them is friction, for which the balance gives tan α = k/f, with the pressure gradient cancelling out of the angle entirely. A deeper low gives you more wind at the same angle. With the quadratic drag water really has it goes the other way again, the angle growing with the wind, which is why a hurricane’s boundary layer runs 20–30° of inflow. What does set the angle is the surface and the latitude: 48° of inflow at 10° N over water, 15° at 45°, 11° at 75°. Centrifugal force changes the speed instead — below geostrophic round a low, above it round a high — and for a high there is a hard limit where no solution exists at all, which is why a deep tight low is ordinary and a tight intense high does not occur. Press Make it a high and wind the pressure up to watch the arrows disappear.

Tool six

drill — a study machine with nothing in it

Sections, recall practice, and a graded test that opens the next section when you pass it. What it does not have is any material: you load a content pack from your own device, it is read by the page, and it is kept in that browser’s own storage.

The drill home screen with no pack loaded: load a pack, why it works this way, and how to make one
A study machine that ships empty. It holds no questions and no material of its own. You load a pack from your own device, it is read in the browser, and it never leaves the device — which is the point: material somebody else owns can be studied without ever being published. The machine is published; the material is yours and stays yours.

And a launcher

bashnav — one command in front of five

Pure sh, no awk, no network. It finds the tools next to itself, on the path, or in the place the operating system actually lets an app write, and puts a numbered list in front of them.

Detail

Colour, and night vision

Three modes, remembered between sessions: day, night, plain.

Night mode is deep red on black, with highlights in a brighter red, and contains no green at all. Rebuilding dark adaptation takes about twenty minutes, and a bright screen at 0300 costs you every one of them. Whatever colour marks the assumed position and the fix on the plot marks the matching symbol in the key underneath, so the legend reads as a colour match rather than a list.

Plain mode emits no escape sequences, and is selected automatically whenever output is not a terminal — so a redirected fix is always clean text.

celnav night
colregs night

Getting it

Install

Copy the file, make it executable, run it. That is the whole procedure.

git clone https://github.com/navigationtools/bashnav.git
cd bashnav
./bin/celnav doctor        # checks your awk, your clock, the data folder
./bin/colregs about

On macOS, Linux and the BSDs there is nothing to install — the system awk already has what the tools need.

On an iPad

Nothing to install. Open a tool above in Safari and add it to the home screen — no shell, no awk, no package manager, no gawk. That is the route this page leads with and the one to use.

The shell build does still run on an iPad, under a-Shell or iSH, which is worth knowing if you would rather have the tools at a prompt than as apps. a-Shell already carries an awk with the maths library. Under iSH only, the BusyBox awk is sometimes built without it, and apk add gawk inside iSH supplies one — apk is Alpine's package manager and exists nowhere else. celnav doctor says which you have and names the fix. iOS gives an app only its own sandbox to write in, so the tools keep their data under ~/Documents, the one place a-Shell can create files.

Documentation

celnav manual (PDF, 11 pages) · quick reference card (PDF) · source on GitHub

Cautionary note

These are training and cross-checking tools, not certified navigation equipment.

The accuracy figures above describe the arithmetic, not your fix. A fix is only as good as the sight, the horizon and above all the time — four seconds of clock error is one nautical mile of longitude. Carry the tables, and know how to use them.

colregs is a training aid. It is not the rules and carries no authority. The COLREGs as published by the IMO are what govern at sea; where this program and the Convention differ, the Convention is right and the program is wrong. Nothing here relieves any vessel, owner, master or crew of the consequences of neglecting to comply with the rules, of neglecting a proper look-out, or of neglecting any precaution required by the ordinary practice of seamen.

How it is checked

What the tests cover, and what they cannot

Two suites run on every change, under four awk implementations and two shells. They check the invariants — every drill marks its own correct answer as correct; every lights question has exactly one right answer, six hundred of them checked; the light tables satisfy Annex I wherever Annex I is geometry; a bearing drawing away from your bow never crosses ahead, four hundred fresh geometries a run; the almanac agrees with an independent reference ephemeris; three star sights from a known position resolve back to it. Alongside them, about twenty-six thousand lines of golden files capture every screen the tools can produce, so any change to what you see becomes a diff somebody has to accept on purpose.

None of that can tell you whether Rule 27 says what the program says it says. A test can check that a quiz marks answer C as correct; it cannot check that C is right. It can check that a light table is geometrically consistent; it cannot check that a mine clearance vessel shows those lights. Those are judgements against a document, and they need a person holding the document.

So if you are going to send one thing, send one of these — in the order of how much damage a wrong one would do:

  1. Who gives way, and what to do. The twenty-eight encounters and the sixty-five distinct give-way calls the lights quiz can make. A wrong light table makes you misname a ship; a wrong verdict here makes you turn the wrong way. This logic was written backwards once during development and caught by a reader, not by a test. Rules 12–18.
  2. The light tables. Twenty-two vessels, and every picture, question and answer is computed from them. Two errors have already been found — both by somebody looking at a picture, trying to account for every light in it, and failing. Rules 20–31 and Annex I.
  3. The teaching. The lessons paraphrase the rules rather than quote them, and a paraphrase that is nearly right is worse than one that is obviously wrong.
  4. Distractors that are also correct. The lights questions are proved to have a single right answer. The encounters are not — an option that is also defensible would mark you wrong for being right.
  5. What is missing. No test notices an absent vessel, an absent rule, or an exception that goes unmentioned.

Both tools carry the same list: colregs about, then 3 and 5. A fix that disagrees with your own worked sight, or an almanac value that disagrees with a printed Nautical Almanac, is the most valuable thing you can send about celnav — it has been validated against a computed reference, never against the book.

The tool that stops teaching and asks to be taught

Everything above is an argument, and arguments are cheap. colregs review is the part that does something about it: 163 claims the tests cannot check, put to you one at a time, with the Convention open beside you.

colregs review          # then 1, “carry on from where I left off”

Each claim offers four answers — correct, wrong, or correct but with a comment, and skip. Both of the first two ask for one line about what is wrong. It remembers what you have already answered, so you can do ten claims and come back a week later. When you are done it builds a report and prints a link that opens a GitHub issue with the report already in it: the program never opens a socket, so nothing leaves your machine until you press return in your own browser.

The claims are generated from the same tables the code runs on, so the list cannot drift from the program, and they are ordered by how much damage a wrong one would do — encounter verdicts and give-way calls first, day shapes last.

It works, and the third answer is the one that earns its keep. The first run through it covered 36 of the 163 claims and found three faults: a scenario that said “you see” a fog signal you can only hear; a give-way call that told you to stand on against a vessel constrained by her draught; and a contact carrying two bearings that could contradict each other. All three came from claims marked correct, with a comment rather than from the ones flagged wrong — and each turned out wider than the claim that exposed it: one became two, one became nine, one became seven. The suite was passing 1,234 checks throughout.

Corrections to the astronomy are just as welcome and have no equivalent tool yet: celnav, tides and weather make claims a test can only check for self-consistency. Those go in an issue the ordinary way, and saying which source or edition you are working from is the most useful thing you can add.