mirror of
https://github.com/mvschwarz/openrig.git
synced 2026-11-07 05:56:21 -10:00
docs(release): 0.7.0 what's new, and a clearer managed-refresh log line
The what's-new page an agent reads after upgrading still described 0.6.12. It now lists what behaves differently from 0.6.14 and what to do about it: the migrations and settings, the clean-start environment, the plugin refresh and its copies, quiet hours and modes, rig names in place of ids, restore and launch changes, the openrig-core plugin's return to Codex seats with first-install hook trust, changed output, and the known gaps. The managed-refresh log line now says the file's previous contents were preserved before the refresh, not that custom behaviour stopped: it runs before any write, and a later copy failure can still skip the refresh.
This commit is contained in:
1 parent
ac496208b0
commit
99aaada64c
3 files changed
+126
-173
No files matched your search
+124
-171
@@ -1,7 +1,7 @@
|
||||
# What changed in OpenRig 0.6.12
|
||||
# What changed in OpenRig 0.7.0
|
||||
|
||||
This note is for an agent on an install that was just upgraded to 0.6.12. It lists only what behaves differently from
|
||||
0.6.11 and what to do about it. For everything OpenRig can do, read the capability map:
|
||||
This note is for an agent on an install that was just upgraded to 0.7.0. It lists only what behaves differently from
|
||||
0.6.14 and what to do about it. For everything OpenRig can do, read the capability map:
|
||||
`rig context get onboarding-width/public-what-you-can-do.md`. Each release replaces this file, so
|
||||
`rig context get reference/whats-new.md` describes the installed version once the upgraded daemon is running. Without
|
||||
a running daemon, read `$OPENRIG_HOME/reference/whats-new.md`. The daemon refreshes that copy when it starts, so right
|
||||
@@ -9,181 +9,134 @@ after an upgrade it can still hold the previous version's note.
|
||||
|
||||
## After the upgrade
|
||||
|
||||
- **Restart the daemon** (`rig daemon stop`, then `rig daemon start`). Twelve migrations run on the first start,
|
||||
whatever you use: `100`, `104`, `105`, `107` to `115`. They add columns and tables for the typing guard's modes, a
|
||||
seat's saved effort, Claude's cost estimate, Pi usage, mode and posture categories, workflow scope, seat environment
|
||||
values, the Codex `--no-daemon` record and `sessions.agent_app`; build two indexes for recent queue activity (about
|
||||
10 to 12 MB on a long-running install); and rebuild the Slack thread map. There are no migrations `102` or `106`.
|
||||
- **Claude seats now run the openrig-core plugin's hooks.** The bundled plugin goes from 0.1.9 to 0.1.13. A Claude
|
||||
seat whose plugins include `openrig-core` (every shipped agent spec selects it) starts with `CLAUDE_CODE_PLUGIN_DIRS`
|
||||
pointing at OpenRig's copy, so the activity relay, the compaction save and restore hooks and refocus actually run. It
|
||||
needs Claude Code 2.1.280 or later, which nothing checks. A running seat picks it up at its next launch, restore or
|
||||
handover. The refocus hook may take up to 60 seconds, so a hung refocus can hold a prompt that long.
|
||||
- **Six new settings, all off except one:** `output.whoami_peers` (8, used only while `output.compact` is on),
|
||||
`bundle.services_enabled`, `provider.subscription_moves`, `usage.pi_cost_facts`, `usage.pi_openrouter_charge` and
|
||||
`transport.verify_input_box`. See "Off by default" below.
|
||||
|
||||
## Output that changed shape
|
||||
|
||||
- **Exit codes:** eleven client-fixable `rig queue update` refusals now answer HTTP 400 and exit 1 instead of 500 and
|
||||
exit 2 (`blocker_not_found`, `blocker_not_live` and `blocker_malformed` still exit 2). `rig ask` exits 1 for an
|
||||
unknown or ambiguous rig. `rig compact` exits 1 (was 2) for `pane_unknown_protected`, and its route answers 409 (was
|
||||
502). Over the shared transport, a write that throws without a code makes `rig send` exit 1 with HTTP 409 instead of 2
|
||||
with 500, and a guarded send whose text was written returns `sent: true` with `inputPhase: "written"`.
|
||||
- **`rig compact` and `rig compact --state` add a `compact` result:** `submitted_unconfirmed` (shown as "submitted,
|
||||
unconfirmed"), `uncertain` or `not_sent`. "Submitted" means `/compact` and Enter reached the seat, not that compaction
|
||||
ran.
|
||||
- **`rig capture --lines N --json`** adds `activity: "unknown"` and `activityNote` when lines were cut.
|
||||
- **`rig start --last --json`** carries `keptDown` (always) and `warnings` (`seat_status_unreadable`).
|
||||
- **`rig queue show <id> --full`** on a closed row adds `closingTransition`; plain `rig queue show` on such a row reads
|
||||
`readView.complete: false` and lists it in `omittedFields`. `rig queue show` returns `resolution` when a close stored
|
||||
one.
|
||||
- **After `rig down`,** `rig ps`, the TUI and the rig summary read the rig `stopped`, not recoverable, and
|
||||
`hasLiveAgents` can read `false`.
|
||||
- **`rig seat status`** reads `Typing guard: on (hold)` for hold, and its JSON's `desired` and `effective` mean hold only;
|
||||
`desiredMode` and `effectiveMode` give the mode.
|
||||
- **`rig usage top`** measures tokens and rates within one conversation and one window, so figures can drop and more
|
||||
seats read `insufficient_samples`.
|
||||
- **The execution view** binds a row to a mission by its exact `mission:` tag first; `q1_lanes[].waiting` and
|
||||
`folded.merge_report` are new.
|
||||
- **Smaller:** `rig create --json` carries `detail` on failure; `rig status --json` is new; `rig mcp serve` lists 23 tools
|
||||
(five queue tools added); a JSON body of `null` gets 400 `invalid_json`; `GET /api/events` takes `?replay=`; a Slack
|
||||
seat post's sender line ends `on <host id>`; `rig ps --nodes` `resumeCommand` can carry `--no-daemon`.
|
||||
|
||||
## Seats and restore
|
||||
|
||||
- **`rig start --last` leaves down a rig stopped on purpose** (`rig down` or `rig seat stop`) and prints how to bring it
|
||||
back: `rig start --rigs <rig>`, or `rig up '<name>' --existing`.
|
||||
- **An ordinary terminal seat relaunches fresh on restore** and re-runs its startup actions; don't answer `--fresh` for
|
||||
it. A missing required startup file for such a seat blocks the whole restore before anything launches.
|
||||
- **Restore stops a seat whose current runtime differs from its snapshot's,** before launching it; `--fresh` doesn't
|
||||
bypass it. Restore from a snapshot taken with the seat's current runtime.
|
||||
- **A slow Claude restore ends `attention_required`, not failed:** "Claude resume did not finish within Ns; Claude may
|
||||
still be starting, so the launch was kept". Look at the pane, and once Claude is up run `rig seat clear-attention`.
|
||||
Each such seat can add up to about the readiness timeout, one after another, so `rig up` can pass its 120-second
|
||||
wait while the daemon keeps working: check `rig ps` before running it again.
|
||||
- **"Returned to a shell" now means the process tree shows an idle shell.** "The pane shows a shell that is not a proven
|
||||
idle shell; a launch script may still be starting …" means the seat may still be coming up. A Pi or OMP seat at a
|
||||
bare shell reads `attention_required`.
|
||||
- **A Codex fork whose new conversation ID arrives late** stops at `attention_required` with its startup context kept;
|
||||
let it finish starting, then run `rig seat continue <seat>`. A handover to a Codex fork can complete with `Fork id:
|
||||
PENDING`.
|
||||
- **A seat whose startup failed for a recoverable reason** becomes ready after a successful send or capture.
|
||||
- **`rig launch` takes a rig's name as well as its ID;** a name two active rigs share stops with `rig_ambiguous`.
|
||||
- **`rig add`, single-seat `rig launch` and `rig launch --seats` wait up to 120 seconds.** A timeout still isn't a
|
||||
rollback.
|
||||
- **A runtime `--version` check gives up after 30 seconds.** `rig bootstrap` blocks on a runtime that's installed but
|
||||
fails its check, reported apart from one that's missing; `rig up`'s preflight fails a Claude, Codex or OMP check that
|
||||
doesn't answer (a warning for Pi).
|
||||
- **Claude login detection:** only a current refusal reads `login_required`, not the "Not logged in" footer alone.
|
||||
- **Model pins:** `fable` now names `claude-fable-5-1`, a trailing `[1m]` is set aside, and pinned Pi seats are checked
|
||||
(a `:high`-style thinking suffix is accepted).
|
||||
- **A custom permission policy saved with CRLF line endings** now takes effect at the next launch or restore, instead
|
||||
of the advisory floor.
|
||||
- **`rig scope mission create`** writes `status: planned`; set it `active` to count it in `rig proof show --project`.
|
||||
With `--workspace <project>`, missions go under the project's declared `missions.root`.
|
||||
|
||||
## Sends, wakes and the queue
|
||||
|
||||
- **A send to a pane in tmux copy or view mode** leaves the mode and delivers; `pane_in_mode` means the pane couldn't
|
||||
leave its mode. Leave it in that pane, then send again.
|
||||
- **`rig send --dangerously-interact` types exactly what you give it.** Enter is added only for a complete answer
|
||||
staged in a recognised Claude Code or Codex input box; anywhere else, put CR in the payload. With `--verify` it reads
|
||||
unchecked.
|
||||
- **A Codex seat reads "needs you" only when a real prompt is visible;** a pending permission request reads
|
||||
`permission_request_pending` first, and an unreadable pane gets `permission_request_unverified` after a grace.
|
||||
Codex's `»` prompt is recognised.
|
||||
- **Managed `/compact` is short enough to run and is sent only to an idle seat.** Confirm compaction by effect: the
|
||||
restore request, or the drop in context.
|
||||
- **A held-back (`retained`) wake doesn't use up a one-shot park timer;** it's tried again at the interval. You don't
|
||||
need to re-arm after one.
|
||||
- **A retired watchdog doesn't deliver a late wake.** A row parked on its owner's own repeating reminder reads
|
||||
`servedByOwnReminder` in `rig parked` and draws no extra parked-owner wake.
|
||||
- **`rig queue update <id> --summary "<text>"`** alone corrects a row's subject. Close with **`--resolution
|
||||
"<outcome>"`** to store the outcome on the row.
|
||||
- **`rig remove` and `rig shrink`** keep a seat that gets work while stopping (409, `retained: true`) unless
|
||||
`--fallback` takes it. A stale `rig unclaim` is refused with `session_not_current`.
|
||||
- **Restart the daemon** (`rig daemon stop`, then `rig daemon start`). Six migrations run on the first start (116, 118,
|
||||
119, 121, 122 and 123). Two settings are added, `terminal.history_limit` (default 10000) and
|
||||
`terminal.inherit_tmux_environment` (default false), and `provider.subscription_moves` is removed.
|
||||
- **The bundled openrig-core plugin goes from 0.1.15 to 0.1.17.** Startup replaces installed copies of managed plugins and
|
||||
marked global skills. It first copies every file it replaces under `$OPENRIG_HOME/backups/managed-refresh/<id>/`,
|
||||
whether or not anyone edited it, and logs `[plugin-vendor] preserved previous contents of <file> at <copy> before
|
||||
managed refresh` for each one. A stock upgrade from 0.6.14 copies about 22 files (about 250 KB), and a later start with
|
||||
no new version copies none. The copies matter only for files someone changed: the copy keeps the bytes, but the change
|
||||
may no longer be active after the refresh. Keep the log line, because it names the original file and the copy's folder
|
||||
doesn't. If a copy fails, that plugin or skill isn't refreshed, its files are kept, and the log says so. Copies aren't
|
||||
cleaned up.
|
||||
- **If you gave new agents accounts or API keys through tmux's global environment** (`tmux set-environment -g …`), new
|
||||
agents no longer inherit it (below). Put the values in the seat's `env`, pass `rig up --env KEY=VALUE`, or keep the old
|
||||
behaviour with `rig config set terminal.inherit_tmux_environment true`. Running agents aren't affected.
|
||||
- **If you write queue rows to another machine by its self-id** (`member@rig@<self-id>`), run `rig host doctor <alias>`
|
||||
once per host: bindings learned before 0.7.0 have no address.
|
||||
|
||||
## New things you can do
|
||||
|
||||
- **Set one seat's reasoning effort:** `rig seat set-effort <seat> --effort <level> --reason "<why>"` (or `--clear`); it
|
||||
applies at the next managed launch, not to the running process. Check it with `rig seat effort <seat>`.
|
||||
- **Change a seat's stored permission policy:** `rig policy apply <policy> --seat <seat> --reason "<why>"`. `rig policy
|
||||
current` and plain `rig ps` don't show it; `rig seat status` does.
|
||||
- **Give seats environment values:** `env:` on the rig or a member in `rig.yaml`, or `rig up <spec> --env KEY=VALUE` for
|
||||
one launch. Never put secrets there.
|
||||
- **Scope a workflow run:** `--project`, `--mission`, `--slice` and `--tags` on `rig workflow instantiate` and `run`;
|
||||
write a target as `member@{rig}` to follow the bound rig.
|
||||
- **Read cost:** `rig usage cost [--seat <session>] [--json]`. A missing figure is never $0, and Claude's figure is an
|
||||
estimate, not an invoice.
|
||||
- **Hand work over without a shell:** `rig mcp serve` with `OPENRIG_SESSION_NAME` set gives `rig_queue_create`,
|
||||
`rig_queue_show`, `rig_queue_list`, `rig_queue_claim` and `rig_queue_update`. Nothing wakes that agent.
|
||||
- **`rig status --json`:** treat `daemon.reachable: null` as unconfirmed, not down.
|
||||
- OpenRig 0.6.12 adds `rig community-harness list` for installed community-harness presets, showing their maintainer
|
||||
and declared limits. These harnesses are not tested by OpenRig. Support is launch-only: no resume or fork, no
|
||||
resource projection or startup-file delivery, and identity remains unconfirmed. A quiet screen is not proof that the
|
||||
seat is idle. (#1392, #1518)
|
||||
- **Guidance:** the `rigs` skill offers to join the team before the first operator message, and offers Codex users one
|
||||
removable rules file; `delegating-work` says to brief a peer by the model `rig ps --nodes --json` shows; the operator
|
||||
reads `$OPENRIG_HOME/reference/keeping-a-watch.md` when asked to watch or remind, including a low-allowance warning.
|
||||
- User-visible text says "harness" for the agent software around a model, and "community harness" for one an outside
|
||||
contributor maintains; `docs/reference/topology-naming.md` defines the terms. (#1506)
|
||||
- **Hold a person's routine asks while they're away:** `rig gateway human quiet set <id> --daily HH:MM-HH:MM` or
|
||||
`--until <time>` (`--tz`), and `end`, `clear` or `show`. A held ask posts once, without a mention, when quiet ends.
|
||||
Asks tagged `escalation` or `wake-escalation` are not held.
|
||||
- **Apply a person's mode** ("asleep", "out of office"): `rig gateway human mode save <id> <name>` (with
|
||||
`--availability`, `--expected-back`, `--decision-room "<their words>"`, `--exclude`, `--quiet`), then `apply <id>
|
||||
<name> [--until …]`, `current`, `end` and `account`. Never tell the person "back to normal" while the account shows an
|
||||
effect `kept`, `pending` or `failed`.
|
||||
- **Decide an ask inside a person's decision room:** check `rig gateway human mode room <id>`, then `rig gateway human
|
||||
mode decide <qitemId> --application <id> --reason "…" --reversible|--irreversible`. It's recorded as delegated, never
|
||||
as their answer, and only the agent that asked can decide. Permission prompts are refused (`permission-prompt`).
|
||||
- **Pass a rig's name instead of its id** to `archive`, `unarchive`, `release`, `shrink`, `expand`, `snapshot`,
|
||||
`export` and `restore --rig`. A name two rigs share is refused and the matching ids are named: with `--json`,
|
||||
`archive`, `unarchive`, `release`, `shrink`, `expand` and `restore status --rig` return `rig_ambiguous`.
|
||||
- **Stop a managed compaction's follow-up after `/compact` was sent:** `rig compact --cancel` now also disarms the
|
||||
restore and audit prompts that would follow. It sends no input and can't undo the `/compact`.
|
||||
- **See your work candidates:** `rig queue whoami` adds `currentWorkChoice` when current work isn't settled.
|
||||
- **See why a wake didn't land:** `rig queue show --json` adds `lastNudgeInputBox`.
|
||||
- **See each seat's configured effort:** the TUI agent table's `CFG EFF` column, and `effort` and `effortSource` in
|
||||
`rig ps --nodes --full --json`. It's the configured level, not what the model ran.
|
||||
|
||||
## Off by default
|
||||
## Behaviour that changed
|
||||
|
||||
- **`output.compact`** now also shortens `rig queue show` and `rig queue transitions` (`--full` for everything) and
|
||||
bounds `rig whoami --json` peers to `output.whoami_peers` (`--all-peers` lists all).
|
||||
- **`provider.usage_windows`** now also shows Claude's windows, each seat's configured account and, with
|
||||
`--all-hosts` or `--hosts`, every registered machine's windows. A Claude account's current availability always reads
|
||||
`unknown`: don't tell a person an account has room from a seat's reading.
|
||||
- **`usage.pi_cost_facts`** and **`usage.pi_openrouter_charge`** take effect when a Pi seat next launches or resumes, not
|
||||
at once; what was recorded stays visible after they're turned off.
|
||||
- **`provider.subscription_moves`** enables `rig provider moves`. The `openrig-user` skill's section for it mentions apps
|
||||
that don't ship in this release.
|
||||
- **`bundle.services_enabled`**, **`transport.verify_input_box`**, the per-seat draft-aware typing guard (`rig seat
|
||||
set-typing-guard <seat> --mode draft-aware`), `rig bundle create --include-login-files`, `OPENRIG_TMUX_CONTROL=1`
|
||||
and `OPENRIG_REFOCUS_BUDGET_MS` (4500 to 52000) each act only when chosen.
|
||||
- **The daemon runs tmux without `/bin/sh`** on Linux and macOS; `OPENRIG_TMUX_SHELL=1` at daemon start keeps the old
|
||||
path.
|
||||
- **New agents start from a clean environment, not tmux's global one.** A new seat or handover successor gets:
|
||||
- the launch environment: `PATH`, `HOME`, `USER`, `LOGNAME`, `CODEX_HOME`, `OPENRIG_HOME`, `OPENRIG_URL`,
|
||||
`OPENRIG_PORT`, `OPENRIG_HOST`, the seat's own identity values (such as `OPENRIG_SESSION_NAME`) and the allowed
|
||||
provider sign-in variables. Not `OPENRIG_DB` or `TMUX_TMPDIR` (see Known gaps);
|
||||
- the daemon's `LANG`, `LC_ALL`, `LC_CTYPE`, `TZ`, `TMPDIR`, `XDG_CONFIG_HOME`, `XDG_DATA_HOME`, `XDG_CACHE_HOME` and
|
||||
`CLAUDE_CONFIG_DIR`;
|
||||
- the values named in tmux's `update-environment`;
|
||||
- its own `env`.
|
||||
|
||||
Shell startup still runs. `rig setup` warns when it sees a custom tmux configuration.
|
||||
- **After a reboot, the daemon restores a kernel whose seats are all detached** (and still bound to their sessions), in
|
||||
the background, as `rig up kernel --existing` would. `OPENRIG_NO_KERNEL=1` still skips it, and `rig start --json` reports `kernelRestore`.
|
||||
- **A seat missing a required startup file no longer blocks its rig's restore:** `rig up <rig> --existing` holds that
|
||||
seat and restores the others (`partially_restored`).
|
||||
- **Seats added to a running rig** with `rig expand`, `rig grow` or add-member get its culture file and rig-level
|
||||
startup, for rigs created on 0.7.0 or later. Older rigs get no backfill.
|
||||
- **A busy daemon gets the real request.** The CLI refuses only when the daemon is stopped or stale, the connection is
|
||||
refused or blocked, or the daemon answering belongs to another OpenRig home. A slow daemon is no longer read as down.
|
||||
- **A new seat's first startup message** says it's OpenRig's identity context, not a task. A seat whose startup sends
|
||||
nothing else is asked to run `rig whoami --json` and say it's ready for an assignment.
|
||||
- **A new Claude seat's first startup text** waits briefly (about five seconds) for Claude's input box before it's
|
||||
sent.
|
||||
- **Codex seats that select openrig-core get the plugin installed into Codex.** While Codex hooks are on
|
||||
(`runtime.codex.hooks_enabled`, default on), OpenRig installs it with Codex's own marketplace and plugin commands at
|
||||
daemon start and at a fresh launch, unless the person's Codex configuration disables it.
|
||||
- **A first install only** (no earlier install or plugin cache): OpenRig checks the installed hook files against its own
|
||||
copy, then trusts the plugin's six shipped hooks by their exact definitions, so the seat starts without Codex's hook
|
||||
review.
|
||||
- **An existing install keeps the person's choices.** A plugin or hook they disabled stays disabled. One they left
|
||||
untrusted stays under Codex's review: Codex records nothing for "continue without trusting", so OpenRig doesn't read a
|
||||
missing trust record as permission.
|
||||
- **What it adds:** the four managed inline hooks stay the only activity reporters; the plugin adds refocus and its
|
||||
skills.
|
||||
- **Watchdog delivery is recorded as it happened:** `rig watchdog status` outcomes are `sent`, `refused`, `failed`,
|
||||
`skipped` or `terminal` (0.6.14 had `sent`, `skipped` or `terminal`). Every reminder carries "Delivery may repeat after
|
||||
an unconfirmed attempt." under its header line, and two refusals in a row at one seat's prompt raise that seat's prompt
|
||||
alert. A park wake shows the continuation its park recorded (`Recorded continuation: …`), so record one when you park.
|
||||
- **Slack:** a thread reply answers a parked question only if it was written after the question posted, and a message
|
||||
Slack rejects as `invalid_blocks` isn't posted again.
|
||||
- **Claude Code team agents are asked for permission less often.** Housekeeping commands such as `archive`, `attach`,
|
||||
`bind`, `release`, `reconcile-session`, `config set` and `seat continue` no longer prompt. `seat restart` and `policy
|
||||
permissions apply` now do.
|
||||
- **`rig up --plan` waits as long as an apply** (120 seconds). An unanswered plan exits 1 and is safe to run again.
|
||||
- **`rig setup` keeps 10,000 rows of tmux history**, down from 50,000 (`terminal.history_limit`, 2000 to 1000000).
|
||||
|
||||
## Output that changed shape
|
||||
|
||||
- **`rig gateway human list`** shows each person's availability (`available`, `focus`, `away` or `off`) where it showed
|
||||
`away` or `available`, plus a `quiet:` line; JSON adds `availability` and `quiet`.
|
||||
- **`rig attach`** prints `Sender:` (and `Tmux:` when the names differ), and `rig whoami` adds `identity.senderAddress`.
|
||||
A clashing member name is refused with `address_conflict`.
|
||||
- **Send results** carry `managedCompaction`, and the CLI prints a `Notice:` line.
|
||||
- **`rig ps --rig <unknown>`** exits 1, and `--host H --rig X` filters by rig.
|
||||
|
||||
## What to stop doing
|
||||
|
||||
- **Stop looking up a rig's ID before `rig launch`;** the name works.
|
||||
- **Stop expecting `rig start --last` to bring back a rig taken down on purpose;** use `rig start --rigs <rig>` or `rig
|
||||
up '<name>' --existing`.
|
||||
- **Stop counting on `--dangerously-interact` to press Enter;** put CR in the payload.
|
||||
- **Stop taking the preparation prompt's delivery as the compaction's result;** read the `compact` result and confirm by
|
||||
effect.
|
||||
- **Stop answering `--fresh` for an ordinary terminal seat on every restore.**
|
||||
- **Stop branching on exit 2 for a fixable `rig queue update` refusal;** it's exit 1.
|
||||
- **Stop recreating a seat, or editing the database, to change its permission policy;** use `rig policy apply --seat`.
|
||||
- **Don't use `rig provider moves`:** it's gone with its setting. Report a subscription move as a queue item to whoever
|
||||
asked.
|
||||
- **Don't steer a new seat's account or keys through tmux globals.** Use the seat's `env` or `rig up --env`.
|
||||
- **Don't close a row `done` with `--closure-reason blocked_on`.** It's refused with `invalid_closure_reason`; use `rig
|
||||
queue block <id> --on <child>`.
|
||||
- **Don't treat "daemon did not respond" as down.** Check the effect before any retry or restart.
|
||||
- **Don't look up a rig id first** for the commands above; pass the name.
|
||||
- **Don't restart the daemon to stop a managed compaction's follow-up prompts.** Use `rig compact --cancel`.
|
||||
- **Don't run `rig up kernel --existing` by hand after a reboot** before checking `rig status`.
|
||||
- **Don't reuse a `deliveryId` to deduplicate a send,** and don't pass `--reason` or `--actor` to `rig slack verify`.
|
||||
|
||||
## Known gaps in 0.6.12
|
||||
## Known gaps in 0.7.0
|
||||
|
||||
- **Managed compaction's 600-character budget** rests on one comparison on Claude Code 2.1.282, and nothing confirms
|
||||
compaction ran.
|
||||
- **The plugin hooks haven't run through this path in a real session,** and two hook runs for one seat aren't
|
||||
serialized: a post-compaction record can be lost or a refocus delivered twice.
|
||||
- **One Slack app across machines was simulated in one process,** never run on two real machines. Relayed events are
|
||||
trusted from the calling daemon, and `rig slack verify` on the hub doesn't check relayed channels.
|
||||
- **`env:` values aren't secret,** and members added with `rig grow` can't carry a member-level `env:`.
|
||||
- **`rig up --env` is not forwarded for flat-node specs or v1 bundles,** although the launch may succeed. Do not rely on
|
||||
the flag for those formats in this release.
|
||||
- **The draft-aware guard waits for idle inside the seat's delivery lease,** which can delay other work for that seat.
|
||||
- **With `bundle.services_enabled` on, `rig up <file>.rigbundle` installs into the current folder** when no `--target` is
|
||||
given.
|
||||
- **`rig seat restart --keep-conversation` supports Linux only,** and hasn't been re-run on 0.6.12.
|
||||
- **The rig status API can call a running rig `blocked`** because of one seat that isn't running: it folds a restore
|
||||
forecast into current status.
|
||||
- **A Codex seat can keep reading as at its usage limit** in a constructed screen case not seen in a real session.
|
||||
- **After `rig scope slice create` says it couldn't verify membership, the slice was kept.** Check `mission.yaml` before
|
||||
creating it again.
|
||||
- **A Claude Code seat whose permission request was approved automatically can still read "needs input";** the Codex
|
||||
case is fixed.
|
||||
- **Codex team seats aren't asked before lifecycle commands yet.**
|
||||
- **The send gate trusts the most recently recorded hook;** `rig capture` shows the real screen.
|
||||
- **A launched team still writes into its working folder;** the operator says what changes before you agree.
|
||||
- **After a restart, `rig status` shows `Kernel: skipped` whatever the kernel seats' state.** Read them with
|
||||
`rig ps --nodes --rig kernel --full`.
|
||||
- **`rig tui --shared` still attaches on the default tmux server,** so use `rig tui` when the daemon runs on a non-default
|
||||
tmux socket.
|
||||
- **A new seat doesn't get the daemon's `OPENRIG_DB` or `TMUX_TMPDIR`.** A tool in the seat that reads `OPENRIG_DB`
|
||||
directly can fall back to the default database. If you rely on either, pass it in the seat's `env` or with `rig up
|
||||
--env`.
|
||||
- **A launch that warns "Scoped tmux environment unavailable; retaining the previous environment"** didn't give that seat
|
||||
the clean environment, and the seat may lack OpenRig's variables. Check `env` in the seat before relying on them.
|
||||
- **A Slack channel-mapping change needs a daemon restart** (`rig daemon stop`, then `rig daemon start`). `rig slack
|
||||
disable` then `enable` doesn't reload it.
|
||||
|
||||
- **A new agent can still act on requests nobody made** instead of waiting for its assignment. If a fresh seat starts
|
||||
something nobody asked for, stop it and give it its assignment.
|
||||
- **A new Claude seat's startup text can stay in its input box unsent.** If a fresh Claude seat sits idle with text at
|
||||
its prompt, press Enter in its pane, or ask the person to.
|
||||
- **The TUI's terminal button refuses inside a Herdr pane reached over SSH.** Start the TUI with `env -u SSH_CONNECTION
|
||||
-u SSH_CLIENT -u SSH_TTY rig tui`, or run `rig terminal open '<view>' --provider herdr`.
|
||||
- **Claude seats on a macOS native install can read as needing attention after a restore.** Check the pane before
|
||||
acting on it.
|
||||
- **Ubuntu 22.04's stock tmux 3.2a can crash its whole server** when OpenRig checks a pane that has just closed. Avoid
|
||||
tmux 3.2a for OpenRig (`tmux -V`).
|
||||
- **Delegated decisions:** the ask is created before the decision, so without quiet hours it can post to the person
|
||||
first. Pair a decision room with quiet hours, or decide before asking.
|
||||
- **`restore-check` still treats a missing startup file as rig-wide.** Trust `rig up --existing`'s per-seat result.
|
||||
@@ -199,7 +199,7 @@ export class PluginVendorService {
|
||||
const backup = nodePath.join(backupDir, rel);
|
||||
this.fs.mkdirp(nodePath.dirname(backup));
|
||||
this.fs.copyFileExclusive(dest, backup);
|
||||
this.logger(`[plugin-vendor] preserved ${dest} at ${backup}; custom behaviour may no longer be active after refresh`);
|
||||
this.logger(`[plugin-vendor] preserved previous contents of ${dest} at ${backup} before managed refresh`);
|
||||
}
|
||||
return true;
|
||||
} catch (error) {
|
||||
|
||||
@@ -281,7 +281,7 @@ describe("managed refresh preserves recoverable edits", () => {
|
||||
const saved = f.backupFiles().find(file => fs.readFileSync(file).equals(f.edited));
|
||||
expect(saved).toBeDefined();
|
||||
expect(f.logs.join("\n")).toContain(saved);
|
||||
expect(f.logs.join("\n")).toContain("may no longer be active");
|
||||
expect(f.logs.join("\n")).toContain("before managed refresh");
|
||||
const nextEdit = Buffer.from("a second unique edit\n"); fs.writeFileSync(f.dest, nextEdit);
|
||||
await f.refresh();
|
||||
expect(fs.readFileSync(f.dest, "utf8")).toBe("# compaction-restore\n");
|
||||
|
||||
Reference in new issue
Block a user