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
125 changes: 61 additions & 64 deletions CHANGELOG.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.8.0
0.9.0
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.8.0",
"version": "0.9.0",
"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.8.0",
"version": "0.9.0",
"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.8.0",
"version": "0.9.0",
"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.8.0";
const APP_VER = "0.9.0";
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.8.0";
export const APP_VERSION = "0.9.0";
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.8.0"
version = "0.9.0"
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.8.0",
"version": "0.9.0",
"identifier": "com.addisdev.fleet-desktop",
"build": {
"frontendDist": "../ui"
Expand Down
13 changes: 7 additions & 6 deletions docs/lab.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,14 +148,15 @@ Three things have to be true for a status to appear:
`fleet mcp` serves the lab as MCP tools; register it once with
`claude mcp add --scope user fleet -- ~/.fleet/bin/fleet mcp`. From the dev
MacBook it reaches the brain through the tunnel, the same as the agent does.
A result whose error starts with `skipped:` means nothing ran. The 0.7.2 brain
closes those jobs as `done`; from 0.9 their status is `skipped`.
A result whose error starts with `skipped:` means nothing ran, and from 0.9
the job's status says so: `skipped`, not `done`.

From 0.8.0 there is also `fleetr`, whose exit code is the verdict, and a skill
(`fleet skill install`) that tells an agent which commands to run in what
order. [AI agents and automation](agents.md) has both. The brain here is still
on 0.7.2, so neither `/api/v1` nor the new commands work against it until it is
upgraded.
order, both installed on the dev MacBook (`fleet skill install --target
claude`). [AI agents and automation](agents.md) has both, and from 0.9 the
findings commands (`fleetr findings`, `fleet_findings`) that a morning agent
session can start from.

## The suites are not in git

Expand Down Expand Up @@ -195,7 +196,7 @@ Five enabled. All times local to fleet-host.
| `nightly-self-check` | 02:15 | fanout, pool `machines` | Disk, clock drift, a tool that vanished, or the agent is not supervised |
| `nightly-fleet-ui-smoke` | 02:30 | `fleet-host`, an Android device | **Red since 2026-08-21.** From 09-16 to early October it was `no targets attached`. The Galaxy S8+ is plugged in again and the suite now runs on it, and fails, every night; why is not diagnosed yet |
| `nightly-aliquant-shots` | 04:15 | `fleet-host`, `chromium` and `mobile-chrome` | Green. The baseline was re-accepted on 2026-09-22 from fleet-host's own captures, after Aliquant's sign-in page gained a "Forgot password?" link; the old one had diverged 2.7% on desktop and 6.1% on mobile since 09-10. The `webkit` and `mobile-safari` baselines are still the August ones, because nothing runs those projects now |
| `nightly-tvloop-hardware` | 05:00 | `fleet-host`, the Roku, exclusive | tvloop's doctor, install, contract tests and flow replay. `skipped:` until the Roku password is in fleet-host's Keychain (status `done` on the 0.7.2 brain, `skipped` from 0.9). Red from doctor means the Roku is asleep, off the network, or out of developer mode |
| `nightly-tvloop-hardware` | 05:00 | `fleet-host`, the Roku, exclusive | tvloop's doctor, install, contract tests and flow replay. `skipped:` until the Roku password is in fleet-host's Keychain (status `skipped` from 0.9). Red from doctor means the Roku is asleep, off the network, or out of developer mode |

**`nightly-aliquant-web` and `nightly-aliquant-audit` are retired** (disabled
2026-09-29). Aliquant's own CI already runs the same Playwright suite and
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.8.0",
"version": "0.9.0",
"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.8.0";
export const VERSION = "0.9.0";
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.8.0"
versionName = "0.9.0"

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.8.0"
MARKETING_VERSION: "0.9.0"
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.8.0"
MARKETING_VERSION: "0.9.0"
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.8.0"
MARKETING_VERSION: "0.9.0"
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.8.0",
"version": "0.9.0",
"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.8.0";
export const APP_VER = "0.9.0";

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.8.0
app_ver=0.9.0

# 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