v3.28.0

ruvnet/ruflov3.28.0Jul 14, 2026by ruvnet

AI Summary

A minor release closing root-fix gaps related to repository supervision, telemetry, and budget control.

Key Highlights

  • Repository-level supervisor and worktree leases to manage AI worker schedules.
  • Structured per-launch token telemetry via JSON envelope parsing.
  • New 'ruflo daemon budget' subcommands for independent budget control.
  • One-time upgrade migration warning for multi-daemon fleets.
  • Fixed transitive dependency fragility by inlining a version resolver.

New Features

  • Repository supervisor implementation
  • Token telemetry parsing
  • Daemon budget control commands
  • Migration warning system

Full Release Notes

## Highlights

Closes the four remaining root-fix gaps from #2661 (PR #2663):

1. **Repository-level supervisor + worktree leases** (`workspace-lease.ts`, `repo-supervisor.ts`) — exactly one daemon per repository is elected supervisor and owns the recurring AI-worker schedule; every other worktree stays a lease-only participant (15-min TTL heartbeat) running cheap local-only workers. An explicit `daemon trigger --headless` still bypasses the gate (one-off user action, still budget/dedup-governed).
2. **Structured per-launch token telemetry** — `claude --print --output-format json`, parsed leniently via `parseClaudePrintJsonEnvelope()`, receipted through `GlobalAiBudget.recordUsage()`. Any schema mismatch degrades to "no usage captured," never breaks existing analysis-output parsing.
3. **`ruflo daemon budget show|pause|resume`** — independently scriptable budget control surface.
4. **One-time upgrade migration warning** — a pre-existing multi-daemon fleet with AI workers already enabled warns exactly once ever.

`daemon status --all` gains a "Repository Supervisors" panel.

Also fixes a real transitive-dependency fragility: `statusline-generator.ts` no longer pulls in the `semver` package just to resolve the CLI's own version — inlined a minimal, dependency-free version resolver instead.

## Test plan

- 54 new tests across `workspace-lease`, `repo-supervisor`, `claude-print-envelope`, `global-ai-budget`, `daemon-migration-warning-2661`
- 636 relevant tests passing locally (services + daemon + commands-deep)
- Full CI green on [PR #2663](https://github.com/ruvnet/ruflo/pull/2663) (one flaky, unrelated timing test in `@claude-flow/hooks`'s trajectory-graph smoke passed on rerun)

## Packages

| Package | Version |
|---|---|
| `@claude-flow/cli` | 3.28.0 |
| `claude-flow` | 3.28.0 |
| `ruflo` | 3.28.0 |