Skip to content

feat(tasks): per-member PR/CI rows + update-all for multi-repo tasks - #1

Closed
kaceper11 wants to merge 1 commit into
azure-devopsfrom
feat/task-delivery
Closed

kaceper11 wants to merge 1 commit into
azure-devopsfrom
feat/task-delivery

Conversation

@kaceper11

Copy link
Copy Markdown
Owner

Summary

Multi-repo tasks only polled PR state for the host worktree — member repos' PRs/MRs were invisible on both the Git tab and the board. This adds per-member PR/CI visibility and a one-shot "update all repos" action, stacked on azure-devops (simion#351).

Per-member PR/CI

  • New task_member_pr_status command: polls each non-host member's checkout by its live branch (git branch --show-current), so repo_root members track what's actually checked out rather than a frozen recorded branch. Same remote→provider resolution and status vocabulary as the host lookup (github/gitlab/azure).
  • pr.refresh() now fires host + member lookups together (Promise.allSettled) — a dead remote on one side can't freeze the other, and a failed member call keeps the last snapshot.
  • Git tab: member rows under the PR card — repo · branch, state pill, #42/!42 ref, CI chip, open-in-browser. Rendered for main-checkout tasks too (host card stays hidden there, so this is the only PR surface).
  • Board: card footer shows up to 3 member mini-rows + +N more; board mount seeds discovery.
  • Poll triggers respect main-checkout semantics: prRelevant = host PR, or member PRs for main-checkout multi-repo tasks; MemberPrRows runs its own tick only when PrCard isn't mounted.
  • Staleness guards: member snapshots are dropped if the composition changed mid-flight, and a setLookup landing mid-refresh isn't clobbered by the stale response.

Update all repos

  • New task_git_update_all(id, mode): pull / merge-base / rebase-base across host + every on-disk member, each on its own repo_base_branch, via the existing git_update_repo (fetch + autostash + conflict detection). Per-repo results; one failure never aborts the batch.
  • Branch-chip dropdown gains an "All repos" section; summary toasts distinguish updated / already-current / needs-attention, localized (en + zh-CN).
  • Shared on_disk_members helper is the single contract for "which members are real checkouts" — skips missing paths and any legacy record pointing at the host — used by task_git_status, member PR lookups, and update-all.

Test plan

  • tsc -b, cargo check, cargo test — clean
  • Vitest: 177 files / 2662 tests — incl. new coverage: single-member gating, main-checkout member polling, member removal mid-flight, setLookup races, host-fail/member-ok allSettled, prFocusEligible, Rust tests for on_disk_members + live-HEAD member lookups
  • Manual: member rows verified rendering in Git tab and on board card (injected mock + real repo pills on a multi-repo task)

Out of scope (deliberate)

  • Per-member PR creation (task_pr_create stays host-only), per-check CI details, remote picker, member PR background polling on unfocused tasks.

Generated with Devin

Multi-repo tasks polled PR state for the host worktree only; member
repos' PRs were invisible everywhere. Member lookups now ride inside
the existing pr.refresh() cadence (same triggers, allSettled so one
dead remote can't freeze the other leg), keyed by each member's live
branch in its own checkout - repo_root members track live HEAD
instead of a frozen recorded branch. Rows render under the Git tab
PR card and as board-card mini-rows, including main-checkout tasks
where the host card stays hidden; a shared on_disk_members helper
keeps status/member-PR/update-all enumeration consistent (existing
paths, never the host twice).

The branch-chip dropdown gains an "All repos" section: pull / merge
base / rebase base across host + members in one shot via
task_git_update_all, each repo on its own base branch, failures
surfaced per repo without aborting the batch.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@kaceper11

Copy link
Copy Markdown
Owner Author

Superseded: opened against simion/termic instead (stacked on simion#351).

@kaceper11 kaceper11 closed this Oct 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant