Repository navigation
Conversation
|
Macroscope has since reviewed this pull request. An earlier review was skipped by a cost limit; a review has now completed, so that notice no longer applies. |
ApprovabilityVerdict: Needs Human Approval Macroscope's review found this PR requires human approval — This PR changes production approval and question lifecycle handling across the Pi, OpenCode, and Muse integrations, including response persistence, native acknowledgement cleanup, session status, and multi-stage approval state. The changes are substantial and concurrency-sensitive despite the accompanying test coverage. You can add or adjust custom eligibility rules. Learn more. |
f6ea0da to
cc46a47
Compare
|
Review requested
Logged so this PR shows when a maintainer was asked to review it. |
24284ff to
3884505
Compare
…ions PluginNotifications reaches the plugin supervisor through its module namespace and builds each PluginHostCallError where the call fails, without a forwarding helper or a shared stopped error. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A plugin with the `transforms` capability and a declared `transforms.enrich` can now answer `t3.transform.enrich` with short titled context. Before the provider session opens, the turn-start effect records one `plugin_context` item per plugin (at most 4, plus one record counting any plugins not called), calls the plugins outside the thread lock, saves their answers or why none was added, and sends the provider the kept context ahead of the user's text. Only turns the history pager counts are enriched; steering, `/` commands and wakes are not. A retried start reuses the saved records and never calls a plugin twice; Stop closes a running record. Failures fail open. The records are existing `dynamic_tool` items, so every client decodes them. The web/desktop inspector and the mobile expanded detail show "From <plugin>" with the context, or "Not added" with the reason, instead of the input. The capability's consent line now says the plugin reads your messages. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A plugin that declares the approvals capability is offered the command, file and permission requests agents send, once the request's approval card is shown, and can approve or decline that one request through the orchestrator's ordinary respond path; the first recorded answer wins and anything else leaves the request with the user. Approval rows answered by a plugin are titled with the plugin, and expanding them shows its reason on web, desktop and mobile. Pi and OpenCode v1 no longer overwrite T3's recorded answer when they acknowledge it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
400b930 to
0442612
Compare
This PR now carries only the provider acknowledgement fix. The plugin system it was stacked on (pingdotgg#16047-pingdotgg#16063) and the plugin approval feature wait on Ideas discussion #6837; the fix applies to ordinary approval answers on main and does not need them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…confirm it When a user answers an approval request, the orchestrator records the request as resolved with the decision, and marks the request's card and node cancelled for a decline. Only then does it hand the answer to the provider. Pi and OpenCode v1 then re-emitted the request record they had cached when it was asked, with no decision and the card completed, and Muse marked the card completed even for a decline. Provider events replace the projected records, so the thread lost the decision and showed a declined approval as completed. Pi no longer reports a request it just answered. OpenCode v1 remembers the requests T3 answered and, when OpenCode confirms one or its turn ends, only stops tracking it instead of reporting it again. Muse settles a declined or cancelled request's card and node as cancelled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…l answer when Pi, OpenCode or Muse confirm it Preserve the scoped contribution against upstream 70d60e0. Focused checks and read-only integration review recorded in the PR. GPT-6.1 Sol (high), Codex harness through T3 Code.
Dismissing prior approval to re-evaluate aef0c25
|
Taking over this one. I’ll rebuild the approval acknowledgement fix on current main, keep the replay coverage focused, and verify that Pi, OpenCode and Muse preserve the recorded answer and decline status before pushing to this branch. |
Dismissing prior approval to re-evaluate c3df197
Pi, OpenCode and Muse can replace a user's recorded approval decision or question answer with an older cached request when the provider acknowledges it or the turn ends. Muse also marks declined approvals completed, and its intermediate approval updates can reopen an answered request.
Keep the orchestrator's persisted response authoritative. Pi suppresses its cached replacement after successful delivery. OpenCode retains the submitted response before delivery and uses native settlement to clean up tracking. Muse distinguishes T3 answers from automatic or native decisions: acknowledgements, same-requirement updates and cleanup preserve T3's answer and question card; a genuinely new approval requirement gets its own request identity after the decision acknowledgement. Terminal acknowledgements suppress trailing updates for stages that Muse already closed. Unanswered requests and automatic child approvals retain their event producers. Declines keep cancelled cards and nodes.
Rebuilt from @saphid's work in #16064, preserving the contributor's commits and merging main. Removed the OpenCode answering flag and separate cleanup helper. Consolidated five new replay cases into three integrated cases, strengthened three existing fixtures, and updated adapter tests to await the next native milestone rather than a redundant replacement event.
Verification at c3df197c75:
stageResolvedupdate reopens an answered request.Before/after replay output and current-head checks.
Verification is headless: native-protocol replay through real orchestration, persisted projections and the effect worker. No real Pi/OpenCode/Muse account, browser, Electron, macOS, Windows, iOS or Android verification was run. Multi-stage checks cover updates received while the decision is in flight. Updates after acknowledgement, already-terminal updates and late acknowledgements after delivery errors are source-reviewed. No live client or remote/tunnel claim is made.
Human follow-up: accept and decline Pi/OpenCode approvals, answer questions, and decline a Muse approval; check that the answer and card status survive provider acknowledgement and reconnect. For Muse, also accept for the session and check that an intermediate stage update preserves that choice while a genuinely new requirement prompts separately. Pi's pre-existing expiry race between response commit and adapter delivery remains outside this fix. Retaining a user's answer after delivery errors records their intent; it does not prove provider receipt.
CI handoff: execution checks and correctness review pass. Macroscope Approvability is neutral, explicitly requesting human approval for concurrent provider lifecycle changes. This remains an unmerged human-review gate.
Tests: GPT-6 Astra; implementation: GPT-6.1 Sol; independent reviews: Claude Opus 5.5 and GPT-6 Sol. Codex and Claude harnesses in T3 Code.