@staix/agent-hub 0.12.28 → 0.12.30

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.
Files changed (68) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +79 -219
  3. package/docs/agent-notes/README.md +12 -0
  4. package/docs/agent-notes/adapters.md +1 -1
  5. package/docs/agent-notes/bus.md +3 -1
  6. package/docs/agent-notes/daemon.md +13 -0
  7. package/docs/agent-notes/local-worker.md +2 -2
  8. package/docs/agent-notes/tasks.md +9 -0
  9. package/docs/agent-notes/tests.md +1 -1
  10. package/docs/memory.md +70 -152
  11. package/docs/operations.md +237 -14
  12. package/docs/plans/2026-10-16-amem-failure-registry.md +101 -0
  13. package/docs/plans/2026-10-16-amem-p0-baseline.md +110 -0
  14. package/docs/plans/2026-10-16-amem-p2-read-tools.md +28 -0
  15. package/docs/plans/amem-cases.json +482 -0
  16. package/docs/quickstart.md +9 -2
  17. package/docs/security.md +39 -2
  18. package/docs/smoke.md +65 -0
  19. package/docs/specs/2026-09-19-agent-hub-design.md +113 -5
  20. package/docs/verification/2026-10-16-0.12.29.md +25 -0
  21. package/docs/verification/2026-10-16-273-live-verification.md +150 -0
  22. package/docs/verification/2026-10-17-0.12.30.md +70 -0
  23. package/docs/verified.json +13 -13
  24. package/package.json +5 -2
  25. package/plugins/agent-hub/.claude-plugin/plugin.json +1 -1
  26. package/plugins/agent-hub/server.js +64 -44
  27. package/src/cli/console-state.ts +92 -20
  28. package/src/cli/console.ts +25 -6
  29. package/src/cli/help.ts +4 -2
  30. package/src/cli/identity-audit.ts +2 -2
  31. package/src/cli/identity.ts +15 -1
  32. package/src/cli/main.js +2 -2
  33. package/src/cli/main.ts +78 -39
  34. package/src/cli/memory.ts +87 -187
  35. package/src/cli/output.ts +6 -0
  36. package/src/cli/recovery-package.ts +59 -10
  37. package/src/cli/upgrade-runtime.ts +60 -18
  38. package/src/cli/upgrade.ts +8 -0
  39. package/src/hub/board.ts +2 -1
  40. package/src/hub/bus.ts +33 -12
  41. package/src/hub/daemon.ts +141 -31
  42. package/src/hub/envelope.ts +30 -0
  43. package/src/hub/events.ts +1 -1
  44. package/src/hub/git.ts +2 -38
  45. package/src/hub/hub-tools.ts +5 -1
  46. package/src/hub/lifecycle.ts +2 -2
  47. package/src/hub/manager.ts +15 -11
  48. package/src/hub/memory-candidates.ts +103 -0
  49. package/src/hub/memory-fail.ts +25 -0
  50. package/src/hub/memory-observations.ts +47 -0
  51. package/src/hub/memory-plan-guard.ts +33 -0
  52. package/src/hub/memory-policy.ts +42 -0
  53. package/src/hub/memory-profile-check.ts +170 -0
  54. package/src/hub/memory-profile.ts +192 -0
  55. package/src/hub/memory-staleness.ts +55 -0
  56. package/src/hub/path-policy.ts +8 -0
  57. package/src/hub/project.ts +4 -37
  58. package/src/hub/read-tools.ts +127 -0
  59. package/src/hub/tasks.ts +201 -41
  60. package/src/hub/ui.ts +10 -7
  61. package/src/local/deny.ts +4 -17
  62. package/src/memory/brief.ts +8 -5
  63. package/src/memory/capture.ts +2 -1
  64. package/src/memory/recall.ts +50 -110
  65. package/src/pi/process-signature.ts +2 -42
  66. package/src/memory/import.ts +0 -90
  67. package/src/memory/store.ts +0 -805
  68. package/src/memory/sync.ts +0 -145
package/docs/smoke.md CHANGED
@@ -2,6 +2,71 @@
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
+
59
+ ## Console task and queue operations (#424)
60
+
61
+ 2026-10-16, macOS, source `691f00ac`: a disposable Git project and fake ACP
62
+ peer ran the real console in `tmux` at 100x30. Through actual
63
+ `ahub console --panels` key input, `a` plus a peer, Enter and `y` assigned with
64
+ the displayed `flowRevision`; `u`, Enter and `y` removed the owner/reservation;
65
+ and `r` plus a reason and `y` discarded a queued delivery. Readback showed
66
+ `state=proposed`, `owner=null`, `reserved=null`, `flowRevision=3`, and queue
67
+ states `completed`, `discarded`, `queued`. This was real terminal input and
68
+ daemon readback, not a fake-terminal assertion or a model turn.
69
+
5
70
  ## Hub memory (#258)
