From 23e52a3e12e9073cdc59ae714289d11dd3b9fb1c Mon Sep 17 00:00:00 2001
From: Russ Cox <rsc@golang.org>
Date: Mon, 8 May 2023 15:03:43 -0400
Subject: [PATCH] bisect: diagnose bad targets better

If a run fails but prints no matches, that's usually a misconfiguration
of the target or a build failure or something like that. Stop immediately
in the run method, instead of having to check for the case later.
This way, this failure mode is diagnosed more quickly and more consistently.

Change-Id: I43141c499b04e304bfb0417a5efd1e1b5dc2ba5e
Reviewed-on: https://go-review.googlesource.com/c/tools/+/493618
Reviewed-by: David Chase <drchase@google.com>
Auto-Submit: Russ Cox <rsc@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
---
 cmd/bisect/main.go              |  10 +-
 cmd/bisect/testdata/basic.txt   |  48 ++++----
 cmd/bisect/testdata/count2.txt  |  94 +++++++--------
 cmd/bisect/testdata/double.txt  |  72 ++++++------
 cmd/bisect/testdata/max1.txt    |  24 ++--
 cmd/bisect/testdata/max2.txt    |  78 ++++++-------
 cmd/bisect/testdata/maxset.txt  | 124 ++++++++++----------
 cmd/bisect/testdata/maxset1.txt |  10 +-
 cmd/bisect/testdata/maxset4.txt | 196 ++++++++++++++++----------------
 cmd/bisect/testdata/negate.txt  |  72 ++++++------
 cmd/bisect/testdata/rand.txt    |  74 ++++++------
 cmd/bisect/testdata/rand1.txt   |  32 +++---
 cmd/bisect/testdata/rand2.txt   |  22 ++--
 13 files changed, 430 insertions(+), 426 deletions(-)

