Skip to content
4 changes: 4 additions & 0 deletions doc/changes/changes_0.10.0.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
# OpenFastTrace IntelliJ Plugin 0.10.0, released 2026-07-04

We also updated the bundled OFT to 4.8.0 so tag filters now work end to end instead of being ignored.

The Test Runner UI now marks transitive defects with a leading `↳` so they stand out from direct defects in the result tree.

The run configuration now allows filtering out transitive defects.

## Bundled OpenFastTrace

OpenFastTrace 4.8.0

## Feature

* #66: Transitive defects now use a visible `↳` prefix in the Test Runner UI
* #72: Filter for transitive defects in the run configuration

## Bugfix

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# GH-72 Add filter for transitive tracing defects in run config

## Goal

Let users choose whether the trace result views should show transitive defects, with the checkbox defaulting on in run configuration templates so the existing defect-oriented view stays available while the UI can be narrowed to direct defects when needed.

## Scope

In scope:

* Add a run-configuration result-view checkbox for showing or hiding transitive defects.
* Default the new setting to show transitive defects in the bundled run configuration templates.
* Apply the setting in the IntelliJ Test Runner UI presentation.
* Apply the setting in the plain-text trace result presentation.
* Document the new behavior in traced requirements and the runtime design.

Out of scope:

* Changing OpenFastTrace trace evaluation or the transitive-defect detection rules.
* Adding an instant toggle in the test runner tree itself.
* Reworking the existing trace result views beyond the filter behavior needed here.

## Design References

* [System Requirements](../system_requirements.md)
* [Quality Requirements](../design/quality_requirements.md)
* [Building Block View](../design/building_block_view.md)
* [Runtime View](../design/runtime_view.md)

## Strategy

Treat the filter as a presentation concern that is stored with the run configuration, propagated into both trace presenters, and left out of the tracing engine. The implementation should keep direct defects visible, hide only transitive defects when the option is off, and preserve the existing default-on behavior in the preconfigured templates.

## Task List

- [ ] Create and checkout a new Git branch `feat/72-add-filter-for-transitive-tracing-defects-in-run-config`

### Requirements And Design

- [x] Update `doc/system_requirements.md` with a run-configuration result-view requirement for showing or hiding transitive defects and scenarios for the default-on template behavior.
- [x] Update `doc/design/runtime_view.md` with a design item describing how the stored result-view filter is applied in the test runner tree and plain-text presenter.
- [ ] Update `doc/design/building_block_view.md` if needed to show the run-configuration/settings-editor and presenter wiring for the new filter.
- [x] Stop and ask user for a review of the system requirements and design.

### Implementation

- [x] Extend the trace settings model and run-configuration persistence with a transitive-defect visibility flag.
- [x] Add the checkbox to the run-configuration settings editor and default it on for the existing templates.
- [x] Filter transitive defects out of the test-runner tree and plain-text output when the setting is off.
- [x] Keep direct defects, navigation, and overall trace failure behavior unchanged.

### Verification

- [x] Add focused tests for settings persistence, template defaults, and editor round-tripping of the transitive-defect flag.
- [x] Add presenter and tree-mapper tests proving transitive defects are shown or hidden according to the saved setting.
- [x] Add plain-text renderer or run-content tests proving the filtered output stays consistent with the configured result view.
- [x] Keep the OpenFastTrace trace clean.
- [x] Keep required build and plugin verification tasks green.
43 changes: 43 additions & 0 deletions doc/design/architecture_decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,49 @@ We add no "needs" here, since we cannot trace into dependabot.

Tags: Build, Security, Dependabot

## Trace Presentation Decisions

### How Does The Plugin Handle Transitive Defects In Trace Result Views?

The plugin needs a way to reduce trace-result noise when users debug broken dependency chains. This decision is architecture-relevant because it affects:

* how much noise every trace run exposes to the user while debugging a broken chain
* whether the same setting can drive both the Test Runner UI and plain-text trace output
* whether the project can keep transitive-defect detection in OpenFastTrace while changing only presentation

Picking the wrong option here would be expensive to undo. A local-only workaround would leave the result views inconsistent and force users to learn two different behaviors. Burying the filter in the trace engine or result model would be harder still because that choice would spread into tracing, rendering, settings persistence, and tests, so correcting it later would require broad refactoring instead of a narrow presentation-layer change.

We considered the following alternatives:

1. No filter.

This produces too much noise. Debugging broken chains stays unnecessarily hard because direct defects are mixed with transitive defects that are only symptoms.

1. Only an optical distinction without a filter.

This looks better, but it still leaves the noise problem unsolved because transitive defects remain present in the result tree and report.

1. Use the `ignored` status in the Test Runner UI.

This looked visually good, but it did not work as a filter because the items below a transitive defect were still counted as successful. The instant filter could not hide the transitive item without also changing the status accounting under it.

#### Transitive Defect Visibility Is Controlled By The Run Configuration
`dsn~transitive-defect-visibility-is-controlled-by-the-run-configuration~1`

The trace result presentations read the saved `Show transitive defects` setting from the OpenFastTrace run configuration and use it to include or omit transitive defects before rendering the Test Runner UI or the plain-text report.

Rationale:

This keeps the transitive-defect filter in the presentation layer instead of changing trace evaluation, and it works consistently across both result views. The bundled run configuration templates initialize the setting to shown so the existing defect-oriented view remains the default.

Comment:

This decision does not change how OpenFastTrace detects transitive defects. It only changes whether the trace presenters render them.

Needs: impl

Tags: Trace, Run Configuration, UI

## Test Framework Decisions

### Which JUnit Baseline Does the Plugin Use?
Expand Down
7 changes: 7 additions & 0 deletions doc/design/building_block_view.md
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,11 @@ scale 2
Tags: | "mvp "
. | <i>(comma-separated, empty = all)
. | [ ] Include untagged items
. | .
Defects | [X] Include transitive defects
}
---
{
. | .
Result view: | () Plain text output
. | (X) IntelliJ Test Runner UI
Expand All @@ -473,3 +478,5 @@ scale 2
}
@endsalt
```

The filter area uses a hierarchical layout: section headers introduce the group, each filter row keeps its label in the first column and its input in the second column, and the helper text or checkbox rows align underneath the corresponding input. If that arrangement needs another adjustment later, the next iteration should refine the existing hierarchy and row constraints instead of restarting the dialog layout from zero.
38 changes: 37 additions & 1 deletion doc/design/runtime_view.md
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,42 @@ Covers:

Needs: impl, itest

### Show Transitive Defects by Default in Run Configuration Templates
`dsn~show-transitive-defects-by-default-in-run-configuration-templates~1`

**Given** the run-configuration templates initialize a new OpenFastTrace run configuration
**When** the configuration editor opens for one of those templates
**Then** the `Show transitive defects` checkbox is selected so the default template behavior keeps transitive defects visible.

Covers:
- `scn~show-transitive-defects-by-default-in-run-configuration-templates~1`

Needs: impl, itest

### Hide Transitive Defects in Test Runner UI
`dsn~hide-transitive-defects-in-test-runner-ui~1`

**Given** the trace test-runner presentation receives a structured OpenFastTrace trace result and the saved run-configuration setting disables transitive defects
**When** it maps the trace result to SM test runner nodes
**Then** it omits specification-item nodes that are identified as transitive defects while still creating nodes for direct defects and their trace links.

Covers:
- `scn~hide-transitive-defects-in-test-runner-ui~1`

Needs: impl, itest

### Hide Transitive Defects in Plain Text Output
`dsn~hide-transitive-defects-in-plain-text-output~1`

**Given** the plain-text trace presentation receives a structured OpenFastTrace trace result and the saved run-configuration setting disables transitive defects
**When** it prepares the OFT report settings for the plain-text renderer
**Then** it passes the saved setting to the OpenFastTrace base library's report filter option so the rendered report omits transitive defects while still preserving direct-defect information and the existing summary for the remaining trace.

Covers:
- `scn~hide-transitive-defects-in-plain-text-output~1`

Needs: impl, itest

### Trace Selected Project Resources
`dsn~trace-selected-project-resources~2`

Expand Down Expand Up @@ -631,7 +667,7 @@ Covers:

Needs: impl, itest

No### Mark Transitive Defects in Test Runner UI
### Mark Transitive Defects in Test Runner UI
`dsn~mark-transitive-defects-in-test-runner~1`

**Given** the trace test-runner presentation creates a specification-item test node for a defective item that is identified as a transitive defect
Expand Down
47 changes: 47 additions & 0 deletions doc/system_requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -1460,6 +1460,53 @@ Covers:

Needs: dsn

#### Filter Transitive Defects in Trace Result View
`req~filter-transitive-defects-in-trace-result-view~1`

The OpenFastTrace run configuration includes a `Show transitive defects` checkbox for the trace result view. When users leave the checkbox selected, the plugin shows transitive defects alongside direct defects in the configured result view. When users clear the checkbox, the plugin hides transitive defects so they can focus on the direct defects that still need fixing.

Covers:
- `feat~oft-run-configurations~2`
- `feat~oft-test-runner-trace-results~1`

Needs: scn

#### Show Transitive Defects by Default in Run Configuration Templates
`scn~show-transitive-defects-by-default-in-run-configuration-templates~1`

**Given** an IntelliJ project is open and a user creates a new OpenFastTrace run configuration from one of the bundled templates
**When** the configuration editor opens
**Then** the `Show transitive defects` checkbox is selected by default

Covers:
- `req~filter-transitive-defects-in-trace-result-view~1`

Needs: dsn

#### Hide Transitive Defects in Test Runner UI
`scn~hide-transitive-defects-in-test-runner-ui~1`

**Given** an IntelliJ project is open, an `OpenFastTrace` run configuration uses the IntelliJ Test Runner UI result view, and the `Show transitive defects` checkbox is cleared
**When** the user runs the configuration
**Then** the test runner tree omits transitive defects while still showing direct defects and their trace links

Covers:
- `req~filter-transitive-defects-in-trace-result-view~1`

Needs: dsn

#### Hide Transitive Defects in Plain Text Output
`scn~hide-transitive-defects-in-plain-text-output~1`

**Given** an IntelliJ project is open, an `OpenFastTrace` run configuration uses the plain text result view, and the `Show transitive defects` checkbox is cleared
**When** the user runs the configuration
**Then** the plain text report omits transitive defects while still showing direct defects and their trace links

Covers:
- `req~filter-transitive-defects-in-trace-result-view~1`

Needs: dsn

### Show Plugin Logo in JetBrains Plugin Surfaces
`scn~show-plugin-logo-in-jetbrains-plugin-surfaces~1`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,29 @@ public final class OftTraceService {

private final Oft oft;
private final OftTraceReportRenderer reportRenderer;
private final boolean showTransitiveDefects;

// [impl->dsn~trace-execution-service~1]
public OftTraceService() {
this(Oft.create(), new OftPlainTextTraceReportRenderer());
this(Oft.create(), new OftPlainTextTraceReportRenderer(), true);
}

public OftTraceService(final boolean showTransitiveDefects) {
this(Oft.create(), new OftPlainTextTraceReportRenderer(), showTransitiveDefects);
}

OftTraceService(final Oft oft, final OftTraceReportRenderer reportRenderer) {
this(oft, reportRenderer, true);
}

OftTraceService(
final Oft oft,
final OftTraceReportRenderer reportRenderer,
final boolean showTransitiveDefects
) {
this.oft = oft;
this.reportRenderer = reportRenderer;
this.showTransitiveDefects = showTransitiveDefects;
}

// [impl->dsn~show-successful-trace-output-in-ide-output-window~2]
Expand Down Expand Up @@ -115,10 +129,14 @@ private String renderTrace(final Trace trace) {
return runWithPluginClassLoader(() -> reportRenderer.render(trace, createReportSettings()));
}

private static ReportSettings createReportSettings() {
// [impl->dsn~hide-transitive-defects-in-plain-text-output~1]
// [impl->dsn~transitive-defect-visibility-is-controlled-by-the-run-configuration~1]
private ReportSettings createReportSettings() {
return ReportSettings.builder()
.outputFormat(ReportConstants.DEFAULT_REPORT_FORMAT)
.verbosity(ReportVerbosity.FAILURE_DETAILS)
.verbosity(showTransitiveDefects
? ReportVerbosity.FAILURE_DETAILS
: ReportVerbosity.DIRECT_FAILURE_DETAILS)
.colorScheme(ColorScheme.COLOR)
.detailsSectionDisplay(DetailsSectionDisplay.COLLAPSE)
.build();
Expand Down
Loading