@staix/agent-hub 0.34.1 → 0.35.0
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 +47 -0
- package/README.md +35 -6
- package/docs/adding-an-ai-tool.md +2 -2
- package/docs/addons/claude-mem.md +4 -4
- package/docs/addons/open-code-review.md +1 -1
- package/docs/agent-notes/README.md +6 -0
- package/docs/agent-notes/adapters.md +9 -5
- package/docs/agent-notes/budget.md +1 -1
- package/docs/agent-notes/bus.md +1 -1
- package/docs/agent-notes/daemon.md +4 -3
- package/docs/agent-notes/local-worker.md +1 -1
- package/docs/agent-notes/models.md +2 -0
- package/docs/agent-notes/tasks.md +1 -1
- package/docs/agent-notes/tests.md +5 -0
- package/docs/design/adapters.md +110 -2
- package/docs/design/agent-hub-architecture.md +63 -1
- package/docs/design/agent-hub.md +6 -0
- package/docs/design/bus.md +18 -0
- package/docs/design/execution-reference.md +146 -0
- package/docs/design/task-board.md +10 -0
- package/docs/dogfood.md +33 -12
- package/docs/events.md +38 -20
- package/docs/memory.md +21 -7
- package/docs/operations.md +539 -24
- package/docs/quickstart.md +12 -4
- package/docs/research.md +71 -13
- package/docs/roles.md +1 -1
- package/docs/sdlc.md +9 -7
- package/docs/security.md +87 -11
- package/docs/smoke.md +14 -0
- package/docs/specs/2026-09-19-agent-hub-design.md +8 -3
- package/docs/verification/2026-11-07-compat-python-startup-1248.md +51 -0
- package/docs/verification/2026-11-07-compat-receipt-harness-1248.md +105 -0
- package/docs/verification/2026-11-07-compat-receipt-producers-1248.md +96 -0
- package/docs/verification/2026-11-07-compat-workflow-1248.md +94 -0
- package/docs/verification/2026-11-07-daemon-startup-1232.md +169 -0
- package/docs/verification/2026-11-07-jcode-receipt-reconstruction-1248.md +118 -0
- package/docs/verification/2026-11-07-kimi-delayed-usage.md +34 -0
- package/docs/verification/2026-11-07-kimi-review-watch-1284.md +115 -0
- package/docs/verification/2026-11-08-agy-1.5.3.md +96 -0
- package/docs/verification/2026-11-08-agy-acp-t0.md +56 -0
- package/docs/verification/2026-11-08-hub-visual-1058.md +161 -0
- package/docs/verification/2026-11-08-jcode-0991-model-setter-1317.md +143 -0
- package/docs/verification/2026-11-08-kimi-252-model-setter-1317.md +137 -0
- package/docs/verification/2026-11-08-kimi-tui-completion-1282.md +45 -0
- package/docs/verification/2026-11-08-kimi-wire-yield-1283.md +31 -0
- package/docs/verification/2026-11-08-live-model-override-1317.md +250 -0
- package/docs/verification/2026-11-08-qwen-0269-acp.md +138 -0
- package/docs/verification/2026-11-08-qwen-0269-model-setter-1317.md +91 -0
- package/docs/verification/2026-11-09-0.35.0.md +129 -0
- package/docs/verification/2026-11-09-headless-records-1320.md +157 -0
- package/docs/verification/claude-permission-transport-native.py +10 -3
- package/docs/verification/claude-shell-wrapper-native.py +8 -8
- package/docs/verified.json +245 -15
- package/package.json +3 -3
- package/plugins/agent-hub/.claude-plugin/plugin.json +1 -1
- package/plugins/agent-hub/kimi-hook.js +20397 -0
- package/plugins/agent-hub/kimi-review-policy-worker.js +217 -0
- package/plugins/agent-hub/server.js +2701 -664
- package/scripts/check-docs.mjs +12 -1
- package/src/adapters/acp-model-policy.ts +56 -0
- package/src/adapters/acp.ts +175 -5
- package/src/adapters/agy/entry.ts +8 -5
- package/src/adapters/agy/hooks.ts +65 -15
- package/src/adapters/channel-peer.ts +33 -1
- package/src/adapters/claude-implementer.ts +16 -3
- package/src/adapters/codex-appserver.ts +118 -8
- package/src/adapters/codex-review-isolation.ts +3 -1
- package/src/adapters/compat.ts +11 -6
- package/src/adapters/definitions/builtin-metadata.ts +8 -1
- package/src/adapters/definitions/native-cli-entry-kimi.ts +76 -7
- package/src/adapters/definitions/native-cli-preview-common.ts +2 -2
- package/src/adapters/definitions/native-cli-preview-kimi.ts +9 -2
- package/src/adapters/definitions/reviewer-variants.ts +3 -1
- package/src/adapters/kimi-review-policy-worker.js +2 -0
- package/src/adapters/kimi-review-policy-worker.ts +85 -0
- package/src/adapters/kimi-review-policy.ts +68 -0
- package/src/adapters/kimi-review.ts +41 -41
- package/src/adapters/kimi-tui-facts.ts +153 -0
- package/src/adapters/kimi-wire-usage.ts +33 -8
- package/src/adapters/local-worker.ts +59 -20
- package/src/adapters/model-token.ts +3 -0
- package/src/adapters/pi.ts +27 -5
- package/src/adapters/registry-types.ts +34 -3
- package/src/adapters/registry.ts +1 -0
- package/src/adapters/reviewer-policy-watch.ts +86 -0
- package/src/adapters/reviewer-print.ts +80 -18
- package/src/cli/agents.ts +1 -1
- package/src/cli/facts-hook.ts +4 -2
- package/src/cli/help.ts +3 -2
- package/src/cli/identity.ts +3 -0
- package/src/cli/kimi-facts-hook.ts +11 -0
- package/src/cli/kimi-plugin.ts +157 -0
- package/src/cli/main.ts +48 -9
- package/src/cli/model.ts +52 -0
- package/src/cli/output.ts +23 -1
- package/src/cli/reset.ts +1 -1
- package/src/cli/status-lines.ts +8 -4
- package/src/hub/budget.ts +1 -1
- package/src/hub/bus.ts +40 -2
- package/src/hub/code-facts.ts +10 -3
- package/src/hub/completions.ts +3 -1
- package/src/hub/config-apply.ts +2 -1
- package/src/hub/control-client.ts +1 -1
- package/src/hub/daemon.ts +1050 -106
- package/src/hub/deliverable-files.ts +38 -5
- package/src/hub/dogfood-profile.ts +1 -1
- package/src/hub/envelope.ts +1 -1
- package/src/hub/events.ts +28 -18
- package/src/hub/execution-lineage.ts +120 -0
- package/src/hub/execution-reference.ts +36 -0
- package/src/hub/hub-tools.ts +21 -2
- package/src/hub/instances.ts +4 -3
- package/src/hub/kimi-events.ts +46 -0
- package/src/hub/kimi-usage.ts +132 -29
- package/src/hub/lifecycle.ts +31 -15
- package/src/hub/limits.ts +13 -4
- package/src/hub/manager.ts +15 -2
- package/src/hub/memory-policy.ts +2 -1
- package/src/hub/memory-sync-attestation.ts +54 -0
- package/src/hub/memory-sync-state.ts +20 -5
- package/src/hub/model-overrides.ts +115 -0
- package/src/hub/native-hook-launch.ts +12 -3
- package/src/hub/operational-view.ts +2 -2
- package/src/hub/peers.ts +27 -0
- package/src/hub/permission-mode.ts +1 -1
- package/src/hub/person-figures.ts +88 -0
- package/src/hub/report.ts +38 -4
- package/src/hub/research-dataset.ts +158 -0
- package/src/hub/research-memory.ts +68 -0
- package/src/hub/research-quality.ts +118 -0
- package/src/hub/research-record.ts +279 -0
- package/src/hub/research.ts +126 -27
- package/src/hub/restart.ts +14 -0
- package/src/hub/settings.ts +3 -0
- package/src/hub/startup-event-seeds.ts +51 -0
- package/src/hub/startup-readiness.ts +65 -0
- package/src/hub/startup-timing.ts +38 -0
- package/src/hub/tasks.ts +29 -9
- package/src/hub/ui.ts +9 -5
- package/src/hub/visual-assets.ts +50 -0
- package/src/hub/visual.ts +257 -0
- package/src/memory/brief.ts +169 -14
- package/src/memory/capture.ts +2 -1
- package/src/memory/recall.ts +46 -5
- package/src/memory/record-provenance.ts +82 -0
- package/src/memory/records.ts +116 -0
- package/src/models/route/adec.ts +190 -0
- package/src/models/route/config.ts +37 -3
- package/src/models/route/decision-evidence.ts +83 -0
- package/src/models/route/decision.ts +143 -0
- package/src/models/route/runtime.ts +13 -6
- package/src/ui/index.html +134 -6
- package/src/ui/plugin.ts +65 -4
- package/templates/AGENTS.block.md +1 -1
- package/templates/config.json +1 -1
- package/templates/profiles/general.json +1 -1
- package/templates/profiles/research.json +1 -1
- package/templates/profiles/writing.json +1 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Kimi 2.5.2 headless ACP model setter
|
|
2
|
+
|
|
3
|
+
Date: 2026-11-08. Task #809, Refs #1317 AC4. **Passed:** the installed artifact's
|
|
4
|
+
headless ACP setter changed A to B and restored A after clear;
|
|
5
|
+
the running A turn was not changed. This is a model-free compatibility receipt,
|
|
6
|
+
not a security attestation, reviewer isolation or provider/account qualification.
|
|
7
|
+
|
|
8
|
+
## Artifact and admission
|
|
9
|
+
|
|
10
|
+
- Installed standalone macOS arm64 CLI: 2.5.2, 182,590,912 bytes, SHA-256
|
|
11
|
+
`ae3fa721a361a2c9e9b6b3960560d1572a0bca6a8d1407e2017e6b70f80e7f97`.
|
|
12
|
+
A byte-identical private executable copy was verified before/after execution.
|
|
13
|
+
Native `--version` and ACP initialize both confirmed 2.5.2. The embedded Web UI
|
|
14
|
+
contains an older 2.5.1 string; it is not this receipt's version evidence.
|
|
15
|
+
- The headless peer retains its existing native identity admission. The setter
|
|
16
|
+
additionally requires an exact receipt-backed 2.5.2 policy, the current owned
|
|
17
|
+
process/session and a valid model advertisement/baseline. No other version is
|
|
18
|
+
admitted by this receipt. `kimi-review` retains its separate COMPAT and
|
|
19
|
+
isolation gate, without this capability or a 2.5.2 verified-version change.
|
|
20
|
+
- Native adapter/latch source was committed at
|
|
21
|
+
`1b67f69db720bc7d6feaedd5ca71abbfaad50e3a` for the original A/B leg, then
|
|
22
|
+
`771117140fd7a314db0e7af79623cffe7d3c04c4` for the A/B/clear/A leg after
|
|
23
|
+
merging the updated T1 base. The probe instantiates the actual
|
|
24
|
+
`AcpPeer`, `ModelOverrides` and `ModelOverrideLatches`; it does not substitute
|
|
25
|
+
protocol responses. A transparent observer records bounded method/model IDs,
|
|
26
|
+
calls the original request with unchanged arguments and returns its same
|
|
27
|
+
promise. This is not a real dashboard/CLI or full-daemon native journey.
|
|
28
|
+
|
|
29
|
+
## Isolation
|
|
30
|
+
|
|
31
|
+
A fresh owned 0700 fixture beneath `/private/tmp/ahub-809-...` supplies HOME,
|
|
32
|
+
KIMI_CODE_HOME, TMPDIR, cwd, empty MCP and every XDG/tool home before production
|
|
33
|
+
imports. The environment is an explicit allowlist, not inherited accounts,
|
|
34
|
+
session markers, proxy credentials or personal settings. The two private models
|
|
35
|
+
`fixture-a` and `fixture-b` reference the same synthetic managed provider and
|
|
36
|
+
fixed loopback Anthropic endpoint. Synthetic file-backed OAuth data supplies
|
|
37
|
+
only `synthetic-access-only`; the installed transport sends that value as
|
|
38
|
+
`X-Api-Key`, with no Authorization or Cookie. No actual account or model is used.
|
|
39
|
+
|
|
40
|
+
The provider binds 127.0.0.1 on port 0, caps request bodies at 1 MiB, rejects
|
|
41
|
+
Origin, wrong paths/auth and excess requests, and emits fixed text SSE only.
|
|
42
|
+
There are no generated tools. ACP advertises no filesystem/terminal client
|
|
43
|
+
capability; every native permission request is denied, and the observed count
|
|
44
|
+
was zero. No reviewer agent-file allowlist or native tool-isolation claim is
|
|
45
|
+
inferred from this ACP run.
|
|
46
|
+
|
|
47
|
+
Every native launch is wrapped in Seatbelt using the existing local-worker
|
|
48
|
+
profile plus exact owned paths/port. Actual-home data and installed-binary
|
|
49
|
+
writes remain denied. Controls prove private-provider TCP succeeds, an owned
|
|
50
|
+
decoy port is denied, a named actual config cannot be read and the installed
|
|
51
|
+
binary cannot be write-opened without truncation. The only extra runtime service
|
|
52
|
+
is `com.apple.FSEvents`, needed for the native workspace watcher. An installed
|
|
53
|
+
runtime preload control observes a private-file watcher event with that service;
|
|
54
|
+
without it the same control reports EMFILE. No file limit, security setting,
|
|
55
|
+
production permission or deadline was raised.
|
|
56
|
+
|
|
57
|
+
The reused Node loopback guard is supplementary. The kernel port controls are
|
|
58
|
+
the network boundary; an empty application log alone is not proof that no call
|
|
59
|
+
was attempted. Process lifetime containment beyond observed owned cleanup
|
|
60
|
+
remains unproven; this native run is not a disposable-runner attestation.
|
|
61
|
+
|
|
62
|
+
## Observed next-turn procedure
|
|
63
|
+
|
|
64
|
+
1. `initialize` returns protocol 1, name `Kimi Code CLI` and version 2.5.2.
|
|
65
|
+
`session/new` returns a session and model config option with current A and
|
|
66
|
+
both exact fixture choices. The adapter proves its process binding and
|
|
67
|
+
immutable baseline A.
|
|
68
|
+
2. The private DB stores A, and actual `AcpPeer.deliver` sends the first prompt.
|
|
69
|
+
The provider sees `fixture-a` and holds a fixed text stream behind an explicit
|
|
70
|
+
release barrier. The adapter remains busy.
|
|
71
|
+
3. The DB is changed to B while A is held. Latch status retains effective A and
|
|
72
|
+
reports desired B/pending next turn. The request observer sees no model
|
|
73
|
+
setter; the only provider request remains A.
|
|
74
|
+
4. The fixture releases A and observes its normal completion, without cancel or
|
|
75
|
+
restart. On the next deliver, the adapter sends exactly one
|
|
76
|
+
`session/set_config_option` with `configId: model`, value `fixture-b` and the
|
|
77
|
+
bound session. Production parsing validates the response/config update.
|
|
78
|
+
5. The second fixture request uses `fixture-b`. The prompt completes normally
|
|
79
|
+
and the latch reports B applied, with no pending revision. The exact observed
|
|
80
|
+
effect order through B is prompt, config setter, prompt.
|
|
81
|
+
6. Clear removes the desired DB row. Status initially retains effective B with
|
|
82
|
+
pending next turn. The third deliver sends the original baseline A through
|
|
83
|
+
the standard setter, then the actual provider receives A. Final status has
|
|
84
|
+
effective A, no desired override and no pending next turn. The complete wire
|
|
85
|
+
sequence is `[A, B, A]`, with setter values `[B, A]`, three normal outputs,
|
|
86
|
+
zero cancels, zero turn failures and zero permission calls.
|
|
87
|
+
7. Private config, device, MCP, synthetic credential and copied-binary hashes
|
|
88
|
+
match immediately after B, after clear completes and after owned stop.
|
|
89
|
+
Successful cleanup removes only the owned fixture.
|
|
90
|
+
|
|
91
|
+
The original A/B leg passed first. A fresh three-prompt leg then retained every
|
|
92
|
+
original assertion and the same 50 s operation/10 s stop budgets, extending only
|
|
93
|
+
its exact expected request count from two to three. Existing provider/account
|
|
94
|
+
configuration, launch argv and the person's real native home are not changed.
|
|
95
|
+
|
|
96
|
+
## Real-home checks and failed attempts
|
|
97
|
+
|
|
98
|
+
The selected actual config/credential snapshot has nine entries, with symlinks
|
|
99
|
+
recorded without following. The passing probe's before/after digest is
|
|
100
|
+
`297927630977dddf707dce6dd4af9cd561a38dcc2d42e3c2027f7660dba1d094`
|
|
101
|
+
for the original A/B leg, and
|
|
102
|
+
`938c4047672ae8a1144c45ffa9946653b1ed692c6edcba23d9b5f1919b3ff069`
|
|
103
|
+
for the A/B/clear/A leg.
|
|
104
|
+
The installed original binary is unchanged. There was credential-file drift
|
|
105
|
+
between earlier metadata/probes, detected before any candidate spawn. That
|
|
106
|
+
failed pre-spawn guard is retained, and no actual file was restored or edited.
|
|
107
|
+
Writer attribution is unproven; there is no task-wide unchanged-state claim
|
|
108
|
+
across those intervals. Each executed leg keeps its own before/after check.
|
|
109
|
+
|
|
110
|
+
Two earlier native attempts failed before any provider request or setter, with
|
|
111
|
+
owned stop and per-case actual config checks passing. The diagnostic attempt
|
|
112
|
+
confirmed correct initialize identity/version, then native `session/new` failed
|
|
113
|
+
with watcher EMFILE. A separate controlled watcher isolated the missing
|
|
114
|
+
FSEvents service. The final fresh run kept every assertion and the same 50 s
|
|
115
|
+
operation/10 s stop budgets and passed after that exact service was allowed.
|
|
116
|
+
The synthetic auth-header assumption was corrected from installed source before
|
|
117
|
+
any native provider request, not by accepting an unknown credential after a
|
|
118
|
+
failure. Failed fixtures/logs are preserved privately.
|
|
119
|
+
|
|
120
|
+
## Evidence and limits
|
|
121
|
+
|
|
122
|
+
Workspace scratch `temp/task809-kimi` contains the probe/factory; `temp/task809`
|
|
123
|
+
contains the controller, closed logs and case bindings. The passing result is
|
|
124
|
+
bound to these SHA-256 values (the final clear leg root is
|
|
125
|
+
`/private/tmp/ahub-809-o_nuxlfe`):
|
|
126
|
+
|
|
127
|
+
| Item | SHA-256 |
|
|
128
|
+
| --- | --- |
|
|
129
|
+
| native probe | `df711ffd1e712141fef96096e89676971462765a8dea95eca8acddbce249f6cf` |
|
|
130
|
+
| synthetic fixture factory | `02a8e172817af815c3247a6ca4c43b888775c3cf99b0d0ca02f02428270b90a8` |
|
|
131
|
+
| root controller | `a9bf78022546b9c9ebe25c63586522476527b28b3c535547d625a8f189ad59ac` |
|
|
132
|
+
| closed native result | `d0b63136b705952d5f0b29ee9b2fccbd9502e0393d4f056eb0b50354da3578d7` |
|
|
133
|
+
|
|
134
|
+
Real provider/model behavior, actual accounts, other providers/platforms,
|
|
135
|
+
the reviewer surface and installed-hub rollout remain unverified. Typecheck,
|
|
136
|
+
unit tests, canonical DGX and hosted CI are separate PR gates; no pass is inferred
|
|
137
|
+
from this native receipt and no verified stamp or release is performed here.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Kimi TUI completion facts (#1282)
|
|
2
|
+
|
|
3
|
+
Date: 2026-11-08. Scope: exact native version Kimi Code 2.5.2 on macOS arm64, isolated Git projects and isolated `KIMI_CODE_HOME`, real model turns and the real hub control protocol. No prompt, answer, session id, task title, command or credential is reproduced here.
|
|
4
|
+
|
|
5
|
+
## T0 native evidence
|
|
6
|
+
|
|
7
|
+
- Ordinary turns write `turn.prompt(origin.kind)` and final `turn.ended(reason)`. A blocked first Stop produced only the intermediate `agent.turn.ended`; the final `turn.ended` and `prompt.completed` appeared only after the second Stop was allowed.
|
|
8
|
+
- A real background process wrote `agents/main/tasks/<id>.json` with `status: "running"` and `endedAt: null`, then `status: "completed"` with a numeric end time. Its ordinary turn completed before the background process.
|
|
9
|
+
- StopFailure produced `turn.ended(reason: "failed")` and a matching prompt failure. Interrupt produced `turn.ended(reason: "cancelled")` and `prompt.aborted`.
|
|
10
|
+
- `TurnStarted.origin_kind` was `user` for person prompts and `task` for a background notification. `turn.prompt` may omit `promptId`; notification turns may also omit `prompt.completed`. The native `notificationId` or turn id is the correlation fallback.
|
|
11
|
+
- TaskStarted and Notification hooks were not observed in these runs. Settlement therefore re-reads the native inventory and final turn instead of requiring a hook.
|
|
12
|
+
- A launcher-scoped local plugin worked from `plugins/managed/agent-hub` and `plugins/installed.json`. Its record carries the launch id, not prompt data. Normal TUI exit removed the record and files; another plugin remained.
|
|
13
|
+
- `spawnSync` blocked the launcher's control socket heartbeat. The production launcher now uses async spawn in the foreground process group.
|
|
14
|
+
|
|
15
|
+
## Live implementation evidence
|
|
16
|
+
|
|
17
|
+
- Ordinary person turn: one private `done`, with the correlated native turn end and no text in the completion sinks.
|
|
18
|
+
- Real background `sleep 15`: no completion while the task file said running. One `done` appeared only after the task and notification turn had settled, without requiring TaskStarted or Notification hooks.
|
|
19
|
+
- `hub_inbox`: a queued message was pulled and the person prompt that called the tool produced one `done`. The hub message itself opened no additional person run.
|
|
20
|
+
- Earlier forced-close/restart probes produced one `interrupted` for the open run, never a duplicate on later reads.
|
|
21
|
+
- `ahub results --json` exposed only ids, peer, outcome, times and `private: true`. The launch-scoped plugin was removed on normal exit and other plugins stayed installed.
|
|
22
|
+
- Focused regression suites: 90 completion, agy, launcher and review-follow-up tests plus 36 full-gate failure-focused tests passed, with typecheck and bundle freshness. These covered the codec, completion flow, missing prompt ids, absent Stop/Notification hooks, unknown inventory, compat receipts and unverified-version behavior.
|
|
23
|
+
- PR review follow-up: the version probe preserves a wrapper/interpreter prefix without launch-only model options. A shared-home plugin record carries its owner pid and process signature; an active or unknown owner is never replaced, and only a proven-gone owner is stale. Replacement and cleanup also share one fail-closed lock per native home, and setup failure always falls back to the plain TUI. `turn_end` is emitted for agy and Kimi native turns, a final row after the 2 s Stop deadline still settles, and an unknown task inventory no longer discards final-turn evidence. Quiet re-reads back off from 250 ms to 1 s.
|
|
24
|
+
- Full Linux `scripts/check.sh --changed` at `8402dcd9c712e410f7f610e6271fe768894ac11e`: **12737 pass, 102 skip, 0 fail**, ending `check: OK`. The earlier full run's 10 failures were all fixed and re-run in the focused suites.
|
|
25
|
+
- OCR delegation covered all 21 reviewable files at that head. Two preview/ownership findings were fixed with red/green plugin regressions.
|
|
26
|
+
|
|
27
|
+
## Acceptance criteria
|
|
28
|
+
|
|
29
|
+
- [x] AC1: blocked-Stop, delayed final output and stale-replay cases; Stop alone creates no completion.
|
|
30
|
+
- [x] AC2: one unread completion only after final-turn readback and verified background quiescence.
|
|
31
|
+
- [x] AC3: StopFailure becomes `failed` only after final-state readback; Interrupt is quiet; launcher loss/restart yields at most one `interrupted`.
|
|
32
|
+
- [x] AC4: a real `hub_inbox` pull does not create a person-originated native turn; the person's prompt settles once.
|
|
33
|
+
- [x] AC5: forged, stale, wrong-launch, wrong-session, wrong-cwd and replayed observations create no run, completion or receipt.
|
|
34
|
+
- [x] AC6: active background work and unknown inventory never produce a premature `done`.
|
|
35
|
+
- [x] AC7: no prompt, answer, hook error, task command or title reaches completion rows, events, logs or memory; native-person results are private stubs.
|
|
36
|
+
- [x] AC8: only compat `kimi-tui` 2.5.2 enables the bridge; other versions keep existing TUI behavior with completion disabled.
|
|
37
|
+
- [x] AC9: `scripts/check.sh --changed` passed at `8402dcd9c712e410f7f610e6271fe768894ac11e`, with 12737 pass, 102 skip and 0 fail. Live exact-version evidence above is complete.
|
|
38
|
+
|
|
39
|
+
## Hardcoded-value calibration
|
|
40
|
+
|
|
41
|
+
A fresh blind sample of 80 decided entries passed 69/80 (86.25%) after applying the published contract, external-input safety floor, operational default and test-seam distinctions. The new inventory constants were then classified; `bun scripts/inventory-hardcoded-values.ts --check` passed (3494 entries, 2489 classified, 1005 baseline).
|
|
42
|
+
|
|
43
|
+
## Implementation boundary
|
|
44
|
+
|
|
45
|
+
Hooks are candidates only. The daemon, current launch, native home, native session, project and current socket generation bind every observation. The transcript supplies origin and final outcome; background task files supply count or explicit unknown. Native-person results stay private. Headless ACP behavior is unchanged. An unverified TUI version or a launch without these readbacks declares no TUI settle.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Kimi sliced wire-log drain (#1283)
|
|
2
|
+
|
|
3
|
+
Date: 2026-11-08. Scope: deterministic synthetic fixtures only. No personal wire log, account, model call or native session was used.
|
|
4
|
+
|
|
5
|
+
## Baseline and after
|
|
6
|
+
|
|
7
|
+
`scripts/benchmarks/kimi-wire-drain-1283.ts` creates three agents with the same append backlog and forces 16 minimum-sized reader slices. Baseline has no scheduler and retains the original synchronous 16-pass behavior. Sliced mode uses the daemon scheduler and a 0 ms continuation between slices.
|
|
8
|
+
|
|
9
|
+
| Measurement | Baseline | Sliced |
|
|
10
|
+
| --- | ---: | ---: |
|
|
11
|
+
| Slices | 16 | 16 |
|
|
12
|
+
| Drain wall time | 34.401 ms | 33.824 ms |
|
|
13
|
+
| Longest synchronous slice | 34.373 ms | 3.296 ms |
|
|
14
|
+
| Discovery calls | 32 | 32 |
|
|
15
|
+
| Bytes read | 2,082,248 | 2,082,248 |
|
|
16
|
+
| Yields | 0 | 15 |
|
|
17
|
+
| Caught-up reports | 1 | 1 |
|
|
18
|
+
|
|
19
|
+
These are one local run's raw values, not a production latency or percentage claim. Discovery and bytes are unchanged; each scheduled invocation returns after one bounded read/commit, and control traffic can run before the next slice. All 16 continuation callbacks are timed individually. The terminal offline read still drains synchronously before drop, and a failed attempt uses the bounded 250 ms follow-up instead of an unbounded 0 ms retry.
|
|
20
|
+
|
|
21
|
+
## Acceptance criteria
|
|
22
|
+
|
|
23
|
+
- [x] AC1: the same fixture reports before/after longest synchronous slice and discovery count, with raw values and no inferred percentage.
|
|
24
|
+
- [x] AC2: a real daemon `status` request completed between two slices; the test asserts pending-slice ordering, not elapsed milliseconds.
|
|
25
|
+
- [x] AC3: fault injection after reader offset advancement proves cancellation cannot discard the uncommitted slice; the delayed timer also contains an event failure and keeps its bounded retry.
|
|
26
|
+
- [x] AC4: a new agent created between slices is discovered and counted by the next fresh validation pass.
|
|
27
|
+
- [x] AC5: protocol, privacy, rotation, hard-link, shrunk-file, malformed-row and partial-line tests pass; earlier successful rows survive a later failure exactly once.
|
|
28
|
+
- [x] AC6: concurrent cues remain serialized at one pending drain, and stop/session replacement cannot rebind the old session.
|
|
29
|
+
- [x] AC7: `scripts/check.sh --changed` passed at `a9b777a947ab2636f36da704b71cae8dc157fb6e`, with 12698 pass, 102 skip and 0 fail, ending `check: OK`.
|
|
30
|
+
|
|
31
|
+
Focused result: 43 tests across the benchmark, delayed-usage, daemon and wire suites passed, plus typecheck. Baseline/sliced receipt generation and the benchmark test also passed independently.
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Live model override T1 evidence, #1317
|
|
2
|
+
|
|
3
|
+
Task #808 implements person-owned desired model state and supported next-turn
|
|
4
|
+
selection. This is source and fake-transport work. No model, real account,
|
|
5
|
+
native profile, deployed daemon, release or machine trust was changed.
|
|
6
|
+
|
|
7
|
+
## Contract and scope
|
|
8
|
+
|
|
9
|
+
- Overrides live in the project hub.db and survive daemon restart. Runtime reset
|
|
10
|
+
clears them; retained state is bound by recovery feature/integrity admission.
|
|
11
|
+
- CLI model set/clear/list is person-only, including agent-shell/live-test refusal.
|
|
12
|
+
Dashboard writes use verified settings-session identity, preview and confirmation;
|
|
13
|
+
expiry alone is not treated as a session identity.
|
|
14
|
+
- The desired revision and an active turn's captured model are separate. Captures
|
|
15
|
+
happen before asynchronous preparation; acknowledgements bind their actual
|
|
16
|
+
adapter owner and turn, not a future turn id or a model string alone.
|
|
17
|
+
- Conductor ruling on 2026-11-08 admits both CodexPeer app-server turn/start
|
|
18
|
+
paths. An explicit native client model wins, turn/steer is unchanged, and a
|
|
19
|
+
turn/start model becomes the native thread default. Clear removes the hub
|
|
20
|
+
override but does not invent an earlier native default.
|
|
21
|
+
- T1 does not add ACP setters or native TUI authority. The supported factories
|
|
22
|
+
are host-marked; public capability text alone cannot claim a live setter.
|
|
23
|
+
- Tier 3 instance/model/command/provider rules, native reviewer tool/isolation
|
|
24
|
+
fences and local budget/campus/observer safeguards remain in force.
|
|
25
|
+
|
|
26
|
+
## Checks
|
|
27
|
+
|
|
28
|
+
The worktree began at b97ee5af976e92b97d2eb55b8a1147908a83fac7. Local dependency
|
|
29
|
+
preparation used pinned Bun 1.4.2 with a frozen lockfile (99 packages), with no
|
|
30
|
+
pin or lock change. A bounded DGX structural query found ripwire unavailable in
|
|
31
|
+
the image, so planning used the inspected source call sites instead. That query
|
|
32
|
+
was not a compilation or test gate. Committed-head checks are recorded below
|
|
33
|
+
when their results are available; no test pass is claimed yet.
|
|
34
|
+
|
|
35
|
+
## Remaining evidence
|
|
36
|
+
|
|
37
|
+
Focused fakes, canonical DGX and exact-head hosted CI remain unverified until
|
|
38
|
+
recorded. No native/provider/model-backed run is claimed by those checks.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
## Initial committed checks
|
|
42
|
+
|
|
43
|
+
- `c0640100a3ff4bf2ab583351ba6a2f26eb2290e0`: frozen DGX install then TSC
|
|
44
|
+
stopped at one possibly undefined model-boundary access. Inventory and tests
|
|
45
|
+
did not run. The guard now requires existence before comparing the owner.
|
|
46
|
+
- `7ae86fcc726a70505107b11e445e8373321b8001`: the separate DGX inventory check
|
|
47
|
+
identified seven new keys. This is a failed inventory run, not a green gate.
|
|
48
|
+
No key was added to the baseline.
|
|
49
|
+
|
|
50
|
+
The new thread-model cache cap, stored override count, pending preview count and
|
|
51
|
+
confirmation TTL are operational limits on the hub's own retained state. Pending
|
|
52
|
+
native RPC records, CLI response rows and incoming confirmation-token length
|
|
53
|
+
are safety floors at input/proof-reader boundaries. The existing #844 token
|
|
54
|
+
representation is reused unchanged in a pure leaf module; native adapters do
|
|
55
|
+
not import the registry through instances, avoiding an initialization cycle.
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
At `69974c37b53cc74bb6656b63648f6b8b07818754`, DGX typecheck,
|
|
59
|
+
inventory and all 559 exact seed anchors passed. Runtime tests had 383 pass,
|
|
60
|
+
3 existing platform skips and 1 failure across twenty files (3,821 assertions;
|
|
61
|
+
124 s). The new Codex test requested steering after the RPC response but before
|
|
62
|
+
its actual native `turn/started` observation. Its fake now supplies that barrier
|
|
63
|
+
and asserts the steer uses the observed native turn id. No ownership guard,
|
|
64
|
+
assertion or timeout was relaxed. The three existing #845 skips do not provide
|
|
65
|
+
Linux-native sandbox evidence.
|
|
66
|
+
|
|
67
|
+
Additional boundary checks before submission cover a saved override whose audit
|
|
68
|
+
append fails (explicit saved-but-failed reply and readback/repair guidance), an
|
|
69
|
+
older hub that advertises no model support (refusal before any model request),
|
|
70
|
+
and model listings with retained removed peers. The model view has a display-only 512-row ceiling, with bounded collection
|
|
71
|
+
of builtin, configured, external, active local and retained ids. Legacy native
|
|
72
|
+
peer admission has no universal 64-peer cap, so a complete inventory is not
|
|
73
|
+
assumed to fit. Overflow explicitly refuses list, marks model data unavailable in
|
|
74
|
+
status/snapshot without breaking other fields, and leaves single-peer set/clear
|
|
75
|
+
usable. No peer admission is narrowed and no truncated list is called complete. This does not raise the
|
|
76
|
+
storage cap or change any existing timeout.
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
The display path caches a scalar launch model only when a trusted supported
|
|
80
|
+
factory registers its owner. Periodic model views do not call unsupported
|
|
81
|
+
owners' recovery hooks or scan task history. The unavailable flag has fixed
|
|
82
|
+
CLI/UI cause and repair guidance, and disables stale model controls.
|
|
83
|
+
|
|
84
|
+
At `29f3be831399c0125ad9ea5bd4f117894505a760`, the new real fake-WebSocket
|
|
85
|
+
ACK-order test reproduced a product defect: an older explicit-client ACK arrived
|
|
86
|
+
after a newer hub model acceptance and incorrectly emitted `client-older` as the
|
|
87
|
+
native choice. The named assertion failed normally (one case, seven assertions,
|
|
88
|
+
4 s), without setup/compiler/timeout failure. This red checkpoint intentionally
|
|
89
|
+
contained the new test and unchanged Codex source; other pending refinements were
|
|
90
|
+
not claimed tested. Its eventual fix and green evidence are recorded separately.
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
At `4e10add8e7f6ad446aaf42278ea46ceb86fc77df`, typecheck, inventory and
|
|
94
|
+
all 559 anchors passed. The Codex ACK-order regression was green (139 ms),
|
|
95
|
+
including unknown-default cases, with its original failing assertion preserved.
|
|
96
|
+
The selected seven files had 125 pass and one new fixture failure (1,700
|
|
97
|
+
assertions; 61 s): a counter included legacy status recovery-hook calls rather
|
|
98
|
+
than isolating the new model view. The correction checks the model-list path
|
|
99
|
+
immediately and executes the actual cached fallback projection separately.
|
|
100
|
+
The legacy status behavior is not rewritten or counted as a model regression.
|
|
101
|
+
|
|
102
|
+
A second named red test at `d92ea42aa1d0de528dba014b771895b672e2ad44`
|
|
103
|
+
used the real authenticated fake Pi bridge and an owned process signature. It
|
|
104
|
+
held the public setter return after a successful native ACK, withdrew roster
|
|
105
|
+
ownership, then observed an incorrect `applied` callback before the existing
|
|
106
|
+
epoch guard (expected zero, observed one; five assertions, 4 s). The source moves
|
|
107
|
+
that callback after the existing post-ACK guard. Cancellation/shutdown precede
|
|
108
|
+
the fixture's delivery join; the owned process is confirmed exited. This is
|
|
109
|
+
synthetic host/protocol evidence, not a native account or model qualification.
|
|
110
|
+
|
|
111
|
+
The new Codex steer test also uses the fake's existing file gate to hold turn
|
|
112
|
+
completion until its native-id/model assertions finish, replacing a 100 ms
|
|
113
|
+
completion race without changing any product timeout or shared fake behavior.
|
|
114
|
+
Final unavailable banners describe bounded-read failure generically, because
|
|
115
|
+
store-read failure and catalog overflow must not be confused.
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
At `ded9db733f0a0b7b8fea70934d41d051afd1da94`, DGX typecheck, inventory
|
|
119
|
+
and all 559 anchors passed; all 122 selected Codex/Pi/controller/CLI/UI tests
|
|
120
|
+
passed (1,475 assertions, five files; exit 0 in 53 s). This includes the prior
|
|
121
|
+
ACK-order red test and the invalidated Pi ACK red test. Other adapter, tier 3,
|
|
122
|
+
reset and HTTP-auth tests passed in the earlier wider run; no earlier failed
|
|
123
|
+
whole run is relabelled as green.
|
|
124
|
+
|
|
125
|
+
Final state/UI edges add a captured-revision check for clear before its first
|
|
126
|
+
ACK, and per-component draft/request generations for model confirmation. Editing
|
|
127
|
+
the draft or beginning a new preview invalidates old tokens and all late success,
|
|
128
|
+
error and finally effects. Preview metadata must match the exact set value or
|
|
129
|
+
null clear. Server refusals retain bounded plain error/repair text through the
|
|
130
|
+
existing text-only surface; unsafe or malformed replies use fixed fallbacks.
|
|
131
|
+
The UI error-text ceiling is a safety floor, not a new authority or model bound.
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
At `8333ffcdfe05f373a7c58fa192a4efd7123c138e`, typecheck and inventory
|
|
135
|
+
passed; all 25 changed state/UI tests passed (237 assertions, two files;
|
|
136
|
+
39 s). This covers pending clear before first ACK, strict draft/token binding,
|
|
137
|
+
late preview/confirmation success/error/finally, and specific safe server repair
|
|
138
|
+
text without claiming native application.
|
|
139
|
+
|
|
140
|
+
Main `6da56c7a3cc697d9401903b827897148e05826e9` was merged cleanly for
|
|
141
|
+
integration, including the #1318 macOS typecheck heap fix. The model runtime,
|
|
142
|
+
adapter, CLI/UI, package, lock and generated bundle bytes are unchanged from the
|
|
143
|
+
passing source checkpoint; incoming changes are Orca O2 and the CI fix. No
|
|
144
|
+
unmerged fix branch is imported. Two new seeded guards target person-only model
|
|
145
|
+
control and the reproduced accepted-ACK ordering defect, using existing named
|
|
146
|
+
Linux tests. Their actual seeded results follow separately.
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
## Integration checkpoint and remaining gate
|
|
150
|
+
|
|
151
|
+
At `15cb959eab3b7e5796e3df4c50046d8447fe801c`, all 561 anchors matched.
|
|
152
|
+
Seed shards 48/64 and 49/64 passed all 18 original-green / named-mutant-detected
|
|
153
|
+
pairs, including both new model guards (46 s total). The separate existing
|
|
154
|
+
Office/role/pet/motion/UI integration tests passed 101/0, with 140,310 assertions
|
|
155
|
+
across five files (17 s). Logs: scratchpad `temp/task808-seeds.log` and
|
|
156
|
+
`temp/task808-ui-integration.log`. These are focused shards, not a claim that
|
|
157
|
+
all 561 mutants ran.
|
|
158
|
+
|
|
159
|
+
The initial 44-file independent source/test/doc review had no confirmed
|
|
160
|
+
Important finding; its CLI 30-second timeout nit was corrected to the repository
|
|
161
|
+
20-second ceiling. Subsequent delta reviews covered all nongenerated changes
|
|
162
|
+
and confirmed the model ACK, cached metadata and UI fences. The unavailable
|
|
163
|
+
cause nit is fixed. The generated bundle is checked by the gate rather than
|
|
164
|
+
claimed manually reviewed. A provisional token-newline alert was retracted
|
|
165
|
+
against the actual pinned runtime and ECMAScript semantics, with no source change
|
|
166
|
+
or pass claim based on it.
|
|
167
|
+
|
|
168
|
+
The final report-only head starts canonical `scripts/check.sh --changed` on
|
|
169
|
+
DGX. Its result and exact-head hosted CI remain unverified until recorded. The
|
|
170
|
+
known inherited Herdr `/home/dev` fixture defect (#807) is outside this feature.
|
|
171
|
+
No test is excluded or weakened for it. Native/provider-backed model acceptance,
|
|
172
|
+
real UI browser interaction and installed-hub rollout remain unrun. No release,
|
|
173
|
+
upgrade, restart or model change was performed on the person's running hub.
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
## Unchanged covering contracts
|
|
177
|
+
|
|
178
|
+
The parent agent-hub goal spec is unchanged: this refines existing native
|
|
179
|
+
adapters and person-owned control without changing task/peer authority,
|
|
180
|
+
account ownership or the deployment boundary. The owning adapter and
|
|
181
|
+
architecture specs carry the new model state, turn and evidence contract.
|
|
182
|
+
The bus spec is unchanged: reset clears an additional independent runtime table,
|
|
183
|
+
while message addressing, queue/journal disposition, receipts, TTL, broker and
|
|
184
|
+
reset admission semantics remain as before. Model selection is not a task or
|
|
185
|
+
delivery effect.
|
|
186
|
+
|
|
187
|
+
This acknowledgement was omitted from the first board completion. The final
|
|
188
|
+
document-only correction carries the same runtime and test bytes. Canonical
|
|
189
|
+
verification continues at parent `2f311bf61c6c77636aeb54a5ad249838b8ea0ee5`;
|
|
190
|
+
it is not an exact-head canonical pass for the corrected document head. Hosted
|
|
191
|
+
CI must verify the final head before merge. No duplicate canonical run or empty
|
|
192
|
+
retry commit is introduced for this bookkeeping correction.
|
|
193
|
+
|
|
194
|
+
## Reviewer regression corrections
|
|
195
|
+
|
|
196
|
+
Review of `54546e9d` found two regressions the earlier focused set missed:
|
|
197
|
+
the generic reviewer factory supplied a model getter to unsupported Claude and
|
|
198
|
+
Kimi reviewer surfaces, and a client-forwarded Codex start rejected before any
|
|
199
|
+
turn began retained its captured model choice. Both are operational regressions,
|
|
200
|
+
not unavailable evidence. The corrected fixtures exercise actual daemon reviewer
|
|
201
|
+
starts and rejected proxy requests followed by a corrected desired model.
|
|
202
|
+
|
|
203
|
+
The original canonical run at `2f311bf6` reproduced the Claude reviewer failure
|
|
204
|
+
in `reviewer-pool-daemon.test.ts`. It also reported a `#733` catch-up test failure.
|
|
205
|
+
After those failures and this review, the owner interrupted that obsolete run
|
|
206
|
+
with SIGINT; it exited 130 after 592 seconds. It is cancelled, not a full-suite
|
|
207
|
+
pass, and no test failure is erased or counted as fixed merely by cancellation.
|
|
208
|
+
|
|
209
|
+
The correction also acknowledges Pi selections only after prompt acceptance,
|
|
210
|
+
and identifies a cleared Codex override retained by the native thread as
|
|
211
|
+
`native thread default (was override)`. The latter describes known accepted
|
|
212
|
+
history; clear still cannot reconstruct a previous thread model. Unsupported
|
|
213
|
+
reviewer surfaces keep their original no-override review behavior and do not
|
|
214
|
+
gain a model-setting capability.
|
|
215
|
+
|
|
216
|
+
Concurrent definitive rejections drain a single bounded retirement candidate,
|
|
217
|
+
including when an explicit client-model request is the last one to reject.
|
|
218
|
+
Native acceptance or a native start protects the current boundary. Reused RPC
|
|
219
|
+
ids remain ambiguous: their tombstone is retained until client reattachment,
|
|
220
|
+
rather than treating the first response as proof all duplicate requests failed.
|
|
221
|
+
No retirement callback grants model authority or overwrites an explicit client
|
|
222
|
+
choice.
|
|
223
|
+
|
|
224
|
+
The first correction check at `f7e84a200a494c4566f71915260f96dbf0318e5a`
|
|
225
|
+
passed typecheck, inventory and bundle comparison, then reported 172 pass and
|
|
226
|
+
1 fail (2,100 assertions, ten files; remote exit 1 in 76 s). The failure was in
|
|
227
|
+
the new Pi acceptance fixture: its synthetic settlement omitted the required
|
|
228
|
+
native generation, so the existing fence correctly ignored it. Commit
|
|
229
|
+
`8f8c9794f0b71d52bca6a8983598e34968edd134` supplies the actual generation-bound
|
|
230
|
+
start/settled lifecycle. It changes only that fixture, preserving every existing
|
|
231
|
+
assertion, deadline and production lifecycle check.
|
|
232
|
+
|
|
233
|
+
Committed-head DGX verification at `8f8c9794f0b71d52bca6a8983598e34968edd134`
|
|
234
|
+
passed typecheck, inventory (3,496 entries; 2,491 classified; unchanged 1,005
|
|
235
|
+
baseline entries), bundle comparison, and all 173 tests across ten files
|
|
236
|
+
(2,103 assertions). This includes the original failing reviewer daemon suites,
|
|
237
|
+
the actual proxy correction, concurrent rejection cases and Pi acceptance and
|
|
238
|
+
rejection. Seed shards 48/64 and 49/64 passed all 18 original-green /
|
|
239
|
+
named-mutant-detected pairs, including both model guards. The combined remote
|
|
240
|
+
command exited 0 in 109 seconds; log: `scratchpad/temp/task808-review-final-focused.log`.
|
|
241
|
+
|
|
242
|
+
The independent correction review covered all 16 nongenerated changed files
|
|
243
|
+
and found the explicit-last rejection gap before verification; it was corrected
|
|
244
|
+
and reread with no further finding. The generated bundle is verified by
|
|
245
|
+
comparison. The final report-only head has identical runtime, test and script
|
|
246
|
+
bytes to that focused-tested commit. Its canonical changed-scope gate and
|
|
247
|
+
hosted exact-head CI remain separate, unverified gates until their results are
|
|
248
|
+
recorded; neither the focused pass nor the interrupted earlier run substitutes
|
|
249
|
+
for them. Native/provider-backed acceptance and real dashboard interaction
|
|
250
|
+
remain unrun.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Qwen Code 0.26.9 ACP receipt
|
|
2
|
+
|
|
3
|
+
Date: 2026-11-08. Task #811, Refs #843 and #1317. Repeats the
|
|
4
|
+
[0.26.8 account-free ACP procedure](2026-11-06-qwen-0268-acp.md) on macOS arm64.
|
|
5
|
+
|
|
6
|
+
**Decision: add exactly 0.26.9 to COMPAT.qwen.verified.** Native ACP, the actual
|
|
7
|
+
published permission handler, network-denial controls, owned cleanup and the
|
|
8
|
+
separate reviewed optional lifecycle replay passed. This qualifies no other
|
|
9
|
+
version or native surface. Runtime model setters belong to #1317 T2 and are
|
|
10
|
+
not proved by this receipt.
|
|
11
|
+
|
|
12
|
+
## Artifact
|
|
13
|
+
|
|
14
|
+
The [official release](https://github.com/QwenLM/qwen-code/releases/tag/v0.26.9)
|
|
15
|
+
and exact [npm metadata](https://registry.npmjs.org/@qwen-code/qwen-code/0.26.9)
|
|
16
|
+
identify commit `600aff0592bcfc21668ca4aba95a5b20c6491b86`.
|
|
17
|
+
The private npm lock's SRI equals that metadata. No global install, update or
|
|
18
|
+
trust change was performed.
|
|
19
|
+
|
|
20
|
+
| Binding | Value |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| Package | `@qwen-code/qwen-code@0.26.9` |
|
|
23
|
+
| npm integrity | `sha512-2orVsP3Dr01gk38STbYTWcFZeXftc0QXDHhglK7YPsIwgmumvnJeTAu1N00esRUwuLcevZ8k4godLwypDKb1LA==` |
|
|
24
|
+
| package.json SHA-256 | `47f5ad2df1ba61df66e8ce409e65beb01cc3fcf551acaa028ca1d0904b5cba09` |
|
|
25
|
+
| cli-entry.js SHA-256 | `113efe4104a9fc66f507d34bfd6abbd896ceb77de47f4b468a0825a327fdc6a5` |
|
|
26
|
+
| chunks/acpAgent-GNBAKZNO.js SHA-256 | `a856ab4bbd2fceabc2430ef3a5689fd404b70d766c8f1fc3715632ff0afd4f8a` |
|
|
27
|
+
|
|
28
|
+
Source for the committed producers was `d87dfe25d` (the branch's main base).
|
|
29
|
+
The collector imports `runQwenProofs` and `runBoundedReceiptCommand`; it does not
|
|
30
|
+
copy their assertions or rewrite installed candidate code. The permission leg
|
|
31
|
+
uses the producer's exports-only temporary chunk copy and removes it afterwards.
|
|
32
|
+
Original package and producer hashes matched before and after both native runs.
|
|
33
|
+
|
|
34
|
+
## Isolation and cleanup
|
|
35
|
+
|
|
36
|
+
- A fresh 0700 root under `/private/tmp/ahub-811-...` holds the private npm prefix,
|
|
37
|
+
HOME, cwd, TMPDIR, QWEN_HOME, QWEN_RUNTIME_DIR and all XDG config/cache/data/state
|
|
38
|
+
paths. Only fixed runtime PATH and locale values enter helpers. No account,
|
|
39
|
+
OAuth state, personal profile, real key, MCP project or agent/session marker
|
|
40
|
+
was copied. Authentication uses only the producer's synthetic fixture key.
|
|
41
|
+
- The installer uses empty user/global npm configurations and its own cache.
|
|
42
|
+
Seatbelt starts from `src/local/sandbox.ts`, then denies actual-home data and
|
|
43
|
+
global writes, allowing runtime code reads and writes only in the owned root.
|
|
44
|
+
Only the install phase permits package downloads. Both native proof phases
|
|
45
|
+
deny all kernel network access, in addition to the unchanged Node preload.
|
|
46
|
+
- `/usr/bin/true` passed. Read-open of a named actual configuration and write-open
|
|
47
|
+
of the installed Node executable, without truncation or writing bytes, were
|
|
48
|
+
denied with Operation not permitted. These are receipt-controller controls,
|
|
49
|
+
not a general sandbox attestation for the release.
|
|
50
|
+
- The before/after configuration snapshot covers regular files smaller than
|
|
51
|
+
2 MiB below the actual `.qwen` and `.pi/agent`, excluding sessions, logs, cache,
|
|
52
|
+
install, bin, node_modules and .git; symlinks are recorded without following.
|
|
53
|
+
All 2,318 entries matched, aggregate SHA-256
|
|
54
|
+
`37e4d8a5f0fe0acbbbecc87d3bd57ee6ea6b9c6dccfc7ebefcc1a3a37232464b`.
|
|
55
|
+
The person's real configuration was unchanged after install and after native
|
|
56
|
+
verification. The snapshot is deliberately not a hash of every session/log.
|
|
57
|
+
- Every native command returned bounded output and confirmed its owned stop.
|
|
58
|
+
The ACP producer reports `groupGone: true`, leader exit -15, before and after
|
|
59
|
+
lifecycle replay. A final process inventory found no private-root survivor.
|
|
60
|
+
Detached process lifetime containment remains unproven; a native Seatbelt
|
|
61
|
+
run is not a disposable-runner attestation. No unknown process was signalled.
|
|
62
|
+
|
|
63
|
+
## Native ACP and permission legs
|
|
64
|
+
|
|
65
|
+
The unmodified promoted `qwen-acp.py` ran with `--acp --bare --advisor off`,
|
|
66
|
+
synthetic OpenAI auth, `fixture-model`, loopback port 9 and telemetry disabled.
|
|
67
|
+
No ACP prompt was sent and no model or fixture completion was requested.
|
|
68
|
+
|
|
69
|
+
- `initialize` returned protocol 1 and exact `qwen-code` / `Qwen Code` / 0.26.9
|
|
70
|
+
identity. Only the expected terminal OpenAI auth method was offered.
|
|
71
|
+
- `session/new` returned a nonempty session identity, only the fixture model,
|
|
72
|
+
and initial mode `default`. The advertised ids include the hub's mapped subset
|
|
73
|
+
`default`, `auto-edit`, `yolo`. All four `session/set_mode` calls in
|
|
74
|
+
`default -> auto-edit -> yolo -> default` acknowledged successfully.
|
|
75
|
+
- The unchanged preload's positive denial control passed before candidate code.
|
|
76
|
+
Six startup network API attempts were blocked in each run; no connection was
|
|
77
|
+
allowed by the kernel profile. This does not infer absence of attempted calls
|
|
78
|
+
from an empty log.
|
|
79
|
+
- `qwen-permission.mjs` drove the actual published `SubAgentTracker` handler,
|
|
80
|
+
using only synthetic clients, tools and events. Two permission requests had
|
|
81
|
+
the exact options: project/user `allow_always`, `proceed_once` / `allow_once`,
|
|
82
|
+
and `cancel` / `reject_once`. The allow-once callback returned `proceed_once`,
|
|
83
|
+
cancellation returned `cancel`, and an unoffered option was rejected. No
|
|
84
|
+
permission-fixture network attempt was recorded. No model-generated tool call
|
|
85
|
+
or actual board approval was involved.
|
|
86
|
+
|
|
87
|
+
## Optional lifecycle and repetition
|
|
88
|
+
|
|
89
|
+
The optional `@qwen-code/audio-capture` install script is byte-identical to the
|
|
90
|
+
previous reviewed script, SHA-256
|
|
91
|
+
`bf91a3db08fdaf1622a0fa938f1f0e29cef712586ca13c2b0ac2422dd3f916fd`.
|
|
92
|
+
It invokes `node-gyp-build` and deliberately exits 0 even when the optional
|
|
93
|
+
microphone backend is unavailable. Normal private npm installation passed
|
|
94
|
+
without disabling scripts. An explicit replay under the private HOME, no-network
|
|
95
|
+
Seatbelt profile and build concurrency two also exited 0 with owned cleanup.
|
|
96
|
+
This proves the reviewed lifecycle procedure, not microphone functionality.
|
|
97
|
+
|
|
98
|
+
After replay, new private HOME/cwd/XDG paths repeated all ACP and permission
|
|
99
|
+
assertions successfully. The generic machine summary still calls the lifecycle
|
|
100
|
+
leg `not-run: source-review-required`; the separate reviewed/replayed control
|
|
101
|
+
above supplies that evidence, without changing the producer's result or claiming
|
|
102
|
+
automatic harness eligibility.
|
|
103
|
+
|
|
104
|
+
One post-lifecycle controller attempt failed before any native command: Bun had
|
|
105
|
+
already created its HOME cache, conflicting with the collector's directory
|
|
106
|
+
creation. The repaired controller validates precreated owned 0700 HOME paths
|
|
107
|
+
and keeps native proof/output creation exclusive. The failed setup log is kept;
|
|
108
|
+
no protocol, refusal, integrity assertion, timeout or production code changed.
|
|
109
|
+
|
|
110
|
+
## Separate surfaces and not verified
|
|
111
|
+
|
|
112
|
+
`qwen-dual` needs its own 0.26.9 receipt. Its input-file/json-file TUI protocol,
|
|
113
|
+
interruption, permission and resume behavior is distinct from ACP. The
|
|
114
|
+
[0.26.8 dual-output check](2026-11-06-qwen-0268-dual-output.md) did not qualify
|
|
115
|
+
that version, and this ACP run supplies no missing TUI proof. Its verified set
|
|
116
|
+
remains 0.26.1. No remote/Linux, Intel Mac, real account/provider/model, runtime
|
|
117
|
+
model setter, real model permission call, microphone or TUI leg is claimed.
|
|
118
|
+
|
|
119
|
+
Committed-head DGX validation and hosted CI are separate PR gates, recorded in
|
|
120
|
+
the PR/task completion. No `docs/verified.json` stamp, release or production
|
|
121
|
+
upgrade is part of this change. The temporary prefix is retained privately for
|
|
122
|
+
the independent T2 setter experiment, not installed into the person's profile.
|
|
123
|
+
|
|
124
|
+
## Evidence fingerprints
|
|
125
|
+
|
|
126
|
+
Closed results and controller sources are in workspace scratch `temp/task811`.
|
|
127
|
+
The underlying installed prefix and synthetic native artifacts remain in the
|
|
128
|
+
owned temporary root while T2 is in progress.
|
|
129
|
+
|
|
130
|
+
| Evidence | SHA-256 |
|
|
131
|
+
| --- | --- |
|
|
132
|
+
| private installation result | `447e5194eec456e61c35ac38ca042e4d21eded4040af0585a03b351678ae7a5c` |
|
|
133
|
+
| first native collector result | `498e672a133d0479dec564f0e0d3eb7022b2ad97e32a97c79835e693d7784f56` |
|
|
134
|
+
| optional lifecycle result | `e27602dc5fe10a84c6e54219d460d7cb198a8ffd6dbc2bcbce4b67118878e4c5` |
|
|
135
|
+
| post-lifecycle collector result | `4586096e28cf5939f059e11350d8b3c3e89e33fd265c7db0b17d1b7e226a3fa4` |
|
|
136
|
+
| final configuration snapshot | `22aabd64a69a6ddef7f5a2a0915ada14849f37295d531f70c9626f860b44268f` |
|
|
137
|
+
| post-lifecycle ACP result | `0eda1b826007ae53dbca2b41668331d728b2791fa39942e4d468d4160fca5566` |
|
|
138
|
+
| post-lifecycle permission result | `e6ebfbf1572713288bc9eed11071e5228273bf5087a0b8cdf5767573f051ac2e` |
|