Files
kandev/docs/plans/bitbucket-plugin/task-12e-shared-task-status.md
T
2026-08-24 11:09:03 +00:00

68 lines
3.0 KiB
Markdown

---
id: "12e-shared-task-status"
title: "Render registered provider status in exact host task chrome"
status: completed
wave: 3e
depends_on: ["12d-host-native-task-link-parity"]
plan: "plan.md"
spec: "../../specs/integrations/requirements/bitbucket-plugin.md"
decision: "../../decisions/2026-08-06-plugin-code-host-dashboard-parity.md"
---
# Task 12e: Render registered provider status in exact host task chrome
## Intent
Make status presentation impossible for a code-host plugin to visually fork. Extend the
existing review-provider data contract and have Kandev mount the exact shared topbar and
composer CI surfaces for registered providers.
## Owned paths
- `apps/web/lib/plugins/{types,registry,host-api}.ts` and focused tests
- `apps/web/components/task/review-panel-provider.ts` and tests
- `apps/web/components/integrations/change-request-status-*.tsx` and tests
- `apps/web/components/github/{pr-topbar-button,pr-status-chip,pr-ci-popover}.tsx`
- `apps/web/components/task/{task-top-bar,passthrough-toolbar}.tsx`
- `apps/web/components/task/chat/chat-input-area.tsx`
- plugin API/authoring docs
## Implementation
1. Add an optional normalized `taskStatus` to `ReviewItemSummary`, preserving it through
registry validation without accepting provider-specific payloads.
2. Extract the GitHub topbar trigger, composer chip, and common CI popover/drawer body
into provider-neutral host components. Adapt GitHub to those components first.
3. Build one registry-backed status adapter from `useNormalizedTaskReviews`; refresh via
the provider's existing deduplicated lifecycle and background interval.
4. Mount it beside `PRTopbarButton`, beside `PRStatusChip`, and in passthrough status.
Avoid a new plugin visual slot or second provider poller.
5. Keep optional GitHub-only automation/merge callbacks in the shared anatomy without
requiring them from Bitbucket.
## TDD and acceptance
1. RED registry tests prove normalized status is currently discarded.
2. RED task-topbar, chat-status, and passthrough tests require registered-provider
topbar and composer entries, exact shared popover content, refresh routing, and unload.
3. GREEN implementation keeps all existing GitHub status tests unchanged or adapts only
their provider-neutral import names.
4. Run focused Vitest, web typecheck/lint, and desktop/mobile E2E assertions.
## Mobile contract
Touch uses the same bounded drawer as GitHub, one internal scroll owner, and controls at
least 44px tall. Desktop and mobile expose the same checks and open-Review capability.
## Risks
- Provider snapshots must remain stable for `useSyncExternalStore`.
- Background refresh must deduplicate topbar/composer consumers and abort on unload.
- Built-in GitHub behavior, automation, and multi-PR aggregation cannot regress.
## Completed verification (2026-08-06)
- Nine focused host suites passed (70 tests), plus web typecheck and lint.
- Desktop topbar and composer both rendered the shared `pr-topbar-popover-inner` anatomy.
- Touch emulation rendered the shared bounded CI drawer with no horizontal overflow.