Skip to content

The ship flies itself, and the pilot decides where (docs/TODO/205 to 225) - #51

Merged
cgreening merged 110 commits into
mainfrom
the-ship-flies-itself
Sep 14, 2026
Merged

cgreening merged 110 commits into
mainfrom
the-ship-flies-itself

Conversation

@cgreening

@cgreening cgreening commented Sep 11, 2026 •

Copy link
Copy Markdown
Contributor

The ship flies itself, and the pilot decides where

Chris flew the touch controls of docs/TODO/204 on a phone on 2026-09-11 and
could not fly the ship. He wrote MOBILE_CONVERSION.md and set a new
direction. This branch takes the touch controls out and builds it: the pilot
picks where the ship goes, and the ship flies there. Twenty-one plans landed,
205 to 225. The queue is empty.

What a player does now

  • Leaving. LAUNCH asks where to go: the jump, the rocks or the star. A
    ship with nowhere to go stays on the pad.
  • In flight. Buttons over the view show where the ship can go: the
    station, a derelict, the rock hermit, the star, a canister, the next jump.
    A dimmed button says what the ship needs first. The ▶▶ icon runs the
    world eight times faster while nothing hostile is near, and changes no rule.
  • A fight. The computer lines every ship up on the target. The pilot
    holds the trigger, picks a target with the ◎ icon, arms and fires the
    missiles and the E.C.M. A hostile reads red. The bought combat computer
    pulls the trigger and fires the E.C.M., and never spends a missile. RUN FOR
    IT, the bribe and the cargo dump are buttons.
  • Docking. The course brings the ship to a halt on the slot's line. The
    rails hold the line, and the pilot matches the station's spin with DRAG TO
    ROLL and the speed with THRUST and BRAKE. A docking computer flies the slot.
  • Missions. The Navy's Constrictor after 16 kills. Five arcs across the
    first galaxy, one leading to the next, with dossiers written for each.
    Eight side jobs on the station boards, with gates: the gang hunt at eight
    kills, the lane and the escort at four, recover and rescue with scoops. The
    side hunt is a Fer-de-Lance with an Asp, a Krait and a Mamba. At Above
    Average the Dark Wheel sends for the commander: four trials, a leg in
    witchspace, and a cloaking device no shop sells (Z).
  • On a phone. Every command is a button. The station menu is rows, every
    docked screen has its keys as buttons, the gun row lives in the console,
    the fast forward and the targets are icons. A double tap or a pinch never
    zooms, the page opens as an app from the home screen, and the chart's
    names are readable.
  • Words. The commander is they. Eighteen dossiers were written under
    prompt version 4. The landing page, the README and the new pilot's
    briefing say what the game is today, in the buttons' own words.

What the work found and mended

  • A hermit could appear inside the planet: 2 of about 2,300 ships over 128
    systems. The traffic placement lifts such a ship out now.
  • A hunted ship wrecked by somebody else left its leg live for ever.
  • The fled branch that three story arcs carry had no sender.
  • A recover or rescue row trapped a pilot with no fuel scoops.
  • Docking did not work on a phone (docs/TODO/212). One stick had two
    jobs: a roll is how the ship aims, and the slot wants that same roll for
    the wings. The stretch is two stages now. The computer lines the ship up
    and halts it on the line; the rails hold the line, and the pilot thrusts in
    and matches the slot. An ideal pilot docked 0 times in 4 before, and 6 in 6
    after.
  • A picked rock or derelict was flown into, not stopped at (docs/TODO/211).
    It brakes to a stop now, measured from the hull.
  • The course rolled the ship all the way to its target (docs/TODO/210). A
    median trip fell from 41 full turns of roll to 1.3.
  • The torus drive never said what stopped it (docs/TODO/209). The drop
    names it now, and a neutral trader that comes close is announced one time.
  • An arc was offered in every galaxy at its seed index (docs/TODO/213).
    Every arc is gated to galaxy 1. A side job comes back a week after it ends.
    A smuggling run leaves its goods at the far end. A hit trader goes back to
    work after twenty calm seconds, so an escort can finish.
  • The lone Krait of the side hunt died in 3.8 seconds whatever the pilot
    did (docs/TODO/217). Three gangs flew in the probe; Chris chose the middle
    one, three deaths in eight for a stock Cobra.
  • The console grew after the shell measured it on a phone, so the targets
    header stood on the scanner (docs/TODO/222). The shell watches the console
    now.
  • The landing page's title did not fit a phone (docs/TODO/223): 409
    pixels in a 338-pixel column, and the page scrolled sideways. The README
    described the missions of July and said a survivor becomes cargo. The
    briefing named keys a phone does not have and never said fuel.

Measurements

what result
station course, clear sky 40 of 40 trips reach the hand-over, median 40 s
hermit, derelict, star courses 20 of 20, 20 of 20, 40 of 40 arrive
dock probe 504 of 504 docked, no scrape, under the new speed rule
docking mini game, ideal pilot 6 of 6 docked, against 0 of 4 before
roll on a trip to the station, clear sky 7.8 full turns before, 0.2 after
escort side job in the flight probe 8 of 8, from 4 of 8
side hunt, stock Cobra against the chosen gang 3 deaths in 8
authored mission content about 4 to 6 hours of play
README 505 lines to 372
new pilot's briefing 7 pages of 100 to 180 words to 5 of 76 to 118, every page fits a 390-pixel phone
suite 6,168 assertions, from 5,619 before 204

