Skip to content

meta: sibling sweeps are asserted rather than measured #1458

Description

@dekobon

Summary

A meta-observation from the 2026-09-13 batch (#1420, #1406, #1422, #1421,
#1407, #1410), worth recording because the pattern is about how these issues
get found and filed, not about any one fix.

Five of the six fixes were correct in the language they targeted and
unswept to at least one sibling that shares the defect.
Each issue carried
a sibling-sweep section; each was either absent, incomplete, or — twice —
actively wrong.

The seven gaps the batch left behind

gap issue how it surfaced
Ruby subject-less case double-counts #1453 #1421's body said Ruby was swept clean; two agents independently measured otherwise
Java 21 / Rust / Python match guards #1454 #1422's own "Rust is the convention" argument is false for Java
Elixir / Ruby guards #1454 whole-branch review
Objective-C @available #1457 #1410 surveyed this neighbourhood and excluded the wrong node
Comment in a condition slot zeroes it #1455 #1422 wrote its own slot extras-safe and left the siblings
goto case counts as a decision #1451 #1420 had to enumerate what emits Case
is_call vs abc.branches #1456 #1406

Plus three found within the batch and fixed there, all of the same class:
C#'s catch_filter_clause (#1422's body named only when_clause), C#'s bare
is type test (the Kotlin half landed in the same branch and the C# half did
not), and Kotlin's infix and / or / xor.

What is actually going wrong

.claude/rules/grammar-dispatch.md already closes with "when you fix one
language, sweep the rest", and every issue body has a sibling-sweep heading.
The rule is being followed as prose and not as a procedure:

  1. Sweeps are asserted rather than measured. fix(abc/kotlin): subject-less when arm double-counts its comparison operator #1421's body listed four
    languages as clean "measured as part of fix(abc/csharp): relational pattern operator double-counts against its arm #1383 … so no need to re-derive".
    Ruby was not clean. Nothing distinguishes a measured row from a remembered
    one once it is written down.
  2. The sweep is scoped to the construct the issue names, not to the
    predicate being changed.
    fix(abc): numeric operands score no condition in PHP, Groovy and the C family #1410 swept for numeric literals and missed
    available_expression, which is not numeric but occupies the same slot in
    the same set.
  3. Two fixes in one batch can share a defect and not see each other. The
    C# and Kotlin halves of the bare-type-test gap landed in the same branch,
    four commits apart, and only a whole-branch read connected them.

Suggested changes

  • Require a paste-able measurement, not a claim. A sibling-sweep section
    should carry the command and its output per language, the way the
    measurement tables in these issue bodies already do. A row without numbers
    should read as un-swept.
  • Sweep the predicate's whole membership, not the construct. When a
    terminal-kind set or dispatch arm changes, enumerate what else can occupy
    that slot in each language sharing the set — bca dump on a fixture per
    candidate production, not a grep for the construct.
  • Make the batch-level cross-check explicit. The whole-branch review found
    two of the three within-batch gaps; per-issue review found neither. That
    step already exists in batch-fix; this is evidence it should not be
    skipped and should specifically look for two fixes that share a predicate.
  • Re-verify a quoted sweep before building on it, the same way
    AGENTS.md already requires for a deferred issue's premises. The failure
    mode is identical: the claim ages, and nothing about reading it says so.

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions