ibex 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +100 -272
  3. data/docs/architecture.md +187 -35
  4. data/docs/bison-import.md +103 -0
  5. data/docs/comparison-policy.md +127 -0
  6. data/docs/configuration-model.md +59 -0
  7. data/docs/configuration-report.md +28 -0
  8. data/docs/conflict-explanation-reviews/v1/records/README.md +28 -0
  9. data/docs/conflict-explanation-study.md +62 -0
  10. data/docs/construction-profiling.md +157 -0
  11. data/docs/cst-migration.md +3 -4
  12. data/docs/cst.md +24 -0
  13. data/docs/decisions/0000-template.md +24 -0
  14. data/docs/decisions/0001-separate-ir-pipeline.md +34 -0
  15. data/docs/decisions/0002-opaque-user-code-boundary.md +32 -0
  16. data/docs/decisions/0003-self-hosted-grammar-frontend.md +32 -0
  17. data/docs/decisions/0004-shared-semantic-and-lossless-source-model.md +33 -0
  18. data/docs/decisions/0005-contained-grammar-composition.md +34 -0
  19. data/docs/decisions/0006-bounded-structural-grammar-lowering.md +32 -0
  20. data/docs/decisions/0007-shared-parser-construction-pipeline.md +33 -0
  21. data/docs/decisions/0008-versioned-runtime-package-boundary.md +36 -0
  22. data/docs/decisions/0009-isolated-parser-sessions.md +34 -0
  23. data/docs/decisions/0010-committed-runtime-observation.md +34 -0
  24. data/docs/decisions/0011-versioned-semantic-action-boundary.md +37 -0
  25. data/docs/decisions/0012-bounded-nonexecuting-analysis.md +37 -0
  26. data/docs/decisions/0013-transactional-generation-publication.md +37 -0
  27. data/docs/decisions/0014-versioned-generated-lexer.md +35 -0
  28. data/docs/decisions/0015-worker-isolated-browser-analysis.md +32 -0
  29. data/docs/decisions/0016-red-green-concrete-syntax.md +34 -0
  30. data/docs/decisions/0017-persistent-syntax-artifacts.md +35 -0
  31. data/docs/decisions/0018-conservative-incremental-syntax-reuse.md +38 -0
  32. data/docs/decisions/0019-runtime-syntax-session-boundary.md +51 -0
  33. data/docs/decisions/0020-grammar-ir-parser-contract.md +65 -0
  34. data/docs/decisions/0021-data-only-parser-table-sidecar.md +50 -0
  35. data/docs/decisions/0022-manifest-bound-verification-report.md +77 -0
  36. data/docs/decisions/0023-syntax-only-repair-results.md +48 -0
  37. data/docs/decisions/0024-direct-ielr-construction.md +42 -0
  38. data/docs/decisions/README.md +74 -0
  39. data/docs/declarative-configuration.md +274 -0
  40. data/docs/development.md +196 -2
  41. data/docs/direct-ielr-decision.md +120 -0
  42. data/docs/direct-multi-entry-decision.md +82 -0
  43. data/docs/editor-setup.md +2 -1
  44. data/docs/error-ux-review-rubric-v1.md +117 -0
  45. data/docs/error-ux-reviews/v1/records/README.md +22 -0
  46. data/docs/error-ux-round2-review-status-v1.json +27 -0
  47. data/docs/error-ux-round2-reviews/v1/records/README.md +30 -0
  48. data/docs/error-ux-round2-v1.json +1617 -0
  49. data/docs/error-ux-round2.md +111 -0
  50. data/docs/error-ux.md +54 -0
  51. data/docs/getting-started.md +80 -0
  52. data/docs/grammar-reference.md +184 -13
  53. data/docs/ielr-design.md +43 -0
  54. data/docs/ielr.md +92 -0
  55. data/docs/impact.md +101 -0
  56. data/docs/ja/bison-import.md +51 -0
  57. data/docs/ja/stable-api.md +53 -0
  58. data/docs/lexer-construction-profile.md +109 -0
  59. data/docs/lexer-migration.md +5 -0
  60. data/docs/maturity.md +129 -0
  61. data/docs/project-site-strategy.md +54 -0
  62. data/docs/racc-migration-evidence.md +45 -0
  63. data/docs/racc-migration.md +11 -0
  64. data/docs/release-readiness.md +126 -68
  65. data/docs/repair-semantics.md +123 -0
  66. data/docs/runtime-abi-evolution.md +310 -0
  67. data/docs/stability.md +145 -34
  68. data/docs/status.md +43 -0
  69. data/docs/syntax-sessions.md +183 -0
  70. data/docs/table-artifact.md +125 -0
  71. data/docs/test-interactions.md +219 -0
  72. data/docs/verification-report.md +137 -0
  73. data/docs/verifier-trust-boundary.md +199 -0
  74. data/docs/workloads.md +132 -0
  75. data/lib/ibex/analysis/digraph.rb +128 -0
  76. data/lib/ibex/analysis/sets.rb +14 -0
  77. data/lib/ibex/analysis.rb +1 -0
  78. data/lib/ibex/bison_import/importer.rb +516 -0
  79. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  80. data/lib/ibex/bison_import.rb +200 -0
  81. data/lib/ibex/bounded_subprocess.rb +171 -0
  82. data/lib/ibex/cli/ambiguity.rb +14 -5
  83. data/lib/ibex/cli/analysis.rb +134 -0
  84. data/lib/ibex/cli/bison_import.rb +121 -0
  85. data/lib/ibex/cli/config.rb +128 -0
  86. data/lib/ibex/cli/diagnostics.rb +31 -11
  87. data/lib/ibex/cli/documentation.rb +11 -8
  88. data/lib/ibex/cli/equiv.rb +169 -0
  89. data/lib/ibex/cli/error_messages.rb +11 -4
  90. data/lib/ibex/cli/explain.rb +14 -5
  91. data/lib/ibex/cli/fix.rb +203 -0
  92. data/lib/ibex/cli/formatting.rb +11 -10
  93. data/lib/ibex/cli/fuzz.rb +200 -0
  94. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  95. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  96. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  97. data/lib/ibex/cli/grammar_tests.rb +32 -14
  98. data/lib/ibex/cli/impact.rb +393 -0
  99. data/lib/ibex/cli/ir_tools.rb +5 -61
  100. data/lib/ibex/cli/outputs.rb +60 -33
  101. data/lib/ibex/cli/reduce.rb +202 -0
  102. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  103. data/lib/ibex/cli/samples.rb +49 -23
  104. data/lib/ibex/cli/verify.rb +116 -0
  105. data/lib/ibex/cli/watch.rb +6 -5
  106. data/lib/ibex/cli.rb +362 -56
  107. data/lib/ibex/codegen/action_locations.rb +1 -1
  108. data/lib/ibex/codegen/action_method_source.rb +5 -6
  109. data/lib/ibex/codegen/action_source.rb +3 -2
  110. data/lib/ibex/codegen/ambiguity.rb +5 -4
  111. data/lib/ibex/codegen/explain.rb +123 -55
  112. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  113. data/lib/ibex/codegen/rbs.rb +15 -7
  114. data/lib/ibex/codegen/report.rb +25 -13
  115. data/lib/ibex/codegen/ruby.rb +28 -64
  116. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  117. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  118. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  119. data/lib/ibex/configuration/explanation.rb +421 -0
  120. data/lib/ibex/configuration/inspector.rb +232 -0
  121. data/lib/ibex/configuration.rb +580 -0
  122. data/lib/ibex/coverage/collector.rb +21 -11
  123. data/lib/ibex/coverage/event_stream.rb +13 -7
  124. data/lib/ibex/coverage/report.rb +26 -18
  125. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  126. data/lib/ibex/delta_reducer.rb +99 -0
  127. data/lib/ibex/diff.rb +141 -0
  128. data/lib/ibex/equiv/machine.rb +135 -0
  129. data/lib/ibex/equiv.rb +373 -0
  130. data/lib/ibex/fix.rb +557 -0
  131. data/lib/ibex/frontend/ast.rb +22 -2
  132. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  133. data/lib/ibex/frontend/diagnostic.rb +1 -1
  134. data/lib/ibex/frontend/formatter.rb +72 -26
  135. data/lib/ibex/frontend/generated_parser.rb +147 -117
  136. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  137. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  138. data/lib/ibex/frontend/generation.rb +1 -1
  139. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  140. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  141. data/lib/ibex/frontend/regenerator.rb +1 -0
  142. data/lib/ibex/frontend/resolution.rb +2 -1
  143. data/lib/ibex/frontend/resolver.rb +1 -1
  144. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  145. data/lib/ibex/frontend/source_cursor.rb +2 -2
  146. data/lib/ibex/frontend/source_span.rb +9 -1
  147. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  148. data/lib/ibex/frontend/token_adapter.rb +10 -0
  149. data/lib/ibex/frontend.rb +1 -0
  150. data/lib/ibex/fuzz.rb +219 -0
  151. data/lib/ibex/generation_input.rb +1 -1
  152. data/lib/ibex/generation_manifest.rb +36 -25
  153. data/lib/ibex/generation_transaction.rb +1 -1
  154. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  155. data/lib/ibex/generation_transaction_validation.rb +2 -2
  156. data/lib/ibex/grammar_tests.rb +1 -1
  157. data/lib/ibex/impact/action_impact.rb +148 -0
  158. data/lib/ibex/impact/automaton_impact.rb +57 -0
  159. data/lib/ibex/impact/coverage_impact.rb +53 -0
  160. data/lib/ibex/impact/graph.rb +132 -0
  161. data/lib/ibex/impact/propagation.rb +147 -0
  162. data/lib/ibex/impact/report.rb +273 -0
  163. data/lib/ibex/impact/seeds.rb +69 -0
  164. data/lib/ibex/impact/severity.rb +139 -0
  165. data/lib/ibex/impact.rb +16 -0
  166. data/lib/ibex/ir/automaton_ir.rb +61 -19
  167. data/lib/ibex/ir/grammar_ir.rb +76 -45
  168. data/lib/ibex/ir/lexer_ir.rb +5 -5
  169. data/lib/ibex/ir/parser_contract.rb +135 -0
  170. data/lib/ibex/ir/serialize.rb +203 -76
  171. data/lib/ibex/ir/validator/automaton.rb +64 -34
  172. data/lib/ibex/ir/validator/base.rb +51 -33
  173. data/lib/ibex/ir/validator/grammar.rb +113 -83
  174. data/lib/ibex/ir/validator/lexer.rb +2 -2
  175. data/lib/ibex/ir/validator.rb +2 -1
  176. data/lib/ibex/ir.rb +16 -3
  177. data/lib/ibex/lalr/build_metrics.rb +50 -2
  178. data/lib/ibex/lalr/builder.rb +191 -56
  179. data/lib/ibex/lalr/conflict_search.rb +15 -4
  180. data/lib/ibex/lalr/counterexample.rb +19 -14
  181. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  182. data/lib/ibex/lalr/goto_follows.rb +229 -0
  183. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  184. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  185. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  186. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  187. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  188. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  189. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  190. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  191. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  192. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  193. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  194. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  195. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  196. data/lib/ibex/lalr.rb +52 -1
  197. data/lib/ibex/location.rb +3 -3
  198. data/lib/ibex/lsp/document_handlers.rb +9 -7
  199. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  200. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  201. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  202. data/lib/ibex/lsp/position_codec.rb +6 -2
  203. data/lib/ibex/lsp/request_handlers.rb +3 -2
  204. data/lib/ibex/lsp/request_support.rb +14 -7
  205. data/lib/ibex/lsp/server.rb +13 -11
  206. data/lib/ibex/lsp/symbol_index.rb +13 -13
  207. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  208. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  209. data/lib/ibex/lsp/transport.rb +13 -3
  210. data/lib/ibex/lsp/workspace.rb +5 -4
  211. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  212. data/lib/ibex/lsp.rb +1 -0
  213. data/lib/ibex/messages/en.yml +28 -0
  214. data/lib/ibex/messages/ja.yml +28 -0
  215. data/lib/ibex/messages.rb +68 -0
  216. data/lib/ibex/metrics.rb +175 -0
  217. data/lib/ibex/normalize/declarations.rb +2 -0
  218. data/lib/ibex/normalize/diagnostics.rb +63 -38
  219. data/lib/ibex/normalize/expander.rb +5 -4
  220. data/lib/ibex/normalize/expression.rb +8 -6
  221. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  222. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  223. data/lib/ibex/normalize/lexer.rb +3 -3
  224. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  225. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  226. data/lib/ibex/normalize/parameters.rb +31 -4
  227. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  228. data/lib/ibex/normalize.rb +10 -20
  229. data/lib/ibex/racc_migration/report.rb +6 -3
  230. data/lib/ibex/rake_task.rb +1 -1
  231. data/lib/ibex/samples.rb +43 -13
  232. data/lib/ibex/table_artifact/builder.rb +266 -0
  233. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  234. data/lib/ibex/table_artifact/document.rb +39 -0
  235. data/lib/ibex/table_artifact/executor.rb +187 -0
  236. data/lib/ibex/table_artifact/serializer.rb +57 -0
  237. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  238. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  239. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  240. data/lib/ibex/table_artifact/validator.rb +253 -0
  241. data/lib/ibex/table_artifact.rb +88 -0
  242. data/lib/ibex/table_simulation/result.rb +6 -2
  243. data/lib/ibex/table_simulation/step.rb +3 -1
  244. data/lib/ibex/tables.rb +14 -0
  245. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  246. data/lib/ibex/verification_report/builder.rb +159 -0
  247. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  248. data/lib/ibex/verification_report/logical_path.rb +68 -0
  249. data/lib/ibex/verification_report/validator.rb +329 -0
  250. data/lib/ibex/verification_report.rb +69 -0
  251. data/lib/ibex/verify/action_correspondence.rb +138 -0
  252. data/lib/ibex/verify/language_witness.rb +295 -0
  253. data/lib/ibex/verify/reference_collection.rb +190 -0
  254. data/lib/ibex/verify/result.rb +73 -0
  255. data/lib/ibex/verify/verifier.rb +598 -0
  256. data/lib/ibex/verify.rb +15 -0
  257. data/lib/ibex/version.rb +1 -1
  258. data/lib/ibex/watch/runner.rb +10 -1
  259. data/lib/ibex/watch/source_snapshot.rb +13 -8
  260. data/lib/ibex.rb +11 -0
  261. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  262. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  263. data/schema/bison-import-v1.schema.json +106 -0
  264. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  265. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  266. data/schema/construction-profile-v1.schema.json +779 -0
  267. data/schema/diff-v1.schema.json +41 -0
  268. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  269. data/schema/equiv-v1.schema.json +64 -0
  270. data/schema/error-ux-review-v1.schema.json +609 -0
  271. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  272. data/schema/error-ux-round2-v1.schema.json +519 -0
  273. data/schema/explain-v1.schema.json +63 -1
  274. data/schema/fix-v1.schema.json +64 -0
  275. data/schema/fix-v2.schema.json +66 -0
  276. data/schema/fix-v3.schema.json +101 -0
  277. data/schema/fuzz-regression-v1.schema.json +79 -0
  278. data/schema/fuzz-v1.schema.json +114 -0
  279. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  280. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  281. data/schema/grammar-ir.schema.json +271 -0
  282. data/schema/ielr-benchmark-v1.schema.json +85 -0
  283. data/schema/impact-v1.schema.json +208 -0
  284. data/schema/lexer-profile-v1.schema.json +491 -0
  285. data/schema/metrics-v1.schema.json +60 -0
  286. data/schema/reduce-v1.schema.json +22 -0
  287. data/schema/reduce-v2.schema.json +63 -0
  288. data/schema/table-artifact-v1.schema.json +377 -0
  289. data/schema/verification-report-v1.schema.json +222 -0
  290. data/schema/verify-v1.schema.json +42 -0
  291. data/sig/ibex/analysis/digraph.rbs +19 -0
  292. data/sig/ibex/analysis/sets.rbs +10 -0
  293. data/sig/ibex/bison_import/importer.rbs +140 -0
  294. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  295. data/sig/ibex/bison_import.rbs +95 -0
  296. data/sig/ibex/bounded_subprocess.rbs +76 -0
  297. data/sig/ibex/cli/ambiguity.rbs +6 -0
  298. data/sig/ibex/cli/analysis.rbs +43 -0
  299. data/sig/ibex/cli/bison_import.rbs +32 -0
  300. data/sig/ibex/cli/config.rbs +35 -0
  301. data/sig/ibex/cli/diagnostics.rbs +16 -3
  302. data/sig/ibex/cli/documentation.rbs +5 -1
  303. data/sig/ibex/cli/equiv.rbs +49 -0
  304. data/sig/ibex/cli/error_messages.rbs +6 -0
  305. data/sig/ibex/cli/explain.rbs +6 -0
  306. data/sig/ibex/cli/fix.rbs +53 -0
  307. data/sig/ibex/cli/formatting.rbs +5 -1
  308. data/sig/ibex/cli/fuzz.rbs +47 -0
  309. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  310. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  311. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  312. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  313. data/sig/ibex/cli/impact.rbs +95 -0
  314. data/sig/ibex/cli/ir_tools.rbs +7 -19
  315. data/sig/ibex/cli/outputs.rbs +9 -3
  316. data/sig/ibex/cli/reduce.rbs +60 -0
  317. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  318. data/sig/ibex/cli/samples.rbs +8 -0
  319. data/sig/ibex/cli/verify.rbs +28 -0
  320. data/sig/ibex/cli/watch.rbs +2 -2
  321. data/sig/ibex/cli.rbs +79 -5
  322. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  323. data/sig/ibex/codegen/explain.rbs +45 -25
  324. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  325. data/sig/ibex/codegen/rbs.rbs +12 -10
  326. data/sig/ibex/codegen/report.rbs +12 -12
  327. data/sig/ibex/codegen/ruby.rbs +18 -15
  328. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  329. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  330. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  331. data/sig/ibex/configuration/explanation.rbs +195 -0
  332. data/sig/ibex/configuration/inspector.rbs +53 -0
  333. data/sig/ibex/configuration.rbs +242 -0
  334. data/sig/ibex/coverage/collector.rbs +16 -14
  335. data/sig/ibex/coverage/event_stream.rbs +12 -10
  336. data/sig/ibex/coverage/report.rbs +20 -18
  337. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  338. data/sig/ibex/delta_reducer.rbs +38 -0
  339. data/sig/ibex/diff.rbs +47 -0
  340. data/sig/ibex/equiv/machine.rbs +54 -0
  341. data/sig/ibex/equiv.rbs +129 -0
  342. data/sig/ibex/fix.rbs +138 -0
  343. data/sig/ibex/frontend/ast.rbs +33 -7
  344. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  345. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  346. data/sig/ibex/frontend/formatter.rbs +38 -30
  347. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  348. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  349. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  350. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  351. data/sig/ibex/frontend/resolution.rbs +3 -2
  352. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  353. data/sig/ibex/frontend/source_span.rbs +5 -2
  354. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  355. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  356. data/sig/ibex/fuzz.rbs +71 -0
  357. data/sig/ibex/generation_input.rbs +2 -2
  358. data/sig/ibex/generation_manifest.rbs +35 -32
  359. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  360. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  361. data/sig/ibex/grammar_tests.rbs +2 -2
  362. data/sig/ibex/impact/action_impact.rbs +58 -0
  363. data/sig/ibex/impact/automaton_impact.rbs +37 -0
  364. data/sig/ibex/impact/coverage_impact.rbs +28 -0
  365. data/sig/ibex/impact/graph.rbs +67 -0
  366. data/sig/ibex/impact/propagation.rbs +56 -0
  367. data/sig/ibex/impact/report.rbs +107 -0
  368. data/sig/ibex/impact/seeds.rbs +36 -0
  369. data/sig/ibex/impact/severity.rbs +55 -0
  370. data/sig/ibex/impact.rbs +6 -0
  371. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  372. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  373. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  374. data/sig/ibex/ir/parser_contract.rbs +69 -0
  375. data/sig/ibex/ir/serialize.rbs +63 -28
  376. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  377. data/sig/ibex/ir/validator/base.rbs +35 -31
  378. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  379. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  380. data/sig/ibex/ir.rbs +9 -3
  381. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  382. data/sig/ibex/lalr/builder.rbs +75 -24
  383. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  384. data/sig/ibex/lalr/counterexample.rbs +17 -14
  385. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  386. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  387. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  388. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  389. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  390. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  391. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  392. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  393. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  394. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  395. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  396. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  397. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  398. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  399. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  400. data/sig/ibex/lalr.rbs +11 -1
  401. data/sig/ibex/location.rbs +6 -6
  402. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  403. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  404. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  405. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  406. data/sig/ibex/lsp/position_codec.rbs +8 -4
  407. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  408. data/sig/ibex/lsp/request_support.rbs +8 -8
  409. data/sig/ibex/lsp/server.rbs +16 -16
  410. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  411. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  412. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  413. data/sig/ibex/lsp/transport.rbs +18 -6
  414. data/sig/ibex/lsp/workspace.rbs +3 -2
  415. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  416. data/sig/ibex/messages.rbs +26 -0
  417. data/sig/ibex/metrics.rbs +50 -0
  418. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  419. data/sig/ibex/normalize/expander.rbs +2 -2
  420. data/sig/ibex/normalize/expression.rbs +10 -8
  421. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  422. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  423. data/sig/ibex/normalize/lexer.rbs +4 -4
  424. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  425. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  426. data/sig/ibex/normalize/parameters.rbs +13 -8
  427. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  428. data/sig/ibex/normalize.rbs +11 -5
  429. data/sig/ibex/racc_migration/report.rbs +8 -6
  430. data/sig/ibex/rake_task.rbs +1 -1
  431. data/sig/ibex/samples.rbs +13 -4
  432. data/sig/ibex/table_artifact/builder.rbs +93 -0
  433. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  434. data/sig/ibex/table_artifact/document.rbs +27 -0
  435. data/sig/ibex/table_artifact/executor.rbs +66 -0
  436. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  437. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  438. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  439. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  440. data/sig/ibex/table_artifact/validator.rbs +66 -0
  441. data/sig/ibex/table_artifact.rbs +32 -0
  442. data/sig/ibex/table_simulation/result.rbs +8 -4
  443. data/sig/ibex/table_simulation/step.rbs +4 -2
  444. data/sig/ibex/tables.rbs +10 -9
  445. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  446. data/sig/ibex/verification_report/builder.rbs +53 -0
  447. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  448. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  449. data/sig/ibex/verification_report/validator.rbs +114 -0
  450. data/sig/ibex/verification_report.rbs +44 -0
  451. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  452. data/sig/ibex/verify/language_witness.rbs +112 -0
  453. data/sig/ibex/verify/reference_collection.rbs +63 -0
  454. data/sig/ibex/verify/result.rbs +52 -0
  455. data/sig/ibex/verify/verifier.rbs +170 -0
  456. data/sig/ibex/verify.rbs +6 -0
  457. data/sig/ibex/watch/runner.rbs +12 -2
  458. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  459. metadata +254 -12
  460. data/lib/ibex/ir/migration.rb +0 -120
  461. data/sig/ibex/ir/migration.rbs +0 -34
