Skip to content

Release 0.9.2 - #108

Merged
addisdev merged 16 commits into
mainfrom
develop
Oct 23, 2026
Merged

addisdev merged 16 commits into
mainfrom
develop

Conversation

@addisdev

Copy link
Copy Markdown
Owner

Release 0.9.2: develop → main. See CHANGELOG.md [0.9.2]: devices can be reserved for one kind of work, and a host job pinned by device_id matches once claimed (#106); the reference lab's brain moves to ultra (#105); the explore night reloads a model dropped mid-run and stops judging missions that never drove the app (#101).

The release branch (#107) passed every ci.yml check, changelog coverage included.

🤖 Generated with Claude Code

addisdev and others added 16 commits October 18, 2026 09:26
…app, fail fast on Xcode's first launch

The first three nights on 0.9.0 (10-15..10-17) on ultra:

- The model shelf unloaded Holo4 as idle under memory pressure mid-run four
  times; later missions ended at step 0 on "Invalid model identifier". The
  workload now runs the night's warm-up again (FLEET_EXPLORE_WARM, from
  explore-night --warm) and retakes the step, twice a mission at most.
- The judge filed the untouched or abandoned screens of those missions as goal
  findings (#70, #71, the bug garden's 10-17 goals). A mission cut off by the
  model server or device, or abandoned by the model, is no longer judged; a
  cut-off mission counts as explore_cut_off and an unfinished cut-off bench
  card is not scored.
- Dozehound hides its channel bar six seconds after a press, so the final
  look failed bench-focus-all-channels on a screen the model had answered
  from correctly. A bench card is also checked on the model's last look when
  nothing touched the device after it.
- Xcode 27.1 arrived without its first-launch install: every FleetDriver start
  exited 70 (CoreSimulator out of date) a minute in, card after card.
  explore-night --sim checks xcodebuild -checkFirstLaunchStatus before warming
  and fails with the fix named; the workload stops at the first such error.
- A failed explore job's error is its device's reason, not "see their rows".
- explore-night's log prefix is local time, like the times in its lines.
- changelog-coverage exempts release/* and develop->main pull requests (#98).

Runbook: the 10-15 tvOS bench (5/10 each model, bar met) and iOS night.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…OLD_PID)

The night command sets SHELF_HOLD_PID to its own pid before warming; the shelf's warm-up records
that as a hold and leaves the model loaded while the process lives (addisdev/model-ladder#31).
The re-warm after a drop inherits it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Explore: survive a dropped model, judge only missions that drove the app, fail fast on Xcode's first launch
#101 merged into develop after the 0.9.1 release, and the merge placed its
bullets under the renamed [0.9.1] heading. v0.9.1 does not contain it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CHANGELOG: #101 is unreleased, not part of 0.9.1
The brain answers on ultra's loopback (127.0.0.1:8789) and, for the shelf,
through lan-forward.py under /usr/bin/python3: ultra's stealth firewall drops
LAN connections to Homebrew node. Night manifests use the local brain with no
tunnel; the ultra tunnel plist is gone; the workstation tunnel goes to ultra
(LAN, then tailnet). backup-brain.sh gains FLEET_BACKUP_OUTBOX and
FLEET_BACKUP_NO_DB. Docs follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A device reserved with `fleet device reserve <id> <label>` is offered only
to a job whose new `reservation` field is that label and that pins the
device by id (targets.device_id, or a targets.match such as
device_id == '<id>'). Fan-out, pools, unpinned matches, the composer's
preview, device-executor claims and host-executor routing pass it by, and
the host executor applies the same rule to the devices it can see, from the
`reserved_devices` map its claim now carries. A job that pins a reserved
device without the label is refused with device_reserved.

For the growth pilot's signed-in Instagram phone on ultra, which would
otherwise be open to any os ~ 'android' job, a fan-out or the explore night.

Reservations are a table in the brain's database (device_reservations), so a
phone can be reserved before it is cabled up and survives the registry
forgetting it. POST /api/v1/devices/{id}/reserve and /unreserve (admin);
reserved_for on /api/v1/devices, `fleet devices` and fleet_devices;
`fleet run --reservation`.

Also fixes the executor describing an Android target without device_id, so a
host job pinned by targets.match "device_id == '<serial>'" was routed to the
right executor and then matched nothing there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reserve a device for one kind of work (growth phone guard)
Version 0.9.2 everywhere and the OpenAPI document regenerated; CHANGELOG
[Unreleased] becomes [0.9.2] (#106: reserved devices, and a host job pinned
by device_id matches once claimed; #105: the reference lab's brain on ultra;
#101: the explore night survives a dropped model and stops judging missions
that never drove the app).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@addisdev
addisdev merged commit 53bc257 into main Oct 23, 2026
56 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