npm run check passes on every commit. Every save format change carries a
repair, so an existing commander's save loads, and the briefing reopens one
time at its new edition.

Still yours to judge

Whether a fight is fun, and whether the trip feels right on a phone. The
flight probe has not flown the Dark Wheel trials. The landing page keeps its
zoom lock, and the screenshots are from July. Camera views outside the
cockpit wait as issue #50.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58

cgreening and others added 30 commits September 10, 2026 22:06
The docked screens and the cockpit fit a phone, and nothing on the
flight screen takes a touch. The brainstorm of 2026-09-10 set the
shape: drag anywhere on the view to steer, hold a button to fire, a
throttle slider, a row of five command buttons along the console's
top edge, tappable prompts, and a flight menu of rows. No tilt, no
swipe and no pinch. Five milestones, with the wanted-speed rule and the
held-key methods first, because both run under node.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
A touch slider needs to ask for a speed, and a touch button needs to
hold a key. Input gains press and release, which hold a key as a
keyboard does and never make a tap, and wantedSpeed, a fraction of the
top speed or null. flightDemand gains one rule: with a wanted speed and
no speed key held, the throttle opens below it, brakes above it, and
coasts inside PLAYER_FLIGHT.throttleBand of it. A keyboard never sets a
wanted speed, so nothing changes for it.

test/flight.test.ts pins the rule on both sides of the band, and the
key's override. test/input.test.ts pins that a pressed key is held and
is never a tap.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…de to set speed

A new engine/touch.ts has two halves. TouchTracker is pure: a finger's
down, move and up by pointer id, and the stick, the trigger and the
wanted speed it writes into the input. attachTouch binds the overlay's
pointer events to it, and Input calls it when the page has the overlay.
A drag anywhere on the view is the mouse stick, with TOUCH_STICK_TRAVEL
pixels for full deflection. A held finger holds its deflection, which
stickHeld tells decayMouse, and a lifted finger decays to centre. FIRE
holds the layout's fire key with press. The slider sets wantedSpeed.
Two fingers are tracked apart. The overlay shows on a coarse pointer
only, never under a screen, and the mouse-flight command steps aside
while a finger has the stick.

test/touch.test.ts drives the tracker with plain numbers. In Chrome at
390 by 844 with synthetic pointer events, the slider took the speed
from 30% to 93%, a full drag right rolled the ship, FIRE heated the
laser while the other finger steered, and the stick decayed after the
lift.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Five buttons sit along the top edge of the console: MISSILE, E.C.M.,
JUMP, TORUS and DOCK. ui/key-help.ts paints them at boot from the
binding table, so each carries the flight key it presses, and a tap
takes the same path as a menu row. MISSILE carries both of its keys,
and the HUD swaps the launch key in once a missile is armed and lights
the button. TORUS and DOCK light while their state is on. The prompt
line carries the code of each offer beside its words, and on a coarse
pointer each prompt is a button. The browser shell listens on the row
and the prompt line as it does on a screen, and the overlay leaves a
tap on the row to that seam.

test/key-help.test.ts holds the five buttons and their keys. In the
390 by 844 frame, a tap on MISSILE armed one, swapped the key and lit
the button, and a tap on TORUS was refused as MASS LOCKED beside the
station, which is right.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
A MENU button, sixth on the touch row, opens a list over the view: the
two charts, the four reading screens, the four views, pause, and the
escape pod. ui/key-help.ts paints the rows at boot from the binding
table, so each carries the flight key it presses and a tap takes the
path a station row takes. The escape pod row opens a confirmation
inside the list, and only YES carries the key, because the pod costs
the ship and the cargo. The list is show and hide in engine/touch.ts,
and it hides once a row is pressed.

The plan named a screen under the screen host. A list of rows with the
keys on them needs no screen, no id in the host's union and no input
routing, and the seam it uses is the one every button already takes.

test/key-help.test.ts holds the rows' keys and the pod's confirmation.
In the 390 by 844 frame, MENU showed the list, LOCAL CHART opened the
chart and hid the list and the overlay, and the pod's row opened its
confirmation, which NO closed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…how to fly by touch

The first touch on the view asks the browser for the whole screen,
because a phone's browser bars take a fifth of it otherwise, and a
refusal costs nothing. The manual's flight section and the briefing's
first page each gain a paragraph on flying by touch: drag to steer,
hold FIRE, slide for speed, the five buttons, MENU and the tappable
offers. The two lists of touch buttons join the constants gate's list
of prose tables.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
test/key-help.test.ts crossed the size ceiling at 420 lines, and
test/flight.test.ts at 402, each with the checks this plan added. The
command row and the flight menu are one subject, and they are
test/touch-controls.test.ts now. The wanted-speed rule belongs with the
touch tracker, and it joins test/touch.test.ts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The outcome is recorded in the plan, with what it did not have: the
flight menu is a list rather than a screen, a synthetic pointer has no
capture to give, node's strip-only mode refuses a parameter property,
and the feel on a phone is not measured here. The plan moves to
completed/, its line joins the archive index, and the queue in
README.md and QUEUE.json is empty.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris flew the preview on 2026-09-11. The overlay stopped at the
console, so a thumb on the console steered nothing. It covers the whole
screen now, and FIRE, the throttle, the command row and the menu keep
their places above the console. A drag down raised the nose, as a
stick and the mouse do, and that is upside down under a thumb. A drag
up raises the nose now. The sign flips in the tracker and nowhere else,
so the mouse keeps its own convention. The manual and the briefing say
so, and the plan records both.