6
71
 
7
72
  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`).
@@ -159,8 +159,8 @@ hub CLI / console ── control WS 127.0.0.1:<ctl> ─────────
159
159
  30 s, then goes offline with queued work retained if no report arrives. `--model` maps to `kimi --model <alias> acp`
160
160
  (verified flag). Reusable for `opencode acp`.
161
161
  - Local worker (amended in M3): a hub-native tool-calling loop over non-streaming
162
- `POST /chat/completions` with plain `fetch`, no SDK (the repo keeps zero runtime
163
- dependencies). Tools `read`, `write`, `edit`, `bash`, `git`, `hub_send` (`hub_task_*` with
162
+ `POST /chat/completions` with plain `fetch`, no SDK (the repo keeps zero third-party runtime
163
+ dependencies; the first-party memory core is an exact-pinned library). Tools `read`, `write`, `edit`, `bash`, `git`, `hub_send` (`hub_task_*` with
164
164
  M4). Paths are realpath-scoped to cwd with a secrets denylist; `.git` and `.agenthub` are
165
165
  not writable. `write`, `edit`, `bash` and mutating `git` go through the console permission
166
166
  relay unless the hub runs `--unattended`. Everything that executes runs under seatbelt
@@ -554,7 +554,7 @@ New repo layout:
554
554
  src/hub/ daemon, bus, peer-registry, state-machines, board, budget, router
555
555
  src/adapters/ claude-channel.ts, codex-appserver.ts, acp.ts, local-worker.ts
556
556
  src/switchyard/ config generator, sidecar lifecycle, health
557
- src/memory/ claude-mem worker client, capture for the local worker, recall (inject, brief), remember
557
+ src/memory/ hub memory integration: claude-mem client, capture, briefs and recall; portable core is @staix/agent-mem
558
558
  src/cli/ up, claude, codex, kimi, local, say, tail, board, route, budget, status, logs, kill, init
559
559
  plugins/agent-hub/ .claude-plugin/plugin.json, .mcp.json, server bundle, hooks (SessionStart health, Stop announce)
560
560
  .claude-plugin/marketplace.json
@@ -1255,7 +1255,8 @@ session modes (`default`, `plan`, `auto`, `yolo`) but nothing per server or tool
1255
1255
  ignored with a note in `hub.log` and `ahub doctor`, and is no longer
1256
1256
  machine-local because nothing reads it.
1257
1257
  - Capabilities: `propose`, `assign` (a proposal naming another peer as owner),
1258
- `remember`, `important`. A peer not listed in `capabilities` has all of them,
1258
+ `remember`, `memory_correct` (screened correction candidates only, never acceptance), `memory_read` (the `hub_memory_search`, `hub_memory_show` and
1259
+ `hub_memory_graph` read tools, #412 P2), `important`. A peer not listed in `capabilities` has all of them,
1259
1260
  which keeps today's behaviour, and a listed peer whose value is not a list has
1260
1261
  none; the console user and the hub are never limited. `remember` gates the
1261
1262
  `hub_remember` tool only, not the notes the hub keeps of done summaries and
@@ -1947,10 +1948,74 @@ task list polling does not. `hub_status` stays conductor-only.
1947
1948
  proposer as the actor with reason `manual` (on the `reassigned` or `reserved`
1948
1949
  entry), and writes no conduct audit event; during a PII turn it is refused
1949
1950
  like the conductor's.
1951
+
1952
+ ## Amendment: revision-safe console task and queue operations (issue #424)
1953
+
1954
+ - Task list/show responses add `flowRevision`, the monotonic history length,
1955
+ separate from `planningRevision` and the delivery journal revision. This is
1956
+ additive public metadata and does not bump the control protocol. `Board.update`
1957
+ can check an expected value in its synchronous read-check-write section.
1958
+ - A revision-bound `ahub task assign` uses the new console-only
1959
+ `task_assign_checked`; unchecked `task_assign` remains compatible. The new
1960
+ console-only `task_unassign` and checked operation are unknown to an older hub,
1961
+ which therefore refuses rather than ignoring the revision. A console whose
1962
+ rows lack `flowRevision` refuses task row actions and asks for an upgrade.
1963
+ `ahub queue resolve` accepts an optional displayed revision and otherwise keeps
1964
+ its existing fresh-show behavior. New operations and optional fields preserve
1965
+ the protocol version.
1966
+ - Tasks and Queue selections follow ids across refreshes, never indices into
1967
+ replacement rows. A row-started action fixes its id and revision while peer,
1968
+ reason and final role/action remain editable; confirmation uses the validated
1969
+ final command and its consequence. Refresh follows every completed console
1970
+ command, including failure and saved-but-unconfirmed assignment, without an
1971
+ automatic resend. Existing `AssignmentUndeliveredError` semantics remain.
1972
+ - Tasks `a` assigns owner in `proposed`, `in_progress` and `changes_requested`,
1973
+ and reviewer in `in_review`; waiting owner assignment is a reservation. `u`
1974
+ unassigns, and `r` reviews only in `in_review`. Direct owner reassignment or
1975
+ unassignment in `in_review`, physical task deletion/cancellation and roster
1976
+ removal stay outside this feature.
1977
+ - `Tasks.unassign` is person-only. It refuses `approved` and `backlog`, an
1978
+ already absent role and owner removal in `in_review`. Owner removal clears the
1979
+ owner and reservation and returns active work to `proposed`; reviewer removal
1980
+ keeps the current state. The human reviewer of PII work cannot be removed.
1981
+ Owner removal writes `unassigned` and leaves turn-free cohorts; reviewer
1982
+ removal writes `reviewer changed`. Neither operation routes a replacement,
1983
+ adds a decline exclusion, stops a native process or rolls back effects.
1984
+ - A person `unassigned` event suppresses later automatic owner offers across
1985
+ dependency release, planner pulls, release timers and restart recovery until
1986
+ an explicit assignment or reservation. The marker is derived from history, so
1987
+ no schema migration is needed, and it also fences planner undo and re-pull.
1988
+ Former queued task/review requests are withdrawn, but accepted, dispatching
1989
+ and needs_review deliveries are never implicitly resolved. Withdrawal notices
1990
+ use delivery evidence or accepted/claimed board evidence, never an unread
1991
+ queue alone. Former agents fail current-authority checks while the person's
1992
+ explicit review override remains.
1993
+ - Assignment/review publication has a role-specific fence after every await and
1994
+ immediately before publication. Existing supersession events, role generation
1995
+ and task state suppress obsolete envelopes; accept, done and approval count as
1996
+ supersession even when the owner id is unchanged. Supersession returns the
1997
+ current task rather than aborting the remaining operation. Current metadata is
1998
+ re-read before constructing a still-valid envelope, so reviewer-only changes
1999
+ refresh reviewer content and quiet bookkeeping does not suppress valid owner
2000
+ delivery.
2001
+ - Queue `r` prefills `discard` for `queued` and `retry` for `needs_review`, never
2002
+ `completed` by default. Every resolve needs reason and confirmation. Queued
2003
+ discard removes queued originals; needs-review discard settles its receipt and
2004
+ hold. Retry creates one linked attempt. None cancels a task or claims native
2005
+ or external rollback. Task and queue projections retain their distinct PII and
2006
+ envelope-privacy redaction.
2007
+
2008
+ ## Amendment: delegated agent live verification (#408)
2009
+
2010
+ - 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.
2011
+ - 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.
2012
+ - 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.
2013
+ - 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.
2014
+
1950
2015
  ## Amendment: ahub reset (issue #214)
1951
2016
 
1952
2017
  `ahub reset [--all] [--yes]` returns a project's hub to a clean state. It is
1953
- human-only (the CLI identity gate refuses it from an agent shell) and a dry run
2018
+ console-only by default (explicit authorized delegation is described in #408) and a dry run
1954
2019
  unless `--yes`: the dry run reads `hub.db` read-only (with `immutable=1` when
1955
2020
  `hub.db-wal` or `-shm` is absent, so it creates neither) and prints delivery ids,
1956
2021
  peer names and counts per category, never task or message text. With `--yes`
@@ -2914,3 +2979,46 @@ and repo-heavy work was coordinated over chat it read too late.
2914
2979
  holder whose pid is gone is reaped. The slot works with no hub running. It is
2915
2980
  not bus-visible; moving it into the hub is the upgrade if pid reuse or reap
2916
2981
  races bite.
2982
+
2983
+
2984
+ ## Amendment: consume the first-party agent-mem package (#412, P5)
2985
+
2986
+ The portable core is the first-party `@staix/agent-mem` library, initially exact-pinned at `0.1.1`; agent-hub keeps zero third-party runtime dependencies. Its store, sync, claude-mem import, project/home helpers and raw memory/goal commands are imported from the package root, with no vendored copies. Platform helpers use the public Node-safe `@staix/agent-mem/platform` subpath: `0.1.0` exposes only a root that loads `bun:sqlite`, which cannot load in Node-hosted Pi extensions. `0.1.1` supplies the required compatibility export without changing the platform algorithms. The package is the single implementation of deny, hardened git, realPath and process identity, re-exported through the existing local/hub/Pi modules so their callers retain one contract. Package storage semantics and the compatibility schema/hash/path invariants are unchanged.
2987
+
2988
+ `src/memory/` retains only hub integration: briefs, recall, the optional claude-mem worker client and capture. The hub owns `src/hub/memory-policy.ts` (`withoutPii`, `promotionScreen`, `mentionsPrivatePath`), `src/hub/read-tools.ts`, task lifecycle writes, lease renewal, model-suggested edges, ask and dashboard consumers. Current project policy is injected through `StoreOptions.screen` and the raw command callbacks. Tasks remains the write authority; PII-turn refusals, current-policy screening before counting/truncation, capture exclusion and the peer read-tool byte budgets remain unchanged.
2989
+
2990
+ `ahub memory` and `ahub goal` keep the hub's argument and identity contract, screened agent-readable views, project configuration and TTL. The standalone person-only `amem` CLI is the package's interface; its `--policy-free` acknowledgement is not an ahub option or a reason to bypass host privacy policy. Memory availability and sync remain fail-open for hub turns, while privacy checks keep their existing fail-closed behavior. Data directory precedence is supplied by the package's `memoryHome()` without migration: `AMEM_HOME`, then `$AGENTHUB_HOME/memory`, then `~/.agenthub/memory`; explicit `StoreOptions.home` retains its parent-directory meaning.
2991
+
2992
+ `docs/memory.md` documents hub integration; [agent-mem](https://github.com/STAIxBWLB/agent-mem) owns the portable data model and CLI documentation. Portable-core import boundary checks belong to the agent-mem package CI. The former hub-local core boundary checker and its check.sh step are removed with the core; the hub keeps its exact first-party dependency pin. Consuming the package does not complete the owed live legs: copied-home old/new parity, source-unchanged checks, rollback and unrun account/device/sandbox receipts are reported separately. No release, runtime replacement or live proof is implied by the source change.
2993
+
2994
+ The consumed package requires Bun >=1.4.2; the hub manifest, plain-JavaScript startup guard and installation guide share that minimum. Node still receives the actionable refusal before any TypeScript or Bun-only import.
2995
+
2996
+ Recovery source preservation retains the exact first-party memory package under the preserved runtime, without copying any other node_modules content or linking to the mutable global install. Package identity/version and all retained dependency bytes participate in the recovery digest; cached or preserved dependency drift is refused. Preserved-source verification requires the package inside its own node_modules, refusing a missing or symlinked copy rather than falling back to a mutable ancestor installation. Staged release verification similarly binds dependency lookup to its retained install directory, including cached releases and a fresh coordinator. Releases without runtime dependencies keep their historical digest.
2997
+
2998
+
2999
+ ## Amendment: P7 Stage A read-only memory presentation (#412 P7-1)
3000
+
3001
+ The exact first-party pin is `@staix/agent-mem` 0.2.0. Agent-hub adds advisory plan-matching live fails to owner briefs and reviewer checklists, optional labeled fail text validated before the 4000-byte cap, person-only decay review, and privacy-filtered bounded read-time staleness markers. The task/PII boundaries remain in Tasks and the daemon. Details and ceilings are in `docs/memory.md`; no new v1 op, stored marker, candidate writer or live-leg claim is introduced.
3002
+
3003
+ The P7-1 hint C3 probe gate assumes the tree is not modified during a call: no probe reaches a declared private/denied path in that scope. Concurrent ancestor swaps by a process running as the person are outside the security threat model and may expose one existence bit; this ceiling has a deterministic witness test.
3004
+
3005
+
3006
+ ## P7 candidate producers and local observations (#412)
3007
+
3008
+ Tasks produces a fail candidate from a public changes-requested review with unmet items, after the current Tasks privacy screen clears the complete candidate text. The review evidence identifies the task, review event and reviewed head (explicitly unknown when absent). Missing cause or retry conditions remain explicitly unknown. Candidate failure never changes the saved review outcome.
3009
+
3010
+ `hub_memory_correct {id, text, reason}` requires its own `memory_correct` capability and refuses a PII turn. Input caps are checked before logging or storage; exact or unique visible-prefix resolution uses the current project and full-record screening. Tasks checks the proposed text like `hub_remember`, then rechecks context and target after asynchronous screening. A successful call records the full target id and revision in CandidateStore and returns only its candidate id and person-review guidance. MCP/Pi/local share the tool definition; capture excludes both arguments and results.
3011
+
3012
+ Journal handoff observes rendered native memory lines in the final preface/brief payload. First positive journal acknowledgement observes delivered for that delivery and its original render context, not a later turn; pull's completed read is the existing journal acknowledgement contract. Peer messages and cleared task completion summaries observe visible `mem:<id8+>` citations. Counter keys use full entry id, project and known task/turn/session plus journal delivery id for rendered/delivered. Unattributed citations use message:<envelope-id> or summary:<task>:<history-index> observation keys with rendered/delivered unknown; these are citation counts, not proof of a causal per-delivery ratio. Absent observations and identities remain unknown. A bounded in-memory render-context map does not reconstruct acknowledgements after restart, so those delivered values remain unknown. Private envelopes, PII tasks and PII turns produce no rows. There is no usage sync or note mutation.
3013
+
3014
+ The machine-local candidate/counter sidecar remains outside native import, recall, briefs, ask and graph evidence. A person accepts or rejects through `amem review` with its existing TTY/policy authority. Dashboard acceptance is deferred. No new v1 operation, note kind or scope is introduced.
3015
+
3016
+ ## Amendment: selected memory profiles in the hub (#412 P9)
3017
+
3018
+ The exact first-party dependency pin is `@staix/agent-mem` 0.3.0. The memory root `M` follows the package's existing home precedence independently of project state. An absent `M/profile.json` binds shared v1; an explicit generation binds `M/generations/G` through the package profile API. The hub supplies current promotion/privacy policy and TTL at that open boundary. Generation reads include the package's readonly legacy bridge; writes and generation sync stay in `G`, outside legacy logs and legacy-main history. No hub tool gains migration or prune authority, and shared-v1 operation semantics remain unchanged.
3019
+
3020
+ One explicit profile binding is used by daemon Tasks, read tools, briefs/recall/ask/dashboard, lease renewal, suggestions and sync. Hub memory and goal CLI opens use the same profile resolution. Invalid selector or missing/corrupt active generation makes native memory unavailable while bus/task service continues, with no automatic shared-v1 fallback. Daemon status distinguishes the memory package/profile binding and availability from hub health. Existing handles remain bound: periodic checks and explicit checks at hub operation entry fence later stale calls rather than rebinding the daemon. No proxy/private core ABI is used. These checks are not atomic with an in-flight core operation, so in-flight cutover is excluded: consumers must be quiesced and closed before migration/selector changes. A public core pre-write hook is the named upgrade path for an atomic fence.
3021
+
3022
+ Candidates/counters remain at the independent root `M/candidates.db` using the package's explicit sidecar home API. They are neither migrated into `G` nor synced. Selector changes fence Tasks candidate producers and retained telemetry callbacks as well as native note operations; asynchronous privacy work rechecks binding before side effects. Standalone generation `amem review` remains unsupported and refuses; this change adds neither candidate acceptance nor dashboard acceptance for generations.
3023
+
3024
+ PII authority, complete-row host screening, capture exclusion, byte budgets and fail-open task delivery remain unchanged. Memory/goal domain JSON remains unchanged; `memoryProfile` is additive only in daemon status, profile-check and the decay object. Synthetic integration must show bridged legacy reads, cross-writes through the package CLI and daemon tools, failure without fallback for invalid/missing generation state, and no note/candidate/counter writes for calls begun after a selector change while bus service remains available. Source/fixture evidence does not authorize real installation, migration or session restart. Real rollout requires separately approved deployed versions and matching live root/profile/selector bindings, synthetic canaries and quiesced/closed/reopened handles. Every running hub using this home needs an authenticated receipt: a matching ready binding, or a generation-capable unbound receipt (`disabled` when native memory is off, `unavailable` when opening failed) proving it holds no memory handle. An unbound daemon and zero running hubs are quiesced for memory; a stale bound handle, unreadable registry or unknown runtime is not ready. Native capture, account/device sync and real memory receipts remain open until observed.
@@ -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.
@@ -0,0 +1,70 @@
1
+ # 0.12.30 release verification
2
+
3
+ This record covers release preparation and source review. Publication, installation, running-hub upgrade and real memory migration require their own operational receipts; none is claimed here.
4
+
5
+ ## Candidate
6
+
7
+ Version 0.12.30, control protocol 16, from main `6363f4dbfb1a90900b291a397b892a978922f7b5`. The candidate includes every PR merged since `v0.12.29`: #413, #415, #417, #419, #420, #421, #422, #423, #425, #426, #427, #429 and #430. Every PR body was read against its final merged source; intermediate descriptions of copied memory helpers are superseded by the final single-source package imports.
8
+
9
+ - The portable core is the exact-pinned first-party `@staix/agent-mem` 0.3.0; hub privacy policy and caller authority stay in agent-hub. Shared v1 remains the default, with no automatic migration.
10
+ - Screened memory read tools, display-only recall filtering/deduplication, plan-fail advice, structured fail notes, decay review, file-level staleness and machine-local candidates/counters retain their evidence and privacy boundaries. Generation `amem review` remains refused.
11
+ - Profile binding fails closed for invalid or changed selectors while the bus/board remain available. Person profile-check distinguishes matching ready bindings, authenticated capable unbound/quiesced receipts and unknown/stale runtime evidence; registry scope is explicit.
12
+ - Before migrating a real home, upgrade every hub sharing it to 0.12.30, inventory each registry, obtain positive profile-check receipts, then quiesce consumers and close handles. A ready binding is compatible but still open; the operation-entry fence is not an atomic live-cutover guarantee.
13
+ - Console task and queue controls bind selections to ids/revisions, preserve person unassignment and use peer-specific receipt evidence. Recovery retains exact dependencies and waits for managed peer attachment without creating duplicate terminals.
14
+ - Version 0.13.0's promised removal of `local.bash_network: "direct"` has not happened; the existing ceiling and retirement plan remain unchanged.
15
+
16
+ ## Document review
17
+
18
+ The initial freshness check reproduced all 13 stale documents below. Each was compared with the source changes under its manifest paths since the prior full-SHA stamp through the candidate source. Changed source was traced to the final symbols, not inferred from prose changes alone. No document review was deferred. The already-fresh models note is outside this stale set and keeps its existing stamp.
19
+
20
+ | Document | Prior source stamp | Review result | Checked claims and correction |
21
+ | --- | --- | --- | --- |
22
+ | `README.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | corrected | Current version and Bun requirement; first-party memory tools/candidate boundary, checked console controls and pre-migration upgrade/quiesce order. |
23
+ | `docs/agent-notes/README.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | unchanged | Exact-id console attention selection and navigation remain accurate after the console controls. |
24
+ | `docs/agent-notes/adapters.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | unchanged | Node-safe process identity re-exports, tool catalogs, capability/PII checks and capture exclusions already match the final source. |
25
+ | `docs/agent-notes/benchmarks.md` | `2d3b120ab177e4fd9e6f991d038c22ca4ccb6977` | unchanged | Only deny/process helper re-exports changed in the covered source delta; runner, sandbox and retained benchmark contracts remain accurate. |
26
+ | `docs/agent-notes/budget.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | unchanged | Budget semantics remain unchanged; reviewed shared bus/daemon wiring and retained quota/hold contracts. |
27
+ | `docs/agent-notes/bus.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | corrected | Recall preface merge/deduplication and delivery/counter observation boundaries. |
28
+ | `docs/agent-notes/daemon.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | corrected | Person-only diagnostics wording includes authenticated status and person CLI receipts; reduced shell-readable status stays distinct. |
29
+ | `docs/agent-notes/local-worker.md` | `6dcc7fe00c38f13613bcf53524fa3d1527a708e5` | unchanged | Single-source hardened git/deny re-exports and local-worker memory-tool capture exclusions already match the final source. |
30
+ | `docs/agent-notes/tasks.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | corrected | Revision-bound task/queue controls and the current peer's own acceptance since its latest ownership event. |
31
+ | `docs/agent-notes/tests.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | corrected | Test preload clears inherited AMEM_HOME as well as isolating AGENTHUB_HOME. |
32
+ | `docs/operations.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | corrected | Bun/current version, package/profile rollout, screened tools and candidates, recall, withdrawal evidence and preserved-runtime attachment behavior. |
33
+ | `docs/quickstart.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | corrected | Bun/current release example and person profile-check with upgrade/quiesce/migration order. |
34
+ | `docs/security.md` | `0463ea1f251cea17ec7f32a2861de8c554fe4062` | corrected | First-party platform helper and memory credentials boundary, screened read/correction tools, sidecar isolation and non-atomic profile transition. |
35
+
36
+ The unstamped memory integration guide also clarifies person CLI diagnostics and the all-hubs-0.12.30 migration prerequisite.
37
+
38
+ Reviewed source commit `79a113dfc4395a0e00890ba8b8d2d90bb289ee9f` contains the reviewed content, package version and generated plugin assets. A separate manifest follow-up stamps that full source SHA; the manifest need not stamp itself. The release PR must be merged with a merge commit so every stamp remains an ancestor. Before tagging, run `node scripts/check-docs.mjs --require-fresh` on the committed tree again. Source freshness is not a certification of native/live behavior.
39
+
40
+ ## Recorded checks
41
+
42
+ The following existing PR receipts were read back from GitHub at their final heads. Every listed run reports successful Ubuntu, macOS and seeded-guard jobs; these are recorded prior gates, not a substitute for the release candidate's own CI.
43
+
44
+ | PR | Final head | CI run | Recorded result |
45
+ | --- | --- | --- | --- |
46
+ | [#413](https://github.com/STAIxBWLB/agent-hub/pull/413) | `fc25b2ba765196bc403c834d2c136e0b33481c1e` | [38814762057](https://github.com/STAIxBWLB/agent-hub/actions/runs/38814762057) | Ubuntu/macOS `check: OK`; seeded guards passed |
47
+ | [#415](https://github.com/STAIxBWLB/agent-hub/pull/415) | `cc1d70e4984a7a9dc2aee2f1359e749cf31d1b8b` | [38825015199](https://github.com/STAIxBWLB/agent-hub/actions/runs/38825015199) | Ubuntu/macOS `check: OK`; seeded guards passed |
48
+ | [#417](https://github.com/STAIxBWLB/agent-hub/pull/417) | `80d61f5b2fb483a8b33693cca2fcb9c7b9b6d57b` | [38848260715](https://github.com/STAIxBWLB/agent-hub/actions/runs/38848260715) | Ubuntu/macOS `check: OK`; seeded guards passed |
49
+ | [#419](https://github.com/STAIxBWLB/agent-hub/pull/419) | `0a3a8cc253be65911224ddd7e5495d4caffba29c` | [38855570074](https://github.com/STAIxBWLB/agent-hub/actions/runs/38855570074) | Ubuntu/macOS `check: OK`; seeded guards passed |
50
+ | [#420](https://github.com/STAIxBWLB/agent-hub/pull/420) | `649d368d73130bdffcb90109d8125b9135515a30` | [38855611042](https://github.com/STAIxBWLB/agent-hub/actions/runs/38855611042) | Ubuntu/macOS `check: OK`; seeded guards passed |
51
+ | [#421](https://github.com/STAIxBWLB/agent-hub/pull/421) | `d43d3e1047e0aeca4bd074ee17e854ff3e204a13` | [38862981281](https://github.com/STAIxBWLB/agent-hub/actions/runs/38862981281) | Ubuntu/macOS `check: OK`; seeded guards passed |
52
+ | [#422](https://github.com/STAIxBWLB/agent-hub/pull/422) | `8e5ddc7e6cec38d3b6f38d1a3e88d97a9cd15f79` | [38870904837](https://github.com/STAIxBWLB/agent-hub/actions/runs/38870904837) | Ubuntu/macOS `check: OK`; seeded guards passed |
53
+ | [#423](https://github.com/STAIxBWLB/agent-hub/pull/423) | `e934357ce089e3a6fbff9d71de50dd494aebc4b2` | [38878006900](https://github.com/STAIxBWLB/agent-hub/actions/runs/38878006900) | Ubuntu/macOS `check: OK`; seeded guards passed |
54
+ | [#425](https://github.com/STAIxBWLB/agent-hub/pull/425) | `c8ea0f2a64c4443d54e867122709d16c95197f04` | [38894400519](https://github.com/STAIxBWLB/agent-hub/actions/runs/38894400519) | Ubuntu/macOS `check: OK`; seeded guards passed |
55
+ | [#426](https://github.com/STAIxBWLB/agent-hub/pull/426) | `cf293a202605c664a1f74ce8407731be557dfc7f` | [38901783257](https://github.com/STAIxBWLB/agent-hub/actions/runs/38901783257) | Ubuntu/macOS `check: OK`; seeded guards passed |
56
+ | [#427](https://github.com/STAIxBWLB/agent-hub/pull/427) | `0a1b7bc984595b41ba36c15ba1ce88f5983abead` | [38923859188](https://github.com/STAIxBWLB/agent-hub/actions/runs/38923859188) | Ubuntu/macOS `check: OK`; seeded guards passed |
57
+ | [#429](https://github.com/STAIxBWLB/agent-hub/pull/429) | `b0a8e130f6c95e2766a6485ba05f170ef0b8b58c` | [38931755760](https://github.com/STAIxBWLB/agent-hub/actions/runs/38931755760) | Ubuntu/macOS `check: OK`; seeded guards passed |
58
+ | [#430](https://github.com/STAIxBWLB/agent-hub/pull/430) | `138aa9d175152b050a13cd4eafa6154aced56eb4` | [38936506477](https://github.com/STAIxBWLB/agent-hub/actions/runs/38936506477) | Ubuntu/macOS `check: OK`; seeded guards passed |
59
+
60
+ - Preparation: `bun install --frozen-lockfile` and `bun run build` completed under resource admission on the remote Linux runner. The generated plugin is 598 KB and its manifest is stamped 0.12.30; no dependency tree was copied to the Mac.
61
+ - Preparation checks: `bun x tsc --noEmit` and bundle freshness passed on the admitted remote runner; `node scripts/check-package.mjs` reported `package: OK (272 files, @staix/agent-hub@0.12.30)`.
62
+ - The final committed candidate requires its own `scripts/check.sh` or exact-head PR CI on Ubuntu/macOS, including seeded guards, before merge. Committed document freshness and stamp ancestry are checked independently; the tag workflow requires successful CI for the identical release tree before npm publication.
63
+ - The retained source/fixture tests for profile binding, package preservation and same-home cross-writes do not prove an installed native session upgrade or real migration.
64
+
65
+ ## Not verified by this record
66
+
67
+ - Native/live legs in #273 and #1 remain open according to their own ledgers. This release preparation does not turn fixture, CLI or historical operational evidence into native success.
68
+ - #412 P5 live legs L03 (real claude-mem import), L04 (real model suggestions and person confirmation) and L05 (Memory/Long-term tasks visual checks) remain unrun.
69
+ - The person's real-home migration, real remote synchronization and post-migration profile/prune readbacks are not performed in this task. Inventory/quiesce/reopen and runtime capability receipts are prerequisites, not completed results.
70
+ - npm publication/provenance, global CLI and plugin installation, running-hub upgrade, recovery completion and native session continuity need separate readbacks after the release is authorized and executed.
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 1,
3
3
  "documents": {
4
4
  "README.md": {
5
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
5
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
6
6
  "paths": [
7
7
  "package.json",
8
8
  "src/",
@@ -11,14 +11,14 @@
11
11
  ]
12
12
  },
13
13
  "docs/security.md": {
14
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
14
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
15
15
  "paths": [
16
16
  "src/",
17
17
  "templates/"
18
18
  ]
19
19
  },
20
20
  "docs/operations.md": {
21
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
21
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
22
22
  "paths": [
23
23
  "package.json",
24
24
  "src/",
@@ -35,7 +35,7 @@
35
35
  ]
36
36
  },
37
37
  "docs/quickstart.md": {
38
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
38
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
39
39
  "paths": [
40
40
  "package.json",
41
41
  "src/",
@@ -43,7 +43,7 @@
43
43
  ]
44
44
  },
45
45
  "docs/agent-notes/adapters.md": {
46
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
46
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
47
47
  "paths": [
48
48
  "src/adapters/",
49
49
  "src/pi/",
@@ -62,7 +62,7 @@
62
62
  ]
63
63
  },
64
64
  "docs/agent-notes/benchmarks.md": {
65
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
65
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
66
66
  "paths": [
67
67
  "scripts/benchmarks/",
68
68
  "test/benchmarks/",
@@ -74,7 +74,7 @@
74
74
  ]
75
75
  },
76
76
  "docs/agent-notes/budget.md": {
77
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
77
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
78
78
  "paths": [
79
79
  "src/hub/budget.ts",
80
80
  "src/cli/statusline-tee.ts",
@@ -86,7 +86,7 @@
86
86
  ]
87
87
  },
88
88
  "docs/agent-notes/bus.md": {
89
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
89
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
90
90
  "paths": [
91
91
  "src/hub/bus.ts",
92
92
  "src/hub/envelope.ts",
@@ -98,7 +98,7 @@
98
98
  ]
99
99
  },
100
100
  "docs/agent-notes/daemon.md": {
101
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
101
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
102
102
  "paths": [
103
103
  "src/hub/daemon.ts",
104
104
  "src/hub/control-client.ts",
@@ -135,7 +135,7 @@
135
135
  ]
136
136
  },
137
137
  "docs/agent-notes/local-worker.md": {
138
- "verifiedAgainst": "6dcc7fe00c38f13613bcf53524fa3d1527a708e5",
138
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
139
139
  "paths": [
140
140
  "src/adapters/local-worker.ts",
141
141
  "src/local/",
@@ -155,7 +155,7 @@
155
155
  ]
156
156
  },
157
157
  "docs/agent-notes/tasks.md": {
158
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
158
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
159
159
  "paths": [
160
160
  "src/hub/tasks.ts",
161
161
  "src/hub/board.ts",
@@ -172,7 +172,7 @@
172
172
  ]
173
173
  },
174
174
  "docs/agent-notes/tests.md": {
175
- "verifiedAgainst": "2d3b120ab177e4fd9e6f991d038c22ca4ccb6977",
175
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
176
176
  "paths": [
177
177
  "test/",
178
178
  "scripts/check.sh",
@@ -191,7 +191,7 @@
191
191
  ]
192
192
  },
193
193
  "docs/agent-notes/README.md": {
194
- "verifiedAgainst": "6dcc7fe00c38f13613bcf53524fa3d1527a708e5",
194
+ "verifiedAgainst": "79a113dfc4395a0e00890ba8b8d2d90bb289ee9f",
195
195
  "paths": [
196
196
  "src/cli/console-state.ts",
197
197
  "src/cli/attention.ts",