@@ -0,0 +1,195 @@
1
+ # Generated from lib/ibex/configuration/explanation.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Configuration
5
+ # One observed configuration source and how it participated in selection.
6
+ class Evidence
7
+ STATUSES: Array[Symbol]
8
+
9
+ SOURCES: Array[Symbol]
10
+
11
+ attr_reader key: Key
12
+
13
+ attr_reader source: Symbol
14
+
15
+ attr_reader value: config_value
16
+
17
+ attr_reader status: Symbol
18
+
19
+ attr_reader location: Location?
20
+
21
+ attr_reader reason: String
22
+
23
+ # @rbs (Key key, source: Symbol, value: config_value, status: Symbol, reason: String,
24
+ # ?location: Location?) -> void
25
+ def initialize: (Key key, source: Symbol, value: config_value, status: Symbol, reason: String, ?location: Location?) -> void
26
+
27
+ # @rbs () -> Hash[String, json_value]
28
+ def to_h: () -> Hash[String, json_value]
29
+
30
+ private
31
+
32
+ # @rbs (config_value value) -> (String | Integer | bool | nil)
33
+ def json_value: (config_value value) -> (String | Integer | bool | nil)
34
+ end
35
+
36
+ # Whether an input can prove the historical source of a selected setting.
37
+ class Recording
38
+ STATES: Array[Symbol]
39
+
40
+ attr_reader state: Symbol
41
+
42
+ attr_reader reason: String
43
+
44
+ # @rbs (Symbol state, String reason) -> void
45
+ def initialize: (Symbol state, String reason) -> void
46
+
47
+ # @rbs () -> Hash[String, String]
48
+ def to_h: () -> Hash[String, String]
49
+ end
50
+
51
+ # Canonical, static input facts used to build a configuration report.
52
+ class Input
53
+ KINDS: Array[Symbol]
54
+
55
+ attr_reader kind: Symbol
56
+
57
+ attr_reader path: String
58
+
59
+ attr_reader files: Array[String]
60
+
61
+ attr_reader schema_version: Integer?
62
+
63
+ attr_reader grammar_values: Hash[String, config_value]
64
+
65
+ attr_reader grammar_locations: Hash[String, Location]
66
+
67
+ attr_reader evidence: Hash[String, Array[Evidence]]
68
+
69
+ attr_reader recordings: Hash[String, Recording]
70
+
71
+ # @rbs (kind: Symbol, path: String, ?files: Array[String], ?schema_version: Integer?,
72
+ # ?grammar_values: Hash[String, config_value], ?grammar_locations: Hash[String, Location],
73
+ # ?evidence: Hash[String, Array[Evidence]], ?recordings: Hash[String, Recording]) -> void
74
+ def initialize: (kind: Symbol, path: String, ?files: Array[String], ?schema_version: Integer?, ?grammar_values: Hash[String, config_value], ?grammar_locations: Hash[String, Location], ?evidence: Hash[String, Array[Evidence]], ?recordings: Hash[String, Recording]) -> void
75
+
76
+ # @rbs () -> Hash[String, json_value]
77
+ def to_h: () -> Hash[String, json_value]
78
+
79
+ private
80
+
81
+ # @rbs (Symbol kind, String path, Array[String] files, Integer? schema_version,
82
+ # Hash[String, config_value] grammar_values, Hash[String, Location] grammar_locations,
83
+ # Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
84
+ def assign_input: (Symbol kind, String path, Array[String] files, Integer? schema_version, Hash[String, config_value] grammar_values, Hash[String, Location] grammar_locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
85
+
86
+ # @rbs (Array[String] files, String path) -> void
87
+ def validate_files!: (Array[String] files, String path) -> void
88
+
89
+ # @rbs (Symbol kind, Integer? schema_version) -> void
90
+ def validate_schema_version!: (Symbol kind, Integer? schema_version) -> void
91
+
92
+ # @rbs (Hash[String, config_value] values, Hash[String, Location] locations,
93
+ # Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
94
+ def validate_entries!: (Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
95
+
96
+ # @rbs (*Hash[Object?, Object?] values) -> void
97
+ def validate_fact_hashes!: (*Hash[Object?, Object?] values) -> void
98
+
99
+ # @rbs (Hash[String, config_value] values, Hash[String, Location] locations) -> void
100
+ def validate_locations!: (Hash[String, config_value] values, Hash[String, Location] locations) -> void
101
+
102
+ # @rbs (Hash[String, Array[Evidence]] evidence) -> void
103
+ def validate_evidence!: (Hash[String, Array[Evidence]] evidence) -> void
104
+
105
+ # @rbs (Hash[String, Recording] recordings) -> void
106
+ def validate_recordings!: (Hash[String, Recording] recordings) -> void
107
+
108
+ # @rbs (Hash[String, config_value] values) -> Hash[String, config_value]
109
+ def immutable_values: (Hash[String, config_value] values) -> Hash[String, config_value]
110
+ end
111
+
112
+ # A fixed-contract mismatch retained as structured report data.
113
+ class ConflictRecord
114
+ attr_reader key: Key
115
+
116
+ attr_reader declared: Value
117
+
118
+ attr_reader requested: Value
119
+
120
+ # @rbs (Conflict conflict) -> void
121
+ def initialize: (Conflict conflict) -> void
122
+
123
+ # @rbs () -> Hash[String, json_value]
124
+ def to_h: () -> Hash[String, json_value]
125
+
126
+ # @rbs () -> String
127
+ def message: () -> String
128
+
129
+ private
130
+
131
+ # @rbs (Value value) -> Hash[String, json_value]
132
+ def selection: (Value value) -> Hash[String, json_value]
133
+ end
134
+
135
+ # The effective value and all accepted or rejected evidence for one key.
136
+ class Explanation
137
+ attr_reader value: Value
138
+
139
+ attr_reader evidence: Array[Evidence]
140
+
141
+ attr_reader recording: Recording
142
+
143
+ # @rbs (Value value, evidence: Array[Evidence], recording: Recording) -> void
144
+ def initialize: (Value value, evidence: Array[Evidence], recording: Recording) -> void
145
+
146
+ # @rbs () -> Hash[String, json_value]
147
+ def to_h: () -> Hash[String, json_value]
148
+ end
149
+
150
+ # Deterministic, static-no-user-code explanation of every registered setting.
151
+ class Report
152
+ attr_reader input: Input
153
+
154
+ attr_reader explanations: Array[Explanation]
155
+
156
+ attr_reader conflicts: Array[ConflictRecord]
157
+
158
+ # @rbs (Input input, ?cli: Hash[String, config_value]) -> void
159
+ def initialize: (Input input, ?cli: Hash[String, config_value]) -> void
160
+
161
+ # @rbs () -> bool
162
+ def success?: () -> bool
163
+
164
+ # @rbs () -> Hash[String, json_value]
165
+ def to_h: () -> Hash[String, json_value]
166
+
167
+ # Deterministic JSON independent of caller hash insertion order.
168
+ # @rbs () -> String
169
+ def dump: () -> String
170
+
171
+ # @rbs () -> String
172
+ def render_text: () -> String
173
+
174
+ private
175
+
176
+ # @rbs (Key key, Hash[String, config_value] cli) -> Value
177
+ def resolve_key: (Key key, Hash[String, config_value] cli) -> Value
178
+
179
+ # @rbs (Value value, Hash[String, config_value] cli, ?conflict: ConflictRecord?) -> Explanation
180
+ def explanation: (Value value, Hash[String, config_value] cli, ?conflict: ConflictRecord?) -> Explanation
181
+
182
+ # @rbs (Key key, config_value raw, conflicting: bool) -> Evidence
183
+ def cli_evidence: (Key key, config_value raw, conflicting: bool) -> Evidence
184
+
185
+ # @rbs (config_value value) -> String
186
+ def display: (config_value value) -> String
187
+
188
+ # @rbs (Location location) -> String
189
+ def location_label: (Location location) -> String
190
+
191
+ # @rbs (Explanation entry) -> Array[String]
192
+ def render_explanation: (Explanation entry) -> Array[String]
193
+ end
194
+ end
195
+ end
@@ -0,0 +1,53 @@
1
+ # Generated from lib/ibex/configuration/inspector.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Configuration
5
+ # Converts parsed source or validated Grammar IR into static configuration facts.
6
+ # rubocop:disable Metrics/ModuleLength -- source and IR adapters share one closed evidence vocabulary.
7
+ module Inspector
8
+ # @rbs (Frontend::Resolution resolution) -> Input
9
+ def self?.from_source: (Frontend::Resolution resolution) -> Input
10
+
11
+ # @rbs (IR::Grammar grammar, path: String) -> Input
12
+ def self?.from_grammar_ir: (IR::Grammar grammar, path: String) -> Input
13
+
14
+ # @rbs (Hash[String, config_value] values, Hash[String, Location] locations,
15
+ # Hash[String, Array[Evidence]] evidence, String name, config_value value,
16
+ # Frontend::Location | Location location) -> void
17
+ def self?.add_source_fact: (Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, String name, config_value value, Frontend::Location | Location location) -> void
18
+
19
+ # @rbs (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations,
20
+ # Hash[String, Array[Evidence]] evidence) -> void
21
+ def self?.add_source_options: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
22
+
23
+ # @rbs (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations,
24
+ # Hash[String, Array[Evidence]] evidence) -> void
25
+ def self?.add_source_parser_contract: (Frontend::AST::Root root, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence) -> void
26
+
27
+ # @rbs (String name) -> bool?
28
+ def self?.option_value: (String name) -> bool?
29
+
30
+ # @rbs (Frontend::Location | Location location) -> Location
31
+ def self?.configuration_location: (Frontend::Location | Location location) -> Location
32
+
33
+ # @rbs (Key key, Array[[bool, Location]] occurrences, bool selected_value) -> Array[Evidence]
34
+ def self?.option_evidence: (Key key, Array[[ bool, Location ]] occurrences, bool selected_value) -> Array[Evidence]
35
+
36
+ # @rbs (Hash[String, config_value] values, Hash[String, Array[Evidence]] evidence,
37
+ # Hash[String, Recording] recordings, String name, config_value value) -> void
38
+ def self?.add_ir_fact: (Hash[String, config_value] values, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings, String name, config_value value) -> void
39
+
40
+ # @rbs (IR::Grammar grammar, Hash[String, config_value] values, Hash[String, Location] locations,
41
+ # Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
42
+ def self?.add_parser_contract: (IR::Grammar grammar, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
43
+
44
+ # @rbs (String name, IR::ParserContract::Entry entry, Hash[String, config_value] values,
45
+ # Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence,
46
+ # Hash[String, Recording] recordings) -> void
47
+ def self?.add_contract_entry: (String name, IR::ParserContract::Entry entry, Hash[String, config_value] values, Hash[String, Location] locations, Hash[String, Array[Evidence]] evidence, Hash[String, Recording] recordings) -> void
48
+
49
+ # @rbs (IR::ParserContract contract) -> Hash[String, IR::ParserContract::Entry]
50
+ def self?.contract_entries: (IR::ParserContract contract) -> Hash[String, IR::ParserContract::Entry]
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,242 @@
1
+ # Generated from lib/ibex/configuration.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ # Typed, provenance-preserving effective configuration.
5
+ module Configuration
6
+ type config_value = Symbol | String | Integer | bool | nil
7
+
8
+ type json_value = String | Integer | bool | nil | Array[json_value] | Hash[String, json_value]
9
+
10
+ OWNER_NAMES: Hash[Symbol, String]
11
+
12
+ POLICIES: Array[Symbol]
13
+
14
+ ORIGIN_KINDS: Array[Symbol]
15
+
16
+ BOOLEAN_VALUES: Array[bool]
17
+
18
+ DECLARED_VALUE_UNSET: Object
19
+
20
+ OWNER_POLICIES: Hash[Symbol, Symbol]
21
+
22
+ # One closed definition of a configuration concept and its value domain.
23
+ class Key
24
+ attr_reader name: String
25
+
26
+ attr_reader type: Symbol
27
+
28
+ attr_reader default: config_value
29
+
30
+ attr_reader owner: Symbol
31
+
32
+ attr_reader policy: Symbol
33
+
34
+ attr_reader allowed_values: Array[config_value]?
35
+
36
+ attr_reader cli_option: Symbol?
37
+
38
+ # @rbs (String name, type: Symbol, default: config_value, owner: Symbol, policy: Symbol,
39
+ # ?allowed_values: Array[config_value]?, ?cli_option: Symbol?) -> void
40
+ def initialize: (String name, type: Symbol, default: config_value, owner: Symbol, policy: Symbol, ?allowed_values: Array[config_value]?, ?cli_option: Symbol?) -> void
41
+
42
+ # Validate and defensively freeze a value from an adapter or declaration.
43
+ # @rbs (config_value value) -> config_value
44
+ def validate: (config_value value) -> config_value
45
+
46
+ # @rbs () -> String
47
+ def owner_name: () -> String
48
+
49
+ private
50
+
51
+ # @rbs (String name, Symbol owner, Symbol policy) -> void
52
+ def validate_identity!: (String name, Symbol owner, Symbol policy) -> void
53
+
54
+ # @rbs (Symbol type, Symbol policy, Symbol? cli_option) -> void
55
+ def validate_shape!: (Symbol type, Symbol policy, Symbol? cli_option) -> void
56
+
57
+ # @rbs (config_value value) -> config_value
58
+ def immutable: (config_value value) -> config_value
59
+
60
+ # @rbs (config_value value) -> bool
61
+ def valid_type?: (config_value value) -> bool
62
+ end
63
+
64
+ # Where a selected configuration value came from.
65
+ class Origin
66
+ attr_reader kind: Symbol
67
+
68
+ attr_reader location: Location?
69
+
70
+ # @rbs (Symbol kind, ?location: Location?) -> void
71
+ def initialize: (Symbol kind, ?location: Location?) -> void
72
+
73
+ # @rbs () -> Hash[String, json_value]
74
+ def to_h: () -> Hash[String, json_value]
75
+
76
+ # @rbs () -> String
77
+ def label: () -> String
78
+
79
+ private
80
+
81
+ # @rbs (Location location) -> Hash[String, json_value]
82
+ def stringify_location: (Location location) -> Hash[String, json_value]
83
+ end
84
+
85
+ # A typed effective value plus the evidence needed to explain it.
86
+ class Value
87
+ attr_reader key: Key
88
+
89
+ attr_reader value: config_value
90
+
91
+ attr_reader origin: Origin
92
+
93
+ attr_reader explicit: bool
94
+
95
+ attr_reader canonical: bool
96
+
97
+ attr_reader declared_value: config_value
98
+
99
+ # @rbs (Key key, config_value value, origin: Origin, explicit: bool, canonical: bool,
100
+ # ?declared_value: config_value | Object) -> void
101
+ def initialize: (Key key, config_value value, origin: Origin, explicit: bool, canonical: bool, ?declared_value: config_value | Object) -> void
102
+
103
+ # @rbs () -> Hash[String, json_value]
104
+ def to_h: () -> Hash[String, json_value]
105
+
106
+ private
107
+
108
+ # @rbs (Key key, Origin origin, bool explicit, bool canonical, config_value | Object declared_value) -> void
109
+ def validate_provenance!: (Key key, Origin origin, bool explicit, bool canonical, config_value | Object declared_value) -> void
110
+
111
+ # @rbs (Key key, Origin origin, bool canonical) -> void
112
+ def validate_canonical_origin!: (Key key, Origin origin, bool canonical) -> void
113
+
114
+ # @rbs (Key key, Origin origin) -> void
115
+ def validate_owner_source!: (Key key, Origin origin) -> void
116
+
117
+ # @rbs (Origin origin, bool explicit) -> void
118
+ def validate_explicitness!: (Origin origin, bool explicit) -> void
119
+
120
+ # @rbs (bool canonical, config_value | Object declared_value) -> void
121
+ def validate_declared_evidence!: (bool canonical, config_value | Object declared_value) -> void
122
+
123
+ # @rbs (config_value value) -> (String | Integer | bool | nil)
124
+ def json_value: (config_value value) -> (String | Integer | bool | nil)
125
+ end
126
+
127
+ # A fixed/minimum request that contradicts the declared contract.
128
+ class Conflict < Ibex::Error
129
+ attr_reader key: Key
130
+
131
+ attr_reader declared: Value
132
+
133
+ attr_reader requested: Value
134
+
135
+ # @rbs (Key key, Value declared, Value requested) -> void
136
+ def initialize: (Key key, Value declared, Value requested) -> void
137
+ end
138
+
139
+ # Closed definitions shared by generation, grammar tests, and analyses.
140
+ module Registry
141
+ DEFINITIONS: Array[Key]
142
+
143
+ BY_NAME: Hash[String, Key]
144
+
145
+ # @rbs (String name) -> Key
146
+ def self.fetch: (String name) -> Key
147
+
148
+ # @rbs () -> Array[Key]
149
+ def self.keys: () -> Array[Key]
150
+ end
151
+
152
+ # Applies fixed/minimum override algebra and exposes deterministic evidence.
153
+ class Resolver
154
+ attr_reader values: Array[Value]
155
+
156
+ # @rbs (?keys: Array[Key], ?grammar: Hash[String, config_value], ?project: Hash[String, config_value],
157
+ # ?cli: Hash[String, config_value], ?analysis_overrides: Hash[String, config_value],
158
+ # ?locations: Hash[Symbol, Hash[String, Location]]) -> void
159
+ def initialize: (?keys: Array[Key], ?grammar: Hash[String, config_value], ?project: Hash[String, config_value], ?cli: Hash[String, config_value], ?analysis_overrides: Hash[String, config_value], ?locations: Hash[Symbol, Hash[String, Location]]) -> void
160
+
161
+ # @rbs (String name) -> Value
162
+ def fetch: (String name) -> Value
163
+
164
+ # @rbs (String name) -> config_value
165
+ def value: (String name) -> config_value
166
+
167
+ # @rbs () -> Hash[String, Array[Hash[String, json_value]]]
168
+ def to_h: () -> Hash[String, Array[Hash[String, json_value]]]
169
+
170
+ # Deterministic JSON independent of caller hash insertion order.
171
+ # @rbs () -> String
172
+ def dump: () -> String
173
+
174
+ private
175
+
176
+ # @rbs (Symbol kind, Hash[String, config_value] entries) -> void
177
+ def validate_source!: (Symbol kind, Hash[String, config_value] entries) -> void
178
+
179
+ # @rbs (Hash[Symbol, Hash[String, Location]] locations,
180
+ # Hash[Symbol, Hash[String, config_value]] sources) -> void
181
+ def validate_locations!: (Hash[Symbol, Hash[String, Location]] locations, Hash[Symbol, Hash[String, config_value]] sources) -> void
182
+
183
+ # @rbs (Key key, Hash[Symbol, Hash[String, config_value]] sources,
184
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value
185
+ def resolve_key: (Key key, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
186
+
187
+ # @rbs (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources,
188
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value
189
+ def resolve_fixed: (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
190
+
191
+ # @rbs (Key key, Value? grammar, Value declared, Array[Value] requested) -> void
192
+ def reject_fixed_conflicts!: (Key key, Value? grammar, Value declared, Array[Value] requested) -> void
193
+
194
+ # @rbs (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources,
195
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value
196
+ def resolve_minimum: (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
197
+
198
+ # @rbs (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources,
199
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value
200
+ def resolve_override: (Key key, Value builtin, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value
201
+
202
+ # @rbs (Key key, Symbol kind, Hash[Symbol, Hash[String, config_value]] sources,
203
+ # Hash[Symbol, Hash[String, Location]] locations) -> Value?
204
+ def source_value: (Key key, Symbol kind, Hash[Symbol, Hash[String, config_value]] sources, Hash[Symbol, Hash[String, Location]] locations) -> Value?
205
+
206
+ # @rbs (Key key, config_value raw, Symbol kind, Hash[Symbol, Hash[String, Location]] locations,
207
+ # explicit: bool) -> Value
208
+ def value_from: (Key key, config_value raw, Symbol kind, Hash[Symbol, Hash[String, Location]] locations, explicit: bool) -> Value
209
+
210
+ # @rbs (Symbol kind, String name, Hash[Symbol, Hash[String, Location]] locations) -> Origin
211
+ def origin: (Symbol kind, String name, Hash[Symbol, Hash[String, Location]] locations) -> Origin
212
+ end
213
+
214
+ # Converts the existing internal CLI option hash into canonical concepts.
215
+ class CLIAdapter
216
+ # The adapter receives the legacy CLI option map, which also contains
217
+ # operation flags and list values outside the closed configuration domain.
218
+ # It validates and converts only declared configuration options.
219
+ # @rbs (Hash[Symbol, untyped] options, ?explicit_keys: Array[Symbol]) -> void
220
+ def initialize: (Hash[Symbol, untyped] options, ?explicit_keys: Array[Symbol]) -> void
221
+
222
+ # @rbs (?grammar: Hash[String, config_value], ?locations: Hash[String, Location]) -> Resolver
223
+ def resolve: (?grammar: Hash[String, config_value], ?locations: Hash[String, Location]) -> Resolver
224
+
225
+ # Canonical configuration values selected by explicit legacy CLI options.
226
+ # Raw option spellings stop at this adapter boundary.
227
+ # @rbs () -> Hash[String, config_value]
228
+ def configuration_values: () -> Hash[String, config_value]
229
+
230
+ private
231
+
232
+ # @rbs (Symbol name, untyped value) -> config_value
233
+ def convert: (Symbol name, untyped value) -> config_value
234
+
235
+ # @rbs (untyped value) -> config_value
236
+ def convert_entry_isolation: (untyped value) -> config_value
237
+
238
+ # @rbs () -> Symbol
239
+ def convert_line_mapping: () -> Symbol
240
+ end
241
+ end
242
+ end
@@ -4,6 +4,8 @@ module Ibex
4
4
  module Coverage
5
5
  # Strictly turns one or more complete parse sessions into a coverage report.
6
6
  class Collector
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
7
9
  @expected_sequence: Integer
8
10
 
9
11
  @in_session: bool
@@ -30,23 +32,23 @@ module Ibex
30
32
  # @rbs (String path) -> Report
31
33
  def self.collect_file: (String path) -> Report
32
34
 
33
- # @rbs (Hash[String, untyped] document, source: String, line: Integer) -> void
34
- def consume: (Hash[String, untyped] document, source: String, line: Integer) -> void
35
+ # @rbs (Hash[String, json_value] document, source: String, line: Integer) -> void
36
+ def consume: (Hash[String, json_value] document, source: String, line: Integer) -> void
35
37
 
36
38
  # @rbs (source: String) -> Report
37
39
  def finish: (source: String) -> Report
38
40
 
39
41
  private
40
42
 
41
- # @rbs (Hash[untyped, untyped] data, untyped sequence, String source, Integer line) -> void
42
- def start_session: (Hash[untyped, untyped] data, untyped sequence, String source, Integer line) -> void
43
+ # @rbs (Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
44
+ def start_session: (Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
43
45
 
44
- # @rbs (String event, Hash[untyped, untyped] data, untyped sequence, String source, Integer line) -> void
45
- def consume_session_event: (String event, Hash[untyped, untyped] data, untyped sequence, String source, Integer line) -> void
46
+ # @rbs (String event, Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
47
+ def consume_session_event: (String event, Hash[String, json_value] data, json_value sequence, String source, Integer line) -> void
46
48
 
47
- # @rbs (Hash[untyped, untyped] data, String source, Integer line)
49
+ # @rbs (Hash[String, json_value] data, String source, Integer line)
48
50
  # -> [[String, Integer, Integer, Integer], Integer]
49
- def session_metadata: (Hash[untyped, untyped] data, String source, Integer line) -> [ [ String, Integer, Integer, Integer ], Integer ]
51
+ def session_metadata: (Hash[String, json_value] data, String source, Integer line) -> [ [ String, Integer, Integer, Integer ], Integer ]
50
52
 
51
53
  # @rbs ([String, Integer, Integer, Integer] metadata, String source, Integer line) -> void
52
54
  def establish_metadata: ([ String, Integer, Integer, Integer ] metadata, String source, Integer line) -> void
@@ -54,14 +56,14 @@ module Ibex
54
56
  # @rbs (String source, Integer line) -> void
55
57
  def validate_metadata!: (String source, Integer line) -> void
56
58
 
57
- # @rbs (untyped id, String source, Integer line) -> void
58
- def hit_state: (untyped id, String source, Integer line) -> void
59
+ # @rbs (json_value id, String source, Integer line) -> void
60
+ def hit_state: (json_value id, String source, Integer line) -> void
59
61
 
60
- # @rbs (untyped id, String source, Integer line) -> void
61
- def hit_production: (untyped id, String source, Integer line) -> void
62
+ # @rbs (json_value id, String source, Integer line) -> void
63
+ def hit_production: (json_value id, String source, Integer line) -> void
62
64
 
63
- # @rbs (untyped id, Integer total) -> bool
64
- def valid_id?: (untyped id, Integer total) -> bool
65
+ # @rbs (json_value id, Integer total) -> bool
66
+ def valid_id?: (json_value id, Integer total) -> bool
65
67
 
66
68
  # @rbs (Hash[Integer, Integer] hits, Integer id, String kind, String source, Integer line) -> void
67
69
  def increment: (Hash[Integer, Integer] hits, Integer id, String kind, String source, Integer line) -> void
@@ -4,6 +4,8 @@ module Ibex
4
4
  module Coverage
5
5
  # Bounded reader for the public runtime-event JSON Lines protocol.
6
6
  module EventStream
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
7
9
  interface _CoverageEventInput
8
10
  def gets: (Integer) -> String?
9
11
  end
@@ -16,24 +18,24 @@ module Ibex
16
18
 
17
19
  EVENT_TYPES: Array[String]
18
20
 
19
- # @rbs (String path) { (Hash[String, untyped], Integer) -> void } -> void
20
- def self.each_file: (String path) { (Hash[String, untyped], Integer) -> void } -> void
21
+ # @rbs (String path) { (Hash[String, json_value], Integer) -> void } -> void
22
+ def self.each_file: (String path) { (Hash[String, json_value], Integer) -> void } -> void
21
23
 
22
24
  # @rbs (_CoverageEventInput input, source: String)
23
- # { (Hash[String, untyped], Integer) -> void } -> void
24
- def self.each_io: (_CoverageEventInput input, source: String) { (Hash[String, untyped], Integer) -> void } -> void
25
+ # { (Hash[String, json_value], Integer) -> void } -> void
26
+ def self.each_io: (_CoverageEventInput input, source: String) { (Hash[String, json_value], Integer) -> void } -> void
25
27
 
26
28
  # @rbs (String line, String source, Integer line_number) -> void
27
29
  private def self.reject_oversized_line: (String line, String source, Integer line_number) -> void
28
30
 
29
- # @rbs (String line, String source, Integer line_number) -> Hash[String, untyped]
30
- private def self.parse_line: (String line, String source, Integer line_number) -> Hash[String, untyped]
31
+ # @rbs (String line, String source, Integer line_number) -> Hash[String, json_value]
32
+ private def self.parse_line: (String line, String source, Integer line_number) -> Hash[String, json_value]
31
33
 
32
- # @rbs (Hash[String, untyped] document, String source, Integer line_number) -> void
33
- private def self.validate_envelope: (Hash[String, untyped] document, String source, Integer line_number) -> void
34
+ # @rbs (Hash[String, json_value] document, String source, Integer line_number) -> void
35
+ private def self.validate_envelope: (Hash[String, json_value] document, String source, Integer line_number) -> void
34
36
 
35
- # @rbs (untyped value) -> bool
36
- private def self.positive_integer?: (untyped value) -> bool
37
+ # @rbs (json_value value) -> bool
38
+ private def self.positive_integer?: (json_value value) -> bool
37
39
 
38
40
  # @rbs (String source, Integer line_number, String message) -> bot
39
41
  private def self.raise_invalid: (String source, Integer line_number, String message) -> bot
@@ -4,6 +4,8 @@ module Ibex
4
4
  module Coverage
5
5
  # Versioned, mergeable runtime coverage result.
6
6
  class Report
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
7
9
  IDENTIFIER: String
8
10
 
9
11
  SCHEMA_VERSION: Integer
@@ -40,31 +42,31 @@ module Ibex
40
42
  # @rbs (grammar_digest: String, table_format_version: Integer, state_count: Integer, production_count: Integer, sessions: Integer, event_count: Integer, state_hits: Hash[Integer, Integer], production_hits: Hash[Integer, Integer]) -> void
41
43
  def initialize: (grammar_digest: String, table_format_version: Integer, state_count: Integer, production_count: Integer, sessions: Integer, event_count: Integer, state_hits: Hash[Integer, Integer], production_hits: Hash[Integer, Integer]) -> void
42
44
 
43
- # @rbs () -> Hash[String, untyped]
44
- def to_h: () -> Hash[String, untyped]
45
+ # @rbs () -> Hash[String, json_value]
46
+ def to_h: () -> Hash[String, json_value]
45
47
 
46
- # @rbs (*untyped) -> String
47
- def to_json: (*untyped) -> String
48
+ # @rbs (*Object) -> String
49
+ def to_json: (*Object) -> String
48
50
 
49
51
  # @rbs (String path) -> Report
50
52
  def self.load_file: (String path) -> Report
51
53
 
52
- # @rbs (untyped value, source: String) -> Report
53
- def self.from_h: (untyped value, source: String) -> Report
54
+ # @rbs (json_value value, source: String) -> Report
55
+ def self.from_h: (json_value value, source: String) -> Report
54
56
 
55
57
  # @rbs (Array[Report] reports) -> Report
56
58
  def self.merge: (Array[Report] reports) -> Report
57
59
 
58
60
  private
59
61
 
60
- # @rbs (untyped input) -> String
61
- def validate_digest: (untyped input) -> String
62
+ # @rbs (json_value input) -> String
63
+ def validate_digest: (json_value input) -> String
62
64
 
63
- # @rbs (untyped input, String name) -> Integer
64
- def positive_integer: (untyped input, String name) -> Integer
65
+ # @rbs (json_value input, String name) -> Integer
66
+ def positive_integer: (json_value input, String name) -> Integer
65
67
 
66
- # @rbs (untyped input, String name, minimum: Integer) -> Integer
67
- def total_integer: (untyped input, String name, minimum: Integer) -> Integer
68
+ # @rbs (json_value input, String name, minimum: Integer) -> Integer
69
+ def total_integer: (json_value input, String name, minimum: Integer) -> Integer
68
70
 
69
71
  # @rbs (Hash[Integer, Integer] input, Integer total, String kind) -> Hash[Integer, Integer]
70
72
  def validate_hits: (Hash[Integer, Integer] input, Integer total, String kind) -> Hash[Integer, Integer]
@@ -75,14 +77,14 @@ module Ibex
75
77
  # @rbs () -> void
76
78
  def validate_event_bounds: () -> void
77
79
 
78
- # @rbs (untyped value, String source, String name) -> Hash[String, untyped]
79
- private def self.string_hash: (untyped value, String source, String name) -> Hash[String, untyped]
80
+ # @rbs (json_value value, String source, String name) -> Hash[String, json_value]
81
+ private def self.string_hash: (json_value value, String source, String name) -> Hash[String, json_value]
80
82
 
81
- # @rbs (untyped value, untyped total, String source, String kind) -> Hash[Integer, Integer]
82
- private def self.parse_hits: (untyped value, untyped total, String source, String kind) -> Hash[Integer, Integer]
83
+ # @rbs (json_value value, json_value total, String source, String kind) -> Hash[Integer, Integer]
84
+ private def self.parse_hits: (json_value value, json_value total, String source, String kind) -> Hash[Integer, Integer]
83
85
 
84
- # @rbs (untyped entry, untyped total, Integer previous, String source, String kind) -> [Integer, Integer]
85
- private def self.parse_hit: (untyped entry, untyped total, Integer previous, String source, String kind) -> [ Integer, Integer ]
86
+ # @rbs (json_value entry, json_value total, Integer previous, String source, String kind) -> [Integer, Integer]
87
+ private def self.parse_hit: (json_value entry, json_value total, Integer previous, String source, String kind) -> [ Integer, Integer ]
86
88
 
87
89
  # @rbs (Report expected, Report actual) -> void
88
90
  private def self.ensure_compatible: (Report expected, Report actual) -> void