In the 390 by 844 frame, a drag that started on the console and moved
up took the pitch marker to 93% and the docking port marker to the top
of the view.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…hip flies it

Chris flew the touch controls of 204 on a phone on 2026-09-11, and he could
not fly the ship. He wrote MOBILE_CONVERSION.md and set a new direction.

- 205: the pilot picks a course from a list, and the ship flies it. The
  launch needs a course. The touch controls of 204 go.
- 206: in a fight, the computer aims at the pilot's target. The pilot fires
  the laser, the missiles and the E.C.M. The bought combat computer does all
  of it.
- 207: the dock stays a challenge. Chris played four concepts and picked
  Match the spin.
- 208: each of the eight mission verbs gets a course, and four faults that
  the review found are mended.

Camera views wait, as GitHub #50.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris could not fly the ship on a phone by a drag and a FIRE button. He
chose a different game: the pilot picks a course, and the ship flies it.
So the code of 204 goes: the touch overlay, the wanted speed, the command
row, the tappable prompts, the flight menu, the fullscreen request, and
the manual's and the briefing's paragraphs on touch flight. Every file
went back to its state at 81fcb2b, the commit before 204's code.

Input.press and Input.release stay, with their test. A button holds a key
with them. 206 needs one for the laser, and 207 needs two for THRUST and
BRAKE.

The 204 plan moves to retired/, with the reason, and the three indexes
say so. 5,624 assertions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
A course is one thing the ship does next with no hand on the stick. The
new game/courses.ts decides which courses the situation allows, in order.
It follows prompts.ts: a flat view in, a ranked list out, and no key. The
jump's refusal words stay in hyperspace.ts.

A row whose object exists shows even when the ship cannot fly it, and it
says what the ship needs. A row whose object is absent never shows.

The launch list cannot show the hermit. The sky is cleared while the ship
is docked, and the launch draws the hermit. So the launch offers the jump,
the rocks and the star, and the hermit shows in flight. The plan says so.

5,656 assertions, from 5,624.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
- The flight keys stay. A key takes control during a fight, and a new
  button takes a mouse click on a desktop.
- The bought combat computer never launches a missile. A missile costs
  money, so the pilot targets and fires one by hand.
- The rocks and the star are launch courses. Chris confirmed the reading.
- MOBILE_CONVERSION.md stays out of the repository, so the plans quote it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
A picked course now flies the ship. The new game/course-pilot.ts decides
one frame and reports a FlightDemand, as the two computers do. The
station course points at the station and runs the torus whenever the
drive is free. Inside the docking computer's range it hands over, with
no computer fitted, which is the stopgap until 207. The jump course flies
straight while the countdown runs.

