ibex 0.2.0 → 0.3.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 (437) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +95 -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 +262 -0
  40. data/docs/development.md +179 -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 +1581 -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/ja/bison-import.md +51 -0
  56. data/docs/ja/stable-api.md +53 -0
  57. data/docs/lexer-construction-profile.md +109 -0
  58. data/docs/lexer-migration.md +5 -0
  59. data/docs/maturity.md +128 -0
  60. data/docs/project-site-strategy.md +54 -0
  61. data/docs/racc-migration-evidence.md +45 -0
  62. data/docs/racc-migration.md +11 -0
  63. data/docs/release-readiness.md +126 -68
  64. data/docs/repair-semantics.md +123 -0
  65. data/docs/runtime-abi-evolution.md +307 -0
  66. data/docs/stability.md +144 -34
  67. data/docs/status.md +43 -0
  68. data/docs/syntax-sessions.md +183 -0
  69. data/docs/table-artifact.md +125 -0
  70. data/docs/test-interactions.md +219 -0
  71. data/docs/verification-report.md +137 -0
  72. data/docs/verifier-trust-boundary.md +199 -0
  73. data/docs/workloads.md +132 -0
  74. data/lib/ibex/analysis/digraph.rb +128 -0
  75. data/lib/ibex/analysis.rb +1 -0
  76. data/lib/ibex/bison_import/importer.rb +516 -0
  77. data/lib/ibex/bison_import/tokenizer.rb +260 -0
  78. data/lib/ibex/bison_import.rb +200 -0
  79. data/lib/ibex/bounded_subprocess.rb +171 -0
  80. data/lib/ibex/cli/ambiguity.rb +14 -5
  81. data/lib/ibex/cli/analysis.rb +134 -0
  82. data/lib/ibex/cli/bison_import.rb +121 -0
  83. data/lib/ibex/cli/config.rb +128 -0
  84. data/lib/ibex/cli/diagnostics.rb +31 -11
  85. data/lib/ibex/cli/documentation.rb +11 -8
  86. data/lib/ibex/cli/equiv.rb +169 -0
  87. data/lib/ibex/cli/error_messages.rb +11 -4
  88. data/lib/ibex/cli/explain.rb +14 -5
  89. data/lib/ibex/cli/fix.rb +203 -0
  90. data/lib/ibex/cli/formatting.rb +11 -10
  91. data/lib/ibex/cli/fuzz.rb +200 -0
  92. data/lib/ibex/cli/fuzz_regressions.rb +145 -0
  93. data/lib/ibex/cli/generation_artifacts.rb +53 -2
  94. data/lib/ibex/cli/generation_error_messages.rb +1 -1
  95. data/lib/ibex/cli/grammar_tests.rb +32 -14
  96. data/lib/ibex/cli/ir_tools.rb +5 -61
  97. data/lib/ibex/cli/outputs.rb +60 -33
  98. data/lib/ibex/cli/reduce.rb +202 -0
  99. data/lib/ibex/cli/reduce_reporting.rb +71 -0
  100. data/lib/ibex/cli/samples.rb +49 -23
  101. data/lib/ibex/cli/verify.rb +116 -0
  102. data/lib/ibex/cli/watch.rb +6 -5
  103. data/lib/ibex/cli.rb +357 -56
  104. data/lib/ibex/codegen/action_locations.rb +1 -1
  105. data/lib/ibex/codegen/action_method_source.rb +5 -6
  106. data/lib/ibex/codegen/action_source.rb +3 -2
  107. data/lib/ibex/codegen/ambiguity.rb +5 -4
  108. data/lib/ibex/codegen/explain.rb +123 -55
  109. data/lib/ibex/codegen/generated_action_abi.rb +10 -5
  110. data/lib/ibex/codegen/rbs.rb +15 -7
  111. data/lib/ibex/codegen/report.rb +25 -13
  112. data/lib/ibex/codegen/ruby.rb +28 -64
  113. data/lib/ibex/codegen/ruby_actions.rb +9 -6
  114. data/lib/ibex/codegen/ruby_syntax.rb +15 -9
  115. data/lib/ibex/configuration/analysis_grammar.rb +35 -0
  116. data/lib/ibex/configuration/explanation.rb +421 -0
  117. data/lib/ibex/configuration/inspector.rb +232 -0
  118. data/lib/ibex/configuration.rb +580 -0
  119. data/lib/ibex/coverage/collector.rb +21 -11
  120. data/lib/ibex/coverage/event_stream.rb +13 -7
  121. data/lib/ibex/coverage/report.rb +26 -18
  122. data/lib/ibex/coverage/runtime_event_validator.rb +30 -21
  123. data/lib/ibex/delta_reducer.rb +99 -0
  124. data/lib/ibex/diff.rb +140 -0
  125. data/lib/ibex/equiv/machine.rb +135 -0
  126. data/lib/ibex/equiv.rb +373 -0
  127. data/lib/ibex/fix.rb +557 -0
  128. data/lib/ibex/frontend/ast.rb +22 -2
  129. data/lib/ibex/frontend/bootstrap_parser.rb +6 -13
  130. data/lib/ibex/frontend/diagnostic.rb +1 -1
  131. data/lib/ibex/frontend/formatter.rb +72 -26
  132. data/lib/ibex/frontend/generated_parser.rb +147 -117
  133. data/lib/ibex/frontend/generated_parser_base.rb +7 -3
  134. data/lib/ibex/frontend/generated_parser_includes.rb +1 -11
  135. data/lib/ibex/frontend/generation.rb +1 -1
  136. data/lib/ibex/frontend/parser/declarations.rb +17 -2
  137. data/lib/ibex/frontend/parser_configuration_support.rb +56 -0
  138. data/lib/ibex/frontend/regenerator.rb +1 -0
  139. data/lib/ibex/frontend/resolution.rb +2 -1
  140. data/lib/ibex/frontend/resolver.rb +1 -1
  141. data/lib/ibex/frontend/rule_documentation.rb +2 -1
  142. data/lib/ibex/frontend/source_cursor.rb +2 -2
  143. data/lib/ibex/frontend/source_span.rb +9 -1
  144. data/lib/ibex/frontend/token_adapter/declaration_state.rb +38 -6
  145. data/lib/ibex/frontend/token_adapter.rb +10 -0
  146. data/lib/ibex/frontend.rb +1 -0
  147. data/lib/ibex/fuzz.rb +219 -0
  148. data/lib/ibex/generation_input.rb +1 -1
  149. data/lib/ibex/generation_manifest.rb +36 -25
  150. data/lib/ibex/generation_transaction.rb +1 -1
  151. data/lib/ibex/generation_transaction_recovery.rb +4 -4
  152. data/lib/ibex/generation_transaction_validation.rb +2 -2
  153. data/lib/ibex/grammar_tests.rb +1 -1
  154. data/lib/ibex/ir/automaton_ir.rb +61 -19
  155. data/lib/ibex/ir/grammar_ir.rb +76 -45
  156. data/lib/ibex/ir/lexer_ir.rb +5 -5
  157. data/lib/ibex/ir/parser_contract.rb +135 -0
  158. data/lib/ibex/ir/serialize.rb +203 -76
  159. data/lib/ibex/ir/validator/automaton.rb +64 -34
  160. data/lib/ibex/ir/validator/base.rb +51 -33
  161. data/lib/ibex/ir/validator/grammar.rb +113 -83
  162. data/lib/ibex/ir/validator/lexer.rb +2 -2
  163. data/lib/ibex/ir/validator.rb +2 -1
  164. data/lib/ibex/ir.rb +16 -3
  165. data/lib/ibex/lalr/build_metrics.rb +50 -2
  166. data/lib/ibex/lalr/builder.rb +191 -56
  167. data/lib/ibex/lalr/conflict_search.rb +15 -4
  168. data/lib/ibex/lalr/counterexample.rb +19 -14
  169. data/lib/ibex/lalr/direct_lookaheads.rb +110 -57
  170. data/lib/ibex/lalr/goto_follows.rb +229 -0
  171. data/lib/ibex/lalr/ielr/annotator.rb +214 -0
  172. data/lib/ibex/lalr/ielr/bits.rb +28 -0
  173. data/lib/ibex/lalr/ielr/inadequacy.rb +47 -0
  174. data/lib/ibex/lalr/ielr/item_lookaheads.rb +78 -0
  175. data/lib/ibex/lalr/ielr/pipeline.rb +75 -0
  176. data/lib/ibex/lalr/ielr/split_stability.rb +78 -0
  177. data/lib/ibex/lalr/ielr/split_state.rb +20 -0
  178. data/lib/ibex/lalr/ielr/state_splitter.rb +258 -0
  179. data/lib/ibex/lalr/ielr_partition.rb +22 -8
  180. data/lib/ibex/lalr/inadequacy_report.rb +50 -0
  181. data/lib/ibex/lalr/lookahead_propagation.rb +111 -0
  182. data/lib/ibex/lalr/lr0_collection.rb +121 -0
  183. data/lib/ibex/lalr/unreachable_states.rb +80 -0
  184. data/lib/ibex/lalr.rb +52 -1
  185. data/lib/ibex/location.rb +3 -3
  186. data/lib/ibex/lsp/document_handlers.rb +9 -7
  187. data/lib/ibex/lsp/initialization_handlers.rb +9 -7
  188. data/lib/ibex/lsp/navigation_handlers.rb +25 -11
  189. data/lib/ibex/lsp/parser_configuration_assistance.rb +149 -0
  190. data/lib/ibex/lsp/position_codec.rb +6 -2
  191. data/lib/ibex/lsp/request_handlers.rb +3 -2
  192. data/lib/ibex/lsp/request_support.rb +14 -7
  193. data/lib/ibex/lsp/server.rb +13 -11
  194. data/lib/ibex/lsp/symbol_index.rb +13 -13
  195. data/lib/ibex/lsp/symbol_index_builder.rb +30 -20
  196. data/lib/ibex/lsp/symbol_occurrence.rb +8 -2
  197. data/lib/ibex/lsp/transport.rb +13 -3
  198. data/lib/ibex/lsp/workspace.rb +5 -4
  199. data/lib/ibex/lsp/workspace_analyzer.rb +1 -1
  200. data/lib/ibex/lsp.rb +1 -0
  201. data/lib/ibex/messages/en.yml +28 -0
  202. data/lib/ibex/messages/ja.yml +28 -0
  203. data/lib/ibex/messages.rb +68 -0
  204. data/lib/ibex/metrics.rb +175 -0
  205. data/lib/ibex/normalize/declarations.rb +2 -0
  206. data/lib/ibex/normalize/diagnostics.rb +63 -38
  207. data/lib/ibex/normalize/expander.rb +5 -4
  208. data/lib/ibex/normalize/expression.rb +8 -6
  209. data/lib/ibex/normalize/grammar_builder.rb +26 -0
  210. data/lib/ibex/normalize/inline_expansion.rb +100 -49
  211. data/lib/ibex/normalize/lexer.rb +3 -3
  212. data/lib/ibex/normalize/parameter_ebnf_lowering.rb +11 -10
  213. data/lib/ibex/normalize/parameter_lowering.rb +40 -23
  214. data/lib/ibex/normalize/parameters.rb +31 -4
  215. data/lib/ibex/normalize/parser_configuration.rb +70 -0
  216. data/lib/ibex/normalize.rb +10 -20
  217. data/lib/ibex/racc_migration/report.rb +6 -3
  218. data/lib/ibex/rake_task.rb +1 -1
  219. data/lib/ibex/samples.rb +43 -13
  220. data/lib/ibex/table_artifact/builder.rb +266 -0
  221. data/lib/ibex/table_artifact/cst_projection.rb +70 -0
  222. data/lib/ibex/table_artifact/document.rb +39 -0
  223. data/lib/ibex/table_artifact/executor.rb +187 -0
  224. data/lib/ibex/table_artifact/serializer.rb +57 -0
  225. data/lib/ibex/table_artifact/validator/metadata.rb +179 -0
  226. data/lib/ibex/table_artifact/validator/support.rb +86 -0
  227. data/lib/ibex/table_artifact/validator/tables.rb +238 -0
  228. data/lib/ibex/table_artifact/validator.rb +253 -0
  229. data/lib/ibex/table_artifact.rb +88 -0
  230. data/lib/ibex/table_simulation/result.rb +6 -2
  231. data/lib/ibex/table_simulation/step.rb +3 -1
  232. data/lib/ibex/tables.rb +14 -0
  233. data/lib/ibex/verifiable_generation_bundle.rb +86 -0
  234. data/lib/ibex/verification_report/builder.rb +159 -0
  235. data/lib/ibex/verification_report/canonical_ir.rb +123 -0
  236. data/lib/ibex/verification_report/logical_path.rb +68 -0
  237. data/lib/ibex/verification_report/validator.rb +329 -0
  238. data/lib/ibex/verification_report.rb +69 -0
  239. data/lib/ibex/verify/action_correspondence.rb +138 -0
  240. data/lib/ibex/verify/language_witness.rb +295 -0
  241. data/lib/ibex/verify/reference_collection.rb +190 -0
  242. data/lib/ibex/verify/result.rb +73 -0
  243. data/lib/ibex/verify/verifier.rb +598 -0
  244. data/lib/ibex/verify.rb +15 -0
  245. data/lib/ibex/version.rb +1 -1
  246. data/lib/ibex/watch/runner.rb +10 -1
  247. data/lib/ibex/watch/source_snapshot.rb +13 -8
  248. data/lib/ibex.rb +10 -0
  249. data/schema/{automaton-ir-v1.schema.json → automaton-ir-definitions.schema.json} +6 -6
  250. data/schema/{automaton-ir-v2.schema.json → automaton-ir.schema.json} +14 -7
  251. data/schema/bison-import-v1.schema.json +106 -0
  252. data/schema/conflict-explanation-review-v1.schema.json +196 -0
  253. data/schema/conflict-explanation-study-v1.schema.json +528 -0
  254. data/schema/construction-profile-v1.schema.json +779 -0
  255. data/schema/diff-v1.schema.json +41 -0
  256. data/schema/direct-ielr-decision-v1.schema.json +200 -0
  257. data/schema/equiv-v1.schema.json +64 -0
  258. data/schema/error-ux-review-v1.schema.json +609 -0
  259. data/schema/error-ux-round2-review-v1.schema.json +191 -0
  260. data/schema/error-ux-round2-v1.schema.json +519 -0
  261. data/schema/explain-v1.schema.json +63 -1
  262. data/schema/fix-v1.schema.json +64 -0
  263. data/schema/fix-v2.schema.json +66 -0
  264. data/schema/fix-v3.schema.json +101 -0
  265. data/schema/fuzz-regression-v1.schema.json +79 -0
  266. data/schema/fuzz-v1.schema.json +114 -0
  267. data/schema/{grammar-ir-v2.schema.json → grammar-ir-extensions.schema.json} +20 -65
  268. data/schema/{grammar-ir-v1.schema.json → grammar-ir-foundation.schema.json} +3 -3
  269. data/schema/grammar-ir.schema.json +271 -0
  270. data/schema/ielr-benchmark-v1.schema.json +85 -0
  271. data/schema/lexer-profile-v1.schema.json +491 -0
  272. data/schema/metrics-v1.schema.json +60 -0
  273. data/schema/reduce-v1.schema.json +22 -0
  274. data/schema/reduce-v2.schema.json +63 -0
  275. data/schema/table-artifact-v1.schema.json +377 -0
  276. data/schema/verification-report-v1.schema.json +222 -0
  277. data/schema/verify-v1.schema.json +42 -0
  278. data/sig/ibex/analysis/digraph.rbs +19 -0
  279. data/sig/ibex/bison_import/importer.rbs +140 -0
  280. data/sig/ibex/bison_import/tokenizer.rbs +91 -0
  281. data/sig/ibex/bison_import.rbs +95 -0
  282. data/sig/ibex/bounded_subprocess.rbs +76 -0
  283. data/sig/ibex/cli/ambiguity.rbs +6 -0
  284. data/sig/ibex/cli/analysis.rbs +43 -0
  285. data/sig/ibex/cli/bison_import.rbs +32 -0
  286. data/sig/ibex/cli/config.rbs +35 -0
  287. data/sig/ibex/cli/diagnostics.rbs +16 -3
  288. data/sig/ibex/cli/documentation.rbs +5 -1
  289. data/sig/ibex/cli/equiv.rbs +49 -0
  290. data/sig/ibex/cli/error_messages.rbs +6 -0
  291. data/sig/ibex/cli/explain.rbs +6 -0
  292. data/sig/ibex/cli/fix.rbs +53 -0
  293. data/sig/ibex/cli/formatting.rbs +5 -1
  294. data/sig/ibex/cli/fuzz.rbs +47 -0
  295. data/sig/ibex/cli/fuzz_regressions.rbs +40 -0
  296. data/sig/ibex/cli/generation_artifacts.rbs +21 -2
  297. data/sig/ibex/cli/generation_error_messages.rbs +2 -2
  298. data/sig/ibex/cli/grammar_tests.rbs +15 -3
  299. data/sig/ibex/cli/ir_tools.rbs +7 -19
  300. data/sig/ibex/cli/outputs.rbs +9 -3
  301. data/sig/ibex/cli/reduce.rbs +60 -0
  302. data/sig/ibex/cli/reduce_reporting.rbs +27 -0
  303. data/sig/ibex/cli/samples.rbs +8 -0
  304. data/sig/ibex/cli/verify.rbs +28 -0
  305. data/sig/ibex/cli/watch.rbs +2 -2
  306. data/sig/ibex/cli.rbs +79 -5
  307. data/sig/ibex/codegen/action_method_source.rbs +4 -4
  308. data/sig/ibex/codegen/explain.rbs +45 -25
  309. data/sig/ibex/codegen/generated_action_abi.rbs +14 -10
  310. data/sig/ibex/codegen/rbs.rbs +12 -10
  311. data/sig/ibex/codegen/report.rbs +12 -12
  312. data/sig/ibex/codegen/ruby.rbs +18 -15
  313. data/sig/ibex/codegen/ruby_actions.rbs +6 -6
  314. data/sig/ibex/codegen/ruby_syntax.rbs +10 -8
  315. data/sig/ibex/configuration/analysis_grammar.rbs +13 -0
  316. data/sig/ibex/configuration/explanation.rbs +195 -0
  317. data/sig/ibex/configuration/inspector.rbs +53 -0
  318. data/sig/ibex/configuration.rbs +242 -0
  319. data/sig/ibex/coverage/collector.rbs +16 -14
  320. data/sig/ibex/coverage/event_stream.rbs +12 -10
  321. data/sig/ibex/coverage/report.rbs +20 -18
  322. data/sig/ibex/coverage/runtime_event_validator.rbs +38 -36
  323. data/sig/ibex/delta_reducer.rbs +38 -0
  324. data/sig/ibex/diff.rbs +47 -0
  325. data/sig/ibex/equiv/machine.rbs +54 -0
  326. data/sig/ibex/equiv.rbs +129 -0
  327. data/sig/ibex/fix.rbs +138 -0
  328. data/sig/ibex/frontend/ast.rbs +33 -7
  329. data/sig/ibex/frontend/bootstrap_parser.rbs +2 -0
  330. data/sig/ibex/frontend/diagnostic.rbs +2 -2
  331. data/sig/ibex/frontend/formatter.rbs +38 -30
  332. data/sig/ibex/frontend/generated_parser.rbs +87 -77
  333. data/sig/ibex/frontend/generated_parser_base.rbs +4 -2
  334. data/sig/ibex/frontend/parser/declarations.rbs +3 -0
  335. data/sig/ibex/frontend/parser_configuration_support.rbs +27 -0
  336. data/sig/ibex/frontend/resolution.rbs +3 -2
  337. data/sig/ibex/frontend/source_cursor.rbs +2 -2
  338. data/sig/ibex/frontend/source_span.rbs +5 -2
  339. data/sig/ibex/frontend/token_adapter/declaration_state.rbs +13 -1
  340. data/sig/ibex/frontend/token_adapter.rbs +6 -0
  341. data/sig/ibex/fuzz.rbs +71 -0
  342. data/sig/ibex/generation_input.rbs +2 -2
  343. data/sig/ibex/generation_manifest.rbs +35 -32
  344. data/sig/ibex/generation_transaction_recovery.rbs +2 -2
  345. data/sig/ibex/generation_transaction_validation.rbs +2 -2
  346. data/sig/ibex/grammar_tests.rbs +2 -2
  347. data/sig/ibex/ir/automaton_ir.rbs +30 -11
  348. data/sig/ibex/ir/grammar_ir.rbs +41 -27
  349. data/sig/ibex/ir/lexer_ir.rbs +8 -8
  350. data/sig/ibex/ir/parser_contract.rbs +69 -0
  351. data/sig/ibex/ir/serialize.rbs +63 -28
  352. data/sig/ibex/ir/validator/automaton.rbs +47 -44
  353. data/sig/ibex/ir/validator/base.rbs +35 -31
  354. data/sig/ibex/ir/validator/grammar.rbs +78 -67
  355. data/sig/ibex/ir/validator/lexer.rbs +4 -4
  356. data/sig/ibex/ir.rbs +9 -3
  357. data/sig/ibex/lalr/build_metrics.rbs +42 -2
  358. data/sig/ibex/lalr/builder.rbs +75 -24
  359. data/sig/ibex/lalr/conflict_search.rbs +5 -2
  360. data/sig/ibex/lalr/counterexample.rbs +17 -14
  361. data/sig/ibex/lalr/direct_lookaheads.rbs +35 -28
  362. data/sig/ibex/lalr/goto_follows.rbs +89 -0
  363. data/sig/ibex/lalr/ielr/annotator.rbs +67 -0
  364. data/sig/ibex/lalr/ielr/bits.rbs +14 -0
  365. data/sig/ibex/lalr/ielr/inadequacy.rbs +24 -0
  366. data/sig/ibex/lalr/ielr/item_lookaheads.rbs +35 -0
  367. data/sig/ibex/lalr/ielr/pipeline.rbs +17 -0
  368. data/sig/ibex/lalr/ielr/split_stability.rbs +27 -0
  369. data/sig/ibex/lalr/ielr/split_state.rbs +14 -0
  370. data/sig/ibex/lalr/ielr/state_splitter.rbs +76 -0
  371. data/sig/ibex/lalr/ielr_partition.rbs +17 -5
  372. data/sig/ibex/lalr/inadequacy_report.rbs +21 -0
  373. data/sig/ibex/lalr/lookahead_propagation.rbs +38 -0
  374. data/sig/ibex/lalr/lr0_collection.rbs +50 -0
  375. data/sig/ibex/lalr/unreachable_states.rbs +25 -0
  376. data/sig/ibex/lalr.rbs +11 -1
  377. data/sig/ibex/location.rbs +6 -6
  378. data/sig/ibex/lsp/document_handlers.rbs +8 -8
  379. data/sig/ibex/lsp/initialization_handlers.rbs +12 -12
  380. data/sig/ibex/lsp/navigation_handlers.rbs +15 -12
  381. data/sig/ibex/lsp/parser_configuration_assistance.rbs +49 -0
  382. data/sig/ibex/lsp/position_codec.rbs +8 -4
  383. data/sig/ibex/lsp/request_handlers.rbs +4 -4
  384. data/sig/ibex/lsp/request_support.rbs +8 -8
  385. data/sig/ibex/lsp/server.rbs +16 -16
  386. data/sig/ibex/lsp/symbol_index.rbs +20 -21
  387. data/sig/ibex/lsp/symbol_index_builder.rbs +9 -8
  388. data/sig/ibex/lsp/symbol_occurrence.rbs +11 -5
  389. data/sig/ibex/lsp/transport.rbs +18 -6
  390. data/sig/ibex/lsp/workspace.rbs +3 -2
  391. data/sig/ibex/lsp/workspace_analyzer.rbs +1 -1
  392. data/sig/ibex/messages.rbs +26 -0
  393. data/sig/ibex/metrics.rbs +50 -0
  394. data/sig/ibex/normalize/diagnostics.rbs +4 -4
  395. data/sig/ibex/normalize/expander.rbs +2 -2
  396. data/sig/ibex/normalize/expression.rbs +10 -8
  397. data/sig/ibex/normalize/grammar_builder.rbs +11 -0
  398. data/sig/ibex/normalize/inline_expansion.rbs +59 -50
  399. data/sig/ibex/normalize/lexer.rbs +4 -4
  400. data/sig/ibex/normalize/parameter_ebnf_lowering.rbs +15 -14
  401. data/sig/ibex/normalize/parameter_lowering.rbs +18 -18
  402. data/sig/ibex/normalize/parameters.rbs +13 -8
  403. data/sig/ibex/normalize/parser_configuration.rbs +23 -0
  404. data/sig/ibex/normalize.rbs +11 -5
  405. data/sig/ibex/racc_migration/report.rbs +8 -6
  406. data/sig/ibex/rake_task.rbs +1 -1
  407. data/sig/ibex/samples.rbs +13 -4
  408. data/sig/ibex/table_artifact/builder.rbs +93 -0
  409. data/sig/ibex/table_artifact/cst_projection.rbs +20 -0
  410. data/sig/ibex/table_artifact/document.rbs +27 -0
  411. data/sig/ibex/table_artifact/executor.rbs +66 -0
  412. data/sig/ibex/table_artifact/serializer.rbs +25 -0
  413. data/sig/ibex/table_artifact/validator/metadata.rbs +52 -0
  414. data/sig/ibex/table_artifact/validator/support.rbs +46 -0
  415. data/sig/ibex/table_artifact/validator/tables.rbs +63 -0
  416. data/sig/ibex/table_artifact/validator.rbs +66 -0
  417. data/sig/ibex/table_artifact.rbs +32 -0
  418. data/sig/ibex/table_simulation/result.rbs +8 -4
  419. data/sig/ibex/table_simulation/step.rbs +4 -2
  420. data/sig/ibex/tables.rbs +10 -9
  421. data/sig/ibex/verifiable_generation_bundle.rbs +24 -0
  422. data/sig/ibex/verification_report/builder.rbs +53 -0
  423. data/sig/ibex/verification_report/canonical_ir.rbs +41 -0
  424. data/sig/ibex/verification_report/logical_path.rbs +34 -0
  425. data/sig/ibex/verification_report/validator.rbs +114 -0
  426. data/sig/ibex/verification_report.rbs +44 -0
  427. data/sig/ibex/verify/action_correspondence.rbs +50 -0
  428. data/sig/ibex/verify/language_witness.rbs +112 -0
  429. data/sig/ibex/verify/reference_collection.rbs +63 -0
  430. data/sig/ibex/verify/result.rbs +52 -0
  431. data/sig/ibex/verify/verifier.rbs +170 -0
  432. data/sig/ibex/verify.rbs +6 -0
  433. data/sig/ibex/watch/runner.rbs +12 -2
  434. data/sig/ibex/watch/source_snapshot.rbs +13 -9
  435. metadata +232 -12
  436. data/lib/ibex/ir/migration.rb +0 -120
  437. data/sig/ibex/ir/migration.rbs +0 -34
