FIDE Laws of Chess について
FIDE Laws of Chess は、2023 年版 FIDE Laws に基づく固定版の実行可能モデルで、架空の審判事例と確認可能な回答を含みます。未解決の判断は審判に委ねながら、選択した判定例を教育・研究する用途に向いています。
主な機能
- 012023 年版 FIDE Laws に基づくモデル
- 02保持された架空事例 10 件
- 03明示的な事実と審判判断の要件
- 04確認可能なルールの根拠
- 05Node.js SDK とネイティブ MCP ラッパー
活用シーン
- 01反則手と時間切れの事例の検討
- 02ラピッドとブリッツの罰則の比較
- 03審判の判断が必要な問いの特定
MCP 対応
別配布の `@arxo/[email protected]` ラッパーは、同じ固定版モデルを stdio 経由の MCP サーバーとして実行します。Node.js 20+ が必要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.arxo.io/mcp/fide-chessclaude mcp add --transport http io-arxo-fide-chess https://mcp.arxo.io/mcp/fide-chess{"mcpServers":{"io-arxo-fide-chess":{"type":"http","url":"https://mcp.arxo.io/mcp/fide-chess"}}}Cursor で開く{"servers":{"io-arxo-fide-chess":{"type":"http","url":"https://mcp.arxo.io/mcp/fide-chess"}}}VS Code で開く{"mcpServers":{"io-arxo-fide-chess":{"type":"http","url":"https://mcp.arxo.io/mcp/fide-chess"}}}{"mcpServers":{"io-arxo-fide-chess":{"serverUrl":"https://mcp.arxo.io/mcp/fide-chess"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
16| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| kinds | array | いいえ | 候補の種類を絞り込みます |
| limit | integer | いいえ | 候補数(8、最大 25 件) |
| query | string | はい | 自分の言葉で質問または概念を入力します |
| package | string | いいえ | この法令文書内のみを検索します |
詳細
Arxo の FIDE チェス規則
固定されたモデル、明示的な事実、検証可能な回答を通じて、チェスの審判の判断を探ります。 不正な指し手、時間切れ、ラピッド/ブリッツの例外、記録、審判の判断を扱う、保存された架空の事例が10件あります。
Node.js 20+ · ESM · canon package 0.1.0 · model 0.1.1 · 2023年1月1日施行のFIDE版
Node.js で始める · 事例 · 証拠 · 形式化の深さ · 事例を投稿する · ソースリポジトリ
これは、教育および研究を目的とした独立したオープンソースの実証です。実際のチェスの判定には、正式なFIDEチェス規則と権限を持つ審判を利用してください。ソーステキストとモデルの対象範囲は固定されています。このパッケージは、汎用的なチェスエンジンとしての機能や完全な形式化を主張するものではありません。
Node.js で始める
要件:Node.js 20+。この例ではESモジュールを使用するため、.mjs
拡張子を維持してください。この手順は、2026年10月14日にNode.js 20.20.2を搭載したmacOS arm64で動作確認済みです。この方法では、グローバルCLI、Gitクローン、MCPクライアントは必要ありません。
新しいディレクトリを作成し、そこでターミナルを開いてから、次を実行します。
npm init -y
npm install --ignore-scripts @arxo/[email protected] @arxo/[email protected]
これをexample.mjsとして保存し、node example.mjsを実行します。
import { open } from '@arxo/law';
import { loadModel } from '@arxo/canon-fide-chess/chess';
import { game, white, getCaseInput } from '@arxo/canon-fide-chess/examples/arbiter';
const model = await loadModel();
const chess = await open(model.spec, {
offline: true,
local: { packages: { [model.spec]: model.package } },
});
const input = getCaseInput('SecondIllegal');
const loss = await chess.truth('game_lost_by', [game, white], input);
const draw = await chess.truth('game_drawn', [game], input);
console.log(loss.evaluationStatus, loss.truthStatus); // COMPUTED, TRUE_ONLY
console.log(draw.evaluationStatus, draw.truthStatus); // COMPUTED, NEITHER
出力される2行は、順に負け、引き分けです。
COMPUTED TRUE_ONLY
COMPUTED NEITHER
COMPUTEDは、クエリが評価されたことを意味します。TRUE_ONLYは、肯定的な裏付けがあり、否定的な裏付けがないことを意味します。NEITHERは、どちらの極性も裏付けられていないことを意味し、その命題が偽であるとは立証しません。
次に、getCaseInput('SecondIllegal')だけを
getCaseInput('SecondIllegalNoMate')に置き換え、node example.mjsをもう一度実行します。
REQUIRES_JUDGMENT NEITHER
COMPUTED TRUE_ONLY
今度は2行目で引き分けが確定します。この事例には、相手が合法な手順をどのように指してもチェックメイトできないという事実が含まれています。別個の負けクエリでは、ほかにも到達可能な負けの根拠が未解決のまま残るため、引き続き審判の判断を求めます。両方のステータスフィールドを確認してください。REQUIRES_JUDGMENTは、モデルが単独では判断しない評価が必要であることを示します。
ほかの保存された事例を試すには、事例一覧から名前を選んでください。独自の事例を提案するには、事例の事実、適用日、クエリ、パッケージ/ランタイムのバージョン、出力、異なる回答を導くべきだと考えるFIDE条項またはモデル規則を記載して、issueを作成してください。 架空または匿名化した事例を使用してください。
SDKは@arxo/[email protected]を通じてルールを実行します。この配布物をインストールしただけでは、SDKの自動canonリゾルバーには登録されません。上記の明示的なlocal.packagesの受け渡しを維持してください。ローダーはチェスの判断や数式を実装していません。
MCP サーバーとして使用する
独立したネイティブMCPラッパーは、同じ固定モデルをstdio経由で実行します。
npx -y @arxo/[email protected]
Node.js 20+、Linux x64またはmacOS arm64。クライアント設定、HTTPエンドポイント、入力、制限事項 · OCI手順 · npm手順 · 受け入れ済みの配布物。このMCP配布は、上記のNode.jsの方法とは別のものです。
事例を選択する
getCaseInput(name) | エピソード | 確認する質問と結果 |
|---|---|---|
TouchIntentUnknown | 移動可能な自分の駒。意図的なタッチについて裁定されていない | must_move_first_touched_piece: REQUIRES_JUDGMENT / NEITHER |
FirstIllegal | 完了した不正な指し手が1回 | 負け:REQUIRES_JUDGMENT / NEITHER。引き分け:COMPUTED / NEITHER |
SecondIllegal | モデルで指定された終了条件における不正な指し手が2回 | 負け:COMPUTED / TRUE_ONLY |
SecondIllegalNoMate | 不正な指し手が2回。チェックメイトできないことが確定 | 引き分け:COMPUTED / TRUE_ONLY |
FlagFall | フラグが落ち、持ち時間制限には到達しておらず、チェックメイト可能 | 負け:COMPUTED / TRUE_ONLY |
FlagFallNoMate | 同じフラグ落ち。チェックメイトできないことが確定 | 引き分け:COMPUTED / TRUE_ONLY |
RapidFirstIllegal | ラピッド15+10。不正な指し手が初回 | 相手に60秒が追加される。120秒の問い合わせはNEITHER |
BlitzFirstIllegalCompetitive | 競技ルールB.2に基づくブリッツ3+2。不正な指し手が初回 | 相手に120秒が追加される。60秒の問い合わせはNEITHER |
ShortOfTimeRecording | スタンダードチェス、加算なし、残り240秒 | must_record_moves: COMPUTED / FALSE_ONLY |
DeviceWarning | 電子機器が確認され、審判が警告を出した | 負けおよび異なるペナルティに関する問い合わせ:COMPUTED / TRUE_ONLY |
元の18件すべての事例/質問の期待値を保持し、検証します。フィクスチャのエクスポートにはcaseNames、game、white、black、king、CaseName、getCaseInput(name)が含まれます。呼び出すたびに独立したコピーが返されます。不明な名前を指定するとRangeErrorがスローされます。
事実と審判の判断
getCaseInputは、CLIの正規のアサーション、定数、コンテキスト、オプションを保持します。ローダーは、欠落している事実や裁定を補いません。モデルで明示的に宣言された終了条件はそのルールの一部であり、欠落した事実を偽とする一般的な前提ではありません。
タッチムーブでは、宣言された2つの引数(プレイヤーと駒)を使用します。
import { open } from '@arxo/law';
import { loadModel } from '@arxo/canon-fide-chess/chess';
import { white, king, getCaseInput } from '@arxo/canon-fide-chess/examples/arbiter';
const model = await loadModel();
const chess = await open(model.spec, {
offline: true, local: { packages: { [model.spec]: model.package } },
});
const answer = await chess.truth(
'must_move_first_touched_piece', [white, king], getCaseInput('TouchIntentUnknown'),
);
const document = JSON.parse(new TextDecoder().decode(answer.document));
console.log(answer.evaluationStatus, answer.truthStatus); // REQUIRES_JUDGMENT, NEITHER
console.log(document.results[0].judgmentRequests);
肯定的で、明示的にadjudicatedとされた意図的なタッチのアサーションによって、このモデルの義務が確立されます。この経路は個別に検証されます。元の判断欠落フィクスチャは変更されません。
欠落した経験的事実、否定的な事実、矛盾する支持は、NEITHER、FALSE_ONLY、BOTHのまま保持されます。確認対象の経験的な矛盾について、SDK 0.4.3はCOMPUTED / BOTHを返します。問い合わせは計算済みで、両方の極性が支持されています。両方のフィールドを読み取り、ブール値にまとめないでください。記録された得点など、正確なDecimal入力は文字列('0.75')で指定します。
SecondIllegalの正規入力全体
{
"legalTime": "2023-06-01",
"assertions": [
{
"contentHash": "sha256:696ba690ec316ad1654c94c94886b3d6e9764573460a0ed89f76280496c904fa",
"evidence": [],
"id": "urn:law:examples:chess:arbiter#player",
"kind": "assertion",
"literal": {
"args": [
{
"id": "urn:example:chess:game",
"kind": "entity_ref"
},
{
"id": "urn:example:chess:white",
"kind": "entity_ref"
}
],
"kind": "literal",
"polarity": "positive",
"predicate": "urn:fide:laws:clir:chess#player_of"
},
"origin": "case_input",
"package": "urn:law:examples:chess:arbiter"
},
{
"contentHash": "sha256:9f7706ed8482cd04f869afdd849b90eea3c2e42ca246bf932c8a20f77a1fcc15",
"evidence": [],
"id": "urn:law:examples:chess:arbiter#complete-mate-facts",
"kind": "assertion",
"literal": {
"args": [
{
"id": "urn:example:chess:white",
"kind": "entity_ref"
}
],
"kind": "literal",
"polarity": "positive",
"predicate": "urn:fide:laws:clir:chess#checked_player"
},
"origin": "case_input",
"package": "urn:law:examples:chess:arbiter"
},
{
"contentHash": "sha256:cd688c83624c70688f10ead443e5c46c32ad7d3310696caf6dad9b80be7c1cb0",
"evidence": [],
"id": "urn:law:examples:chess:arbiter#illegal-count",
"kind": "assertion",
"literal": {
"args": [
{
"id": "urn:example:chess:white",
"kind": "entity_ref"
},
{
"kind": "value",
"type": {
"name": "urn:law:std#Integer"
},
"value": 2
}
],
"kind": "literal",
"polarity": "positive",
"predicate": "urn:fide:laws:clir:chess#completed_illegal_move_count"
},
"origin": "case_input",
"package": "urn:law:examples:chess:arbiter"
}
],
"context": {
"decisionTime": "2026-09-08T12:00:00Z",
"knowledgeTime": "2026-09-08T12:00:00Z",
"legalTime": "2023-06-01",
"timezone": "UTC"
},
"options": {}
}
この入力は、保持されている.lawcaseからリリース済みCLI 0.2.3を使って取得したものです。フィクスチャ生成ツールはチェスの意味論を再現しません。フィクスチャのバイト列 · 取得元情報。
Arxo が返す正規バイト列として、answer.document を保持してください。同じランタイムバージョン、固定されたモデルと依存関係を使用した場合、同一の完全な入力(クエリ、事実、判断、時間的コンテキスト、オプション)を繰り返し実行すると、同じバイト列とハッシュが再現されます。answer.proof.nodes は、適用されたルールとその前提を示します。
現在の SDK では、これらのクエリに対する answer.sources と証明ノードのソースアンカー配列は空です。以下のソースリンクは、実行されたプロデューサー ID とハッシュ検証済みモデル内のアンカーを明示的に静的結合したものであり、評価器が出力する追加の引用ではありません。固定された出版物はチェスハンドブック、2023年法律です。
この完全な例では、負けの回答を保存し、モデルのアンカーリンクを出力します。
import { writeFile } from 'node:fs/promises';
import { open } from '@arxo/law';
import { loadModel } from '@arxo/canon-fide-chess/chess';
import { game, white, getCaseInput } from '@arxo/canon-fide-chess/examples/arbiter';
const model = await loadModel();
const chess = await open(model.spec, {
offline: true, local: { packages: { [model.spec]: model.package } },
});
const answer = await chess.truth('game_lost_by', [game, white], getCaseInput('SecondIllegal'));
await writeFile('answer.json', answer.document);
const nodes = new Map(model.package.ir.nodes.map(node => [node.id, node]));
const sourceLinks = answer.proof.nodes.filter(node => node.rule).map(node => ({
rule: node.rule,
anchors: (nodes.get(node.rule)?.anchors ?? []).map(id => ({
id, locator: nodes.get(id)?.locator,
})),
}));
console.log(answer.hashes, sourceLinks); // includes SecondIllegalMoveLoses → article/7
モデルが把握していること:ネイティブなタッチムーブのプロデューサーツリー
chess.unfold('must_move_first_touched_piece', { depth: 2, lang: 'en', quote: 0 }) によって生成され、選択されたケースはありません。ネイティブツリーとテキストの完全版。再帰の深さは形式化の深さとは別です。
モデルとローダー API
| インポート | 正確なモデル仕様 | エクスポート |
|---|---|---|
@arxo/canon-fide-chess | [email protected] | models、loadModel(exactSpec)、エラークラス |
@arxo/canon-fide-chess/chess | [email protected] | spec、loadModel() |
@arxo/canon-fide-chess/examples/arbiter | 保持されたケース入力 | 識別子、ケース名、独立した入力コピー |
loadModel は { spec, package, descriptor, pin, questionCatalog } を返します。ルートインポートで読み込まれるのはカタログとメタデータのみです。読み込み時に、選択したワールドとそのカタログを解析する前に元のバイト列を検証し、その後、独立したモデルオブジェクトを返します。ディスクリプターは別個に保持されます。package.meta.contentHash はリンクされたワールドのハッシュであり、packageContentHash は元のパッケージのハッシュです。このリリースにはモデルインポートはありません。
不明な仕様、またはバージョンの指定がない仕様では、ModelNotFoundError.code === 'MODEL_NOT_FOUND' が発生します。モデルアセットが欠落、破損、または不整合の場合は、ModelIntegrityError.code === 'MODEL_INTEGRITY' が発生します。ネットワークへのフォールバックはありません。TypeScript 宣言は、正確な仕様、関係名、修飾関係名、フィクスチャ名を対象とします。引数の数と値の種類は、実行時に SDK によって検証されます。
形式化の深さ
| モデル | 固定された版 | 測定単位/分母 | 実行可能 | その他の測定レベル | ステータス |
|---|---|---|---|---|---|
[email protected] | 2023年1月1日発効 | en_article / 12条 | 12 | 解釈済み:0、アンカー付き:0、ソースのみ:0、なし:0 | 部分的 |
既存の boundaries.depth 指標は、インポートを除いたパッケージ自身のノードと、元の条文区分の宣言を読み取ります。12条すべてに導出ルールがありますが、この粗い指標では、すべての条項が完全に形式化されていることは示されません。28件のアンカー参照はこの条文指標では未解決のままであり、レポートに記録されています。
前文と付録 A~D は、この分母の対象外です。A と B には、ラピッド/ブリッツのケースで使用される実行可能なルールがあります。C の記法と D の組織に関する資料は、このデモでは実行されません。ガイドラインは保持された法律文書の対象外です。これらの領域は、条文レポートでは未測定のままです。
単位ごとのレポートには、分母、版、ソース/パッケージ/ワールドのハッシュ、元の測定実装のハッシュ、アダプターのハッシュが記録されています。EXECUTABLE、ソースの有無、完全性、宣言されたシナリオ、実行の成功は、それぞれ別個の主張です。このモデルは制度上の述語と手続きを公開しますが、義務論的規範や義務ライフサイクル全体の位置づけは宣言しません。
対象範囲と検証
このパッケージは、提示されたエピソードを評価します。ボードおよび履歴に関する条件の大半は、明示的なプロトコル上の事実です。限定的な観測局面スライスでは、既知の4つの駒から成る完全な K/Q/R フレームと、特定のメイト不能ケースを扱います。それ以外の局面は対象外です。一般的な局面の到達可能性を確立したり、PGN を解析したり、トーナメントのペアリングを構築したりするものではありません。レーティング、タイトル、タイブレーク、スイス式ペアリングのモデルは別パッケージであり、同梱されていません。
モデル 0.1.1 では、元の期待結果を維持しながら、4つの準備上の欠陥を修正しています。具体的には、フィクスチャ内の手続き述語のスコープと、ハーフポイントに丸める前の正確な Decimal 中間値です。選択したパッケージは、ビルド、リプレイ、再ビルドを通じて、6つの新しい数値境界を含む103件のソースシナリオに合格します。インストール済みのデモでは、保持されている18件すべての質問、ローダーの失敗と分離、明示的および不在の判定、欠落・負・矛盾する事実、スコアの境界、正規化された再現性、README の例、厳格な TypeScript を確認します。
チェックの対象はこの配布物です。コーパス全体は not_checked であり、releaseVerified: false です。配布チェックは、対象の正確性や完全性を保証するものではありません。
ソースのピン留めと再現
ソースのピンでは、元のモデル/記述子/ワールド/カタログのバイト列とケース入力を、変更不能な公開ソースのリビジョンに固定しています。ソースの由来には、コーパスの由来と対象となる修正を別途記録しています。英語のソーステキストは、ピン留めされた可視テキストの抽出物(PINNED_UNOFFICIAL_COPY)であり、公式 PDF の公開を主張するものではありません。FIDE の帰属表示と発行者の規約はNOTICEに記載されています。Apache-2.0 は Arxo が作成したコードに適用され、これらの規約に取って代わるものではありません。
リポジトリ内のピン留めされた入力からラッパーを再ビルドするには、次を実行します。
git clone https://github.com/arxohq/arxo-fide-chess.git
cd arxo-fide-chess/npm
npm ci --ignore-scripts
npm run build -- --canon ..
npm test
npm run test:types
npm run candidate -- --out /absolute/new-candidate-directory
候補スクリプトは、ローカルの tarball を1つと、既存の arxo.npm-candidate/1 マニフェストを準備します。公開は行いません。配布には、arxo-io/law で確立済みの CI を使用します。公開および検証の手順 · 配布記録。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。