Skip to content

feat(web): surface resolution reasons and parent summary (CRU-129) - #374

Merged
selfcontained merged 3 commits into
mainfrom
agt_256d20c531ba/agent-c531ba
Apr 22, 2026
Merged

feat(web): surface resolution reasons and parent summary (CRU-129)#374
selfcontained merged 3 commits into
mainfrom
agt_256d20c531ba/agent-c531ba

Conversation

@selfcontained

Copy link
Copy Markdown
Owner

Summary

Phase 1 UI for the review round-trip feature — renders the resolution metadata that CRU-128 landed on the backend.

  • Feedback items with resolution_reason render the reason inline (compact italic under description in the list; full block in the detail/mobile panels) plus a short commit SHA from resolution_commit when present.
  • Manual Ignore is now an inline reason prompt in the detail & mobile panels (replaces the action row), removing the "User's choice" placeholder that CRU-128 shipped as a stopgap. Reason is required before the item can be resolved.
  • Parent's response block renders inside each persona card in the feedback panel and in the persona review summary panel/sheet once persona_review_resolutions has a summary for the review.
  • PersonaAgentRow shows "Resolution submitted" in place of the verdict label once the parent has submitted a resolution.
  • The agent query now pulls the latest review resolution into the existing review subquery so the UI reads it without an extra fetch; FeedbackItem gains resolutionReason / resolutionCommit / resolvedAt to match CRU-128's payload.

Linear: https://linear.app/crumbstream/issue/CRU-129

Test plan

  • pnpm run check (backend + web tsc)
  • pnpm run finalize:web (web tsc + vite build)
  • pnpm run test (server vitest + web vitest)
  • pnpm run test:e2e (Playwright — 138 passed)
  • Playwright validation of three states (a) open items, (b) items with reasons, (c) resolution submitted with Parent's response block — screenshots shared
  • End-to-end manual Ignore reason prompt: submitted reason "Legend bug being tracked in follow-up ticket CRU-200." and verified server persisted resolution_reason

selfcontained and others added 2 commits April 20, 2026 22:05
Phase 1 UI for the review round-trip feature — renders the
resolution metadata that CRU-128 landed on the backend.

- Parent's response block renders inside each persona card in the
  feedback panel and in the persona review summary panel/sheet when
  persona_review_resolutions has a summary.
- Feedback items display their resolution_reason inline (compact
  italic under description in the list, full block in the detail
  and mobile sheet) plus a short commit SHA when present.
- Manual Ignore is now an inline reason prompt instead of an
  implicit "User's choice" placeholder — the reason is required
  before the item can be resolved.
- PersonaAgentRow shows "Resolution submitted" in place of the
  verdict label once the parent has submitted a resolution.
- The agent query now includes the latest review resolution in
  the review subquery so the UI can read it without an extra
  fetch; FeedbackItem type gains resolutionReason / commit /
  resolvedAt to match the CRU-128 feedback payload.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Addresses findings from frontend-ux-review on PR #374.

- IgnoreReasonInput: stopPropagation on Enter/Escape so the outer
  detail-panel / Sheet Esc handler doesn't also fire and close the
  whole panel (high).
- Parent's response compact block: render with <Markdown> instead
  of a plain div so formatting (lists, code, bold) matches the
  full ReviewSummaryPanel/Mobile sheet views (medium).
- IgnoreReasonInput default size bumped to h-11 for touch targets
  on the mobile sheet (medium).
- Compact list resolution_reason gated on !isActionable so a
  reopened item no longer shows stale ignored reasoning while the
  detail panel hides it (low).
- FeedbackDetailPanel + MobileFeedbackSheet disable prev/next/close
  while the inline ignore input is mounted, preventing silent loss
  of typed reason; Sheet overlay/Esc close path is also blocked
  while ignoring (low).
- PersonaAgentRow "Resolution submitted" branch dropped the
  redundant (hasSummary || resolution?.summary) check — hasResolution
  already implies a summary (low).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@selfcontained
selfcontained marked this pull request as ready for review April 22, 2026 16:22
…U-129)

Replaces the separate verdict chip / "Resolution submitted" label with
a single two-step pill that shows the reviewer's verdict and the
parent-response state as a connected progression.

- State 2 (awaiting parent): filled verdict step + hollow muted step
  joined by a dashed connector → clear "your turn" signal.
- State 3 (parent responded): both steps filled + solid connector →
  round 1 complete.
- Stepper is pure presentation taking step primitives; a
  `stepsFromReview` helper derives the Phase 1 steps from review +
  resolution. Phase 2 can add a second deriver for recheck rounds
  (stepper already accepts an R{n} round badge via the `round` prop).
- Inline "Parent's response" block removed from the sidebar persona
  card — the parent summary now lives only in the Review Summary
  panel / sheet, alongside the reviewer's summary, so both the verdict
  and response open the same detail pane.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@selfcontained
selfcontained merged commit 8ad64b9 into main Apr 22, 2026
1 check passed
@selfcontained
selfcontained deleted the agt_256d20c531ba/agent-c531ba branch April 22, 2026 16:31
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