Skip to content

feat(web): enrich workflow result card with status, duration, nodes, and artifacts#1025

Merged
coleam00 merged 4 commits intodevfrom
archon/task-fix-issue-1015
Apr 10, 2026
Merged

feat(web): enrich workflow result card with status, duration, nodes, and artifacts#1025
coleam00 merged 4 commits intodevfrom
archon/task-fix-issue-1015

Conversation

@coleam00
Copy link
Copy Markdown
Owner

@coleam00 coleam00 commented Apr 9, 2026

Summary

  • Problem: WorkflowResultCard in the chat view showed a hardcoded green checkmark + "Workflow complete: {name}" regardless of actual run outcome — failed and cancelled workflows looked identical to successful ones.
  • Why it matters: Users had to navigate to Dashboard → View Logs to understand what happened; status, duration, node count, and artifacts were completely invisible in the chat view.
  • What changed: Enhanced WorkflowResultCard in MessageList.tsx to fetch run data via TanStack Query (staleTime: Infinity), merge with live Zustand store state, and render a status-aware header (StatusIcon), duration pill (formatDurationMs), node count, and clickable artifacts (ArtifactSummary).
  • What did not change: No server-side, CLI, adapter, or workflow engine code touched. Scope is strictly the single WorkflowResultCard component in @archon/web.

UX Journey

Before

User                   Web UI (chat)
────                   ─────────────
workflow completes ──▶  WorkflowResultCard renders
                        ✓  Workflow complete: fix-github-issue    View full logs →
                        ─────────────────────────────────────────────────────────
                        ## Artifacts
                        Created PR #47...
                                                                 [Show more]

  User sees: static green checkmark, workflow name, text content
  User does NOT see: whether it actually succeeded, how long it took,
                     how many nodes ran, what artifacts were created
  To find out: must click "View full logs" and navigate away

After

