4.3 KiB
4.3 KiB
id, title, status, wave, depends_on, plan, spec
| id | title | status | wave | depends_on | plan | spec | |
|---|---|---|---|---|---|---|---|
| 12i-shared-task-indicator-hover-summary | Reuse the native pull-request summary from registered task indicators | completed | 3i |
|
plan.md | ../../specs/integrations/requirements/bitbucket-plugin.md |
Task 12i: Reuse the Native Pull-Request Summary from Registered Task Indicators
Root cause
PRTaskIcon renders GitHub's structured status summary, while
RegisteredChangeRequestTaskIcon independently renders only the association count as
tooltip text. The registered-provider path never subscribes to or lazily refreshes the
provider's existing task review snapshot, so it cannot supply title/review/CI detail.
Mobile design contract
- Desktop task switcher/Kanban/rich-list icons disclose the shared structured summary on mouse hover and keyboard focus.
- The nearest mobile exemplar is the existing registered topbar/composer status drawer and mobile Review navigation. Those touch paths already expose the same normalized review data and remain the mobile entry point; the sidebar hover affordance is not mounted as a phone-only interaction.
- Shared provider state and summary derivation remain viewport-neutral. No new scroll owner, safe-area surface, or touch-only control is introduced.
Owned paths
apps/web/components/{github,integrations}/**shared task-summary presentation, registered task icon, and focused testsapps/web/e2e/tests/plugins/**desktop hover contract and existing mobile parity pathdocs/{specs,plans,public}/**provider contract documentation
TDD and implementation
- RED: prove a registered linked task's hover/focus tooltip lacks the PR number, title,
review, and CI rows even when its provider publishes
ReviewItemSummary.taskStatus. - Extract/reuse the exact GitHub task-summary renderer as host-owned, provider-neutral presentation. Map normalized registered review status into that renderer.
- Subscribe to task review snapshots without refreshing every task row. Refresh only when the icon opens, using the existing deduplicated provider refresh lease.
- Preserve association-only initial rendering, registry unload cleanup, keyboard focus/Escape behavior, and semantic status color/count.
- Prove the real packaged Bitbucket provider in the isolated seed; retain the existing mobile status/Review E2E as the touch path.
Acceptance
- Bitbucket's linked-task icon opens the same structured summary anatomy as GitHub.
- The first workspace association refresh remains one bounded request across task rows; task detail is not fetched until hover/focus or another active review surface needs it.
- Multiple linked PRs render separate summary entries; missing detail degrades to the existing accessible linked-count label while loading.
- Provider unload removes the icon and cancels in-flight work.
- Focused frontend tests, typecheck/lint, rendered desktop verification, existing mobile
parity coverage, and
git diff --checkpass.
Risks
- Mount-time use of the general review hook would reintroduce N-per-task provider calls; use subscriptions plus open-time refresh instead.
- A hover tooltip has no touch equivalent; the existing mobile Status/Review path must remain discoverable and tested.
Completion evidence
- Focused Vitest: 4 files / 16 tests passed.
- Web typecheck and full ESLint passed.
- Packaged Bitbucket plugin E2E proved association discovery stays detail-lazy until hover, then renders PR #42, title, Approved review, and Passed CI through the shared host summary.
- Mobile plugin contract E2E passed on
mobile-chrome, preserving the touch Review path. - The isolated seed rendered the correctly embedded production bundle and the same
structured summary;
apps/web/.pr-assets/bitbucket-sidebar-pr-summary.pngrecords it. - Follow-up manual acceptance found the registered glyph remained hard-coded muted. Focused regression coverage now proves normalized provider detail drives the same host-owned semantic status colors as first-party pull requests; the muted association- only fallback remains until lazy detail arrives.
- The packaged-provider desktop E2E now asserts the resolved semantic color, and the public plugin-authoring reference maps every code-host hook to its host-owned result with eight focused screenshots from an isolated packaged-plugin run.