C09.2: administer durable task ownership and mailbox - #23
Conversation
Assisted-by: OpenAI:gpt-6-astra [Codex]
Assisted-by: OpenAI:gpt-6-astra [Codex]
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. |
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 93207a98a8
ℹ️ 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".
| } catch (cause) { | ||
| setError(cause instanceof Error ? cause.message : String(cause)) |
There was a problem hiding this comment.
Refresh stale revisions before offering retry
When another window advances the team or task revision, UAR returns a conflict, but this catch only displays the error and retains the same revisions and command ID. Because the main adapter also flattens the 409 into an INTERNAL IPC error, clicking the advertised retry repeats the stale request until the operator manually refreshes the entire panel; preserve a conflict code and refresh the team before enabling retry.
Useful? React with 👍 / 👎.
| if (action === 'claim') await ipcApi.request('prometheus.uar.teams.claim_task', input) | ||
| else if (action === 'reassign') await ipcApi.request('prometheus.uar.teams.reassign_task', input) | ||
| else await ipcApi.request('prometheus.uar.teams.assign_reviewer', input) |
There was a problem hiding this comment.
Apply the mutation response before declaring success
Each mutation returns the updated UarTeamInstance, but these calls discard it and depend on a second snapshot request. If the POST commits and that GET fails, refresh() swallows the failure, so the row still shows stale revisions alongside a success message and the next action conflicts; update the selected team from the mutation response before using refresh for reconciliation.
Useful? React with 👍 / 👎.
| }) | ||
| sendIntent.current = undefined | ||
| setContent('') | ||
| setStatus(tr('messageStatus.accepted')) |
There was a problem hiding this comment.
Derive the sent-message status from the receipt
After a send, this hardcodes Accepted instead of using the returned UarTeamMailboxMessage.status, whose contract also permits delivered and processed. An already-advanced receipt—or a failed follow-up refresh—therefore leaves the UI reporting a stage that did not come from UAR; retain the returned message and render its actual status.
Useful? React with 👍 / 👎.
|
|
||
| - [x] 1. Add typed task and mailbox projections, fixed scoped adapter methods and IPC contracts. | ||
| - [x] 2. Add Teams task ownership, reviewer and mailbox controls with explicit state feedback and all locale strings. | ||
| - [x] 3. Package the exact matching UAR source and complete the installed Mac ARM64 build/function boundary. |
There was a problem hiding this comment.
Leave the installed boundary unchecked until it runs
This marks the packaged Mac ARM64 build and installed functional boundary complete, but the same commit states that the boundary is still being finalized, merge/publication must wait, and no build or test was launched. Keeping the task checked records false release-readiness evidence; leave it open until the packaged assignment, fencing, and mailbox flow has actually been exercised.
AGENTS.md reference: AGENTS.md:L57-L58
Useful? React with 👍 / 👎.
| <SettingDescription>{tr('mailboxDescription')}</SettingDescription> | ||
| </div> | ||
| <Button variant="outline" size="sm" disabled={!available || loading || sending} onClick={() => void refresh()}> | ||
| <RefreshCw size={14} className={loading ? 'animate-spin' : undefined} aria-hidden="true" /> |
There was a problem hiding this comment.
Honor reduced motion for the refresh spinner
When the OS requests reduced motion, this new loading indicator still spins indefinitely because animate-spin is unconditional. Use the repository's motion-safe:animate-spin or motion-reduce:animate-none pattern so refreshing the mailbox respects the user's accessibility preference.
AGENTS.md reference: AGENTS.md:L134-L136
Useful? React with 👍 / 👎.
| dependsOn: string[] | ||
| } | ||
|
|
||
| export interface UarTeamTaskCommandInput { |
There was a problem hiding this comment.
Keep main-only command DTOs out of shared
Repository-wide consumer search shows this command type, UarTeamTaskStateInput, and UarTeamMailboxSendInput are imported only by the main-process adapter, while renderer request types are independently inferred from the IPC Zod schemas. These declarations therefore create a second, drift-prone contract rather than a type actually shared by both processes; keep them in main or derive them from the owning IPC schema.
AGENTS.md reference: AGENTS.md:L148-L148
Useful? React with 👍 / 👎.
After C09.1, the installed Teams page could plan tasks but could not assign members or inspect team messages. This change adds workspace-scoped claim, reassignment, reviewer, and inbox actions through the fixed authenticated UAR adapter and typed IPC. The page shows owner, ownership epoch, reviewer, and accepted/delivered/processed message status, with controls translated across shipped locales.
The renderer cannot select a UAR URL or own task state.
trigger-turnrecords intent only; C09.3 still controls runtime admission and execution.Stacked on The Boss #22 (C09.1). Requires UAR C09.2 PR CherryHQ#313 at source
d3d768636b46bd7b7cea29fba4987aa1754f8352.Validation
The current packaged Mac ARM64 cadence boundary is being finalized. Hold merge and publication until its installed workflow and source/artifact receipts are confirmed. No build or test was launched during PR preparation.