Files
fusion/packages/dashboard/app/components/TaskReviewTab.css
gsxdsm 91137ecb51 FN-5677: add per-task auto-merge override controls
Add dashboard and API support to set or clear per-task auto-merge overrides during review.

- add TaskReviewTab UI controls and styles for selecting or clearing an auto-merge override
- wire legacy dashboard API request handling for task auto-merge override updates
- update task workflow routes to persist override operations
- add dashboard and route tests covering set/clear override behavior

Files changed:
 packages/dashboard/app/__tests__/api-tasks.test.ts | 26 +++++++++
 packages/dashboard/app/api/legacy.ts               |  1 +
 packages/dashboard/app/components/TaskReviewTab.css     | 17 ++++++
 packages/dashboard/app/components/TaskReviewTab.tsx     | 55 +++++++++++++++++-
 packages/dashboard/app/components/__tests__/TaskReviewTab.test.tsx    | 48 ++++++++++++++++
 packages/dashboard/src/__tests__/routes-tasks-ops.test.ts         | 65 ++++++++++++++++++++++
 packages/dashboard/src/routes/register-task-workflow-routes.ts    |  7 ++-
 7 files changed, 216 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-5677

Fusion-Task-Lineage: 4503e605-1190-4a32-8736-dd11eb2756b8
2026-05-29 10:55:25 -07:00

209 lines
3.8 KiB
CSS

.task-review-tab {
display: flex;
flex-direction: column;
gap: var(--space-md);
}
.task-review-tab__header {
display: flex;
gap: var(--space-md);
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
.task-review-tab__summary-wrap {
display: flex;
align-items: center;
gap: var(--space-sm);
flex-wrap: wrap;
}
.task-review-tab__summary {
margin: 0;
color: var(--text-muted);
}
.task-review-tab__decision {
padding: 0 var(--space-sm);
border-radius: var(--radius-pill);
font-size: 0.75rem;
text-transform: capitalize;
}
.task-review-tab__decision--APPROVED {
color: var(--color-success);
}
.task-review-tab__decision--CHANGES_REQUESTED {
color: var(--color-error);
}
.task-review-tab__decision--COMMENTED,
.task-review-tab__decision--PENDING,
.task-review-tab__decision--REVIEW_REQUIRED {
color: var(--color-warning);
}
.task-review-tab__actions {
display: flex;
gap: var(--space-sm);
align-items: flex-start;
}
.task-review-tab__auto-merge-control {
display: flex;
flex-direction: column;
gap: var(--space-2xs);
min-inline-size: max-content;
}
.task-review-tab__list {
display: flex;
flex-direction: column;
gap: var(--space-sm);
margin: 0;
padding: 0;
list-style: none;
}
.task-review-tab__item {
padding: var(--space-md);
}
.task-review-tab__item-inner {
display: flex;
flex-direction: column;
gap: var(--space-sm);
}
.task-review-tab__row {
display: grid;
grid-template-columns: auto 1fr auto;
gap: var(--space-sm);
align-items: start;
}
.task-review-tab__item-summary {
color: var(--text);
}
.task-review-tab__direct-item {
display: flex;
flex-direction: column;
gap: var(--space-sm);
}
.task-review-tab__body {
margin: 0;
padding: var(--space-sm);
border: var(--btn-border-width) solid var(--border);
border-radius: var(--radius-sm);
background: var(--surface);
color: var(--text);
white-space: pre-wrap;
word-break: break-word;
max-width: 100%;
font-family: var(--font-primary);
}
.task-review-tab__body.markdown-body {
overflow-wrap: anywhere;
}
.task-review-tab__body.markdown-body > :first-child {
margin-top: 0;
}
.task-review-tab__body.markdown-body > :last-child {
margin-bottom: 0;
}
.task-review-tab__body.markdown-body pre,
.task-review-tab__body.markdown-body table {
max-width: 100%;
}
.task-review-tab__status {
color: var(--text-muted);
text-transform: capitalize;
}
.task-review-tab__status--failed {
color: var(--color-error);
}
.task-review-tab__status--queued,
.task-review-tab__status--in-progress {
color: var(--color-warning);
}
.task-review-tab__status--addressed {
color: var(--color-success);
}
.task-review-tab__meta,
.task-review-tab__empty {
color: var(--text-muted);
}
.task-review-tab__refresh-meta {
display: inline-flex;
align-items: center;
gap: var(--space-sm);
}
.task-review-tab__refresh-meta .status-dot {
flex-shrink: 0;
}
.task-review-tab__error {
color: var(--color-error);
}
.task-review-tab__reviewers,
.task-review-tab__blockers {
margin: 0;
padding-left: var(--space-lg);
color: var(--text-muted);
}
.task-review-tab__reviewer {
color: var(--text);
}
@media (max-width: 768px) {
.task-review-tab__row {
grid-template-columns: auto 1fr;
}
.task-review-tab__status {
grid-column: 2;
}
.task-review-tab__actions {
width: 100%;
gap: var(--space-sm);
flex-wrap: wrap;
}
.task-review-tab__auto-merge-control {
width: 100%;
min-inline-size: 0;
}
.task-review-tab__auto-merge-control .select {
width: 100%;
}
.task-review-tab__refresh-meta {
align-items: flex-start;
}
/* FN-4352: primary touch target per AGENTS.md convention (introduced by FN-4236). */
.task-review-tab__actions .btn {
min-width: calc(var(--space-lg) * 2 + var(--space-xs));
min-height: calc(var(--space-lg) * 2 + var(--space-xs));
}
}