CH-004: repair the tag/test mismatches G-002 found - #9
Merged
Conversation
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
marked this pull request as ready for review
August 31, 2026 19:51
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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_...andtestEVT011_IntegrationNegative_...— verifies (the negative test now assertsrounds == 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_WinningARoundReachesTheWinHandler— verifies.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-003records 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 (AngleConverterhas no reverse method).AngleConverterTest— verifies the narrowed scenario.API-004(unchanged meaning, new test) — owner-departed bullet still maps. NewtestAPI004_UnitNegative_MapsABulletWhoseOwnerHasLeftTheBattle— verifies-something-adjacent:BulletMapper.maphas 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 inAN-010and carried into the test's own comment).No
Human-class criterion in this change.What this merge binds:
CAP-001's andCAP-003's criteria files as edited,IDR-003(currentlyinferred; merging this PR does not itself promote it — the reviewer/merger's approval on this PR is what promotes it toverifiedper the decision-records convention), andP-001'sM-103(dropped, superseded byM-141) /M-139–M-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@DisabledEVT-004death test skipped; not introduced by this change).clue validate—OK (52 artifacts, ...).444e547) found 4 blocking findings (an EVT-011 negative-test lower bound that couldn't catch over-reporting; three.clue/id-ledger.yamlentries leftreservedor missing for ids this change touches). All four repaired in commit6cd99ec. Pass 2 (scoped to444e547..6cd99ec) found nothing blocking. No advisory findings left open.