branchproof 0.11.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +82 -0
- data/README.md +440 -29
- data/doc/Branchproof/CLI.md +1 -1
- data/doc/Branchproof/ChangedCoverage.md +19 -0
- data/doc/Branchproof/ChangedCoveragePolicy.md +24 -0
- data/doc/Branchproof/ChangedDecisionMap.md +20 -0
- data/doc/Branchproof/ChangedScope.md +18 -0
- data/doc/Branchproof/Collation.md +23 -0
- data/doc/Branchproof/CollationManifest.md +29 -0
- data/doc/Branchproof/CoverageSummary.md +20 -0
- data/doc/Branchproof/Doctor/TerminalRenderer.md +15 -0
- data/doc/Branchproof/Doctor.md +34 -0
- data/doc/Branchproof/FallbackInstrumentation.md +8 -0
- data/doc/Branchproof/FallbackRuntime.md +12 -0
- data/doc/Branchproof/FallbackSyntax.md +13 -0
- data/doc/Branchproof/GitChanges.md +19 -0
- data/doc/Branchproof/GithubReport.md +25 -0
- data/doc/Branchproof/HtmlReport.md +22 -0
- data/doc/Branchproof/Instrumenter.md +1 -1
- data/doc/Branchproof/MinitestAdapter.md +4 -0
- data/doc/Branchproof/RakeTask.md +121 -0
- data/doc/Branchproof/Report.md +41 -3
- data/doc/Branchproof/ReportSelection.md +10 -1
- data/doc/Branchproof/Runtime.md +4 -1
- data/doc/Branchproof/Source.md +1 -1
- data/doc/Branchproof/SummaryRanking/Decision.md +86 -0
- data/doc/Branchproof/SummaryRanking/SourceFile.md +43 -0
- data/doc/Branchproof/SummaryRanking.md +36 -0
- data/doc/Branchproof/SummaryReport.md +42 -0
- data/doc/Branchproof/Worker.md +1 -1
- data/doc/Branchproof.md +21 -1
- data/doc/CHANGELOG.md +82 -0
- data/doc/README.md +440 -29
- data/lib/branchproof/analyzer.rb +2 -52
- data/lib/branchproof/changed_coverage.rb +177 -0
- data/lib/branchproof/changed_decision_map.rb +359 -0
- data/lib/branchproof/changed_scope.rb +93 -0
- data/lib/branchproof/cli.rb +242 -21
- data/lib/branchproof/collation.rb +525 -0
- data/lib/branchproof/collation_manifest.rb +129 -0
- data/lib/branchproof/comparison.rb +11 -3
- data/lib/branchproof/comparison_report.rb +2 -0
- data/lib/branchproof/configuration.rb +12 -2
- data/lib/branchproof/coverage_policy.rb +122 -0
- data/lib/branchproof/coverage_summary.rb +94 -0
- data/lib/branchproof/doctor.rb +241 -0
- data/lib/branchproof/evidence.rb +5 -1
- data/lib/branchproof/exception_instrumentation.rb +4 -3
- data/lib/branchproof/exception_syntax.rb +15 -1
- data/lib/branchproof/fallback_instrumentation.rb +25 -0
- data/lib/branchproof/fallback_runtime.rb +14 -0
- data/lib/branchproof/fallback_syntax.rb +90 -0
- data/lib/branchproof/focused_report.rb +81 -22
- data/lib/branchproof/git_changes.rb +188 -0
- data/lib/branchproof/github_report.rb +292 -0
- data/lib/branchproof/html_report.rb +412 -0
- data/lib/branchproof/instrumenter.rb +2 -0
- data/lib/branchproof/minimizer.rb +4 -2
- data/lib/branchproof/minitest_adapter.rb +45 -5
- data/lib/branchproof/rails_support.rb +2 -2
- data/lib/branchproof/rake_task.rb +186 -0
- data/lib/branchproof/report.rb +383 -71
- data/lib/branchproof/report_selection.rb +26 -5
- data/lib/branchproof/runtime.rb +2 -0
- data/lib/branchproof/saved_report.rb +323 -5
- data/lib/branchproof/source.rb +15 -3
- data/lib/branchproof/summary_ranking.rb +165 -0
- data/lib/branchproof/summary_report.rb +241 -0
- data/lib/branchproof/version.rb +1 -1
- data/lib/branchproof/worker.rb +14 -9
- data/lib/branchproof.rb +12 -0
- data/llms.txt +21 -1
- data/sig/branchproof.rbs +206 -5
- metadata +39 -23
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Class Branchproof::SummaryRanking::Decision <a id="class-Branchproof-SummaryRanking-Decision"></a>
|
|
2
|
+
|
|
3
|
+
| | |
|
|
4
|
+
| --- | --- |
|
|
5
|
+
| **Inherits** | Struct |
|
|
6
|
+
| **Defined in** | lib/branchproof/summary_ranking.rb |
|
|
7
|
+
|
|
8
|
+
## Attributes
|
|
9
|
+
### `alternatives` [RW] <a id="attribute-i-alternatives"></a> <a id="alternatives-instance_method"></a>
|
|
10
|
+
Returns the value of attribute alternatives
|
|
11
|
+
- **@return** [Object] the current value of alternatives
|
|
12
|
+
|
|
13
|
+
### `column` [RW] <a id="attribute-i-column"></a> <a id="column-instance_method"></a>
|
|
14
|
+
Returns the value of attribute column
|
|
15
|
+
- **@return** [Object] the current value of column
|
|
16
|
+
|
|
17
|
+
### `conditions` [RW] <a id="attribute-i-conditions"></a> <a id="conditions-instance_method"></a>
|
|
18
|
+
Returns the value of attribute conditions
|
|
19
|
+
- **@return** [Object] the current value of conditions
|
|
20
|
+
|
|
21
|
+
### `context` [RW] <a id="attribute-i-context"></a> <a id="context-instance_method"></a>
|
|
22
|
+
Returns the value of attribute context
|
|
23
|
+
- **@return** [Object] the current value of context
|
|
24
|
+
|
|
25
|
+
### `expression` [RW] <a id="attribute-i-expression"></a> <a id="expression-instance_method"></a>
|
|
26
|
+
Returns the value of attribute expression
|
|
27
|
+
- **@return** [Object] the current value of expression
|
|
28
|
+
|
|
29
|
+
### `id` [RW] <a id="attribute-i-id"></a> <a id="id-instance_method"></a>
|
|
30
|
+
Returns the value of attribute id
|
|
31
|
+
- **@return** [Object] the current value of id
|
|
32
|
+
|
|
33
|
+
### `kind` [RW] <a id="attribute-i-kind"></a> <a id="kind-instance_method"></a>
|
|
34
|
+
Returns the value of attribute kind
|
|
35
|
+
- **@return** [Object] the current value of kind
|
|
36
|
+
|
|
37
|
+
### `line` [RW] <a id="attribute-i-line"></a> <a id="line-instance_method"></a>
|
|
38
|
+
Returns the value of attribute line
|
|
39
|
+
- **@return** [Object] the current value of line
|
|
40
|
+
|
|
41
|
+
### `missing_alternatives` [RW] <a id="attribute-i-missing_alternatives"></a> <a id="missing_alternatives-instance_method"></a>
|
|
42
|
+
Returns the value of attribute missing_alternatives
|
|
43
|
+
- **@return** [Object] the current value of missing_alternatives
|
|
44
|
+
|
|
45
|
+
### `missing_rules` [RW] <a id="attribute-i-missing_rules"></a> <a id="missing_rules-instance_method"></a>
|
|
46
|
+
Returns the value of attribute missing_rules
|
|
47
|
+
- **@return** [Object] the current value of missing_rules
|
|
48
|
+
|
|
49
|
+
### `relative_path` [RW] <a id="attribute-i-relative_path"></a> <a id="relative_path-instance_method"></a>
|
|
50
|
+
Returns the value of attribute relative_path
|
|
51
|
+
- **@return** [Object] the current value of relative_path
|
|
52
|
+
|
|
53
|
+
### `required_rules` [RW] <a id="attribute-i-required_rules"></a> <a id="required_rules-instance_method"></a>
|
|
54
|
+
Returns the value of attribute required_rules
|
|
55
|
+
- **@return** [Object] the current value of required_rules
|
|
56
|
+
|
|
57
|
+
### `table_calculated` [RW] <a id="attribute-i-table_calculated"></a> <a id="table_calculated-instance_method"></a>
|
|
58
|
+
Returns the value of attribute table_calculated
|
|
59
|
+
- **@return** [Object] the current value of table_calculated
|
|
60
|
+
|
|
61
|
+
### `test_ids` [RW] <a id="attribute-i-test_ids"></a> <a id="test_ids-instance_method"></a>
|
|
62
|
+
Returns the value of attribute test_ids
|
|
63
|
+
- **@return** [Object] the current value of test_ids
|
|
64
|
+
|
|
65
|
+
### `unexecuted` [RW] <a id="attribute-i-unexecuted"></a> <a id="unexecuted-instance_method"></a>
|
|
66
|
+
Returns the value of attribute unexecuted
|
|
67
|
+
- **@return** [Object] the current value of unexecuted
|
|
68
|
+
|
|
69
|
+
### `unproven_conditions` [RW] <a id="attribute-i-unproven_conditions"></a> <a id="unproven_conditions-instance_method"></a>
|
|
70
|
+
Returns the value of attribute unproven_conditions
|
|
71
|
+
- **@return** [Object] the current value of unproven_conditions
|
|
72
|
+
|
|
73
|
+
## Public Instance Methods
|
|
74
|
+
### `cases_to_test()` <a id="method-i-cases_to_test"></a> <a id="cases_to_test-instance_method"></a>
|
|
75
|
+
One new observation covers at most one missing rule, so missing rules are an
|
|
76
|
+
exact case count. Without missing rules (no table, or only impossible rules
|
|
77
|
+
left), each unproven condition or alternative counts.
|
|
78
|
+
|
|
79
|
+
### `gap?()` <a id="method-i-gap-3F"></a> <a id="gap?-instance_method"></a>
|
|
80
|
+
- **@return** [Boolean]
|
|
81
|
+
|
|
82
|
+
### `missing_total()` <a id="method-i-missing_total"></a> <a id="missing_total-instance_method"></a>
|
|
83
|
+
Not documented.
|
|
84
|
+
|
|
85
|
+
### `rule_cases?()` <a id="method-i-rule_cases-3F"></a> <a id="rule_cases?-instance_method"></a>
|
|
86
|
+
- **@return** [Boolean]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Class Branchproof::SummaryRanking::SourceFile <a id="class-Branchproof-SummaryRanking-SourceFile"></a>
|
|
2
|
+
|
|
3
|
+
| | |
|
|
4
|
+
| --- | --- |
|
|
5
|
+
| **Inherits** | Struct |
|
|
6
|
+
| **Defined in** | lib/branchproof/summary_ranking.rb |
|
|
7
|
+
|
|
8
|
+
## Attributes
|
|
9
|
+
### `decisions` [RW] <a id="attribute-i-decisions"></a> <a id="decisions-instance_method"></a>
|
|
10
|
+
Returns the value of attribute decisions
|
|
11
|
+
- **@return** [Object] the current value of decisions
|
|
12
|
+
|
|
13
|
+
### `relative_path` [RW] <a id="attribute-i-relative_path"></a> <a id="relative_path-instance_method"></a>
|
|
14
|
+
Returns the value of attribute relative_path
|
|
15
|
+
- **@return** [Object] the current value of relative_path
|
|
16
|
+
|
|
17
|
+
## Public Instance Methods
|
|
18
|
+
### `alternatives()` <a id="method-i-alternatives"></a> <a id="alternatives-instance_method"></a>
|
|
19
|
+
Not documented.
|
|
20
|
+
|
|
21
|
+
### `conditions()` <a id="method-i-conditions"></a> <a id="conditions-instance_method"></a>
|
|
22
|
+
Not documented.
|
|
23
|
+
|
|
24
|
+
### `gaps()` <a id="method-i-gaps"></a> <a id="gaps-instance_method"></a>
|
|
25
|
+
Not documented.
|
|
26
|
+
|
|
27
|
+
### `missing_alternatives()` <a id="method-i-missing_alternatives"></a> <a id="missing_alternatives-instance_method"></a>
|
|
28
|
+
Not documented.
|
|
29
|
+
|
|
30
|
+
### `missing_rules()` <a id="method-i-missing_rules"></a> <a id="missing_rules-instance_method"></a>
|
|
31
|
+
Not documented.
|
|
32
|
+
|
|
33
|
+
### `missing_total()` <a id="method-i-missing_total"></a> <a id="missing_total-instance_method"></a>
|
|
34
|
+
Not documented.
|
|
35
|
+
|
|
36
|
+
### `required_rules()` <a id="method-i-required_rules"></a> <a id="required_rules-instance_method"></a>
|
|
37
|
+
Not documented.
|
|
38
|
+
|
|
39
|
+
### `unexecuted()` <a id="method-i-unexecuted"></a> <a id="unexecuted-instance_method"></a>
|
|
40
|
+
Not documented.
|
|
41
|
+
|
|
42
|
+
### `unproven_conditions()` <a id="method-i-unproven_conditions"></a> <a id="unproven_conditions-instance_method"></a>
|
|
43
|
+
Not documented.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Class Branchproof::SummaryRanking <a id="class-Branchproof-SummaryRanking"></a>
|
|
2
|
+
|
|
3
|
+
| | |
|
|
4
|
+
| --- | --- |
|
|
5
|
+
| **Inherits** | Object |
|
|
6
|
+
| **Defined in** | lib/branchproof/summary_ranking.rb |
|
|
7
|
+
|
|
8
|
+
Ranks supported decisions and source files by missing coverage obligations.
|
|
9
|
+
|
|
10
|
+
Order: unexecuted decisions first, then more missing obligations
|
|
11
|
+
(decision-table rules, unproven MC/DC conditions, missing alternatives), then
|
|
12
|
+
source path, line, column, and ID. The order is a count, not a risk estimate.
|
|
13
|
+
Unsupported decisions are counted but never ranked.
|
|
14
|
+
|
|
15
|
+
## Attributes
|
|
16
|
+
### `index` [R] <a id="attribute-i-index"></a> <a id="index-instance_method"></a>
|
|
17
|
+
Returns the value of attribute index.
|
|
18
|
+
|
|
19
|
+
## Public Instance Methods
|
|
20
|
+
### `available?()` <a id="method-i-available-3F"></a> <a id="available?-instance_method"></a>
|
|
21
|
+
- **@return** [Boolean]
|
|
22
|
+
|
|
23
|
+
### `decisions()` <a id="method-i-decisions"></a> <a id="decisions-instance_method"></a>
|
|
24
|
+
All supported decisions in the selection, ranked.
|
|
25
|
+
|
|
26
|
+
### `files()` <a id="method-i-files"></a> <a id="files-instance_method"></a>
|
|
27
|
+
Not documented.
|
|
28
|
+
|
|
29
|
+
### `gaps()` <a id="method-i-gaps"></a> <a id="gaps-instance_method"></a>
|
|
30
|
+
Not documented.
|
|
31
|
+
|
|
32
|
+
### `initialize(document:, selection: = ReportSelection.new)` <a id="method-i-initialize"></a> <a id="initialize-instance_method"></a>
|
|
33
|
+
- **@return** [SummaryRanking] a new instance of SummaryRanking
|
|
34
|
+
|
|
35
|
+
### `unsupported_count()` <a id="method-i-unsupported_count"></a> <a id="unsupported_count-instance_method"></a>
|
|
36
|
+
Not documented.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Class Branchproof::SummaryReport <a id="class-Branchproof-SummaryReport"></a>
|
|
2
|
+
|
|
3
|
+
| | |
|
|
4
|
+
| --- | --- |
|
|
5
|
+
| **Inherits** | Object |
|
|
6
|
+
| **Defined in** | lib/branchproof/summary_report.rb |
|
|
7
|
+
|
|
8
|
+
Terminal view that lists the largest coverage gaps first.
|
|
9
|
+
|
|
10
|
+
## Constants
|
|
11
|
+
### `EXPRESSION_WIDTH` <a id="constant-EXPRESSION_WIDTH"></a> <a id="EXPRESSION_WIDTH-constant"></a>
|
|
12
|
+
Not documented.
|
|
13
|
+
|
|
14
|
+
### `ORDER_NOTE` <a id="constant-ORDER_NOTE"></a> <a id="ORDER_NOTE-constant"></a>
|
|
15
|
+
Not documented.
|
|
16
|
+
|
|
17
|
+
### `RULE_LABELS` <a id="constant-RULE_LABELS"></a> <a id="RULE_LABELS-constant"></a>
|
|
18
|
+
Not documented.
|
|
19
|
+
|
|
20
|
+
### `SHOWN_TESTS` <a id="constant-SHOWN_TESTS"></a> <a id="SHOWN_TESTS-constant"></a>
|
|
21
|
+
Not documented.
|
|
22
|
+
|
|
23
|
+
## Public Class Methods
|
|
24
|
+
### `case_lines(decision, coordinator)` <a id="method-c-case_lines"></a> <a id="case_lines-class_method"></a>
|
|
25
|
+
One line per missing case: decision-table rules when some are missing,
|
|
26
|
+
otherwise unproven conditions; then missing alternatives.
|
|
27
|
+
|
|
28
|
+
### `gap_summary(decision)` <a id="method-c-gap_summary"></a> <a id="gap_summary-class_method"></a>
|
|
29
|
+
Shared wording for terminal rows and GitHub output.
|
|
30
|
+
|
|
31
|
+
### `one_line(text, width = EXPRESSION_WIDTH)` <a id="method-c-one_line"></a> <a id="one_line-class_method"></a>
|
|
32
|
+
Not documented.
|
|
33
|
+
|
|
34
|
+
### `rule_text(rule, expressions, coordinator)` <a id="method-c-rule_text"></a> <a id="rule_text-class_method"></a>
|
|
35
|
+
Not documented.
|
|
36
|
+
|
|
37
|
+
## Public Instance Methods
|
|
38
|
+
### `initialize(document:, level:, coordinator:, missing_only: = false, selection: = ReportSelection.new)` <a id="method-i-initialize"></a> <a id="initialize-instance_method"></a>
|
|
39
|
+
- **@return** [SummaryReport] a new instance of SummaryReport
|
|
40
|
+
|
|
41
|
+
### `render()` <a id="method-i-render"></a> <a id="render-instance_method"></a>
|
|
42
|
+
Not documented.
|
data/doc/Branchproof/Worker.md
CHANGED
|
@@ -48,5 +48,5 @@ Not documented.
|
|
|
48
48
|
### `write_completion(payload, result)` <a id="method-c-write_completion"></a> <a id="write_completion-class_method"></a>
|
|
49
49
|
Not documented.
|
|
50
50
|
|
|
51
|
-
### `write_failure(payload, code, details)` <a id="method-c-write_failure"></a> <a id="write_failure-class_method"></a>
|
|
51
|
+
### `write_failure(payload, code, details, evidence: = nil)` <a id="method-c-write_failure"></a> <a id="write_failure-class_method"></a>
|
|
52
52
|
Not documented.
|
data/doc/Branchproof.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
| | |
|
|
4
4
|
| --- | --- |
|
|
5
|
-
| **Defined in** | lib/branchproof.rb, lib/branchproof/cli.rb, lib/branchproof/limits.rb, lib/branchproof/loader.rb, lib/branchproof/report.rb, lib/branchproof/source.rb, lib/branchproof/worker.rb, lib/branchproof/project.rb, lib/branchproof/records.rb, lib/branchproof/runtime.rb, lib/branchproof/version.rb, lib/branchproof/analyzer.rb, lib/branchproof/evidence.rb, lib/branchproof/minimizer.rb, lib/branchproof/comparison.rb, lib/branchproof/constraints.rb, lib/branchproof/instrumenter.rb, lib/branchproof/runtime_flow.rb, lib/branchproof/saved_report.rb, lib/branchproof/value_syntax.rb, lib/branchproof/configuration.rb, lib/branchproof/rails_support.rb, lib/branchproof/rspec_adapter.rb, lib/branchproof/value_runtime.rb, lib/branchproof/coverage_index.rb, lib/branchproof/decision_table.rb, lib/branchproof/default_syntax.rb, lib/branchproof/focused_report.rb, lib/branchproof/coverage_policy.rb, lib/branchproof/decision_syntax.rb, lib/branchproof/default_runtime.rb, lib/branchproof/exception_syntax.rb, lib/branchproof/iteration_syntax.rb, lib/branchproof/minitest_adapter.rb, lib/branchproof/report_selection.rb, lib/branchproof/comparison_report.rb, lib/branchproof/exception_runtime.rb, lib/branchproof/iteration_runtime.rb, lib/branchproof/flow_instrumentation.rb, lib/branchproof/value_instrumentation.rb, lib/branchproof/default_instrumentation.rb, lib/branchproof/exception_instrumentation.rb, lib/branchproof/iteration_instrumentation.rb, lib/branchproof/extended_alternative_runtime.rb |
|
|
5
|
+
| **Defined in** | lib/branchproof.rb, lib/branchproof/cli.rb, lib/branchproof/doctor.rb, lib/branchproof/limits.rb, lib/branchproof/loader.rb, lib/branchproof/report.rb, lib/branchproof/source.rb, lib/branchproof/worker.rb, lib/branchproof/project.rb, lib/branchproof/records.rb, lib/branchproof/runtime.rb, lib/branchproof/version.rb, lib/branchproof/analyzer.rb, lib/branchproof/evidence.rb, lib/branchproof/collation.rb, lib/branchproof/minimizer.rb, lib/branchproof/rake_task.rb, lib/branchproof/comparison.rb, lib/branchproof/constraints.rb, lib/branchproof/git_changes.rb, lib/branchproof/html_report.rb, lib/branchproof/instrumenter.rb, lib/branchproof/runtime_flow.rb, lib/branchproof/saved_report.rb, lib/branchproof/value_syntax.rb, lib/branchproof/changed_scope.rb, lib/branchproof/configuration.rb, lib/branchproof/github_report.rb, lib/branchproof/rails_support.rb, lib/branchproof/rspec_adapter.rb, lib/branchproof/value_runtime.rb, lib/branchproof/coverage_index.rb, lib/branchproof/decision_table.rb, lib/branchproof/default_syntax.rb, lib/branchproof/focused_report.rb, lib/branchproof/summary_report.rb, lib/branchproof/coverage_policy.rb, lib/branchproof/decision_syntax.rb, lib/branchproof/default_runtime.rb, lib/branchproof/fallback_syntax.rb, lib/branchproof/summary_ranking.rb, lib/branchproof/changed_coverage.rb, lib/branchproof/coverage_summary.rb, lib/branchproof/exception_syntax.rb, lib/branchproof/fallback_runtime.rb, lib/branchproof/iteration_syntax.rb, lib/branchproof/minitest_adapter.rb, lib/branchproof/report_selection.rb, lib/branchproof/comparison_report.rb, lib/branchproof/exception_runtime.rb, lib/branchproof/iteration_runtime.rb, lib/branchproof/collation_manifest.rb, lib/branchproof/changed_decision_map.rb, lib/branchproof/flow_instrumentation.rb, lib/branchproof/value_instrumentation.rb, lib/branchproof/default_instrumentation.rb, lib/branchproof/fallback_instrumentation.rb, lib/branchproof/exception_instrumentation.rb, lib/branchproof/iteration_instrumentation.rb, lib/branchproof/extended_alternative_runtime.rb |
|
|
6
6
|
|
|
7
7
|
Keep source-boundary and parameter-binding rules together for auditing.
|
|
8
8
|
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity,
|
|
@@ -16,6 +16,12 @@ Not documented.
|
|
|
16
16
|
|
|
17
17
|
- [Branchproof/Analyzer.md](Branchproof/Analyzer.md)
|
|
18
18
|
- [Branchproof/CLI.md](Branchproof/CLI.md)
|
|
19
|
+
- [Branchproof/ChangedCoverage.md](Branchproof/ChangedCoverage.md)
|
|
20
|
+
- [Branchproof/ChangedCoveragePolicy.md](Branchproof/ChangedCoveragePolicy.md)
|
|
21
|
+
- [Branchproof/ChangedDecisionMap.md](Branchproof/ChangedDecisionMap.md)
|
|
22
|
+
- [Branchproof/ChangedScope.md](Branchproof/ChangedScope.md)
|
|
23
|
+
- [Branchproof/Collation.md](Branchproof/Collation.md)
|
|
24
|
+
- [Branchproof/CollationManifest.md](Branchproof/CollationManifest.md)
|
|
19
25
|
- [Branchproof/Comparison.md](Branchproof/Comparison.md)
|
|
20
26
|
- [Branchproof/ComparisonReport.md](Branchproof/ComparisonReport.md)
|
|
21
27
|
- [Branchproof/Configuration.md](Branchproof/Configuration.md)
|
|
@@ -23,19 +29,28 @@ Not documented.
|
|
|
23
29
|
- [Branchproof/Constraints.md](Branchproof/Constraints.md)
|
|
24
30
|
- [Branchproof/CoverageIndex.md](Branchproof/CoverageIndex.md)
|
|
25
31
|
- [Branchproof/CoveragePolicy.md](Branchproof/CoveragePolicy.md)
|
|
32
|
+
- [Branchproof/CoverageSummary.md](Branchproof/CoverageSummary.md)
|
|
26
33
|
- [Branchproof/DecisionSyntax.md](Branchproof/DecisionSyntax.md)
|
|
27
34
|
- [Branchproof/DecisionTable.md](Branchproof/DecisionTable.md)
|
|
28
35
|
- [Branchproof/DefaultInstrumentation.md](Branchproof/DefaultInstrumentation.md)
|
|
29
36
|
- [Branchproof/DefaultRuntime.md](Branchproof/DefaultRuntime.md)
|
|
30
37
|
- [Branchproof/DefaultSyntax.md](Branchproof/DefaultSyntax.md)
|
|
38
|
+
- [Branchproof/Doctor/TerminalRenderer.md](Branchproof/Doctor/TerminalRenderer.md)
|
|
39
|
+
- [Branchproof/Doctor.md](Branchproof/Doctor.md)
|
|
31
40
|
- [Branchproof/Error.md](Branchproof/Error.md)
|
|
32
41
|
- [Branchproof/Evidence.md](Branchproof/Evidence.md)
|
|
33
42
|
- [Branchproof/ExceptionInstrumentation.md](Branchproof/ExceptionInstrumentation.md)
|
|
34
43
|
- [Branchproof/ExceptionRuntime.md](Branchproof/ExceptionRuntime.md)
|
|
35
44
|
- [Branchproof/ExceptionSyntax.md](Branchproof/ExceptionSyntax.md)
|
|
36
45
|
- [Branchproof/ExtendedAlternativeRuntime.md](Branchproof/ExtendedAlternativeRuntime.md)
|
|
46
|
+
- [Branchproof/FallbackInstrumentation.md](Branchproof/FallbackInstrumentation.md)
|
|
47
|
+
- [Branchproof/FallbackRuntime.md](Branchproof/FallbackRuntime.md)
|
|
48
|
+
- [Branchproof/FallbackSyntax.md](Branchproof/FallbackSyntax.md)
|
|
37
49
|
- [Branchproof/FlowInstrumentation.md](Branchproof/FlowInstrumentation.md)
|
|
38
50
|
- [Branchproof/FocusedReport.md](Branchproof/FocusedReport.md)
|
|
51
|
+
- [Branchproof/GitChanges.md](Branchproof/GitChanges.md)
|
|
52
|
+
- [Branchproof/GithubReport.md](Branchproof/GithubReport.md)
|
|
53
|
+
- [Branchproof/HtmlReport.md](Branchproof/HtmlReport.md)
|
|
39
54
|
- [Branchproof/Instrumenter.md](Branchproof/Instrumenter.md)
|
|
40
55
|
- [Branchproof/IterationInstrumentation.md](Branchproof/IterationInstrumentation.md)
|
|
41
56
|
- [Branchproof/IterationRuntime.md](Branchproof/IterationRuntime.md)
|
|
@@ -54,6 +69,7 @@ Not documented.
|
|
|
54
69
|
- [Branchproof/RSpecAdapter.md](Branchproof/RSpecAdapter.md)
|
|
55
70
|
- [Branchproof/RailsSupport/Error.md](Branchproof/RailsSupport/Error.md)
|
|
56
71
|
- [Branchproof/RailsSupport.md](Branchproof/RailsSupport.md)
|
|
72
|
+
- [Branchproof/RakeTask.md](Branchproof/RakeTask.md)
|
|
57
73
|
- [Branchproof/Records.md](Branchproof/Records.md)
|
|
58
74
|
- [Branchproof/Report.md](Branchproof/Report.md)
|
|
59
75
|
- [Branchproof/ReportSelection.md](Branchproof/ReportSelection.md)
|
|
@@ -61,6 +77,10 @@ Not documented.
|
|
|
61
77
|
- [Branchproof/RuntimeFlow.md](Branchproof/RuntimeFlow.md)
|
|
62
78
|
- [Branchproof/SavedReport.md](Branchproof/SavedReport.md)
|
|
63
79
|
- [Branchproof/Source.md](Branchproof/Source.md)
|
|
80
|
+
- [Branchproof/SummaryRanking/Decision.md](Branchproof/SummaryRanking/Decision.md)
|
|
81
|
+
- [Branchproof/SummaryRanking/SourceFile.md](Branchproof/SummaryRanking/SourceFile.md)
|
|
82
|
+
- [Branchproof/SummaryRanking.md](Branchproof/SummaryRanking.md)
|
|
83
|
+
- [Branchproof/SummaryReport.md](Branchproof/SummaryReport.md)
|
|
64
84
|
- [Branchproof/ValueInstrumentation.md](Branchproof/ValueInstrumentation.md)
|
|
65
85
|
- [Branchproof/ValueRuntime.md](Branchproof/ValueRuntime.md)
|
|
66
86
|
- [Branchproof/ValueSyntax.md](Branchproof/ValueSyntax.md)
|
data/doc/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,87 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.12.0] - 2026-10-05
|
|
4
|
+
|
|
5
|
+
- Fix compilation of instrumented rescue bodies with early returns when Ruby
|
|
6
|
+
branch coverage is enabled, preserving return values, exception handling,
|
|
7
|
+
and `ensure` behavior.
|
|
8
|
+
- Combine compatible serial reports with `branchproof collate`, recomputing
|
|
9
|
+
coverage and gates from merged observations. An optional expected-shard
|
|
10
|
+
manifest distinguishes complete collections from missing or unknown inputs;
|
|
11
|
+
incomplete collections cannot pass. Schema `1.7` retains shard provenance,
|
|
12
|
+
while existing analyze schemas remain unchanged. Terminal, GitHub, and HTML
|
|
13
|
+
output disclose collection status. No application boot or test run is needed.
|
|
14
|
+
- Support serial plain Ruby applications using Minitest 6 while retaining
|
|
15
|
+
Minitest 5.25.5 and later. Doctor accepts the same `>= 5.25.5, < 7` range.
|
|
16
|
+
Recognize Minitest 6 parallel scheduling and reject bisect/server execution
|
|
17
|
+
before test bodies run. Frameworks remain application-supplied dependencies.
|
|
18
|
+
- Add independent changed-decision gates with `--minimum-changed`, paired with
|
|
19
|
+
`analyze --changed-since` or a saved report's captured scope. Terminal, GitHub,
|
|
20
|
+
and HTML show changed-policy results; JSON schema `1.6` records and validates
|
|
21
|
+
them. Valid empty scopes are explicitly not applicable, and incomplete or
|
|
22
|
+
unavailable evidence cannot pass a changed gate.
|
|
23
|
+
- Explain missing MC/DC evidence using captured expressions, an observed vector,
|
|
24
|
+
and a suggested counterpart. Shared report wording distinguishes hypothetical
|
|
25
|
+
candidates from observations and preserves short-circuit information.
|
|
26
|
+
- Add `branchproof doctor` for static setup checks of the Ruby runtime, selected
|
|
27
|
+
test framework metadata, project configuration, and source/test file selection.
|
|
28
|
+
The command reports terminal or JSON results without loading project code or
|
|
29
|
+
running tests; it exits 2 when setup is blocked. See the README for its
|
|
30
|
+
readiness limits and JSON shape.
|
|
31
|
+
- Make Minitest and RSpec application-supplied optional dependencies. Branchproof
|
|
32
|
+
now needs only Prism at runtime; saved reports can be rendered and compared
|
|
33
|
+
without either test framework installed.
|
|
34
|
+
- Render saved reports as self-contained offline HTML with `branchproof report
|
|
35
|
+
snapshot.json --format html`. HTML preserves whole-run policy and exit status,
|
|
36
|
+
supports display filters, and can be uploaded as a CI artifact without rerunning
|
|
37
|
+
tests; HTML is unavailable for live analysis and comparison.
|
|
38
|
+
- Add `analyze --changed-since REF` for informational coverage of current
|
|
39
|
+
decisions affected by tracked staged and unstaged worktree changes. Tests,
|
|
40
|
+
whole-run coverage, and minimum gates retain their existing scope; captured
|
|
41
|
+
changed-scope reports use JSON schema `1.5` and remain available offline.
|
|
42
|
+
- Speed up level-3 supporting-set minimization by avoiding repeated Set
|
|
43
|
+
differences in greedy selection. Large synthetic RSpec and Minitest runs
|
|
44
|
+
take 70–77% less end-to-end time on Ruby 4.0.1; selected sets, search
|
|
45
|
+
budgets, report fields, and exit statuses are preserved. See the
|
|
46
|
+
[performance record](https://github.com/lucianghinda/branchproof/blob/main/docs/benchmarks/supporting-set-performance-2026-10-02.md)
|
|
47
|
+
for measurements and allocation/memory limits.
|
|
48
|
+
|
|
49
|
+
- Require Ruby 4.0 or newer and run core, RSpec, and Rails CI on Ruby 4.0.
|
|
50
|
+
- `branchproof mutate` now exits with status 2 and says that mutation testing
|
|
51
|
+
is not supported yet, instead of the generic unknown-command error.
|
|
52
|
+
- Add RBS signatures for `Branchproof::Worker`.
|
|
53
|
+
- Add `--view summary` for `analyze` and `report`. It ranks source files and
|
|
54
|
+
decisions with gaps: unexecuted decisions first, then the most missing
|
|
55
|
+
decision-table rules, unproven MC/DC conditions, and missing alternatives.
|
|
56
|
+
Each row shows its location, counts with denominators, the cases to test
|
|
57
|
+
(level 2+), and the tests that already reach the decision (level 3).
|
|
58
|
+
`--top`, `--focus`, and `--missing-only` apply; global summaries, gates,
|
|
59
|
+
and exit status are unchanged.
|
|
60
|
+
- Add `--format github` for `analyze` and `report`. It prints GitHub Actions
|
|
61
|
+
annotations in summary-view order, errors for failed or incomplete runs
|
|
62
|
+
and unmet policy gates, and a final coverage notice. Annotation paths are
|
|
63
|
+
made repository-relative with `GITHUB_WORKSPACE`. When `GITHUB_STEP_SUMMARY` is set, it
|
|
64
|
+
also appends a Markdown job summary with the ladder, gates, and ranked gaps.
|
|
65
|
+
- Add `Branchproof::RakeTask`. `require "branchproof/rake_task"` defines a
|
|
66
|
+
Rake task that runs `branchproof analyze` in a subprocess with the options
|
|
67
|
+
set in the Rakefile. Unset options keep the CLI and `.branchproof.json`
|
|
68
|
+
defaults, and a non-zero CLI exit status fails the Rake process with the
|
|
69
|
+
same status.
|
|
70
|
+
|
|
71
|
+
- Report value-context `||` chains that end in a string, symbol, or numeric
|
|
72
|
+
literal (including interpolated strings and symbols), such as
|
|
73
|
+
`name.presence || entry&.title || "Item #{id}"`, as `fallback` alternatives:
|
|
74
|
+
each operand is an alternative, covered when a test makes it the one that
|
|
75
|
+
supplies the value. These chains are no longer Boolean `short_circuit`
|
|
76
|
+
decisions, so they leave the MC/DC and decision-table denominators. Chains
|
|
77
|
+
used as conditions (`if`, `unless`, `while`, `until`, ternary, and
|
|
78
|
+
`case`/`when`), chains that end in `true`, `false`, or `nil`, keyword `or`,
|
|
79
|
+
and chains whose operands contain `&&`, `||`, `!`, or a jump (`return`,
|
|
80
|
+
`break`, `next`, `redo`, `retry`) keep Boolean treatment.
|
|
81
|
+
- Decision IDs for these expressions change because their context changes.
|
|
82
|
+
Comparisons against reports made with earlier versions show them as removed
|
|
83
|
+
`short_circuit` decisions and new `fallback` decisions.
|
|
84
|
+
|
|
3
85
|
## [0.11.1] - 2026-09-28
|
|
4
86
|
|
|
5
87
|
- Treat string, interpolated string, symbol, and numeric literal conditions as
|