diff --git a/cmd/bisect/main.go b/cmd/bisect/main.go
index 5bdb400b91e..1fc2b0283e0 100644
--- a/cmd/bisect/main.go
+++ b/cmd/bisect/main.go
@@ -240,13 +240,13 @@ func (b *Bisect) Search() bool {
 	switch {
 	case runN.Success && !runY.Success:
 		b.Logf("target succeeds with no changes, fails with all changes")
-		b.Logf("searching for minimal set of changes to enable to cause failure")
+		b.Logf("searching for minimal set of enabled changes causing failure")
 		broken = runY
 		b.Disable = false
 
 	case !runN.Success && runY.Success:
 		b.Logf("target fails with no changes, succeeds with all changes")
-		b.Logf("searching for minimal set of changes to disable to cause failure")
+		b.Logf("searching for minimal set of disabled changes causing failure")
 		broken = runN
 		b.Disable = true
 
@@ -500,7 +500,7 @@ func (b *Bisect) run(suffix string) *Result {
 	// There is no newline in the log print.
 	// The line will be completed when the command finishes.
 	cmdText := strings.Join(append(append(env, b.Cmd), args...), " ")
-	fmt.Fprintf(b.Stderr, "bisect: run %s...", cmdText)
+	fmt.Fprintf(b.Stderr, "bisect: run: %s...", cmdText)
 
 	// Run command with args and env.
 	var out []byte
@@ -567,6 +567,10 @@ func (b *Bisect) run(suffix string) *Result {
 		fmt.Fprintf(b.Stderr, " FAIL (%d matches)\n", len(r.MatchIDs))
 	}
 
+	if err != nil && len(r.MatchIDs) == 0 {
+		b.Fatalf("target failed without printing any matches\n%s", r.Out)
+	}
+
 	// In verbose mode, print extra debugging: all the lines with match markers.
 	if b.Verbose {
 		b.Logf("matches:\n%s", strings.Join(r.MatchFull, "\n\t"))
diff --git a/cmd/bisect/testdata/basic.txt b/cmd/bisect/testdata/basic.txt
index 97c64fc5d09..57543bd5af4 100644
--- a/cmd/bisect/testdata/basic.txt
+++ b/cmd/bisect/testdata/basic.txt
@@ -8,37 +8,37 @@ apricot
 ---
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... FAIL (45 matches)
-bisect: run test +00... ok (23 matches)
-bisect: run test +10... FAIL (22 matches)
-bisect: run test +010... FAIL (11 matches)
-bisect: run test +0010... FAIL (6 matches)
-bisect: run test +00010... FAIL (3 matches)
-bisect: run test +000010... FAIL (2 matches)
-bisect: run test +0000010... FAIL (1 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... FAIL (45 matches)
+bisect: run: test +00... ok (23 matches)
+bisect: run: test +10... FAIL (22 matches)
+bisect: run: test +010... FAIL (11 matches)
+bisect: run: test +0010... FAIL (6 matches)
+bisect: run: test +00010... FAIL (3 matches)
+bisect: run: test +000010... FAIL (2 matches)
+bisect: run: test +0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000010... FAIL (1 matches)
+bisect: run: test v+0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000010... FAIL (89 matches)
+bisect: run: test -0000010... FAIL (89 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-0000010... FAIL (44 matches)
-bisect: run test +00-0000010... ok (23 matches)
-bisect: run test +10-0000010... FAIL (21 matches)
-bisect: run test +010-0000010... ok (10 matches)
-bisect: run test +110-0000010... FAIL (11 matches)
-bisect: run test +0110-0000010... FAIL (6 matches)
-bisect: run test +00110-0000010... FAIL (3 matches)
-bisect: run test +000110-0000010... FAIL (2 matches)
-bisect: run test +0000110-0000010... FAIL (1 matches)
+bisect: run: test +0-0000010... FAIL (44 matches)
+bisect: run: test +00-0000010... ok (23 matches)
+bisect: run: test +10-0000010... FAIL (21 matches)
+bisect: run: test +010-0000010... ok (10 matches)
+bisect: run: test +110-0000010... FAIL (11 matches)
+bisect: run: test +0110-0000010... FAIL (6 matches)
+bisect: run: test +00110-0000010... FAIL (3 matches)
+bisect: run: test +000110-0000010... FAIL (2 matches)
+bisect: run: test +0000110-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000110-0000010... FAIL (1 matches)
+bisect: run: test v+0000110-0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000110-0000010... ok (88 matches)
+bisect: run: test -0000110-0000010... ok (88 matches)
 bisect: target succeeds with all remaining changes enabled
diff --git a/cmd/bisect/testdata/count2.txt b/cmd/bisect/testdata/count2.txt
index 64d76a7a63c..cee0cd07398 100644
--- a/cmd/bisect/testdata/count2.txt
+++ b/cmd/bisect/testdata/count2.txt
@@ -8,60 +8,60 @@ apricot
 ---
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... FAIL (45 matches)
-bisect: run test +0... FAIL (45 matches)
-bisect: run test +00... ok (23 matches)
-bisect: run test +00... ok (23 matches)
-bisect: run test +10... FAIL (22 matches)
-bisect: run test +10... FAIL (22 matches)
-bisect: run test +010... FAIL (11 matches)
-bisect: run test +010... FAIL (11 matches)
-bisect: run test +0010... FAIL (6 matches)
-bisect: run test +0010... FAIL (6 matches)
-bisect: run test +00010... FAIL (3 matches)
-bisect: run test +00010... FAIL (3 matches)
-bisect: run test +000010... FAIL (2 matches)
-bisect: run test +000010... FAIL (2 matches)
-bisect: run test +0000010... FAIL (1 matches)
-bisect: run test +0000010... FAIL (1 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... FAIL (45 matches)
+bisect: run: test +0... FAIL (45 matches)
+bisect: run: test +00... ok (23 matches)
+bisect: run: test +00... ok (23 matches)
+bisect: run: test +10... FAIL (22 matches)
+bisect: run: test +10... FAIL (22 matches)
+bisect: run: test +010... FAIL (11 matches)
+bisect: run: test +010... FAIL (11 matches)
+bisect: run: test +0010... FAIL (6 matches)
+bisect: run: test +0010... FAIL (6 matches)
+bisect: run: test +00010... FAIL (3 matches)
+bisect: run: test +00010... FAIL (3 matches)
+bisect: run: test +000010... FAIL (2 matches)
+bisect: run: test +000010... FAIL (2 matches)
+bisect: run: test +0000010... FAIL (1 matches)
+bisect: run: test +0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000010... FAIL (1 matches)
-bisect: run test v+0000010... FAIL (1 matches)
+bisect: run: test v+0000010... FAIL (1 matches)
+bisect: run: test v+0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000010... FAIL (89 matches)
-bisect: run test -0000010... FAIL (89 matches)
+bisect: run: test -0000010... FAIL (89 matches)
+bisect: run: test -0000010... FAIL (89 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-0000010... FAIL (44 matches)
-bisect: run test +0-0000010... FAIL (44 matches)
-bisect: run test +00-0000010... ok (23 matches)
-bisect: run test +00-0000010... ok (23 matches)
-bisect: run test +10-0000010... FAIL (21 matches)
-bisect: run test +10-0000010... FAIL (21 matches)
-bisect: run test +010-0000010... ok (10 matches)
-bisect: run test +010-0000010... ok (10 matches)
-bisect: run test +110-0000010... FAIL (11 matches)
-bisect: run test +110-0000010... FAIL (11 matches)
-bisect: run test +0110-0000010... FAIL (6 matches)
-bisect: run test +0110-0000010... FAIL (6 matches)
-bisect: run test +00110-0000010... FAIL (3 matches)
-bisect: run test +00110-0000010... FAIL (3 matches)
-bisect: run test +000110-0000010... FAIL (2 matches)
-bisect: run test +000110-0000010... FAIL (2 matches)
-bisect: run test +0000110-0000010... FAIL (1 matches)
-bisect: run test +0000110-0000010... FAIL (1 matches)
+bisect: run: test +0-0000010... FAIL (44 matches)
+bisect: run: test +0-0000010... FAIL (44 matches)
+bisect: run: test +00-0000010... ok (23 matches)
+bisect: run: test +00-0000010... ok (23 matches)
+bisect: run: test +10-0000010... FAIL (21 matches)
+bisect: run: test +10-0000010... FAIL (21 matches)
+bisect: run: test +010-0000010... ok (10 matches)
+bisect: run: test +010-0000010... ok (10 matches)
+bisect: run: test +110-0000010... FAIL (11 matches)
+bisect: run: test +110-0000010... FAIL (11 matches)
+bisect: run: test +0110-0000010... FAIL (6 matches)
+bisect: run: test +0110-0000010... FAIL (6 matches)
+bisect: run: test +00110-0000010... FAIL (3 matches)
+bisect: run: test +00110-0000010... FAIL (3 matches)
+bisect: run: test +000110-0000010... FAIL (2 matches)
+bisect: run: test +000110-0000010... FAIL (2 matches)
+bisect: run: test +0000110-0000010... FAIL (1 matches)
+bisect: run: test +0000110-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000110-0000010... FAIL (1 matches)
-bisect: run test v+0000110-0000010... FAIL (1 matches)
+bisect: run: test v+0000110-0000010... FAIL (1 matches)
+bisect: run: test v+0000110-0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000110-0000010... ok (88 matches)
-bisect: run test -0000110-0000010... ok (88 matches)
+bisect: run: test -0000110-0000010... ok (88 matches)
+bisect: run: test -0000110-0000010... ok (88 matches)
 bisect: target succeeds with all remaining changes enabled
diff --git a/cmd/bisect/testdata/double.txt b/cmd/bisect/testdata/double.txt
index cf24ac2c96b..93712ad5afe 100644
--- a/cmd/bisect/testdata/double.txt
+++ b/cmd/bisect/testdata/double.txt
@@ -9,49 +9,49 @@ peach
 ---
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... FAIL (45 matches)
-bisect: run test +00... ok (23 matches)
-bisect: run test +10... FAIL (22 matches)
-bisect: run test +010... FAIL (11 matches)
-bisect: run test +0010... FAIL (6 matches)
-bisect: run test +00010... FAIL (3 matches)
-bisect: run test +000010... FAIL (2 matches)
-bisect: run test +0000010... FAIL (1 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... FAIL (45 matches)
+bisect: run: test +00... ok (23 matches)
+bisect: run: test +10... FAIL (22 matches)
+bisect: run: test +010... FAIL (11 matches)
+bisect: run: test +0010... FAIL (6 matches)
+bisect: run: test +00010... FAIL (3 matches)
+bisect: run: test +000010... FAIL (2 matches)
+bisect: run: test +0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000010... FAIL (1 matches)
+bisect: run: test v+0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000010... FAIL (89 matches)
+bisect: run: test -0000010... FAIL (89 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-0000010... ok (44 matches)
-bisect: run test +1-0000010... ok (45 matches)
-bisect: run test +0+1-0000010... FAIL (44 matches)
-bisect: run test +00+1-0000010... ok (23 matches)
-bisect: run test +10+1-0000010... FAIL (21 matches)
-bisect: run test +010+1-0000010... ok (10 matches)
-bisect: run test +110+1-0000010... FAIL (11 matches)
-bisect: run test +0110+1-0000010... FAIL (6 matches)
-bisect: run test +00110+1-0000010... FAIL (3 matches)
-bisect: run test +000110+1-0000010... FAIL (2 matches)
-bisect: run test +0000110+1-0000010... FAIL (1 matches)
-bisect: run test +1+0000110-0000010... FAIL (45 matches)
-bisect: run test +01+0000110-0000010... ok (23 matches)
-bisect: run test +11+0000110-0000010... FAIL (22 matches)
-bisect: run test +011+0000110-0000010... FAIL (11 matches)
-bisect: run test +0011+0000110-0000010... ok (6 matches)
-bisect: run test +1011+0000110-0000010... FAIL (5 matches)
-bisect: run test +01011+0000110-0000010... ok (3 matches)
-bisect: run test +11011+0000110-0000010... FAIL (2 matches)
-bisect: run test +011011+0000110-0000010... ok (1 matches)
-bisect: run test +111011+0000110-0000010... FAIL (1 matches)
+bisect: run: test +0-0000010... ok (44 matches)
+bisect: run: test +1-0000010... ok (45 matches)
+bisect: run: test +0+1-0000010... FAIL (44 matches)
+bisect: run: test +00+1-0000010... ok (23 matches)
+bisect: run: test +10+1-0000010... FAIL (21 matches)
+bisect: run: test +010+1-0000010... ok (10 matches)
+bisect: run: test +110+1-0000010... FAIL (11 matches)
+bisect: run: test +0110+1-0000010... FAIL (6 matches)
+bisect: run: test +00110+1-0000010... FAIL (3 matches)
+bisect: run: test +000110+1-0000010... FAIL (2 matches)
+bisect: run: test +0000110+1-0000010... FAIL (1 matches)
+bisect: run: test +1+0000110-0000010... FAIL (45 matches)
+bisect: run: test +01+0000110-0000010... ok (23 matches)
+bisect: run: test +11+0000110-0000010... FAIL (22 matches)
+bisect: run: test +011+0000110-0000010... FAIL (11 matches)
+bisect: run: test +0011+0000110-0000010... ok (6 matches)
+bisect: run: test +1011+0000110-0000010... FAIL (5 matches)
+bisect: run: test +01011+0000110-0000010... ok (3 matches)
+bisect: run: test +11011+0000110-0000010... FAIL (2 matches)
+bisect: run: test +011011+0000110-0000010... ok (1 matches)
+bisect: run: test +111011+0000110-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000110+111011-0000010... FAIL (2 matches)
+bisect: run: test v+0000110+111011-0000010... FAIL (2 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000110-111011-0000010... ok (87 matches)
+bisect: run: test -0000110-111011-0000010... ok (87 matches)
 bisect: target succeeds with all remaining changes enabled
diff --git a/cmd/bisect/testdata/max1.txt b/cmd/bisect/testdata/max1.txt
index a523ea7294c..e1848d5e5b1 100644
--- a/cmd/bisect/testdata/max1.txt
+++ b/cmd/bisect/testdata/max1.txt
@@ -5,19 +5,19 @@ amber
 ---
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... FAIL (45 matches)
-bisect: run test +00... ok (23 matches)
-bisect: run test +10... FAIL (22 matches)
-bisect: run test +010... FAIL (11 matches)
-bisect: run test +0010... FAIL (6 matches)
-bisect: run test +00010... FAIL (3 matches)
-bisect: run test +000010... FAIL (2 matches)
-bisect: run test +0000010... FAIL (1 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... FAIL (45 matches)
+bisect: run: test +00... ok (23 matches)
+bisect: run: test +10... FAIL (22 matches)
+bisect: run: test +010... FAIL (11 matches)
+bisect: run: test +0010... FAIL (6 matches)
+bisect: run: test +00010... FAIL (3 matches)
+bisect: run: test +000010... FAIL (2 matches)
+bisect: run: test +0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000010... FAIL (1 matches)
+bisect: run: test v+0000010... FAIL (1 matches)
 bisect: FOUND failing change set
diff --git a/cmd/bisect/testdata/max2.txt b/cmd/bisect/testdata/max2.txt
index 63ea3a183c5..9f651692aa3 100644
--- a/cmd/bisect/testdata/max2.txt
+++ b/cmd/bisect/testdata/max2.txt
@@ -10,50 +10,50 @@ red
 ---
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... FAIL (45 matches)
-bisect: run test +00... ok (23 matches)
-bisect: run test +10... FAIL (22 matches)
-bisect: run test +010... FAIL (11 matches)
-bisect: run test +0010... FAIL (6 matches)
-bisect: run test +00010... FAIL (3 matches)
-bisect: run test +000010... FAIL (2 matches)
-bisect: run test +0000010... FAIL (1 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... FAIL (45 matches)
+bisect: run: test +00... ok (23 matches)
+bisect: run: test +10... FAIL (22 matches)
+bisect: run: test +010... FAIL (11 matches)
+bisect: run: test +0010... FAIL (6 matches)
+bisect: run: test +00010... FAIL (3 matches)
+bisect: run: test +000010... FAIL (2 matches)
+bisect: run: test +0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000010... FAIL (1 matches)
+bisect: run: test v+0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000010... FAIL (89 matches)
+bisect: run: test -0000010... FAIL (89 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-0000010... ok (44 matches)
-bisect: run test +1-0000010... FAIL (45 matches)
-bisect: run test +01-0000010... ok (23 matches)
-bisect: run test +11-0000010... ok (22 matches)
-bisect: run test +01+11-0000010... FAIL (23 matches)
-bisect: run test +001+11-0000010... ok (12 matches)
-bisect: run test +101+11-0000010... FAIL (11 matches)
-bisect: run test +0101+11-0000010... ok (6 matches)
-bisect: run test +1101+11-0000010... ok (5 matches)
-bisect: run test +0101+11+1101-0000010... FAIL (6 matches)
-bisect: run test +00101+11+1101-0000010... FAIL (3 matches)
-bisect: run test +000101+11+1101-0000010... FAIL (2 matches)
-bisect: run test +0000101+11+1101-0000010... ok (1 matches)
-bisect: run test +1000101+11+1101-0000010... FAIL (1 matches)
-bisect: run test +1101+11+1000101-0000010... FAIL (5 matches)
-bisect: run test +01101+11+1000101-0000010... FAIL (3 matches)
-bisect: run test +001101+11+1000101-0000010... FAIL (2 matches)
-bisect: run test +0001101+11+1000101-0000010... FAIL (1 matches)
-bisect: run test +11+1000101+0001101-0000010... FAIL (22 matches)
-bisect: run test +011+1000101+0001101-0000010... ok (11 matches)
-bisect: run test +111+1000101+0001101-0000010... FAIL (11 matches)
-bisect: run test +0111+1000101+0001101-0000010... FAIL (6 matches)
-bisect: run test +00111+1000101+0001101-0000010... FAIL (3 matches)
-bisect: run test +000111+1000101+0001101-0000010... ok (2 matches)
-bisect: run test +100111+1000101+0001101-0000010... FAIL (1 matches)
+bisect: run: test +0-0000010... ok (44 matches)
+bisect: run: test +1-0000010... FAIL (45 matches)
+bisect: run: test +01-0000010... ok (23 matches)
+bisect: run: test +11-0000010... ok (22 matches)
+bisect: run: test +01+11-0000010... FAIL (23 matches)
+bisect: run: test +001+11-0000010... ok (12 matches)
+bisect: run: test +101+11-0000010... FAIL (11 matches)
+bisect: run: test +0101+11-0000010... ok (6 matches)
+bisect: run: test +1101+11-0000010... ok (5 matches)
+bisect: run: test +0101+11+1101-0000010... FAIL (6 matches)
+bisect: run: test +00101+11+1101-0000010... FAIL (3 matches)
+bisect: run: test +000101+11+1101-0000010... FAIL (2 matches)
+bisect: run: test +0000101+11+1101-0000010... ok (1 matches)
+bisect: run: test +1000101+11+1101-0000010... FAIL (1 matches)
+bisect: run: test +1101+11+1000101-0000010... FAIL (5 matches)
+bisect: run: test +01101+11+1000101-0000010... FAIL (3 matches)
+bisect: run: test +001101+11+1000101-0000010... FAIL (2 matches)
+bisect: run: test +0001101+11+1000101-0000010... FAIL (1 matches)
+bisect: run: test +11+1000101+0001101-0000010... FAIL (22 matches)
+bisect: run: test +011+1000101+0001101-0000010... ok (11 matches)
+bisect: run: test +111+1000101+0001101-0000010... FAIL (11 matches)
+bisect: run: test +0111+1000101+0001101-0000010... FAIL (6 matches)
+bisect: run: test +00111+1000101+0001101-0000010... FAIL (3 matches)
+bisect: run: test +000111+1000101+0001101-0000010... ok (2 matches)
+bisect: run: test +100111+1000101+0001101-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+1000101+0001101+100111-0000010... FAIL (3 matches)
+bisect: run: test v+1000101+0001101+100111-0000010... FAIL (3 matches)
 bisect: FOUND failing change set
diff --git a/cmd/bisect/testdata/maxset.txt b/cmd/bisect/testdata/maxset.txt
index 8dc47152501..259fa3e57a7 100644
--- a/cmd/bisect/testdata/maxset.txt
+++ b/cmd/bisect/testdata/maxset.txt
@@ -10,75 +10,75 @@ red
 ---
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... FAIL (45 matches)
-bisect: run test +00... ok (23 matches)
-bisect: run test +10... FAIL (22 matches)
-bisect: run test +010... FAIL (11 matches)
-bisect: run test +0010... FAIL (6 matches)
-bisect: run test +00010... FAIL (3 matches)
-bisect: run test +000010... FAIL (2 matches)
-bisect: run test +0000010... FAIL (1 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... FAIL (45 matches)
+bisect: run: test +00... ok (23 matches)
+bisect: run: test +10... FAIL (22 matches)
+bisect: run: test +010... FAIL (11 matches)
+bisect: run: test +0010... FAIL (6 matches)
+bisect: run: test +00010... FAIL (3 matches)
+bisect: run: test +000010... FAIL (2 matches)
+bisect: run: test +0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000010... FAIL (1 matches)
+bisect: run: test v+0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000010... FAIL (89 matches)
+bisect: run: test -0000010... FAIL (89 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-0000010... ok (44 matches)
-bisect: run test +1-0000010... FAIL (45 matches)
-bisect: run test +01-0000010... ok (23 matches)
-bisect: run test +11-0000010... ok (22 matches)
-bisect: run test +01+11-0000010... FAIL (23 matches)
-bisect: run test +001+11-0000010... ok (12 matches)
-bisect: run test +101+11-0000010... FAIL (11 matches)
-bisect: run test +0101+11-0000010... ok (6 matches)
-bisect: run test +1101+11-0000010... ok (5 matches)
-bisect: run test +0101+11+1101-0000010... FAIL (6 matches)
-bisect: run test +00101+11+1101-0000010... FAIL (3 matches)
-bisect: run test +000101+11+1101-0000010... FAIL (2 matches)
-bisect: run test +0000101+11+1101-0000010... ok (1 matches)
-bisect: run test +1000101+11+1101-0000010... FAIL (1 matches)
-bisect: run test +1101+11+1000101-0000010... FAIL (5 matches)
-bisect: run test +01101+11+1000101-0000010... FAIL (3 matches)
-bisect: run test +001101+11+1000101-0000010... FAIL (2 matches)
-bisect: run test +0001101+11+1000101-0000010... FAIL (1 matches)
-bisect: run test +11+1000101+0001101-0000010... FAIL (22 matches)
-bisect: run test +011+1000101+0001101-0000010... ok (11 matches)
-bisect: run test +111+1000101+0001101-0000010... FAIL (11 matches)
-bisect: run test +0111+1000101+0001101-0000010... FAIL (6 matches)
-bisect: run test +00111+1000101+0001101-0000010... FAIL (3 matches)
-bisect: run test +000111+1000101+0001101-0000010... ok (2 matches)
-bisect: run test +100111+1000101+0001101-0000010... FAIL (1 matches)
+bisect: run: test +0-0000010... ok (44 matches)
+bisect: run: test +1-0000010... FAIL (45 matches)
+bisect: run: test +01-0000010... ok (23 matches)
+bisect: run: test +11-0000010... ok (22 matches)
+bisect: run: test +01+11-0000010... FAIL (23 matches)
+bisect: run: test +001+11-0000010... ok (12 matches)
+bisect: run: test +101+11-0000010... FAIL (11 matches)
+bisect: run: test +0101+11-0000010... ok (6 matches)
+bisect: run: test +1101+11-0000010... ok (5 matches)
+bisect: run: test +0101+11+1101-0000010... FAIL (6 matches)
+bisect: run: test +00101+11+1101-0000010... FAIL (3 matches)
+bisect: run: test +000101+11+1101-0000010... FAIL (2 matches)
+bisect: run: test +0000101+11+1101-0000010... ok (1 matches)
+bisect: run: test +1000101+11+1101-0000010... FAIL (1 matches)
+bisect: run: test +1101+11+1000101-0000010... FAIL (5 matches)
+bisect: run: test +01101+11+1000101-0000010... FAIL (3 matches)
+bisect: run: test +001101+11+1000101-0000010... FAIL (2 matches)
+bisect: run: test +0001101+11+1000101-0000010... FAIL (1 matches)
+bisect: run: test +11+1000101+0001101-0000010... FAIL (22 matches)
+bisect: run: test +011+1000101+0001101-0000010... ok (11 matches)
+bisect: run: test +111+1000101+0001101-0000010... FAIL (11 matches)
+bisect: run: test +0111+1000101+0001101-0000010... FAIL (6 matches)
+bisect: run: test +00111+1000101+0001101-0000010... FAIL (3 matches)
+bisect: run: test +000111+1000101+0001101-0000010... ok (2 matches)
+bisect: run: test +100111+1000101+0001101-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+1000101+0001101+100111-0000010... FAIL (3 matches)
+bisect: run: test v+1000101+0001101+100111-0000010... FAIL (3 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -1000101-0001101-100111-0000010... FAIL (86 matches)
+bisect: run: test -1000101-0001101-100111-0000010... FAIL (86 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-1000101-0001101-100111-0000010... ok (44 matches)
-bisect: run test +1-1000101-0001101-100111-0000010... ok (42 matches)
-bisect: run test +0+1-1000101-0001101-100111-0000010... FAIL (44 matches)
-bisect: run test +00+1-1000101-0001101-100111-0000010... FAIL (23 matches)
-bisect: run test +000+1-1000101-0001101-100111-0000010... ok (12 matches)
-bisect: run test +100+1-1000101-0001101-100111-0000010... ok (11 matches)
-bisect: run test +000+1+100-1000101-0001101-100111-0000010... FAIL (12 matches)
-bisect: run test +0000+1+100-1000101-0001101-100111-0000010... FAIL (6 matches)
-bisect: run test +00000+1+100-1000101-0001101-100111-0000010... FAIL (3 matches)
-bisect: run test +000000+1+100-1000101-0001101-100111-0000010... ok (2 matches)
-bisect: run test +100000+1+100-1000101-0001101-100111-0000010... FAIL (1 matches)
-bisect: run test +100+1+100000-1000101-0001101-100111-0000010... FAIL (11 matches)
-bisect: run test +0100+1+100000-1000101-0001101-100111-0000010... ok (6 matches)
-bisect: run test +1100+1+100000-1000101-0001101-100111-0000010... FAIL (5 matches)
-bisect: run test +01100+1+100000-1000101-0001101-100111-0000010... FAIL (3 matches)
-bisect: run test +001100+1+100000-1000101-0001101-100111-0000010... FAIL (2 matches)
-bisect: run test +0001100+1+100000-1000101-0001101-100111-0000010... FAIL (1 matches)
-bisect: run test +1+100000+0001100-1000101-0001101-100111-0000010... FAIL (42 matches)
-bisect: run test +01+100000+0001100-1000101-0001101-100111-0000010... FAIL (21 matches)
-bisect: run test +001+100000+0001100-1000101-0001101-100111-0000010... FAIL (12 matches)
-bisect: run test +0001+100000+0001100-1000101-0001101-100111-0000010... ok (6 matches)
-bisect: run test +1001+100000+0001100-1000101-0001101-100111-0000010... ok (6 matches)
+bisect: run: test +0-1000101-0001101-100111-0000010... ok (44 matches)
+bisect: run: test +1-1000101-0001101-100111-0000010... ok (42 matches)
+bisect: run: test +0+1-1000101-0001101-100111-0000010... FAIL (44 matches)
+bisect: run: test +00+1-1000101-0001101-100111-0000010... FAIL (23 matches)
+bisect: run: test +000+1-1000101-0001101-100111-0000010... ok (12 matches)
+bisect: run: test +100+1-1000101-0001101-100111-0000010... ok (11 matches)
+bisect: run: test +000+1+100-1000101-0001101-100111-0000010... FAIL (12 matches)
+bisect: run: test +0000+1+100-1000101-0001101-100111-0000010... FAIL (6 matches)
+bisect: run: test +00000+1+100-1000101-0001101-100111-0000010... FAIL (3 matches)
+bisect: run: test +000000+1+100-1000101-0001101-100111-0000010... ok (2 matches)
+bisect: run: test +100000+1+100-1000101-0001101-100111-0000010... FAIL (1 matches)
+bisect: run: test +100+1+100000-1000101-0001101-100111-0000010... FAIL (11 matches)
+bisect: run: test +0100+1+100000-1000101-0001101-100111-0000010... ok (6 matches)
+bisect: run: test +1100+1+100000-1000101-0001101-100111-0000010... FAIL (5 matches)
+bisect: run: test +01100+1+100000-1000101-0001101-100111-0000010... FAIL (3 matches)
+bisect: run: test +001100+1+100000-1000101-0001101-100111-0000010... FAIL (2 matches)
+bisect: run: test +0001100+1+100000-1000101-0001101-100111-0000010... FAIL (1 matches)
+bisect: run: test +1+100000+0001100-1000101-0001101-100111-0000010... FAIL (42 matches)
+bisect: run: test +01+100000+0001100-1000101-0001101-100111-0000010... FAIL (21 matches)
+bisect: run: test +001+100000+0001100-1000101-0001101-100111-0000010... FAIL (12 matches)
+bisect: run: test +0001+100000+0001100-1000101-0001101-100111-0000010... ok (6 matches)
+bisect: run: test +1001+100000+0001100-1000101-0001101-100111-0000010... ok (6 matches)
diff --git a/cmd/bisect/testdata/maxset1.txt b/cmd/bisect/testdata/maxset1.txt
index 96bf5782191..250d4a6fade 100644
--- a/cmd/bisect/testdata/maxset1.txt
+++ b/cmd/bisect/testdata/maxset1.txt
@@ -2,12 +2,12 @@
 -- stdout --
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... ok (45 matches)
-bisect: run test +1... ok (45 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... ok (45 matches)
+bisect: run: test +1... ok (45 matches)
 bisect: fatal error: cannot find any failing change sets of size ≤ 1
 <bisect failed>
diff --git a/cmd/bisect/testdata/maxset4.txt b/cmd/bisect/testdata/maxset4.txt
index e0dbc587504..ac02a677ae2 100644
--- a/cmd/bisect/testdata/maxset4.txt
+++ b/cmd/bisect/testdata/maxset4.txt
@@ -20,119 +20,119 @@ peach
 ---
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... FAIL (45 matches)
-bisect: run test +00... ok (23 matches)
-bisect: run test +10... FAIL (22 matches)
-bisect: run test +010... FAIL (11 matches)
-bisect: run test +0010... FAIL (6 matches)
-bisect: run test +00010... FAIL (3 matches)
-bisect: run test +000010... FAIL (2 matches)
-bisect: run test +0000010... FAIL (1 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... FAIL (45 matches)
+bisect: run: test +00... ok (23 matches)
+bisect: run: test +10... FAIL (22 matches)
+bisect: run: test +010... FAIL (11 matches)
+bisect: run: test +0010... FAIL (6 matches)
+bisect: run: test +00010... FAIL (3 matches)
+bisect: run: test +000010... FAIL (2 matches)
+bisect: run: test +0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000010... FAIL (1 matches)
+bisect: run: test v+0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000010... FAIL (89 matches)
+bisect: run: test -0000010... FAIL (89 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-0000010... ok (44 matches)
-bisect: run test +1-0000010... FAIL (45 matches)
-bisect: run test +01-0000010... ok (23 matches)
-bisect: run test +11-0000010... ok (22 matches)
-bisect: run test +01+11-0000010... FAIL (23 matches)
-bisect: run test +001+11-0000010... ok (12 matches)
-bisect: run test +101+11-0000010... FAIL (11 matches)
-bisect: run test +0101+11-0000010... ok (6 matches)
-bisect: run test +1101+11-0000010... ok (5 matches)
-bisect: run test +0101+11+1101-0000010... FAIL (6 matches)
-bisect: run test +00101+11+1101-0000010... FAIL (3 matches)
-bisect: run test +000101+11+1101-0000010... FAIL (2 matches)
-bisect: run test +0000101+11+1101-0000010... ok (1 matches)
-bisect: run test +1000101+11+1101-0000010... FAIL (1 matches)
-bisect: run test +1101+11+1000101-0000010... FAIL (5 matches)
-bisect: run test +01101+11+1000101-0000010... FAIL (3 matches)
-bisect: run test +001101+11+1000101-0000010... FAIL (2 matches)
-bisect: run test +0001101+11+1000101-0000010... FAIL (1 matches)
-bisect: run test +11+1000101+0001101-0000010... FAIL (22 matches)
-bisect: run test +011+1000101+0001101-0000010... ok (11 matches)
-bisect: run test +111+1000101+0001101-0000010... FAIL (11 matches)
-bisect: run test +0111+1000101+0001101-0000010... FAIL (6 matches)
-bisect: run test +00111+1000101+0001101-0000010... FAIL (3 matches)
-bisect: run test +000111+1000101+0001101-0000010... ok (2 matches)
-bisect: run test +100111+1000101+0001101-0000010... FAIL (1 matches)
+bisect: run: test +0-0000010... ok (44 matches)
+bisect: run: test +1-0000010... FAIL (45 matches)
+bisect: run: test +01-0000010... ok (23 matches)
+bisect: run: test +11-0000010... ok (22 matches)
+bisect: run: test +01+11-0000010... FAIL (23 matches)
+bisect: run: test +001+11-0000010... ok (12 matches)
+bisect: run: test +101+11-0000010... FAIL (11 matches)
+bisect: run: test +0101+11-0000010... ok (6 matches)
+bisect: run: test +1101+11-0000010... ok (5 matches)
+bisect: run: test +0101+11+1101-0000010... FAIL (6 matches)
+bisect: run: test +00101+11+1101-0000010... FAIL (3 matches)
+bisect: run: test +000101+11+1101-0000010... FAIL (2 matches)
+bisect: run: test +0000101+11+1101-0000010... ok (1 matches)
+bisect: run: test +1000101+11+1101-0000010... FAIL (1 matches)
+bisect: run: test +1101+11+1000101-0000010... FAIL (5 matches)
+bisect: run: test +01101+11+1000101-0000010... FAIL (3 matches)
+bisect: run: test +001101+11+1000101-0000010... FAIL (2 matches)
+bisect: run: test +0001101+11+1000101-0000010... FAIL (1 matches)
+bisect: run: test +11+1000101+0001101-0000010... FAIL (22 matches)
+bisect: run: test +011+1000101+0001101-0000010... ok (11 matches)
+bisect: run: test +111+1000101+0001101-0000010... FAIL (11 matches)
+bisect: run: test +0111+1000101+0001101-0000010... FAIL (6 matches)
+bisect: run: test +00111+1000101+0001101-0000010... FAIL (3 matches)
+bisect: run: test +000111+1000101+0001101-0000010... ok (2 matches)
+bisect: run: test +100111+1000101+0001101-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+1000101+0001101+100111-0000010... FAIL (3 matches)
+bisect: run: test v+1000101+0001101+100111-0000010... FAIL (3 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -1000101-0001101-100111-0000010... FAIL (86 matches)
+bisect: run: test -1000101-0001101-100111-0000010... FAIL (86 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-1000101-0001101-100111-0000010... ok (44 matches)
-bisect: run test +1-1000101-0001101-100111-0000010... ok (42 matches)
-bisect: run test +0+1-1000101-0001101-100111-0000010... FAIL (44 matches)
-bisect: run test +00+1-1000101-0001101-100111-0000010... FAIL (23 matches)
-bisect: run test +000+1-1000101-0001101-100111-0000010... ok (12 matches)
-bisect: run test +100+1-1000101-0001101-100111-0000010... ok (11 matches)
-bisect: run test +000+1+100-1000101-0001101-100111-0000010... FAIL (12 matches)
-bisect: run test +0000+1+100-1000101-0001101-100111-0000010... FAIL (6 matches)
-bisect: run test +00000+1+100-1000101-0001101-100111-0000010... FAIL (3 matches)
-bisect: run test +000000+1+100-1000101-0001101-100111-0000010... ok (2 matches)
-bisect: run test +100000+1+100-1000101-0001101-100111-0000010... FAIL (1 matches)
-bisect: run test +100+1+100000-1000101-0001101-100111-0000010... FAIL (11 matches)
-bisect: run test +0100+1+100000-1000101-0001101-100111-0000010... ok (6 matches)
-bisect: run test +1100+1+100000-1000101-0001101-100111-0000010... FAIL (5 matches)
-bisect: run test +01100+1+100000-1000101-0001101-100111-0000010... FAIL (3 matches)
-bisect: run test +001100+1+100000-1000101-0001101-100111-0000010... FAIL (2 matches)
-bisect: run test +0001100+1+100000-1000101-0001101-100111-0000010... FAIL (1 matches)
-bisect: run test +1+100000+0001100-1000101-0001101-100111-0000010... FAIL (42 matches)
-bisect: run test +01+100000+0001100-1000101-0001101-100111-0000010... FAIL (21 matches)
-bisect: run test +001+100000+0001100-1000101-0001101-100111-0000010... FAIL (12 matches)
-bisect: run test +0001+100000+0001100-1000101-0001101-100111-0000010... ok (6 matches)
-bisect: run test +1001+100000+0001100-1000101-0001101-100111-0000010... ok (6 matches)
-bisect: run test +0001+100000+0001100+1001-1000101-0001101-100111-0000010... FAIL (6 matches)
-bisect: run test +00001+100000+0001100+1001-1000101-0001101-100111-0000010... ok (3 matches)
-bisect: run test +10001+100000+0001100+1001-1000101-0001101-100111-0000010... FAIL (3 matches)
-bisect: run test +010001+100000+0001100+1001-1000101-0001101-100111-0000010... ok (2 matches)
-bisect: run test +110001+100000+0001100+1001-1000101-0001101-100111-0000010... FAIL (1 matches)
-bisect: run test +1001+100000+0001100+110001-1000101-0001101-100111-0000010... FAIL (6 matches)
-bisect: run test +01001+100000+0001100+110001-1000101-0001101-100111-0000010... ok (3 matches)
-bisect: run test +11001+100000+0001100+110001-1000101-0001101-100111-0000010... FAIL (3 matches)
-bisect: run test +011001+100000+0001100+110001-1000101-0001101-100111-0000010... FAIL (2 matches)
-bisect: run test +0011001+100000+0001100+110001-1000101-0001101-100111-0000010... ok (1 matches)
-bisect: run test +1011001+100000+0001100+110001-1000101-0001101-100111-0000010... FAIL (1 matches)
+bisect: run: test +0-1000101-0001101-100111-0000010... ok (44 matches)
+bisect: run: test +1-1000101-0001101-100111-0000010... ok (42 matches)
+bisect: run: test +0+1-1000101-0001101-100111-0000010... FAIL (44 matches)
+bisect: run: test +00+1-1000101-0001101-100111-0000010... FAIL (23 matches)
+bisect: run: test +000+1-1000101-0001101-100111-0000010... ok (12 matches)
+bisect: run: test +100+1-1000101-0001101-100111-0000010... ok (11 matches)
+bisect: run: test +000+1+100-1000101-0001101-100111-0000010... FAIL (12 matches)
+bisect: run: test +0000+1+100-1000101-0001101-100111-0000010... FAIL (6 matches)
+bisect: run: test +00000+1+100-1000101-0001101-100111-0000010... FAIL (3 matches)
+bisect: run: test +000000+1+100-1000101-0001101-100111-0000010... ok (2 matches)
+bisect: run: test +100000+1+100-1000101-0001101-100111-0000010... FAIL (1 matches)
+bisect: run: test +100+1+100000-1000101-0001101-100111-0000010... FAIL (11 matches)
+bisect: run: test +0100+1+100000-1000101-0001101-100111-0000010... ok (6 matches)
+bisect: run: test +1100+1+100000-1000101-0001101-100111-0000010... FAIL (5 matches)
+bisect: run: test +01100+1+100000-1000101-0001101-100111-0000010... FAIL (3 matches)
+bisect: run: test +001100+1+100000-1000101-0001101-100111-0000010... FAIL (2 matches)
+bisect: run: test +0001100+1+100000-1000101-0001101-100111-0000010... FAIL (1 matches)
+bisect: run: test +1+100000+0001100-1000101-0001101-100111-0000010... FAIL (42 matches)
+bisect: run: test +01+100000+0001100-1000101-0001101-100111-0000010... FAIL (21 matches)
+bisect: run: test +001+100000+0001100-1000101-0001101-100111-0000010... FAIL (12 matches)
+bisect: run: test +0001+100000+0001100-1000101-0001101-100111-0000010... ok (6 matches)
+bisect: run: test +1001+100000+0001100-1000101-0001101-100111-0000010... ok (6 matches)
+bisect: run: test +0001+100000+0001100+1001-1000101-0001101-100111-0000010... FAIL (6 matches)
+bisect: run: test +00001+100000+0001100+1001-1000101-0001101-100111-0000010... ok (3 matches)
+bisect: run: test +10001+100000+0001100+1001-1000101-0001101-100111-0000010... FAIL (3 matches)
+bisect: run: test +010001+100000+0001100+1001-1000101-0001101-100111-0000010... ok (2 matches)
+bisect: run: test +110001+100000+0001100+1001-1000101-0001101-100111-0000010... FAIL (1 matches)
+bisect: run: test +1001+100000+0001100+110001-1000101-0001101-100111-0000010... FAIL (6 matches)
+bisect: run: test +01001+100000+0001100+110001-1000101-0001101-100111-0000010... ok (3 matches)
+bisect: run: test +11001+100000+0001100+110001-1000101-0001101-100111-0000010... FAIL (3 matches)
+bisect: run: test +011001+100000+0001100+110001-1000101-0001101-100111-0000010... FAIL (2 matches)
+bisect: run: test +0011001+100000+0001100+110001-1000101-0001101-100111-0000010... ok (1 matches)
+bisect: run: test +1011001+100000+0001100+110001-1000101-0001101-100111-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+100000+0001100+110001+1011001-1000101-0001101-100111-0000010... FAIL (4 matches)
+bisect: run: test v+100000+0001100+110001+1011001-1000101-0001101-100111-0000010... FAIL (4 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (82 matches)
+bisect: run: test -100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (82 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (42 matches)
-bisect: run test +1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (40 matches)
-bisect: run test +0+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (42 matches)
-bisect: run test +00+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (21 matches)
-bisect: run test +10+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (21 matches)
-bisect: run test +010+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (10 matches)
-bisect: run test +110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (11 matches)
-bisect: run test +0110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (6 matches)
-bisect: run test +00110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (3 matches)
-bisect: run test +000110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (2 matches)
-bisect: run test +0000110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (1 matches)
-bisect: run test +1+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (40 matches)
-bisect: run test +01+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (19 matches)
-bisect: run test +11+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (21 matches)
-bisect: run test +011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (11 matches)
-bisect: run test +0011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (6 matches)
-bisect: run test +1011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (5 matches)
-bisect: run test +01011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (3 matches)
-bisect: run test +11011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (2 matches)
-bisect: run test +011011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (1 matches)
-bisect: run test +111011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (1 matches)
+bisect: run: test +0-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (42 matches)
+bisect: run: test +1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (40 matches)
+bisect: run: test +0+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (42 matches)
+bisect: run: test +00+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (21 matches)
+bisect: run: test +10+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (21 matches)
+bisect: run: test +010+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (10 matches)
+bisect: run: test +110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (11 matches)
+bisect: run: test +0110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (6 matches)
+bisect: run: test +00110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (3 matches)
+bisect: run: test +000110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (2 matches)
+bisect: run: test +0000110+1-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (1 matches)
+bisect: run: test +1+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (40 matches)
+bisect: run: test +01+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (19 matches)
+bisect: run: test +11+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (21 matches)
+bisect: run: test +011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (11 matches)
+bisect: run: test +0011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (6 matches)
+bisect: run: test +1011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (5 matches)
+bisect: run: test +01011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (3 matches)
+bisect: run: test +11011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (2 matches)
+bisect: run: test +011011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (1 matches)
+bisect: run: test +111011+0000110-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000110+111011-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (2 matches)
+bisect: run: test v+0000110+111011-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... FAIL (2 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000110-111011-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (80 matches)
+bisect: run: test -0000110-111011-100000-0001100-110001-1011001-1000101-0001101-100111-0000010... ok (80 matches)
 bisect: target succeeds with all remaining changes enabled
diff --git a/cmd/bisect/testdata/negate.txt b/cmd/bisect/testdata/negate.txt
index b45dfbde585..53f617cc0c7 100644
--- a/cmd/bisect/testdata/negate.txt
+++ b/cmd/bisect/testdata/negate.txt
@@ -9,49 +9,49 @@ peach
 ---
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... FAIL (90 matches)
+bisect: run: test n... FAIL (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... ok (90 matches)
+bisect: run: test y... ok (90 matches)
 bisect: target fails with no changes, succeeds with all changes
-bisect: searching for minimal set of changes to disable to cause failure
-bisect: run test !+0... FAIL (45 matches)
-bisect: run test !+00... ok (23 matches)
-bisect: run test !+10... FAIL (22 matches)
-bisect: run test !+010... FAIL (11 matches)
-bisect: run test !+0010... FAIL (6 matches)
-bisect: run test !+00010... FAIL (3 matches)
-bisect: run test !+000010... FAIL (2 matches)
-bisect: run test !+0000010... FAIL (1 matches)
+bisect: searching for minimal set of disabled changes causing failure
+bisect: run: test !+0... FAIL (45 matches)
+bisect: run: test !+00... ok (23 matches)
+bisect: run: test !+10... FAIL (22 matches)
+bisect: run: test !+010... FAIL (11 matches)
+bisect: run: test !+0010... FAIL (6 matches)
+bisect: run: test !+00010... FAIL (3 matches)
+bisect: run: test !+000010... FAIL (2 matches)
+bisect: run: test !+0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v!+0000010... FAIL (1 matches)
+bisect: run: test v!+0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test !-0000010... FAIL (89 matches)
+bisect: run: test !-0000010... FAIL (89 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test !+0-0000010... ok (44 matches)
-bisect: run test !+1-0000010... ok (45 matches)
-bisect: run test !+0+1-0000010... FAIL (44 matches)
-bisect: run test !+00+1-0000010... ok (23 matches)
-bisect: run test !+10+1-0000010... FAIL (21 matches)
-bisect: run test !+010+1-0000010... ok (10 matches)
-bisect: run test !+110+1-0000010... FAIL (11 matches)
-bisect: run test !+0110+1-0000010... FAIL (6 matches)
-bisect: run test !+00110+1-0000010... FAIL (3 matches)
-bisect: run test !+000110+1-0000010... FAIL (2 matches)
-bisect: run test !+0000110+1-0000010... FAIL (1 matches)
-bisect: run test !+1+0000110-0000010... FAIL (45 matches)
-bisect: run test !+01+0000110-0000010... ok (23 matches)
-bisect: run test !+11+0000110-0000010... FAIL (22 matches)
-bisect: run test !+011+0000110-0000010... FAIL (11 matches)
-bisect: run test !+0011+0000110-0000010... ok (6 matches)
-bisect: run test !+1011+0000110-0000010... FAIL (5 matches)
-bisect: run test !+01011+0000110-0000010... ok (3 matches)
-bisect: run test !+11011+0000110-0000010... FAIL (2 matches)
-bisect: run test !+011011+0000110-0000010... ok (1 matches)
-bisect: run test !+111011+0000110-0000010... FAIL (1 matches)
+bisect: run: test !+0-0000010... ok (44 matches)
+bisect: run: test !+1-0000010... ok (45 matches)
+bisect: run: test !+0+1-0000010... FAIL (44 matches)
+bisect: run: test !+00+1-0000010... ok (23 matches)
+bisect: run: test !+10+1-0000010... FAIL (21 matches)
+bisect: run: test !+010+1-0000010... ok (10 matches)
+bisect: run: test !+110+1-0000010... FAIL (11 matches)
+bisect: run: test !+0110+1-0000010... FAIL (6 matches)
+bisect: run: test !+00110+1-0000010... FAIL (3 matches)
+bisect: run: test !+000110+1-0000010... FAIL (2 matches)
+bisect: run: test !+0000110+1-0000010... FAIL (1 matches)
+bisect: run: test !+1+0000110-0000010... FAIL (45 matches)
+bisect: run: test !+01+0000110-0000010... ok (23 matches)
+bisect: run: test !+11+0000110-0000010... FAIL (22 matches)
+bisect: run: test !+011+0000110-0000010... FAIL (11 matches)
+bisect: run: test !+0011+0000110-0000010... ok (6 matches)
+bisect: run: test !+1011+0000110-0000010... FAIL (5 matches)
+bisect: run: test !+01011+0000110-0000010... ok (3 matches)
+bisect: run: test !+11011+0000110-0000010... FAIL (2 matches)
+bisect: run: test !+011011+0000110-0000010... ok (1 matches)
+bisect: run: test !+111011+0000110-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v!+0000110+111011-0000010... FAIL (2 matches)
+bisect: run: test v!+0000110+111011-0000010... FAIL (2 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test !-0000110-111011-0000010... ok (87 matches)
+bisect: run: test !-0000110-111011-0000010... ok (87 matches)
 bisect: target succeeds with all remaining changes disabled
diff --git a/cmd/bisect/testdata/rand.txt b/cmd/bisect/testdata/rand.txt
index cec39a1d315..7e0e3320aa6 100644
--- a/cmd/bisect/testdata/rand.txt
+++ b/cmd/bisect/testdata/rand.txt
@@ -8,52 +8,52 @@ apricot
 ---
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... FAIL (45 matches)
-bisect: run test +00... ok (23 matches)
-bisect: run test +10... FAIL (22 matches)
-bisect: run test +010... FAIL (11 matches)
-bisect: run test +0010... FAIL (6 matches)
-bisect: run test +00010... FAIL (3 matches)
-bisect: run test +000010... FAIL (2 matches)
-bisect: run test +0000010... FAIL (1 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... FAIL (45 matches)
+bisect: run: test +00... ok (23 matches)
+bisect: run: test +10... FAIL (22 matches)
+bisect: run: test +010... FAIL (11 matches)
+bisect: run: test +0010... FAIL (6 matches)
+bisect: run: test +00010... FAIL (3 matches)
+bisect: run: test +000010... FAIL (2 matches)
+bisect: run: test +0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000010... FAIL (1 matches)
+bisect: run: test v+0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000010... FAIL (89 matches)
+bisect: run: test -0000010... FAIL (89 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-0000010... FAIL (44 matches)
-bisect: run test +00-0000010... ok (23 matches)
-bisect: run test +10-0000010... FAIL (21 matches)
-bisect: run test +010-0000010... ok (10 matches)
-bisect: run test +110-0000010... FAIL (11 matches)
-bisect: run test +0110-0000010... FAIL (6 matches)
-bisect: run test +00110-0000010... FAIL (3 matches)
-bisect: run test +000110-0000010... FAIL (2 matches)
-bisect: run test +0000110-0000010... FAIL (1 matches)
+bisect: run: test +0-0000010... FAIL (44 matches)
+bisect: run: test +00-0000010... ok (23 matches)
+bisect: run: test +10-0000010... FAIL (21 matches)
+bisect: run: test +010-0000010... ok (10 matches)
+bisect: run: test +110-0000010... FAIL (11 matches)
+bisect: run: test +0110-0000010... FAIL (6 matches)
+bisect: run: test +00110-0000010... FAIL (3 matches)
+bisect: run: test +000110-0000010... FAIL (2 matches)
+bisect: run: test +0000110-0000010... FAIL (1 matches)
 bisect: confirming failing change set
-bisect: run test v+0000110-0000010... FAIL (1 matches)
+bisect: run: test v+0000110-0000010... FAIL (1 matches)
 bisect: FOUND failing change set
 bisect: checking for more failures
-bisect: run test -0000110-0000010... FAIL (88 matches)
+bisect: run: test -0000110-0000010... FAIL (88 matches)
 bisect: target still fails; searching for more bad changes
-bisect: run test +0-0000110-0000010... ok (43 matches)
-bisect: run test +1-0000110-0000010... FAIL (45 matches)
-bisect: run test +01-0000110-0000010... FAIL (23 matches)
-bisect: run test +001-0000110-0000010... ok (12 matches)
-bisect: run test +101-0000110-0000010... FAIL (11 matches)
-bisect: run test +0101-0000110-0000010... ok (6 matches)
-bisect: run test +1101-0000110-0000010... FAIL (5 matches)
-bisect: run test +01101-0000110-0000010... ok (3 matches)
-bisect: run test +11101-0000110-0000010... ok (2 matches)
-bisect: run test +01101+11101-0000110-0000010... FAIL (3 matches)
-bisect: run test +001101+11101-0000110-0000010... ok (2 matches)
-bisect: run test +101101+11101-0000110-0000010... ok (1 matches)
-bisect: run test +001101+11101+101101-0000110-0000010... ok (2 matches)
+bisect: run: test +0-0000110-0000010... ok (43 matches)
+bisect: run: test +1-0000110-0000010... FAIL (45 matches)
+bisect: run: test +01-0000110-0000010... FAIL (23 matches)
+bisect: run: test +001-0000110-0000010... ok (12 matches)
+bisect: run: test +101-0000110-0000010... FAIL (11 matches)
+bisect: run: test +0101-0000110-0000010... ok (6 matches)
+bisect: run: test +1101-0000110-0000010... FAIL (5 matches)
+bisect: run: test +01101-0000110-0000010... ok (3 matches)
+bisect: run: test +11101-0000110-0000010... ok (2 matches)
+bisect: run: test +01101+11101-0000110-0000010... FAIL (3 matches)
+bisect: run: test +001101+11101-0000110-0000010... ok (2 matches)
+bisect: run: test +101101+11101-0000110-0000010... ok (1 matches)
+bisect: run: test +001101+11101+101101-0000110-0000010... ok (2 matches)
 bisect: fatal error: target fails inconsistently
 <bisect failed>
diff --git a/cmd/bisect/testdata/rand1.txt b/cmd/bisect/testdata/rand1.txt
index 97c024a0717..219629318b4 100644
--- a/cmd/bisect/testdata/rand1.txt
+++ b/cmd/bisect/testdata/rand1.txt
@@ -2,23 +2,23 @@
 -- stdout --
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... ok (45 matches)
-bisect: run test +1... FAIL (45 matches)
-bisect: run test +01... FAIL (23 matches)
-bisect: run test +001... ok (12 matches)
-bisect: run test +101... FAIL (11 matches)
-bisect: run test +0101... ok (6 matches)
-bisect: run test +1101... FAIL (5 matches)
-bisect: run test +01101... ok (3 matches)
-bisect: run test +11101... ok (2 matches)
-bisect: run test +01101+11101... FAIL (3 matches)
-bisect: run test +001101+11101... ok (2 matches)
-bisect: run test +101101+11101... ok (1 matches)
-bisect: run test +001101+11101+101101... ok (2 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... ok (45 matches)
+bisect: run: test +1... FAIL (45 matches)
+bisect: run: test +01... FAIL (23 matches)
+bisect: run: test +001... ok (12 matches)
+bisect: run: test +101... FAIL (11 matches)
+bisect: run: test +0101... ok (6 matches)
+bisect: run: test +1101... FAIL (5 matches)
+bisect: run: test +01101... ok (3 matches)
+bisect: run: test +11101... ok (2 matches)
+bisect: run: test +01101+11101... FAIL (3 matches)
+bisect: run: test +001101+11101... ok (2 matches)
+bisect: run: test +101101+11101... ok (1 matches)
+bisect: run: test +001101+11101+101101... ok (2 matches)
 bisect: fatal error: target fails inconsistently
 <bisect failed>
diff --git a/cmd/bisect/testdata/rand2.txt b/cmd/bisect/testdata/rand2.txt
index 7ad24739b65..c952226b201 100644
--- a/cmd/bisect/testdata/rand2.txt
+++ b/cmd/bisect/testdata/rand2.txt
@@ -2,18 +2,18 @@
 -- stdout --
 -- stderr --
 bisect: checking target with all changes disabled
-bisect: run test n... ok (90 matches)
-bisect: run test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
+bisect: run: test n... ok (90 matches)
 bisect: checking target with all changes enabled
-bisect: run test y... FAIL (90 matches)
-bisect: run test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
+bisect: run: test y... FAIL (90 matches)
 bisect: target succeeds with no changes, fails with all changes
-bisect: searching for minimal set of changes to enable to cause failure
-bisect: run test +0... ok (45 matches)
-bisect: run test +0... ok (45 matches)
-bisect: run test +1... FAIL (45 matches)
-bisect: run test +1... FAIL (45 matches)
-bisect: run test +01... FAIL (23 matches)
-bisect: run test +01... ok (23 matches)
+bisect: searching for minimal set of enabled changes causing failure
+bisect: run: test +0... ok (45 matches)
+bisect: run: test +0... ok (45 matches)
+bisect: run: test +1... FAIL (45 matches)
+bisect: run: test +1... FAIL (45 matches)
+bisect: run: test +01... FAIL (23 matches)
+bisect: run: test +01... ok (23 matches)
 bisect: fatal error: target fails inconsistently
 <bisect failed>