The attitude reference was captured at the first sensor read, on the ground,
where a ship built to fly typically lies over. That made every tilt reading
relative to a meaningless datum, and worse: the hull's natural righting swing
after liftoff was read both as tilt and as rate response, contaminating the
very measurement the test exists to make.
- Attitude reference is now taken in the air, after an explicit righting
phase that waits for every axis rate to steady (5 s calm, 120 s cap).
Until then maxTilt() reads 0, so nothing can trip on ground attitude.
- The settled airborne attitude is recorded and reported per axis, with a
warning if the hull settles far from level even under balanced lift.
- Wizard now says outright that a ship lying over on the ground is fine.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The tilt abort was circular logic -- it demanded a balanced ship before it
would learn how to balance one. Removed entirely, and the test restructured
so imbalance is handled structurally rather than guarded against:
- Rocking probe: alternate front/aft pushes; sign = rate(+) - rate(-).
A constant lean appears in both terms and cancels exactly, so no balanced
baseline is needed. Alternating also keeps the ship rocking around its
start attitude instead of accumulating tilt. Two agreeing cycles verify.
- New BALANCE phase: with the sign known, an integral loop learns the
differential trim that actually levels this ship and saves it as the
pitchTrim warm-start. Not converging is a warning, not a failure.
- maxTiltAbort is now "measurement is good enough, stop pushing" -- it ends
a measurement early once the window is full, never the test.
- Only three failures remain: no lift, liftoff timeout, no response on any
gimbal axis.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Sign test measures rate response on every gimbal axis and picks the one
that actually answers the differential push -> pitchIndex is now MEASURED
per ship (build orientation no longer matters). Verified both-direction
response accepted at half threshold. Tilt guard watches all axes.
- Altitude supervisor: drifting out of the measuring band re-centers and
retries instead of aborting; single 7-min deadline. Faster hover trim
(0.05 -> 0.12, matches verified Ki_climb) plus an 8 s settle phase.
- Single-balloon ships: sign test marks itself done, FLY zeroes u_diff.
- Cockpit terminal now explains link status (OFFLINE checklist); autopilot
standby screen warns loudly when no modem is attached.
- Failure text points at cross-wired links (both burners firing on one pulse).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- install.lua: single entry point -- detects role from peripherals
(flight sensors = autopilot, monitor = cockpit), installs, cleans
legacy/removed files, then hands off straight into setup/standby.
Ship state (sides/calib/target/settings) is never shipped; existing
profiles can be kept or reset on re-install.
- Sign test v2: fully self-driving -- staircase power search (learns
hover), closed-loop climb, both-direction verification with auto-
escalating nudge, controlled descent. Never freefalls, also not on
Ctrl+T or abort.
- Setup wizard (ap setup): wiring pulse-walk + sign test in one guided
flow; offered automatically on first boot without a profile.
- New launcher 'ap' (stabilizeV2 kept as case-safe identical aliases;
removes Windows-host case-collision recursion risk).
- build.sh: repo is source of truth; LC_ALL=C sorted manifests;
optional --from-world/--to-world dev sync with exclude lists.
- Removed legacy v1 files and per-ship state from the repo/manifest
(26 -> 17 files in the autopilot role).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Mirrors the live CC autopilot (computer 0) and cockpit (computer 4) from the
Modda wii world. install.lua fetches each role's manifest over HTTP so the
system installs on any server regardless of computer id.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>