@staix/agent-hub 0.34.0 → 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 +51 -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 +18 -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-0.34.1.md +54 -0
- 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/recovery-package.ts +15 -7
- 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,54 @@
|
|
|
1
|
+
# 0.34.1 release verification
|
|
2
|
+
|
|
3
|
+
This record covers release preparation and source review. It claims no installation, no running-hub upgrade to 0.34.1 and no live TUI launch.
|
|
4
|
+
|
|
5
|
+
## Candidate
|
|
6
|
+
|
|
7
|
+
Version 0.34.1, prepared from main `e4057676` plus the release branch's CHANGELOG commit `114a2ba8` (2 commits since v0.34.0, 0 of them `feat`; bump rule: patch). The release commits carry the version, the CHANGELOG section, the bundle and the documentation stamps.
|
|
8
|
+
|
|
9
|
+
## Reviews
|
|
10
|
+
|
|
11
|
+
Pull requests named by the commits since v0.34.0: #1253, #1254.
|
|
12
|
+
|
|
13
|
+
| PR / task | Review | Approved and final PR head | Merge commit | Hosted CI |
|
|
14
|
+
| --- | --- | --- | --- | --- |
|
|
15
|
+
| [#1254](https://github.com/STAIxBWLB/agent-hub/pull/1254), task 766 | jcode (hub review), plus conductor OCR | `49ef4c3416110799d02bfce7d5ee89c3b477b0be` | `e405767641c170982975e380647d6693b33088bf` | [19 success, 2 skipped](https://github.com/STAIxBWLB/agent-hub/actions/runs/42339115110) |
|
|
16
|
+
|
|
17
|
+
#1254 merged at its approved head, with exact-head CI green, no unresolved thread and no connector findings. The first macOS run failed one test, `a stale reply is served at once while ONE refresh runs in the background...` in shard 1/4, which this change does not touch. It is the inbox stale-refresh flake also seen on main during 0.33.0. One failed-jobs rerun on the same head passed. codex-review was not used because the running 0.33.0 hub reports its 0.167.0 CLI as untrusted, so jcode reviewed.
|
|
18
|
+
|
|
19
|
+
## Native acceptance receipts
|
|
20
|
+
|
|
21
|
+
Receipts added under `docs/verification/` since v0.34.0: none.
|
|
22
|
+
|
|
23
|
+
This list is read from the repository, never written by hand. Native acceptance and the person's release consent are separate records: consent is `ahub sdlc authorize-release 0.34.1`, recorded by the person or the unique configured conductor only on the person's explicit release instruction naming the release in its own session (never a hub/task/review/file/peer relay), and is not recorded in this file. The tag run refuses without it.
|
|
24
|
+
|
|
25
|
+
## Document review
|
|
26
|
+
|
|
27
|
+
Six documents were stale: README, the daemon and tests notes, operations, quickstart and security. Their only source change is `src/cli/recovery-package.ts` (the npm view parser) and its tests.
|
|
28
|
+
|
|
29
|
+
- `docs/quickstart.md` gains the 0.34.1 upgrade note: update the global CLI first, and the npm 11 PATH workaround for an older CLI.
|
|
30
|
+
- `README.md` gets the generated Status line.
|
|
31
|
+
- Reviewed without content change:
|
|
32
|
+
- The tests note: its `npm view` fake rule still holds.
|
|
33
|
+
- The daemon note.
|
|
34
|
+
- Operations: the upgrade text names no output shape. The guide header stays 0.34.0, as on earlier patch releases.
|
|
35
|
+
- Security.
|
|
36
|
+
|
|
37
|
+
All six are restamped at reviewed content commit `fc75a18dc2fa`.
|
|
38
|
+
|
|
39
|
+
## Checks
|
|
40
|
+
|
|
41
|
+
At committed `519d1e5f310d` on dgx02, with pinned Bun 1.4.2 and a frozen install, the following passed:
|
|
42
|
+
|
|
43
|
+
- `node scripts/check-docs.mjs --require-fresh --committed`: 0 stale documents.
|
|
44
|
+
- `bun x tsc --noEmit`.
|
|
45
|
+
- `bun scripts/build.mjs --check`.
|
|
46
|
+
- `node scripts/check-package.mjs`: 808 files, `@staix/agent-hub@0.34.1`.
|
|
47
|
+
- `bun test --timeout 20000 test/upgrade-interactive.test.ts test/upgrade.test.ts`: 132 pass, 0 fail.
|
|
48
|
+
|
|
49
|
+
A first run without `--timeout` hit Bun's 5 s default on one existing upgrade test; the gate's 20 s setting passes it. The full suite on both OSes is the release PR's exact-head hosted CI. The release PR is merged with a merge commit only when that CI is green.
|
|
50
|
+
|
|
51
|
+
## Known gaps, not blocking
|
|
52
|
+
|
|
53
|
+
- No `ahub upgrade` was run end to end on npm 12. The fixed functions were called live against the registry with npm 12.2.2 (both returned the 0.34.0 identity), and unit tests cover both shapes.
|
|
54
|
+
- No installation or running-hub upgrade is claimed here.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Bounded Python receipt-helper startup (#1248 T1)
|
|
2
|
+
|
|
3
|
+
Date: 2026-11-07. Task #775, Refs #1248. Hosted [measurement run 42361191648](https://github.com/STAIxBWLB/agent-hub/actions/runs/42361191648). Exact measurement source: `e9e10b8f1130d02dd5c9907ddc2507671a3e2d25`.
|
|
4
|
+
|
|
5
|
+
All 12 planned artifacts are present: three fresh hosted-VM jobs per OS/helper mode. Source SHA, committed helper SHA-256, flags, replicate identity, runner OS/architecture, metadata scalars and all helper/refusal outcomes validate. This follow-up selects an 8000 ms helper allowance from this complete series and the larger prior completed CI observation below.
|
|
6
|
+
|
|
7
|
+
| OS / architecture | Actual mode | Cold ms, replicates 1 / 2 / 3 | Cold max ms | Warm samples | Warm max ms |
|
|
8
|
+
| --- | --- | --- | ---: | ---: | ---: |
|
|
9
|
+
| macOS arm64 | output-check (-I) | 1067.451583 / 1435.647209 / 1578.762166 | 1578.762166 | 15 | 131.304500 |
|
|
10
|
+
| macOS arm64 | extract (no -I) | 1187.909083 / 1129.775667 / 2032.190459 | 2032.190459 | 15 | 101.507000 |
|
|
11
|
+
| Ubuntu x64 | output-check (-I) | 26.032033 / 20.150258 / 24.773280 | 26.032033 | 15 | 27.823435 |
|
|
12
|
+
| Ubuntu x64 | extract (no -I) | 33.736413 / 23.114327 / 34.226551 | 34.226551 | 15 | 32.182228 |
|
|
13
|
+
|
|
14
|
+
Counts: 12 cold, 60 warm, 12 refusal controls and 12 later interpreter metadata invocations, 96 total observations. Censored: 0. Errors: 0. Refusal controls: 12/12 expected exit 2. No failed or censored observation was dropped.
|
|
15
|
+
|
|
16
|
+
## Binding and procedure
|
|
17
|
+
|
|
18
|
+
- Output check uses the exact committed `write-output.py` with production `-I` and an inherited owned directory capability at FD3. The occupied-output refusal is unchanged.
|
|
19
|
+
- Extraction uses the exact committed `extract-archive.py`, without `-I` as production does. Node zlib creates the tiny public regular-file ustar before the first Python execution; the traversal archive is a separate refusal control.
|
|
20
|
+
- No Bun/npm installation, setup-python, native agent, account, model, or interpreter metadata probe precedes the first helper. Warm samples and refusal controls precede the interpreter metadata invocation.
|
|
21
|
+
- The controlled launcher records its first Python invocation; no claim is made that the OS/image caches were absolutely cold. Each child has a 15000 ms measurement ceiling and 4096-byte output cap. A timeout would remain right-censored; none occurred.
|
|
22
|
+
|
|
23
|
+
| Helper | SHA-256 at measured commit |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| output-check | `a6e056a59506922d4e15765495cec6e15cc33568ad6fdf90f5cc30c7b344217b` |
|
|
26
|
+
| extract | `7daf837943d279f2e72ca7e03cc8e6ea3c0bc9ab1eda6db738f20d57045c7eb3` |
|
|
27
|
+
|
|
28
|
+
| OS | Interpreter | Runner image |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| darwin | CPython 3.9.6 | macos15 20261104.0514.1 |
|
|
31
|
+
| linux | CPython 3.12.3 | ubuntu24 20261101.360.1 |
|
|
32
|
+
|
|
33
|
+
## Eight-second sizing tradeoff
|
|
34
|
+
|
|
35
|
+
The complete series has maximum cold time 2032.190459 ms (macOS extractor replicate 3). The separately recorded completed CI extractor sample remains larger: 3835.40 ms in [run 42355168440](https://github.com/STAIxBWLB/agent-hub/actions/runs/42355168440), macOS shard 1/4; it is not one of these 12 samples and is not discarded. Twice that known completed sample is 7670.80 ms. The selected 8000 ms helper allowance is 2.0858 times that prior sample, leaving 4164.60 ms beyond it.
|
|
36
|
+
|
|
37
|
+
The direct output-check maximum is 1578.762166 ms; using the larger extractor tail to size output-helper startup is a conservative shared-interpreter allowance, not a claim that the writer itself took 3835.40 ms. Both helper modes were measured explicitly.
|
|
38
|
+
|
|
39
|
+
Keeping two individually bounded output operations means `RECEIPT_OUTPUT_MS = 16000` ms. Existing controller aggregation includes that value automatically, increasing its advertised worst-case output allowance by 12000 ms from the former 4000 ms. The production 180000 ms installation allowance remains unchanged. Only the archive test fixture reuses one helper allowance for both totalMs/installMs.
|
|
40
|
+
|
|
41
|
+
Eight seconds reduces false timeout risk at the cost of allowing a genuine helper hang to block up to eight seconds per operation, rather than two. The finite timeout, kill/reap behavior, FD/no-follow, collision, ownership, integrity and explicit timeout assertions must remain intact. No unbounded warm-up is proposed. Three cold samples per cell do not estimate a statistical p99 or guarantee all future runner tails.
|
|
42
|
+
|
|
43
|
+
All 12 records were reviewed before the bound changed. The temporary measurement workflow was restored in `c4a40cee`, before normally merging origin/main at `3e27f16c`. The permanent measurement module remains callable; the scheduled compatibility workflow is unchanged by this follow-up. No package, real home, account, model, machine trust or agent CLI was installed or used. This receipt is not a native compatibility qualification.
|
|
44
|
+
|
|
45
|
+
## Regression checks and evidence limits
|
|
46
|
+
|
|
47
|
+
The output test retains every FD, ancestry, collision, no-follow and content assertion and changes only the exact total-budget contract from 4000 to 16000. A temporary helper uses `exec /bin/sleep 3` to exceed the former two-second allowance and finish. A second uses `exec /bin/sleep 60`; the actual eight-second spawnSync timeout must report `timeout`, reap that same owned helper process and publish no output. Both tests retain an explicit 20-second outer hang guard. No forked background helper is created. The generic npm fixture remains at 3000 ms installation budget; explicit timeout and archive-integrity controls are unchanged.
|
|
48
|
+
|
|
49
|
+
Committed-head DGX checks and hosted CI are separate from the measurement run and are reported at their tested SHA in the task/PR. They are not inferred from these hosted timing observations. No verified stamp is refreshed.
|
|
50
|
+
|
|
51
|
+
Per-observation elapsed/censor/outcome/exit fields are retained in the hosted per-job `measurement/result.json` artifacts and the workspace-local `task775-measurement-e9-complete/validated-complete.json` projection. No raw helper stdout/stderr, private paths or environment values are included in this report or the validated projection.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Model-free receipt harness core (#1248 T1)
|
|
2
|
+
|
|
3
|
+
Task #763. This report describes the harness and its fake-only verification. No
|
|
4
|
+
agent CLI was installed or run on the Mac, and no account or real model was used.
|
|
5
|
+
The T0 manifest and existing runtime admission policy are unchanged.
|
|
6
|
+
|
|
7
|
+
## Command and artifacts
|
|
8
|
+
|
|
9
|
+
`bun scripts/compat-receipt.ts <id> <exact-version> --out <new-owned-directory> --disposable-runner`
|
|
10
|
+
validates the id/version and refuses unsafe or occupied outputs before install.
|
|
11
|
+
It also requires a GitHub-hosted runner or disposable Linux container. A personal
|
|
12
|
+
Mac is refused; a temporary HOME alone does not contain installer code. The
|
|
13
|
+
explicit flag acknowledges that the runner must be destroyed after the job.
|
|
14
|
+
Each run creates fresh HOME, XDG, cache, prefix, project and native tool homes.
|
|
15
|
+
The caller's account/model variables and agent/Orca markers are not inherited.
|
|
16
|
+
The worker is started in that environment before native proof API imports.
|
|
17
|
+
|
|
18
|
+
Public exact npm artifacts are byte-verified against SRI before npm receives the
|
|
19
|
+
local tarball; npm user/global config and cache stay private. Tagged release
|
|
20
|
+
assets are checked against SHA-256 metadata and a checksum before extraction.
|
|
21
|
+
The two-pass extractor rejects traversal, links, nonregular entries, duplicates,
|
|
22
|
+
excess entries and expanded bytes before writing. This is not an assertion of
|
|
23
|
+
kernel confinement of arbitrary package lifecycle code. No ignore-scripts flag
|
|
24
|
+
is used to make installation or a proof succeed.
|
|
25
|
+
|
|
26
|
+
`summary.json` records identity, actual OS/architecture, artifact integrity,
|
|
27
|
+
installation and each manifest leg's closed status/cause/next step, time bounds,
|
|
28
|
+
scoped owned-stop status, lifetime process cleanup with its reason, disposable
|
|
29
|
+
runner containment and eligibility. `receipt.md` is its human view. Neither contains raw
|
|
30
|
+
native output, caller secrets or temporary prefix paths. Unproven lifetime cleanup or failed owned stop keeps
|
|
31
|
+
the private workspace and reports its location only on stderr. No version,
|
|
32
|
+
line window, real-home trust or PR is changed by the harness.
|
|
33
|
+
|
|
34
|
+
## Proof reuse and conductor ruling
|
|
35
|
+
|
|
36
|
+
Conductor ruling 2026-11-07 confines T1 to committed producer code. Historical
|
|
37
|
+
scratch Kimi/Qwen/Jcode producers are not copied or promoted here. Their missing
|
|
38
|
+
native legs report exactly "producer not committed; see follow-up task". Pi's
|
|
39
|
+
historical committed top-level producer is not an import-safe candidate API, so
|
|
40
|
+
its remaining proof reports that extraction gap. Source/lifecycle semantic review,
|
|
41
|
+
unsupported native platforms, account/model and TUI work are explicit not-run.
|
|
42
|
+
None can become a pass merely because installation or configuration succeeded.
|
|
43
|
+
|
|
44
|
+
- Codex imports `codexReviewerBackend.prepare` in the isolated worker, using only
|
|
45
|
+
temporary exact-version fixture trust. Empty/ambient preparations and their
|
|
46
|
+
structured isolation assertions must pass before its internally executed
|
|
47
|
+
metadata/native-canary checks can pass. The returned model exec is never run.
|
|
48
|
+
A candidate already admitted by policy cannot reproduce its old pre-admission
|
|
49
|
+
negative check without changing policy, so that leg is not applicable.
|
|
50
|
+
- Kimi imports its existing prepare and task-bound MCP broker. Only actual private
|
|
51
|
+
config/inventory/environment and host broker-refusal assertions are mapped.
|
|
52
|
+
Native Write/tool-loop/network/child-cleanup legs remain not-run. Production
|
|
53
|
+
managed-provider validation is not relaxed or pointed at a loopback service.
|
|
54
|
+
- Claude imports the existing Python producers through runpy. Optional
|
|
55
|
+
--expected-version and --runtime-path inputs parameterize the candidate and
|
|
56
|
+
isolated interpreters while preserving historical defaults/assertions. A group
|
|
57
|
+
must exit 0 with exact cases, version, binary stability and its native/host
|
|
58
|
+
group assertions before those assertions pass. These assertions do not prove
|
|
59
|
+
lifetime cleanup of detached helpers. Producer cleanup legs retain their pass or
|
|
60
|
+
fail on this original group evidence. PID groups are never signalled after their
|
|
61
|
+
reaped leader may have been reused. Original historical producer fingerprints
|
|
62
|
+
are history, not hashes of these newly parameterized files.
|
|
63
|
+
|
|
64
|
+
## Bounds and evidence ceiling
|
|
65
|
+
|
|
66
|
+
Install/proof execution has monotonic scheduling deadlines; default budgets are
|
|
67
|
+
15 minutes total, 3 minutes install and 2 minutes per proof worker/group. A fixed
|
|
68
|
+
10-second teardown allowance and a 4-second output check/publication allowance
|
|
69
|
+
are included in reported total wall-time bounds; elapsed time is sampled before
|
|
70
|
+
publication. The
|
|
71
|
+
production owned-process/descendant teardown is reused with a credential-free
|
|
72
|
+
process-table observer. Unconfirmed owned stop or a detected survivor fails the run.
|
|
73
|
+
Lifetime cleanup is separately reported as unproven, never inferred from an empty
|
|
74
|
+
leader PGID. Per the corrected ruling, this reported property does not gate
|
|
75
|
+
eligibility or rewrite producer cleanup assertions: outcome pass, policy eligibility,
|
|
76
|
+
confirmed owned stop and no detected survivor are the admission conditions.
|
|
77
|
+
An inconsistent optimistic pass/timeout result is rejected.
|
|
78
|
+
|
|
79
|
+
The test suite uses fake package metadata/bytes, fake installers and fake proof
|
|
80
|
+
executables. It covers pass plus both outputs, failed proof and no PR, pre-dispatch
|
|
81
|
+
model refusal despite an optimistic response, leg and total timeouts with owned
|
|
82
|
+
descendants, private environment/no caller mutation, unsupported platform,
|
|
83
|
+
invalid exact inputs, symlink outputs, digest-before-effects, bounded safe archive
|
|
84
|
+
extraction, committed producer mapping and isolated-worker missing-producer refusal.
|
|
85
|
+
The adversarial cleanup fixture launches a detached helper with a new PGID and
|
|
86
|
+
ignored pipes, then exits its launcher with code 0. The helper can remain alive
|
|
87
|
+
when the original group is empty. T1 reports `processCleanup: unproven` with a
|
|
88
|
+
reason, preserves owned-stop checks and fails any survivor it can detect. A passing
|
|
89
|
+
producer cleanup leg can remain pass and the receipt can be eligible while harness
|
|
90
|
+
lifetime cleanup is unproven; the test suite covers that distinction. It does
|
|
91
|
+
not install a Linux subreaper or macOS supervisor. Disposable runner lifetime is
|
|
92
|
+
the containment boundary; workflow integration must destroy the VM/container.
|
|
93
|
+
A process-supervision follow-up is required for lifetime proof.
|
|
94
|
+
|
|
95
|
+
The output regression renames the output parent and substitutes a symlink during
|
|
96
|
+
a run. A retained verified directory descriptor plus dir-relative exclusive
|
|
97
|
+
no-follow writes prevents final artifacts from reaching the replacement target.
|
|
98
|
+
These are harness/host fixture results, not new native CLI compatibility receipts.
|
|
99
|
+
|
|
100
|
+
## Verification
|
|
101
|
+
|
|
102
|
+
Final committed-head dgx02 checks and hosted exact-head CI are recorded in the PR
|
|
103
|
+
and task submission. No local full suite, native agent installation, account,
|
|
104
|
+
real API key or model run is claimed. Producer promotions and workflow/publisher
|
|
105
|
+
integration remain outside this PR; T2 publisher integration follows the person's separate token decision.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Committed Kimi and Qwen receipt producers (#1248 T1b)
|
|
2
|
+
|
|
3
|
+
Task #765 promotes the first-party historical producers behind the Kimi 2.5.1
|
|
4
|
+
and Qwen 0.26.8 receipts into callable modules. Candidate executable/package paths
|
|
5
|
+
and versions are parameters; no personal installation or account is an input.
|
|
6
|
+
The harness worker imports these modules instead of embedding their proof bodies.
|
|
7
|
+
No COMPAT, trust, workflow, verified version or documentation stamp changes.
|
|
8
|
+
|
|
9
|
+
## Provenance
|
|
10
|
+
|
|
11
|
+
Every retained producer matched its receipt fingerprint before promotion.
|
|
12
|
+
|
|
13
|
+
| Receipt | Historical producer | SHA-256 | Committed owner |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| [Kimi 2.5.1](2026-11-06-kimi-251-reviewer-compat.md) | `agent-hub-748/kimi-probe.ts` | `2ff8e2841f2cbd58d07add57e5deb9041ee33a692489083a176e6b5d5f406edf` | `scripts/compat-receipts/proofs/kimi.ts` |
|
|
16
|
+
| Kimi 2.5.1 | `agent-hub-748/loopback-only.cjs` | `f4e4714ac846c9e1861306f19c1c656350d1d4180818bd834aa34d1ae0ced8df` | `proofs/kimi-loopback-only.cjs`, original bytes |
|
|
17
|
+
| Kimi 2.5.1 | `agent-hub-748/run-kimi.py` | `1822f6d597d4b4cd7128d451addf81cb7bcd67492f339ea363ba99b288f80f5e` | Native process ownership is now the shared bounded command port |
|
|
18
|
+
| [Qwen 0.26.8](2026-11-06-qwen-0268-acp.md) | `agent-hub-749/probes/qwen-acp-probe.py` | `897ff1b615f93da8cf5d0a93a5ce150eadfc55e87dce1d44625ad833c236691f` | `proofs/qwen-acp.py` |
|
|
19
|
+
| Qwen 0.26.8 | `agent-hub-749/probes/qwen-permission.mjs` | `d777feb9070f254238f5ecf57f510e6af88e817b559919f65160bfd7db02a154` | `proofs/qwen-permission.mjs` |
|
|
20
|
+
| Qwen 0.26.8 | `agent-hub-749/probes/deny-network.cjs` | `361148af658dd4b65ed35308622ec99bb882ec5a25fab54581776546f139e892` | `proofs/qwen-network.cjs`, original bytes |
|
|
21
|
+
|
|
22
|
+
Historical paths are relative to workspace `scratchpad/temp/`. These hashes bind
|
|
23
|
+
the original procedures, not the newly parameterized module bytes. The promoted
|
|
24
|
+
Python/MJS helpers are import-safe and invoked by the single Qwen module.
|
|
25
|
+
|
|
26
|
+
## Receipt-to-leg mapping
|
|
27
|
+
|
|
28
|
+
Kimi's "Isolated production and native controls" is split at the existing
|
|
29
|
+
preparation boundary. `reviewers.ts` still owns preparation, exact inventory,
|
|
30
|
+
environment decoy, task-bound broker and source-fixture cleanup. An optional native
|
|
31
|
+
callback runs before broker revocation; negative broker controls compare their
|
|
32
|
+
callback count against the preceding positive native calls.
|
|
33
|
+
|
|
34
|
+
- `native-tool-loop`: fixed loopback SSE drives the actual two-tool loop, requires
|
|
35
|
+
the exact advertised two-tool inventory and the expected broker callbacks.
|
|
36
|
+
- `write-absent`: injected Write is absent and produces native tool-not-found;
|
|
37
|
+
the marker stays unchanged.
|
|
38
|
+
- `write-positive-control`: the private agent explicitly gains Write; fixed replies
|
|
39
|
+
produce the marker and the positive request sequence.
|
|
40
|
+
- `network-guard-control`: the original preload's non-loopback positive control
|
|
41
|
+
must deny the synthetic attempt. This is application-level, not kernel isolation.
|
|
42
|
+
- `cleanup`: original synthetic config/credential bytes, current launch, native
|
|
43
|
+
group stop and per-case temporary removal remain assertions. Synthetic provider
|
|
44
|
+
fields reproduce the original fixture; no real OAuth exchange occurs.
|
|
45
|
+
|
|
46
|
+
Qwen's "Native ACP, no prompts" and "Actual published permission handler" remain
|
|
47
|
+
canonical Python/MJS procedures behind `qwen.ts`.
|
|
48
|
+
|
|
49
|
+
- `artifact-private-install-integrity`: private package/name/version/CLI binding
|
|
50
|
+
and original CLI/chunk/metadata byte fences supplement the controller's SRI.
|
|
51
|
+
- `native-acp-auth-session-modes`: initialize, session and the four mapped mode
|
|
52
|
+
transitions. Receipt-observed protocol, title, auth, default mode and fixture
|
|
53
|
+
model are now explicit assertions; extra unmapped modes are permitted.
|
|
54
|
+
- `actual-published-permission-handler`: exports-only copy beside the original
|
|
55
|
+
published chunk, native approval handler and exact options, allow-once,
|
|
56
|
+
cancellation and unoffered-option refusal; original chunk bytes stay unchanged.
|
|
57
|
+
- `preload-network-cleanup`: original preload plus positive control, no permission
|
|
58
|
+
fixture network attempt, and bounded native-group cleanup observations.
|
|
59
|
+
- `native-macos-repetition`: passes only on actual macOS arm64 after the native
|
|
60
|
+
controls pass. `additional-linux` never substitutes for that requirement.
|
|
61
|
+
- `reviewed-optional-lifecycle-replay` remains human source-review work, not a
|
|
62
|
+
successful install inferred as a lifecycle review.
|
|
63
|
+
|
|
64
|
+
Cleanup never signals a group after its leader was reaped. Producer group
|
|
65
|
+
assertions retain their original meaning. Harness lifetime cleanup remains a
|
|
66
|
+
separate reported property under disposable-runner containment; it is not an
|
|
67
|
+
admission gate. Detected survivors and unconfirmed owned stop still fail.
|
|
68
|
+
|
|
69
|
+
The [Jcode 0.99.1](2026-10-26-jcode-0.99.1.md) producer was not retained:
|
|
70
|
+
`/tmp/ahub-jc0991` is gone. Its legs remain `producer-not-committed`; reconstruction
|
|
71
|
+
and proof against the 0.99.1 control are a separate task, not a promotion here.
|
|
72
|
+
|
|
73
|
+
## Verification and limits
|
|
74
|
+
|
|
75
|
+
Tests use typed fake command/protocol ports and private fixture homes, without a
|
|
76
|
+
mocking library. No native agent CLI is installed or run on the person's Mac, and
|
|
77
|
+
no real account, API key or model is supplied. Fixed loopback messages and tokens
|
|
78
|
+
are synthetic controls, not model behavior or provider readiness.
|
|
79
|
+
|
|
80
|
+
Exact committed-head dgx02 checks, hosted CI and review-thread state are recorded
|
|
81
|
+
in the PR/task. A successful fake protocol suite proves wiring and refusal
|
|
82
|
+
behavior, not a new native compatibility receipt or verified version.
|
|
83
|
+
|
|
84
|
+
## Review corrections
|
|
85
|
+
|
|
86
|
+
Both Qwen preload arguments quote their guard path. A fixture relocates the four
|
|
87
|
+
canonical helpers beneath a directory containing spaces and Korean characters,
|
|
88
|
+
then exercises both actual preload denial controls, ACP and permission handling.
|
|
89
|
+
The guard bytes and all existing refusal assertions stay unchanged.
|
|
90
|
+
|
|
91
|
+
In [CI run 42355168440](https://github.com/STAIxBWLB/agent-hub/actions/runs/42355168440),
|
|
92
|
+
the first macOS archive extraction completed in 3835.40 ms and the next in
|
|
93
|
+
454.92 ms. The archive fixture now uses its existing 5000 ms total budget for
|
|
94
|
+
installation, so its former 3000 ms margin does not mask an integrity refusal.
|
|
95
|
+
Production deadlines, the npm fixture and the explicit timeout assertions are
|
|
96
|
+
unchanged. Exact-head checks for these corrections are recorded in the PR/task.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Automated compatibility receipt workflow (#1248 T2)
|
|
2
|
+
|
|
3
|
+
Task #764 extends the existing drift watcher with structured candidate data,
|
|
4
|
+
isolated per-ID proof jobs and a data-only publisher. This report describes the
|
|
5
|
+
implementation and its fixture evidence; it is not a native CLI receipt.
|
|
6
|
+
|
|
7
|
+
## Trust and credential boundaries
|
|
8
|
+
|
|
9
|
+
- The watcher reads the trusted COMPAT policy and manifest. Public version strings
|
|
10
|
+
must be exact safe versions before they enter JSON matrix data. Unknown sources
|
|
11
|
+
remain drift without a runnable version. Confirmed verified IDs are separate
|
|
12
|
+
structured data, used to clear their old managed issue blocks.
|
|
13
|
+
- The matrix uses the manifest OS, at most eight IDs and two concurrent jobs.
|
|
14
|
+
Unspecified OS is not guessed. Each hosted runner has `contents: read`, no
|
|
15
|
+
supplied secrets, `persist-credentials: false`, a 20-minute bound and explicit
|
|
16
|
+
`--disposable-runner`. Native processes receive the harness's private homes and
|
|
17
|
+
allowlisted environment. Receipt artifacts remain data, not publisher code.
|
|
18
|
+
- Trusted read-only preparation validates native summaries against the manifest,
|
|
19
|
+
strips untrusted prose, and retains only canonical statuses, identities, digests
|
|
20
|
+
and scalar observations. Malformed or duplicate summary records make the batch drift-only; unreadable or oversized input refuses preparation.
|
|
21
|
+
For an eligible candidate it patches one row, builds repository code with pinned
|
|
22
|
+
Bun/frozen dependencies, binds fixed output files to the source SHA, then
|
|
23
|
+
restores source, plugin assets and role notice. This job has no GitHub writes.
|
|
24
|
+
- The privileged publisher downloads only that preparer's immutable artifact ID.
|
|
25
|
+
It validates every descriptor/hash/source binding before effects and re-plans
|
|
26
|
+
against current bot-owned PRs. It runs Node builtins and first-party pure
|
|
27
|
+
functions plus `gh` REST, never candidate code or a package install/build.
|
|
28
|
+
`GITHUB_TOKEN` must be explicitly present; personal `gh` login is not a fallback.
|
|
29
|
+
|
|
30
|
+
The [GitHub runner reference](https://docs.github.com/en/actions/how-tos/write-workflows/choose-where-workflows-run/choose-the-runner-for-a-job)
|
|
31
|
+
names `macos-latest` as arm64 and hosted jobs as fresh VMs. The harness still checks
|
|
32
|
+
actual OS/architecture. The [artifact action](https://github.com/actions/download-artifact)
|
|
33
|
+
supports downloading by immutable ID, avoiding candidate-selected bundle names.
|
|
34
|
+
|
|
35
|
+
## Publication and dry run
|
|
36
|
+
|
|
37
|
+
All required legs must pass and trusted manifest policy must allow model-free
|
|
38
|
+
admission. Model/TUI, source-review, unsupported-platform and missing-producer
|
|
39
|
+
legs stay not-run; `eligible` supplied by an artifact is not trusted. Harness
|
|
40
|
+
lifetime cleanup remains reported unproven and disposable-runner containment,
|
|
41
|
+
without overriding the producer's native-group assertions or acting as an
|
|
42
|
+
admission gate. A detected survivor or unconfirmed owned stop still fails.
|
|
43
|
+
|
|
44
|
+
One branch `compat/<id>-<version>` holds only the exact verified-array/receipt
|
|
45
|
+
edit, generated receipt and prepared plugin assets. Every other row and each
|
|
46
|
+
line window stays byte-identical. Existing bot PR metadata and owned file hashes
|
|
47
|
+
protect against ordinary manual drift; unknown/manual branch collisions refuse.
|
|
48
|
+
Updates use append-only Git history and `force: false`, not a claimed expected-old
|
|
49
|
+
SHA compare-and-swap. Editable PR markers are not cryptographic provenance against
|
|
50
|
+
a person who can coherently forge repository state. No verification PR is merged.
|
|
51
|
+
|
|
52
|
+
The person selected `GITHUB_TOKEN` plus explicit `check.yml` workflow dispatch.
|
|
53
|
+
GitHub's [workflow dispatch API](https://docs.github.com/en/rest/actions/workflows#creating-a-workflow-dispatch-event)
|
|
54
|
+
requires Actions write permission, so that permission is confined to publish.
|
|
55
|
+
There are no GitHub App credentials. The replacement PR and check dispatch must
|
|
56
|
+
succeed before an older same-ID PR is closed. Separate PR-only checks remain
|
|
57
|
+
normal review gates rather than being claimed as dispatched by `check.yml`.
|
|
58
|
+
|
|
59
|
+
The candidate CLI runs as the same user and in the same job as the harness that
|
|
60
|
+
writes its receipt. A malicious release could replace `summary.json` with a
|
|
61
|
+
well-formed eligible forgery before upload, which preparation's validation cannot
|
|
62
|
+
detect. Eligibility is a compatibility signal, not a security attestation of the
|
|
63
|
+
release. The person's PR and release review is the real admission gate; opening
|
|
64
|
+
an automated PR is not permission to merge it.
|
|
65
|
+
|
|
66
|
+
An exact-title tracker is selected through the existing fail-closed identity
|
|
67
|
+
helper. Closed-cause per-ID blocks preserve other drift/unknown evidence and
|
|
68
|
+
remove confirmed verified IDs. `dry: true` still runs the isolated proof and
|
|
69
|
+
read-only artifact preparation, then prints plans with zero branch, PR, issue, label or check-dispatch mutations.
|
|
70
|
+
Live publication is restricted to the trusted current main source; feature-branch
|
|
71
|
+
dispatch is usable for dry validation only.
|
|
72
|
+
|
|
73
|
+
## Verification
|
|
74
|
+
|
|
75
|
+
Pure tests cover admission policy, incomplete/malformed input, superseding
|
|
76
|
+
versions and dry plans. File-helper tests cover exact-row byte preservation and
|
|
77
|
+
refusal of unsafe grammar. Preparation uses fake build ports; publisher tests use
|
|
78
|
+
fake REST data to cover branch ownership, changed source/assets, two-parent main
|
|
79
|
+
integration, new-day receipts, preserved human prose, dispatch-before-supersede,
|
|
80
|
+
stale verified issue blocks and zero-write dry/validation modes. Workflow tests
|
|
81
|
+
check permissions, no secrets/credential persistence, job bounds and artifact IDs.
|
|
82
|
+
No mocking library or real token is required by these fixtures.
|
|
83
|
+
|
|
84
|
+
Exact committed-head dgx02 results, hosted CI, workflow dry-run results and review
|
|
85
|
+
threads are recorded in the PR/task. Unrun live/native/platform behavior stays
|
|
86
|
+
unverified; no real token value, account path or model prose is committed.
|
|
87
|
+
|
|
88
|
+
The real dry run [42359014165](https://github.com/STAIxBWLB/agent-hub/actions/runs/42359014165)
|
|
89
|
+
completed watch, three macOS harness jobs, prepare and publish at
|
|
90
|
+
`36d9059a35abeb22fd1b72423072e3bd90bebd9a`. It printed drift updates only: no
|
|
91
|
+
candidate was eligible. The current implementation's PR-open, update and
|
|
92
|
+
supersede write paths have not run against real GitHub; their evidence is the
|
|
93
|
+
fake REST suite. Scheduled live drift writes are not claimed as exercised by
|
|
94
|
+
this dry run.
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Daemon startup and pending readiness (#1232)
|
|
2
|
+
|
|
3
|
+
Date: 2026-11-07. Refs #1232, task #770.
|
|
4
|
+
|
|
5
|
+
The historical 11-16 second startup did not reproduce. An isolated real-state
|
|
6
|
+
copy started in 2503 ms before the change and 2171 ms after it. The representative
|
|
7
|
+
synthetic fixture on dgx02 took 2201 ms before and 1382 ms after. These are single
|
|
8
|
+
observations, with different runtimes and different event mixes as described
|
|
9
|
+
below; they do not establish a general speedup or the historical cause.
|
|
10
|
+
|
|
11
|
+
The measured redundant work was three full `events.jsonl` seed reads. They now
|
|
12
|
+
share one lossless streaming pass. No persistent index, migration, log rotation
|
|
13
|
+
or historical-key truncation was added. The index follow-up is #1266.
|
|
14
|
+
|
|
15
|
+
## Method and boundaries
|
|
16
|
+
|
|
17
|
+
Each sample used a fresh isolated project and state copy. Wall time starts with
|
|
18
|
+
the measured child launch and includes imports and daemon initialization through
|
|
19
|
+
readiness. Copying or generating the fixture happens before that clock. The
|
|
20
|
+
phase line measures exclusive boundaries inside `startDaemon`; import time is
|
|
21
|
+
reported separately from those phases.
|
|
22
|
+
|
|
23
|
+
The real state remained on this Mac. Its copied database used SQLite's online
|
|
24
|
+
read-only backup; only the destination was normalized out of WAL mode so the
|
|
25
|
+
first Bun read did not depend on missing sidecars. The event copy retained a
|
|
26
|
+
complete append-only prefix. Private files and directories had private modes.
|
|
27
|
+
The measured child had isolated HOME/tool homes, a loopback port allocated at
|
|
28
|
+
startup, no peers, no gateway/model/sync work, and both application effect guards
|
|
29
|
+
and a Seatbelt profile denying outbound networking and the original state paths.
|
|
30
|
+
Storage and cache initialization remained enabled. Every successful observation
|
|
31
|
+
reported zero prohibited effects, stopped its owned child and removed the copy.
|
|
32
|
+
The real hub's listener identity was unchanged.
|
|
33
|
+
|
|
34
|
+
The authorized three-attempt limit was exhausted, including the first failed
|
|
35
|
+
attempt: it stopped before daemon startup because a freshly backed-up WAL-mode
|
|
36
|
+
database lacked sidecars for Bun's read-only open. That attempt has no startup
|
|
37
|
+
timing claim. A public WAL-backup regression covers the correction. Attempts 2
|
|
38
|
+
and 3 are the before/after Mac observations below. No private state was sent to
|
|
39
|
+
dgx02, and no task or event body was read into the model.
|
|
40
|
+
|
|
41
|
+
The dgx02 fixture matches the before-copy counts and aggregate byte sizes, not
|
|
42
|
+
its private contents. Every synthetic event is a native-end record, a worst-case
|
|
43
|
+
dedupe-set workload rather than the real event-type distribution. Its rollup is
|
|
44
|
+
cold; the real copy retains its existing rollup cursor. SQLite page padding makes
|
|
45
|
+
the synthetic DB 8192 bytes larger than requested. The private `ready` phase is
|
|
46
|
+
about 1.24 seconds and is not reproduced by this aggregate synthetic fixture.
|
|
47
|
+
|
|
48
|
+
## Observation bindings
|
|
49
|
+
|
|
50
|
+
| Observation | Head | Runtime | Wall ms | Import plus startup ms | Phase total ms |
|
|
51
|
+
| --- | --- | --- | ---: | ---: | ---: |
|
|
52
|
+
| Mac copied state, before, attempt 2 | `efe43fdbc62b35495a160dcf71ba119479fc12f3` | Bun 1.4.4, macOS arm64 | 2503 | 2479 | 2346 |
|
|
53
|
+
| Mac copied state, after, attempt 3 | `b4ae2e66dacb80f537a55e1daef701498d117449` | Bun 1.4.4, macOS arm64 | 2171 | 2144 | 1995 |
|
|
54
|
+
| dgx02 synthetic, before | `efe43fdbc62b35495a160dcf71ba119479fc12f3` | Bun 1.4.2, Linux x64 | 2201 | 2182 | 1989 |
|
|
55
|
+
| dgx02 synthetic, after | `a87e3c5d7e243d350ee19dc7d38c6d792b9f7873` | Bun 1.4.2, Linux x64 | 1382 | 1362 | 1167 |
|
|
56
|
+
|
|
57
|
+
| Profile | Mac before / synthetic | Mac after |
|
|
58
|
+
| --- | ---: | ---: |
|
|
59
|
+
| DB bytes | 38260736 / 38268928 | 38260736 |
|
|
60
|
+
| Tasks / history entries | 773 / 8383 | 775 / 8425 |
|
|
61
|
+
| Task text bytes | 941219 | 943364 |
|
|
62
|
+
| Delivery rows / payload bytes | 2052 / 10429841 | 2052 / 10383407 |
|
|
63
|
+
| Event bytes / lines | 135894851 / 723243 | 136341131 / 725816 |
|
|
64
|
+
| Abandoned files / aggregate bytes | 7 / 94021653 | 7 / 94021653 |
|
|
65
|
+
| Largest abandoned file bytes | 16932725 | 16932725 |
|
|
66
|
+
|
|
67
|
+
The real hub continued running between copies, so its two profiles differ.
|
|
68
|
+
|
|
69
|
+
## Phase timings
|
|
70
|
+
|
|
71
|
+
All values are milliseconds. The phase names and numeric-only line shape are
|
|
72
|
+
fixed; unavailable or regressing diagnostic clocks cannot fail startup.
|
|
73
|
+
|
|
74
|
+
| Phase | Mac before | Mac after | Synthetic before | Synthetic after |
|
|
75
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
76
|
+
| schema | 1 | 1 | 1 | 1 |
|
|
77
|
+
| source | 38 | 41 | 24 | 24 |
|
|
78
|
+
| configuration | 1 | 2 | 3 | 3 |
|
|
79
|
+
| control | 3 | 2 | 6 | 6 |
|
|
80
|
+
| recovery | 1 | 2 | 0 | 1 |
|
|
81
|
+
| journal | 45 | 44 | 38 | 42 |
|
|
82
|
+
| bus | 71 | 91 | 88 | 100 |
|
|
83
|
+
| memory | 87 | 88 | 61 | 59 |
|
|
84
|
+
| model_runtime | 0 | 0 | 1 | 0 |
|
|
85
|
+
| board | 2 | 2 | 1 | 2 |
|
|
86
|
+
| task_runtime | 170 | 177 | 38 | 37 |
|
|
87
|
+
| native_stop_seed | 209 | 229 | 598 | 685 |
|
|
88
|
+
| budget | 1 | 1 | 7 | 9 |
|
|
89
|
+
| usage_seed | 223 | 36 | 535 | 79 |
|
|
90
|
+
| usage_rollup | 2 | 2 | 33 | 33 |
|
|
91
|
+
| token_runtime | 13 | 10 | 13 | 13 |
|
|
92
|
+
| token_seed | 14 | 14 | 10 | 12 |
|
|
93
|
+
| services | 14 | 15 | 25 | 28 |
|
|
94
|
+
| transcript_usage_seed | 216 | 0 | 478 | 0 |
|
|
95
|
+
| ready | 1235 | 1238 | 28 | 30 |
|
|
96
|
+
| post_ready | 0 | 0 | 1 | 3 |
|
|
97
|
+
|
|
98
|
+
The three seed calls already exist at v0.20.0 (`daemon.ts` lines 1969, 2123 and
|
|
99
|
+
3277) and v0.23.0 (lines 2375, 2565 and 4123). The measurements do not show that
|
|
100
|
+
these calls were introduced during the historical latency jump.
|
|
101
|
+
|
|
102
|
+
## I/O and semantic preservation
|
|
103
|
+
|
|
104
|
+
| I/O observation | Mac before | Mac after | Synthetic before | Synthetic after |
|
|
105
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
106
|
+
| Aggregate event bytes read | 407685899 | 136341537 | 416073489 | 144283569 |
|
|
107
|
+
| Streaming seed passes | three legacy full reads | 1 | three legacy full reads | 1 |
|
|
108
|
+
| Streaming seed bytes | not separately recorded | 136341240 | not separately recorded | 135894960 |
|
|
109
|
+
| Event `readFileSync` calls after the change | not separately recorded | 0 | not separately recorded | 0 |
|
|
110
|
+
| Separate auxiliary event bytes | not separately recorded | 297 | not separately recorded | 8388609 |
|
|
111
|
+
| Abandoned snapshot body bytes | 0 | 0 | 0 | 0 |
|
|
112
|
+
|
|
113
|
+
Seed bytes include the child's new hub-start record. Aggregate I/O also includes
|
|
114
|
+
the existing bounded rollup poll and the appender's one-byte newline check. Cold
|
|
115
|
+
synthetic auxiliary I/O is 8 MiB plus that byte; the warm private copy reads a
|
|
116
|
+
small remaining tail. Those reads are shown explicitly rather than claimed to
|
|
117
|
+
be part of a single physical read of every consumer.
|
|
118
|
+
|
|
119
|
+
The later benchmark-only review correction independently attributes bytes around
|
|
120
|
+
the real synchronous `UsageRollup.poll` method and restores its original
|
|
121
|
+
descriptor. Acceptance caps that actual rollup I/O at its existing 8 MiB budget
|
|
122
|
+
and permits at most the appender's one extra byte outside the seed and rollup
|
|
123
|
+
scopes. A second streaming descriptor pass outside either scope, or a full-log
|
|
124
|
+
poll inside the rollup scope, is rejected. Private attempt 3 predates these scoped
|
|
125
|
+
counters: its 297 auxiliary bytes are retained as an aggregate observation, not
|
|
126
|
+
retroactively assigned to `usageRollupReadBytes` or `residualExtraReadBytes`.
|
|
127
|
+
There was no fourth private run. The underlying daemon change is unchanged.
|
|
128
|
+
|
|
129
|
+
At `33ad860f5bda`, typecheck and all 61 focused tests passed. The stricter public
|
|
130
|
+
synthetic acceptance run took 1364 ms and independently measured 8388608 rollup
|
|
131
|
+
bytes, one rollup call and one residual appender byte. Seed passes remained one,
|
|
132
|
+
with no event `readFileSync` call, abandoned body read or prohibited effect.
|
|
133
|
+
|
|
134
|
+
The shared line predicate preserves measured-time handling, malformed-line
|
|
135
|
+
skipping and a complete final JSON record without a newline. Streaming UTF-8
|
|
136
|
+
decoding has no line-size or history ceiling. Native-stop IDs and Claude usage
|
|
137
|
+
IDs are folded during the pass, while the existing budget, Kimi and token-window
|
|
138
|
+
consumers reuse the same accepted event array. Their existing expressions and
|
|
139
|
+
historical keys remain intact.
|
|
140
|
+
|
|
141
|
+
## Readiness behavior and checks
|
|
142
|
+
|
|
143
|
+
The status promise and runtime schema are unchanged. A signed, bound own child
|
|
144
|
+
that remains pending gets one stderr notice after 12 seconds. The CLI continues
|
|
145
|
+
waiting, and authenticated late readiness uses the existing runtime admission
|
|
146
|
+
and confirmation path once. Death, authority cancellation or the 120-second
|
|
147
|
+
outer bound cannot turn unknown startup into success. An outer-bound failure
|
|
148
|
+
leaves the daemon running and its runtime unconfirmed. Each connect/status pair
|
|
149
|
+
gets at most half the remaining wait budget; ordinary `inspectProject` callers
|
|
150
|
+
retain their API and timeout semantics.
|
|
151
|
+
|
|
152
|
+
At `a87e3c5d`, typecheck, 41 tests and the representative synthetic acceptance run
|
|
153
|
+
passed. At `844fbbdc0461b884b7c69234c3c4c5c05510b6c3`, typecheck and 62 tests
|
|
154
|
+
passed, including actual retained-runtime lifecycle fixtures and a real owned
|
|
155
|
+
fake child's signed identity. Its subsequent inventory check listed the 39 new
|
|
156
|
+
keys, which are classified separately without changing the baseline or existing
|
|
157
|
+
labels. Tests compare legacy and streamed seed results, long/fragmented UTF-8
|
|
158
|
+
records, quota/Kimi/token semantics, actual reader I/O, repeated observer calls,
|
|
159
|
+
late confirmation, cancellation, competing claims and both readiness bounds.
|
|
160
|
+
|
|
161
|
+
The full canonical dgx02 gate at
|
|
162
|
+
`d16e7ea18613adeb4c0705085e45f5454abf5698` passed: 12248 pass, 101 skip,
|
|
163
|
+
0 fail across 953 files, with no current-invocation daemon leaks. That full result
|
|
164
|
+
predates the benchmark-only scoped-I/O and cleanup corrections described above;
|
|
165
|
+
their current-head delta gate and hosted CI are recorded separately in the PR/task.
|
|
166
|
+
|
|
167
|
+
The pinned Bun 1.4.2 bundle was regenerated after a worktree-local frozen install.
|
|
168
|
+
Final canonical gate, hosted CI and review-thread evidence are recorded in the
|
|
169
|
+
PR/task. No interactive agent start or real account/model behavior is claimed.
|