Skip to content

CH-004: repair the tag/test mismatches G-002 found - #9

Merged
flemming-n-larsen merged 3 commits into
mainfrom
ch-004-g-002-tag-repair
Aug 31, 2026
Merged

CH-004: repair the tag/test mismatches G-002 found#9
flemming-n-larsen merged 3 commits into
mainfrom
ch-004-g-002-tag-repair

Conversation

@flemming-n-larsen

@flemming-n-larsen flemming-n-larsen commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Acceptance brief

Plan item: P-001 / M-001 (test-foundation milestone; this change is evidence-integrity groundwork the milestone's fourth clause depends on, not a criterion door itself except where noted below). Remains wanted.

Criteria added or changed, with scenario-resolution verdict:

  • EVT-011 (minted) — round and battle completion each reach their handler exactly once. RoundOutcomeEventsConformanceTest.testEVT011_IntegrationPositive_... and testEVT011_IntegrationNegative_...verifies (the negative test now asserts rounds == configuredRounds() after the review repair, closing the lower-bound gap the first review pass found).
  • EVT-012 (minted) — winning a round reaches the win handler. testEVT012_IntegrationPositive_WinningARoundReachesTheWinHandlerverifies.
  • EVT-003 (retired) → EVT-013 (successor) — an interruptible handler is re-entered for a same-priority event once marked interruptible. InterruptibleEventConformanceTest's three retagged tests — verifies. IDR-003 records why the higher-priority claim was retired rather than repaired.
  • API-001 (narrowed) — angles convert Tank Royale → Robocode (single-direction); the round-trip clause was dropped as untestable (AngleConverter has no reverse method). AngleConverterTestverifies the narrowed scenario.
  • API-004 (unchanged meaning, new test) — owner-departed bullet still maps. New testAPI004_UnitNegative_MapsABulletWhoseOwnerHasLeftTheBattleverifies-something-adjacent: BulletMapper.map has no roster to check an owner id against, so the test cannot distinguish a departed owner from any other owner id; it proves the pass-through is unconditional, which is what makes the scenario's claim true by construction (documented in AN-010 and carried into the test's own comment).

No Human-class criterion in this change.

What this merge binds: CAP-001's and CAP-003's criteria files as edited, IDR-003 (currently inferred; merging this PR does not itself promote it — the reviewer/merger's approval on this PR is what promotes it to verified per the decision-records convention), and P-001's M-103 (dropped, superseded by M-141) / M-139M-141 (done) rows. No unmerged base is depended on.

Verification

  • ./gradlew :robocode-api:test — green.
  • ./gradlew :conformance-test:test -Probocode.home=C:/robocode -Probocode.source=C:/Code/robocode — green (only the pre-existing, intentionally @Disabled EVT-004 death test skipped; not introduced by this change).
  • clue validateOK (52 artifacts, ...).
  • Agentic review: context-isolated, two passes. Pass 1 (commit 444e547) found 4 blocking findings (an EVT-011 negative-test lower bound that couldn't catch over-reporting; three .clue/id-ledger.yaml entries left reserved or missing for ids this change touches). All four repaired in commit 6cd99ec. Pass 2 (scoped to 444e547..6cd99ec) found nothing blocking. No advisory findings left open.

Mints EVT-011/012/013, retires EVT-003, and closes AN-010's two
unit-tier gaps.
Mints EVT-011 (round/battle completion) and EVT-012 (win handler) for
what RoundOutcomeEventsConformanceTest's tests actually assert, and
retags them. Retires EVT-003 -- no robot in the source tree exercises
genuine higher-priority interruptible re-entry, only same-priority --
and mints EVT-013 for what InterruptibleEventConformanceTest actually
proves (IDR-003). Closes AN-010's two unit-tier gaps: narrows API-001
to the one direction AngleConverter implements, adds the missing
API-004 owner-departed test.

Fixes a pre-existing ledger drift surfaced by EVT-003's retirement:
the EVT counter and entries had never tracked CAP-001's criteria IDs.
EVT-011's negative test asserted rounds >= battles, a lower bound the
scenario's "exactly once" claim never actually tested -- an inflated
round-completion count would still pass. Expose the harness's
configured round count and assert rounds == expectedRounds instead,
so the test can now fail on the fan-out defect it was written for.

The id-ledger was left inconsistent for the exact prefix this change
touches: CH-004 and EVT-001 stayed "reserved" past commitment, and
EVT-002/004-013 had no entries at all despite being live criteria.
Bring every EVT id up to "live" (EVT-003 stays "retired") and mark
CH-004 live.
@flemming-n-larsen
flemming-n-larsen marked this pull request as ready for review August 31, 2026 19:51
@flemming-n-larsen
flemming-n-larsen merged commit 3807542 into main Aug 31, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant