Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ a CI job fails when they disagree.

## [Unreleased]

## [0.9.2] — 2026-10-23

A device can be reserved for one kind of work, so a signed-in phone is never
lent to a job that only matched its OS. The reference lab's brain moves to
ultra, and the explore night survives a model unloaded under it.

### Added

- **Reserved devices.** `fleet device reserve <id> <label>` (and
Expand All @@ -36,14 +42,6 @@ a CI job fails when they disagree.
field, and `fleet run` a `--reservation` flag.
([#106](https://github.com/addisdev/fleet-runner/pull/106))

### Fixed

- **A host job pinned by `targets.match "device_id == '<serial>'"` matched
nothing once claimed.** The brain evaluated `device_id` when routing it, but
the executor described an Android target without one, so the job reached the
right Mac and then skipped with no targets. The executor's descriptor now
carries `device_id`. ([#106](https://github.com/addisdev/fleet-runner/pull/106))

### Changed

- **The reference lab's brain moved to ultra.** It answers on ultra's loopback
Expand All @@ -61,6 +59,11 @@ a CI job fails when they disagree.

### Fixed

- **A host job pinned by `targets.match "device_id == '<serial>'"` matched
nothing once claimed.** The brain evaluated `device_id` when routing it, but
the executor described an Android target without one, so the job reached the
right Mac and then skipped with no targets. The executor's descriptor now
carries `device_id`. ([#106](https://github.com/addisdev/fleet-runner/pull/106))
- **A model unloaded mid-night is loaded again.** On ultra the model shelf
unloads an on-demand model it sees idle under memory pressure, and between
two missions Holo4 is idle: on the first three 0.9.0 nights it was dropped
Expand Down Expand Up @@ -1578,7 +1581,8 @@ The first public release, when the project was still four repositories.
that starts a throwaway collector on a spare port so it never touches a live
fleet's history.

[Unreleased]: https://github.com/addisdev/fleet-runner/compare/v0.9.1...HEAD
[Unreleased]: https://github.com/addisdev/fleet-runner/compare/v0.9.2...HEAD
[0.9.2]: https://github.com/addisdev/fleet-runner/compare/v0.9.1...v0.9.2
[0.9.1]: https://github.com/addisdev/fleet-runner/compare/v0.9.0...v0.9.1
[0.9.0]: https://github.com/addisdev/fleet-runner/compare/v0.8.0...v0.9.0
[0.8.0]: https://github.com/addisdev/fleet-runner/compare/v0.7.2...v0.8.0
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.9.1
0.9.2
2 changes: 1 addition & 1 deletion collector/dash/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fleet-dash",
"version": "0.9.1",
"version": "0.9.2",
"private": true,
"type": "module",
"description": "Fleet Runner dashboard SPA. Built to dash/dist and served by the collector at /dash.",
Expand Down
2 changes: 1 addition & 1 deletion collector/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"openapi": "3.1.0",
"info": {
"title": "Fleet Runner",
"version": "0.9.1",
"version": "0.9.2",
"description": "The Fleet Runner control API.\n\nEvery list is `{items, page, per_page, total, pages}`. Every failure is\n`{error: {code, message, hint?}}`; branch on `code`. Timestamps are ISO 8601 UTC.\n\nThe usual sequence for running something: listWorkloads (pick one, copy its\nexample), validateJob (fix what it says), createJob, waitJob until\n`finished`, then read `verdict`. `skipped` means nothing ran; it is not a pass.\n\nAuth is off unless the collector runs with FLEET_AUTH=tokens. Then send\n`Authorization: Bearer <token>`; scopes are read, run (implies read), admin\n(implies run), agent (the runner protocol) and delegate (a gateway naming the\nperson it acts for in X-Fleet-Actor). Each operation's `x-fleet-scope` says\nwhich it needs. Send `X-Fleet-Source` (mcp, cli, ci...) so jobs record where\nthey came from.",
"license": {
"name": "MIT"
Expand Down
2 changes: 1 addition & 1 deletion collector/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fleet-collector",
"version": "0.9.1",
"version": "0.9.2",
"private": true,
"type": "module",
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion collector/runner-web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ <h1>Fleet Runner</h1>
* shelf forever as an offline device nobody can find.
*/

const APP_VER = "0.9.1";
const APP_VER = "0.9.2";
const SCHEMA = 1;
const BLOCK_SIZE = 4096;
const ROUNDS_PER_TOKEN = 1000;
Expand Down
2 changes: 1 addition & 1 deletion collector/src/version.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@
* which CI runs on every push. See its header for why one number across four
* components is the rule.
*/
export const APP_VERSION = "0.9.1";
export const APP_VERSION = "0.9.2";
2 changes: 1 addition & 1 deletion desktop/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "fleet-desktop"
version = "0.9.1"
version = "0.9.2"
description = "Menu-bar shell around the fleet CLI"
authors = ["addisdev"]
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion desktop/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Fleet",
"version": "0.9.1",
"version": "0.9.2",
"identifier": "com.addisdev.fleet-desktop",
"build": {
"frontendDist": "../ui"
Expand Down
2 changes: 1 addition & 1 deletion fleet/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fleet-cli",
"version": "0.9.1",
"version": "0.9.2",
"private": true,
"type": "module",
"description": "Fleet Runner's front door: one command that runs a brain, a runner, or both.",
Expand Down
2 changes: 1 addition & 1 deletion fleet/src/version.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
* it. `scripts/version.mjs` keeps it honest with every other place --
* see its header for why the number matters at all.
*/
export const VERSION = "0.9.1";
export const VERSION = "0.9.2";
2 changes: 1 addition & 1 deletion runner-android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ android {
minSdk = 24
targetSdk = 35
versionCode = 2
versionName = "0.9.1"
versionName = "0.9.2"

ndk {
// The fleet's LLM-capable devices are all arm64; 32-bit devices
Expand Down
6 changes: 3 additions & 3 deletions runner-ios/project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ targets:
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.taylab.fleetrunner
MARKETING_VERSION: "0.9.1"
MARKETING_VERSION: "0.9.2"
GENERATE_INFOPLIST_FILE: YES
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
INFOPLIST_KEY_UILaunchScreen_Generation: YES
Expand Down Expand Up @@ -106,7 +106,7 @@ targets:
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.taylab.fleetrunner.tv
MARKETING_VERSION: "0.9.1"
MARKETING_VERSION: "0.9.2"
SWIFT_VERSION: "5.9"
TARGETED_DEVICE_FAMILY: "3"
CODE_SIGN_IDENTITY: ""
Expand Down Expand Up @@ -164,7 +164,7 @@ targets:
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.taylab.fleetrunner.vision
MARKETING_VERSION: "0.9.1"
MARKETING_VERSION: "0.9.2"
SWIFT_VERSION: "5.9"
CODE_SIGN_IDENTITY: ""
CODE_SIGNING_REQUIRED: NO
Expand Down
2 changes: 1 addition & 1 deletion runner-machine/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fleet-runner-machine",
"version": "0.9.1",
"version": "0.9.2",
"private": true,
"type": "module",
"description": "Fleet Runner machine agent: turns a laptop or desktop into a device the collector can send work to.",
Expand Down
2 changes: 1 addition & 1 deletion runner-machine/src/descriptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { existsSync } from "node:fs";
import { out, readText, orNull, firstMatch, finite, run } from "./probe.js";
import type { Descriptor } from "./protocol.js";

export const APP_VER = "0.9.1";
export const APP_VER = "0.9.2";

const MB = 1024 * 1024;

Expand Down
2 changes: 1 addition & 1 deletion runner-roku/manifest
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ build_version=0
# table next to a released one's. Arbitrary manifest keys are readable at
# runtime, so the descriptor's version and the repo's version are one string in
# one place rather than a constant in the code that drifts from the manifest.
app_ver=0.9.1
app_ver=0.9.2

# Channel art. Roku draws the focus icon in the home grid and the splash while
# the channel boots; a manifest line pointing at a file that is not in the zip
Expand Down
Loading