コンテンツにスキップ

アーキテクチャ決定記録

このディレクトリにはRigorのアーキテクチャ決定記録(Architecture Decision Records、ADR)が含まれています。各ドキュメントは、重要な設計上の決定、その背景、検討された選択肢、そして結果を記録しています。

  • ADR-0は基礎ドキュメントです — プロジェクトの中核的な原則とアーキテクチャを知るには、ここから始めてください。
  • ADR-1からADR-3は型モデル、拡張API、型表現を定義します — アナライザーの概念的な中核です。
  • 番号の大きいADRは基礎の上に構築されており、必要に応じて読むことができます。
  • 各ADRにはStatusフィールドがあります:AcceptedProposedSupersededのいずれかです。実装がまだ進行中のAcceptedなADRは、括弧書きの注記(例: partially implementedslice N deferred)を持ちます。
#TitleStatus
ADR-0Foundation and Core Architecture of RigorAccepted
ADR-1Type Model and RBS Superset StrategyAccepted
ADR-2Extension API StrategyAccepted
ADR-3Type RepresentationAccepted
ADR-4Type Inference EngineAccepted
ADR-5Robustness PrincipleAccepted
ADR-6Cache Persistence BackendAccepted
ADR-7v0.1.0 Slice DecisionsAccepted
ADR-8Steep-Inspired ImprovementsAccepted
ADR-9Cross-Plugin APIAccepted (implemented in v0.1.1)
ADR-10Dependency Source InferenceAccepted
ADR-11Sorbet Input AdapterAccepted
ADR-12dry-rb PackagingAccepted
ADR-13TypeNode Resolver PluginAccepted
ADR-14RBS Sig GenerationAccepted
ADR-15Ractor ConcurrencyAccepted (fork backend active; Ractor pool deferred)
ADR-16Macro ExpansionAccepted
ADR-17Monkey Patch Pre-EvaluationAccepted (implemented in v0.1.13)
ADR-18Substrate Per-Call-Site Return TypeAccepted (implemented in v0.1.6)
ADR-19Language Server PackagingAccepted
ADR-20Lightweight HKTAccepted (partial implementation)
ADR-21Rubydex EvaluationProposed
ADR-22Baseline and Project OnboardingAccepted
ADR-23Diagnostic Triage CommandAccepted (slices 1+2+3+4 implemented)
ADR-24Self Method Call ResolutionAccepted (slice 4 gated)
ADR-25Plugin Contributed RBSAccepted
ADR-26ActiveRecord Relation TypingAccepted
ADR-27Tool Distribution and Installation ModelAccepted (partially implemented; CI template + single binary deferred)
ADR-28Path-scoped Method-Protocol ContractsAccepted
ADR-29Browser PlaygroundAccepted (implemented in v0.1.10–0.1.11; cloud deploy + ruby.wasm deferred)
ADR-30rigor-ffi Plugin ShapeProposed (not implemented)
ADR-31Contribution and Supply-chain PolicyAccepted (in force)
ADR-32Inline-RBS Comment IngestionAccepted (implemented in v0.1.10)
ADR-33MCP Server PackagingAccepted (implemented in v0.1.10)
ADR-34Toplevel Unresolved Implicit-self Calls Warn by DefaultAccepted (implemented in v0.1.13; Playground severity wiring deferred)
ADR-35Override Signature Compatibility (Liskov signature rule)Accepted (slices 1–4 done; slice 5 deferred)
ADR-36Macro-substrate Nested-class Emission Tier (Mangrove Enum)Accepted (Slice A implemented; is_a? exhaustiveness deferred)
ADR-37Plugin Interface Segregation (narrow extension protocols)Accepted (Slices 1–3 implemented; all bundled walker plugins migrated)
ADR-38Plugin-declared Additional InitializersAccepted (def-form implemented; block-form deferred)
ADR-39Plugins may invoke their target library’s safe methods directlyAccepted (Plugin::Inflector + 3 consumers migrated; slice 3 deferred)
ADR-40config_schema declared defaults ({kind:, default:})Accepted (mechanism + 13 plugins migrated off the DEFAULT_* idiom)
ADR-41Inference budget design (wiring, on-hit policy, measurement-gated defaults)Proposed (spec table unwired; Layer 1 doc hygiene + Layer 2 measurement-gated wiring queued)
ADR-42Plugin-contributed binary-operator return types (coerce-direction)Proposed, low priority (self/left-operand case already works via dynamic_return, spec-confirmed; coerce direction is a narrow false positive — cheapest fix is the WD-D engine mitigation, precision via the ADR-20 HKT route; demand-gated)
ADR-43RBS-complete ancestor resolution (allow-list inherited-method dispatch)Accepted — fully landed (WD1–WD6; rigor check resolves a Ruby subclass’s inherited calls against an allow-listed RBS-complete ancestor (seed Plugin::Base) so contract misuse warns standalone, without Steep’s own-helper FP wall; zero net FP on the plugin lib tree; blanket resolution rejected on Rails-controller FP grounds; make check-plugins gate in verify + CI, teeth verified)

重要なアーキテクチャ上の決定を行うとき:

  1. このディレクトリで次に空いている番号を見つけます。
  2. 既存のADRからテンプレートをコピーするか、同じ構造(Status、Context、Decisions、Consequences)に従って新しいファイルを作成します。
  3. 上記の索引テーブルにエントリーを追加します。
  4. 適切なコードコメント、他のADR、またはAGENTS.mdからそのADRを参照します。
  • docs/types.md — 型仕様のクイックガイド。ADR-1とdocs/types.mdが同じ領域を論じているとき、アナライザーが何をするかについてはdocs/types.mdが権威を持ち、なぜそうするかについてはADR-1が権威を持ちます。
  • docs/type-specification/ — 規範的な型仕様。トピックごとのドキュメントに分割されています。
  • docs/internal-spec/ — アナライザー内部の契約(contract)(エンジンサーフェス(surface)、型オブジェクトの公開API)。
  • docs/handbook/ — エンドユーザー向けハンドブック。静的型付けの予備知識を持たないRubyプログラマー向けに書かれています。
  • AGENTS.md — このリポジトリで作業するエージェント向けの開発契約。

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