@staix/agent-hub 0.21.0 → 0.23.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.
Files changed (100) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +2 -2
  3. package/docs/agent-notes/adapters.md +2 -1
  4. package/docs/agent-notes/budget.md +1 -1
  5. package/docs/agent-notes/bus.md +5 -2
  6. package/docs/agent-notes/daemon.md +5 -4
  7. package/docs/agent-notes/local-worker.md +1 -1
  8. package/docs/agent-notes/models.md +2 -1
  9. package/docs/agent-notes/tasks.md +2 -1
  10. package/docs/agent-notes/tests.md +2 -2
  11. package/docs/dogfood.md +10 -2
  12. package/docs/operations.md +192 -6
  13. package/docs/profiles.md +29 -4
  14. package/docs/quickstart.md +9 -1
  15. package/docs/security.md +7 -1
  16. package/docs/smoke.md +6 -0
  17. package/docs/specs/2026-09-19-agent-hub-design.md +94 -1
  18. package/docs/verification/2026-10-30-0.22.0.md +49 -0
  19. package/docs/verification/2026-10-30-0.23.0.md +70 -0
  20. package/docs/verification/2026-10-30-445-capability-probes.md +172 -0
  21. package/docs/verification/2026-10-30-adapter-operational-settings.md +261 -0
  22. package/docs/verification/2026-10-30-bus-delivery-operational-settings.md +77 -0
  23. package/docs/verification/2026-10-30-jcode-ac4.md +24 -0
  24. package/docs/verification/2026-10-30-jcode-ac6.md +52 -0
  25. package/docs/verification/2026-10-30-model-operational-settings.md +211 -0
  26. package/docs/verification/2026-10-30-operational-settings-closure.md +1217 -0
  27. package/docs/verification/2026-10-30-recovery-wait-settings.md +141 -0
  28. package/docs/verification/2026-10-30-ui-console-operational-settings.md +1845 -0
  29. package/docs/verified.json +15 -15
  30. package/package.json +1 -1
  31. package/plugins/agent-hub/.claude-plugin/plugin.json +1 -1
  32. package/plugins/agent-hub/ROLE-NOTICE.md +1 -1
  33. package/plugins/agent-hub/server.js +559 -115
  34. package/src/adapters/acp.ts +48 -2
  35. package/src/adapters/claude-channel.ts +6 -4
  36. package/src/adapters/codex-appserver.ts +19 -0
  37. package/src/adapters/jcode.ts +1 -1
  38. package/src/adapters/local-worker.ts +3 -3
  39. package/src/adapters/native-capabilities.ts +50 -0
  40. package/src/adapters/registry-types.ts +3 -10
  41. package/src/cli/capabilities-output.ts +30 -0
  42. package/src/cli/console-state.ts +8 -5
  43. package/src/cli/console.ts +27 -4
  44. package/src/cli/help.ts +3 -1
  45. package/src/cli/identity.ts +4 -1
  46. package/src/cli/learn-output.ts +38 -0
  47. package/src/cli/main.ts +28 -2
  48. package/src/cli/recovery-waits.ts +26 -0
  49. package/src/cli/smoke-pty-bridge.ts +67 -18
  50. package/src/cli/smoke-pty.ts +10 -2
  51. package/src/cli/upgrade-runtime.ts +16 -14
  52. package/src/cli/upgrade.ts +2 -1
  53. package/src/hub/board.ts +8 -2
  54. package/src/hub/bus.ts +117 -17
  55. package/src/hub/capabilities.ts +215 -0
  56. package/src/hub/config-apply.ts +8 -4
  57. package/src/hub/config-trust.ts +1 -0
  58. package/src/hub/control-client.ts +41 -8
  59. package/src/hub/daemon.ts +436 -33
  60. package/src/hub/deferred-hub.ts +2 -2
  61. package/src/hub/delivery-hints.ts +2 -2
  62. package/src/hub/delivery-journal.ts +80 -61
  63. package/src/hub/envelope.ts +12 -2
  64. package/src/hub/events.ts +2 -0
  65. package/src/hub/hub-tools.ts +16 -1
  66. package/src/hub/inference.ts +10 -5
  67. package/src/hub/invocations.ts +316 -0
  68. package/src/hub/learning.ts +33 -1
  69. package/src/hub/operational-settings.ts +180 -1
  70. package/src/hub/peers.ts +3 -0
  71. package/src/hub/restart.ts +2 -2
  72. package/src/hub/room-invocations.ts +145 -0
  73. package/src/hub/settings.ts +22 -2
  74. package/src/hub/shipped-packs.ts +5 -2
  75. package/src/hub/shipped-roles.ts +13 -0
  76. package/src/hub/tasks.ts +92 -1
  77. package/src/memory/capture.ts +2 -2
  78. package/src/models/relay.ts +20 -9
  79. package/src/rooms/application.ts +67 -2
  80. package/src/rooms/boundary.ts +43 -11
  81. package/src/rooms/service.ts +40 -2
  82. package/templates/checks/analysis.mjs +59 -0
  83. package/templates/checks/fixtures/analysis-expected.json +1 -0
  84. package/templates/checks/fixtures/analysis-input.json +1 -0
  85. package/templates/checks/fixtures/analysis.mjs +7 -0
  86. package/templates/checks/fixtures/ops.json +4 -0
  87. package/templates/checks/fixtures/writing-rules.json +4 -0
  88. package/templates/checks/fixtures/writing.json +5 -0
  89. package/templates/checks/ops.mjs +40 -0
  90. package/templates/checks/writing.mjs +40 -0
  91. package/templates/packs/analysis.pack.json +14 -0
  92. package/templates/packs/ops.pack.json +14 -0
  93. package/templates/packs/writing-pack.pack.json +14 -0
  94. package/templates/roles/NOTICE.md +1 -1
  95. package/templates/roles/ops/meeting-actions-owner.md +26 -0
  96. package/templates/roles/ops/project-manager.md +26 -0
  97. package/templates/roles/writing/editor.md +26 -0
  98. package/templates/roles/writing/style-checker.md +26 -0
  99. package/templates/roles/writing/terminology-checker.md +26 -0
  100. package/templates/roles/writing/translator.md +26 -0
@@ -0,0 +1,141 @@
1
+ # H4 recovery and upgrade waits: H0 ledger
2
+
3
+ Reconciliation for #489 H4 (task 445), against the H0 inventory `2026-10-24-hardcoded-values.md`. The inventory lists 141 rows for the area "recovery/upgrade waits" (117 unique after the inventory's duplicate display rows). Locations are frozen H0 locations, not current source lines. The rows are taken from the inventory as it stands and each disposition was read against the code at main 3af9255d; the generator is not committed.
4
+
5
+ Classification of the unique rows by H0: 58 operational, 23 safety floor, 26 contract, 10 test seam.
6
+
7
+ Dispositions: **6 rows converted** into five settings (111 left out, each with its reason below). 0 rows are unclassified.
8
+
9
+ The five settings (all `next use`, read from the project's config at the start of each wait by `src/cli/recovery-waits.ts`):
10
+
11
+ | Setting | Bounds | Default | Constant it replaces |
12
+ | --- | --- | --- | --- |
13
+ | `recovery.reconnect_wait_s` | 600 to 3600 s | 600 | `RECONNECT_WAIT_MS` |
14
+ | `recovery.unmanaged_reconnect_wait_s` | 90 to 900 s | 90 | `UNMANAGED_RECONNECT_WAIT_MS` |
15
+ | `recovery.control_timeout_s` | 30 to 300 s | 30 | `RECOVERY_CONTROL_TIMEOUT_MS` |
16
+ | `recovery.shutdown_wait_s` | 30 to 300 s | 30 | the 30 s wait after a commit in `runRecovery` |
17
+ | `recovery.terminal_idle_wait_s` | 30 to 600 s | 120 | the two 120 s `waitForIdle` calls |
18
+
19
+ Every minimum is today's constant except the terminal idle wait: a person-visible wait may be raised and never shortened below what ships. A shorter terminal idle wait only ends a wait in manual-required, which retains the terminal.
20
+
21
+ Handed over from H3 and not in this area's inventory rows: the recovery fence poll in `src/hub/bus.ts` (`fenceRecovery`: a 1 ms initial poll, doubling to a 50 ms cap, bounded by a 5 s deadline). H3's ledger rows `bus.ts:365:17` and `bus.ts:372:35` deferred it to this task. **Left out of H4**, with the reason: the 5 s deadline is already an injectable parameter of `fenceRecovery(timeoutMs = 5_000)` and a fence that times out leaves queues, in-flight deliveries and any hold the caller did not set exactly as they were, so a longer value only delays a refusal the caller retries; the 1 ms and 50 ms poll steps are an implementation detail of that bounded wait, not a wait a person tunes. It stays a constant (H3's row `bus.ts:361:35` records the same `5_000` as a test seam). Both daemon call sites (`recovery prepare` and `recovery restore`) pass no argument. This is a disposition, not a conversion: no setting was added for it.
22
+
23
+ | Frozen H0 location | Name | Value | H0 class | Disposition | Reason |
24
+ | --- | --- | --- | --- | --- | --- |
25
+ | src/cli/recovery-guidance.ts:89:173 | `[...new Set(recorded.filter((peer): peer is string => typeof` | `64` | contract | keep: contract | A format, protocol or arithmetic constant. |
26
+ | src/cli/recovery-package.ts:15:23 | `next.length > 2_000_000` | `2_000_000` | safety floor | defer (H4 follow-up): recovery-package.ts | Outside this task's paths: package-copy and child-process timeouts. |
27
+ | src/cli/recovery-package.ts:16:23 | `next.slice` | `-2_000_000` | safety floor | defer (H4 follow-up): recovery-package.ts | Outside this task's paths: package-copy and child-process timeouts. |
28
+ | src/cli/recovery-package.ts:21:100 | `options.timeoutMs ?? 60_000` | `60_000` | operational | defer (H4 follow-up): recovery-package.ts | Outside this task's paths: package-copy and child-process timeouts. |
29
+ | src/cli/recovery-package.ts:22:61 | `setTimeout` | `(options.timeoutMs ?? 60_000) ` | operational | defer (H4 follow-up): recovery-package.ts | Outside this task's paths: package-copy and child-process timeouts. |
30
+ | src/cli/recovery-package.ts:22:83 | `options.timeoutMs ?? 60_000` | `60_000` | operational | defer (H4 follow-up): recovery-package.ts | Outside this task's paths: package-copy and child-process timeouts. |
31
+ | src/cli/recovery-package.ts:110:128 | `timeoutMs` | `30_000` | operational | defer (H4 follow-up): recovery-package.ts | Outside this task's paths: package-copy and child-process timeouts. |
32
+ | src/cli/recovery-package.ts:121:99 | `timeoutMs` | `30_000` | operational | defer (H4 follow-up): recovery-package.ts | Outside this task's paths: package-copy and child-process timeouts. |
33
+ | src/cli/recovery-package.ts:153:115 | `timeoutMs` | `180_000` | operational | defer (H4 follow-up): recovery-package.ts | Outside this task's paths: package-copy and child-process timeouts. |
34
+ | src/cli/terminal-recovery.ts:178:7 | `MAX_WAIT_MS` | `10 * 60 * 1000` | operational | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
35
+ | src/cli/terminal-recovery.ts:179:14 | `MAX_COMMAND_MS` | `30000` | operational | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
36
+ | src/cli/terminal-recovery.ts:181:7 | `EXIT_SLICE_MS` | `5000` | operational | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
37
+ | src/cli/terminal-recovery.ts:183:7 | `MAP_POLL_MS` | `1000` | operational | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
38
+ | src/cli/terminal-recovery.ts:222:66 | `argv.slice` | `2` | contract | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
39
+ | src/cli/terminal-recovery.ts:239:88 | `argv.slice` | `2` | contract | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
40
+ | src/cli/terminal-recovery.ts:472:61 | `JSON.stringify(value).length > 32 * 1024` | `32 * 1024` | safety floor | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
41
+ | src/cli/terminal-recovery.ts:473:101 | `value.launchId.length > 128` | `128` | safety floor | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
42
+ | src/cli/terminal-recovery.ts:473:141 | `value.launcherSignature.length > 256` | `256` | safety floor | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
43
+ | src/cli/terminal-recovery.ts:808:113 | `timeout` | `0` | contract | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
44
+ | src/cli/terminal-recovery.ts:829:75 | `timeoutMs` | `600_000` | test seam | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
45
+ | src/cli/terminal-recovery.ts:838:35 | `deadline` | `5000` | operational | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
46
+ | src/cli/terminal-recovery.ts:842:23 | `Bun.sleep` | `100` | operational | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
47
+ | src/cli/terminal-recovery.ts:854:127 | `timeoutMs` | `600_000` | test seam | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
48
+ | src/cli/terminal-recovery.ts:928:32 | `Math.max` | `1` | operational | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
49
+ | src/cli/terminal-recovery.ts:941:77 | `timeoutMs` | `600_000` | test seam | defer (H4 follow-up): terminal-recovery.ts | Outside this task's paths. MAX_WAIT_MS is the ceiling every terminal wait is clamped to, so the idle wait setting cannot exceed it; the poll slices and the 5 s close confirmation stay with it. |
50
+ | src/cli/upgrade-interactive.ts:116:100 | `peer.state.padEnd` | `7` | contract | defer (H4 follow-up): upgrade-interactive.ts | Outside this task's paths: a one-minute refresh cadence of an interactive screen. |
51
+ | src/cli/upgrade-interactive.ts:116:139 | `KINDS[peerKind(p, peer)].padEnd` | `8` | contract | defer (H4 follow-up): upgrade-interactive.ts | Outside this task's paths: a one-minute refresh cadence of an interactive screen. |
52
+ | src/cli/upgrade-interactive.ts:165:83 | `clock(io) - lastWaitAt >= 60_000` | `60_000` | operational | defer (H4 follow-up): upgrade-interactive.ts | Outside this task's paths: a one-minute refresh cadence of an interactive screen. |
53
+ | src/cli/upgrade-interactive.ts:174:59 | `clock(io) - lastWaitAt >= 60_000` | `60_000` | operational | defer (H4 follow-up): upgrade-interactive.ts | Outside this task's paths: a one-minute refresh cadence of an interactive screen. |
54
+ | src/cli/upgrade-interactive.ts:259:80 | `reason.slice` | `500` | safety floor | defer (H4 follow-up): upgrade-interactive.ts | Outside this task's paths: a one-minute refresh cadence of an interactive screen. |
55
+ | src/cli/upgrade-interactive.ts:287:112 | `reason.slice` | `500` | safety floor | defer (H4 follow-up): upgrade-interactive.ts | Outside this task's paths: a one-minute refresh cadence of an interactive screen. |
56
+ | src/cli/upgrade-labels.ts:17:42 | `ms < 90_000` | `90_000` | contract | keep: presentation | A label threshold or a line index, not a wait. |
57
+ | src/cli/upgrade-labels.ts:17:99 | `ms < 5_400_000` | `5_400_000` | contract | keep: presentation | A label threshold or a line index, not a wait. |
58
+ | src/cli/upgrade-labels.ts:27:75 | `lines.push` | `0` | operational | keep: presentation | A label threshold or a line index, not a wait. |
59
+ | src/cli/upgrade-presentation.ts:35:28 | `Math.max` | `0` | contract | keep: contract | A format, protocol or arithmetic constant. |
60
+ | src/cli/upgrade-presentation.ts:36:17 | `seconds < 60` | `60` | contract | keep: contract | A format, protocol or arithmetic constant. |
61
+ | src/cli/upgrade-presentation.ts:38:17 | `minutes < 60` | `60` | contract | keep: contract | A format, protocol or arithmetic constant. |
62
+ | src/cli/upgrade-presentation.ts:39:76 | `minutes % 60` | `60` | contract | keep: contract | A format, protocol or arithmetic constant. |
63
+ | src/cli/upgrade-presentation.ts:39:89 | `String(minutes % 60).padStart` | `2` | contract | keep: contract | A format, protocol or arithmetic constant. |
64
+ | src/cli/upgrade-presentation.ts:171:40 | `points.length > 512` | `512` | safety floor | keep: safety floor | A size or count cap that protects data or the host; never loosenable here. |
65
+ | src/cli/upgrade-presentation.ts:171:65 | `points.slice` | `509` | safety floor | keep: safety floor | A size or count cap that protects data or the host; never loosenable here. |
66
+ | src/cli/upgrade-runtime.ts:26:7 | `UNMANAGED_RECONNECT_WAIT_MS` | `90000` | operational | convert: recovery.unmanaged_reconnect_wait_s (floor = 90 s) | Read from the project's own config at the start of the wait; unset is the old constant. |
67
+ | src/cli/upgrade-runtime.ts:28:7 | `RECONNECT_WAIT_MS` | `600000` | operational | convert: recovery.reconnect_wait_s (floor = 600 s) | Read from the project's own config at the start of the wait; unset is the old constant. |
68
+ | src/cli/upgrade-runtime.ts:65:72 | `timeoutMs` | `610_000` | operational | keep: orca runner timeout | One Orca command is bounded by terminal-recovery's own ten-minute ceiling (MAX_WAIT_MS) plus 10 s; raising the reconnect wait must not raise it, and lowering it below that ceiling would cut a wait the ceiling allows. |
69
+ | src/cli/upgrade-runtime.ts:79:7 | `RECOVERY_CONTROL_TIMEOUT_MS` | `30000` | operational | convert: recovery.control_timeout_s (floor = 30 s) | Read from the project's own config at the start of the wait; unset is the old constant. |
70
+ | src/cli/upgrade-runtime.ts:231:166 | `(Array.isArray(response.recovery?.blockers) ? response.recov` | `20` | safety floor | keep: safety floor | A bound on blocker text copied into a receipt. |
71
+ | src/cli/upgrade-runtime.ts:231:200 | `b.slice` | `200` | safety floor | keep: safety floor | A bound on blocker text copied into a receipt. |
72
+ | src/cli/upgrade-runtime.ts:248:69 | `timeoutMs` | `10_000` | operational | keep: installer probe | A version probe of the shared Claude plugin installer. A short fixed probe, not a wait a person tunes. |
73
+ | src/cli/upgrade-runtime.ts:393:106 | `timeoutMs` | `180_000` | operational | keep: global install timeout | `bun add -g` is a global effect with no project, so no project config can own it; and it is not a shorter-is-safe wait. |
74
+ | src/cli/upgrade-runtime.ts:412:61 | `waitForIdle` | `120_000` | operational | convert: recovery.terminal_idle_wait_s (30-600 s) | Read from the project's own config at the start of the wait; unset is the old constant. |
75
+ | src/cli/upgrade-runtime.ts:510:45 | `waitForIdle` | `120_000` | operational | convert: recovery.terminal_idle_wait_s (30-600 s) | Read from the project's own config at the start of the wait; unset is the old constant. |
76
+ | src/cli/upgrade-runtime.ts:562:32 | `Math.min` | `1000` | operational | keep: polling slice | A poll or sleep slice inside a bounded wait (the bound is the setting); not a wait. |
77
+ | src/cli/upgrade-runtime.ts:579:28 | `Math.min` | `1000` | operational | keep: polling slice | A poll or sleep slice inside a bounded wait (the bound is the setting); not a wait. |
78
+ | src/cli/upgrade-runtime.ts:583:125 | `timeoutMs` | `3000` | operational | keep: orca show timeout | One `orca terminal show` read inside the attachment poll; the poll's bound is the setting. |
79
+ | src/cli/upgrade-runtime.ts:698:49 | `waitForIdle` | `600_000` | operational | keep: idle wait before the close | waitForIdle(binding, 600_000) before a terminal is closed is bounded by the source's preparation lease, a fixed ten minutes (daemon.ts armRecoveryLease): a longer wait expires the lease, a shorter one cuts the floor of a person-visible wait. |
80
+ | src/cli/upgrade-runtime.ts:955:23 | `sleep` | `1000` | operational | keep: polling slice | A poll or sleep slice inside a bounded wait (the bound is the setting); not a wait. |
81
+ | src/cli/upgrade-runtime.ts:973:151 | `timeoutMs` | `180_000` | operational | keep: global install timeout | `bun add -g` is a global effect with no project, so no project config can own it; and it is not a shorter-is-safe wait. |
82
+ | src/cli/upgrade.ts:111:7 | `MAX_RECOVERY_DELEGATIONS` | `256` | safety floor | keep: safety floor | Delegation count cap. |
83
+ | src/cli/upgrade.ts:565:105 | `idleTimeoutMs` | `600_000` | test seam | keep: test seam | `runRecovery`'s idleTimeoutMs default is the 600 s source-quiet wait, bounded by the source's ten-minute lease; the parameter is a test seam. |
84
+ | src/cli/upgrade.ts:751:43 | `deadline` | `30_000` | operational | convert: recovery.shutdown_wait_s (floor = 30 s) | Read from the project's own config at the start of the wait; unset is the old constant. |
85
+ | src/hub/control-client.ts:11:14 | `PROTOCOL` | `16` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
86
+ | src/hub/control-client.ts:21:17 | `backoff` | `250` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
87
+ | src/hub/control-client.ts:26:37 | `includes` | `1006` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
88
+ | src/hub/control-client.ts:30:26 | `Math.min` | `1000` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
89
+ | src/hub/control-client.ts:30:42 | `Math.min` | `2` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
90
+ | src/hub/control-client.ts:73:97 | `status.controlPort > 65535` | `65535` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
91
+ | src/hub/control-client.ts:113:62 | `timeoutMs` | `3000` | test seam | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
92
+ | src/hub/control-client.ts:170:53 | `timeoutMs` | `30_000` | test seam | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
93
+ | src/hub/lifecycle.ts:23:68 | `timeoutMs` | `3000` | test seam | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
94
+ | src/hub/lifecycle.ts:97:32 | `SHUTDOWN_DEADLINE_MS` | `15_000` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
95
+ | src/hub/lifecycle.ts:114:37 | `attempt < 100` | `100` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
96
+ | src/hub/lifecycle.ts:173:35 | `deadline` | `12_000` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
97
+ | src/hub/lifecycle.ts:178:23 | `Bun.sleep` | `100` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
98
+ | src/hub/lifecycle.ts:210:33 | `deadline` | `10_000` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
99
+ | src/hub/lifecycle.ts:217:21 | `Bun.sleep` | `100` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
100
+ | src/hub/manager.ts:17:7 | `MANAGER_OWNER_DB_BUSY_TIMEOUT_MS` | `5000` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
101
+ | src/hub/manager.ts:30:7 | `CONTROL_TIMEOUT` | `3000` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
102
+ | src/hub/manager.ts:34:87 | `error.message.slice` | `300` | safety floor | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
103
+ | src/hub/manager.ts:72:76 | `status.port > 65535` | `65535` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
104
+ | src/hub/manager.ts:161:25 | `nominalMs` | `10_000` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
105
+ | src/hub/manager.ts:180:78 | `maxRequestBodySize` | `1024` | safety floor | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
106
+ | src/hub/manager.ts:207:33 | `options.orphanWatchMs ?? 10_000` | `10_000` | test seam | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
107
+ | src/hub/manager.ts:251:33 | `deadline` | `8000` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
108
+ | src/hub/manager.ts:262:54 | `Bun.sleep` | `100` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
109
+ | src/hub/manager.ts:274:73 | `Bun.sleep` | `25` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
110
+ | src/hub/manager.ts:291:21 | `Bun.sleep` | `25` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
111
+ | src/hub/ports.ts:6:14 | `BASE_PORT` | `4600` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
112
+ | src/hub/ports.ts:7:14 | `STRIDE` | `10` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
113
+ | src/hub/ports.ts:9:14 | `CONTROL` | `0` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
114
+ | src/hub/ports.ts:10:14 | `CODEX_APP` | `1` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
115
+ | src/hub/ports.ts:11:14 | `CODEX_PROXY` | `2` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
116
+ | src/hub/ports.ts:13:14 | `SWITCHYARD` | `3` | contract | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
117
+ | src/hub/ports.ts:27:22 | `attempt` | `0` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
118
+ | src/hub/ports.ts:30:76 | `attempt >= 500` | `500` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
119
+ | src/hub/ports.ts:31:57 | `Atomics.wait` | `4` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
120
+ | src/hub/ports.ts:31:62 | `Atomics.wait` | `0` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
121
+ | src/hub/ports.ts:31:65 | `Atomics.wait` | `0` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
122
+ | src/hub/ports.ts:31:68 | `Atomics.wait` | `10` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
123
+ | src/hub/recovery-continuity.ts:9:14 | `RECOVERY_CONTINUITY_BUSY_TIMEOUT_MS` | `3000` | operational | defer (H4 follow-up): SQLite busy timeouts | Outside this task's paths: database busy timeouts that protect receipts; a safety bound before a tunable. |
124
+ | src/hub/recovery-continuity.ts:10:7 | `MAX_BOOKMARK_BYTES` | `16 * 1024` | safety floor | defer (H4 follow-up): SQLite busy timeouts | Outside this task's paths: database busy timeouts that protect receipts; a safety bound before a tunable. |
125
+ | src/hub/recovery-error.ts:30:82 | `(stack ?? ).split(\n).filter(line => /^\s*at /.test(line)).s` | `8` | safety floor | keep: safety floor | A size or count cap that protects data or the host; never loosenable here. |
126
+ | src/hub/recovery-error.ts:30:128 | `sanitize(line.trim()).slice` | `400` | safety floor | keep: safety floor | A size or count cap that protects data or the host; never loosenable here. |
127
+ | src/hub/recovery-store.ts:8:7 | `RUNNER_DB_BUSY_TIMEOUT_MS` | `3000` | operational | defer (H4 follow-up): SQLite busy timeouts | Outside this task's paths: database busy timeouts that protect receipts; a safety bound before a tunable. |
128
+ | src/hub/recovery-store.ts:152:79 | `waitMs` | `5000` | test seam | defer (H4 follow-up): SQLite busy timeouts | Outside this task's paths: database busy timeouts that protect receipts; a safety bound before a tunable. |
129
+ | src/hub/recovery-store.ts:159:56 | `setTimeout` | `100` | operational | defer (H4 follow-up): SQLite busy timeouts | Outside this task's paths: database busy timeouts that protect receipts; a safety bound before a tunable. |
130
+ | src/hub/restart.ts:11:14 | `RESTART_SCHEMA_VERSION` | `1` | contract | keep: contract | A format, protocol or arithmetic constant. |
131
+ | src/hub/restart.ts:74:74 | `e.id.length <= 256` | `256` | contract | keep: contract | A format, protocol or arithmetic constant. |
132
+ | src/hub/restart.ts:74:152 | `e.trace.length <= 256` | `256` | contract | keep: contract | A format, protocol or arithmetic constant. |
133
+ | src/hub/snapshots.ts:36:23 | `Math.max` | `1` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
134
+ | src/hub/snapshots.ts:41:7 | `SNAPSHOT_TIMEOUT_MS` | `10000` | operational | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
135
+ | src/hub/snapshots.ts:55:21 | `++entries > 20000` | `20000` | safety floor | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
136
+ | src/hub/snapshots.ts:55:38 | `depth > 32` | `32` | safety floor | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
137
+ | src/hub/snapshots.ts:182:7 | `HEAD_LOG_TAIL_BYTES` | `4096` | safety floor | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
138
+ | src/hub/snapshots.ts:183:7 | `HEAD_LOG_MAX_APPEND_BYTES` | `128 * 1024` | safety floor | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
139
+ | src/hub/snapshots.ts:184:7 | `HEAD_LOG_MAX_MOVES` | `64` | safety floor | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
140
+ | src/hub/snapshots.ts:239:88 | `named.size > 4096` | `4096` | safety floor | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |
141
+ | src/hub/snapshots.ts:619:31 | `limit` | `20` | test seam | defer (H4 follow-up): hub process lifecycle | Outside this task's paths: daemon shutdown, manager, port and control-client timing. |