Skip to content

feat(app): add step timing waterfall and per-category summary#261

Merged
PhenX merged 3 commits into
mainfrom
claude/steps-tab-data-density-xnooey
Jul 16, 2026
Merged

feat(app): add step timing waterfall and per-category summary#261
PhenX merged 3 commits into
mainfrom
claude/steps-tab-data-density-xnooey

Conversation

@PhenX

@PhenX PhenX commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

What & why

Enhances the Steps tab on test case detail pages with:

  1. Per-category summary strip – Shows step counts and total duration rolled up by category (navigation, action, assertion, etc.), sorted by duration descending
  2. Step index column – Displays row numbers for easier reference
  3. Timing waterfall visualization – When the reporter provides startTime on steps, renders a true waterfall chart showing step overlap and timing. Falls back to magnitude-based bars when timings aren't available
  4. Duration severity coloring – Steps >2s are red, >500ms are orange, otherwise gray; applies to both the duration number and its bar
  5. Slowest step badge – Highlights the single slowest step in the test with a "slowest" badge
  6. Step percentage of test – Shows each step's duration as a percentage of total test time
  7. Source location links – Displays file:line:col pointers for steps when available, with IDE integration
  8. Pass/fail indicators – Adds checkmark icons for passing steps (previously only showed ✗ for failures)

Removes the "wasted time in fixed waits" badge, which is replaced by the more granular per-step timing data.

Updates the reporter's flattenSteps to capture location (formatted as file:line:col) and startTime from raw step objects, enabling the waterfall visualization. These fields are optional and only present on runs from recent reporter versions.

How was it tested

  • Added unit tests in step-analyzer.spec.ts covering:
    • Location formatting (file:line:col)
    • startTime handling (Date objects and numeric timestamps)
    • Omission of optional fields when not provided
  • Existing tests pass; no breaking changes to step flattening logic
  • UI changes are additive and degrade gracefully when timing data is unavailable

Checklist

  • PR title follows Conventional Commits (feat(app): ...)
  • Tests added for new step analyzer behavior
  • Type definitions updated (FlatStep, TestStepInfo, PerformanceStep)

https://claude.ai/code/session_01FT9qrzo6jdKtnyS6JxWJxA

claude added 2 commits July 16, 2026 17:39
The Steps tab was sparse — a 4-column table (fail-only marker, category,
title, duration) that also repeated the header's "wasted in fixed waits"
badge. Make it denser and drop the redundancy.

- reporter: capture each step's `location` (a `file:line:col` pointer, not
  a source snippet) and `startTime` in `flattenSteps` — the raw Playwright
  step already carries both. They ride inside the existing `steps` JSON
  column, so there is no DB migration and no handler/persistence change.
- steps tab: add a per-category summary strip; show pass/fail for every
  step (not just failures); add a step index, a source-location reference,
  and a duration-share bar (a real waterfall when start times are present,
  else a magnitude bar) with % of the test's total; highlight the slowest
  step. The table now spans full width with the Step column absorbing the
  slack.
- remove the wasted-time badge from the tab (still shown in the header).

`location`/`startTime` populate on new runs; existing runs degrade
gracefully with those cells left blank.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FT9qrzo6jdKtnyS6JxWJxA
Main gained the OpenInIdeLink component (and the "Clickable source
paths" rule) after the steps-tab enrichment was written. Swap the
steps table's bare location text for OpenInIdeLink — same muted
mono look, plus the hover open-in-IDE / chooser affordance — and
drop the now-unneeded shortLocation helper (the component renders
its own truncated path:line label).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FT9qrzo6jdKtnyS6JxWJxA
@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Coverage Report for Reporter (./reporter)

Status Category Percentage Covered / Total
🔵 Lines 64.01% 1450 / 2265
🔵 Statements 62.39% 1649 / 2643
🔵 Functions 70.43% 243 / 345
🔵 Branches 58.86% 1195 / 2030
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
reporter/src/internal/collect/step-analyzer.ts 100% 96.24% 100% 100%
Generated in workflow #898 for commit 07a35f1 by the Vitest Coverage Report Action

@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Coverage Report for Application (./application)

Status Category Percentage Covered / Total
🔵 Lines 23.47% 1828 / 7786
🔵 Statements 23.38% 2120 / 9067
🔵 Functions 22.43% 321 / 1431
🔵 Branches 20.11% 1445 / 7185
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
application/server/utils/run-json-types.ts 0% 0% 0% 0%
Generated in workflow #898 for commit 07a35f1 by the Vitest Coverage Report Action

The PR coverage report flagged the error-capture lines as the only
uncovered lines in step-analyzer.ts (a pre-existing gap surfaced by
this PR touching the file).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FT9qrzo6jdKtnyS6JxWJxA
@PhenX
PhenX merged commit 893a01a into main Jul 16, 2026
7 checks passed
@PhenX
PhenX deleted the claude/steps-tab-data-density-xnooey branch July 16, 2026 18:56
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.

2 participants