@staix/agent-hub 0.12.27 → 0.12.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +3 -3
- package/docs/agent-notes/bus.md +1 -0
- package/docs/agent-notes/daemon.md +3 -0
- package/docs/agent-notes/tests.md +1 -0
- package/docs/operations.md +84 -10
- package/docs/quickstart.md +1 -1
- package/docs/security.md +26 -1
- package/docs/smoke.md +54 -0
- package/docs/specs/2026-09-19-agent-hub-design.md +43 -1
- package/docs/verification/2026-10-16-0.12.29.md +25 -0
- package/docs/verification/2026-10-16-273-live-verification.md +150 -0
- package/docs/verified.json +12 -12
- package/package.json +1 -1
- package/plugins/agent-hub/.claude-plugin/plugin.json +1 -1
- package/plugins/agent-hub/server.js +24 -5
- package/src/adapters/claude-channel.ts +26 -4
- package/src/adapters/pi.ts +12 -10
- package/src/cli/console.ts +3 -1
- package/src/cli/help.ts +2 -1
- package/src/cli/identity-audit.ts +2 -2
- package/src/cli/identity.ts +15 -0
- package/src/cli/main.ts +48 -28
- package/src/cli/preview.ts +7 -1
- package/src/cli/upgrade-runtime.ts +7 -2
- package/src/hub/bus.ts +9 -0
- package/src/hub/daemon.ts +37 -11
- package/src/hub/events.ts +1 -1
- package/src/hub/lifecycle.ts +2 -2
- package/src/hub/manager.ts +14 -10
- package/src/hub/ui.ts +10 -7
- package/src/pi/session.ts +28 -0
- package/src/pi/tool-receipts.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
Issue and pull request numbers in the entries for 0.7.7 and earlier refer to the previous repository, archived on 2026-09-30 when this repository's history was rewritten; the one exception is the open smoke-check issue, formerly #12, which moved here as #1. Numbers in newer entries refer to this repository.
|
|
4
4
|
|
|
5
|
+
## 0.12.29
|
|
6
|
+
|
|
7
|
+
- Let an explicitly authorized agent run live verification through `ahub --live-test`, with operational console authority scoped to the invocation and its ahub continuations, the initiating peer retained in a mandatory delegation audit, and ordinary agent permissions unchanged (#408).
|
|
8
|
+
|
|
9
|
+
- Remove the site caveat card accent edge and refresh the #273 live-verification ledger, including the machine-wide upgrade isolation requirements (#406, #273).
|
|
10
|
+
|
|
11
|
+
## 0.12.28
|
|
12
|
+
|
|
13
|
+
- Recover an offline Pi owner with person-selected preserved history via `ahub pi --replace-session --session-file`, retaining prior identity metadata and queued work while refusing live owners and unsettled effects (#403).
|
|
14
|
+
|
|
15
|
+
- Tell a pull-only session (a Kimi TUI, a Claude session without pushes) that important messages are waiting: the hub sends an advisory count over its control link and every hub tool result but `hub_inbox` ends with it until a read drains them; `hub_inbox` replies also carry the important count. Make `scripts/check.sh` take a heavy-job slot shared by every worktree of the repo, so a second gate waits (bounded by `AHUB_CHECK_LOCK_WAIT_S`) and names the holder instead of overlapping (#398).
|
|
16
|
+
|
|
5
17
|
## 0.12.27
|
|
6
18
|
|
|
7
19
|
- Refine the dashboard Office view with an intrinsic 12 px/unit scale, 1 px non-scaling hairlines and padded room cards in flat and isometric themes, and un-nest the desk More control into a separately reconciled sibling button so screen readers can reach it (#394).
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Native multi-agent hub for one developer's machine: Claude Code, Codex, Kimi Cod
|
|
|
4
4
|
hub-owned local-LLM worker, with optional Qwen Code and Jcode support, collaborate as peers in independent project directories, with
|
|
5
5
|
task-aware model routing (Switchyard) in front of a self-hosted gateway (OmniRoute).
|
|
6
6
|
|
|
7
|
-
Status: 0.12.
|
|
7
|
+
Status: 0.12.29, control protocol 16. Durable delivery records distinguish queued
|
|
8
8
|
work from uncertain execution. The [smoke checklist](docs/smoke.md) records
|
|
9
9
|
verified paths and remaining prerequisites.
|
|
10
10
|
|
|
@@ -33,7 +33,7 @@ cd <your project> && ahub init && ahub up
|
|
|
33
33
|
Or install the same version from GitHub:
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
bun add -g github:STAIxBWLB/agent-hub#v0.12.
|
|
36
|
+
bun add -g github:STAIxBWLB/agent-hub#v0.12.29 && ahub setup
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
The installed commands remain `ahub` and `agent-hub`.
|
|
@@ -81,7 +81,7 @@ an N-peer message bus and attaches each agent through its native control surface
|
|
|
81
81
|
| --- | --- | --- | --- |
|
|
82
82
|
| Claude Code | channel plugin push (`notifications/claude/channel`) under `ahub claude`; otherwise tools-only, read with `hub_inbox` | MCP tools | queued by Claude Code, grouped on next turn; tools-only: queued at the hub |
|
|
83
83
|
| Codex | app-server `turn/start` (idle) / `turn/steer` (busy) | proxy intercepts `item/agentMessage` | steer or queue |
|
|
84
|
-
| Kimi Code | ACP `session/prompt` | ACP `session/update` stream | queue (`turn.agent_busy`) |
|
|
84
|
+
| Kimi Code | TUI: pull with `hub_inbox`; headless: ACP `session/prompt` | TUI: `hub_send`; headless: ACP `session/update` stream | TUI: hub queue with important-count hints; headless: queue (`turn.agent_busy`) |
|
|
85
85
|
| Pi | RPC or managed native TUI extension | hub-approved tools | queued until `agent_settled` |
|
|
86
86
|
| Local worker | hub-native agent loop | hub-native | hub-owned |
|
|
87
87
|
|
package/docs/agent-notes/bus.md
CHANGED
|
@@ -14,6 +14,7 @@ Scope: delivery, digests and condensation, reply addressing, priority and limits
|
|
|
14
14
|
- A reply is addressed, never broadcast. An adapter that answers a delivery passes `to: replyAudience(envs)`; anything else with an `inReplyTo` inherits that envelope's sender. Leaving `to` empty fans the message out to every peer.
|
|
15
15
|
- `digest` is not a peer: addressing a reply at the envelopes the peer was handed sends it nowhere once a delivery was condensed. The bus resolves `digest` back through `lastDelivery.originals`; anything else that reads a reply's `to` has to do the same.
|
|
16
16
|
- A pull-only peer (a Claude session without channel pushes or Kimi in its own TUI) is never drained; `Bus.pull` hands it what one push would take. Drain and pull share `held()` (recovery, an uncertain delivery, any pause, the lifecycle `deliveryHeld` fence) and `remember()` (so `reply_to` resolves), and a drain rechecks `deliverable()` after condensing because such a session can take the peer meanwhile. A pull is journaled `completed` in the same transaction as the bus snapshot, never `accepted`; a failed one puts back only that peer's queue and preface and never reloads the snapshot.
|
|
17
|
+
- The `onImportantQueued` nudge for a pull-only peer (#398) is advisory: it never dequeues, steers, journals or settles, and a throw from it never stops an enqueue.
|
|
17
18
|
- `resolveDelivery` mutates queues in place; a refused or failed resolution puts back only that peer's queue and preface and keeps every pause. Never reload a snapshot on a live bus.
|
|
18
19
|
- `restore` takes queued work from the journal, never from the committed snapshot once the journal has state (an empty journal, revision 0, is seeded from the commit): from the commit only an empty queue key is carried over, for an offline peer whose key no delivery ever persisted (#234). Never resurrect a non-empty queue from it.
|
|
19
20
|
- The journal's owner check (`rejectLiveOwner` in `delivery-journal.ts`) judges the manifest pid with `processLiveness` and its `pidSignature`, never a bare probe (rule: `daemon.md`).
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Daemon, control protocol and recovery
|
|
2
2
|
|
|
3
|
+
- For explicitly user-authorized live verification, use the per-invocation CLI delegation in `docs/security.md` §Agent CLI identity and conductor authority; keep caller markers and record native evidence separately from fixtures.
|
|
4
|
+
- Keep `export const LIVE_TEST_SUPPORTED = true;` in `src/cli/identity.ts`: delegated recovery staging reads this declaration before any source effect.
|
|
5
|
+
|
|
3
6
|
- Console attention navigation selects a delivery only by an exact visible row id. A missing id or row prints read-only guidance; never select by peer or fall back to the first Queue row.
|
|
4
7
|
|
|
5
8
|
Scope: the operator console, control WS and its protocol, state files, the dashboard listener and settings, the Claude channel's reconnect, `ahub setup`, git snapshots, upgrade and recovery. Read before editing `src/cli/console.ts`, `src/cli/console-state.ts`, `src/cli/attention.ts`, `src/ui/needs.ts`, `src/hub/daemon.ts`, `src/hub/ui.ts`, `src/hub/settings.ts`, `src/hub/control-client.ts`, `src/adapters/claude-channel.ts`, `src/hub/restart.ts`, `src/hub/recovery-store.ts`, `src/hub/snapshots.ts`, `src/hub/manager.ts`, `src/hub/lifecycle.ts`, `src/hub/crash.ts`, `src/hub/start-mode.ts`, `src/hub/terminal-open.ts`, `src/hub/recovery-error.ts`, `src/hub/db-timeout.ts`, `src/cli/setup.ts`, `src/cli/upgrade*.ts`, `src/cli/terminal-recovery.ts`, `src/cli/recovery-package.ts` or `src/cli/facts-hook.ts`, or before adding a native peer.
|
|
@@ -14,5 +14,6 @@ Scope: tests, fakes and the test gate. Read before adding or changing a test or
|
|
|
14
14
|
- A request that a test expects a stop or shutdown to cut gets its rejection handler where the request is created, never after the awaited teardown: a late `catch` races the reset and the run fails on an unhandled rejection.
|
|
15
15
|
- Run `bun scripts/seeded-check.ts` before reporting the seeded-guard gate complete. Keep the `scripts/seeds.json` cases sequential; require the same named test green before its seeded assertion fails. Seed rot, survivors, setup/compiler failures, timeout/watchdog termination and process leaks fail the gate. Never run the full seed runner from a unit test or mutate the source checkout; inspect preserved failed fixtures before removing them. CI runs this in the required Linux `seeded guards` job after the ordinary check, separately from `scripts/check.sh`.
|
|
16
16
|
|
|
17
|
+
- `scripts/check.sh` holds the repo's heavy-job slot (`<git common dir>/ahub-heavy.lock`, #398) for the whole run, so a test never runs the real gate; `test/check-lock.test.ts` runs a copy in a scratch repo.
|
|
17
18
|
- The whole-suite watchdog is `AHUB_CHECK_HANG_S` (default in `scripts/check.sh`, hosted macOS value in `.github/workflows/check.yml`; #378, macOS CI hit it while tests still passed): raise it only when the suite was still progressing at the cutoff, never for a hung test, and keep the per-test 20 s timeout.
|
|
18
19
|
- A seed's named test must run on Linux, where the seeded job runs: a darwin-only test reports no result there and fails the job (#382). Cover a macOS-only protection with its regression test instead.
|
package/docs/operations.md
CHANGED
|
@@ -1,8 +1,46 @@
|
|
|
1
1
|
# Operations guide
|
|
2
2
|
|
|
3
|
-
This guide describes ahub 0.12.
|
|
3
|
+
This guide describes ahub 0.12.29 and control protocol 16. Live verification
|
|
4
4
|
results and remaining prerequisites are recorded separately in [the smoke ledger](smoke.md).
|
|
5
5
|
|
|
6
|
+
## Agent-operated live verification
|
|
7
|
+
|
|
8
|
+
When the user explicitly authorizes a live test, its agent may run console
|
|
9
|
+
commands using `ahub --live-test [--project <path|id>] <command> [args...]`.
|
|
10
|
+
For example, `ahub --live-test --project <scratch-path> ui --no-open` starts the
|
|
11
|
+
real dashboard listener and prints its one-time link without opening a browser.
|
|
12
|
+
`ahub --project <scratch-path> --live-test reset --all --yes` exercises reset on
|
|
13
|
+
that selected disposable project. The global options precede the command and
|
|
14
|
+
may appear in either order; a flag after the command is not delegation.
|
|
15
|
+
|
|
16
|
+
This grants console authority for operational console-class and peer-lifecycle conductor-class commands, including destructive actions, for one
|
|
17
|
+
invocation and its ahub continuations. Use only the user-authorized targets and
|
|
18
|
+
commands; destructive live checks belong in disposable projects. Existing
|
|
19
|
+
project discovery still applies: initialize the scratch folder as its own Git
|
|
20
|
+
repository before `ahub init`, then confirm `status --json` reports that exact
|
|
21
|
+
`cwd` before any destructive check.
|
|
22
|
+
Existing confirmations, process ownership checks, native identity fences and recovery
|
|
23
|
+
locks still apply. Do not remove agent markers. The initiating peer and command
|
|
24
|
+
label are audited before effects; an unavailable audit blocks delegation. A new
|
|
25
|
+
unflagged invocation has ordinary peer authority again. Native tools launched
|
|
26
|
+
by the command keep their own peer identity and receive no delegation flag.
|
|
27
|
+
Allowed-class commands keep peer identity and permissions even with the flag:
|
|
28
|
+
`--live-test say` sends as the peer. Peer starts, pause and resume may use
|
|
29
|
+
delegated console authority. Flagged task assign/escalate refuse; omit the flag
|
|
30
|
+
to use the ordinary actor-preserving conductor path when the peer has that role.
|
|
31
|
+
Person verdicts and user-authored workflow writes are not delegated. Dashboard
|
|
32
|
+
sessions issued through the flag retain operational controls but refuse message
|
|
33
|
+
and task/planning content writes. Use native peer tools for agent-authored work.
|
|
34
|
+
|
|
35
|
+
Use a CLI/coordinator containing this feature throughout the experiment. Older
|
|
36
|
+
daemons do not understand the new delegated audit outcome; run the candidate
|
|
37
|
+
daemon to capture its delegated event and console notice. This policy does not
|
|
38
|
+
change external computer-use restrictions. Recovery staging refuses old targets
|
|
39
|
+
without live-test support before source effects. Delegated headless recovery restores through the ordinary target CLI, carrying
|
|
40
|
+
its operationId on the delegated console connection; existing native ownership
|
|
41
|
+
and session-identity checks remain. Record actual observations in the
|
|
42
|
+
smoke ledger; the presence of this option proves no outstanding #273 live leg.
|
|
43
|
+
|
|
6
44
|
## Command output
|
|
7
45
|
|
|
8
46
|
`ahub status`, `board`, `budget`, `doctor`, `projects`, `queue list`, `turns` and `report` print shared console tables and labelled details.
|
|
@@ -1289,7 +1327,9 @@ reporting, and shares results explicitly with `hub_send`. Status, the console an
|
|
|
1289
1327
|
the dashboard show `pull-only`, the waiting count and the last inbox read. Messages
|
|
1290
1328
|
and important markers do not push or interrupt it. There is no hub busy state,
|
|
1291
1329
|
watchdog, console approval, hub permission mode, context reading, automatic quota
|
|
1292
|
-
pause/handoff, shared final answer or session resume.
|
|
1330
|
+
pause/handoff, shared final answer or session resume. When important messages are
|
|
1331
|
+
waiting, every other hub tool result ends with a line saying how many, so the model
|
|
1332
|
+
reads `hub_inbox` before starting long local work (#398). Read quota and approve tools
|
|
1293
1333
|
in Kimi's own TUI; a person can pause the hub queue by hand. End the native terminal
|
|
1294
1334
|
session there, not with `ahub stop kimi`.
|
|
1295
1335
|
|
|
@@ -1619,21 +1659,21 @@ section is what they run.
|
|
|
1619
1659
|
|
|
1620
1660
|
Upgrade running projects with the target release's own coordinator. It accepts
|
|
1621
1661
|
a running source on control protocol 9 (0.6.x), 10 (0.7.0 through 0.12.0),
|
|
1622
|
-
11 (0.12.1 and 0.12.2), 12 (0.12.3), 13 (0.12.4 through 0.12.15), 14 (0.12.16), 15 (0.12.17 through 0.12.19) or 16 (0.12.20 through 0.12.
|
|
1662
|
+
11 (0.12.1 and 0.12.2), 12 (0.12.3), 13 (0.12.4 through 0.12.15), 14 (0.12.16), 15 (0.12.17 through 0.12.19) or 16 (0.12.20 through 0.12.29), and only
|
|
1623
1663
|
a target on its own protocol, so the target's coordinator fits every supported
|
|
1624
1664
|
source and carries every recovery fix released up to it. Protocol 8 and older
|
|
1625
1665
|
(0.5.x and earlier) are refused as `manual-bootstrap-required`. Run from the
|
|
1626
1666
|
project directory, without replacing the global CLI first:
|
|
1627
1667
|
|
|
1628
1668
|
```bash
|
|
1629
|
-
bunx --package @staix/agent-hub@0.12.
|
|
1630
|
-
bunx --package @staix/agent-hub@0.12.
|
|
1669
|
+
bunx --package @staix/agent-hub@0.12.29 ahub upgrade --to 0.12.29 --dry-run
|
|
1670
|
+
bunx --package @staix/agent-hub@0.12.29 ahub upgrade --to 0.12.29 --yes
|
|
1631
1671
|
```
|
|
1632
1672
|
|
|
1633
1673
|
| Running now | Coordinator to use |
|
|
1634
1674
|
| --- | --- |
|
|
1635
1675
|
| 0.6.x (protocol 9) | the target's, through `bunx` as above |
|
|
1636
|
-
| 0.7.0 through 0.12.0 (protocol 10), 0.12.1 and 0.12.2 (protocol 11), 0.12.3 (protocol 12), 0.12.4 through 0.12.15 (protocol 13), 0.12.16 (protocol 14), 0.12.17 through 0.12.19 (protocol 15), 0.12.20 through 0.12.
|
|
1676
|
+
| 0.7.0 through 0.12.0 (protocol 10), 0.12.1 and 0.12.2 (protocol 11), 0.12.3 (protocol 12), 0.12.4 through 0.12.15 (protocol 13), 0.12.16 (protocol 14), 0.12.17 through 0.12.19 (protocol 15), 0.12.20 through 0.12.29 (protocol 16) | the target's, through `bunx` as above |
|
|
1637
1677
|
| any supported source, with the installed CLI already at the target | `ahub upgrade` below, which is the same coordinator |
|
|
1638
1678
|
| 0.5.x or earlier (protocol 8 and older) | not supported: bootstrap by hand with the matching CLI |
|
|
1639
1679
|
|
|
@@ -1665,14 +1705,14 @@ projects first:
|
|
|
1665
1705
|
|
|
1666
1706
|
```bash
|
|
1667
1707
|
ahub restart --dry-run
|
|
1668
|
-
ahub upgrade --to 0.12.
|
|
1708
|
+
ahub upgrade --to 0.12.29 --dry-run
|
|
1669
1709
|
```
|
|
1670
1710
|
|
|
1671
1711
|
Apply only after reviewing the plan:
|
|
1672
1712
|
|
|
1673
1713
|
```bash
|
|
1674
1714
|
ahub restart --yes
|
|
1675
|
-
ahub upgrade --to 0.12.
|
|
1715
|
+
ahub upgrade --to 0.12.29 --yes
|
|
1676
1716
|
ahub recovery status [<operation-id>]
|
|
1677
1717
|
ahub recovery resume [<operation-id>]
|
|
1678
1718
|
ahub recovery abort [<operation-id>]
|
|
@@ -2354,6 +2394,13 @@ test files twenty times on macOS, in its own concurrency group; it does not repl
|
|
|
2354
2394
|
`scripts/check.sh` stops a suite still running after `AHUB_CHECK_HANG_S` seconds
|
|
2355
2395
|
(600 by default); hosted macOS CI sets 780 inside the unchanged 15-minute job
|
|
2356
2396
|
limit (#378).
|
|
2397
|
+
The gate holds `<git common dir>/ahub-heavy.lock` across every worktree of a
|
|
2398
|
+
repository. A second gate waits up to `AHUB_CHECK_LOCK_WAIT_S` (1800 seconds by
|
|
2399
|
+
default; 0 fails immediately) and names the holder. A holder whose PID is gone
|
|
2400
|
+
is reaped. This filesystem slot works without a running hub; it covers this
|
|
2401
|
+
gate, not arbitrary build commands. PID reuse can retain a stale slot, and two
|
|
2402
|
+
waiters reaping the same dead owner can race; broader scheduling remains an
|
|
2403
|
+
operator responsibility (#398).
|
|
2357
2404
|
|
|
2358
2405
|
## Preview initialization and native launch
|
|
2359
2406
|
|
|
@@ -2453,6 +2500,31 @@ terminal exits, a requested stop (`ahub stop pi`), requested shutdown and
|
|
|
2453
2500
|
recovery operations suppress this restart. Crash recovery's #66
|
|
2454
2501
|
recorded-session/fresh-start choices are unchanged.
|
|
2455
2502
|
|
|
2503
|
+
### Explicit Pi history replacement
|
|
2504
|
+
|
|
2505
|
+
If an offline Pi owner has no verified persisted resume state, inspect the old
|
|
2506
|
+
session and any partial work, then select a preserved file explicitly:
|
|
2507
|
+
|
|
2508
|
+
```sh
|
|
2509
|
+
ahub pi --replace-session --session-file <managed-file>
|
|
2510
|
+
```
|
|
2511
|
+
|
|
2512
|
+
The file must be inside this project's `.agenthub/state/pi-sessions/` and its
|
|
2513
|
+
session header must identify the same project. The selected session keeps its
|
|
2514
|
+
existing identity. This is a person-only recovery action; default restart never
|
|
2515
|
+
selects another session or infers that missing history was empty. A session id
|
|
2516
|
+
alone is insufficient. Add `--headless` to run the selected history in background.
|
|
2517
|
+
`--print-command` validates flags without checking the live owner or changing it.
|
|
2518
|
+
|
|
2519
|
+
Replacement requires an existing offline owner whose native process is proven
|
|
2520
|
+
gone, with settled tools, receipts and approvals, outside a recovery operation.
|
|
2521
|
+
An unclaimed pending TUI launch uses the ordinary restart path instead. Before
|
|
2522
|
+
revoking the old owner, the hub durably saves private previous/selected session
|
|
2523
|
+
metadata in `pi-session-replacements/` beside `pi-sessions/`. Failed validation or
|
|
2524
|
+
record storage leaves the old owner intact. All session files, queued work and
|
|
2525
|
+
journal records remain. Uncertain effects are never retried by this selection;
|
|
2526
|
+
inspect and reconcile them before continuing.
|
|
2527
|
+
|
|
2456
2528
|
### Pi/local unanswered approvals
|
|
2457
2529
|
|
|
2458
2530
|
An expired Pi/local request says "approval expired: no person answered". The
|
|
@@ -2522,8 +2594,10 @@ An idle Pi with no message/file yet records its live empty-session proof before
|
|
|
2522
2594
|
stopping, so its next start resumes that identity. A Pi stopped after its first
|
|
2523
2595
|
prompt was accepted but before history was persisted is not treated as empty:
|
|
2524
2596
|
its delivery is held, and another start refuses until resume history is verified.
|
|
2525
|
-
Inspect and settle the held delivery before
|
|
2526
|
-
|
|
2597
|
+
Inspect and settle the held delivery before selecting preserved history through
|
|
2598
|
+
[explicit Pi history replacement](#explicit-pi-history-replacement). The stop
|
|
2599
|
+
never silently chooses a fresh session; replacement requires an offline, settled
|
|
2600
|
+
owner and a validated managed session file.
|
|
2527
2601
|
|
|
2528
2602
|
A pull-only Kimi TUI has no controlled restore or resume. While it is attached,
|
|
2529
2603
|
upgrade/restart planning stops before effects and asks the person to end Kimi in
|
package/docs/quickstart.md
CHANGED
package/docs/security.md
CHANGED
|
@@ -71,10 +71,35 @@ or the native Claude/Codex shell marker when the hub marker is absent. It connec
|
|
|
71
71
|
as that peer in tools mode. Messages and task changes retain that actor;
|
|
72
72
|
`say` defaults to status priority and important messages still require the peer's
|
|
73
73
|
capability. Conflicting or malformed markers fail closed. There is no `--as-user`.
|
|
74
|
-
|
|
74
|
+
By default, console operations are refused before connecting, including permission answers
|
|
75
75
|
and permission modes, queue resolution, budget overrides, benchmark runs, research
|
|
76
76
|
backfill and task labels, stopping a peer (`ahub stop`), lifecycle and recovery
|
|
77
77
|
operations, and `ask`.
|
|
78
|
+
For live verification explicitly authorized by the user, an agent may invoke
|
|
79
|
+
`ahub --live-test [--project <path|id>] <command> [args...]`. The flag delegates
|
|
80
|
+
the existing console authority for console-class operations and conductor-class peer starts/holds, including approvals,
|
|
81
|
+
settings, roster and lifecycle operations. It does not restrict effects to a
|
|
82
|
+
scratch project: the agent must stay within the authorized commands and targets.
|
|
83
|
+
Malformed or conflicting caller markers still refuse. The original peer and
|
|
84
|
+
closed command label are recorded with outcome `delegated` before execution;
|
|
85
|
+
if that audit cannot be written, the command refuses. The current daemon emits
|
|
86
|
+
`agent_cli` with `delegated: true` and `refused: false`. Allowed-class commands retain the peer identity and capability checks, including
|
|
87
|
+
messages, proposals and reviews. Peer starts, pause and resume may delegate
|
|
88
|
+
operational console authority; task assign/escalate under the flag refuse. `--as-user`, person task labels,
|
|
89
|
+
person-authored planning/release/memory/goal writes, SDLC record, benchmark run
|
|
90
|
+
and the pet composer are refused. No argument text is copied into this audit.
|
|
91
|
+
Delegated dashboard restrictions are bound to its server-issued ticket/session:
|
|
92
|
+
operational settings/start/stop controls remain, but message, proposal and
|
|
93
|
+
workflow-history actions refuse even if the body tries to clear the restriction.
|
|
94
|
+
The flag is not stored in settings or exported to native agent children. Ahub's
|
|
95
|
+
own daemon launch, console subprocesses, recovery runner, interactive follow-up commands and upgrade coordinator
|
|
96
|
+
handover carry it explicitly in argv. Each new top-level invocation needs its
|
|
97
|
+
own flag. An older CLI does not support it; use a candidate with this feature
|
|
98
|
+
for the continuation too. Staging rejects a target without the pinned
|
|
99
|
+
`LIVE_TEST_SUPPORTED` declaration before preparation or commit, including a
|
|
100
|
+
previously cached stage. Delegated headless-native restoration uses the ordinary target CLI with its
|
|
101
|
+
operationId through that operational console authority. Native and TUI
|
|
102
|
+
restoration keep their existing identity and ownership checks. External computer-use restrictions remain unchanged.
|
|
78
103
|
The operator uses a plain terminal or `ahub console`. A Claude `!` command that
|
|
79
104
|
inherits the agent markers follows the same rule. The console strips control
|
|
80
105
|
sequences from agent and daemon text before it quotes forged headers, and its
|
package/docs/smoke.md
CHANGED
|
@@ -2,6 +2,60 @@
|
|
|
2
2
|
|
|
3
3
|
`scripts/check.sh` covers everything against fakes. The legs below need real accounts and an interactive terminal, so they are run by hand and recorded here.
|
|
4
4
|
|
|
5
|
+
## Issue #273 operator execution plan (2026-10-16)
|
|
6
|
+
|
|
7
|
+
The [execution plan and blocker record](verification/2026-10-16-273-live-verification.md)
|
|
8
|
+
maps the outstanding issue entries to their procedures and required observations.
|
|
9
|
+
The installed CLI and running project daemon both reported 0.12.28. This is an
|
|
10
|
+
environment readback only. No outstanding live leg passed in this session:
|
|
11
|
+
the installed 0.12.28 CLI refused `ahub ui` from Codex, and LCU refused Terminal access.
|
|
12
|
+
These are dated observations. From 0.12.29, authorized agents use the audited
|
|
13
|
+
`--live-test` route described below and in the execution plan; the external LCU
|
|
14
|
+
restriction remains separate. The operator initially chose procedure preparation;
|
|
15
|
+
#273 remains open.
|
|
16
|
+
|
|
17
|
+
## Agent-operated verification (#408)
|
|
18
|
+
|
|
19
|
+
For user-authorized live checks, the candidate CLI supports
|
|
20
|
+
`ahub --live-test [--project <path|id>] <command> [args...]`, using audited console
|
|
21
|
+
authority for that invocation. Follow [the operating procedure](operations.md#agent-operated-live-verification)
|
|
22
|
+
and record each actual result below. References to a person in historical
|
|
23
|
+
procedures describe their original authority requirement; an explicitly
|
|
24
|
+
authorized agent may now execute those CLI steps through this option. Native
|
|
25
|
+
account readiness, real terminal/browser observations, sign-off requirements and
|
|
26
|
+
external computer-use restrictions still apply. No pending #273 item is checked
|
|
27
|
+
by adding this path.
|
|
28
|
+
|
|
29
|
+
2026-10-16, macOS, candidate CLI/source `40d13bc4`, daemon 0.12.28/protocol 16:
|
|
30
|
+
an actual Codex-marked shell with a separate hub home and disposable Git project
|
|
31
|
+
ran delegated `init`, `up --no-console`, `ui --no-open`, `permission pi ask`,
|
|
32
|
+
`kill` and `reset --all --yes`, all exit 0. Unflagged `status --json` reported
|
|
33
|
+
the exact scratch cwd. The dashboard URL returned HTTP
|
|
34
|
+
200 and HTML; no browser or ticket/session exchange was performed in that shell run. The daemon recorded
|
|
35
|
+
`agent_cli` events for init/up/daemon/ui/permission with peer `codex`,
|
|
36
|
+
`delegated: true` and `refused: false`. The reset archive mode was 0700 and the
|
|
37
|
+
scratch daemon was stopped. This verifies the delegated CLI path, without
|
|
38
|
+
claiming a model turn, terminal look, conversation restoration or the complete
|
|
39
|
+
#214/#273 live criteria. The automated console-subprocess and recovery-target
|
|
40
|
+
checks remain separate fixture evidence.
|
|
41
|
+
|
|
42
|
+
2026-10-16 review follow-up, source `fcbb18ec`: the same isolated Git scratch
|
|
43
|
+
project was started from a Codex-marked shell. Flagged `say` produced a bus
|
|
44
|
+
envelope from `codex`; person task-label writing refused. A delegated dashboard
|
|
45
|
+
ticket exchanged for a session with HTTP 200, its snapshot returned HTTP 200,
|
|
46
|
+
and a send action trying `liveTest: false` returned HTTP 403. The scratch daemon
|
|
47
|
+
was stopped (kill exit 0). This was an actual CLI/HTTP run, without a model turn
|
|
48
|
+
or browser visual inspection.
|
|
49
|
+
|
|
50
|
+
Task #65 follow-up, source `5fbe50b6`: operational peer starts, pause and resume
|
|
51
|
+
may delegate console authority; allowed-class messages/proposals/reviews retain
|
|
52
|
+
the peer, while flagged task assign/escalate refuse. The temporary headless
|
|
53
|
+
staging ceiling is removed. The recovery driver -> real target CLI -> scripted
|
|
54
|
+
control server regression verifies headless Pi mode, saved sessionId,
|
|
55
|
+
operationId, console hello and initiating-peer audit (225 related tests passed).
|
|
56
|
+
This is fixture/CLI proof, not an actual native Pi restoration; that live leg
|
|
57
|
+
remains owed in #273.
|
|
58
|
+
|
|
5
59
|
## Hub memory (#258)
|
|
6
60
|
|
|
7
61
|
Not run yet (2026-10-12). Source and fakes cover tiers, the graph, retrieval, sync between two simulated homes and a bare remote, leases, import and suggestions (`test/memory-*.test.ts`).
|
|
@@ -1947,10 +1947,17 @@ task list polling does not. `hub_status` stays conductor-only.
|
|
|
1947
1947
|
proposer as the actor with reason `manual` (on the `reassigned` or `reserved`
|
|
1948
1948
|
entry), and writes no conduct audit event; during a PII turn it is refused
|
|
1949
1949
|
like the conductor's.
|
|
1950
|
+
## Amendment: delegated agent live verification (#408)
|
|
1951
|
+
|
|
1952
|
+
- Decision, 2026-10-16: an agent explicitly authorized by the user to perform a live test may use the global `--live-test` flag, before the command and in either order with `--project`. Duplicate global options refuse. Default command classification and malformed/conflicting identity refusals stay unchanged.
|
|
1953
|
+
- Console-class operations and conductor-class peer starts/pause/resume may use console authority after the original caller is validated; allowed-class commands retain peer identity and capability checks. Flagged task assign/escalate refuse rather than writing user-attributed history. A mandatory ids-only audit records its peer, closed command label and `delegated` outcome before execution. The daemon emits an `agent_cli` event with `delegated: true`, `refused: false`, and a console notice naming the peer. User impersonation, person labels and person-authored workflow writes refuse. Delegated dashboard tickets/sessions allow operational controls but refuse user-attributed content and history actions on both project and unified surfaces; request bodies cannot widen the session.
|
|
1954
|
+
- This is a user-authorized operating policy, not a sandbox or authenticated grant. It includes console mutations and requires the agent to remain within the authorized targets and operations. Command-specific confirmations, process ownership, provider identity and recovery locks still apply.
|
|
1955
|
+
- No settings/environment opt-in persists. Native argv does not receive the flag. Ahub's own daemon launch, console subprocesses, recovery runner, interactive continuation commands and newer-version coordinator handover carry it explicitly; older CLIs cannot accept it. The recovery driver's target CLI environment preserves the initiating peer for its delegation audit. Staging checks the target's pinned LIVE_TEST_SUPPORTED declaration before its cached-stage return and before prepare/commit; unsupported old targets refuse without source effects. Headless-native restoration uses the ordinary target CLI with the operationId on its delegated console connection; no headless staging ceiling is added. External computer-use policies remain outside this change. No #273 live success is inferred from this implementation.
|
|
1956
|
+
|
|
1950
1957
|
## Amendment: ahub reset (issue #214)
|
|
1951
1958
|
|
|
1952
1959
|
`ahub reset [--all] [--yes]` returns a project's hub to a clean state. It is
|
|
1953
|
-
|
|
1960
|
+
console-only by default (explicit authorized delegation is described in #408) and a dry run
|
|
1954
1961
|
unless `--yes`: the dry run reads `hub.db` read-only (with `immutable=1` when
|
|
1955
1962
|
`hub.db-wal` or `-shm` is absent, so it creates neither) and prints delivery ids,
|
|
1956
1963
|
peer names and counts per category, never task or message text. With `--yes`
|
|
@@ -2879,3 +2886,38 @@ open detail; disappearance/project reset closes it. Back restores compact mode,
|
|
|
2879
2886
|
and state/peer/release filters remain active in focus. Attention targets exact
|
|
2880
2887
|
visible row ids with heading guidance when absent. No new route, API request,
|
|
2881
2888
|
timer, source text/ref/history projection or external asset is introduced.
|
|
2889
|
+
|
|
2890
|
+
|
|
2891
|
+
## Explicit offline Pi history selection (#403)
|
|
2892
|
+
|
|
2893
|
+
A person may run `ahub pi --replace-session --session-file <managed-file>` only
|
|
2894
|
+
for an existing offline, settled Pi owner with a proven-gone native process.
|
|
2895
|
+
Pending tools, receipts, approvals and recovery hold replacement. The console
|
|
2896
|
+
control path alone authorizes this operation; peer and conductor tools cannot
|
|
2897
|
+
supply that authority. Validate the selected managed path and project/session
|
|
2898
|
+
header before any prior owner teardown, then durably write private previous
|
|
2899
|
+
and selected metadata. Retain all session files, queues and journal records.
|
|
2900
|
+
Start the selected persisted identity through the existing permission policy
|
|
2901
|
+
and verified teardown. There is no automatic fallback, implicit empty-session
|
|
2902
|
+
proof or effect retry; ordinary restart and captureResume remain strict.
|
|
2903
|
+
|
|
2904
|
+
## Amendment: pull-only latency (#398)
|
|
2905
|
+
|
|
2906
|
+
A pull-only peer learns of important work only when its model calls a hub tool,
|
|
2907
|
+
and repo-heavy work was coordinated over chat it read too late.
|
|
2908
|
+
|
|
2909
|
+
- When an `important` envelope is queued for a pull-only peer, the bus calls the
|
|
2910
|
+
advisory `onImportantQueued` hook and the daemon sends that peer's control
|
|
2911
|
+
socket `{t:"queued", queued, important}`, as it does when a pull-only session
|
|
2912
|
+
attaches with important work already queued. It is not a delivery: nothing is
|
|
2913
|
+
dequeued, steered, journaled or settled, and the queue still waits for
|
|
2914
|
+
`hub_inbox`. The `inbox` reply adds `waitingImportant`.
|
|
2915
|
+
- The plugin caches the counts and appends one line naming the important count
|
|
2916
|
+
to every hub tool result except `hub_inbox` until a read reports none. An older
|
|
2917
|
+
plugin ignores the unknown push; an older hub never sends it.
|
|
2918
|
+
- `scripts/check.sh` takes a heavy-job slot, a directory in the git common dir
|
|
2919
|
+
shared by every worktree, before any step. A second gate waits up to
|
|
2920
|
+
`AHUB_CHECK_LOCK_WAIT_S` (1800 s; 0 fails at once) and names the holder; a
|
|
2921
|
+
holder whose pid is gone is reaped. The slot works with no hub running. It is
|
|
2922
|
+
not bus-visible; moving it into the hub is the upgrade if pid reuse or reap
|
|
2923
|
+
races bite.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 0.12.29 release verification
|
|
2
|
+
|
|
3
|
+
This record covers release preparation and source review. Publication and installation receipts are recorded separately after their gates succeed.
|
|
4
|
+
|
|
5
|
+
## Candidate
|
|
6
|
+
|
|
7
|
+
0.12.29 carries PR #409 (#408), the site correction in PR #406 and the #273 execution-plan corrections in PR #407. Control protocol remains 16.
|
|
8
|
+
|
|
9
|
+
- Explicit `--live-test` delegation permits operational console and peer lifecycle actions with a mandatory initiating-peer audit. Allowed agent commands retain their peer identity; person-attributed writes refuse under delegation.
|
|
10
|
+
- Dashboard delegation is bound to the issued session and checked server-side. Recovery refuses unsupported target packages before effects; supported headless restores use the ordinary target CLI with the recovery operation id.
|
|
11
|
+
- The #273 ledger includes the current native checks and makes machine-wide upgrade isolation explicit. No native leg is marked passed by these preparation changes.
|
|
12
|
+
|
|
13
|
+
## Document review
|
|
14
|
+
|
|
15
|
+
Security, Operations and the design specification describe the reviewed delegation boundary. README, Quickstart and the current Operations examples name 0.12.29. The stale area notes are checked against the CLI identity, console, recovery, dashboard and audit changes; their existing rules remain applicable. Document stamps name the release preparation commit, which must remain an ancestor of the merge commit.
|
|
16
|
+
|
|
17
|
+
## Recorded checks
|
|
18
|
+
|
|
19
|
+
- PR #409 head a8b9a56b: independent source review and board tasks #64/#65 approved. Exact-head Ubuntu and macOS full gates passed (`check: OK`); the headless restoration regression is fixture/CLI proof, not native Pi restoration.
|
|
20
|
+
- Original PR #407 head c637a088: Ubuntu, macOS and seeded guards passed in CI run 38791043404. The corrected execution plan was independently reviewed at 780853b6.
|
|
21
|
+
- The final release head requires its own Ubuntu/macOS `scripts/check.sh` and seeded guards before merging. Committed document freshness and stamp ancestry are checked again before tagging. The release workflow requires green CI for the identical tree before npm publication.
|
|
22
|
+
|
|
23
|
+
## Not verified by this record
|
|
24
|
+
|
|
25
|
+
Native, account, visual and research checks remain tracked in #273 and #1. Package publication, global CLI/plugin installation and running-hub upgrade are separate operational results; this preparation record does not claim them.
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Issue #273 operator execution plan
|
|
2
|
+
|
|
3
|
+
## Scope and dated observations
|
|
4
|
+
|
|
5
|
+
- Date: 2026-10-16, Asia/Seoul.
|
|
6
|
+
- Initial observation source: main `426bab99`, release 0.12.28, protocol 16. The following CLI refusals describe that installed version, before #408.
|
|
7
|
+
- Issue #273 was read live, including its 2026-10-14 additions at initial preparation; the matrix below was refreshed for the five 2026-10-16 additions before release. Every checkbox remained unchecked.
|
|
8
|
+
- `ahub --version` returned `0.12.28`.
|
|
9
|
+
- `ahub status --json` returned daemon version `0.12.28`, protocol `16`, `stopping: false`, Claude idle, Codex busy, Kimi offline and Pi idle. These are status observations, not model-delivery or restoration receipts.
|
|
10
|
+
- `ahub ui` exited 1 with `ahub: codex cannot run ahub ui; the person runs it in ahub console or a terminal`.
|
|
11
|
+
- LCU app selection for `com.apple.Terminal` returned `Computer Use is not allowed to use the app 'com.apple.Terminal' for safety reasons.` No Terminal inspection or input occurred.
|
|
12
|
+
- The operator selected procedure and blocker preparation before live execution. No identity markers were removed, no console connection was impersonated, and no lifecycle, reset, roster, quota or provider experiment was run.
|
|
13
|
+
|
|
14
|
+
## Supported execution route and remaining boundaries
|
|
15
|
+
|
|
16
|
+
From 0.12.29, an explicitly authorized agent runs operational CLI steps with
|
|
17
|
+
`ahub --live-test <command> [args...]`, including `init`, `up`, `console`,
|
|
18
|
+
`settings`, `reset`, `upgrade`, `recovery` and roster operations. Follow
|
|
19
|
+
[Agent-operated live verification](../operations.md#agent-operated-live-verification).
|
|
20
|
+
Record the initiating peer and the mandatory delegation audit (`agent_cli`
|
|
21
|
+
event or retained CLI audit), alongside the command and operational receipts.
|
|
22
|
+
The original 0.12.28 refusal above is historical evidence, not a current CLI
|
|
23
|
+
blocker. Identity markers remain intact; the supported option supplies authority.
|
|
24
|
+
|
|
25
|
+
Allowed-class commands retain the agent's peer identity, including messaging
|
|
26
|
+
and review verdicts. The flag refuses person-attributed writes, including
|
|
27
|
+
`--as-user`, task labels, task assign/escalate and planning/memory writes.
|
|
28
|
+
Delegated dashboard sessions permit operational controls but refuse sending,
|
|
29
|
+
proposals and person-attributed planning/history actions; changing a request body
|
|
30
|
+
cannot remove that restriction. Exercises requiring those actions or a person's
|
|
31
|
+
sign-off need the ordinary authorized actor path and cannot be completed merely
|
|
32
|
+
by adding the flag.
|
|
33
|
+
|
|
34
|
+
LCU's Terminal denial is a separate external computer-use restriction and remains
|
|
35
|
+
in force. CLI delegation does not grant Terminal app access or prove native
|
|
36
|
+
visual, account or accessibility observations. Record any inaccessible native
|
|
37
|
+
surface as unverified while continuing reachable authorized CLI checks.
|
|
38
|
+
|
|
39
|
+
## Execution order
|
|
40
|
+
|
|
41
|
+
Use a disposable Git project under the workspace scratchpad, outside this
|
|
42
|
+
checkout, and initialize its own Git boundary before `ahub init`. An authorized
|
|
43
|
+
agent runs `ahub --live-test init`, reviews the resulting configuration and starts
|
|
44
|
+
it with `ahub --live-test up`. Record its absolute path, project id and delegation
|
|
45
|
+
audit. Keep destructive recovery/reset experiments separate from the project
|
|
46
|
+
used for browser and model checks. Recovery can hold a machine-wide lock, so
|
|
47
|
+
inspect `ahub --live-test recovery status` before starting an operation and wait
|
|
48
|
+
for unrelated operations to finish. Upgrade isolation has the additional
|
|
49
|
+
machine-wide and shared-configuration requirements below.
|
|
50
|
+
|
|
51
|
+
Use installed, authenticated native tools. Record each version before its first
|
|
52
|
+
turn. Do not change credentials, buy access or exhaust quota to produce a result.
|
|
53
|
+
Do not run another session's stop or reset. Keep identity fencing in effect and
|
|
54
|
+
use the documented delegation route rather than removing identity markers.
|
|
55
|
+
|
|
56
|
+
1. Run reachable operational checks through `ahub --live-test`; retain their delegation audits and readbacks. Inspect terminal/dashboard rendering only through an available permitted native surface.
|
|
57
|
+
2. Run native messaging and role/planner exercises on the disposable project using the ordinary peer or person path as required by attribution; the delegation flag does not authorize person-content writes.
|
|
58
|
+
3. Run roster and recovery experiments with disposable conversations only, using the delegated operational CLI route and recording native continuity separately.
|
|
59
|
+
4. Run the real repository SDLC cycle only with an explicitly selected issue and release window, retaining required person verdicts.
|
|
60
|
+
5. Record each result in `docs/smoke.md`, retaining any unverified remainder and external blocker.
|
|
61
|
+
|
|
62
|
+
## Required observations by issue entry
|
|
63
|
+
|
|
64
|
+
All rows below are pending. A procedure reference is not evidence of execution.
|
|
65
|
+
Section names refer to [the smoke checklist](../smoke.md).
|
|
66
|
+
|
|
67
|
+
| Entry | Procedure or setup | Evidence required before checking the issue box |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| #201 AC2/AC7, #213 AC7 | Console layout and readability | Light/dark terminal, stream and panels; terminal name, dimensions, readable text and observed clipping |
|
|
70
|
+
| #205 AC3 | Claude without channel evidence | Managed Claude push and settlement beside plain Claude tools-only; correlated message and settlement ids |
|
|
71
|
+
| #206 AC4 | Upgrade procedure below | Two distinct releases, unmanaged Claude marked reconnect-only, same native conversation after reconnect |
|
|
72
|
+
| #214 AC6 | ahub reset on a scratch project | Both reset scopes, queue/board checks, archive permissions and restored board, same project id |
|
|
73
|
+
| #215 AC6 | Expired-lease procedure below | Real expired lease and missing transcript, daemon/CLI/lock/project/archive outcomes, completion or audited disposition |
|
|
74
|
+
| #225 AC9 | Target-crash procedure below | Target killed after peers-restored, supported resume, original conversation and restart count readback |
|
|
75
|
+
| #269 AC10 | Settings from the dashboard and the terminal, parts 1-2 | Light/dark, phone width and keyboard path; actual Orca and terminal.open launches with native Pi attached |
|
|
76
|
+
| #285 phase 1 | Record table, #285 live item 1 | Real Kimi turn, status context source/value, usage_update timing relative to correlated prompt result |
|
|
77
|
+
| #284 phase 1 | One-shot command output | status/board/budget/doctor, light/dark, 80 and wider columns, console rendering and full suggested ids |
|
|
78
|
+
| #298 | Unified dashboard slow start | Real browser unconfirmed text, 30-second hold and keyboard focus after Start; a deterministic slow native start is a prerequisite |
|
|
79
|
+
| #296 | Ending Codex turn | Correlated native turn/steer response, elapsed time and exact refusal; a successful steer alone does not prove refusal matching |
|
|
80
|
+
| #315 Codex | Live roster return | Removal exit, printed resume command, restored same thread and peer reattachment |
|
|
81
|
+
| #315 Pi | Live roster return | Retained terminal/process, admission refused off roster, same TUI reattaches; prepare blocked until retained TUI ends |
|
|
82
|
+
| #316 trust and ingestion | Kimi TUI pull mode | Actual trust screen, project MCP tools and model-visible managed instructions/tool descriptions |
|
|
83
|
+
| #316 messaging/discovery | Kimi TUI pull mode | Correlated hub_inbox/hub_send exchange with another peer; trusted project and overlay discovery |
|
|
84
|
+
| #316 headless return | Kimi TUI pull mode | TUI to headless to TUI, session/config restoration readback; argv fixtures are insufficient |
|
|
85
|
+
| #256 identity/modes | Qwen Code 0.25.0 production peer | Real ACP supported identity and advertised modes; stop on CLI/ACP mismatch |
|
|
86
|
+
| #256 native provider | Qwen Code 0.25.0 production peer | Actual model identity, delivery, exact tool call/result and mode confirmation |
|
|
87
|
+
| #256 stop/recovery | Qwen Code 0.25.0 production peer | Owned stop and controlled/crash recovery retain the recorded conversation |
|
|
88
|
+
| #256 quota | Observe an organic refusal only | Version and exact sanitized native refusal; unknown remains failed delivery |
|
|
89
|
+
| #259 AC11 | Research-profile exercise | Two native agents, three sources, configured routing/classes, plans, role/tool ingestion, deterministic citations and person sign-off |
|
|
90
|
+
| #259 converters | Intended formats and configured converters | Actual conversion, review and undo previews; timing, caps and named-only fallback |
|
|
91
|
+
| #259 guidance | Same native profile sessions | Native profile/custom-stage guidance retention; preserve separate #295 and research measurements |
|
|
92
|
+
| #257 AC6 | SDLC gates | Real repository issue through merge/release under advise; issue/PR/head ids, gate blockers and release report |
|
|
93
|
+
| #295 AC16 | Native role/task cycle | Role text ingestion, retention after actual compaction, assignment/reassignment notice and review duty |
|
|
94
|
+
| #280 AC11 | Console attention, Global attention status, Approved character, Dashboard character | Per-phase light/dark, tmux, colour off, blocks/ascii and actual dashboard look |
|
|
95
|
+
| #263 AC11 | Planning and release controls | Native planner creates two releases; planned/actual dates read back |
|
|
96
|
+
| #263 board/intake | Project board | Desktop/phone browser against real hub, permission/state readback and actual GitHub issue intake |
|
|
97
|
+
| #306 | Observe an organic Kimi weekly/monthly refusal only | CLI version and exact sanitized prefix; do not deliberately consume quota |
|
|
98
|
+
| #403 | Offline Pi preserved-history recovery | Actual selected native session restored with identity/queue retained; a live owner refused |
|
|
99
|
+
| #398 | Pull-only important-message advisory | Real Kimi TUI and plain Claude see the tool-result advisory; hub_inbox drains it |
|
|
100
|
+
| #391 pet lifecycle | Standalone pet window | Actual stop changes it to Offline and host exits; native screenshots of states |
|
|
101
|
+
| #391 dashboard CSP | Split dashboard views | Browser-console capture of CSP behavior, separate from the earlier owner browser look |
|
|
102
|
+
| #394 VoiceOver | Office desk More control | Native VoiceOver traversal; DOM/click/Enter/Space regressions remain separate |
|
|
103
|
+
|
|
104
|
+
## Upgrade with unmanaged Claude (#206)
|
|
105
|
+
|
|
106
|
+
1. An authorized operator starts the disposable project on a known older release, records its version/project id and attaches an unmanaged Claude session using the documented plain-Claude tools-only setup. Record its native session id and a harmless conversation marker.
|
|
107
|
+
2. Use an isolated test environment for the hub home/registry and shared Claude plugin setup. Upgrade is machine-wide, even when invoked from the scratch cwd: it plans all registered running projects and changes the shared package/plugin; `--project` does not scope it. Run the target coordinator with `ahub --live-test upgrade --to 0.12.29 --dry-run` and retain the complete plan. Verify every planned root is a disposable fixture, record the shared CLI/plugin fate, and confirm the intended unmanaged Claude is reconnect-only. Stop without applying if any non-disposable project or shared setup is in scope. A separate AGENTHUB_HOME alone does not isolate the shared plugin; use a dedicated native configuration/test environment too.
|
|
108
|
+
3. The authorized agent applies that same target with `ahub --live-test upgrade --to 0.12.29 --yes` after reviewing the plan (a person may use the ordinary interactive path). Retain the delegation audit. Record operation id, source and target versions, terminal fate and plugin reconnect outcome. Do not substitute a restart at the same version.
|
|
109
|
+
4. Read back `ahub status`, the original native session id and marker, and one correlated hub message receipt. Record whether a second terminal appeared or a conversation was replaced.
|
|
110
|
+
5. Capture final operation and lock status. A refusal or failed reconnect is a failed leg, with its exact wording; it is not a pass based on the dry-run plan.
|
|
111
|
+
|
|
112
|
+
## Expired preparation lease with missing Codex transcript (#215)
|
|
113
|
+
|
|
114
|
+
This needs an isolated failure-injection setup before it is executable. There is
|
|
115
|
+
no public `ahub recovery prepare` CLI. Do not invent one or edit production
|
|
116
|
+
recovery JSON to claim a native reproduction. `test/upgrade.test.ts`,
|
|
117
|
+
`expiredLease`, is a scripted-driver fixture and is only a setup reference.
|
|
118
|
+
|
|
119
|
+
1. Give disposable Codex its own native session store and complete a harmless turn so its transcript exists. Record project id, daemon instance, native thread id and transcript path. Keep the original transcript outside the fixture's missing-path condition; never remove a production transcript.
|
|
120
|
+
2. In a controlled scratch-only harness, stop the coordinator after real source preparation and before commit, preserving its operation receipt. Record the daemon's preparation, terminal close receipts and runner identity. The harness and its pause point must be reviewed before use.
|
|
121
|
+
3. Make only the disposable transcript unavailable and allow the real preparation lease to expire. Confirm expiry from the daemon log/readback rather than changing a clock or receipt timestamp.
|
|
122
|
+
4. The authorized agent runs `ahub --live-test recovery status <operation-id>` and the supported next action it offers. Capture the exact missing-session refusal. Restore the disposable transcript and resume, or use the offered audited disposition with a reason. Do not force a fresh conversation and label it restoration.
|
|
123
|
+
5. Record daemon and CLI outcomes, operation/lock state, project id before/after, archive paths and modes, and the final continuity or lostContinuity disposition. Preserve failed intermediate receipts.
|
|
124
|
+
|
|
125
|
+
## Target crash after peers-restored (#225)
|
|
126
|
+
|
|
127
|
+
1. In a separate disposable project, establish native conversations with harmless markers and start a controlled recovery. Save its operation id and source conversation ids.
|
|
128
|
+
2. Observe the real `peers-restored` phase before release. A controlled pause at that boundary is required: if the operation already completed, this run cannot demonstrate this failure point. Do not fabricate the phase by editing a receipt.
|
|
129
|
+
3. Verify the target pid belongs to this disposable project's daemon and record its instance id. The authorized operator ends only that target daemon through a permitted process-control surface. Record native launcher/process state after the exit.
|
|
130
|
+
4. Run `ahub --live-test recovery status <operation-id>`, then its offered `ahub --live-test recovery resume <operation-id>`. Retain the delegation audits. If a surviving launcher blocks it, end the identified disposable launcher as instructed and retry the supported action.
|
|
131
|
+
5. Verify the new target instance, recorded restart count, same native conversations and markers, no duplicate terminal, final operation status and lock release. A missing snapshot or failed native resume remains a failure, with the precise refusal and the supported disposition recorded.
|
|
132
|
+
|
|
133
|
+
## Recording and closure
|
|
134
|
+
|
|
135
|
+
For each execution record: date/time, source commit, hub/native versions, project
|
|
136
|
+
id, exact command or interaction, expected observation, actual observation,
|
|
137
|
+
correlated ids, sanitized evidence path and pass/fail/unverified verdict. Record
|
|
138
|
+
partial success at the substep level. Keep raw tokens, cookies, private task text
|
|
139
|
+
and account details out of committed evidence.
|
|
140
|
+
|
|
141
|
+
On a confirmed defect, preserve its failure wording and open a linked defect
|
|
142
|
+
issue within the user's authorized scope. Check a #273 item only after its dated
|
|
143
|
+
record covers the entire item, or a failed run is recorded with a linked defect.
|
|
144
|
+
Environment/tool restrictions remain unverified prerequisites. They do not meet
|
|
145
|
+
the issue's failed-product-run alternative. #273 cannot close from this plan.
|
|
146
|
+
|
|
147
|
+
The initial preparation ran no full check or native model turn. Its original
|
|
148
|
+
commit c637a088 subsequently passed Ubuntu/macOS full gates and seeded guards
|
|
149
|
+
in CI run 38791043404. The release candidate must earn its own exact-head checks;
|
|
150
|
+
none of those automated results completes a live leg.
|