Files
fusion/packages/dashboard/app/components/BranchGroupCard.css
gsxdsm 3dd824d04e FN-8823: respect shared member auto-merge holds
Honor project and member auto-merge consent consistently throughout shared-branch integration.

- Apply project autoMerge settings and explicit member overrides to shared-member hold decisions.
- Expose shared-member integration hold state and controls in branch-group dashboard and lifecycle APIs.
- Add regression coverage, operator documentation, and a patch changeset.

Files changed:
 .changeset/fn-8823-shared-member-consent.md        |  7 ++
 docs/dashboard-guide.md                            |  4 +-
 packages/core/src/__tests__/task-merge.test.ts     | 57 +++++++++++++++
 packages/core/src/index.gate.ts                    |  3 +
 packages/core/src/index.ts                         |  3 +
 packages/core/src/merge/task-merge.ts              | 81 ++++++++++++++++++---
 .../dashboard/app/api/tasks/tasks-lifecycle.ts     | 11 +++
 .../dashboard/app/components/BranchGroupCard.css   | 84 ++++++++++++++++++++++
 .../dashboard/app/components/BranchGroupCard.tsx   | 58 ++++++++++++++-
 packages/dashboard/app/components/ListView.tsx     | 14 +++-
 .../dashboard/app/components/TaskDetailModal.tsx   | 20 +++++-
 .../components/__tests__/BranchGroupCard.test.tsx  | 44 +++++++++++-
 .../components/__tests__/TaskDetailModal.test.tsx  | 24 ++++++-
 .../app/components/dashboard/MainContent.tsx       |  2 +-
 .../app/components/useRightDockController.tsx      |  2 +-
 packages/dashboard/app/hooks/useModalManager.ts    |  6 ++
 .../src/__tests__/routes-branch-groups.test.ts     | 42 ++++++-----
 .../src/routes/register-branch-groups-routes.ts    |  9 ++-
 ...cutor-live-branch-group-auto-merge-hold.test.ts | 21 +++---
 .../src/__tests__/group-merge-coordinator.test.ts  |  7 +-
 .../workflow-graph-executor-handlers.test.ts       | 33 ++++++---
 packages/engine/src/executor.ts                    | 27 ++++---
 packages/engine/src/project-engine.ts              |  9 ++-
 packages/engine/src/self-healing.ts                | 16 ++---
 .../src/workflow-node-runners/merge-runner.ts      | 13 ++--
 25 files changed, 503 insertions(+), 94 deletions(-)

Fusion-Task-Id: FN-8823

Fusion-Task-Lineage: 19a8ed3f-26e1-4c8e-8782-ca366718a3f2

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-07 20:27:04 -07:00

236 lines
4.8 KiB
CSS

.branch-group-card {
display: flex;
flex-direction: column;
gap: var(--space-sm);
}
/*
FNXC:BranchGroupDetails 2026-06-30-00:00:
Collapsed branch-group details must consume less task-detail space with token-based typography and spacing while keeping the expand button large enough to remain usable.
*/
.branch-group-card--collapsed {
gap: calc(var(--space-xs) / 2);
padding: var(--space-sm);
}
.branch-group-card-error {
color: var(--color-error);
}
.branch-group-card-error-title {
font-weight: var(--font-weight-semibold);
}
.branch-group-card-error-copy {
margin: 0;
color: var(--text-muted);
}
.branch-group-card-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-sm);
}
.branch-group-card-title {
display: inline-flex;
align-items: center;
gap: var(--space-xs);
}
.branch-group-card--collapsed .branch-group-card-title {
font-size: var(--font-size-xs);
line-height: var(--line-height-tight);
}
.branch-group-card-header-meta {
display: inline-flex;
align-items: center;
gap: var(--space-xs);
}
.branch-group-card--collapsed .branch-group-card-header,
.branch-group-card--collapsed .branch-group-card-header-meta {
gap: calc(var(--space-xs) / 2);
}
.branch-group-card-badge {
background: var(--surface-1);
}
.branch-group-card-header-meta .btn {
flex-shrink: 0;
}
.branch-group-card-header-meta .btn-icon {
padding: calc(var(--space-xs) / 2);
}
.branch-group-card--collapsed .branch-group-card-header-meta .btn-icon {
padding: 0;
}
.branch-group-card-header-meta .btn-icon svg {
display: block;
}
.branch-group-card-progress-text {
color: var(--text-muted);
font-size: calc(var(--font-size-base) * 0.875);
}
.branch-group-card--collapsed .branch-group-card-progress-text {
font-size: var(--font-size-xs);
line-height: var(--line-height-tight);
}
.branch-group-card-progress {
width: 100%;
height: var(--space-xs);
border-radius: var(--radius-pill);
background: var(--surface-1);
overflow: hidden;
}
.branch-group-card--collapsed .branch-group-card-progress {
height: calc(var(--space-xs) / 2);
}
.branch-group-card-progress-fill {
display: block;
height: 100%;
background: var(--color-info);
}
.branch-group-card-members {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: calc(var(--space-xs) / 2);
}
.branch-group-card-member {
display: flex;
align-items: center;
gap: var(--space-xs);
}
.branch-group-card-member-title {
flex: 1;
}
.branch-group-card-member-status {
color: var(--text-muted);
display: inline-flex;
}
.branch-group-card-actions {
display: flex;
align-items: center;
gap: var(--space-sm);
flex-wrap: wrap;
}
/*
FNXC:SharedBranchPromotionAdvisories 2026-08-08-03:03:
FN-8823 manual promotion must expose every persisted advisory finding, not only
review notes. Keep long advisory lists independently scrollable so the confirm
and cancel controls remain reachable at the existing mobile breakpoint without
adding another modal primitive.
*/
.branch-group-card-confirm-backdrop {
position: fixed;
inset: 0;
display: grid;
place-items: center;
padding: var(--space-md);
background: color-mix(in srgb, var(--surface-0) 70%, transparent);
z-index: var(--z-modal);
}
.branch-group-card-confirm {
display: flex;
flex-direction: column;
gap: var(--space-sm);
width: 100%;
max-width: 100%;
max-block-size: calc(100dvh - var(--space-lg));
overflow: hidden;
}
.branch-group-card-confirm h3,
.branch-group-card-confirm p {
margin: 0;
}
.branch-group-card-advisories {
display: flex;
flex: 1 1 auto;
flex-direction: column;
gap: var(--space-xs);
min-block-size: 0;
margin: 0;
padding-inline-start: var(--space-lg);
overflow-y: auto;
}
.branch-group-card-advisories > li {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: var(--space-xs);
}
.branch-group-card-advisory-heading {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--space-xs);
}
.branch-group-card-advisory-notes,
.branch-group-card-advisory-findings p {
margin: 0;
}
.branch-group-card-advisory-findings {
display: flex;
flex-direction: column;
gap: calc(var(--space-xs) / 2);
margin: 0;
padding-inline-start: var(--space-lg);
}
.branch-group-card-advisory-findings li {
display: flex;
flex-direction: column;
gap: calc(var(--space-xs) / 2);
}
.branch-group-card-advisory-findings span {
color: var(--text-muted);
}
.branch-group-card-review {
flex-shrink: 0;
}
@media (max-width: 768px) {
.branch-group-card-header {
flex-direction: column;
align-items: flex-start;
}
.branch-group-card-header-meta {
width: 100%;
justify-content: space-between;
}
.branch-group-card--collapsed .branch-group-card-header {
gap: calc(var(--space-xs) / 2);
}
}