Repository navigation
Commit 79deeec
* Check the planning agent at startup and before planning requests (#164)
PlanningAgent.probe runs one planning invocation in planning's worker and
profile, asking for the schema's own answer. PlanningCheck starts it when the
server starts and again when the vendor in Settings changes; productionPlanning
waits for it in `describe`, before the issue is read or anything is recorded. A
failed check refuses the request with "Planning is unavailable: <reason>" for
a minute, after which the next request checks again. Shutdown cancels a running
check before it closes the worker.
Closes #164
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Give the browser stand-in a passing check; test the check against the vendor (#164)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Start the check at once, bound the wait, recheck before the start (#164)
Review round 1: the probe starts synchronously again (a deferred start broke
three tests and let close wait out its cap); the check gets a real request's
budget, since the first job may build the image, while a request waits for it
at most 30 s; the request's validate refuses a vendor chosen during the issue
read until its check passed; the refusal no longer advises a retry that cannot
help; tests cover close waiting, the close cap, the wait and a wrong answer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Start no check inside the Store's transaction; cancel replaced checks (#164)
Review round 2: assertPassed, which the server calls inside its recorded
action, refuses and starts a needed check on the next turn, so no worker,
ledger or owner-token write runs inside the transaction; a check another
vendor's replaces is cancelled; one deadline bounds a request's whole wait;
the stub answers only the check's own prompt and schema; tests for a probe
that throws and a replaced check.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Test the stop after close and the single wait deadline; refusal wording (#164)
Review round 3: tests show no check starts after close and one deadline bounds
a wait across a vendor change; the deferred check reads the vendor again; the
refusal ends its reason with a period and says a new agent is checked at once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Put the check's reason last and whole; keep waiting past a replaced check (#164)
Review round 4: a reason ending with a command is no longer followed by text;
a request whose check was replaced while the vendor changed and changed back
waits for the current check; the provider checks again as it invokes; the
deadline test has margins a busy machine keeps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Promise only the recheck that happens; wording and test margins (#164)
Review round 5.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Move a waiting request to a newer check at once; deferred check never throws (#164)
Review round 6: a request waiting on a replaced check moves to the current one
without waiting for the old one to stop; the deferred check reads the vendor
inside its try; the refusal says 'Retry shortly' and names the configured
recheck window; wider timing margins; the vendor test checks the leftovers
record is gone.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Add a live Claude probe of the planning check; detach waits; wording (#164)
Review round 7: the planning check against the real Claude service runs as a
live probe in the Live probes workflow; a request no longer stays attached to
the check after it settles; the still-checking refusal says the first check
can take minutes; the shutdown waits are documented; wider timing margins.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Say when planning recovery runs; no listener warning for many waiters (#164)
Review round 8: docs and comments say the planning check at startup is the
process's first planning job; waiting requests no longer trigger Node's
listener-leak warning; the stopping refusal carries the unavailable prefix.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Reject from the wrapped invoke; say recovery needs a sign-in; wording (#164)
Review round 9: the wrapped provider rejects instead of throwing; docs and
comments say the startup check recovers only when it can sign in, holds the
lock until the process ends, and builds the image beside the runner's;
assertPassed after close says planning is stopping; wider timing margins.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Exact wording on the planning lock, the image build and the verdict (#164)
Review round 10.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* First job is always a check; exact shutdown wait; live probe checks Docker (#164)
Review round 11.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Bound each check; no recheck promise for a restart; exact claims (#164)
Review round 12: a check that has not settled within a real request's budget
and a minute fails and is cancelled, so the recheck applies; a reason that
holds until a restart gets no recheck promise; the invoke-time check is
described as defence in depth; startup failure exits only in the CLI; test
names and docs say what they show.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* A stopped wait is a refusal; no recheck promise without a sign-in; test the cancel (#164)
Review round 13: an aborted request or Store error while waiting for the
check is refused as such, never recorded as a failed GitHub read; a missing
token, read only at startup, gets the restart wording; tests show a timed-out
check is cancelled and stays failed if its probe answers late; durations
under a minute read correctly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Restart cases from codeboost's own text; close waits for timed-out probes (#164)
Review round 14: a database with hard links gets the restart wording; the
restart match ignores vendor output; close also waits, within its bound, for
a timed-out check's probe; a Store failure while waiting reads as a failed
check, not a stopped wait; shutdown cancels with the shutdown stop; the
timeout rejects before it aborts; a test pins the probe's repository, head,
prompt and schema; wider recheck margin; 'recheck window' in test names.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Restart wording for unsettled cleanup; stopping and Codex wording; limits stated (#164)
Review round 15: cleanup that did not settle gets the restart wording; after
close the refusal says planning is stopping; Codex is told to choose another
agent; the Store-error test now fails the read after a wait has begun; the
docs and comments state the shared-recovery, kept-pass and shutdown-deferral
limits; test names say what they show.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Restart wording only for codeboost's restart-only reasons; stop on abort first (#164)
Review round 16: a run whose cleanup did not settle keeps the recheck promise
(its storage is retried, and the next check reports a real restart need), so
the wording no longer depends on whether Claude printed anything; a request
already aborted starts no check; docs state when a passed check is kept, the
check's own unsettled cleanup, the lock after an abandoned worker and the
replayed refusal.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Codex wording names the next request; exact lock and wait wording (#164)
Review round 17.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Exact check answer, repeated keys refused; test names and real cleanup text (#164)
Review round 18: the check passes only on {"ok": true} written once; the
cleanup-wording test uses cleanupFailed's real shape; test names say 'still
checking' and 'recheck window'; the docs list the Store-error replay limit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Cite follow-up #198 for the review-view state and server-side limits (#164)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* JSON whitespace only in the check answer; exact wording and stub note (#164)
Review round 19 nits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Say when a changed agent is being checked; exact recovery and shutdown docs (#164)
Review round 20: assertPassed's refusal says the chosen agent changed and is
being checked; docs say a first job whose recovery fails leaves recovery to
the next, that shutdown cancels the check after the server's grace, and how a
check before the runner's setup fails on a task with runner commits (kept as
a recheck, since the runner's setup sets the repository later).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Restart wording says fix first; shutdown timing; drop a dead flag (#164)
Review round 21: refusals for restart-only reasons say codeboost must be
restarted after the cause is fixed; the still-checking refusal no longer claims
every slow check is the first; the doc says shutdown cancels a check once
planning requests settle or after the grace; the replaced flag, always implied
by a changed current check, is gone; a test uses AgentWorker's real text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Restart wording fits every restart-only reason; comment fixes (#164)
Review round 22: a restart-only refusal says only a restart helps and to fix
the cause first if the reason names one; the unreachable still-running branch
is gone; the check timeout's doc says no request waits that long.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Restart-only reasons tested from their sources; a cleared agent ends a wait (#164)
Review round 23: the restart-wording tests build each reason with the code that
gives it (abandonedWorkerText is exported for that); a request whose wait ran
out goes on when Settings cleared the agent meanwhile; a Store error is labelled
a stopped wait only when it is the request's own abort; the null-to-Claude path
is the one tested for a vendor chosen during the issue read; the abort signal's
listener limit, which Node 26 never warns about, is no longer raised; the
suggestion-cancel row names the check that fails before the worker.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Comment fixes; drop an abort check that cannot fire (#164)
Review round 24: the request's signal is checked at the top of each loop with
no await before the race, so the second check is gone; admit's doc covers no
vendor chosen; the refusal prefix's doc names its refusals as examples; the
recheck window's wording reads one way.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Codex's stand-in check fails at once, as the real one does (#164)
Review round 25: the tests that switch to Codex give it the probe answer
PlanningAgent.probe gives (CODEX_PLANNING_REFUSED) and expect its refusal; a
doc line is rewrapped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Reasons in the check's tests come from the code that gives them (#164)
Review round 26: the vendor-output, unsettled-cleanup, Codex and multi-line
reasons are built by planningOutput, PLANNING_FEATURE.cleanupFailed,
CODEX_PLANNING_REFUSED and assertClear's wording; web/planning.ts says when the
check starts with no vendor chosen; a comment names the recheck window.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Real sign-in and Codex reasons in the check's tests; doc and layout (#164)
Review round 27: the sign-in refusals use planningOutput's own text and the
vendor-change test CODEX_PLANNING_REFUSED; checked() takes only the vendors
Settings accept; the suggestion-cancel row gives the runner-repository case as
one example of a check failing before recovery; comments rewrapped;
abandonedWorkerText moved below the module's re-export.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Test the wrapped invoke forwards after a pass; wording (#164)
Review round 28: the invoke test first shows a passed check forwards the call
as it is; the refusal for a changed vendor says codeboost checks it next, which
holds even if the deferred check cannot start; 'records a planning request' in
the docs; the browser spec's stand-in says no vendor is chosen there; one
import from runner/planning.ts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Pin the check's default wait, timeout and close bound (#164)
Review round 29: one fake-clock test through productionPlanning, with nothing
overridden, shows a request waits 30 s, a check fails after the planning budget
and a minute, and close waits 20 s; it fails if any of them changes. The
refusal comment notes the Store's 4,000-character record.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Admit nothing after close, even under a passed check (#164)
Review round 30: #check and assertPassed test for close before the covering
check, so a request, its start and the wrapped invoke are refused as stopping
once planning closed; a test shows it. The defaults test's close step names what
close waits for.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Admit nothing after close with no agent chosen either (#164)
Review round 31: admit and assertPassed test for close before they read the
vendor; the after-close test covers no agent chosen too. The PR body records
the live probe run on the head with #163's budget.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* A request waiting at close is refused as stopping; close tests (#164)
Review round 32: #verdict tests for close before a pass, so a check that
passes after close admits nothing; tests cover a check deferred before close,
start after close, and a request waiting at close whose check then passes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Close wakes a waiting request at once; docs and a still-running test (#164)
Review round 33: a request waiting at close is refused as stopping at once,
even when its check's probe never stops; start's doc says it throws after close;
web/planning.ts says the check gates a request when a vendor is chosen; a test
covers validate meeting a check still running; a comment notes what a worker
that never ends a job leaves for close.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Rewrap start's doc (#164)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Comment: the AbortSignal also holds one listener per waiting request (#164)
Review round 34.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Rewrap a doc paragraph; drop a repeated issue tag from a test title (#164)
Review round 35.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent e46cb68 commit 79deeec
16 files changed
Lines changed: 1003 additions & 44 deletions
File tree
- .github/workflows
- docs/implementation
- runner
- scripts
- test
- browser
- fixtures
- web
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | | - | |
116 | | - | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
117 | 118 | | |
118 | 119 | | |
119 | 120 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
82 | 82 | | |
83 | 83 | | |
84 | 84 | | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
85 | 138 | | |
86 | 139 | | |
87 | 140 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
361 | 361 | | |
362 | 362 | | |
363 | 363 | | |
364 | | - | |
| 364 | + | |
365 | 365 | | |
366 | 366 | | |
367 | 367 | | |
368 | 368 | | |
369 | 369 | | |
370 | 370 | | |
371 | | - | |
| 371 | + | |
372 | 372 | | |
373 | 373 | | |
374 | 374 | | |
| |||
0 commit comments