Several rows of controls and status sit between the title and the outcome, while the requester and timing are in a sidebar card that ends up near the bottom on phones.
+page.svelte:104-107 shows the operation ID with a Copy button, a Back link and a Copy link button.
+page.svelte:109 shows "Live · Updates every 5 seconds" on every operation. The page polls every 5 seconds even after the operation finishes (+page.svelte:60), so a finished record always says Live.
+page.svelte:114 adds an "Operation outcome" label inside the outcome card.
Below 1000 px the context column stacks after the Activity log (+page.svelte:232). On a 390 px phone, the requester and times start about 2,550 px down a 3,200 px page.
Screenshots
From the synthetic UI preview. Progress records and a launch recipe were added to the disposable fixture database using the labels the worker records. "After" images are mockups made in an uncommitted copy.
Desktop: Before:
Desktop: After (mockup):
Phone: Before:
Phone: After (mockup):
Fix
Add one summary line under the title, e.g. "Requested by Maxis · 21:13 · took 1m 0s"
Show the freshness line only while the operation is active
Move the operation ID and copy buttons into a collapsed "Technical details" section, along with the agent command ID and related-work source IDs
Remove the "Operation outcome" label
Several rows of controls and status sit between the title and the outcome, while the requester and timing are in a sidebar card that ends up near the bottom on phones.
- `+page.svelte:104-107` shows the operation ID with a Copy button, a Back link and a Copy link button.
- `+page.svelte:109` shows "Live · Updates every 5 seconds" on every operation. The page polls every 5 seconds even after the operation finishes (`+page.svelte:60`), so a finished record always says Live.
- `+page.svelte:114` adds an "Operation outcome" label inside the outcome card.
- Below 1000 px the context column stacks after the Activity log (`+page.svelte:232`). On a 390 px phone, the requester and times start about 2,550 px down a 3,200 px page.
**Screenshots**
_From the synthetic UI preview. Progress records and a launch recipe were added to the disposable fixture database using the labels the worker records. "After" images are mockups made in an uncommitted copy._
Desktop: Before:

Desktop: After (mockup):

Phone: Before:

Phone: After (mockup):

