# FIDE: the Dutch-pairing check run **Result:** 33 presented pairings were checked on 2 October 2026 — 13 hand-built round cases (H5-01 through H5-13) and 20 generated tournaments (RTG01 through RTG20) — with bbpPairings v6.0.0 on one side and the Arxo package `fide.swiss` 0.1.0 with `law` 0.1.1 on the other. On the absolute criteria [C1]–[C3] there are zero false accepts and zero false refusals across all 33 presented pairings. 27 cases agree fully; the remaining 6 (H5-02, H5-03, H5-04, H5-11, H5-12, H5-13) are differences of checking subject, not of the rules: pairings clean under [C1]–[C3] are rejected by the check mode as non-optimal, without a named criterion. The numbers belong to bbpPairings v6.0.0, rules C.04.3 effective 1 February 2026, and the stated case bank. ## The task and the reference Pairing construction is outside the Arxo package; Arxo checks a presented pairing. The external reference does both: bbpPairings builds Dutch-system pairings and its check mode verifies a presented tournament file against its own result. The bank presents pairings — a hand-built five-round history whose last round is the case, plus twenty machine-generated tournaments (nine players, four rounds, seeds 1 through 20) — and asks both sides for a verdict. The absolute criteria under check are [C1] (no repeated pairings), [C2] (no second pairing bye) and [C3] (absolute colour constraints); the full criterion set runs [C1]–[C21]. The public pages of the references are [bbpPairings](https://github.com/BieremaBoyzProgramming/bbpPairings) and the [FIDE Handbook](https://handbook.fide.com/). ## What "agreement" means here The two checkers answer different questions by construction, and the run records both. The check mode accepts only its own optimum over [C1]–[C21] and reports differing pairs without naming a criterion. Arxo checks compliance of the presented pairing with [C1]–[C3] and names each violation with a proof graph. A case agrees when both verdicts coincide — both accept, or both reject the same pairing. The six divergent cases are pairings the absolute-criteria check finds clean and the check mode rejects as non-optimal; the contract fixes this reading of scope before the run, and history rounds 1–3 count for neither side. ## Results | Case | Presented round | Check mode | Arxo | Outcome | |---|---|---|---|---| | H5-01 | round 4 built by the reference tool | ACCEPT | complies, TRUE_ONLY with proof | match | | H5-02 | round 5, leader scheme | REJECT (5 pairs) | complies, TRUE_ONLY with proof | subject difference | | H5-03 | round 5, fifty-percent boundary | REJECT (5 pairs) | complies, TRUE_ONLY with proof | subject difference | | H5-04 | same round as H5-02 | REJECT (5 pairs) | collected score set {-1} for the bye player: the unplayed round does not count | subject difference | | H5-05 | round 4, a repeated pairing | REJECT (3 pairs) | violated [C1] with proof | match: both reject; only Arxo names the criterion | | H5-06 | same pair, colours flipped | REJECT (3 pairs) | violated [C1] with proof | match: both reject; only Arxo names the criterion | | H5-07 | round 4, bye for a twice-rested player | REJECT (3 pairs) | violated [C2] with proof | match: both reject; only Arxo names the criterion | | H5-08 | round 4, bye after a forfeit win | REJECT (2 pairs) | violated [C2] with proof | match: both reject; only Arxo names the criterion | | H5-09 | round 4, both players black on difference | REJECT (4 pairs) | violated [C3] with proof | match: both reject; only Arxo names the criterion | | H5-10 | round 4, both players white on the other colour rule | REJECT (3 pairs) | violated [C3] with proof | match: both reject; only Arxo names the criterion | | H5-11 | round 5, leader-against-leader board | REJECT (3 pairs) | complies, TRUE_ONLY with proof | subject difference | | H5-12 | round 5, colour difference against no preference | REJECT (4 pairs) | complies, TRUE_ONLY with proof | subject difference | | H5-13 | same round as H5-11 | REJECT (3 pairs) | collected score set {0}: only played rounds count | subject difference | | RTG01–RTG20 | 20 generated tournaments, round 4 each | 20 of 20 ACCEPT | 20 of 20 complies with proof | 20 of 20 match | ## Where the two systems behave differently The check mode verifies against its own optimum over [C1]–[C21]: any presented pairing that is not its own optimum is rejected with a list of differing pairs and no criterion named. Arxo verifies compliance with [C1]–[C3] and names the violated criterion with a proof whenever it rejects. So in H5-02, H5-03, H5-04, H5-11, H5-12 and H5-13 Arxo accepts with a proof of zero absolute-criteria violations — confirmed by an independent absolute-criteria reading of the same files — while the check mode rejects them as non-optimal. The reverse never happens: every mutation of the bank (H5-05 through H5-10) is rejected by both sides, and every machine-built tournament (H5-01, RTG01–RTG20) is accepted by both. ## Where the model stops Construction is outside the package: criteria [C4]–[C21], colour allocation and the pairing search itself are not modelled — Arxo checks what is presented and says nothing about what the best pairing would be. The run covers the Dutch system only, with standard points and a pairing-allocated bye value of 1. Twenty generated tournaments stand in for scale; the multi-thousand-tournament scale of the program approval procedure is outside this run. Accelerated and non-Dutch systems, free points and adjournments were not exercised. ## Reproducing the run Pin the reference: bbpPairings v6.0.0 (tag `21c01d5d`, commit `16a000f9`, 1 February 2026; tarball SHA-256 starting `b7f95c08`), built from sources. Pin the rules: C.04.3 effective 1 February 2026 (SHA-256 starting `4c3777fd`, matching the package sources) and the tournament-file format description (SHA-256 starting `fadb222d`). Pin the Arxo side: package `fide.swiss` 0.1.0 with `law` 0.1.1. Each case is one check-mode call over the presented tournament file plus one `law ask fide.swiss` call per question (compliance, and where relevant the collected score); the check mode always exits zero, so its verdict is read from the round section of its output, not from the exit code.