Skip to content

feat(roadmap): let a negative search verify check more than one name - #3678

Merged
dan-petty merged 17 commits into
mainfrom
feat/3276-negative-search-accepts-repeated-e
Nov 5, 2026
Merged

dan-petty merged 17 commits into
mainfrom
feat/3276-negative-search-accepts-repeated-e

Conversation

@dan-petty

Copy link
Copy Markdown
Owner

A plan that removes several names needs one check for all of them. The negative search of the implement step took one literal and no -e, so the step refused the -E line of task 3.3 of the #2610 plan and that group could not run.

The search now also takes one or more -e literals, with -- before the paths. Each value is a plain literal that must not start with -, and a refused value gets a reason that states the rule. The stage job applies the hit rule and the created-module rule to each literal, and a move group checks each literal. The #2610 line now uses four -e literals. The stage prompt and docs/TESTING.md state the form.

The test over every active tasks.md moves to #3579, because other active plans hold refused commands.

Closes #3276

Change: openspec/changes/archive/2026-11-05-3276-negative-search-accepts-repeated-e/

The implement step refuses a negative search with more than one name.
The plan of #3276 adds repeated -e literals, a per-literal stage check,
and the documented shape. Plans #3187 and #2441 keep refused lines that
this change does not fix (see the proposal).
A negative search with two names is refused as the option -e. These tests
pin the form that runs git grep with one -e for each name, and the refusals
of an -e value that is not a plain literal.
The negative search reads one literal. These tests pin the new shape, with
a tuple of literals and a flag for the -e form.
…e gate

The stage gate reads one literal of a negative search. These tests pin
a hit check and a move check for each literal of the -e form.
The prompt gives one literal only. This test pins the -e form and the --
that comes before the paths.
The negative search takes one or more -e literals, each one plain, and
then -- before the paths. Git matches any of them. The stage gate checks
each literal for a staged hit and for a created module.
The negative search of task 3.3 used -E, which the step refuses. The
search now names the four literals with one -e each.
The guide names one literal only. It now names the -e form, the -- before
the paths, and the refused -E and -P.
The active-plan test of acceptance criterion 3 is tracked by #3579, and the
step that reads every code span is tracked by #3596.
The change for #3276 is archived with its spec deltas. The step reads
repeated -e literals, and the stage gate checks each one.
This reverts commit 7e0ecef8a2d2e5738e6a17aae160a869b55df018.
The reason of a refused -e form ran past the word limit of the style
rule. The reason now names the refused word and both forms in one
short sentence. The test that pins the text follows the new reason.
The sentence that states the form of the negative search ran past the
word limit of the style rule. It now runs as four short sentences, and
keeps the same rules.
The code renamed _literal to _literals. The task names the new name.
@dan-petty dan-petty added type/feature New user-facing functionality or capability addition scope/roadmap The roadmap jobs: intake, refine, stage, implement and the Service that runs them labels Nov 5, 2026
@dan-petty

Copy link
Copy Markdown
Owner Author

Test results for this pull request.

Fail-to-pass: uv run devops ci fail-to-pass --base origin/main at the pushed head: 30 failed on base, 346 passed on base, 0 errored, exit 0.

Full gate: uv run devops ci ran once, with the final code, one commit before the archive and three commits of main before the pushed head. I did not run it again after the last rebase. After that rebase I ran the four narrow test files (376 passed) and uv run devops openspec check (passed).

Every row passed except two:

Review findings before this pull request. I verified the four findings. All four are correct, and this pull request fixes them.

  1. The scenario "A move group names a module with a second literal" said one problem. The code returns two, and both name devops_cli.roadmap.stage: the problem of the move and the problem of the created module. The code stays the same. The scenario and task 2.1 now state two problems. test_a_move_group_checks_each_e_literal uses the command of the scenario and compares the complete list.
  2. This finding has the same cause as finding 1, and the same fix.
  3. An -e value that starts with - got a false reason. It now gets its own reason, search_reason_e_dash. The stage prompt and docs/TESTING.md state the rule. The spec has a scenario for it.
  4. Task 2.1 gave a false reason for the failure on the base. It now says that read_negative_search refuses -e, so negative_search_parts returns None and the stage job checks no literal.

@dan-petty
dan-petty marked this pull request as ready for review November 5, 2026 18:37
@dan-petty
dan-petty merged commit 5a4364c into main Nov 5, 2026
23 checks passed
@dan-petty
dan-petty deleted the feat/3276-negative-search-accepts-repeated-e branch November 5, 2026 18:40
dan-petty pushed a commit that referenced this pull request Nov 5, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.63.0](v0.62.7...v0.63.0)
(2026-11-05)


### Features

* **roadmap:** let a negative search verify check more than one name
([#3678](#3678))
([5a4364c](5a4364c))
* **telemetry:** count the tool calls of the stage planner by outcome
([#3679](#3679))
([45da6dd](45da6dd))


### Bug Fixes

* **ci:** count tests and specs as hardening guardrails
([#3684](#3684))
([1d75506](1d75506))
* **security:** mask the user name of a URL with no password
([#3676](#3676))
([bc1cd9c](bc1cd9c))
* **service:** count each GitHub request with its HTTP status
([#3686](#3686))
([b39dcba](b39dcba))
* **telemetry:** Service counters read true across pods and repos
([#3680](#3680))
([05544ab](05544ab))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: dan-petty-release[bot] <346998822+dan-petty-release[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope/roadmap The roadmap jobs: intake, refine, stage, implement and the Service that runs them type/feature New user-facing functionality or capability addition

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(roadmap): let a negative search verify check more than one name

1 participant