The switch lives in flight-instruments.ts, beside the other switches that
change who flies the ship. A flight key suspends the course (Chris: "keep
the keys"). The course and the finished courses are session state, so a
save carries them, and a dock or an arrival ends the visit.

Measured over 20 systems: every trip docked, with a median of 148 s. The
traffic holds the torus down for 111 s of it, three stops at the median,
one in three with a hostile ship. Chris chose a skip forward button at
one fixed speed, and the plan gains it as M7.

5,676 assertions, from 5,656.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…inside the planet

An arrival course flies to a standoff from its target and stops there.
The derelict course matches the generation ship's drift beside it. The
hermit course arrives slow enough for his trade to open. The star course
holds inside the scoop range until the tank is full. Every line goes
round the planet at a clearance above its mass lock.

The work found a hermit 1,545 units inside the planet. The scatter round
the station never checked the planet: 2 of about 2,300 ships over 128
systems appeared inside it. The traffic placement now lifts such a ship
out to SPAWN_PLANET_ALTITUDE, and it draws nothing from the seeded
stream. The spawning test keeps lifted ships out of its scatter band, and
checks that nothing sits lower.

Measured with the arrival's traffic: 20 of 20 hermit trips, 20 of 20
derelict trips and 40 of 40 star trips arrived. The cabin peaked at 0.489.

5,694 assertions, from 5,676.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris's rule: no ship leaves without somewhere to go. The LAUNCH row now
opens the launch list. A jump leaves with its countdown running. The
rocks and the star leave on their work. A row the ship cannot fly
refuses, and the console says why, so a commander with no target and no
work stays on the pad. The last row opens the galactic chart.

course-actions.ts joins the course list to the Game: it builds the view
and applies a pick. The course rows send virtual codes from COURSE_KEYS,
which the flight buttons of M5 will share. jumpCheck gives the jump key
and the list one question.

5,708 assertions, from 5,694.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…r the view

In flight the course list is a set of buttons at the top right of the
view. It shows by itself when the ship has nowhere to go: after an
arrival, when a course ends, and when a key takes the ship. A lit button
says what the ship is doing, such as HEADING TO THE STATION, and a click
or a tap on it opens the list again. A button the ship cannot use says
what to do about it.

It is not a screen, because the flight world stops under a screen. Each
button sends a code, as a menu row does, and the course actions read the
codes in flight. No key is bound (Chris: "We don't need to use the
keyboard. We have mouse and touch."). The words are the player's (Chris:
"A user does not have all our context.").

5,721 assertions, from 5,708.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
While the ship flies somewhere and no hostile ship is near, a FAST
FORWARD button runs the world eight times faster (Chris: "Fixed speed -
let's keep it simple."). The loop runs more fixed steps in each screen
frame, and it changes no step: a test shows that a trip under fast
forward reaches the same world as a normal trip.

Fast forward stops by itself when the condition light turns red, when
the ship arrives, or when a flight key takes the ship. A console line
keeps its time in the player's seconds, so it can still be read.

Four older constants that equal 8 take their own rule IDs, as the
constants gate asks.

5,732 assertions, from 5,721.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…tons

The manual's first hour and the briefing's FLY THERE page now teach the
launch list, FLY TO THE STATION and FAST FORWARD, in place of the jump
key and the torus key. The manual says that a steering key takes the
controls back. The briefing's journey test now asks for the buttons.

The browser run found two faults. The station menu's two columns split
the launch list, so the list has one column. The course buttons showed
during a tunnel, where a press does nothing, so none show then.

205 lands: the flight probe runs, and the dock probe docks 504 of 504
approaches with no scrape. 5,733 assertions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The new game/targets.ts lists every ship, rock and derelict within
scanner range. The ships that attack come first, nearest first, and the
rest follow. Each row says what the ship is, and what an attack costs
where the law protects it. A trader is on the list (Chris).

The pilot's pick is one flag on the picked ship's state, so a save
carries it with the ship. It sits on top of threat-lock.ts, which keeps
its rule for the three places that share it.

5,746 assertions, from 5,733.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…puter the trigger

A fight now gives every pilot the computer's aim. When a hostile ship is
near, or the pilot picked a target, the co-pilot lines the ship up. It
flies at the pilot's pick first, and at the threat lock's choice with no
pick. Without a combat computer it never fires: the laser, the missiles
and the E.C.M. are the pilot's (Chris). With one fitted, it also fires the
laser and the E.C.M., and never a missile (Chris: "missiles cost money").

A flight key takes the controls, and the computer waits until the pilot
picks a course or presses the aim's key. A course waits through a fight
and flies on when the area is clear. The automatic start says nothing on
the console, because a fight's first lines matter more.

5,756 assertions, from 5,746.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…M. and targets

Bottom right of the view, above the console: FIRE LASER fires while it
is held, the missile button arms one and then fires it, the E.C.M.
button shows when one is fitted, and TARGETS opens the list of what the
ship can fight. A row picks its ship and hands the stick to the computer.
LET THE COMPUTER CHOOSE lets go of the pick. The keys of today still
work, and the new buttons need none (Chris).

engine/hold-buttons.ts holds a key down while a button is held, one
pointer at a time. A target row's code names its ship, so a list that
reorders by range cannot pick the wrong one.

5,774 assertions, from 5,756.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
RUN FOR IT is a course, and it leads the list while a hostile ship is on
the scanner. It says whether the ship is faster, only a little faster, or
no faster. The ship turns away, opens the throttle and runs the torus
when the mass lock lets go. The computer's aim waits while it runs.

Every offer the situation raises is a button now, under the courses: pay
the police, jettison a tonne, dump the evidence, the distress beacon and
the docking computer. Each names its key under the words, so a keyboard
pilot loses nothing. The E.C.M.'s offer lights the E.C.M. button. The old
line of prompt text is gone.

The cockpit view crossed the size ceiling, so what a button says moved to
cockpit-buttons.ts, and the cockpit's header says so.

5,791 assertions, from 5,774.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
COLLECT EVERYTHING flies the ship onto each canister and pod within
scanner range, nearest first, and the pilot can stop it with another
course. It needs fuel scoops, and the row says so when they are missing.
It shows only with a clear scanner.

MINE THE ASTEROIDS keeps the nearest rock picked as the target. The
computer lines the ship up and the pilot fires, which is the fight of
this plan applied to a rock. The course ends when no rock is left within
range, and the ore is collected by the other course.

5,804 assertions, from 5,791.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The briefing's fight page and the manual's Trouble section now teach the
buttons: FIRE LASER, TARGETS, ARM A MISSILE, E.C.M. and RUN FOR IT. They
say that a missile costs money, that the bought combat computer does the
rest, and that a steering key takes the ship back. The briefing's journey
test names the buttons in place of the missile keys.

206 lands. The probes ran: ambush-probe survived 40 of 40 episodes, and
the other three report as before. None of them flies the Game's own seat,
so the measure of this plan is test/aim.test.ts and Chris's verdict.

5,804 assertions, from 5,733.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…ot checks the speed

The station course hands the ship over at the docking computer's range
when one is fitted, and that computer flies the slot as before. With none
fitted, the course flies on to 1,500 units and hands the ship to the
pilot. The computer then holds the ship on the slot axis, and the pilot
matches the station's spin and the speed. The stretch ends if the ship
leaves the approach.

The slot now refuses a ship that arrives above SLOT_SPEED_LIMIT, which is
120. dockingOutcome answers roll and speed together, so no caller holds
half the rule, and the console says which one refused. The docking
computer settles at 110, and the dock probe still docks 504 of 504
approaches with no scrape.

5,807 assertions, from 5,804.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The last stretch shows three controls and no guns: a strip to drag for
the roll, and held THRUST and BRAKE buttons for the speed. The strip is a
new platform seam beside the click and the held button: it reads how far
the pointer is from its middle and reports a stick, and a roll key still
beats it. The label over the view says MATCH THE SLOT — GO IN SLOWLY,
and the speed bar carries a mark at the fastest the slot will take.

5,820 assertions, from 5,807.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…brakes for it

The manual and the briefing now say that the ship flies the approach and
hands you the slot, that the roll and the speed are yours, and that a
scrape bounces you clear to try again. A docking computer still flies the
slot for you.

The browser run found three faults. The course list showed during the
stretch, and it shows none now. The hand-over came at full speed, so the
station course arrives on its own braking plan: measured over 25 systems,
the hand-over comes at 224 to 228 units a second with 1,500 units left,
which is half a second of braking. The mark on the speed bar is green, so
it reads over the amber fill.

5,820 assertions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…e speed

Chris played the four concepts and picked Match the spin. The course flies
the approach and hands the pilot the last 1,500 units at the slot's own
speed. The computer holds the ship on the axis, and the pilot matches the
station's spin and the speed. A ship that arrives rolled wrong or too fast
scrapes and bounces clear, and tries again. A docking computer still flies
the slot.

5,820 assertions, from 5,804.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
A live job now shows as the first row of the course list, in its own
words, and the ship flies it. Five verbs need a course, and four shapes
cover them. A hunt picks its ship and the computer's aim flies it, as
mining does. A scan holds 1,200 units off and keeps the nose on the ship.
An escort flies 600 units off its charge, so the fight comes to the
pilot. A recover and a rescue are a scoop. A deliver, a smuggle and an
ambush end at the station, which the station course already flies.

The test accepts each side job through the mission machine and flies it
by its button alone.

5,831 assertions, from 5,820.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
cgreening and others added 28 commits September 13, 2026 19:00
Chris, 2026-09-13: "rather than a single ship - it should be a gang of
pirates", and "a tough gang". The lone Krait died four seconds after the
fight started, whether it ran or not.

The hunt verb gains gang, a list of hulls that fly with the target. The
machine mints a record for each member under the leg's tag, so a dead
member stays dead across an arrival, and the arrival spawns the members
that live from the record. The verb counts them: a kill of the leader or
of a member is one ship gone, the console says how many are left, and the
leg ends when every ship is gone. A leader that died ends it with
targetDestroyed. A leader that ran, or jumped out, is marked gone and
fled on the record once a leg took the word, and the last ship gone then
ends the leg with targetFled, or targetEscaped when the leader left last.
The Constrictor's verb takes no such word, so it stays and comes back.

The side hunt is a Fer-de-Lance with an Asp, a Cobra Mk III and a Mamba:
four hulls, three missiles, two E.C.M. fits and 396 energy points. The
whole gang pays 1,500 Cr, and a gang whose leader got away pays half.
The course row says HUNT THE GANG with the count left, on the leader
while it lives and then on the nearest member, so missionCourse takes the
commander's place. The dossier prompt names the gang, and a lone hunt's
line is as it was so no other dossier drifts. The lint holds a member to
a pirate roster row.

The machine crossed the size gate by fifteen lines. What a settlement
pays and says is settlement.ts now, and how a lead is saved is leads.ts.
The map names both.

Plan 217 (M1). Tests: the verb's count in any order and its two pays, a
member that never runs, the arrival's four ships and a dead member that
stays dead on the next arrival, and the leader's run and chase from 214
M4 on the gang. The side hunt's dossier follows on Chris's run.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris, 2026-09-13: "I'm also wondering if we should start gating side
quests by equipment/number of kills?"

The gang hunt asks for the kills of the second rung, Mostly Harmless, and
the lane job and the escort ask for half of that. Both numbers are
constants derived from the rating table, so they hold their reason. The
delivery, the scan and the smuggle stay open, and the two scoop jobs ask
for scoops as before. A shut gate hides the job, as the Navy's does.

Measured over the 256 boards: a Harmless commander with no scoops finds
69 empty, with scoops 6, at four kills 11, and at eight kills with scoops
none. Every test and probe that accepts a gated job now carries sixteen
kills and says so, and the shared boardFor fixture bloods its commander.
The dock test at Lave reads two side jobs for a fresh commander, from
three.

Plan 217 (M2). A test walks a fresh commander's board and a blooded one's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The flight probe flew three gangs, each led by the Fer-de-Lance, against
a stock Cobra with a pulse laser. With an Asp, a Cobra Mk III and a Mamba
the commander died six times in eight. With an Asp, a Krait and a Mamba,
three. With a Krait, a Cobra Mk III and a Mamba, nobody died, and the
shields ended about half down. Chris chose the middle gang.

The lone Krait took 7 seconds. The gang takes 34, and it costs energy and
shields. The results are archived beside the earlier runs.

Plan 217 (M3, the numbers). The words follow on Chris's dossier run, and
plans 214 and 217 land on it together.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
… is a gang

The side hunt's dossier is written again, by Chris through claude -p with
Sonnet 5, against the final skeleton: the gang's hulls, the leader that
may run, and a story line for each of the four endings. The drift gate
passes, and the full gate reads 6,153 assertions with none failed.

Both plans move to the archive with their outcomes. The queue is empty.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris, 2026-09-13: "we seem to have slipped into referring to the user as
'She' 'her' - I think we may have taken the novella as fact. But the
player is the player and they give the pilot a name that can have any
gender."

The dossier prompt said "aboard her ship" and "the day she took the job",
and every generated dossier learned it. It names the commander as the
player, of any gender, now, and asks for "they" and "the commander". Its
version rises to 4, so every dossier's hash moves, and one run of the
generator writes all fourteen again.

Every comment, doc comment, test label, training tool and reference doc
that called the commander "she" or "her" says "they" or "the commander":
about 560 lines over 128 files. A sentence that grew past the cap split
in two. Other characters keep their pronouns: a patron, the rescued
survey pilot, the surveyor at Vetitice, the administrator at Xeer, and a
ship called "her" in the nautical way. The archive, the logs and the
novella are as they were.

Plan 218 (M1). The gates pass, and the suite reads 6,152 with the one
drift failure that Chris's run clears.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The fourteen dossiers are written again under prompt version 4, through
claude -p with Sonnet 5 on Chris's word: twenty requests, about a dollar
at batch rates. Every one names the commander as the player, and the
pronouns left are the survey pilot's and the Python's. The drift gate
passes, and the full gate reads 6,153 assertions with none failed.

The scan test compared the console line to the old dossier's exact
words, so any generation broke it. It reads the dossier's own line now,
filled with the world, and it still refuses ANY STATION.

The plan moves to the archive with its findings. The queue is empty.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris asked for another layer at the higher ratings, a secret society,
with the old names, a first whisper at Above Average, and a reward no
shop sells. The plan is a patron with no world, four trials on the lawless
boards, a leg in witchspace, and the cloaking device at the door. It is
queued, and the first milestone follows a small phone fix he asked for.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris, from his phone: "Can we prevent zoom by double tap/pinch. Hide
the address bar. And increase the fonts in the local chart."

The viewport meta says no user scale, and the root takes touch-action
pan-x pan-y. Where a phone honours neither, engine/phone-chrome.ts cancels
the gesture itself: a gesturestart, a two-finger move and a second tap
inside the double tap window. A web app manifest with display standalone
and the two app meta tags open the page from the home screen with no
address bar. On a coarse pointer the first touch asks for fullscreen, and
a refusal is silent, because the iPhone has no such request.

The short range chart draws its names in CSS pixels. CHART_LABEL_PX is
twelve, and the painter scales the font, the dot and the offset by the
canvas width over its width on the page, which is one under node. A name
that would run off the right edge sits to the left of its dot. Two other
constants at twelve gained a rule id, and the double tap window is on the
threshold gate's list as the platform's number.

Plan 220. A test reads the meta, the manifest and the root's rule, the
scale at half width and at none, and the names drawn at the constant.
The recording canvas keeps the font beside its colours for that. Checked
by eye in a 390 by 844 frame.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
…e chart

The plan moves to the archive with what it found. The queue holds 219.

The boot line PRESS ? FOR CONTROLS goes with it, on Chris's word the same
day. A phone has no ? key, and the station menu carries the guide and the
layout toggle as rows.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris, 2026-09-13: a secret society at the higher ratings, with the old
names, a first whisper at Above Average, and a reward no shop sells.

A patron kind wheel. Its name is THE DARK WHEEL, and it has no world, no
face and no species. A Wheel skeleton is on the board at every Anarchy
and every Feudal world, and nowhere else, by the governments' 1984 names.
That is a narrower line than the one that breeds pirate waves, which
reaches a dictatorship. A Wheel trial comes back after a failure, as many
times as its cap allows, and never after a pass. The chart calls a held
one a DARK WHEEL MISSION, and the dossier prompt describes the patron.

The first trial, wheel-mark, opens at the rung of Above Average, read
from the rating table. Its hail is the whisper: A NOTE WAITS FOR YOU. NO
SENDER, NO NAME. Its job is a gang hunt, a Fer-de-Lance with two Asps,
two to seven light years out. The pilot down completes it, pays 2,000 Cr
and sets wheel.marked. A pilot that ran or jumped fails it, whatever
became of the gang, and the Wheel gives one more chance.

Plan 219 (M1). A test reads the patron, the board at an Anarchy, a Feudal
world and a Democracy, the rung, the whisper at the dock, the walk of the
trial to its pay and its flag, the failure, the second chance and the
end of chances. The mark's dossier follows on a generator run.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
A tagged ship can fly as the law. The spawn's job gains police, and the
role table maps it to the police roster row, so a Viper spawned for a leg
scans holds as any patrol does.

The Wheel's second trial, wheel-blockade, follows the mark. It asks for a
clean record and the flag the mark set. It is a smuggle of the parcel one
jump out, and three Vipers wait at the far end. Landed unread, it pays
2,000 Cr and sets wheel.trusted. A scan on the way, or a parcel not
aboard, fails it, and the Wheel says it does not use a pilot the police
know. One more chance, as the mark gives.

Plan 219 (M2). A test reads the gate on the mark, the flag and the record,
the parcel aboard at acceptance, the three police at the far end, the
pass with its pay and flag, the scan that fails it, and a Viper the world
spawns as police.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
A placement kind witchspace. The leg's target is WITCHSPACE_TARGET, a
sentinel no system index takes, and every reader of a target knows the
word: the slot in a line says WITCHSPACE, the deadline names it, the
arrival says PAUSE, ARM THE MIS-JUMP, AND JUMP, and the chart's marks skip
it. A mis-jump spawns the leg's ships and items beside the trap, at a
mission target's reach, and the course row reads witchspace as where the
commander is. The lint refuses a leg that must dock there.

The Wheel's third trial, wheel-pilot, follows the trust. One of theirs is
adrift in a pod in witchspace. Scoop it among the Thargoids, jump out, and
land the pilot alive at any station for 2,500 Cr and wheel.proven. A pod
shot, or a pilot sold, fails it, and the Wheel does not sell its own.

The rescue verb's line names no gender now: LAND THE PILOT. The pilot's
gender is the skeleton's to say.

Plan 219 (M3). A test reads the placement, the slot, the lint's refusal
of a dock, the walk through the scoop to the landing and to the sale, and
a real mis-jump on the leg with the pod adrift among the Thargoids.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
A tagged ship can fly as a Thargoid. The hunt verb names the role its
target flies with, the spawn's job carries it, and the role table and the
lint read it. The gun warning prices the target under its own row.

The Wheel's last trial, wheel-door, opens at Competent after the pilot. A
Thargoid mothership waits in witchspace, tagged for the leg, with the
trap's own around it. The guard down completes it: the settlement grants
a fit, a new effect the bridge applies to the ship, and sets wheel.member.
The fit is the cloaking device, which no shop sells, on the equipment as
a field of its own. The status screen lists it, and says OF THE DARK
WHEEL under the rating. The words speak of Raxxla, and say no more.

Plan 219 (M4). A test reads the rung and the proof on the gate, the guard
on the record in witchspace, the grant and the flag on the pass, the fit
on a real commander through the bridge, the two lines on the status
screen, and a real mis-jump with the guard in the sky as a Thargoid. The
cloak itself is M5.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
equipment.cloak, and a key, Z, with a fifth button in the gun row, CLOAK,
lit while it runs and NOT FITTED without the fit. A ship without the fit
is told so. While it runs, no ship is hostile to the commander: the
pirates' own view carries the cloak, and the condition light, the
co-pilot's engagement, the run course's threats and the course drop read
it too. The HUD's label says CLOAKED before anything else.

The bank pays: a bank every six seconds, which is about four points a
second over the recharge, so a full pool cloaks the ship for about forty
five seconds before the last bank drops it. The draw is written in the
pools' own file, because that file owns them. A shot drops the cloak,
because a shot is a flare, and so does a dock. The console says why each
time. The manual gains one entry, and the README's key table the key.

Two files crossed the size gate. The five pool reporters are
game/pools-left.ts now, and the mission effects are missions/effects.ts,
re-exported from the model so every reader keeps its import. The map
names the effects file. Two tests that used Z as a free key use X.

Plan 219 (M5). A test reads the gate on a pirate at 800 units cloaked and
not, the light, the run course's threats, a pirate's own frame both ways,
the key without and with the fit, the drain over a second, the shot, the
last bank and the dock.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The plan moves to the archive with what each milestone found. The queue
is empty. The four Wheel dossiers follow on a generator run.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Written through claude -p with Sonnet 5 on Chris's word: nine requests
for the four, with the validator's retries, at about a dollar at batch
rates. The blockade's hail said IT KNOWS YOUR NAME NOW, and the model
followed the word into the briefing, where the ladder rule forbids it. It
says IT KNOWS WHO YOU ARE NOW, and the dossier passed on the next run.

Plan 219. All eighteen skeletons have a dossier, and the drift gate passes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris, from his phone: "The fast forward button is very big - let's just
have it as an icon." It was a second header under the course header,
with the words, a hint and the reason it could not start.

A button can be an icon now: a glyph, small, at the right under the
header, with no hint and no note. The painter gives it a class, and the
stylesheet its size. The fast forward button is two arrows, lit while it
runs and dim while it cannot start. The console already says why on the
press. The briefing and the manual name the icon where they named the
words.

Plan 221. A test reads the icon beside the course header with no hint
under it. Checked by eye in a 390 by 844 frame.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The plan moves to the archive with what it found. The queue is empty.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
Chris, 2026-09-14, with a picture from his phone: the targets header
stood on the console, every target read green, and the gun row took a
third of the console.

The overlap had a cause the picture did not show. The shell measured the
console at a window resize alone, and on the phone the console grew after
that, when the fonts landed and the gun row wrapped. The shell watches the
console itself now, where the browser can watch an element, and measures
it again whenever it changes size.

The targets header is an icon with the count: a bullseye and how many are
on the scanner, small at the bottom left, lit while the row is open, and
red while any ship on the scanner attacks the commander. A ship that
attacks reads red in the row, and a picked ship keeps its amber. The
message line on a phone stands above the icon. The gun row on a phone
keeps its notes and drops its hints, and the missile buttons say ARM
MISSILE and FIRE MISSILE. The briefing, the manual and the close-pass
line name the icon where they named the words.

Plan 222. A test reads the icon with the count, red with a hostile and
green without, lit when open, and a hostile row red beside a trader's.
Checked by eye in a 390 by 844 frame.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The plan moves to the archive with what it found. The queue is empty.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
docs/TODO/223 M1. The note under LAUNCH said "keyboard and mouse". The
game plays by touch since docs/TODO/202, 216 and 220 to 222, so it says
"keyboard, mouse or touch". A Fly bullet says the ship flies a course to
the station, the rocks or the star, and that ▶▶ skips the quiet part.
A bullet says the game plays on a phone and opens from the home screen.
The "Nobody in the game tells you where to go" line says what the game
does tell you.

The title did not fit a phone. In a 390-pixel frame it needed 409 pixels
in a 338-pixel column, and the page scrolled sideways. The stylesheet
lowers the floors of its size and its spacing, and the body never
scrolls sideways. Measured again: the title fills the column, and the
document is as wide as the viewport.

docs/PAGES-REVIEW.md is the review that found all of it, and plan 223 is
the clean-up Chris asked for.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
docs/TODO/223 M2. Chris's opening stays as he wrote it. The part after
the rule is new, and shorter: what the game is, how to run it, the
controls, the course list, the phone, the systems, the missions as they
are, the shape of the source, the documents, the legal notice and what
remains. The history of the neural pilots, the trainer essay, the
playtest harnesses and the portrait pipeline leave the README. The
training log and the trainer document hold them.

Two claims were wrong, and both are fixed. The missions paragraph named
one Navy mission; the game has the Constrictor, five arcs, eight gated
side jobs and a secret organisation. A survivor "becomes, regrettably,
cargo"; the code says a survivor is a person, and the dock asks.

The three tables the tests read stay in the same words, and so do the
seven phrases four tests pin. The four tests pass.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
docs/TODO/223 M3, and the plan lands. The missions page said the hunt
was one Krait; it is a gang of four, led by a Fer-de-Lance, since
docs/TODO/217. Each side job on that page now says what its board waits
for, in the gate's own words: 8 kills for the hunt, 4 for the lane and
the escort, fuel scoops for the recovery and the rescue, and nothing for
the four open jobs. The ? guide's layout line said "toggle with B when
docked" in play.html and in engine/keymap.ts; the station has no letter
keys since docs/TODO/202, so both name the KEYBOARD LAYOUT row.

Two tests hold the changes. The full gate passes: 6,168 assertions.

The plan moves to completed/, with the zoom lock on the landing page and
the July screenshots left open for Chris.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
docs/TODO/224 M1. Chris asked whether the keyboard section is still
needed. A pilot takes manual control in the last stretch of a dock, and
holds the trigger in every fight. Hand flying by key or mouse is a
desktop option since docs/TODO/206, and a phone never has it. He chose
to keep the option and to shrink the section.

The Controls section opens with the buttons: the course list, the fight,
the dock, the phone, the docked rows, the trainer, the market and the
charts. The keys are the last subsection: three sentences on the
steering keys, the layouts and the mouse, and the Commands table under
the heading "The keys". The Flight table is gone; the ? guide and the
manual render the steering keys from the key map. The test that holds
the table to the bindings reads the new heading.

The opening and the K row said the bought combat computer "flies your
ship". The aim is free for everyone since docs/TODO/206. Both say the
purchase pulls the trigger and fires the E.C.M.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
docs/TODO/224 M2, and the plan lands. The ? guide's K line said "the
trained defence AI flies your ship". No weights load, and the aim is
free for every commander since docs/TODO/206. The line says the computer
pulls the trigger and fires the E.C.M. for you. The manual renders the
same line from the same dictionary.

The README's course section repeated the dock's last stretch. The
Docking section is its one home.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
docs/TODO/225 M1. Chris: "I think the new pilot briefing needs a
rework?" The seven pages described an older cockpit. They put FIRE LASER
at the bottom right and the target icon above it, said a second press of
ARM MISSILE fires, named the keys Y, E, C and ? for a phone that has
none, said nobody tells you where to go, and never said the word fuel.

Five pages now, one action each: where you are; buy, sell and fuel; go;
a fight; dock. A button is named by its words, a row off the menu's
dictionary, and no key at all. The edition counter is 2, so every
commander reads the new pages one time. The journey test asks for the
rows and the buttons, and holds that no key is quoted.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
docs/TODO/225 M2, and the plan lands. On a phone the button row is
sticky at the foot of the screen box, and the keyline under it slid
behind the row on a short page. The keyline stands above the buttons.
The tour link rendered in the browser's blue; a link in a screen takes
the palette green. The manual link is /manual, as every link on the site
is. Measured in a 390-pixel frame: every page fits its box with no
scroll, and the pager and the buttons are in view.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
The first milestone's record ran to 26 words in one sentence, and the
gate read it before the plan moved out of the gated set.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cpi86XPSQzZQhVhRnZED58
@cgreening cgreening changed the title The ship flies itself, and the pilot decides where (docs/TODO/205 to 208) The ship flies itself, and the pilot decides where (docs/TODO/205 to 225) Sep 14, 2026
@cgreening
cgreening merged commit 7224e2b into main Sep 14, 2026
2 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