polyarchy
README.md
# Polyarchy(polyarchy.net)
> **状態:正典(本書が文書の地図・分類の凡例は下記「ドキュメント」節)。** ライセンス=Apache-2.0([LICENSE](LICENSE)・[NOTICE](NOTICE)・下記「ライセンス」節)。
日本の政策言説(経済団体・政府審議会の**公表資料**)と公的統計(**公開データ**)を、利用者の Claude/ChatGPT から
ツールとして参照できるようにする MCP サーバ群。現行 4 サービス=**政策主張DB `recommendations`**(主張)と
**統計参照DB `stats`**(事実)、**企業情報DB `companies`**(企業側の事実・2026-09 追加)、**審議会議事録DB `deliberations`**(決まるまでの議論・2026-10 追加)。「主張↔事実の突き合わせ」が並べる理由。扱うのは**すべて公開資料・公開データ**。
Polyarchy はサービス全体の名前。実体は**コーパス(文書ジャンル)ごとに独立したサービス**の集まりで、
各サービスは自分の MCP サーバ(別プロセス・別ホスト名)を持ち、共通契約 `polyarchy_common`(と、文書検索のサービスは検索部品の共有ライブラリ `polyarchy_retrieval`)だけを共有する。
## できること(現行 4 サービス・いずれも MCP サーバとして公開・利用者は自分の Claude/ChatGPT から呼ぶ)
**政策主張DB `recommendations`**([recommendations/README.md](recommendations/README.md)・公開 `https://docs.polyarchy.net/recommendations`)
- 経団連 / 政府(骨太方針・規制改革・財政審・デジタル行財政改革会議・人工知能基本計画 等)/ 連合 / 日本商工会議所 / 経済同友会 の公表資料を横断検索
- 約 3,700 文書・約 187,000 チャンクを日本語特化のハイブリッド検索(BM25 語彙 + ベクトル → RRF 融合 → 日本語リランカー)
- ツール 3 本=`search_policy_docs`/`sweep_policy_docs`(団体横断の多段検索=団体別 fan-out・集約型は健全な棄却)/`list_orgs`
**統計参照DB `stats`**([stats/README.md](stats/README.md)・公開 `https://docs.polyarchy.net/stats`)
- 日本の公的統計(GDP・QE・需給ギャップ・物価・賃金・労働・財政・資金循環・人口・法人企業統計 業種×規模 等)と
国際機関統計(IMF/OECD/世銀)の**値の厳密参照**=公表どおりの文字列を出典付きで返し、無ければ「ない」と返す(近似・補間はしない)
- 2 層=発見層(`list_datasets`/`find_statistics`/`list_sources`)と参照層(`lookup_statistic`/`lookup_panel`)=ツール 5 本
- 各値に再配布・商用利用条件(◎/○/△・`status=guide`)を付す([stats/docs/再配布条件.md](stats/docs/再配布条件.md))
**企業情報DB `companies`**([companies/CLAUDE.md](companies/CLAUDE.md)・[計画](companies/docs/開発計画.md)・公開 `https://docs.polyarchy.net/companies`〔箱で有効化後〕)
- 有価証券報告書(EDINET・金融庁・PDL1.0)の「主要な経営指標等の推移」と従業員の状況を、提出会社 約 4,100 社×5 期で**値の厳密参照**=XBRL の文字列のまま出典付きで返す
- 連結と単体は別の系列・「売上高」が無い会社(IFRS=売上収益・銀行=経常収益 等)には代わりに開示している項目と引き直し方を返す・遡及修正と会計基準の併記はもう一方の値を必ず添える
- 単社の 2 層=発見層(`find_company`/`list_items`)と参照層(`lookup_company_facts`/`lookup_segments`/`lookup_regions`)+横断検索(`list_metrics`/`screen_companies`/`screen_trend`=定義した式の派生値は横断検索だけ)=ツール 8 本・モデル不要・ランタイム秘密なし(EDINET の API キーは取込側だけ)
**審議会議事録DB `deliberations`**([deliberations/CLAUDE.md](deliberations/CLAUDE.md)・[収録範囲](deliberations/docs/収録範囲.md)・公開 `https://docs.polyarchy.net/deliberations`)
- 政府の会議体の過程文書(回ごとの配布資料・議事録・議事要旨)を横断検索=決定文書は政策主張DB、決まるまでの議論・資料はこちら
- 返す断片に毎回、会議体・回次・開催日・資料番号・提出者/発言者とその区分(推定しない=書かれていなければ不明)
- ツール 2 本=`search_deliberations`/`list_meeting`(政策主張DB と同じ検索部品 `polyarchy_retrieval`)
## 設計上の性質(セキュリティ)
- **参照専用**:サーバはメール送信・ファイル書き込み等の外部作用を持たない(読み取りツールのみ=recommendations 3・stats 5・companies 4)
- **サーバ側で生成 AI を呼ばない**:意味検索はローカルモデル(`cl-nagoya/ruri-v3-310m`)で完結・stats/companies はモデル不要。文章生成は各利用者の Claude/ChatGPT 側(ランタイム秘密ゼロ)
- **データ層は公開固定+フェイルクローズ**:検索経路は公開層に固定され、非公開データは構造的に返らない(`recommendations/core/search_api.py`・不変条件の定義は `polyarchy_common/metadata_core.py`)
- **受信ポートを開けない**:公開は Cloudflare Tunnel 経由(サーバから外向き接続のみ)。管理は AWS Session Manager
- **利用者はログイン必須**(外部 IdP=WorkOS AuthKit・案 B・2026-09-02〜)+秘密パス+レート制限。IP 許可は使えない(コネクタは Anthropic/OpenAI 側から接続)。例外は、同じネットワークの中の bot だけが使う中継の口(既定は閉・会員の印が必須=[PROD_MIGRATION](deploy/PROD_MIGRATION.md) §2.6)
- **残る壊れ方は供給元と資格情報**(汚染された依存・箱のロールによる配布物改ざん・捕捉ログ・可用性)=対策の設計は [docs/運用設計.md](docs/運用設計.md) §2.6・実施は [docs/残タスク.md](docs/残タスク.md) B17(依存の sha256 固定と箱ロールの最小化は 2026-09-04 済)。最後の砦=冪等な bootstrap+S3 のデータで箱を数分で作り直せること
## 構成(リポジトリ=Polyarchy 全体・**フォルダ名=コーパスID**)
```
polyarchy/
├── polyarchy_common/ 共通契約:メタデータ共通コア(層の不変条件)・分野タグ21分類・ログ/stdio保護・捕捉ログ・Access JWT・MCP HTTP 定型
├── polyarchy_retrieval/ 文書検索の部品(分かち書き・BM25・RRF・埋め込み/リランカーの登録・Qdrant ストア〔layer 必須〕)=torch を引くので共通契約と分ける
├── recommendations/ 政策主張DB(経済団体の提言+政府の主張系文書)
│ ├── core/ 検索スタックの固有部分(config・フィルタ・比較型の分解・llama_index の包装・search_api・多段。部品は polyarchy_retrieval)
│ ├── serving/ 入口(mcp_server。参照用 Web UI は 2026-09-02 廃止・2026-10-09 コード削除)
│ ├── ingest/ 収集・チャンキング・取込・タグ付け・メタデータ監査
│ ├── eval/ 評価セット運用・回帰ゲート・スモークテスト
│ └── data/ PDF・catalog・eval・捕捉ログ(大物は S3 管理・git 外)
├── stats/ 統計参照DB — 主張↔事実の突き合わせ。ベクトルではなく発見層(目録・系列検索)+厳密参照層(値の完全一致)。core/ingest/serving/eval/ops/docs
├── deliberations/ 審議会議事録DB(2026-10-04 配線・opt-in=ENABLE_DELIBERATIONS_APP。docs/=再配布条件・収録範囲。原文・中間物・索引は data/=git 外)
├── deploy/ AWS 構成(Terraform / bootstrap / systemd / Cloudflare / 運用手順)— 全サービス共通
├── ops/usage/ 週次利用レポートの集計の出力先(weekly.jsonl=数字のみ。実利用の数字なので git 外。生成は `python -m polyarchy_common.usage_report`)
├── docs/ 全体文書(残タスク・運用設計・評価設計・導入団体向け文書・長期計画=下記「ドキュメント」)
└── pyproject.toml 依存定義(共通+extras recommendations/stats〔箱〕・ingest/companies〔取込だけ=作業用 PC〕。ローカルは `pip install -e ".[all]"`・stats 単独箱は `.[stats]`)
```
## 拡張の形(コーパス連邦=サービスを足しても既存を壊さない)
現行は 4 サービスで、構造は**足すことを前提**に作ってある。新しいサービスは兄弟フォルダとして増え、
共通契約 `polyarchy_common`(メタデータの共通コア・層の不変条件・捕捉ログ・認証・MCP HTTP 定型)・文書検索の部品の共有ライブラリ
`polyarchy_retrieval`(文書検索のサービスだけ)と `deploy/`(同じ箱・同じ配布経路・同じ監視)だけを共有する=**あるサービスの作業は他サービスのソースを読まない**
(把握範囲を 1 サービスに閉じる)。連邦レイヤは作らず、利用者側の Claude がルーターになる(設計=[docs/長期開発計画.md](docs/長期開発計画.md))。
想定している拡張(**境界=外部の公開データの整理と利活用促進**。導入組織の非公開文書を扱うモジュールは本ソフトウェアの範囲外=
必要な組織が自組織帰属の別リポジトリで、本ソフトウェアを依存として使う形で作る。層の不変条件=公開固定・フェイルクローズは共通契約が担保):
| 候補 | 内容 | 位置づけ |
|---|---|---|
| **企業情報サービス(`companies/`)** | 有価証券報告書等の企業開示を「主張↔事実」の企業側の事実として参照。最初の取得元=EDINET(API・PDL 1.0 で商用可) | 着手済(パーサ検証済・計画=[companies/docs/開発計画.md](companies/docs/開発計画.md)) |
| **政府系の詳細情報サービス** | 審議会・検討会の議事録/論点(`deliberations/`)・国会(`diet/`)・地方議会(`assemblies/`)・外国政府(`foreign/`) | recommendations が「結論(提言・方針)」を扱うのに対し「議論の過程」を扱う兄弟 |
いずれも同じ規律で足す=評価セットと回帰ゲートを先に立て(fail-closed)、`release.sh` の同じ出口から配布し、
自動適用と切り戻しの同じ仕組みに乗る。要望の吸収先を「コード」でなく「データと評価問」に置く(複雑性を複利にしない)ことが、
サービス数が増えても保守が破綻しない理由([docs/運用モデルと事業継続性.md](docs/運用モデルと事業継続性.md))。
- 実装:Python 3.12/MCP 公式 SDK 2.x (MCPServer)・LlamaIndex・Qdrant・Sentence-Transformers・fugashi
- 稼働:AWS EC2(東京リージョン)+ Cloudflare Tunnel。実行はリポジトリ root を Python の root として `python -m recommendations.…`
## ドキュメント(地図)
4 分類=**正典**(生きている・更新はここだけ)/**設計**(安定リファレンス・判断が変わった時だけ更新)/**記録**(凍結・日付つき・更新しない)/**規約**(セッション作業規約=各 `CLAUDE.md`)。
行は話題。**どの文書も冒頭の「状態:」で自分の分類を宣言する**。
| 話題 | 正典 | 設計 | 記録 |
|---|---|---|---|
| **総論**(何を・なぜ・次に何を) | [用語と役割](docs/用語と役割.md)=文書共通の定義(役割・段階・用語はここだけ)/[残タスク](docs/残タスク.md)=これからやることと対応履歴 | [長期開発計画](docs/長期開発計画.md)=コーパス連邦・分割原理・拡張順序/[審議会議事録DB 開発計画](docs/審議会議事録DB_開発計画.md)=2 つ目の文書検索コーパスの設計と検討経緯(2026-10-02)(M0 の記録=[所見](deliberations/eval/M0_所見.md)・[確認シート](deliberations/eval/確認シート.md))・審議会議事録DB の [再配布条件](deliberations/docs/再配布条件.md)・[収録範囲](deliberations/docs/収録範囲.md)(正典)/[開発環境方針](docs/開発環境方針.md)=PoC 維持と並行開発の規約/[文書管理ルール](docs/文書管理ルール.md)=4 分類・地図・正典 1 箇所の規則(他プロジェクトへ持ち出し可) | [リファクタリング所見 2026-08-19](docs/リファクタリング所見_2026-08-19.md)=配置の読み替え表 |
| **開発計画・評価**(品質をどう測り育てるか) | [評価設計と改善計画](docs/評価設計と改善計画.md)=何をなぜ測るか(合格基準は本 README「品質の担保」) | [stats データ拡充計画](stats/docs/データ拡充計画.md)・[第7弾](stats/docs/第7弾_ドッグフーディング反映計画.md)・[第9弾](stats/docs/第9弾_マクロ速報ドッグフーディング反映計画.md)=弾ごとの計画/[companies 開発計画](companies/docs/開発計画.md)=企業情報サービスの便の段組み・契約案・容量の見立て・[companies 第 1b 便 計画](companies/docs/第1b便_計画.md)=セグメント別・地域別の実測と契約案・[companies 第 1c 便 計画](companies/docs/第1c便_計画.md)=横断検索(海外売上比率から)の実測と契約案/[実利用ログの提供](docs/実利用ログの提供_同意書ひな型と共有経路.md)=燃料確保の同意書と共有経路 | [stats 開発経緯と設計判断 2026-08-25](stats/docs/記録/開発経緯と設計判断_2026-08-25.md)(**新しいセッションはまずこれ**)/[companies(EDINET)正規化検証 2026-08-22](companies/docs/正規化検証.md)・[実データ検証 2026-09-20](companies/docs/記録/実データ検証_2026-09-20.md)・[母集団の棚卸し 2026-09-21](companies/docs/記録/母集団の棚卸し_2026-09-21.md)・[全社の取込と棚卸し 2026-09-22](companies/docs/記録/全社の取込と棚卸し_2026-09-22.md)・[人手の目視 2026-09-23](companies/docs/記録/人手の目視_2026-09-23.md)・[セグメント別の取込と棚卸し 2026-09-23](companies/docs/記録/セグメント別の取込と棚卸し_2026-09-23.md)・[地域別の表の棚卸し 2026-09-23](companies/docs/記録/地域別の表の棚卸し_2026-09-23.md)・[地域別の PDF 照合 2026-09-26](companies/docs/記録/PDF照合_地域別_2026-09-26.md)・[横断検索の母集団 2026-09-27](companies/docs/記録/横断検索の母集団_2026-09-27.md)・[遡りの取込と棚卸し 2026-09-30](companies/docs/記録/遡りの取込と棚卸し_2026-09-30.md)・[書類をまたぐ修正の実測 2026-09-30](companies/docs/記録/書類をまたぐ修正の実測_2026-09-30.md)・[区分の年をまたぐ続き具合の実測 2026-09-30](companies/docs/記録/区分の年をまたぐ続き具合の実測_2026-09-30.md)・[アンカー改定の記録 2026-10-09](docs/アンカー改定の記録_2026-10-09.md)=品質の担保の基準値の改定の経緯(2026-08-28〜10-08) |
| **サービス**(各 DB の入口と契約) | [recommendations/README](recommendations/README.md)/[stats/README](stats/README.md)/[polyarchy_common/README](polyarchy_common/README.md)=**共通契約の正典**/各論=[stats 共通契約](stats/docs/共通契約.md)・[recommendations 共通契約](recommendations/docs/共通契約.md)/[deploy/pages/README](deploy/pages/README.md)=公開ページ | stats 設計 5 本([指標棚卸し](stats/docs/指標棚卸し.md)・[データソース選定](stats/docs/データソース選定.md)・[参照粒度設計](stats/docs/参照粒度設計.md)・[再配布条件](stats/docs/再配布条件.md)・[業種分類対応表](stats/docs/業種分類対応表.md))/recommendations([コーパス収録範囲の明示](recommendations/docs/コーパス収録範囲の明示.md)・[再配布条件](recommendations/docs/再配布条件.md)・[収録拡充計画:AI・デジタル改革の決定文書](recommendations/docs/収録拡充計画_AI・デジタル改革の決定文書.md)=gov への追加の対象・評価問(案))/[polyarchy_common/](polyarchy_common/__init__.py)=共通契約パッケージ本体(docstring が詳細仕様)/[polyarchy_retrieval/](polyarchy_retrieval/__init__.py)=文書検索の部品の共有ライブラリ(docstring が仕様) | [公式コネクタ要件](docs/公式コネクタ要件.md)(2026-08-18 調査) |
| **運用**(動かし続ける) | [運用設計](docs/運用設計.md)=監視・更新・ロールの設計と実施状況/[deploy/README](deploy/README.md)=AWS runbook(§9.5 が入口ガード/ログ保持の正典)/[deploy/RUNBOOK_OPS](deploy/RUNBOOK_OPS.md)=障害対応・データ更新・切り戻し | [個人認証_案B設計](docs/個人認証_案B設計.md)=外部 IdP・②名簿限定→③個人向け提供の段組み/[性能と同時実行の開発計画](docs/性能と同時実行_開発計画.md)=導入直後の集中への備え(想定する山・打ち手・順序・運営者が決めること・2026-10-13) | — |
| **導入団体向け**(移行・合意・監査・対外説明) | [監査ガイド](docs/導入団体側_監査ガイド.md)=公開リポジトリと CI で誰でも再現できる独立監査の仕組み | [PROD_MIGRATION](deploy/PROD_MIGRATION.md)=導入団体 AWS への転写手順/[運用モデルと事業継続性](docs/運用モデルと事業継続性.md)=なぜ依存しなくて済むか(対外説明)/[非公開コーパスの参照設計](docs/非公開コーパスの参照設計.md)=導入団体が内部文書の検索を**別リポジトリで**作るときの型(不変条件・認可関門・検査。本リポジトリでは実装しない) | — |
| **規約**(セッション作業規約=新しい開発者・AI が最初に読む) | [CLAUDE.md](CLAUDE.md)=**リポジトリ root の規約(記憶ゼロのセッションはまずこれ**・読む順・性格・運用地雷)/[stats/CLAUDE.md](stats/CLAUDE.md)/[recommendations/CLAUDE.md](recommendations/CLAUDE.md)/[companies/CLAUDE.md](companies/CLAUDE.md) | — | — |
## 運用(人手の箱操作ゼロ・2026-09-03〜)
- **配布**=`bash deploy/scripts/release.sh <env>`(配る前の確認〔マウント元・ロック・editable install の向き先・語彙・コレクション名・調整値の混入・未コミットのコード〕→ 下記「品質の担保」の全ゲート PASS のときだけ S3 へ upload〔コードは git の追跡ファイルだけ〕→ マニフェスト)。提言の定型更新は `update.sh`、燃料の週次トリアージは `triage.sh`。
- **箱**=15 分毎の自動適用(コード tar 再展開・データ同期・smoke と稼働中の /healthz・**失敗時は旧版へ自動切り戻し**)・毎日の更新チェック・毎時のダッシュボード(S3 `ops/dashboard/`)・アラーム→メール。
- **CI 化(計画)**=ゲートを公開リポジトリの PR/main に紐づけ(GitHub Actions)、release も CI から行う=運用者の仕事は「PR をマージ」になる。段階と現在地=[docs/運用設計.md](docs/運用設計.md) §2.5。
- 手順=[deploy/RUNBOOK_OPS.md](deploy/RUNBOOK_OPS.md) §5・設計=[docs/運用設計.md](docs/運用設計.md) §0/§2.4・監査=[docs/導入団体側_監査ガイド.md](docs/導入団体側_監査ガイド.md) §4b。
## ライセンス
- 本リポジトリ(コード・運用自動化・評価資産・設計文書)のライセンスは **Apache-2.0**=[LICENSE](LICENSE)(標準全文・無改変)・© 表示は [NOTICE](NOTICE)。複製を受け取った者は誰でもこの条件で利用できる。初期開発(2026-08〜09)の履歴は本リポジトリに含めていない。
- 公開に含めないのは 3 種だけ=**相手方(導入団体)の情報・個人情報と実利用ログ・秘密(鍵・トークン等)**。これらは開示範囲の問題ではなく、最初からリポジトリに含めない。
- 収録データ(PDF・統計値)は git 外=各取得元の再配布条件に従う([stats/docs/再配布条件.md](stats/docs/再配布条件.md)・[recommendations/docs/再配布条件.md](recommendations/docs/再配布条件.md))。コードの公開とデータの再配布条件は別。
## 品質の担保(回帰ゲート)
構成変更のたびに、以下をリポジトリ root から実行して数値が不変であることを確認する。
合格基準と現在値の正典は本節だけ(他文書は写さずここへリンクする=ゲートの本数も写さない)。`release.sh` は本節の全ゲート(companies・deliberations は
env で有効にしたときだけ)を回し、アンカー(hit@5/MRR)は出力の ALL 行の数値を基準値と比べ、**それ以外の合否は終了コード**で判定する(出力の文字列を grep しない・2026-10-09〜)。ゲートを回す python はロックの版と一致すること
(`release.sh` の配る前の確認が `deploy/scripts/check_lock.py` で照合する=開発側で基準値を測る前にも手で回す)。**公開リポジトリと CI で誰でも同じ数値を再現できる**形にする(CI 化=[docs/運用設計.md](docs/運用設計.md) §2.5)。
### recommendations(API クレジット 0 で実行可)
(既定値が v7/Qdrant=env 不要。切り戻しは自動適用の退避と書き戻し〔deploy/RUNBOOK_OPS §5〕=v6 は今の評価問を満たさない=v5・v6 のコレクションは 2026-10-09 に配布元から外した。
Chroma 経路はバッチ2 段4〔2026-08-28〕で全廃=v5 データは S3 `data/chroma/` と退避先に保管のみ):
| ゲート | 基準(v7) |
|---|---|
| `python -m recommendations.eval.eval --retrieval-only --eval-set both` | hit@5 86.3% / MRR 0.707 |
| `python -m recommendations.eval.eval --filter-eval` | フィルタ 27/27 + 層ゲート PASS |
| `python -m recommendations.eval.multistage_eval` | 網羅 100% / 集約棄却 12/12 / 答え可能 3/3(答え可能は本番の入口 orchestrate で測る。集約棄却は判定方針の回帰テスト=covered は「絞り込みの範囲で 1 件以上返った」の意で関連度の閾値は無い) |
| `python -m recommendations.eval.mcp_smoke` | MCP 疎通・層公開固定・stdout クリーン |
| `python -m recommendations.eval.concurrency` | 同時に流しても 1 本ずつと結果が同じ(ツールの関数を、評価問から作った呼び出し〔絞り込み・団体横断・重複抑制を混ぜる〕で 1 本ずつと同時 3 本の 2 通りに流し、返り値の全体が一致・捕捉ログの行が全部そろう)=箱はツールを同時に動かす(unit の `MCP_TOOL_CONCURRENCY`・2026-10-14〜) |
### deliberations(審議会議事録DB・2026-10-03〜。`release.sh` は env の `ENABLE_DELIBERATIONS_APP=true` のとき 5 本と束の書き出しを足す=2026-10-04 配線・同時実行は 2026-10-14〜)
手元の専用 Qdrant(`qdrant-delib`・:6340)と取り込み済みのコレクションが前提([deliberations/CLAUDE.md](deliberations/CLAUDE.md))。
| ゲート | 基準 |
|---|---|
| `python -m deliberations.eval.retrieval` | hit@5 94.7% / MRR 0.856(アンカー問 57=M0 で本人が確定した 35+2026-10-06 に足した 16〔2026-10-07 本人が確認〕+2026-10-07 に足した 6〔同日 本人が確認〕・ミス 3=初めて出た回の型〔検索は関連度順のため後の回が上に来る=初出の特定は利用側の期間の絞り込みと list_meeting〕) |
| `python -m deliberations.eval.attribution_gate` | 帰属の取り違え 0(M0 の帰属ラベル=資料 40・発言 42+アンカー問の発言者の区分・資料の提出者の区分と提出者)・初出の型(D)の正解を全単位から数え直して一致・全単位の fail-closed |
| `python -m deliberations.eval.layer_gate` | 公開以外 0・機密の自己試験で遮断・layer の無い検索を拒む・匿名の単位に発言者なし |
| `python -m deliberations.eval.mcp_smoke` | ツール 2 本・読み取り専用・layer 引数なし・返り値の帰属と注記 |
| `python -m deliberations.eval.concurrency` | 同時に流しても 1 本ずつと結果が同じ(アンカー問の全部・会議体と資料の種別の絞り込み・回の一覧を、1 本ずつと同時 3 本の 2 通りに流して返り値の全体が一致・捕捉ログの行が全部そろう) |
> 改定の経緯=[アンカー改定の記録](docs/アンカー改定の記録_2026-10-09.md)。アンカーは回帰を見つけるためのもの(固定の問に合わせた検索側の調整をしない)。
### companies(2026-09-20〜。`release.sh` は env の `ENABLE_COMPANIES_APP=true` のとき 4 本を足す=2026-09-22 配線)
| ゲート | 基準 |
|---|---|
| `python -m companies.eval.exact_match` | **原典完全一致**(`companies/data/eval/*.jsonl`)=正例・負例とも全件 PASS(2026-09-23 時点 正例 371/負例 37。期待値は EDINET の公式 CSV と自前パーサの 2 経路一致。問は書類を固定して引く)+**セグメント別(第 1b 便・`segments_exact` を続けて判定)**=正例・負例とも全件 PASS(2026-09-23 時点 正例 134/負例 18)・値の置き場の全件で会社が定義した項目のラベルと区分のラベル(標準の区分は会社のラベルが無ければタクソノミの標準ラベル)と要素のラベル(標準要素は公式 CSV の項目名・無ければタクソノミの冗長ラベル)が空の値 0・返した kind はすべて `kind_note` に説明がある・found=false の区分にもラベル+**地域別(第 1b 便②・`regions_exact` を続けて判定)**=正例・負例とも全件 PASS(2026-09-25 時点 正例 291/負例 10。期待値は本文の inline XBRL から別のパーサで・合計のセル 40 問はタグの付いた売上高との 2 経路一致)・値の置き場の全件で原典の欄の表の数(入れ子を含む)と写した表の数が一致しない欄 0(2026-09-26 に負例 16)+**業種(第 1c 便・`industries_exact`)**=全社に EDINET の提出者業種があり東証 33 業種の語彙の中+**横断検索(第 1c 便・`screen_exact`)**=式エンジンの規則・無い入力の 3 段・検証済みの型の値が全件 PASS(2026-09-27 時点 正例 223/負例 22/横断の問 6。値の期待値は単社の参照層で入力を引いて別に計算・海外売上比率は本文 inline XBRL の別のパーサ+合計はタグの収益との 2 経路一致)+**時系列(第 1e 便・`trend_exact`)**=系列と集約・除外の理由・横断の問・1 社の年ごとの並びが全件 PASS(期待値は全書類の公式 CSV と自前パーサの 2 経路一致)。どの副ゲートも問が 0 件なら FAIL・expect の知らないキーは FAIL |
| `python -m companies.eval.find_quality` | 発見層(企業の同定)の到達率=全問 PASS(2026-09-21 時点 20 問=旧社名・表記ゆれ・候補が複数のときは 1 社に決めない) |
| `python -m companies.eval.test_core` | 語彙と評価問の整合・便ごとの問数の下限(第 1e 便を含む)・除外の理由ごとに負例 1 問以上(ネットワーク不要) |
| `python -m companies.eval.mcp_smoke` | MCP 疎通・層公開固定・fail-closed・stdout クリーン |
### stats
| ゲート | 基準 |
|---|---|
| `python -m stats.eval.mcp_smoke` | MCP 疎通・fail-closed(該当なしは found=false+理由)・stdout クリーン |
| `python -m stats.eval.exact_match` | **原典完全一致**(`stats/data/eval/*.jsonl`)=正例・負例とも全件 PASS(評価セットは収録拡充とともに成長=2026-09-15 時点 正例 312/負例 103) |
| `STATS_TEST_STRICT=1 python -m stats.eval.test_core` | 期間表記・レジストリ検証・ingest 純関数・取得元の型の配線の網羅(ネットワーク不要)。値ストアに依存する検査は STRICT でスキップ 0(release.sh はこの形で呼ぶ) |
| `python -m stats.eval.find_quality` | 発見層の到達率=全問 PASS(2026-09-15 時点 227 問。下限は test_core が固定=不退転) |
取込・更新時はデータセット固有の整合ゲートも通す(法人企業統計の合計整合・SNA/資金循環の恒等式 7 本など=
`stats.ops.refresh` が実行)。詳細=[stats/README.md](stats/README.md)「実行」節。
### 共通
共通契約の単体テスト:`python -m polyarchy_common.tests.test_common`
> 改定の手順(アンカーは回帰を見つけるトリップワイヤ=最大化する KPI ではない):① 収録・評価問を足した変更でゲートを回し、
> 正解が上位 5 件から外れた既存の問と、順位が下がった問を数える(`--dump-topk` の前後比較)② 外れ・下がりが主題適合の割り込み
> (同じ主題を扱う新しい文書)か、検索の劣化かを問ごとに判断する ③ 主題適合なら基準値を実測に改め、本節の表・`release.sh` の既定値
> (`REQUIRE_HIT5`・`REQUIRE_MRR`・審議会DB は `DELIB_REQUIRE_*`)を**同一コミット**で直し、経緯を残タスクの該当タスク(§E)に書く
> ④ 1 問に合わせた検索側の調整はしない(過適合)。過去の改定の経緯=[アンカー改定の記録](docs/アンカー改定の記録_2026-10-09.md)。
This server cannot be deployed
Maintenance
ActivityActive
ResponsivenessNo issues