User                   Web UI (chat)
────                   ─────────────
workflow completes ──▶  WorkflowResultCard renders
                        [fetches getWorkflowRun(runId) once, merges Zustand live state]

  On success:
    ✓  fix-github-issue   7/7 nodes   3.5m        View full logs →
    ─────────────────────────────────────────────────────────────
     PR  Fix: handle null pointer in auth (#47)
      C  abc1234 — fix: handle null pointer
      B  archon/fix-github-issue-123
    ─────────────────────────────────────────────────────────────
    ## Summary
    I've fixed the null pointer...                          [Show more]

  On failure:
    ✗  fix-github-issue   2/7 nodes   0.8m        View full logs →

  [No navigation away required]

Architecture Diagram

Before

MessageList.tsx
  └─ WorkflowResultCard
       ├─ props: { runId, workflowName, content }
       ├─ useState (expand/collapse)
       └─ renders: static ✓ + "Workflow complete: {name}" + text

After

MessageList.tsx
  └─ WorkflowResultCard
       ├─ props: { runId, workflowName, content }
       ├─ useNavigate (keep)
       ├─ useState (expand/collapse, keep)
       ├─ [+] useWorkflowStore → liveState (Zustand, status/dagNodes/artifacts/timestamps)
       ├─ [+] useQuery(getWorkflowRun) → runData (TanStack Query, staleTime: Infinity)
       ├─ [~] derived: status, completedCount, totalCount, duration, artifacts
       └─ renders:
            ├─ [~] header: StatusIcon + name + node count pill + duration pill + "View logs"
            ├─ [+] ArtifactSummary (if artifacts present)
            └─ text content (keep)

External:
  WorkflowResultCard ══▶ [+] GET /api/workflows/runs/{runId}  (via getWorkflowRun)
  WorkflowResultCard ══▶ [+] Zustand workflow-store            (live state merge)
  WorkflowResultCard ══▶ [+] StatusIcon                        (status-aware icon)
  WorkflowResultCard ══▶ [+] ArtifactSummary                   (artifact display)
  WorkflowResultCard ──▶ [~] formatDurationMs / ensureUtc      (existing lib, new usage)

Connection inventory:

From To Status Notes
WorkflowResultCard GET /api/workflows/runs/{runId} new One-time fetch, staleTime: Infinity
WorkflowResultCard Zustand workflow-store new Live state merge (may be empty for CLI workflows)
WorkflowResultCard StatusIcon new Status-aware icon replaces hardcoded ✓
WorkflowResultCard ArtifactSummary new Clickable artifact list with modal support
WorkflowResultCard formatDurationMs / ensureUtc new usage Existing lib, first use in this component
WorkflowResultCard useNavigate / useState unchanged Keep existing

Label Snapshot

  • Risk: risk: low
  • Size: size: S
  • Scope: web
  • Module: web:chat

Change Metadata

  • Change type: feature
  • Primary scope: web

Linked Issue

Validation Evidence (required)

bun run validate
# type-check: ✅ 0 errors across all 9 packages
# lint:       ✅ 0 errors, 0 warnings (--max-warnings 0)
# format:     ✅ all files match Prettier style
# tests:      ✅ all packages pass, 0 failures
  • Evidence provided: Full bun run validate run; all 4 checks passed on first run, no files modified during validation.
  • No commands skipped.

Security Impact (required)

  • New permissions/capabilities? No
  • New external network calls? No — calls existing GET /api/workflows/runs/{runId} endpoint that was already accessible
  • Secrets/tokens handling changed? No
  • File system access scope changed? No

Compatibility / Migration

  • Backward compatible? Yes — purely additive UI enhancement
  • Config/env changes? No
  • Database migration needed? No

Human Verification (required)

Validated via bun run validate (type-check, lint, format, tests all pass). UI changes are purely in @archon/web React component; no manual browser verification was performed in this automated implementation.

  • Verified scenarios: Static analysis, type safety, lint compliance, full test suite
  • Edge cases checked: ESLint dot-notation / no-base-to-string rules on event data — resolved by casting e.data to Record<string, string | undefined> before access
  • What was not verified: Live browser rendering of status icon, artifact links, duration display

Side Effects / Blast Radius (required)

  • Affected subsystems/workflows: @archon/web chat view only — no server, CLI, or adapter code touched
  • Potential unintended effects: None identified; ArtifactSummary import verified safe (both components in packages/web, no circular dep)
  • Guardrails/monitoring for early detection: Existing type-check and test suite; no new runtime paths that could fail silently

Rollback Plan (required)

  • Fast rollback command/path: git revert HEAD — single commit, single file change
  • Feature flags or config toggles: None needed (UI-only, no feature gating)
  • Observable failure symptoms: WorkflowResultCard missing or broken in chat view; would show as React render error or blank card

Risks and Mitigations

  • Risk: Zustand state cleared on page refresh → card has no data until API fetch resolves

    • Mitigation: useQuery fetch always fires (staleTime: Infinity but still fetches once); card renders immediately from API data; loading state is indistinguishable from the existing static card during the brief fetch window
  • Risk: events array large for long workflows (performance on initial fetch)

    • Mitigation: Only terminal events filtered client-side; staleTime: Infinity prevents re-fetch on focus/remount; no polling
  • Risk: ESLint bracket notation rule on e.data access

    • Mitigation: Applied — cast e.data to Record<string, string | undefined> to satisfy @typescript-eslint/dot-notation and @typescript-eslint/no-base-to-string; verified 0 warnings

Summary by CodeRabbit

  • New Features

    • Enhanced Workflow Result Card: improved status icon, outcome-specific header, node completion count, total run duration, linked artifacts/output, and navigation to full execution details.
    • Failed workflows now surface a result card (with run link) when a run exists.
  • Bug Fixes

    • More resilient display when live data or API fetches are missing; artifacts prefer live data and gracefully fallback.
  • Documentation

    • Added documentation for the Workflow Result Card.

…and artifacts (#1015)

The WorkflowResultCard showed a hardcoded green checkmark regardless of
actual outcome, with no duration, node count, or artifact links.

Changes:
- Fetch terminal run data via TanStack Query (staleTime: Infinity)
- Merge Zustand live state with API fallback for offline/CLI workflows
- Render StatusIcon for completed/failed/cancelled status awareness
- Display node count and duration pill in the header
- Show ArtifactSummary (PRs, commits, branches, files) above text content
- Derive node counts and artifacts from events when live state unavailable

Fixes #1015

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 9, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4930216b-8828-4f2d-aae2-f23d63ea8867

📥 Commits

Reviewing files that changed from the base of the PR and between 00d06a9 and 5683007.

📒 Files selected for processing (3)
  • packages/core/src/orchestrator/orchestrator.ts
  • packages/web/src/components/chat/MessageList.tsx
  • packages/web/src/stores/workflow-store.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/web/src/components/chat/MessageList.tsx

📝 Walkthrough

Walkthrough

Adds a Workflow Result Card to chat: MessageList now fetches/merges workflow run data (API + Zustand) to show terminal status, node completion counts, duration, and artifacts; orchestrator now surfaces failure run metadata so chats can render result cards; docs updated.

Changes

Cohort / File(s) Summary
Documentation
packages/docs-web/src/content/docs/adapters/web.md
Added docs for the Workflow Result Card: status icon/text, node completion counts, run duration, artifact links, and header navigation to full execution details.
Chat UI / Workflow Result
packages/web/src/components/chat/MessageList.tsx
Introduced useQuery(getWorkflowRun) with infinite staleTime, merged API data with Zustand useWorkflowStore live state; status-driven header, node progress (live dagNodes or event-derived), duration computation, status-aware StatusIcon, and artifact rendering (live store preferred, fallback to workflow_artifact events). Degraded rendering when API fails but live state absent.
Orchestrator behavior
packages/core/src/orchestrator/orchestrator.ts
dispatchBackgroundWorkflow now branches to emit result-card metadata for failed runs when a pre-created run exists, preserves paused behavior, and includes workflowResult info in dispatched error messages when applicable; added try/catch around UI message dispatch.
Cache invalidation
packages/web/src/stores/workflow-store.ts
Extended invalidateWorkflowQueries() to include workflowRun query key so run-related cache entries are invalidated on status changes/terminal transitions.

Sequence Diagram(s)

sequenceDiagram
  participant Orchestrator
  participant ChatService as MessageList/Chat
  participant API as Workflows API
  participant Store as Zustand Store
  participant User

  Orchestrator->>ChatService: dispatch message (final node) with workflowResult metadata (workflowName, runId) or error+workflowResult
  ChatService->>API: useQuery(getWorkflowRun(runId), staleTime=Infinity)
  ChatService->>Store: read live run state (dagNodes, artifacts)
  ChatService-->>ChatService: merge API runData with Store live state (status, timestamps, node counts, artifacts)
  ChatService->>ChatService: render WorkflowResultCard (StatusIcon, node progress, duration, artifacts, link)
  User->>ChatService: click "View full logs" -> navigate to /workflows/runs/{runId}
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related issues

Possibly related PRs

Poem

🐰 In chat a little card appears,
With status, nodes, and runtime cheers.
Artifacts linked, the path made clear,
Hop—click logs, the details near!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the main feature: enhancing the workflow result card with status-aware presentation, duration, node counts, and artifacts.
Description check ✅ Passed The description is comprehensive and well-structured, covering all required sections from the template: Summary, UX Journey, Architecture Diagram, Label Snapshot, Change Metadata, Linked Issues, Validation Evidence, Security Impact, Compatibility, Human Verification, Side Effects, Rollback Plan, and Risks/Mitigations.
Linked Issues check ✅ Passed The pull request fully addresses all primary objectives from #1015: renders a status-aware workflow completion card with name, status icon, duration, node count, artifacts, and 'View Logs' link; fetches run data via API and merges with live store state; preserves navigation behavior.
Out of Scope Changes check ✅ Passed All code changes are tightly scoped to the stated objective: MessageList.tsx component enhancements, documentation update, orchestrator changes to emit workflowResult metadata on failures, and workflow-store query invalidation updates. No extraneous changes detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch archon/task-fix-issue-1015
⚔️ Resolve merge conflicts
  • Resolve merge conflict in branch archon/task-fix-issue-1015

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coleam00
Copy link
Copy Markdown
Owner Author

coleam00 commented Apr 9, 2026

🔍 Comprehensive PR Review

PR: #1025 — feat(web): enrich workflow result card with status, duration, nodes, and artifacts
Reviewed by: 4 specialized agents (code-review, test-coverage, comment-quality, docs-impact)
Date: 2026-04-09


Summary

Clean implementation that enriches WorkflowResultCard with status icon, duration, node count, and artifacts via a dual-source merge (Zustand live state + TanStack Query). Architecture is sound, all CLAUDE.md rules pass, and primitive reuse is correct. One logic inconsistency was found in the node-count paths that should be fixed before merge.

Verdict: REQUEST_CHANGES — 1 MEDIUM logic fix recommended

Severity Count
🔴 CRITICAL 0
🟠 HIGH 0
🟡 MEDIUM 1
🟢 LOW 7

🟡 Medium Issue — Fix Before Merge

totalCount Semantics Differ Between the Two Node-Count Code Paths

📍 packages/web/src/components/chat/MessageList.tsx:68-83

The dagNodes live-state path sets totalCount = dagNodes.length (all nodes, any status), while the events fallback path sets totalCount = terminalEvents.length (only node_completed | node_failed | node_skipped). On page refresh during an active run, the events path shows "2/2 nodes" (only terminal events) while the live path shows "2/5 nodes" — giving a misleading "all done" reading.

View recommended fix
if (dagNodes.length > 0) {
  completedCount = dagNodes.filter(n => n.status === 'completed').length;
  // Only count terminal nodes (same semantics as events fallback path)
  totalCount = dagNodes.filter(
    n => n.status === 'completed' || n.status === 'failed' || n.status === 'skipped'
  ).length;
} else {
  // ... events path unchanged
}

The label "N/M nodes" implies M = nodes that reached a terminal state. Including pending/running nodes in M produces a wrong denominator, especially visible on page refresh during execution.


🟢 Low Issues (Optional)

View 7 low-priority suggestions
# Issue Location Suggestion
1 Duration badge bg-surface-elevated blends into parent header (same bg) MessageList.tsx:132 Change to bg-surface for visual contrast
2 Default status 'completed' may briefly flash green ✓ for failed runs on first load MessageList.tsx:57 Accept as-is — fix requires broader StatusIcon changes; flash is one render cycle
3 No test for artifact event extraction logic MessageList.tsx:87-97 Create follow-up issue — extract to src/lib/ helper + test
4 status→headerTitle mapping untested ('running' → "Workflow complete") MessageList.tsx:101-106 Accept as-is — architectural invariant prevents non-terminal status here
5 Duration timestamp merge untested (utilities are tested, merge chain is not) MessageList.tsx:60-66 Accept as-is — ensureUtc coverage provides adequate indirect coverage
6 staleTime: Infinity comment doesn't explain why Infinity is used MessageList.tsx:49 Extend: "terminal run record is immutable — status/timestamps/events do not change once completed/failed/cancelled"
7 Node count comment doesn't note that events-path totalCount is an approximation MessageList.tsx:68 Update: "fall back to events (approximation — totalCount is nodes that reached a terminal state, not the workflow's full node count)"

Also: packages/docs-web/src/content/docs/adapters/web.md — the "Workflow Progress Cards" section describes the in-flight card only; the new result card (status icon, duration, node count, artifacts) is undocumented. Suggest adding a brief "Workflow Result Card" subsection.


✅ What's Good

  • Cache coherence: ['workflowRun', runId] key aligns with WorkflowExecution.tsx's invalidateQueries — completing a run on the detail page automatically invalidates the result card's cache. Unintentional but excellent.
  • staleTime: Infinity is correct: Terminal runs are immutable; no re-fetches on remount is the right call.
  • Primitive reuse: StatusIcon, ArtifactSummary, formatDurationMs, ensureUtc — all reused, no duplication.
  • Artifact cast: e.data as Record<string, string | undefined> is the correct ESLint-compliant solution; well-justified in the scope doc.
  • Conditional rendering: {totalCount > 0 && ...} and {duration != null && ...} suppress metadata when unavailable rather than showing zeroes.
  • CLAUDE.md compliance: Type safety, import patterns, YAGNI, ESLint zero-tolerance — all pass.

📋 Suggested Follow-up Issues

Issue Priority
Add unit tests for WorkflowResultCard artifact extraction and node-count logic P2
Document Workflow Result Card in web adapter docs P3

Reviewed by Archon comprehensive-pr-review workflow
Artifacts: ~/.archon/workspaces/coleam00/Archon/artifacts/runs/2a26c0973026855f7e8e35f64587b303/review/

…omments and docs

- Fix MEDIUM: totalCount in dagNodes live-state path now counts only terminal nodes
  (completed/failed/skipped), matching the semantics of the events fallback path.
  Previously included pending/running nodes, producing a misleading denominator
  during page-refresh mid-execution.
- Fix LOW: Duration badge background changed from bg-surface-elevated to bg-surface
  for visual contrast against the bg-surface-elevated parent header.
- Fix LOW: Expanded staleTime: Infinity comment to explain the immutability invariant.
- Fix LOW: Expanded node count comment to describe that the events-path totalCount
  is an approximation (nodes that reached terminal state, not workflow's full node count).
- Fix LOW: Added Workflow Result Card subsection to web adapter docs describing the
  post-completion card's status icon, header, node count, duration, and artifacts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@coleam00
Copy link
Copy Markdown
Owner Author

coleam00 commented Apr 9, 2026

Fix Report

All actionable review findings from the consolidated review have been addressed. 5 fixes applied (1 MEDIUM, 4 LOW). Commit: 163ad9d


MEDIUM — Fixed ✓

totalCount semantics differ between node-count code paths (MessageList.tsx:68-83)

The dagNodes live-state path now filters to only terminal nodes (completed | failed | skipped) before counting totalCount, matching the semantics of the events fallback path. Previously totalCount = dagNodes.length included pending/running nodes, producing a misleading denominator on page-refresh mid-execution.

// Before
totalCount = dagNodes.length;

// After
totalCount = dagNodes.filter(
  n => n.status === 'completed' || n.status === 'failed' || n.status === 'skipped'
).length;

LOW Fixes ✓

# Fix
LOW #1 Duration badge: bg-surface-elevatedbg-surface for visual contrast against the parent header
LOW #6 staleTime: Infinity comment extended to explain the immutability invariant
LOW #7 Node count comment updated to describe that the events-path totalCount is an approximation
LOW #8 Added "Workflow Result Card" subsection to packages/docs-web/src/content/docs/adapters/web.md

Findings Skipped (accepted/deferred)

Finding Reason
LOW #2 — default 'completed' status flash Accepted as-is per reviewer recommendation; fixing requires broader StatusIcon changes outside scope
LOW #3 — artifact extraction test coverage Deferred to follow-up issue (extract helper + test)
LOW #4 — headerTitle mapping untested Deferred; low risk — WorkflowResultCard only renders for terminal runs
LOW #5 — duration timestamp merging untested Accepted; ensureUtc + formatDurationMs utilities are thoroughly covered

Validation

Check Result
bun run type-check PASS — all 9 packages
bun run lint PASS — 0 warnings
bun run test PASS — all packages

Simplify verbose onClick handlers in WorkflowResultCard — remove unnecessary
block body and explicit void return type for the navigate call; collapse the
setExpanded handler to a single-line block per ESLint no-confusing-void-expression.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@coleam00 coleam00 marked this pull request as ready for review April 9, 2026 22:58
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/web/src/components/chat/MessageList.tsx (1)

91-103: Consider defensive extraction for artifact event data.

The type assertion on line 95 assumes e.data conforms to a specific shape. If the event structure varies or contains unexpected types, this could silently produce malformed artifacts.

🛡️ Optional: Add runtime guards
 const eventArtifacts: WorkflowArtifact[] = (runData?.events ?? [])
   .filter(e => e.event_type === 'workflow_artifact')
   .map(e => {
-    const d = e.data as Record<string, string | undefined>;
+    const d = (typeof e.data === 'object' && e.data !== null ? e.data : {}) as Record<string, unknown>;
     return {
-      type: (d.artifactType ?? 'file') as ArtifactType,
-      label: d.label ?? '',
-      url: d.url,
-      path: d.path,
+      type: (typeof d.artifactType === 'string' ? d.artifactType : 'file') as ArtifactType,
+      label: typeof d.label === 'string' ? d.label : '',
+      url: typeof d.url === 'string' ? d.url : undefined,
+      path: typeof d.path === 'string' ? d.path : undefined,
     };
   });
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/web/src/components/chat/MessageList.tsx` around lines 91 - 103, The
code uses a direct assertion of e.data in the eventArtifacts mapping which can
produce malformed artifacts if the event shape varies; update the eventArtifacts
construction (the mapping over runData?.events in MessageList.tsx) to
defensively extract and validate fields from e.data before creating a
WorkflowArtifact: first check that e?.data is an object, coerce or default
artifactType/label to safe strings, and only assign url/path when they are
string values (otherwise set to undefined); ensure ArtifactType casts only after
validating allowed values and filter out or skip events that don't meet the
minimal shape so artifacts only contains well-formed WorkflowArtifact entries
(adjust the eventArtifacts variable and the final artifacts fallback
accordingly).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@packages/web/src/components/chat/MessageList.tsx`:
- Around line 91-103: The code uses a direct assertion of e.data in the
eventArtifacts mapping which can produce malformed artifacts if the event shape
varies; update the eventArtifacts construction (the mapping over runData?.events
in MessageList.tsx) to defensively extract and validate fields from e.data
before creating a WorkflowArtifact: first check that e?.data is an object,
coerce or default artifactType/label to safe strings, and only assign url/path
when they are string values (otherwise set to undefined); ensure ArtifactType
casts only after validating allowed values and filter out or skip events that
don't meet the minimal shape so artifacts only contains well-formed
WorkflowArtifact entries (adjust the eventArtifacts variable and the final
artifacts fallback accordingly).

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 713c2774-f09e-47f2-a2b7-6482901f61e8

📥 Commits

Reviewing files that changed from the base of the PR and between 95679fa and 00d06a9.

📒 Files selected for processing (2)
  • packages/docs-web/src/content/docs/adapters/web.md
  • packages/web/src/components/chat/MessageList.tsx

- Fix unsafe `e.data` cast: use runtime type narrowing instead of
  `as Record<string, string | undefined>` for event artifact extraction
- Fix invalid ArtifactType fallback: change 'file' to 'file_created'
  (a valid member of the ArtifactType union)
- Handle useQuery error state: destructure `isError` and render a
  degraded card (no node count, duration, or artifacts) when the API
  fetch fails, preventing a misleading "Workflow complete" display
- Emit workflowResult metadata on failure/cancel: the orchestrator now
  attaches workflowResult to failed workflow messages so the chat
  renders a result card with status icon and "View full logs" link
- Add 'workflowRun' to invalidateWorkflowQueries() so singular run
  cache entries are invalidated alongside the plural list caches

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coleam00 coleam00 merged commit e8334b3 into dev Apr 10, 2026
1 check passed
Tyone88 pushed a commit to Tyone88/Archon that referenced this pull request Apr 16, 2026
Resolve merge conflict in MessageList.tsx by combining:
- PR coleam00#1025: status/duration/nodes/artifacts enrichment for WorkflowResultCard
- PR coleam00#1023: ArtifactViewerModal clickable file paths in result card content

Both features now work together — the result card shows status-aware
headers, node counts, duration, and artifact summaries while also
supporting clickable artifact file paths in the markdown content.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
joaobmonteiro pushed a commit to joaobmonteiro/Archon that referenced this pull request Apr 26, 2026
Resolve merge conflict in MessageList.tsx by combining:
- PR coleam00#1025: status/duration/nodes/artifacts enrichment for WorkflowResultCard
- PR coleam00#1023: ArtifactViewerModal clickable file paths in result card content

Both features now work together — the result card shows status-aware
headers, node counts, duration, and artifact summaries while also
supporting clickable artifact file paths in the markdown content.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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.

feat(web): show workflow completion summary in main chat view

1 participant