Goal
Add BMS-IR as an opt-in, submit-only IR provider using bmz-player existing provider boundary, durable submission queue, and per-provider failure isolation.
This is paired with BMS-Mania/IR#1127 because it introduces a native server adapter and a distinct client identity.
Upstream constraints
Implementation follows the current upstream Markdown and code, especially:
docs/ir.md
docs/rian-ir.md
docs/score-persistence.md
AGENTS.md
- the bmz contribution policy proposed in BMS-Mania/IR#1126
The contribution will keep client implementation identity separate from score rule identity and will not route BMS-IR failures into local play, local score persistence, or other providers.
Initial acceptance matrix
Supported:
- manual, unassisted single-chart results
- Beatoraja rule mode
- normal/effective-LN scoring
- non-Battle play
- existing BMS-IR ID plus LR2 game token authentication
- six desktop locales
- provider disabled by default
Intentionally out of scope:
- course submissions
- replay upload
- ranking, rival, and table reads
- primary-provider capabilities
- assisted, autoplay, replay, practice, Battle, CN, and HCN results
These narrower limits are intentional until BMS-IR has matching rule buckets and contracts.
Acceptance criteria
- Add an explicit BMS-IR provider/protocol without pretending to be BMZ Official or rianIR.
- Reuse the existing queue and provider-key isolation.
- Apply BMS-IR-specific eligibility before enqueue.
- Send a native UTF-8 JSON score payload with chart source format, MD5/SHA-256 identity, result details, options, rule mode, and an idempotency key.
- Do not enqueue replay or course jobs for this provider.
- Preserve current defaults; the new provider is opt-in.
- Localize all bmz-owned UI strings in ja, en, ko, zh-CN, zh-TW, and zh-HK.
- Add focused tests and run the upstream Rust validation commands.
- Document the protocol reference, intentional differences, provenance, and source-only release boundary.
Release boundary
This issue covers upstream source acceptance only. It does not include a BMS-IR production rollout, bmz-player distribution build, public release note, or live-service acceptance.
Goal
Add BMS-IR as an opt-in, submit-only IR provider using bmz-player existing provider boundary, durable submission queue, and per-provider failure isolation.
This is paired with BMS-Mania/IR#1127 because it introduces a native server adapter and a distinct client identity.
Upstream constraints
Implementation follows the current upstream Markdown and code, especially:
docs/ir.mddocs/rian-ir.mddocs/score-persistence.mdAGENTS.mdThe contribution will keep client implementation identity separate from score rule identity and will not route BMS-IR failures into local play, local score persistence, or other providers.
Initial acceptance matrix
Supported:
Intentionally out of scope:
These narrower limits are intentional until BMS-IR has matching rule buckets and contracts.
Acceptance criteria
Release boundary
This issue covers upstream source acceptance only. It does not include a BMS-IR production rollout, bmz-player distribution build, public release note, or live-service acceptance.