Features

SpecTracer generates a single self-contained HTML report with five interactive sections and intelligent health indicators. All CSS and JS are inlined — the report is safe to email, archive, or publish as a CI artifact.

Coverage Progress Dashboard

The first thing visible in the report — designed for daily standup discussion. It answers the single most important question: what percentage of our scenarios actually have test coverage?

● Headline Metric

Tested: X / Y scenarios (Z%) — prominently displayed with color coding:

  • Green above the configurable green threshold (default 80%)
  • Amber between the amber and green thresholds
  • Red below the amber threshold (default 50%)

A scenario counts as tested if at least one test result (across any layer) links to it.

☰ Per-Feature Breakdown

Each feature file gets its own mini progress bar with its own tested/untested count. This makes it easy to see which areas of the application are well-covered and which need attention.

⚙ Health Check Cards

Four health indicator cards sit below the progress bar:

80%
Progress Threshold
Pyramid Ratio
12m
E2E Runtime
0
Unlinked Tests

Each card shows its status (pass / warn / fail) at a glance.

Test Pyramid Dashboard

A 3-tier visualization of your test suite distribution. This is the fastest way to spot an inverted pyramid — where you have more E2E tests than unit tests.

E2E — 12 tests · 3.2m
Integration — 48 tests · 1.1m
Unit — 156 tests · 0.4m

▲ Per-Layer Metrics

MetricUnitIntegrationE2E
Test countIndividual test casesIndividual test casesScenarios
DurationTotal execution timeTotal execution timeTotal execution time
Pass / Fail / SkipPercentagesPercentagesPercentages

⚠ Health Indicators

  • Speed Check: Flags if E2E takes too long (configurable: amber at 10 min, red at 30 min by default)
  • Ratio Check: Flags if Unit test count ≤ Integration + E2E count (inverted pyramid)

Feature Traceability & Scenario Matrix

A searchable, sortable tree that shows every feature, every scenario, and every layer's test results:

☰ Tree View

Feature: User Login
  [=== 75% coverage ===] (3 of 4 scenarios tested)

  ├─ Scenario: Successful login (tested)
  │   Required: unit ✓  integration ✓  e2e ✓
  │   Unit: 3 passed · 0.4s
  │   Integration: 1 passed · 2.1s
  │   E2E: 2 passed · 12.3s
  │
  └─ Scenario: Invalid password (no coverage)
      Required: none
      (No test results found)

🔍 Search & Filter

A text input at the top of the matrix. Type a tag name or scenario name and the matrix filters to show only matching entries. Client-side JavaScript — no page reload needed.

⚙ Sortable Columns

Click any column header to sort by name, status, duration, or coverage. Click again to reverse the sort order.

▼ Expandable Layer Details

Click a layer pill to expand and see individual test names, their pass/fail/skip statuses, and expandable failure stack traces for any failed test.

Failure Breakdown

An accordion-style table listing every failed test across all layers. This is your single triage surface — no more switching between test reports.

⚠ What You See

ColumnDescription
LayerWhich test layer (Unit, Integration, E2E)
FeatureWhich feature file the scenario belongs to
ScenarioWhich scenario the test links to
Test NameThe name of the individual test
StatusPass / Fail / Skip
DurationTest execution time

Click any failed test to expand and see the full <failure> or <error> stack trace from the JUnit XML.

Unlinked Tests

Every test result whose tags didn't match any scenario ends up here. This is invaluable for catching:

ColumnDescription
LayerWhich test layer produced the orphan
Test NameThe orphaned test's name
Tags FoundAll tags on the test result
StatusPass / Fail / Skip

Health Checks

Four visual health indicators sit at the top of the report. They are purely visual — they never affect the exit code.

Progress

% of scenarios with at least one linked test. Thresholds configured via health_checks in config.

Pyramid Ratio

Pass if Unit count > Integration + E2E count. Fail if the pyramid is inverted.

E2E Runtime

Warns/fails if E2E duration exceeds configurable thresholds. Defaults: 10min amber, 30min red.

Unlinked Tests

Pass at 0, warn at 1–3, fail at 4+. Helps enforce tag hygiene.

Tag Linking System

The heart of SpecTracer. Feature files and test results connect through shared tags on scenarios.

Two Kinds of Tags

TypeExamplesPurpose
Linking @FC-42, @regression Shared with test results. Any matching tag links the test to the scenario.
Requirement @require-unit, @require-e2e Declares which layers must have coverage. Excluded from linking logic.

Default Behavior

Scenarios without any @require-* tags default to @require-e2e — because if you wrote a Gherkin scenario but didn't declare requirements, it should at least have E2E coverage.

Module-Scoped Requirements

For teams with multi-module codebases, @require-unit:auth and @require-integration:billing let you pin requirements to specific modules.

How It Works

In your config file:

{
  "unit": {
    "": ["./reports/unit.xml"],
    "auth": ["./reports/auth-unit.xml"],
    "billing": ["./reports/billing-unit.xml"]
  }
}

In your feature file:

@FC-42 @require-unit:auth
Scenario: Authenticated billing access

The @require-unit:auth requirement is only satisfied by results from the "auth" module key. Unscoped results ("") never satisfy it.

@require-e2e intentionally does not accept a module suffix — E2E scenarios typically span multiple modules by nature.

Edge Case Behavior

SituationBehavior
No config file foundErrors out — a config file is mandatory
Missing features or outputErrors out — both are required
Empty/missing test result pathSilently ignored (zero tests for that layer)
Malformed XML or JSONAborts with a clear error message
Test matches no scenarioListed in "Unlinked Tests"
Scenario matches no testShown as "untested"
@require-* with no matching testLayer flagged as missing
Feature-level tagsNot inherited by scenarios
Tag collisionsResult links to ALL matching scenarios
Unicode / special charactersPreserved, HTML-escaped