Repository navigation
app: questions settle everywhere, Hold holds, and late model lists are announced - #2015
Merged
Merged
Conversation
AbirAbbas
force-pushed
the
fix/app-questions-settle
branch
from
October 28, 2026 19:51
7def296 to
4fb58f9
Compare
Making the crew closed the proposal's ask, but its Inbox item was resolved only through a receipt id, and the formation receipt names the crew, so the item stayed waiting (and a later Inbox read brought it back). Resolve the proposal's item explicitly on create, once; the chat keeps its single formation fact. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
inbox.answer returned an undo deadline before checking the answer, and a failure after the hold was dropped, so the desktop kept "Answering...". Validate what the owning handler will check (open question, offered option, required text, proposals, budget and fuel amounts, landing verdicts, service health) before the hold, and refuse at once. Day-cap raises the limit itself refuses are still checked only when sent. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
asks.hold answered success for a clocked model question but only held task proposals, so the clock still picked the suggestion. Use the question holder the terminal uses, and restate a changed question under its own id while identical replays stay silent. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
models.list answers within about three seconds with what it has; when a slow provider listing finished later, nothing told the desktop. Emit one models.changed per completion from a lifecycle-owned subscription, sent outside the backend lock and stopped on close. No polling and no extra wait in models.list. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The new Inbox section said a landed task and a standing order need an offered verdict; the manual keeps that word for the harness. Say one of the offered choices instead. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The section on models.changed described a protocol detail no person sees, and its wording pulled "why does this model start with ~" away from the lanes page. The protocol document already covers the event. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
AbirAbbas
force-pushed
the
fix/app-questions-settle
branch
from
October 28, 2026 20:37
e8f8031 to
c63331b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was wrong (app mode)
Each of these shows up on the desktop as a question that stays stuck or comes back:
inbox.answerreturned an undo deadline before checking the answer, and a failure after the hold was dropped. An unoffered option or an already-closed question left the desktop on "Answering…".asks.holdanswered success for a clocked model question but only held task proposals, so the clock still picked the suggestion.models.listanswers within about 3 s with what it has. When a slow provider listing finished later, nothing told the desktop, so its pickers missed those models.What changes
HoldQuestion). A changed question is restated under its own id; identical replays stay silent, batch facts included.models.changedonce per listing completion. It's sent outside the backend lock and stopped on close; no polling, no extra wait inmodels.list. The desktop listens in Agent-Field/codeaf-desk#57.The terminal's behaviour is unchanged.
Manual verification on a real engine
Linux, isolated homes, a loopback OpenAI-compatible stub, this branch against app/v3:
inbox.list waitinginbox.resolved, Done +1inbox.answerwith an option the question doesn't offerundo_until+5 s, then silence; still waitingbad_params … offers no option "answer"at once, no holdinbox.answerto a closed questionundo_until+5 s, then silencenot_found … is not openat once, no holdask.closed by=elsewhereat +1.9 s/modelsheld 4.5 smodels.changed~1 ms after completion; next list has 2 rowsChecks
gofmt,go vet ./cmd/codeaf ./internal/appwire, and the named tests incmd/codeaf(crew proposals, Inbox validation and hold, Hold for model and task questions, late model notices, close cancelling notices) andinternal/appwire, all passing on app/v3 36dba7c. CI (ci.yml,ci-full.yml) has been dispatched on this branch; it is judged against an app/v3 Full baseline.Known limit (not a regression; before this change nothing was checked before the hold): a day-cap "Raise for today" whose amount is not above the current limit, or any raise when
CODEAF_DAILY_BUDGETpins the limit, still passes preflight and fails only when sent. The desktop's held answer is cleared on its next engine-restart reconciliation.Overlaps:
app.goquestion restatement and the Inbox/proposal code also appear in draft #1933 (appconvo.go,appcrewmembers.go); whichever lands second rebases. Merge after #2009 like the other app.go lanes.🤖 Generated with Claude Code