コンテンツにスキップ

Rigor内部仕様

ドラフト。このディレクトリはRigorの解析器内部の契約(contract)に関する正規仕様です。下流の機能が依存するエンジン表面と、プラグイン・ルール・CLIコンポーネントが利用する型オブジェクトの公開モデルを定義します。

docs/internal-spec/以下の文書は、解析器が内部的に何で構成されているかを記述します。エンジンとプラグインのコードが守らなければならない不変な形(shape)、公開メソッド表面、同一性ルール、正規化ルーティング、安定性保証を扱います。型言語のセマンティクス(RBS相互運用、値束、ナローイング(narrowing)規則、正規化規則、消去規則、診断識別子)はdocs/type-specification/にあり、本ディレクトリの記述が型言語の挙動と矛盾するときは型仕様が拘束します。

設計の根拠、決定の履歴、却下/保留された選択肢、未解決事項はdocs/adr/(とりわけ型オブジェクトモデルについてはdocs/adr/3-type-representation.md)にあります。本仕様とADRが解析器の挙動について矛盾しているように見えるときは、本仕様が拘束し、ADRを修正すべきです。

本仕様で使うMUST、MUST NOT、SHOULD、SHOULD NOT、MAYのキーワードはRFC 2119RFC 8174に従って解釈します。

Rubyの識別子(Rigor::TypeRigor::TrinaryRigor::Type::Combinatorなど)は本仕様で使う仮の名前です。記述する契約が保たれている限り、実装段階で改名してかまいません。例の中の型表現はdocs/type-specification/の規約に従います。

  • docs/type-specification/は型言語の意味を定義します。本ディレクトリは、その意味を満たすために解析器が公開するものを定義します。
  • docs/adr/1-types.mdは型モデルの根拠を記録します。型仕様は結果として現れる挙動を拘束し、本ディレクトリは結果として現れる内部契約を拘束します。
  • docs/adr/2-extension-api.mdは拡張APIの決定を記録します。その決定の一部(Type問い合わせ、Scope問い合わせ、ケイパビリティ(capability)ロール適合)は本書で規範的になり、ADRは引き続き根拠の文書です。
  • docs/adr/3-type-representation.mdは内部型表現の根拠と未解決事項を記録します。安定した決定はinternal-type-api.mdで規範的になります。
  • docs/adr/4-type-inference-engine.mdは型推論エンジンの根拠、スライス(slice)のロードマップ、ADR-3の未解決事項に対する暫定回答を記録します。安定した決定はinference-engine.mdで規範的になります。
文書範囲
implementation-expectations.mdエンジン表面 — Scope、ファクトストア、効果モデル、ケイパビリティロール推論、正規化、RBS消去のルーティング、公開安定性ルール。
internal-type-api.md型オブジェクトの公開契約 — メソッド表面、同一性と等価性、不変性、ファクトリー経由の正規化ルーティング、診断表示のルーティング。
inference-engine.mdRigor::Scope#type_of(node)問い合わせ — 純粋性、不変なScope規律、Dynamic[Top]への安全フォールバックポリシー、環境ローディング境界。
reflection.mdRigor::Reflection読み取り側ファサード — ClassRegistry + RbsLoader + Scopeで発見した事実を統合した読み取り表面。v0.1.0のプラグインAPIレディネス向け公開読み取り表面。
cache.mdRigor::Cache層 — ディスクリプタスキーマ、ファイルシステム実装のStore、最初のキャッシュ生成器(RbsConstantTable)、CLIの可観測性、診断provenance。
flow-contribution.mdRigor::FlowContributionバンドル — プラグイン、RBS::Extended注釈、組み込みナローイングルールが、単一の呼び出しエッジで解析器に事実と効果を渡すための公開パッケージ。
flow-contribution-merger.mdRigor::FlowContribution::Merger — 1つの呼び出しエッジでの複数の貢献を、権限ティアと競合検出を備えた単一のタグ付き要素リストへ畳み込む決定論的なマージポリシー。
plugin.mdプラグイン契約 — Rigor::Plugin::BaseManifest(すべての拡張フィールド)、Loader / Registryの登録 + トポロジカル順序付け、Services注入。
plugin-trust.mdプラグインのトラスト & I/Oポリシー — TrustPolicytrusted_gemsallowed_read_rootsnetwork_policy)、仲介されたファイル / ネットワーク表面であるIoBoundaryServicesの追加。
plugin-cache-producers.mdプラグイン側のキャッシュプロデューサー — Plugin::Base.producer DSL、#cache_for呼び出し可能オブジェクト、ディスクリプタの自動プレフィックス、glob_descriptor発見ヘルパー。
macro-substrate.mdマクロ / DSL展開基盤 — プラグインがメタプログラミングライブラリの呼び出し形(shape)をRigorに教えるために宣言するPlugin::Macro::*値オブジェクトのシェイプ(shape)(ティアA/B/C/D + ネストクラス放出)(ADR-16 / ADR-18 / ADR-36)。
public-api.md公開APIの安定境界 — プラグイン契約が設計対象とする名前空間(Rigor::ScopeTypeEnvironmentReflectionFlowContributionDiagnostic)、および内部に留めておく表面。
diagnostic-shape.mdRigor::Analysis::Diagnosticのフィールドシェイプ(shape)— フィールド、from_node / from_locationの位置規約、qualified_ruleの導出 + provenance。記述的で、まだロックされていない(public-api.mdを参照)。
baseline.mdベースライン(baseline)のバケットキー導出 — [file, rule, message_regex]のタプル、パスの相対化、:rule / :messageのマッチモード(ADR-22)。
worker-session.mdワーカーセッションプロトコル — WorkerSessionの共有可能な入力、ワーカーごとの所有境界、並列解析の背後にある逐次等価性契約(ADR-15)。
dependency-source-inference.mdオプトイン依存関係ソース推論(ADR-10)— dependencies.source_inference:設定、ウォーカー / ディスパッチャーティア、DependencyEntryキャッシュスライス、dynamic.dependency-source.*診断ファミリー。

このリストは、追加の内部契約が安定するにつれて拡大します。

© 2026 TypedDuck. Licensed under CC BY-SA 4.0.