matchmaking · diff

git:20260912.7597f47 to git:20260913.0d08e87

26 added, 5 removed. Audit A to A.

---
name: matchmaking
- description: Who you fight. Queue is not a second combat clock. Use for 匹配, 排位, 段位.
+ description: Use when players or parties need to enter a local/online/private/ranked pool with explicit ticket identity, compatibility constraints and deterministic match assignment separate from netcode and gameplay balance.
---
# Matchmaking
- Ask first: casual, ranked, or private?
+ Ask the queue model: casual, ranked, private, local-only, custom, or existing.
- Columns: casual-pool | ranked-mmr | private-code | local-only.
+ ## Contract
- Rules: netcode column stays `netcode-feel`. Ranked may not silently change hitstop. Long queue is a setup issue (`gameplay-validation`), not a reason to buff the loser. Party members use one ticket (`party-follow` does not apply online unless you said so).
+ Publish:
+ - stable `match_ticket_id` and request revision
+ - stable `match_ruleset_id` and revision
+ - party/member IDs if grouped
+ - explicit `compatibility predicate` (build/protocol/region/input/policy as applicable)
+ - ranking/search expansion policy where used
+ - cancellation/timeout/retry semantics
+ - assigned match/session identity
- Accept: a private code always finds that room. Casual does not hide a hidden MMR that bans new players from a first match.
+ ## Ownership
+
+ This skill owns queue/ticket lifecycle and compatible assignment. `netcode-feel` owns transport/prediction, balance systems own gameplay tuning, and party/local-coop systems own member identity before ticket creation.
+
+ ## Rules
+
+ 1. Enqueue, cancel and assignment callbacks are idempotent by ticket/request identity.
+ 2. Ranking, skill estimates, input segmentation, region widening and queue-time tradeoffs are project policies; none are universally required or forbidden.
+ 3. The same compatibility revision cannot silently pair clients that fail its published predicate.
+ 4. Queue delays and assignment failures are setup/service evidence, not permission to mutate gameplay rules.
+ 5. Private/direct matching uses stable room/session identity and explicit access policy rather than display names.
+
+ ## Acceptance
+
+ A reviewer can trace one `match_ticket_id` from enqueue through cancel/timeout/assignment, identify the `match_ruleset_id` and compatibility predicate, and show that duplicate callbacks do not create multiple matches or silently change gameplay policy.