mirror of
https://github.com/bmad-code-org/BMAD-METHOD.git
synced 2026-09-01 15:09:07 +08:00
feat(edge-case-hunter): add named-set generalization pass (#2524)
Add one bullet to Step 2 (Exhaustive Path Analysis) of
bmad-review-edge-case-hunter for implicit branches: when a diff
special-cases or changes the handling of one or more members of a
fixed set of values (enum, status code, sentinel, type tag,
flag, value range), the rest of the set are implicit branches —
silent branches absent from the diff.
The bullet sits as a peer to the existing "Walk all branching paths"
(explicit branches) and feeds the same shared loop ("For each path:
determine whether the content handles it" -> "Collect only the
unhandled paths"), so it needs no restated action and the output
contract is unchanged. "scan", not "enumerate", lets the model scale
effort to set size instead of flooding on large sets. Count
boundaries (0/1/many, off-by-one) are left to the existing first
bullet.
Catches implicit branches the syntactic walk misses. Measured on a
real regression (!ALL fixed, sibling !BLANK left case-sensitive):
catch rate 50% -> 100% over 10 runs at +19% tokens/run.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -33,6 +33,7 @@ Ignore the rest of the codebase unless the provided content explicitly reference
|
||||
|
||||
- If `also_consider` input was provided, incorporate those areas into the analysis
|
||||
- Walk all branching paths: control flow (conditionals, loops, error handlers, early returns) and domain boundaries (where values, states, or conditions transition). Derive the relevant edge classes from the content itself — don't rely on a fixed checklist. Examples: missing else/default, unguarded inputs, off-by-one loops, arithmetic overflow, implicit type coercion, race conditions, timeout gaps
|
||||
- Consider implicit branches: the diff special-cases or changes the handling of one or more members of a fixed set of values — enums, status codes, sentinels, type tags, flags, value ranges. The rest of the set is implicit branches (e.g. the diff changes the `RED` and `YELLOW` cases of a `RED`/`YELLOW`/`GREEN` enum; `GREEN` is the implicit branch)
|
||||
- For each path: determine whether the content handles it
|
||||
- Collect only the unhandled paths as findings — discard handled ones silently
|
||||
|
||||
|
||||
Reference in New Issue
Block a user