**Fix**
- [x] Add one summary line under the title, e.g. "Requested by Maxis · 21:13 · took 1m 0s"
- [x] Show the freshness line only while the operation is active
- [x] Move the operation ID and copy buttons into a collapsed "Technical details" section, along with the agent command ID and related-work source IDs
- [x] Remove the "Operation outcome" label
Reviewed 56b4043b6e. All four fix items are done, so I'm closing this.
Checklist
Summary line under the title. It now reads "Requested by Maxis · Oct 9, 2026, 9:06:34 AM EDT · took 1m 0s" (+page.svelte:109), with the finish time in its tooltip.
Freshness only while active. The freshness line renders only for active operations (+page.svelte:117), and polling now runs only while the operation is active (+page.svelte:61). Finished records get a Retry button if an update fails.
Technical details. A collapsed section at the end of the sidebar now holds the operation ID, finish time, submission time, agent command ID, collection launch ID, source IDs and Copy link (+page.svelte:194-208). The command ID is gone from the host-agent step and the raw source ID from Related work, so each appears once.
"Operation outcome" label removed. The outcome card opens with the status badge (+page.svelte:124).
Review notes
Good extra: ui-patterns.md now documents the summary, Technical details and active-only polling, so other detail pages can follow it.
In the synthetic preview on a 390 px phone, the requester, start time and duration now sit directly under the title, and Technical details is a single closed row at the end.
The 3 related test files pass locally (233 tests), and npm run check reports 0 errors.
Minor and non-blocking: a failed watchdog restart can still change after it finishes. Its recovery can be released (recovery.ts:93-101) or handed to a rebuild (requests.ts:290-299). With polling stopped, the "Recovery capacity held" badge and the "View recovery operation" link only update on reload. Polling while progress.recovery.state is held would cover it.
Minor and non-blocking: the duration now shows twice, as "took 1m 0s" in the summary and "Recorded duration" in the outcome card (+page.svelte:152). The commit adds no tests for the new header, Technical details or the polling change.
Reviewed 56b4043b6e21663493c177c366e8f735cd03a437. All four fix items are done, so I'm closing this.
**Checklist**
- [x] **Summary line under the title.** It now reads "Requested by Maxis · Oct 9, 2026, 9:06:34 AM EDT · took 1m 0s" (`+page.svelte:109`), with the finish time in its tooltip.
- [x] **Freshness only while active.** The freshness line renders only for active operations (`+page.svelte:117`), and polling now runs only while the operation is active (`+page.svelte:61`). Finished records get a Retry button if an update fails.
- [x] **Technical details.** A collapsed section at the end of the sidebar now holds the operation ID, finish time, submission time, agent command ID, collection launch ID, source IDs and Copy link (`+page.svelte:194-208`). The command ID is gone from the host-agent step and the raw source ID from Related work, so each appears once.
- [x] **"Operation outcome" label removed.** The outcome card opens with the status badge (`+page.svelte:124`).
**Review notes**
- Good extra: `ui-patterns.md` now documents the summary, Technical details and active-only polling, so other detail pages can follow it.
- In the synthetic preview on a 390 px phone, the requester, start time and duration now sit directly under the title, and Technical details is a single closed row at the end.
- The 3 related test files pass locally (233 tests), and `npm run check` reports 0 errors.
- Minor and non-blocking: a failed watchdog restart can still change after it finishes. Its recovery can be released (`recovery.ts:93-101`) or handed to a rebuild (`requests.ts:290-299`). With polling stopped, the "Recovery capacity held" badge and the "View recovery operation" link only update on reload. Polling while `progress.recovery.state` is `held` would cover it.
- Minor and non-blocking: the duration now shows twice, as "took 1m 0s" in the summary and "Recorded duration" in the outcome card (`+page.svelte:152`). The commit adds no tests for the new header, Technical details or the polling change.
Reviewed ff589afe5e. This follow-up covers all three notes from my last review, so the issue stays closed.
Checklist
Held recovery stays current.provisioningNeedsRefresh (provisioning-presentation.ts:20) keeps the page polling for active operations, and for finished ones whose recovery is still held (+page.svelte:62). A release or a hand-off to a rebuild now appears without a reload, and the page isn't marked live while it waits.
Duration shown once. "Recorded duration" and "Total elapsed" are gone from the outcome card. The summary line shows "took …" or "… elapsed" (+page.svelte:113).
Tests.ui-provisioning-detail.test.ts covers the summary line, the closed Technical details, the duration rules, and the refresh policy for every state, including held recovery until it's released or transferred.
Review notes
The 5 affected test files pass locally (105 tests), the full suite passes (208 files, 2,625 tests), and npm run check reports 0 errors.
Reviewed ff589afe5e6ad916cc2421311f41f2cf22e59e1f. This follow-up covers all three notes from my last review, so the issue stays closed.
**Checklist**
- [x] **Held recovery stays current.** `provisioningNeedsRefresh` (`provisioning-presentation.ts:20`) keeps the page polling for active operations, and for finished ones whose recovery is still `held` (`+page.svelte:62`). A release or a hand-off to a rebuild now appears without a reload, and the page isn't marked live while it waits.
- [x] **Duration shown once.** "Recorded duration" and "Total elapsed" are gone from the outcome card. The summary line shows "took …" or "… elapsed" (`+page.svelte:113`).
- [x] **Tests.** `ui-provisioning-detail.test.ts` covers the summary line, the closed Technical details, the duration rules, and the refresh policy for every state, including held recovery until it's released or transferred.
**Review notes**
- The 5 affected test files pass locally (105 tests), the full suite passes (208 files, 2,625 tests), and `npm run check` reports 0 errors.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Several rows of controls and status sit between the title and the outcome, while the requester and timing are in a sidebar card that ends up near the bottom on phones.
+page.svelte:104-107shows the operation ID with a Copy button, a Back link and a Copy link button.+page.svelte:109shows "Live · Updates every 5 seconds" on every operation. The page polls every 5 seconds even after the operation finishes (+page.svelte:60), so a finished record always says Live.+page.svelte:114adds an "Operation outcome" label inside the outcome card.+page.svelte:232). On a 390 px phone, the requester and times start about 2,550 px down a 3,200 px page.Screenshots
From the synthetic UI preview. Progress records and a launch recipe were added to the disposable fixture database using the labels the worker records. "After" images are mockups made in an uncommitted copy.
Desktop: Before:

Desktop: After (mockup):

Phone: Before:

Phone: After (mockup):

Fix
Reviewed
56b4043b6e. All four fix items are done, so I'm closing this.Checklist
+page.svelte:109), with the finish time in its tooltip.+page.svelte:117), and polling now runs only while the operation is active (+page.svelte:61). Finished records get a Retry button if an update fails.+page.svelte:194-208). The command ID is gone from the host-agent step and the raw source ID from Related work, so each appears once.+page.svelte:124).Review notes
ui-patterns.mdnow documents the summary, Technical details and active-only polling, so other detail pages can follow it.npm run checkreports 0 errors.recovery.ts:93-101) or handed to a rebuild (requests.ts:290-299). With polling stopped, the "Recovery capacity held" badge and the "View recovery operation" link only update on reload. Polling whileprogress.recovery.stateisheldwould cover it.+page.svelte:152). The commit adds no tests for the new header, Technical details or the polling change.Reviewed
ff589afe5e. This follow-up covers all three notes from my last review, so the issue stays closed.Checklist
provisioningNeedsRefresh(provisioning-presentation.ts:20) keeps the page polling for active operations, and for finished ones whose recovery is stillheld(+page.svelte:62). A release or a hand-off to a rebuild now appears without a reload, and the page isn't marked live while it waits.+page.svelte:113).ui-provisioning-detail.test.tscovers the summary line, the closed Technical details, the duration rules, and the refresh policy for every state, including held recovery until it's released or transferred.Review notes
npm run checkreports 0 errors.