@@ -0,0 +1,1581 @@
1
+ {
2
+ "ibex_error_ux_round2": "repository-capture",
3
+ "schema_version": 1,
4
+ "repository_capture": {
5
+ "status": "complete",
6
+ "generator": "tool/error_ux_round2.rb",
7
+ "corpus": {
8
+ "path": "test/fixtures/error_ux_round2/corpus-v1.json",
9
+ "sha256": "b3545aea560ac5b8d23589124fb5d2276673e5c84e69eca61f5da233c2f5bfb9"
10
+ },
11
+ "implementation_sources": [
12
+ {
13
+ "path": "lib/ibex.rb",
14
+ "sha256": "8da8f2b43bd71fbf359aba4d28d23fc4366b9b4a696a35ecb2eea9dbed0d889a"
15
+ },
16
+ {
17
+ "path": "lib/ibex/analysis.rb",
18
+ "sha256": "66a7ce62e3e877d084deb3de720055e9e9a1f3081f9903a3c5f948bb496394b5"
19
+ },
20
+ {
21
+ "path": "lib/ibex/analysis/digraph.rb",
22
+ "sha256": "470aa4ed7af53c60993044667ed74813e15c19d3f0450a3404f12c10a88f9b98"
23
+ },
24
+ {
25
+ "path": "lib/ibex/analysis/sets.rb",
26
+ "sha256": "9fd97106dacd8dea5f342a422c961a6e71a94370bf97bbabf6abe201137a180d"
27
+ },
28
+ {
29
+ "path": "lib/ibex/artifact_set.rb",
30
+ "sha256": "79a350a24af5aaa47515c396b737870ab748db0c7e94fa8b90ea79ef23535bb5"
31
+ },
32
+ {
33
+ "path": "lib/ibex/bison_import.rb",
34
+ "sha256": "ba25097d5f4342406f5d358bcdb3614fe17f363c15f1a5364eaf4f69b28a642a"
35
+ },
36
+ {
37
+ "path": "lib/ibex/bison_import/importer.rb",
38
+ "sha256": "458f80fc482246e35c40612b78adf88177db045bd082ce4305c21fe6a6f82c46"
39
+ },
40
+ {
41
+ "path": "lib/ibex/bison_import/tokenizer.rb",
42
+ "sha256": "1aef258c1399a24509f37be2e4a136063bbf1c0ea557515a1f0dc567727223e8"
43
+ },
44
+ {
45
+ "path": "lib/ibex/codegen/action_locations.rb",
46
+ "sha256": "39e3abb50898da471cbadd35ee8943038960c34ad58b29f2c0e9db01e64c1fdc"
47
+ },
48
+ {
49
+ "path": "lib/ibex/codegen/action_method_source.rb",
50
+ "sha256": "4331c52fd0e478e864f4fa52c1c66212529fb17597f2e6b543a8d88dd4682291"
51
+ },
52
+ {
53
+ "path": "lib/ibex/codegen/action_source.rb",
54
+ "sha256": "14fdb71504bc6ce4e93aaf21053c2cc17188bbc9d3ef406cfb1c809393fbbaac"
55
+ },
56
+ {
57
+ "path": "lib/ibex/codegen/ambiguity.rb",
58
+ "sha256": "23dcf6a3f9318b611a41cc05ecaecbeaa122b76dab614ad857ddfcd0b7820e4b"
59
+ },
60
+ {
61
+ "path": "lib/ibex/codegen/cst_metadata.rb",
62
+ "sha256": "fc2ed04a48d7a0199d4b20967673c6f97f6e2b373e0aac616124eae286c2c6ee"
63
+ },
64
+ {
65
+ "path": "lib/ibex/codegen/documentation.rb",
66
+ "sha256": "6551a3dc29862c1de172ee75681f20b234f7c271891419d9a997d61e1b69e5c9"
67
+ },
68
+ {
69
+ "path": "lib/ibex/codegen/dot.rb",
70
+ "sha256": "92111bc3bc75d6e1e285a39717d04652e539ca096f5c33531efb3064b7fe2447"
71
+ },
72
+ {
73
+ "path": "lib/ibex/codegen/explain.rb",
74
+ "sha256": "f8c9123224ee6ab443a8ead6c7a2773655a7884756a3202120293c06d151b061"
75
+ },
76
+ {
77
+ "path": "lib/ibex/codegen/generated_action_abi.rb",
78
+ "sha256": "5c6b56e424869af9b5d921b6a6ad6093948dc6d051b22e4f2e8bbf4fbcfc755c"
79
+ },
80
+ {
81
+ "path": "lib/ibex/codegen/html.rb",
82
+ "sha256": "79bc81557be7874877a86a40ccb367b35f1815bf057827b228fcda905d2d19e8"
83
+ },
84
+ {
85
+ "path": "lib/ibex/codegen/mermaid.rb",
86
+ "sha256": "423dc0ec00b80e31f828a1470bf925d9d6d6ca22e6a5e919558a1cb342bfbcf3"
87
+ },
88
+ {
89
+ "path": "lib/ibex/codegen/railroad.rb",
90
+ "sha256": "512f0a8f904934ba6e4856d386d4f08817c19ad07a61d8ec0c86b4da08c505a5"
91
+ },
92
+ {
93
+ "path": "lib/ibex/codegen/railroad_documentation.rb",
94
+ "sha256": "fb3f39420d793903a0a5292743241d39bfc5d7e9691a9a23c8542935fc26f355"
95
+ },
96
+ {
97
+ "path": "lib/ibex/codegen/rbs.rb",
98
+ "sha256": "80dead575a27ed8c4d78d57e7d47bbab815864c474b170ffd3da4411e7c74c4a"
99
+ },
100
+ {
101
+ "path": "lib/ibex/codegen/report.rb",
102
+ "sha256": "8cb444f1375a2457a5b10ad38fc3afd6db27f2548fabb2bcc463d07c709282fa"
103
+ },
104
+ {
105
+ "path": "lib/ibex/codegen/ruby.rb",
106
+ "sha256": "933a156a39aa4dcbfe3396da0262054378ca3c73c7f651561b24347997fdd3dc"
107
+ },
108
+ {
109
+ "path": "lib/ibex/codegen/ruby_actions.rb",
110
+ "sha256": "8ccb5550a8996ee6ff18a31541d5205dde9d4837c8544cb7628e9bf4a5335460"
111
+ },
112
+ {
113
+ "path": "lib/ibex/codegen/ruby_ast.rb",
114
+ "sha256": "d7a2b97ce75a9ee3aba1097634dcb175a791e1d05ad085b1cf5e2aeffa41eab5"
115
+ },
116
+ {
117
+ "path": "lib/ibex/codegen/ruby_error_messages.rb",
118
+ "sha256": "088ef1cd4a583c80e11802f025de18e255a4fb634328c46696f0876c74808b71"
119
+ },
120
+ {
121
+ "path": "lib/ibex/codegen/ruby_lexer.rb",
122
+ "sha256": "683558eb0560201d6cda7dd241203375874952b803f41eb51ee7ef24bf1d9b81"
123
+ },
124
+ {
125
+ "path": "lib/ibex/codegen/ruby_syntax.rb",
126
+ "sha256": "553b4a002337b7d82fc91eec6efe3a866aa35040cba9185016d3491589cba734"
127
+ },
128
+ {
129
+ "path": "lib/ibex/codegen/ruby_table_metadata.rb",
130
+ "sha256": "b9df0e8ba6ced2b1d099fccb85127c9fd55ea69ce22a77c3226c3056fe955bad"
131
+ },
132
+ {
133
+ "path": "lib/ibex/codegen/ruby_value_printers.rb",
134
+ "sha256": "fcacd00a33b8dca75c95f3f89ec7fc655406c596f6e183224ad90c5b7d854e7b"
135
+ },
136
+ {
137
+ "path": "lib/ibex/codegen/symbol_labels.rb",
138
+ "sha256": "f29d9b3c80e2030303c44d6c011efad1ee9e6307ae9041a189a0753a39a94cdf"
139
+ },
140
+ {
141
+ "path": "lib/ibex/configuration.rb",
142
+ "sha256": "94a5f8ec80e1d28ca1254720128f3b703e20321e8989442f516548b210c92aa6"
143
+ },
144
+ {
145
+ "path": "lib/ibex/configuration/analysis_grammar.rb",
146
+ "sha256": "da24d7fdd07ec0b0238040e857998c75ede8e958db3795930687f8e8fca68f74"
147
+ },
148
+ {
149
+ "path": "lib/ibex/configuration/explanation.rb",
150
+ "sha256": "6016b85c5c55f8a0ac2bf5927de9d0d0ecb1e39386be451f9aafb39b0d98a8f9"
151
+ },
152
+ {
153
+ "path": "lib/ibex/coverage.rb",
154
+ "sha256": "8578aadb7e8b1b7e89d106e4f19f45fe400b1461531fd74eca7495b1bcded30a"
155
+ },
156
+ {
157
+ "path": "lib/ibex/coverage/collector.rb",
158
+ "sha256": "8e573956fe787766c40f45eacab484995e7ff453e3045e3ea4188e21396069a5"
159
+ },
160
+ {
161
+ "path": "lib/ibex/coverage/event_stream.rb",
162
+ "sha256": "cc7665a0a5681eb5f88ecbb2c13e877f200e657a593a9e48252fe3ae9648141f"
163
+ },
164
+ {
165
+ "path": "lib/ibex/coverage/report.rb",
166
+ "sha256": "73647f9207d53c5c18a077ff0faf4b933b51b173a29fa0526f95a21c9fc61fca"
167
+ },
168
+ {
169
+ "path": "lib/ibex/coverage/runtime_event_validator.rb",
170
+ "sha256": "72a1ab41d460fb292f31b9669ab241f9830e77c6ec913491b452edb5edc52ae8"
171
+ },
172
+ {
173
+ "path": "lib/ibex/delta_reducer.rb",
174
+ "sha256": "fac7b70b174a279fb3122b31fc8bbfbbf9ff66938bab5b998c7756f22fd8498a"
175
+ },
176
+ {
177
+ "path": "lib/ibex/diff.rb",
178
+ "sha256": "59bf6a408b344557fcfd4106a082ea9ecf00dc7b788e163f0ff023c587f05355"
179
+ },
180
+ {
181
+ "path": "lib/ibex/equiv.rb",
182
+ "sha256": "37e6ec2228ca70720702367087bebfa4d87047ba2422b86f855c6047a364d217"
183
+ },
184
+ {
185
+ "path": "lib/ibex/equiv/machine.rb",
186
+ "sha256": "c4977be48906668087f5654029e065b9d24d0dfdf1ae708f7fdafe1e1bd46751"
187
+ },
188
+ {
189
+ "path": "lib/ibex/error.rb",
190
+ "sha256": "d9ea061a96dae780e52c6dbe947416f92ae901bd270aef587f8961cd558b623e"
191
+ },
192
+ {
193
+ "path": "lib/ibex/error_messages.rb",
194
+ "sha256": "55d26c809659e46688b759a2be3823a7bd1385a8a738852e5c03c49152d677c4"
195
+ },
196
+ {
197
+ "path": "lib/ibex/error_messages/parser.rb",
198
+ "sha256": "8158c0feec56b4e7656d1c78e64cd075a115f74a48426254eb7ea0781bb546bd"
199
+ },
200
+ {
201
+ "path": "lib/ibex/error_messages/parser_v2.rb",
202
+ "sha256": "50df0e76ceaea93a11ca662e1015f7ec68050ddbda58e8302c74f32d7e5c67bb"
203
+ },
204
+ {
205
+ "path": "lib/ibex/error_messages/renderer.rb",
206
+ "sha256": "ace98678c537f6e42b88bfafd978400bb71f40703f441bf987d0d4300101edaf"
207
+ },
208
+ {
209
+ "path": "lib/ibex/error_messages/sentence_search.rb",
210
+ "sha256": "602a0196340ff6bd4a202e48d60f3ac39734dcbcb860503f7867ad2f36b5f014"
211
+ },
212
+ {
213
+ "path": "lib/ibex/error_messages/update.rb",
214
+ "sha256": "64df37e83ae380a57a7e15a663772b1c81a117722da60be344bb4f1a277d79ab"
215
+ },
216
+ {
217
+ "path": "lib/ibex/fix.rb",
218
+ "sha256": "ba706969093bca0bafcc514324871c3de8d9cc9e54c8738dd1892dd0239508fc"
219
+ },
220
+ {
221
+ "path": "lib/ibex/frontend.rb",
222
+ "sha256": "332550c378c40abdc6011d96a925ad6cf39257728b370eaece6d644f5796a981"
223
+ },
224
+ {
225
+ "path": "lib/ibex/frontend/action_scanner.rb",
226
+ "sha256": "bc8388401500590e60699b2a23a570dc5793e372c124029c061036561a67f68d"
227
+ },
228
+ {
229
+ "path": "lib/ibex/frontend/ast.rb",
230
+ "sha256": "375868cac068483b08f8e5cffe78ad4d475955c96054aa113ad19d6f364ff1d7"
231
+ },
232
+ {
233
+ "path": "lib/ibex/frontend/diagnostic.rb",
234
+ "sha256": "fa0c7df1d775ba678444eacbc52de6e0db4d4be7d500affb818859b81d784422"
235
+ },
236
+ {
237
+ "path": "lib/ibex/frontend/diagnostic_recovery.rb",
238
+ "sha256": "9ec381cdef8b0020f8f9ad811e9651c59e85b3221ac0ae41b8feeadd76d34af7"
239
+ },
240
+ {
241
+ "path": "lib/ibex/frontend/dsl.rb",
242
+ "sha256": "d372c12d8bd8c35edb533aac3f9349859d4f01d38eb9767c25f5d3e56747aa49"
243
+ },
244
+ {
245
+ "path": "lib/ibex/frontend/formatter.rb",
246
+ "sha256": "93c65ffab32c0ce5bdc7583bf2bc5cd8e1ca290d8fe40eceb846dabf99cc392b"
247
+ },
248
+ {
249
+ "path": "lib/ibex/frontend/generated_parser.rb",
250
+ "sha256": "a9c909a60c9e9b44e10a417e9c80098f03217399726542936cebcfe2a35ed88a"
251
+ },
252
+ {
253
+ "path": "lib/ibex/frontend/generated_parser_base.rb",
254
+ "sha256": "50ba7a94e3c33704a4627c047328bebb55c2a5d5afcb0afa22c6ae57753d608a"
255
+ },
256
+ {
257
+ "path": "lib/ibex/frontend/generated_parser_includes.rb",
258
+ "sha256": "0a616acbe04b8660aae2581c08b75726c92f5a92fabc298be4f6204c7dd7c159"
259
+ },
260
+ {
261
+ "path": "lib/ibex/frontend/generated_parser_metadata.rb",
262
+ "sha256": "27fdc65dd639fe8c7766bcaaa6c8e495948405e1e37b49edf042cf9cd34664b7"
263
+ },
264
+ {
265
+ "path": "lib/ibex/frontend/generated_parser_parameters.rb",
266
+ "sha256": "47ecaaf7e87c7a9c025aed44a7fad9149dbad11324200c34dd88588f3c898bad"
267
+ },
268
+ {
269
+ "path": "lib/ibex/frontend/lexer.rb",
270
+ "sha256": "9aa2d3e780b1a50c605b8d6ea7ecd3f278ad25ba90205c204995bc94ed521f2c"
271
+ },
272
+ {
273
+ "path": "lib/ibex/frontend/lexer_recovery.rb",
274
+ "sha256": "97bc85b832b4e69691bbbf6256892a3a480d9a4a61244121073f50434e81d516"
275
+ },
276
+ {
277
+ "path": "lib/ibex/frontend/parser.rb",
278
+ "sha256": "a7ca03ed4092c476cef2ca05f22831438b6688b65f6abbbb446dd91b2966e17f"
279
+ },
280
+ {
281
+ "path": "lib/ibex/frontend/parser_configuration_support.rb",
282
+ "sha256": "d742ac1908ccad9b3cfe610921fd698c3d8aca33ae611ad9e8572ef3993a3c2a"
283
+ },
284
+ {
285
+ "path": "lib/ibex/frontend/resolution.rb",
286
+ "sha256": "b6ab6eed610a75c2e900304c68b9b68b0387028ed1fc06e304d270bd89bc9812"
287
+ },
288
+ {
289
+ "path": "lib/ibex/frontend/resolver.rb",
290
+ "sha256": "2d4d8d481a0d7bfacc068869d88564f4673a79b458b4e7debbcdc24b8fe53de3"
291
+ },
292
+ {
293
+ "path": "lib/ibex/frontend/rule_documentation.rb",
294
+ "sha256": "f0dcf27145a407ad253ec553b08d3004618248bc805d97a6f2b20f66765396b6"
295
+ },
296
+ {
297
+ "path": "lib/ibex/frontend/source_cursor.rb",
298
+ "sha256": "61ebec80cd3c69eaecfb61f94b1e918b32382a14a185a42f8716a1df4104642e"
299
+ },
300
+ {
301
+ "path": "lib/ibex/frontend/source_document.rb",
302
+ "sha256": "1d4d8aeb8f920b63d102453e9e8b8c8487571368d1239bcc7eae16ac011c1bd0"
303
+ },
304
+ {
305
+ "path": "lib/ibex/frontend/source_loader.rb",
306
+ "sha256": "8a5c95b5e7a66475b240ed630d06ecf98321c8335d2e9163a5c64d46bae0e27c"
307
+ },
308
+ {
309
+ "path": "lib/ibex/frontend/source_span.rb",
310
+ "sha256": "e8cafbfd62a8e13a30665bd1fae00a013f78da22aabfa229c924cec9694e0b14"
311
+ },
312
+ {
313
+ "path": "lib/ibex/frontend/token_adapter.rb",
314
+ "sha256": "5c12f66069c1162021f1b1d0b452b752168f2588fdc98811bbcc04962450f778"
315
+ },
316
+ {
317
+ "path": "lib/ibex/frontend/token_adapter/declaration_document_state.rb",
318
+ "sha256": "dc8fc43ce3872d69c271ae0e00d7a240da26bc188928ad48d6f720bf50163f9b"
319
+ },
320
+ {
321
+ "path": "lib/ibex/frontend/token_adapter/declaration_lexer_state.rb",
322
+ "sha256": "0063fc8b18f713b826f893cfa9aef1f9fa8257a2fab1485f61ca4d3f954e1def"
323
+ },
324
+ {
325
+ "path": "lib/ibex/frontend/token_adapter/declaration_state.rb",
326
+ "sha256": "b586ae991e9d70b4490f0c860e0f5160d810556581067232dfcd6f127fc7f4ba"
327
+ },
328
+ {
329
+ "path": "lib/ibex/frontend/token_adapter/delimiter_tracker.rb",
330
+ "sha256": "ee700ff1f8f9b49e16874226d4250de2175bb1fd2504f84c855f1cd7a72bad51"
331
+ },
332
+ {
333
+ "path": "lib/ibex/frontend/token_adapter/rule_state.rb",
334
+ "sha256": "bf3da6774b77224e9f3ce3f6eba43d532b632688c645f03951ad3216d0497430"
335
+ },
336
+ {
337
+ "path": "lib/ibex/fuzz.rb",
338
+ "sha256": "b9527e38fc6087c4d5abac30d11b7adf18dd2dc92610400064e02c6ed0ad85ac"
339
+ },
340
+ {
341
+ "path": "lib/ibex/generation_input.rb",
342
+ "sha256": "12b9c3f6461dbaa3e9893e4c8d0b64e64cf51201074ded3f7b6178874e8a854a"
343
+ },
344
+ {
345
+ "path": "lib/ibex/generation_manifest.rb",
346
+ "sha256": "d753ec8e50662c02d2eaf7074e0d6fa1d4cc5c219c06ffc9c3387075c17c962c"
347
+ },
348
+ {
349
+ "path": "lib/ibex/generation_transaction.rb",
350
+ "sha256": "3fb2aa0549b67fd8ebb2bff0a357e7b9df193c08b5a482d4cbbdaae77fae3867"
351
+ },
352
+ {
353
+ "path": "lib/ibex/generation_transaction_recovery.rb",
354
+ "sha256": "f8a110e9a7996a17cf9a02d46f6c9b66c5321274da6f9b00c0090d8d71c7efae"
355
+ },
356
+ {
357
+ "path": "lib/ibex/generation_transaction_validation.rb",
358
+ "sha256": "3d96fbbe2e40f88a063361623e680f62464b3876e01b930067ea87630b9fe9d6"
359
+ },
360
+ {
361
+ "path": "lib/ibex/grammar_tests.rb",
362
+ "sha256": "9b14fcf8b027ce005d270976679da3af223a0ed3f555aaa53593a6f3761ab29a"
363
+ },
364
+ {
365
+ "path": "lib/ibex/ir.rb",
366
+ "sha256": "897997bd1459f1024d06002ddd210c917ec6dc12e9b87855a2c9ba3929fedddb"
367
+ },
368
+ {
369
+ "path": "lib/ibex/ir/automaton_ir.rb",
370
+ "sha256": "eb36c3e9f4dd2c28072f899894515054dedea4510b6b436953fa364587205dbe"
371
+ },
372
+ {
373
+ "path": "lib/ibex/ir/grammar_ir.rb",
374
+ "sha256": "cb48ee7c493b6db6bf7c33c08057c5ebf8ab615a917863ce0384bea0119d65a0"
375
+ },
376
+ {
377
+ "path": "lib/ibex/ir/lexer_ir.rb",
378
+ "sha256": "17b4239b55f8e5b4c5e6edac7e75b7af746340a257c727a8c37d4671330b69bc"
379
+ },
380
+ {
381
+ "path": "lib/ibex/ir/parser_contract.rb",
382
+ "sha256": "b7a09c8f2d801e91eeacaf70e510d924e5d13999166587b3b420ec71fed7b1d6"
383
+ },
384
+ {
385
+ "path": "lib/ibex/ir/serialize.rb",
386
+ "sha256": "95fa5a97e57640c7aec935b02e87b00da269871060ad7023e3b83a9ca4a52a1a"
387
+ },
388
+ {
389
+ "path": "lib/ibex/ir/validator.rb",
390
+ "sha256": "7d92701a65114efb03ecafe2bf7ad6482f8a4144e5cadccde4e9215c6689563b"
391
+ },
392
+ {
393
+ "path": "lib/ibex/ir/validator/automaton.rb",
394
+ "sha256": "c60a3fc165bbed63160a805649c63f9d56bbb6ed21a6e2c1348ed416a4594f3a"
395
+ },
396
+ {
397
+ "path": "lib/ibex/ir/validator/base.rb",
398
+ "sha256": "4e90584f0ddce8b775d30329520307540cafe02eb556e70cb4c600cba97479ad"
399
+ },
400
+ {
401
+ "path": "lib/ibex/ir/validator/grammar.rb",
402
+ "sha256": "d966e322757d09b0de439119b2894dd96859b01ee2d4e15d7015a27fbc404579"
403
+ },
404
+ {
405
+ "path": "lib/ibex/ir/validator/lexer.rb",
406
+ "sha256": "ffcc66abdfc770fffca59ac22cbf67eff9003274168810c66c63ad4a71c6bc79"
407
+ },
408
+ {
409
+ "path": "lib/ibex/lalr.rb",
410
+ "sha256": "d34c440528243db95343666e66c66f8af5bfb509b8676b7216d5db40b7804a4f"
411
+ },
412
+ {
413
+ "path": "lib/ibex/lalr/build_metrics.rb",
414
+ "sha256": "eadf2b10f366c110a4110592b6cfe3e221b69577cb1b7993c6ebc5d4d8c31717"
415
+ },
416
+ {
417
+ "path": "lib/ibex/lalr/builder.rb",
418
+ "sha256": "69a4b832abf5c1d6332049fc584b9c46f8b43609fad65dc0682e618e84ea52ad"
419
+ },
420
+ {
421
+ "path": "lib/ibex/lalr/conflict.rb",
422
+ "sha256": "eb3660e187447a5da5e52f12281054159d0c39d541dab1f7e11582529a545d60"
423
+ },
424
+ {
425
+ "path": "lib/ibex/lalr/conflict_search.rb",
426
+ "sha256": "e1856b7c08fbbadd0297c1c5477a32d1aa5fe1c871bb119c8be89433cf8732f2"
427
+ },
428
+ {
429
+ "path": "lib/ibex/lalr/conflict_search_limits.rb",
430
+ "sha256": "5be7e568f532c8c2305e2dd581258e041aba670c4f84279c6e7c1e41be4b6b0c"
431
+ },
432
+ {
433
+ "path": "lib/ibex/lalr/counterexample.rb",
434
+ "sha256": "6977f5181ad3728d7a6237dc7868e2805018ec7f0d0aa5b2f7ec2d51e4497a73"
435
+ },
436
+ {
437
+ "path": "lib/ibex/lalr/default_reductions.rb",
438
+ "sha256": "9a25433955895039ee34400e182f3c6603a2893575f91517e4bc14e42d3889d2"
439
+ },
440
+ {
441
+ "path": "lib/ibex/lalr/direct_lookaheads.rb",
442
+ "sha256": "b3fe129a688994c14105653ecf74c3e4ed37d3a3bd3ba9fbd7410dc06684f254"
443
+ },
444
+ {
445
+ "path": "lib/ibex/lalr/goto_follows.rb",
446
+ "sha256": "45afbbbc0242b5129e832c3078e77542e42cb7707792d653f582bf8fe4d6f22f"
447
+ },
448
+ {
449
+ "path": "lib/ibex/lalr/ielr/annotator.rb",
450
+ "sha256": "0215d424e69e43127a3da025b4618ccdb5148ea84deaa2fb65a45bf7e9fa0246"
451
+ },
452
+ {
453
+ "path": "lib/ibex/lalr/ielr/bits.rb",
454
+ "sha256": "dc04aa752f6eae4f88bbbaabe0435f8367b8866c88fda89785065d2578d3544e"
455
+ },
456
+ {
457
+ "path": "lib/ibex/lalr/ielr/inadequacy.rb",
458
+ "sha256": "d2a36a3a3e430fc4566d87f7957df05a7a37aed0844617f0159bb6a09542481b"
459
+ },
460
+ {
461
+ "path": "lib/ibex/lalr/ielr/item_lookaheads.rb",
462
+ "sha256": "359d3448117447909143c815ef0c53b081893100982aa608ae50f32aa48cdd80"
463
+ },
464
+ {
465
+ "path": "lib/ibex/lalr/ielr/pipeline.rb",
466
+ "sha256": "c5dd215e3ab13482d11fb4ef7b5aa49d170dbb5456e396b57b74fe8baa1aea0b"
467
+ },
468
+ {
469
+ "path": "lib/ibex/lalr/ielr/split_stability.rb",
470
+ "sha256": "08402d91c0fe4e39d449cbf55617cee04fc73dd3aae2be8207e62b4590ccbcd3"
471
+ },
472
+ {
473
+ "path": "lib/ibex/lalr/ielr/split_state.rb",
474
+ "sha256": "a930eb4a1f0bd3ec62cc4474225f63803c5f7085bcc4a397296a81ac15ac8b36"
475
+ },
476
+ {
477
+ "path": "lib/ibex/lalr/ielr/state_splitter.rb",
478
+ "sha256": "75c3cef68be399e893a1a160027fb9abc6410e0f12adaed8acbad09c8093568c"
479
+ },
480
+ {
481
+ "path": "lib/ibex/lalr/ielr_partition.rb",
482
+ "sha256": "842610d6ce3e2ae0850807e340a38864c85c27f513e42c26a6759cd865d9a506"
483
+ },
484
+ {
485
+ "path": "lib/ibex/lalr/lookahead_propagation.rb",
486
+ "sha256": "08ebf8de10e734242f719d6d0dcd7ce658d2d222c74049d33f580b124eb0c189"
487
+ },
488
+ {
489
+ "path": "lib/ibex/lalr/lr0_collection.rb",
490
+ "sha256": "abfcca1bd7da9006be889a092af35083a8211cce4655a7c893bee91109ddd1d8"
491
+ },
492
+ {
493
+ "path": "lib/ibex/lalr/on_error_reductions.rb",
494
+ "sha256": "a906e648908960f83d0a6ba52fd26607b0b87dcd5ecf9e0d448d15ef1cb92df7"
495
+ },
496
+ {
497
+ "path": "lib/ibex/lalr/unreachable_states.rb",
498
+ "sha256": "d2abb577b11337a36ab729e705bbfc145ebc3405a6ab07a12f969a6622d5cf75"
499
+ },
500
+ {
501
+ "path": "lib/ibex/location.rb",
502
+ "sha256": "1803a2746028b22108e213bb4421751f658e068adb622217958568c81d97a9af"
503
+ },
504
+ {
505
+ "path": "lib/ibex/messages.rb",
506
+ "sha256": "c2fb8e72ce1d0a24f0aae3a418b164bc65ce394e31dddb0995d723b1dc92453e"
507
+ },
508
+ {
509
+ "path": "lib/ibex/metrics.rb",
510
+ "sha256": "4734fa25fe8a733f8828a31cb9f975b8147ea283e48bab506f7c6d4adc296003"
511
+ },
512
+ {
513
+ "path": "lib/ibex/normalize.rb",
514
+ "sha256": "f21abb211db32700c2df4f7bee8830c0541dab3b2993beb8d618e48e0b560319"
515
+ },
516
+ {
517
+ "path": "lib/ibex/normalize/declarations.rb",
518
+ "sha256": "879fe8f37e3b02252f1f166d96615dcd1023ac237de5371fe7f925d46659d9c0"
519
+ },
520
+ {
521
+ "path": "lib/ibex/normalize/diagnostics.rb",
522
+ "sha256": "7d99bd4a15dd3170863d90005d1bd1308e9730534297ecc5ca3c8c5ec4fbbcfa"
523
+ },
524
+ {
525
+ "path": "lib/ibex/normalize/expander.rb",
526
+ "sha256": "980501cbc4e119d69d9d9a7d68fe9557346f06a65d70b5595d003e24f21009ad"
527
+ },
528
+ {
529
+ "path": "lib/ibex/normalize/expression.rb",
530
+ "sha256": "665a2cf8764439cd9c3b5c87a8dc002f4e65a1049f6df003f781ac27dfa66f2a"
531
+ },
532
+ {
533
+ "path": "lib/ibex/normalize/grammar_builder.rb",
534
+ "sha256": "15f955c7807f20987d9d998e136d16675a8f8686842695e6e6c1107c33b2c022"
535
+ },
536
+ {
537
+ "path": "lib/ibex/normalize/inline_expansion.rb",
538
+ "sha256": "a4cac4b0b875e37554edea5f7570ee68b466958344bed455c98bc20487223cb9"
539
+ },
540
+ {
541
+ "path": "lib/ibex/normalize/inline_validation.rb",
542
+ "sha256": "f686c817256770c6d707ff2bc82cc06004b2068fa5fec4d4df0fde16e640091d"
543
+ },
544
+ {
545
+ "path": "lib/ibex/normalize/lexer.rb",
546
+ "sha256": "bc98cf4ae5a4a0c7ffd8d08423c2207486d8c553e369c4360a55db023119fe32"
547
+ },
548
+ {
549
+ "path": "lib/ibex/normalize/named_references.rb",
550
+ "sha256": "0dd6625a8e5c4e3137561f3c8516677bd20297956352510391b60ef74982686e"
551
+ },
552
+ {
553
+ "path": "lib/ibex/normalize/nodes.rb",
554
+ "sha256": "098e52fba16dabf57666dcc8719adec72921fbc4bdc4ccfe1a5d5ced5e22b640"
555
+ },
556
+ {
557
+ "path": "lib/ibex/normalize/parameter_ebnf_lowering.rb",
558
+ "sha256": "9bf94cf4ebdba927b0043c7e844b390a58b60157d7e7e2aa42db53896ee53e6a"
559
+ },
560
+ {
561
+ "path": "lib/ibex/normalize/parameter_lowering.rb",
562
+ "sha256": "a69b822214311b9f5ae50efdc70418afa5cf236f1e4ee892b06d0b29ff2ba789"
563
+ },
564
+ {
565
+ "path": "lib/ibex/normalize/parameter_substitution.rb",
566
+ "sha256": "9f990c5760a26d4315b414e92a04b66cf002b9029d0021c17e470054d677b714"
567
+ },
568
+ {
569
+ "path": "lib/ibex/normalize/parameter_validation.rb",
570
+ "sha256": "379cd0f7b781d69e77e711b2f80a7d4b7fcdebbd5b358239e6594c29b872c06c"
571
+ },
572
+ {
573
+ "path": "lib/ibex/normalize/parameters.rb",
574
+ "sha256": "62f01879b1d945b65a8434fd2704d08318af17add6263fb76fd72fd61b421bb9"
575
+ },
576
+ {
577
+ "path": "lib/ibex/normalize/parser_configuration.rb",
578
+ "sha256": "79424dc443d89fc6bb00102d37627fdde11a1d53e06df7ed254968a5d466b589"
579
+ },
580
+ {
581
+ "path": "lib/ibex/normalize/recovery_declarations.rb",
582
+ "sha256": "0d31899c592f9b69ad0e92193698add61c7eaad414bf84e3a778c01c39db19dd"
583
+ },
584
+ {
585
+ "path": "lib/ibex/racc_migration.rb",
586
+ "sha256": "078c3b3ac774531ca152f694c63ca6221d133cd80e29585f163584a5842013c0"
587
+ },
588
+ {
589
+ "path": "lib/ibex/racc_migration/checker.rb",
590
+ "sha256": "316865179c49de72a25e94f23b85b6a6741f6511b17f9198ff706cb024447016"
591
+ },
592
+ {
593
+ "path": "lib/ibex/racc_migration/harness.rb",
594
+ "sha256": "6aa57c8419805f4955e964d4588e4e016321c596987af44d74d31874e4b4e99f"
595
+ },
596
+ {
597
+ "path": "lib/ibex/racc_migration/report.rb",
598
+ "sha256": "ab2aacf6d0a4b34795950fb350d94a578377d7827fdf2820836d9339e88d996f"
599
+ },
600
+ {
601
+ "path": "lib/ibex/runtime.rb",
602
+ "sha256": "ff3acecc17a199bafc92c2bf7c9c8adda7bac9949b2a449920f92b88c7cc5f68"
603
+ },
604
+ {
605
+ "path": "lib/ibex/runtime/ast_data.rb",
606
+ "sha256": "1789723c3100218de1025886e90d3e465df8fc95d243f0f3f31c85dff0c83044"
607
+ },
608
+ {
609
+ "path": "lib/ibex/runtime/cst.rb",
610
+ "sha256": "451f752b9823fb78513d453270fb4562ff4438ba43122a5b99614d6fb364e734"
611
+ },
612
+ {
613
+ "path": "lib/ibex/runtime/cst/annotation.rb",
614
+ "sha256": "61891907ef3524b709fb1b00a31c9aad498804e0d35cc074c8dbc122e538df02"
615
+ },
616
+ {
617
+ "path": "lib/ibex/runtime/cst/cursor.rb",
618
+ "sha256": "3b5ed23c7db29afada8f7292b41169d92c7d016b8ab7c984e1521d8713175649"
619
+ },
620
+ {
621
+ "path": "lib/ibex/runtime/cst/diff.rb",
622
+ "sha256": "a69e9f9eab058f0bd44776aa915d7e5c4a0b09dc57cd51e7776f60650d4bb4ff"
623
+ },
624
+ {
625
+ "path": "lib/ibex/runtime/cst/editing.rb",
626
+ "sha256": "66bc38c8684b223f30a19190aed701af1468fec86d6c9ef9ce6827d5274d9d50"
627
+ },
628
+ {
629
+ "path": "lib/ibex/runtime/cst/editor.rb",
630
+ "sha256": "6b19310409cfd1a3d561b9a22f4f0e76f80b956c799be56d44b5faec180d3f45"
631
+ },
632
+ {
633
+ "path": "lib/ibex/runtime/cst/green/builder.rb",
634
+ "sha256": "d56fcd613d654ebf57908565111877b64d2b5df141fdadbe090e341094a2e042"
635
+ },
636
+ {
637
+ "path": "lib/ibex/runtime/cst/green/cache.rb",
638
+ "sha256": "26223513301890764dc7653d7421a9f6d7eecfdec1316a3710ac4ad8bd943139"
639
+ },
640
+ {
641
+ "path": "lib/ibex/runtime/cst/green/node.rb",
642
+ "sha256": "261d88683b8d7d2e1e674c57afa2f9b114c511b0c0d61b21c00680d22fa68c11"
643
+ },
644
+ {
645
+ "path": "lib/ibex/runtime/cst/green/token.rb",
646
+ "sha256": "442b1c197c6c890b3cf5b8106692effa4b9e01ab977dde5d513b42207f369530"
647
+ },
648
+ {
649
+ "path": "lib/ibex/runtime/cst/green/trivia.rb",
650
+ "sha256": "1d7f33933403b92af3c8c806b0fa3a1f8e9798f14c0d67fd2d675a74049f1b7e"
651
+ },
652
+ {
653
+ "path": "lib/ibex/runtime/cst/incremental/blender.rb",
654
+ "sha256": "1d8ce24e72860c8f6f65b2f60601752db4d206cb38b7d4e753a10309c4b302c9"
655
+ },
656
+ {
657
+ "path": "lib/ibex/runtime/cst/incremental/lexed_syntax.rb",
658
+ "sha256": "c2304108def950fdbfb5ba78c23c05bdc0720587ed66fa43c5b38eb666c5f2d0"
659
+ },
660
+ {
661
+ "path": "lib/ibex/runtime/cst/incremental/parse_memo.rb",
662
+ "sha256": "3c2c2493a7d89901dc60589ce42388e4cb3bd36b5c155a38af4a633cc1796d82"
663
+ },
664
+ {
665
+ "path": "lib/ibex/runtime/cst/incremental/relexer.rb",
666
+ "sha256": "14157088f33f4517cfe91af7de5fc428bd0f114222b31d3c3ea7ff7ce257dfb3"
667
+ },
668
+ {
669
+ "path": "lib/ibex/runtime/cst/incremental/session.rb",
670
+ "sha256": "8092f39b1a57d29d89188ec0189923a78063ec9d05cceff300b7158b87afe806"
671
+ },
672
+ {
673
+ "path": "lib/ibex/runtime/cst/incremental/token_memo.rb",
674
+ "sha256": "ee8d8ece9a2b20261680bdf1d7cefdb2472a28f8ad8d37fab356f869b3e5d933"
675
+ },
676
+ {
677
+ "path": "lib/ibex/runtime/cst/kind.rb",
678
+ "sha256": "8f38c35cb46d829282abe229f06a46837c567dc871bd0e331f5bcb832cb5e5cb"
679
+ },
680
+ {
681
+ "path": "lib/ibex/runtime/cst/parse_result.rb",
682
+ "sha256": "1343782fc10b6597b21f22aebd1abfdf08c77d79c234e3947dd4df6d156e767f"
683
+ },
684
+ {
685
+ "path": "lib/ibex/runtime/cst/rewriter.rb",
686
+ "sha256": "3948178830fc91ab9c1bb54784103dc7bda5c7875882ec83b1c4a3c0c6eac141"
687
+ },
688
+ {
689
+ "path": "lib/ibex/runtime/cst/serialize.rb",
690
+ "sha256": "82d6bf47730641ea0dd896f9af3238a31631f45faf741e92dfa445533c030c3c"
691
+ },
692
+ {
693
+ "path": "lib/ibex/runtime/cst/serialized_tree.rb",
694
+ "sha256": "39031ae83edc03934202a38c7f827dd2b70f3c32d0d7d3ca8042c952a01a1646"
695
+ },
696
+ {
697
+ "path": "lib/ibex/runtime/cst/source_text.rb",
698
+ "sha256": "c20b8800b4ca1ff23412e92bee16ad4b5bbfe8d20f557ceede4bf2a18b5cd909"
699
+ },
700
+ {
701
+ "path": "lib/ibex/runtime/cst/syntax_node.rb",
702
+ "sha256": "5587f00adeb99378beb3f698b09ba1ff4e64fcdc6512822fb6f2fdefd3151649"
703
+ },
704
+ {
705
+ "path": "lib/ibex/runtime/cst/syntax_token.rb",
706
+ "sha256": "b04044b301a451e24cd505efa531dd334a6d018fe6227920f698644f6e4313f6"
707
+ },
708
+ {
709
+ "path": "lib/ibex/runtime/cst/text_edit.rb",
710
+ "sha256": "3628f7061f0d65f4234c08b0e9779b0f41735ff7b51559553844a9b23175bde1"
711
+ },
712
+ {
713
+ "path": "lib/ibex/runtime/cst/typed_node.rb",
714
+ "sha256": "b61beeaef352c66a656c6553d89878bdd40cf9f06d38ddf73c6ce881fda2e474"
715
+ },
716
+ {
717
+ "path": "lib/ibex/runtime/cst/validator.rb",
718
+ "sha256": "236ab49d36d7d32bb425aa21564f958d342929c811a9a0ea286a47590ef00795"
719
+ },
720
+ {
721
+ "path": "lib/ibex/runtime/embedded_source.rb",
722
+ "sha256": "76b933beec10a8202e93cf92eb825226fcb1d085f281645399c83734e06b5fc3"
723
+ },
724
+ {
725
+ "path": "lib/ibex/runtime/event.rb",
726
+ "sha256": "9c6d15fe7a8635c704caaf217b61532d13c9bbcf39eb7f04689d65cc6e2b0bc8"
727
+ },
728
+ {
729
+ "path": "lib/ibex/runtime/event_jsonl_tracer.rb",
730
+ "sha256": "21ca6f0909b1298cad21aad190f229e61c07a199431249d662761c5e2885ba5b"
731
+ },
732
+ {
733
+ "path": "lib/ibex/runtime/event_sanitizer.rb",
734
+ "sha256": "fe24d2075e108c776be52c956b1490ae23c82b57bfb451b3af88b2eb60db692f"
735
+ },
736
+ {
737
+ "path": "lib/ibex/runtime/generated_lexer.rb",
738
+ "sha256": "f2a798d9f45ced3a6dba12a9473b40fb0b904e2f8f3e0875ee88b49a4daf0f55"
739
+ },
740
+ {
741
+ "path": "lib/ibex/runtime/lexer_input.rb",
742
+ "sha256": "ce01d07b9d1ddf0bad6aff025ebf56805762a2124ddee854e54750f9711dd890"
743
+ },
744
+ {
745
+ "path": "lib/ibex/runtime/location_span.rb",
746
+ "sha256": "b3d899acd6b224b33611c545e782ff25f399ca6c65df2ff6102281bd27ee0357"
747
+ },
748
+ {
749
+ "path": "lib/ibex/runtime/observation.rb",
750
+ "sha256": "b521e6e5702a7ae90480febd5ca5b3ab91e2f3cfbf3e0a4ea59e2aa094d3c93d"
751
+ },
752
+ {
753
+ "path": "lib/ibex/runtime/parser.rb",
754
+ "sha256": "61a0b1fedc16cacf6386e2a3eb1d0381e72698c7562f920c9b763b476f5f23dd"
755
+ },
756
+ {
757
+ "path": "lib/ibex/runtime/parser_sync_recovery.rb",
758
+ "sha256": "f8dfce48fc13f49dd90959f04c01d372c02c9046ab73565e050bba3bb3b10363"
759
+ },
760
+ {
761
+ "path": "lib/ibex/runtime/repair.rb",
762
+ "sha256": "ebc613ae0a6e5a11723097c8141748edeeeb5ae9e9051937690cb0823eda9e43"
763
+ },
764
+ {
765
+ "path": "lib/ibex/runtime/repair_priority_queue.rb",
766
+ "sha256": "e3240a816f3877790988455745521883aa50907ea802094fd5b79b69998c400f"
767
+ },
768
+ {
769
+ "path": "lib/ibex/runtime/repair_search.rb",
770
+ "sha256": "c3d4fe2446676f5d43787732dc029835316c1125e28e7f2d87bf8d91b06d381a"
771
+ },
772
+ {
773
+ "path": "lib/ibex/runtime/resource_limits.rb",
774
+ "sha256": "476cc7d6dedbeb9a14bcc612277f38c9ac839148cee593f3a8df445f3175f329"
775
+ },
776
+ {
777
+ "path": "lib/ibex/runtime/syntax_repair.rb",
778
+ "sha256": "70c84b2b76a59f9427638d53af1f3bb5e4e1679f985678edb4add461687af9f7"
779
+ },
780
+ {
781
+ "path": "lib/ibex/runtime/syntax_session.rb",
782
+ "sha256": "75c35d1cfcc68258b1981e7543942597348936e25427c7b4615be89d18cea12e"
783
+ },
784
+ {
785
+ "path": "lib/ibex/runtime/table_format.rb",
786
+ "sha256": "7a792b78f825759d6ff11dbce5a33be679445bdfbb24875cea801c9df70951dd"
787
+ },
788
+ {
789
+ "path": "lib/ibex/samples.rb",
790
+ "sha256": "d65c379dc456aea2facf0e482a7e90aa663f6668412063ea05992780b889cc25"
791
+ },
792
+ {
793
+ "path": "lib/ibex/table_simulation.rb",
794
+ "sha256": "dcf21feb35440673e7eff60d910a158696563c6569a912b213c1ddb27c0bbcf9"
795
+ },
796
+ {
797
+ "path": "lib/ibex/table_simulation/result.rb",
798
+ "sha256": "4df57806b245e76732d9de08f0e2ef9478b511674456bbbe1136a5d853dc7d2b"
799
+ },
800
+ {
801
+ "path": "lib/ibex/table_simulation/simulator.rb",
802
+ "sha256": "7437bbd174569db33e310e7df1af3ba30c74303ba65b1e23554f929104a90f7c"
803
+ },
804
+ {
805
+ "path": "lib/ibex/table_simulation/step.rb",
806
+ "sha256": "1438f959bed880a0f644ffb1d8809590919162ac23d2da90af6d44cd35376837"
807
+ },
808
+ {
809
+ "path": "lib/ibex/table_simulation/text.rb",
810
+ "sha256": "7e8fc3cd122f36a758de28aef001e17f9d2f95b85ebde5e3c547e8e648077d8e"
811
+ },
812
+ {
813
+ "path": "lib/ibex/tables.rb",
814
+ "sha256": "c11c96de7eaa3f996360bd2386c2be66092f8600110d0327d861fc73c1de1a60"
815
+ },
816
+ {
817
+ "path": "lib/ibex/tables/compact.rb",
818
+ "sha256": "92005ede6302ce7d9054774f6c25fa2fdb77fe95b30cc044c63de34104fc3561"
819
+ },
820
+ {
821
+ "path": "lib/ibex/tables/compact_actions.rb",
822
+ "sha256": "6f341f467827ac0976734be03219df903834397cf667015a30b097f9bb5a83bc"
823
+ },
824
+ {
825
+ "path": "lib/ibex/tables/compact_productions.rb",
826
+ "sha256": "69dacb2962b30c11c3cdd53a5391307a3e41712f1dc93b07d4dd3af8dcaca92c"
827
+ },
828
+ {
829
+ "path": "lib/ibex/verify.rb",
830
+ "sha256": "8ded291c2e33e6e763b894f92b66230610763331801c35569c0420581c5f00de"
831
+ },
832
+ {
833
+ "path": "lib/ibex/verify/action_correspondence.rb",
834
+ "sha256": "881a726059f0ce3dd2451111b3bf4a7c82dee5b796d4976af4f7bb2630f17c49"
835
+ },
836
+ {
837
+ "path": "lib/ibex/verify/language_witness.rb",
838
+ "sha256": "0ca62fd96bd0e9976b542fd41bcf9270c4dffd7964db31c8ec6a15a9c6cf10d1"
839
+ },
840
+ {
841
+ "path": "lib/ibex/verify/reference_collection.rb",
842
+ "sha256": "d07e900652c61ddd942380d49edce0a3c811605cd82490c1e0e6db54010746fb"
843
+ },
844
+ {
845
+ "path": "lib/ibex/verify/result.rb",
846
+ "sha256": "bafe8474cfa9a60f810461593833b75c1e840007d8ee83d31c1b3272256e6719"
847
+ },
848
+ {
849
+ "path": "lib/ibex/verify/verifier.rb",
850
+ "sha256": "934ae84111581d2edd4230b06733f259bbf72839042a67c62d20558973af2e2e"
851
+ },
852
+ {
853
+ "path": "lib/ibex/watch.rb",
854
+ "sha256": "818710c2fc444ae7910bf98d3b3c0a2cedd425115936b4f10a659a52cc09ac33"
855
+ },
856
+ {
857
+ "path": "lib/ibex/watch/runner.rb",
858
+ "sha256": "0011eab3c3d059e4f89048e12b934984ecbe031aa1c9d023821cf8807af418e9"
859
+ },
860
+ {
861
+ "path": "lib/ibex/watch/source_snapshot.rb",
862
+ "sha256": "cd4b7f425b4fc7346897644942a43711e23613b07787f9b10deb776912d6e1ef"
863
+ },
864
+ {
865
+ "path": "tool/error_ux_round2.rb",
866
+ "sha256": "5dd51f74c5f356b1fce9081eb7408331c36d5b64ad075fac69962d715b28ffc7"
867
+ },
868
+ {
869
+ "path": "tool/error_ux_round2/capture.rb",
870
+ "sha256": "d3b8daf79d7364b728bec8dc3356643b235b9f5e0b6c0716e6f346a3e524d795"
871
+ },
872
+ {
873
+ "path": "tool/error_ux_round2/case_runner.rb",
874
+ "sha256": "c4f083c00a85cc15ab52ef860d83de760a150c2d5bd4eeecc2ed8d961a214f23"
875
+ },
876
+ {
877
+ "path": "tool/error_ux_round2/implementation_closure.rb",
878
+ "sha256": "60f1fac3f41ea5246809bb6050fb7bf74e442079df6c45d5b2d14fa88b14a1b2"
879
+ },
880
+ {
881
+ "path": "tool/error_ux_round2/policy.rb",
882
+ "sha256": "16f078d4b329c2fedf079eb262e5429c3bb8753b2353d190909ce5f4ce79d94e"
883
+ },
884
+ {
885
+ "path": "tool/error_ux_round2/source_edit.rb",
886
+ "sha256": "3da949a34e99b537688dd41691de8726f1674925587378730ddf0f7eb88c1409"
887
+ }
888
+ ],
889
+ "case_count": 7,
890
+ "deterministic_regeneration": true,
891
+ "r001_normative_snapshot": {
892
+ "path": "test/fixtures/error_ux/json-errors-v1.json",
893
+ "sha256": "bf49b2f8ba5329f1984d6e90e4b170b5811f4c800536fca56eba1f2725189dbf",
894
+ "expected_sha256": "bf49b2f8ba5329f1984d6e90e4b170b5811f4c800536fca56eba1f2725189dbf",
895
+ "status": "unchanged"
896
+ }
897
+ },
898
+ "problem": {
899
+ "statement": "Repository evidence must test diagnostic and repair behavior beyond the ten R001 JSON cases.",
900
+ "required_dimensions": [
901
+ "delimiter-heavy",
902
+ "statement-language",
903
+ "stateful-string-lexer",
904
+ "eof-error",
905
+ "multi-error-continuation",
906
+ "unknown-token",
907
+ "lexer-failure"
908
+ ],
909
+ "excluded_dimensions": [
910
+ {
911
+ "dimension": "indentation-sensitive-language",
912
+ "status": "excluded-unimplemented",
913
+ "reason": "ibex-has-no-indentation-tokenization-contract"
914
+ }
915
+ ]
916
+ },
917
+ "semantics": {
918
+ "expected_tokens": "Parser diagnostics report the exact runtime expected-token set; lexer failures have no parser state.",
919
+ "proposed_edit": "A repository-authored source edit is evaluated separately from the bounded runtime repair plan.",
920
+ "fresh_reparse": "Edits are applied by byte range and parsed by a newly allocated generated parser.",
921
+ "semantic_value_risk": "Syntactic acceptance does not establish that inserted, deleted, or replaced semantic values match user intent."
922
+ },
923
+ "trust_boundary": {
924
+ "execution_trust_label": "executes-application-code",
925
+ "fixture_code": "repository-owned-trusted",
926
+ "generated_code_execution": "enabled-for-listed-fixtures-only",
927
+ "external_code_execution": "forbidden",
928
+ "statement": "The capture executes generated lexer and action code only from the four allowlisted repository fixtures."
929
+ },
930
+ "external_subjective_gate": {
931
+ "status": "HOLD",
932
+ "reason": "no-external-review-records",
933
+ "allowed_labels": [
934
+ "useful",
935
+ "misleading",
936
+ "unsafe",
937
+ "unclear"
938
+ ],
939
+ "records": []
940
+ },
941
+ "limitations": [
942
+ {
943
+ "code": "repository-only",
944
+ "statement": "No external workload or reviewer is represented."
945
+ },
946
+ {
947
+ "code": "single-selected-repair",
948
+ "statement": "Bounded repair reports one selected plan, not every equal-cost edit."
949
+ },
950
+ {
951
+ "code": "acceptance-not-intent",
952
+ "statement": "A successful fresh parse does not prove intended program semantics."
953
+ },
954
+ {
955
+ "code": "no-indentation",
956
+ "statement": "Indentation diagnostics are excluded because no indentation contract exists."
957
+ }
958
+ ],
959
+ "kill_conditions": [
960
+ {
961
+ "code": "fixture-drift",
962
+ "statement": "Fail when a fixture or corpus digest changes without regenerated evidence."
963
+ },
964
+ {
965
+ "code": "coverage-loss",
966
+ "statement": "Fail when a required H003 dimension has no case."
967
+ },
968
+ {
969
+ "code": "r001-mutation",
970
+ "statement": "Fail when the normative R001 snapshot digest changes."
971
+ },
972
+ {
973
+ "code": "review-overclaim",
974
+ "statement": "Fail when HOLD has a review record or a pending case has labels."
975
+ },
976
+ {
977
+ "code": "fresh-reparse-regression",
978
+ "statement": "Fail when a proposed edit no longer produces its committed fresh outcome."
979
+ }
980
+ ],
981
+ "cases": [
982
+ {
983
+ "id": "H003-DELIMITER-01",
984
+ "dimensions": [
985
+ "delimiter-heavy"
986
+ ],
987
+ "grammar": "test/fixtures/error_ux_round2/delimiters.y",
988
+ "input": "outer(inner(a,b),c]",
989
+ "input_sha256": "f2039b19d0256dada39bdc4861df60f81c176348dfbe66d57db9bf06ea204926",
990
+ "observation": {
991
+ "mode": "single-rejection",
992
+ "parse_status": "rejected",
993
+ "diagnostics": [
994
+ {
995
+ "phase": "parser",
996
+ "message": "(h003-delimiters):1:19: unexpected \"]\"; expected '(', ')', ',' (nil)\nouter(inner(a,b),c]\n ^",
997
+ "token": "\"]\"",
998
+ "expected_tokens": {
999
+ "availability": "available",
1000
+ "tokens": [
1001
+ "'('",
1002
+ "')'",
1003
+ "','"
1004
+ ],
1005
+ "reason": null
1006
+ },
1007
+ "state": 5,
1008
+ "location": {
1009
+ "line": 1,
1010
+ "column": 19,
1011
+ "start_byte": 18,
1012
+ "source_line": "outer(inner(a,b),c]",
1013
+ "caret": " ^"
1014
+ }
1015
+ }
1016
+ ]
1017
+ },
1018
+ "bounded_repair": {
1019
+ "status": "selected",
1020
+ "parse_status": "accepted",
1021
+ "plan": {
1022
+ "cost": 2,
1023
+ "configurations": 73,
1024
+ "edits": [
1025
+ {
1026
+ "kind": "delete",
1027
+ "position": 0,
1028
+ "token_id": null,
1029
+ "token_name": "\"]\"",
1030
+ "cost": 1,
1031
+ "token_id_scope": "temporary-external"
1032
+ },
1033
+ {
1034
+ "kind": "insert",
1035
+ "position": 1,
1036
+ "token_id": 8,
1037
+ "token_name": "')'",
1038
+ "cost": 1,
1039
+ "token_id_scope": "grammar"
1040
+ }
1041
+ ]
1042
+ }
1043
+ },
1044
+ "proposed_edit": {
1045
+ "summary": "replace the mismatched closing bracket with a parenthesis",
1046
+ "operations": [
1047
+ {
1048
+ "start_byte": 18,
1049
+ "end_byte": 19,
1050
+ "replacement": ")"
1051
+ }
1052
+ ],
1053
+ "applied_source_sha256": "66a840098bcc1fc9ae297a6d420f064c4b8d131fff6d4007fd2f0887780239af"
1054
+ },
1055
+ "fresh_reparse": {
1056
+ "status": "accepted",
1057
+ "diagnostic_count": 0,
1058
+ "value_class": "Array"
1059
+ },
1060
+ "semantic_value_risk": {
1061
+ "level": "low",
1062
+ "category": "structural-delimiter",
1063
+ "statement": "The edit changes only a nil-valued delimiter token."
1064
+ },
1065
+ "external_review": {
1066
+ "status": "pending",
1067
+ "labels": []
1068
+ },
1069
+ "grammar_sha256": "dba52fd7b54466caab8c7dc29534e1df1ef2673c7c13816e4c15fe33750b5045"
1070
+ },
1071
+ {
1072
+ "id": "H003-STATEMENT-01",
1073
+ "dimensions": [
1074
+ "statement-language"
1075
+ ],
1076
+ "grammar": "test/fixtures/error_ux_round2/statements.y",
1077
+ "input": "answer = ;",
1078
+ "input_sha256": "0eb15eaab4e30f29b570c3a33f6592e23048d802a6062a95208bb03930837174",
1079
+ "observation": {
1080
+ "mode": "single-rejection",
1081
+ "parse_status": "rejected",
1082
+ "diagnostics": [
1083
+ {
1084
+ "phase": "parser",
1085
+ "message": "(h003-statements):1:10: unexpected ';'; expected NUMBER (nil)\nanswer = ;\n ^",
1086
+ "token": "';'",
1087
+ "expected_tokens": {
1088
+ "availability": "available",
1089
+ "tokens": [
1090
+ "NUMBER"
1091
+ ],
1092
+ "reason": null
1093
+ },
1094
+ "state": 8,
1095
+ "location": {
1096
+ "line": 1,
1097
+ "column": 10,
1098
+ "start_byte": 9,
1099
+ "source_line": "answer = ;",
1100
+ "caret": " ^"
1101
+ }
1102
+ }
1103
+ ]
1104
+ },
1105
+ "bounded_repair": {
1106
+ "status": "selected",
1107
+ "parse_status": "accepted",
1108
+ "plan": {
1109
+ "cost": 1,
1110
+ "configurations": 37,
1111
+ "edits": [
1112
+ {
1113
+ "kind": "insert",
1114
+ "position": 0,
1115
+ "token_id": 3,
1116
+ "token_name": "NUMBER",
1117
+ "cost": 1,
1118
+ "token_id_scope": "grammar"
1119
+ }
1120
+ ]
1121
+ }
1122
+ },
1123
+ "proposed_edit": {
1124
+ "summary": "insert an explicit numeric value before the terminator",
1125
+ "operations": [
1126
+ {
1127
+ "start_byte": 9,
1128
+ "end_byte": 9,
1129
+ "replacement": "0"
1130
+ }
1131
+ ],
1132
+ "applied_source_sha256": "11f279e93ac4b68690d617af80227eb97f850aaa143cbb43060064f4b7342183"
1133
+ },
1134
+ "fresh_reparse": {
1135
+ "status": "accepted",
1136
+ "diagnostic_count": 0,
1137
+ "value_class": "Array"
1138
+ },
1139
+ "semantic_value_risk": {
1140
+ "level": "high",
1141
+ "category": "invented-literal",
1142
+ "statement": "The repair invents the numeric semantic value zero and may change program meaning."
1143
+ },
1144
+ "external_review": {
1145
+ "status": "pending",
1146
+ "labels": []
1147
+ },
1148
+ "grammar_sha256": "7dee0cf9174a4fc59746a215b50aedc21643a3f213d056f819ca7eafee1f27f5"
1149
+ },
1150
+ {
1151
+ "id": "H003-STATEFUL-01",
1152
+ "dimensions": [
1153
+ "stateful-string-lexer"
1154
+ ],
1155
+ "grammar": "test/fixtures/error_ux_round2/stateful_strings.y",
1156
+ "input": "\"hello",
1157
+ "input_sha256": "196d3d58bf5c0427d2b094fb9b2c70b277ac1b4b96de1d191de8f1abe90ce149",
1158
+ "observation": {
1159
+ "mode": "single-rejection",
1160
+ "parse_status": "rejected",
1161
+ "diagnostics": [
1162
+ {
1163
+ "phase": "parser",
1164
+ "message": "(h003-stateful-string):1:7: unexpected $eof; expected STRING_END (nil)",
1165
+ "token": "$eof",
1166
+ "expected_tokens": {
1167
+ "availability": "available",
1168
+ "tokens": [
1169
+ "STRING_END"
1170
+ ],
1171
+ "reason": null
1172
+ },
1173
+ "state": 3,
1174
+ "location": {
1175
+ "line": 1,
1176
+ "column": 7,
1177
+ "start_byte": 6,
1178
+ "source_line": "\"hello",
1179
+ "caret": " ^"
1180
+ }
1181
+ }
1182
+ ]
1183
+ },
1184
+ "bounded_repair": {
1185
+ "status": "selected",
1186
+ "parse_status": "accepted",
1187
+ "plan": {
1188
+ "cost": 1,
1189
+ "configurations": 9,
1190
+ "edits": [
1191
+ {
1192
+ "kind": "insert",
1193
+ "position": 0,
1194
+ "token_id": 4,
1195
+ "token_name": "STRING_END",
1196
+ "cost": 1,
1197
+ "token_id_scope": "grammar"
1198
+ }
1199
+ ]
1200
+ }
1201
+ },
1202
+ "proposed_edit": {
1203
+ "summary": "close the string at end of input",
1204
+ "operations": [
1205
+ {
1206
+ "start_byte": 6,
1207
+ "end_byte": 6,
1208
+ "replacement": "\""
1209
+ }
1210
+ ],
1211
+ "applied_source_sha256": "5aa762ae383fbb727af3c7a36d4940a5b8c40a989452d2304fc958ff3f354e7a"
1212
+ },
1213
+ "fresh_reparse": {
1214
+ "status": "accepted",
1215
+ "diagnostic_count": 0,
1216
+ "value_class": "String"
1217
+ },
1218
+ "semantic_value_risk": {
1219
+ "level": "low",
1220
+ "category": "lexer-state-closure",
1221
+ "statement": "The edit closes the active lexer state without inventing string content."
1222
+ },
1223
+ "external_review": {
1224
+ "status": "pending",
1225
+ "labels": []
1226
+ },
1227
+ "grammar_sha256": "65a2f83c108ad5aa10c7d31eeafae9bd8241beac91d6dea40f81256cac5f9438"
1228
+ },
1229
+ {
1230
+ "id": "H003-EOF-01",
1231
+ "dimensions": [
1232
+ "eof-error",
1233
+ "delimiter-heavy"
1234
+ ],
1235
+ "grammar": "test/fixtures/error_ux_round2/delimiters.y",
1236
+ "input": "outer(inner(a,b),c",
1237
+ "input_sha256": "402db8f3f0246976daa0ceabd406ef527179a49b51eccca85c6a3387cde76883",
1238
+ "observation": {
1239
+ "mode": "single-rejection",
1240
+ "parse_status": "rejected",
1241
+ "diagnostics": [
1242
+ {
1243
+ "phase": "parser",
1244
+ "message": "(h003-delimiters):1:19: unexpected $eof; expected '(', ')', ',' (nil)",
1245
+ "token": "$eof",
1246
+ "expected_tokens": {
1247
+ "availability": "available",
1248
+ "tokens": [
1249
+ "'('",
1250
+ "')'",
1251
+ "','"
1252
+ ],
1253
+ "reason": null
1254
+ },
1255
+ "state": 5,
1256
+ "location": {
1257
+ "line": 1,
1258
+ "column": 19,
1259
+ "start_byte": 18,
1260
+ "source_line": "outer(inner(a,b),c",
1261
+ "caret": " ^"
1262
+ }
1263
+ }
1264
+ ]
1265
+ },
1266
+ "bounded_repair": {
1267
+ "status": "selected",
1268
+ "parse_status": "accepted",
1269
+ "plan": {
1270
+ "cost": 1,
1271
+ "configurations": 21,
1272
+ "edits": [
1273
+ {
1274
+ "kind": "insert",
1275
+ "position": 0,
1276
+ "token_id": 8,
1277
+ "token_name": "')'",
1278
+ "cost": 1,
1279
+ "token_id_scope": "grammar"
1280
+ }
1281
+ ]
1282
+ }
1283
+ },
1284
+ "proposed_edit": {
1285
+ "summary": "insert two candidate closing parentheses and let a fresh parse expose over-closure",
1286
+ "operations": [
1287
+ {
1288
+ "start_byte": 18,
1289
+ "end_byte": 18,
1290
+ "replacement": "))"
1291
+ }
1292
+ ],
1293
+ "applied_source_sha256": "251c7dfb6f215074b56a3a638b1c7986debc833228f676015b43db200205261a"
1294
+ },
1295
+ "fresh_reparse": {
1296
+ "status": "progress",
1297
+ "diagnostic_count": 1,
1298
+ "value_class": null,
1299
+ "diagnostic": {
1300
+ "phase": "parser",
1301
+ "message": "(h003-delimiters):1:20: unexpected ')'; expected $eof (nil)\nouter(inner(a,b),c))\n ^",
1302
+ "token": "')'",
1303
+ "expected_tokens": {
1304
+ "availability": "available",
1305
+ "tokens": [
1306
+ "$eof"
1307
+ ],
1308
+ "reason": null
1309
+ },
1310
+ "state": 3,
1311
+ "location": {
1312
+ "line": 1,
1313
+ "column": 20,
1314
+ "start_byte": 19,
1315
+ "source_line": "outer(inner(a,b),c))",
1316
+ "caret": " ^"
1317
+ }
1318
+ }
1319
+ },
1320
+ "semantic_value_risk": {
1321
+ "level": "low",
1322
+ "category": "structural-delimiter",
1323
+ "statement": "The edit adds only nil-valued closing delimiters."
1324
+ },
1325
+ "external_review": {
1326
+ "status": "pending",
1327
+ "labels": []
1328
+ },
1329
+ "grammar_sha256": "dba52fd7b54466caab8c7dc29534e1df1ef2673c7c13816e4c15fe33750b5045"
1330
+ },
1331
+ {
1332
+ "id": "H003-MULTI-01",
1333
+ "dimensions": [
1334
+ "multi-error-continuation",
1335
+ "statement-language"
1336
+ ],
1337
+ "grammar": "test/fixtures/error_ux_round2/statements.y",
1338
+ "input": "first = ; good = 1; second = = 2; third = 3;",
1339
+ "input_sha256": "7a6b365f7aa15f0c579d63197b78908d2ba27be901a263b8029c4f23c12478e5",
1340
+ "observation": {
1341
+ "mode": "synchronized-continuation",
1342
+ "parse_status": "accepted-after-recovery",
1343
+ "diagnostics": [
1344
+ {
1345
+ "phase": "parser",
1346
+ "message": "(h003-statements):1:9: unexpected ';'; expected NUMBER (nil)\nfirst = ; good = 1; second = = 2; third = 3;\n ^",
1347
+ "token": "';'",
1348
+ "expected_tokens": {
1349
+ "availability": "available",
1350
+ "tokens": [
1351
+ "NUMBER"
1352
+ ],
1353
+ "reason": null
1354
+ },
1355
+ "state": 8,
1356
+ "location": {
1357
+ "line": 1,
1358
+ "column": 9,
1359
+ "start_byte": 8,
1360
+ "source_line": "first = ; good = 1; second = = 2; third = 3;",
1361
+ "caret": " ^"
1362
+ }
1363
+ },
1364
+ {
1365
+ "phase": "parser",
1366
+ "message": "(h003-statements):1:30: unexpected '='; expected NUMBER (nil)\nfirst = ; good = 1; second = = 2; third = 3;\n ^",
1367
+ "token": "'='",
1368
+ "expected_tokens": {
1369
+ "availability": "available",
1370
+ "tokens": [
1371
+ "NUMBER"
1372
+ ],
1373
+ "reason": null
1374
+ },
1375
+ "state": 8,
1376
+ "location": {
1377
+ "line": 1,
1378
+ "column": 30,
1379
+ "start_byte": 29,
1380
+ "source_line": "first = ; good = 1; second = = 2; third = 3;",
1381
+ "caret": " ^"
1382
+ }
1383
+ }
1384
+ ]
1385
+ },
1386
+ "bounded_repair": {
1387
+ "status": "selected",
1388
+ "parse_status": "accepted",
1389
+ "plan": {
1390
+ "cost": 1,
1391
+ "configurations": 61,
1392
+ "edits": [
1393
+ {
1394
+ "kind": "insert",
1395
+ "position": 0,
1396
+ "token_id": 3,
1397
+ "token_name": "NUMBER",
1398
+ "cost": 1,
1399
+ "token_id_scope": "grammar"
1400
+ }
1401
+ ]
1402
+ }
1403
+ },
1404
+ "proposed_edit": {
1405
+ "summary": "supply the first value and remove the second extra equals sign",
1406
+ "operations": [
1407
+ {
1408
+ "start_byte": 8,
1409
+ "end_byte": 8,
1410
+ "replacement": "0"
1411
+ },
1412
+ {
1413
+ "start_byte": 29,
1414
+ "end_byte": 31,
1415
+ "replacement": ""
1416
+ }
1417
+ ],
1418
+ "applied_source_sha256": "c94f3324600f050b42f7ea9a1573be95f37d1723a0bbf0aaaf6c3b603ff8946d"
1419
+ },
1420
+ "fresh_reparse": {
1421
+ "status": "accepted",
1422
+ "diagnostic_count": 0,
1423
+ "value_class": "Array"
1424
+ },
1425
+ "semantic_value_risk": {
1426
+ "level": "high",
1427
+ "category": "invented-literal",
1428
+ "statement": "The first edit invents zero while the second deletes syntax; accepting input does not prove intended semantics."
1429
+ },
1430
+ "external_review": {
1431
+ "status": "pending",
1432
+ "labels": []
1433
+ },
1434
+ "grammar_sha256": "7dee0cf9174a4fc59746a215b50aedc21643a3f213d056f819ca7eafee1f27f5"
1435
+ },
1436
+ {
1437
+ "id": "H003-UNKNOWN-01",
1438
+ "dimensions": [
1439
+ "unknown-token"
1440
+ ],
1441
+ "grammar": "test/fixtures/error_ux_round2/unknown_token.y",
1442
+ "input": "ok @",
1443
+ "input_sha256": "f90789301474fba9a4cbfc7ba17120391ca3cb1ba10a61f7e2035922246073ce",
1444
+ "observation": {
1445
+ "mode": "single-rejection",
1446
+ "parse_status": "rejected",
1447
+ "diagnostics": [
1448
+ {
1449
+ "phase": "parser",
1450
+ "message": "(h003-unknown-token):1:4: unexpected :H003_UNKNOWN; expected $eof (\"@\")\nok @\n ^",
1451
+ "token": ":H003_UNKNOWN",
1452
+ "expected_tokens": {
1453
+ "availability": "available",
1454
+ "tokens": [
1455
+ "$eof"
1456
+ ],
1457
+ "reason": null
1458
+ },
1459
+ "state": 1,
1460
+ "location": {
1461
+ "line": 1,
1462
+ "column": 4,
1463
+ "start_byte": 3,
1464
+ "source_line": "ok @",
1465
+ "caret": " ^"
1466
+ }
1467
+ }
1468
+ ]
1469
+ },
1470
+ "bounded_repair": {
1471
+ "status": "selected",
1472
+ "parse_status": "accepted",
1473
+ "plan": {
1474
+ "cost": 1,
1475
+ "configurations": 8,
1476
+ "edits": [
1477
+ {
1478
+ "kind": "delete",
1479
+ "position": 0,
1480
+ "token_id": null,
1481
+ "token_name": ":H003_UNKNOWN",
1482
+ "cost": 1,
1483
+ "token_id_scope": "temporary-external"
1484
+ }
1485
+ ]
1486
+ }
1487
+ },
1488
+ "proposed_edit": {
1489
+ "summary": "delete the unknown external token",
1490
+ "operations": [
1491
+ {
1492
+ "start_byte": 3,
1493
+ "end_byte": 4,
1494
+ "replacement": ""
1495
+ }
1496
+ ],
1497
+ "applied_source_sha256": "bf2a63ad5d209b2be8586a0f249aac31e432115a64d4fb93433d702564be2469"
1498
+ },
1499
+ "fresh_reparse": {
1500
+ "status": "accepted",
1501
+ "diagnostic_count": 0,
1502
+ "value_class": "String"
1503
+ },
1504
+ "semantic_value_risk": {
1505
+ "level": "medium",
1506
+ "category": "deleted-input",
1507
+ "statement": "Deleting an unknown token can discard user intent even when the remaining parse succeeds."
1508
+ },
1509
+ "external_review": {
1510
+ "status": "pending",
1511
+ "labels": []
1512
+ },
1513
+ "grammar_sha256": "aca5bdcba455fab8c924737bb901ea5dd1a247c1325000a3c8979bd29aed83cc"
1514
+ },
1515
+ {
1516
+ "id": "H003-LEXER-01",
1517
+ "dimensions": [
1518
+ "lexer-failure"
1519
+ ],
1520
+ "grammar": "test/fixtures/error_ux_round2/delimiters.y",
1521
+ "input": "outer($)",
1522
+ "input_sha256": "314a7b267053917af6ec13c39c8624c674384991fc20c09a2331528026f4ce4e",
1523
+ "observation": {
1524
+ "mode": "single-rejection",
1525
+ "parse_status": "lexer-failure",
1526
+ "diagnostics": [
1527
+ {
1528
+ "phase": "lexer",
1529
+ "message": "(h003-delimiters):1:7: no lexer rule matches \"$)\" in state INITIAL",
1530
+ "token": "lexer input",
1531
+ "expected_tokens": {
1532
+ "availability": "not-available",
1533
+ "tokens": [],
1534
+ "reason": "lexer-failure-precedes-parser-state"
1535
+ },
1536
+ "state": null,
1537
+ "location": {
1538
+ "line": 1,
1539
+ "column": 7,
1540
+ "start_byte": 6,
1541
+ "source_line": "outer($)",
1542
+ "caret": " ^"
1543
+ }
1544
+ }
1545
+ ]
1546
+ },
1547
+ "bounded_repair": {
1548
+ "status": "not-applicable",
1549
+ "parse_status": "lexer-failure",
1550
+ "plan": null,
1551
+ "reason": "lexer-failure-precedes-parser-repair"
1552
+ },
1553
+ "proposed_edit": {
1554
+ "summary": "replace unmatched lexer input with a valid name",
1555
+ "operations": [
1556
+ {
1557
+ "start_byte": 6,
1558
+ "end_byte": 7,
1559
+ "replacement": "item"
1560
+ }
1561
+ ],
1562
+ "applied_source_sha256": "17675879754586465963dc4ee6dde8631d1ead4252f6d6ca2c0a4d4c60291a74"
1563
+ },
1564
+ "fresh_reparse": {
1565
+ "status": "accepted",
1566
+ "diagnostic_count": 0,
1567
+ "value_class": "Array"
1568
+ },
1569
+ "semantic_value_risk": {
1570
+ "level": "high",
1571
+ "category": "invented-lexeme",
1572
+ "statement": "The edit invents a semantic name and only demonstrates a syntactically accepted alternative."
1573
+ },
1574
+ "external_review": {
1575
+ "status": "pending",
1576
+ "labels": []
1577
+ },
1578
+ "grammar_sha256": "dba52fd7b54466caab8c7dc29534e1df1ef2673c7c13816e4c15fe33750b5045"
1579
+ }
1580
+ ]
1581
+ }