Repository navigation
Step through desktop question cards and retire them on a terminal answer - #770
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
PR Summary by QodoStep through desktop questions and withdraw settled requests
AI Description
Diagram
High-Level Assessment
Files changed (17)
|
Code Review by Qodo
1.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ff35dad584
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| async Task WithdrawAsync(PendingPermissionRequest request) { | ||
| try { | ||
| var outcome = await _permissions.WithdrawAsync(request, _lifetime.Token); | ||
| if (outcome.Kind == PermissionResolveKind.TransportFailure) _withdrawing.Remove(request.RequestId); |
There was a problem hiding this comment.
Reschedule reconciliation after a failed withdrawal
When the one-shot resolve socket times out or returns an unexpected reply while the long-lived permission subscription remains healthy, this only removes the request ID from _withdrawing; it does not call or schedule Reconcile. Empty transcript polls also return before reconciliation, so if the result and the session's final output arrived in the same batch, the stale card remains indefinitely unless an unrelated permission or transcript event occurs. Trigger a bounded retry/reconciliation after clearing the guard so transport failures actually reopen the withdrawal.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 21e29fc. A failed send reopens the request and retries on its own after a bounded doubling backoff (2s, 4s, 8s) instead of waiting for an unrelated permission or transcript event; past the cap, the next resubscribe or reconcile tries again. The guard and the failure count are cleared when the request leaves the cache. Covered by two ChatTabViewModel tests: one drives a single failed withdraw through the backoff with no other event, the other walks all retries to the cap and then shows a later reconcile still retrying.
…#769) Option chrome lives in class styles only: a local BorderBrush on the button outranks the selected style and leaves it inert. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…lt (#769) The plugin registers no PostToolUse hook and a terminal answer leaves the PermissionRequest hook parked, so the transcript's tool_result is the only signal the daemon can be given. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The resolve rides a one-shot socket that can fail while the subscription stays healthy, and an empty transcript poll never reconciles. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
21e29fc to
0522db7
Compare
Closes #769 — AI-2497
What & why
The NEEDS YOU question card listed every question of a series at once, a pick showed no selected state, the text was small and dim, and a question answered in the terminal tab stayed on screen until the agent exited. The card walks a series one question at a time with step chips and a Review step that submits, option chrome lives in class styles so the selected state paints, and the Chat tab withdraws a pending request through a
withdrawdecision on the existing resolve frame once the transcript carries the tool's result — the only completion signal there is, since the plugin registers noPostToolUsehook.Where to look
The daemon answers a withdrawn hook with a deny, never an allow: the tool already ran, so an allow could only apply to a later call. An older daemon rejects
withdraw, and the app concludes the entry locally on that ack, so the card still goes.Verification
Capacitor.App.Tests.Unitfull suite: 1337 passed, 0 failed.Permission*andLocalPermissionBridge*classes: 104 passed; CorePermission*classes: 17 passed.dotnet build src/Capacitor.App --no-incremental: 0 warnings.dotnet publish src/Capacitor.Cli -c Release: no IL2026/IL3050.