pairing-core 0.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pairing_core-0.4.1/CHANGELOG.md +181 -0
- pairing_core-0.4.1/LICENSE +21 -0
- pairing_core-0.4.1/MANIFEST.in +8 -0
- pairing_core-0.4.1/PKG-INFO +486 -0
- pairing_core-0.4.1/README.md +463 -0
- pairing_core-0.4.1/pyproject.toml +37 -0
- pairing_core-0.4.1/setup.cfg +4 -0
- pairing_core-0.4.1/src/pairing_core/__init__.py +161 -0
- pairing_core-0.4.1/src/pairing_core/adapters/__init__.py +43 -0
- pairing_core-0.4.1/src/pairing_core/adapters/_process.py +210 -0
- pairing_core-0.4.1/src/pairing_core/adapters/bbp.py +179 -0
- pairing_core-0.4.1/src/pairing_core/adapters/javafo.py +160 -0
- pairing_core-0.4.1/src/pairing_core/adapters/trf.py +496 -0
- pairing_core-0.4.1/src/pairing_core/api.py +408 -0
- pairing_core-0.4.1/src/pairing_core/bracket.py +376 -0
- pairing_core-0.4.1/src/pairing_core/bye.py +164 -0
- pairing_core-0.4.1/src/pairing_core/canonical.py +326 -0
- pairing_core-0.4.1/src/pairing_core/color.py +249 -0
- pairing_core-0.4.1/src/pairing_core/controls.py +84 -0
- pairing_core-0.4.1/src/pairing_core/engine.py +489 -0
- pairing_core-0.4.1/src/pairing_core/envelope.py +272 -0
- pairing_core-0.4.1/src/pairing_core/errors.py +130 -0
- pairing_core-0.4.1/src/pairing_core/exchange.py +217 -0
- pairing_core-0.4.1/src/pairing_core/explain.py +145 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/__init__.py +38 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/api.py +52 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/baku.py +63 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/burstein.py +465 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/common.py +222 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/double_team.py +454 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/dubov.py +520 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/dutch.py +595 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/lim.py +817 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/models.py +340 -0
- pairing_core-0.4.1/src/pairing_core/fide2026/olympiad.py +522 -0
- pairing_core-0.4.1/src/pairing_core/floats.py +284 -0
- pairing_core-0.4.1/src/pairing_core/harness/__init__.py +36 -0
- pairing_core-0.4.1/src/pairing_core/harness/compare.py +144 -0
- pairing_core-0.4.1/src/pairing_core/harness/corpus.py +102 -0
- pairing_core-0.4.1/src/pairing_core/models.py +458 -0
- pairing_core-0.4.1/src/pairing_core/pairer.py +712 -0
- pairing_core-0.4.1/src/pairing_core/provider.py +159 -0
- pairing_core-0.4.1/src/pairing_core/registry.py +111 -0
- pairing_core-0.4.1/src/pairing_core/roundrobin.py +114 -0
- pairing_core-0.4.1/src/pairing_core/rulesets.py +154 -0
- pairing_core-0.4.1/src/pairing_core/validator.py +668 -0
- pairing_core-0.4.1/src/pairing_core.egg-info/SOURCES.txt +76 -0
- pairing_core-0.4.1/tests/test_api_f2.py +272 -0
- pairing_core-0.4.1/tests/test_bbp.py +144 -0
- pairing_core-0.4.1/tests/test_bbp_oracle.py +223 -0
- pairing_core-0.4.1/tests/test_benchmarks.py +232 -0
- pairing_core-0.4.1/tests/test_benchmarks_2026.py +338 -0
- pairing_core-0.4.1/tests/test_canonical.py +175 -0
- pairing_core-0.4.1/tests/test_contract.py +142 -0
- pairing_core-0.4.1/tests/test_controls.py +131 -0
- pairing_core-0.4.1/tests/test_determinism.py +97 -0
- pairing_core-0.4.1/tests/test_envelope.py +171 -0
- pairing_core-0.4.1/tests/test_errors.py +84 -0
- pairing_core-0.4.1/tests/test_explain.py +116 -0
- pairing_core-0.4.1/tests/test_fide2026.py +602 -0
- pairing_core-0.4.1/tests/test_harness.py +117 -0
- pairing_core-0.4.1/tests/test_hostile_audit.py +706 -0
- pairing_core-0.4.1/tests/test_import_api.py +61 -0
- pairing_core-0.4.1/tests/test_javafo.py +134 -0
- pairing_core-0.4.1/tests/test_javafo_oracle.py +102 -0
- pairing_core-0.4.1/tests/test_native_provider.py +84 -0
- pairing_core-0.4.1/tests/test_process.py +130 -0
- pairing_core-0.4.1/tests/test_properties.py +103 -0
- pairing_core-0.4.1/tests/test_properties_2026.py +150 -0
- pairing_core-0.4.1/tests/test_provider.py +103 -0
- pairing_core-0.4.1/tests/test_provider_path.py +143 -0
- pairing_core-0.4.1/tests/test_registry.py +132 -0
- pairing_core-0.4.1/tests/test_release.py +246 -0
- pairing_core-0.4.1/tests/test_result_model.py +115 -0
- pairing_core-0.4.1/tests/test_roundrobin.py +133 -0
- pairing_core-0.4.1/tests/test_rulesets.py +71 -0
- pairing_core-0.4.1/tests/test_source_registry.py +19 -0
- pairing_core-0.4.1/tests/test_trf.py +189 -0
- pairing_core-0.4.1/tests/test_v010_behavioral.py +110 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are recorded here. Versioning follows
|
|
4
|
+
the five-axis model in `docs/spec/VERSIONING.md`; the library version below
|
|
5
|
+
is the `pyproject.toml` version. Dates are commit dates (UTC).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
- New `examples/custom_provider.py`: worked third-party provider guide
|
|
10
|
+
(implement `EngineProvider`, declare `Capability`, register, select via
|
|
11
|
+
`pair_via`); runs from repo checkout and clean install; pinned by
|
|
12
|
+
`tests/test_release.py::test_examples_run_on_public_api`.
|
|
13
|
+
- `tests/test_release.py` now also requires `examples/custom_provider.py`.
|
|
14
|
+
|
|
15
|
+
## [0.4.1] — 2026-10-03 (release candidate: committed on main, not yet tagged or published)
|
|
16
|
+
|
|
17
|
+
Product-hardening wave (patch: no public API or pairing-behavior change —
|
|
18
|
+
v0.1.0 goldens and 0.4.0 outputs byte-identical):
|
|
19
|
+
|
|
20
|
+
- Packaging: SPDX `license = "MIT"` (fixes setuptools>=77 deprecation
|
|
21
|
+
warning; build requires 68→77), PyPI classifiers/keywords, `MANIFEST.in`
|
|
22
|
+
pruning caches/build outputs from the sdist; verified warning-free build,
|
|
23
|
+
reproducible artifact file list, clean-environment wheel install + smoke.
|
|
24
|
+
- Test hygiene: benchmark baseline refresh is now opt-in
|
|
25
|
+
(`PAIRING_UPDATE_BASELINES=1`) so plain suite runs leave the tree clean;
|
|
26
|
+
`test_canonical.py` / `test_import_api.py` no longer assume an absolute
|
|
27
|
+
checkout path (location-independent, 3.10-compatible); new
|
|
28
|
+
`tests/test_release.py` pins product files, README topics +
|
|
29
|
+
no-certification-claims, changelog coverage, and the no-absolute-paths
|
|
30
|
+
rule; new `examples/basic_swiss.py` (verified against repo checkout and
|
|
31
|
+
installed wheel).
|
|
32
|
+
- Documentation reconciliation: `docs/CAPABILITY.md` rewritten as the
|
|
33
|
+
current (v0.4.1) product authority (2026 systems implemented, not
|
|
34
|
+
blocked); `README.md` rewritten as a product entry point; historical
|
|
35
|
+
Stage-1 snapshots (`docs/audit/CURRENT_CAPABILITIES.md`,
|
|
36
|
+
`CURRENT_LIMITATIONS.md`) and research-phase detail in
|
|
37
|
+
`docs/rules/fide/CURRENT_STATUS.md` marked superseded-but-preserved;
|
|
38
|
+
`MASTER_SPECIFICATION.md` §§4/10/11, `ROADMAP.md` statuses, and
|
|
39
|
+
`OPEN_QUESTIONS.md` updated to post-closure reality.
|
|
40
|
+
- OSS hygiene: `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`,
|
|
41
|
+
issue templates, PR template, CI gate (`.github/workflows/ci.yml`),
|
|
42
|
+
`docs/RELEASING.md`, `docs/PERFORMANCE.md` (measured baseline + L1
|
|
43
|
+
ceiling characterization).
|
|
44
|
+
- Verified unchanged (no code change): external-adapter security posture
|
|
45
|
+
(argv-only, timeouts, caps, cleanup), execution controls (typed
|
|
46
|
+
timeout/cancel, no partials), determinism (hash-seed sweeps),
|
|
47
|
+
`versions()` report semantics (adapter edge stays a submodule surface
|
|
48
|
+
per `API_TIERS.md`).
|
|
49
|
+
|
|
50
|
+
## [0.4.0] — 2026-10-03
|
|
51
|
+
|
|
52
|
+
Closure wave (minor: additive API + conformance corrections; ruleset
|
|
53
|
+
identities unchanged — same FIDE effective dates; no deprecations/breaks):
|
|
54
|
+
|
|
55
|
+
- New optional `P26Request.cancel_token` (cooperative cancellation, typed
|
|
56
|
+
`CancelledError`, never partial; entry-point + per-tick checkpoints).
|
|
57
|
+
- Dutch PAB unified with generation order + 3.8.1 (invented enumeration and
|
|
58
|
+
largest-TPN tiebreak removed); fixed C12/C13 white-holder accounting.
|
|
59
|
+
- Olympiad rewritten from retrieved Handbook chapter text (4.1 bye rank,
|
|
60
|
+
3.1 seeding helper, 7.2 R1 lot, 8.x designated/completion/skip/re-float
|
|
61
|
+
chains, 9.4 played-all floaters, subgroup-relative 9.3 search, 11.1
|
|
62
|
+
rating-key publication order).
|
|
63
|
+
- Lim refinements (3.3/3.4 exclusion claims, mandatory 3.8 target,
|
|
64
|
+
sequential-scrutiny 4.4 culprit, round-parity 5.5/5.6 + 5.4 even clause).
|
|
65
|
+
- Forfeit/match caller contracts formalized (`RESULT_CONTRACTS.md`);
|
|
66
|
+
exact-search ceiling policy (`SEARCH_CEILING_POLICY.md`).
|
|
67
|
+
- 14 more discriminating regression tests (all old/new divergent cases
|
|
68
|
+
pinned). Full suite green; legacy byte-identical.
|
|
69
|
+
|
|
70
|
+
## [0.3.1] — 2026-10-03
|
|
71
|
+
|
|
72
|
+
Hostile FIDE conformance audit of the 0.3.0 2026 engines (authoritative
|
|
73
|
+
reference: Council bundle CM3-202517 FULL_TEXT + Annotated Dutch V2026).
|
|
74
|
+
No public API change; frozen v0.1.0/v0.2.0 behavior byte-identical:
|
|
75
|
+
|
|
76
|
+
- 20 conformance defects fixed across Dutch (BSN order, MDP-set order,
|
|
77
|
+
M1/MDP ordering), Dubov (G1 extremes, 3.2.4.1 shift, real-pairing C7),
|
|
78
|
+
Burstein (C6 sign, C7 scope, incoming loop, enumeration), Double/Team
|
|
79
|
+
(C5 construction, TPN identifier space, Team 4.3.7 + secondary),
|
|
80
|
+
Olympiad (floater routing), Lim (scrutiny, columns, even-making, 2.6,
|
|
81
|
+
3.x, 4.4, 5.4, Art.6), and all colour walkbacks (round-aligned).
|
|
82
|
+
- Budgets made effective (ticks + count guards + every-tick wall checks;
|
|
83
|
+
deferred Dutch alterations; exact lex-first fast paths); 2026 performance
|
|
84
|
+
gates measured (R1 + realistic sizes succeed; factorial ceilings terminate
|
|
85
|
+
typed — no heuristic pruning).
|
|
86
|
+
- 30-test adversarial corpus, 2026 randomized property suite (7 rulesets),
|
|
87
|
+
2026 benchmark record; version-scoped differential oracles pass
|
|
88
|
+
(BBP 2025-era vs legacy; no meaningless cross-version comparisons).
|
|
89
|
+
- Rule-level conformance matrix (`docs/audit/FIDE_CONFORMANCE_MATRIX.md`)
|
|
90
|
+
with explicit interpretation register; final report
|
|
91
|
+
(`docs/audit/FIDE_CONFORMANCE_FINAL_REPORT.md`). No FIDE endorsement
|
|
92
|
+
claimed; full conformance claimed nowhere interpretations remain.
|
|
93
|
+
|
|
94
|
+
## [0.3.0] — 2026-10-03
|
|
95
|
+
|
|
96
|
+
New additive `pairing_core.fide2026` namespace (no v0.1.0/v0.2.0 behavior
|
|
97
|
+
change — frozen kernel, KNOWN_RULESETS, KNOWN_SYSTEMS, resolve_ruleset all
|
|
98
|
+
untouched and pinned):
|
|
99
|
+
|
|
100
|
+
- Seven new rulesets from FULL_TEXT Council-bundle evidence (CM3-202517):
|
|
101
|
+
`dutch-2026` (C1–C21 search), `dubov-2026` (ARO/MaxT/G1–G2), `burstein-2026`
|
|
102
|
+
(Index/BSN enumeration), `lim-2026` (median routing), `double-2026`,
|
|
103
|
+
`team-2026` (lexicographic machinery), `olympiad-2022` (median + 9.x),
|
|
104
|
+
plus the `baku` accelerated modifier and C.04.2 board-order sorting.
|
|
105
|
+
- Entry point `pair_2026()` with exact-match `P26RulesetId` resolution (no
|
|
106
|
+
fallback); typed errors; budget/cancel/step discipline throughout.
|
|
107
|
+
- Evidence package (`docs/rules/fide/evidence/`), extracted rules
|
|
108
|
+
(`docs/rules/fide/extracted/`), official corpus
|
|
109
|
+
(`tests/corpus/fide_official/`, provenance-labelled), rule→source→code→test
|
|
110
|
+
traceability (`RULE_SOURCE_MATRIX.md`), upgraded source validator (wired
|
|
111
|
+
into the suite).
|
|
112
|
+
- Conformance: Berger FULLY_IMPLEMENTED_AND_EVIDENCED (unchanged); six 2026
|
|
113
|
+
systems + Olympiad IMPLEMENTED_WITH_EXPLICIT_EVIDENCE_GAPS (documented
|
|
114
|
+
readings listed in the matrix; no silent guessing); KO/match
|
|
115
|
+
OUT_OF_SCOPE_WITH_REASON. No FIDE endorsement claimed.
|
|
116
|
+
- v0.1.0/v0.2.0 compatibility: 41/41 goldens + full legacy suite green,
|
|
117
|
+
kernel outputs byte-identical.
|
|
118
|
+
|
|
119
|
+
## [0.2.0] — 2026-10-03
|
|
120
|
+
|
|
121
|
+
Additive canonical consumer contract (no v0.1.0 behavior change):
|
|
122
|
+
|
|
123
|
+
- `CanonicalPlayer` / `CanonicalRequest` / `pair_canonical()` — stable,
|
|
124
|
+
implementation-independent pairing contract (system + mandatory ruleset +
|
|
125
|
+
schema version + provider hint + deterministic flag), with legacy
|
|
126
|
+
converters, canonical JSON serialization, and module-isolation tests.
|
|
127
|
+
- Migration guide `v0.1.0 → canonical`
|
|
128
|
+
(`docs/MIGRATION_V010_TO_CANONICAL.md`); O08 two-minor support window
|
|
129
|
+
restated, nothing deprecated yet.
|
|
130
|
+
- Determinism contract (`docs/spec/DETERMINISM_CONTRACT.md`), API tiers
|
|
131
|
+
(`docs/spec/API_TIERS.md`), canonical contract spec, forensic baseline.
|
|
132
|
+
- Import-boundary tests (`__all__` allow-list, version consistency).
|
|
133
|
+
- Version-reporting tests now track the package version instead of pinning
|
|
134
|
+
`0.1.0` (historical goldens/records unchanged).
|
|
135
|
+
- v0.1.0 compatibility: 41/41 goldens + 15/15 contract tests green,
|
|
136
|
+
kernel outputs byte-identical.
|
|
137
|
+
|
|
138
|
+
## [Archived] post-0.1.0 development record (main branch, pre-0.2.0 wave)
|
|
139
|
+
|
|
140
|
+
> HISTORICAL: preserved unmodified below. These foundation items shipped
|
|
141
|
+
> across 0.2.0–0.4.0 (see entries above); this section is no longer the
|
|
142
|
+
> live "Unreleased" list.
|
|
143
|
+
|
|
144
|
+
### Added (all additive; v0.1.0 behavior preserved)
|
|
145
|
+
|
|
146
|
+
- Typed error taxonomy (`PairingError` family, `ValueError`-compatible).
|
|
147
|
+
- Dated rulesets (`RulesetId`, `ConstraintSet`, `dutch-till2026-compat`).
|
|
148
|
+
- Strict validation boundary + validated compat wrapper (`EngineRequest`,
|
|
149
|
+
`pair`, `validate_request`, `versions()`).
|
|
150
|
+
- Reproducibility envelope (`Pairing`, `RoundPairing`, digests, budgets).
|
|
151
|
+
- Engine provider abstraction + native provider + explicit registry
|
|
152
|
+
(`pair_via`; no silent fallback by construction).
|
|
153
|
+
- Execution budgets (step primary, wall-clock secondary) + cancellation.
|
|
154
|
+
- Forbidden-pair enforcement (rematch-equivalent) + `FORBID-01` check.
|
|
155
|
+
- C9 bye ordering (fewer unplayed games first; BBP-verified).
|
|
156
|
+
- Berger round-robin schedules incl. double cycle.
|
|
157
|
+
- Structured explanations (`explain`) + request serialization.
|
|
158
|
+
- TRF interchange subset (fixed-width, BBP-verified) + BBP/JaVaFo adapters
|
|
159
|
+
(bring-your-own binaries, stub-tested failure paths).
|
|
160
|
+
- Differential/conformance harness (11-class taxonomy, 23-case corpus).
|
|
161
|
+
- Env-gated live oracle suites (BBP_EXE, JAVAFO_JAR).
|
|
162
|
+
- Seeded property tests, hash-seed sweeps, benchmark suite + baselines.
|
|
163
|
+
- `LICENSE` (MIT, per O06), capability maturity model (`docs/CAPABILITY.md`).
|
|
164
|
+
|
|
165
|
+
### Fixed (measured, behavior-preserving except where noted)
|
|
166
|
+
|
|
167
|
+
- Lazy exchange enumeration (unbounded memory growth on huge brackets).
|
|
168
|
+
- Step-counted legality-matrix work (pathological single-80: >400s hang →
|
|
169
|
+
~8.5s typed timeout). Small-case outputs byte-identical (goldens green).
|
|
170
|
+
|
|
171
|
+
### Known deviations under investigation (frozen per O08)
|
|
172
|
+
|
|
173
|
+
- E.5 round-1 parity colours (live BBP + JaVaFo agreement vs S1-white).
|
|
174
|
+
- Absolute 3rd-float bar (live oracle divergence; BBP minimizes only).
|
|
175
|
+
- See `docs/research/DUTCH_CONFORMANCE_STATUS.md`.
|
|
176
|
+
|
|
177
|
+
## [0.1.0] — 2026-09-30
|
|
178
|
+
|
|
179
|
+
- Initial extraction: standalone FIDE Dutch Swiss engine from
|
|
180
|
+
`20kevit/chess-manager` (`domain/pairing/`), behavior-preserving.
|
|
181
|
+
- 15 contract tests; zero runtime dependencies.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 20kevit
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Keep regenerable build artifacts out of the sdist.
|
|
2
|
+
global-exclude *.pyc *.pyo __pycache__/* .pytest_cache/*
|
|
3
|
+
prune src/*.egg-info
|
|
4
|
+
prune **/*.egg-info
|
|
5
|
+
prune dist
|
|
6
|
+
prune build
|
|
7
|
+
# Release record ships in the sdist (README/LICENSE come via metadata).
|
|
8
|
+
include CHANGELOG.md
|