ibex 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 305b0c04e2cc0e6340b5584b9c2f159c48c7525d34d5212eb7969393e1205244
4
- data.tar.gz: 2a2993d999dedb2decf5bcda1356a4b36aba03edc30225c9d7548ace0587c925
3
+ metadata.gz: b7e04c66bb38bd6ad7f25a185d7ed3ff8a031f24f07cd55f4e5391949e85fabf
4
+ data.tar.gz: 16fea4aaa75463b88dd2a1ca533b150544f6995c866d93a43b4af989b520ca8a
5
5
  SHA512:
6
- metadata.gz: 7ed7961859d052b5b205d0a3114c22e527fa627d2ec5c0dcd936e3480f0ba3dc453fccb5306b91bea0caece79f72f71e2670258a481a5a31dd4bdb9c981613fa
7
- data.tar.gz: 420b15173d5da4ea674df973b48c7aaadb0d3f6f9c010654556e6ca4138aed08efd54e55198009e86413a76639d59401b7252725c371881db5289c11d1025137
6
+ metadata.gz: 3897a831f514e3e16cc66651d62e343a524c1539bee893cd741cec360993ea415637a21bac322c92f353bb1652e0652cead1af18fb98d55d469d3ef28cd9d872
7
+ data.tar.gz: 0f5fe9ddb658bc7eea7ea0205d873e5d624a89318150ce974b75f34e79a55caa10d54647775778f003f8027c099c1f148ebf043671939a409c197ce281425780
data/README.md CHANGED
@@ -27,8 +27,8 @@ R001: `HOLD` — [`awaiting_independent_review`](docs/error-ux-review-status-v1.
27
27
  <!-- r001-review-status:end -->
28
28
 
29
29
  <!-- type-stats:start -->
30
- The current whole-library `steep stats` result is 28,836 typed calls and 2,734 untyped calls out of 31,610 (91.2% typed).
31
- The generated signature tree contains 492 explicit `untyped` occurrences across 39 files.
30
+ The current whole-library `steep stats` result is 29,778 typed calls and 2,906 untyped calls out of 32,724 (91.0% typed).
31
+ The generated signature tree contains 506 explicit `untyped` occurrences across 41 files.
32
32
  <!-- type-stats:end -->
33
33
 
34
34
  ## Install
@@ -99,6 +99,7 @@ convenient. Use `--check` in CI to detect stale generated output.
99
99
  | --- | --- | --- |
100
100
  | Compatible mode | Existing racc grammars and conservative migrations | Stable baseline |
101
101
  | Extended mode | EBNF, imports, generated lexers, trees, types, and tooling | Preview; explicit opt-in |
102
+ | `ibex impact` | Grammar propagation, automaton, action metadata, and coverage review | Preview; read-only |
102
103
  | Browser playground and incremental CST sessions | Local analysis and evaluation | Preview/Experimental; bounded |
103
104
 
104
105
  The default frontend remains unchanged unless a grammar opts into
@@ -108,6 +109,10 @@ The default frontend remains unchanged unless a grammar opts into
108
109
  [maturity audit](https://ydah.github.io/ibex/docs/maturity/) before adopting a
109
110
  Preview or Experimental surface.
110
111
 
112
+ Use [`ibex impact`](docs/impact.md) to review where a changed nonterminal can
113
+ propagate. Its reports are deterministic and read-only; nullable boundaries and
114
+ source-only action references remain explicit limitations.
115
+
111
116
  IELR is also explicit: `--algorithm=ielr` uses the conservative partition
112
117
  strategy by default, while `--ielr-strategy=direct` enables the experimental
113
118
  LR(0)-based construction. Direct IELR is profiled and reviewable, but it is not
@@ -14,9 +14,9 @@ this enforced conservative restriction has no scope-bound exclusion registry.
14
14
  The admission decision follows `.idea/ibex-declarative-configuration-policy.md`: grammar-owned settings
15
15
  must pass A1-A8 and every X1-X7 exclusion remains outside grammar syntax.
16
16
 
17
- The static baseline is 187 source call sites and 196 runtime registrations:
18
- 185 ordinary call sites plus 7 `fix` budget variants and 4 `import-bison` budget variants.
19
- Those registrations expose 214 effective spelling records after aliases and
17
+ The static baseline is 199 source call sites and 208 runtime registrations:
18
+ 197 ordinary call sites plus 7 `fix` budget variants and 4 `import-bison` budget variants.
19
+ Those registrations expose 226 effective spelling records after aliases and
20
20
  `--[no-]save-regression` are expanded; optional-argument notation remains one option pattern.
21
21
 
22
22
  Verification: `bundle exec rake quality:configuration_inventory`.
@@ -58,54 +58,54 @@ existing `pragma cst` compatibility declaration; declaration-free grammars retai
58
58
  | `grammar_contract` | 34 |
59
59
  | `grammar_minimum` | 0 |
60
60
  | `project_build_policy` | 11 |
61
- | `invocation_request` | 151 |
61
+ | `invocation_request` | 163 |
62
62
 
63
63
  ## Decisions
64
64
 
65
65
  | Surface | CLI spelling / aliases | Canonical concept | Source / semantic type | Domain / default | Stages | Public-contract effect | Owner | Admission | Override | IR / manifest | Trust | Compatibility | Source |
66
66
  |---|---|---|---|---|---|---|---|---|---|---|---|---|---|
67
- | generate | --check | `invocation.generate.check` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:504` |
68
- | generate | --line-convert-all | `source.line_mapping` | boolean / boolean | true \| false / action sections only | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:490` |
69
- | generate | --superclass=CLASS | `parser.superclass` | string / string | string constrained by command validation / grammar superclass or runtime parser base | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (parser.superclass). | `grammar_contract` | `admitted_a1_a8` | `staged_fixed_compatibility` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `staged_compatibility` | `lib/ibex/cli.rb:501` |
70
- | generate | -C, --check-only | `invocation.generate.check_only` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:505` |
71
- | generate | -D FLAGS | `compatibility.debug_flags` | string / string | string constrained by command validation / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `internal_compatibility` | `lib/ibex/cli.rb:508` |
72
- | generate | -F, --frozen | `build.frozen_strings` | boolean / boolean | true \| false / false | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:487` |
73
- | generate | -P | `compatibility.profiling` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `internal_compatibility` | `lib/ibex/cli.rb:507` |
74
- | generate | -S, --output-status | `report.output_status` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:506` |
75
- | generate | -a, --no-omit-actions | `actions.omit_calls` | boolean / boolean | true \| false / nil; grammar/code-generator action ABI default | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (actions.omit_calls). | `grammar_contract` | `admitted_a1_a8` | `staged_fixed_compatibility` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `staged_compatibility` | `lib/ibex/cli.rb:498` |
76
- | generate | -l, --no-line-convert | `source.line_mapping` | boolean / boolean | true \| false / action sections only | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:494` |
77
- | generate | --copyright | `presentation.copyright` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:518` |
78
- | generate | --help | `presentation.help` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:519` |
79
- | global | --lang=LANG | `presentation.language` | string / enum | en \| ja / normalized IBEX_LANG (en/ja), falling back to en; environment-dependent presentation only | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | Normalize untrusted CLI/environment text to en or ja; environment-dependent presentation is non-reproducible and never grammar state. | `current` | `lib/ibex/cli.rb:513` |
80
- | generate | --runtime-version | `presentation.runtime_version` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:517` |
81
- | generate | --version | `presentation.version` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:516` |
82
- | generate | --dot=FILE | `path.generate.dot` | string / path | caller-supplied filesystem or logical source path / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:460` |
83
- | generate | --html=FILE | `path.generate.html` | string / path | caller-supplied filesystem or logical source path / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:462` |
84
- | generate | --manifest[=FILE] | `companion.manifest` | optional string or boolean / optional_path_or_boolean | false \| true (derived path) \| caller-supplied path / false; derived .ibex.json path when requested without a value | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:457` |
85
- | generate | --mermaid=FILE | `path.generate.mermaid` | string / path | caller-supplied filesystem or logical source path / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:461` |
86
- | generate | --railroad=FILE | `path.generate.railroad` | string / path | caller-supplied filesystem or logical source path / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:463` |
87
- | generate | -E, --embedded | `runtime.embedded` | boolean / boolean | true \| false / false | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:445` |
88
- | generate | -O, --log-file=FILE | `path.generate.log_file` | string / path | caller-supplied filesystem or logical source path / derived .output path when reporting is requested | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:466` |
89
- | generate | -e, --executable [RUBY] | `build.executable` | optional string or boolean / optional_string_or_boolean | false \| true (command default) \| caller-supplied string / false; /usr/bin/env ruby when requested without a value | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:470` |
90
- | generate | -g | `build.debug` | boolean / boolean | true \| false / false | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `obsolete_alias` | `lib/ibex/cli.rb:451` |
91
- | generate | -o, --output-file=FILE | `path.generate.output_file` | string / path | caller-supplied filesystem or logical source path / derived .rb path beside the grammar | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:444` |
92
- | generate | -t, --debug | `build.debug` | boolean / boolean | true \| false / false | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:448` |
93
- | generate | -v, --verbose | `invocation.generate.verbose` | boolean / boolean | true \| false / false; no automaton report | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:454` |
94
- | generate | --algorithm=NAME | `parser.algorithm` | enum / enum | slr \| lalr \| ielr \| lr1 / lalr | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (parser.algorithm). | `grammar_contract` | `admitted_a1_a8` | `fixed` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `current` | `lib/ibex/cli.rb:417` |
95
- | generate | --cst-trivia=POLICY | `cst.trivia` | enum / enum | leading \| balanced \| drop; source alias attach normalizes to leading / leading | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (cst.trivia). | `grammar_contract` | `admitted_a1_a8` | `fixed` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `current` | `lib/ibex/cli.rb:410` |
96
- | generate | --emit=FORMAT | `invocation.generate.emit` | string / enum | ast \| sets \| lexer-ir \| grammar-ir \| automaton-ir \| ruby / ruby | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:400` |
97
- | generate | --entry-isolation | `parser.entries` | boolean / boolean | true \| false / shared | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (parser.entries). | `grammar_contract` | `admitted_a1_a8` | `fixed` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `current` | `lib/ibex/cli.rb:432` |
98
- | generate | --from=FORMAT | `invocation.generate.from` | enum / enum | grammar-ir \| automaton-ir / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | Validate the selected IR as untrusted data; never execute embedded user sections while loading or inventorying it. | `current` | `lib/ibex/cli.rb:403` |
99
- | generate | --ielr-report | `invocation.generate.ielr_report` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:423` |
100
- | generate | --ielr-strategy=NAME | `invocation.generate.ielr_strategy` | enum / enum | direct \| partition / partition | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:420` |
101
- | generate | --mode=MODE | `grammar.mode` | enum / enum | default \| extended / default | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (grammar.mode). | `grammar_contract` | `admitted_a1_a8` | `staged_fixed_compatibility` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `staged_compatibility` | `lib/ibex/cli.rb:406` |
102
- | generate | --remove-unreachable | `invocation.generate.remove_unreachable` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:426` |
103
- | generate | --suggest-ielr | `invocation.generate.suggest_ielr` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:429` |
104
- | generate | --table=FORMAT | `table.representation` | enum / enum | plain \| compact / compact | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:407` |
105
- | generate | --warnings=CATEGORIES | `invocation.warning_policy` | string / set_of_enums | all \| error \| all,error \| none / unset; warnings are neither displayed nor promoted to errors | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x7_diagnostic_suppression` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:435` |
106
- | generate | --watch | `invocation.generate.watch` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:438` |
107
- | generate | --action-source[=FILE] | `companion.action_source` | optional string or boolean / optional_path_or_boolean | false \| true (derived path) \| caller-supplied path / false; derived .actions.rb path when requested without a value | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:480` |
108
- | generate | --rbs[=FILE] | `companion.rbs` | optional string or boolean / optional_path_or_boolean | false \| true (derived path) \| caller-supplied path / false; derived .rbs path when requested without a value | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:477` |
67
+ | generate | --check | `invocation.generate.check` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:509` |
68
+ | generate | --line-convert-all | `source.line_mapping` | boolean / boolean | true \| false / action sections only | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:495` |
69
+ | generate | --superclass=CLASS | `parser.superclass` | string / string | string constrained by command validation / grammar superclass or runtime parser base | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (parser.superclass). | `grammar_contract` | `admitted_a1_a8` | `staged_fixed_compatibility` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `staged_compatibility` | `lib/ibex/cli.rb:506` |
70
+ | generate | -C, --check-only | `invocation.generate.check_only` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:510` |
71
+ | generate | -D FLAGS | `compatibility.debug_flags` | string / string | string constrained by command validation / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `internal_compatibility` | `lib/ibex/cli.rb:513` |
72
+ | generate | -F, --frozen | `build.frozen_strings` | boolean / boolean | true \| false / false | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:492` |
73
+ | generate | -P | `compatibility.profiling` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `internal_compatibility` | `lib/ibex/cli.rb:512` |
74
+ | generate | -S, --output-status | `report.output_status` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:511` |
75
+ | generate | -a, --no-omit-actions | `actions.omit_calls` | boolean / boolean | true \| false / nil; grammar/code-generator action ABI default | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (actions.omit_calls). | `grammar_contract` | `admitted_a1_a8` | `staged_fixed_compatibility` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `staged_compatibility` | `lib/ibex/cli.rb:503` |
76
+ | generate | -l, --no-line-convert | `source.line_mapping` | boolean / boolean | true \| false / action sections only | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:499` |
77
+ | generate | --copyright | `presentation.copyright` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:523` |
78
+ | generate | --help | `presentation.help` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:524` |
79
+ | global | --lang=LANG | `presentation.language` | string / enum | en \| ja / normalized IBEX_LANG (en/ja), falling back to en; environment-dependent presentation only | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | Normalize untrusted CLI/environment text to en or ja; environment-dependent presentation is non-reproducible and never grammar state. | `current` | `lib/ibex/cli.rb:518` |
80
+ | generate | --runtime-version | `presentation.runtime_version` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:522` |
81
+ | generate | --version | `presentation.version` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:521` |
82
+ | generate | --dot=FILE | `path.generate.dot` | string / path | caller-supplied filesystem or logical source path / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:465` |
83
+ | generate | --html=FILE | `path.generate.html` | string / path | caller-supplied filesystem or logical source path / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:467` |
84
+ | generate | --manifest[=FILE] | `companion.manifest` | optional string or boolean / optional_path_or_boolean | false \| true (derived path) \| caller-supplied path / false; derived .ibex.json path when requested without a value | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:462` |
85
+ | generate | --mermaid=FILE | `path.generate.mermaid` | string / path | caller-supplied filesystem or logical source path / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:466` |
86
+ | generate | --railroad=FILE | `path.generate.railroad` | string / path | caller-supplied filesystem or logical source path / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:468` |
87
+ | generate | -E, --embedded | `runtime.embedded` | boolean / boolean | true \| false / false | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:450` |
88
+ | generate | -O, --log-file=FILE | `path.generate.log_file` | string / path | caller-supplied filesystem or logical source path / derived .output path when reporting is requested | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:471` |
89
+ | generate | -e, --executable [RUBY] | `build.executable` | optional string or boolean / optional_string_or_boolean | false \| true (command default) \| caller-supplied string / false; /usr/bin/env ruby when requested without a value | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:475` |
90
+ | generate | -g | `build.debug` | boolean / boolean | true \| false / false | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `obsolete_alias` | `lib/ibex/cli.rb:456` |
91
+ | generate | -o, --output-file=FILE | `path.generate.output_file` | string / path | caller-supplied filesystem or logical source path / derived .rb path beside the grammar | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x2_path_or_destination` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:449` |
92
+ | generate | -t, --debug | `build.debug` | boolean / boolean | true \| false / false | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:453` |
93
+ | generate | -v, --verbose | `invocation.generate.verbose` | boolean / boolean | true \| false / false; no automaton report | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:459` |
94
+ | generate | --algorithm=NAME | `parser.algorithm` | enum / enum | slr \| lalr \| ielr \| lr1 / lalr | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (parser.algorithm). | `grammar_contract` | `admitted_a1_a8` | `fixed` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `current` | `lib/ibex/cli.rb:422` |
95
+ | generate | --cst-trivia=POLICY | `cst.trivia` | enum / enum | leading \| balanced \| drop; source alias attach normalizes to leading / leading | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (cst.trivia). | `grammar_contract` | `admitted_a1_a8` | `fixed` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `current` | `lib/ibex/cli.rb:415` |
96
+ | generate | --emit=FORMAT | `invocation.generate.emit` | string / enum | ast \| sets \| lexer-ir \| grammar-ir \| automaton-ir \| ruby / ruby | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:405` |
97
+ | generate | --entry-isolation | `parser.entries` | boolean / boolean | true \| false / shared | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (parser.entries). | `grammar_contract` | `admitted_a1_a8` | `fixed` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `current` | `lib/ibex/cli.rb:437` |
98
+ | generate | --from=FORMAT | `invocation.generate.from` | enum / enum | grammar-ir \| automaton-ir / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | Validate the selected IR as untrusted data; never execute embedded user sections while loading or inventorying it. | `current` | `lib/ibex/cli.rb:408` |
99
+ | generate | --ielr-report | `invocation.generate.ielr_report` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:428` |
100
+ | generate | --ielr-strategy=NAME | `invocation.generate.ielr_strategy` | enum / enum | direct \| partition / partition | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:425` |
101
+ | generate | --mode=MODE | `grammar.mode` | enum / enum | default \| extended / default | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (grammar.mode). | `grammar_contract` | `admitted_a1_a8` | `staged_fixed_compatibility` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `staged_compatibility` | `lib/ibex/cli.rb:411` |
102
+ | generate | --remove-unreachable | `invocation.generate.remove_unreachable` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:431` |
103
+ | generate | --suggest-ielr | `invocation.generate.suggest_ielr` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:434` |
104
+ | generate | --table=FORMAT | `table.representation` | enum / enum | plain \| compact / compact | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:412` |
105
+ | generate | --warnings=CATEGORIES | `invocation.warning_policy` | string / set_of_enums | all \| error \| all,error \| none / unset; warnings are neither displayed nor promoted to errors | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x7_diagnostic_suppression` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:440` |
106
+ | generate | --watch | `invocation.generate.watch` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:443` |
107
+ | generate | --action-source[=FILE] | `companion.action_source` | optional string or boolean / optional_path_or_boolean | false \| true (derived path) \| caller-supplied path / false; derived .actions.rb path when requested without a value | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:485` |
108
+ | generate | --rbs[=FILE] | `companion.rbs` | optional string or boolean / optional_path_or_boolean | false \| true (derived path) \| caller-supplied path / false; derived .rbs path when requested without a value | code_generation, artifact_publication | Changes artifact representation, packaging, source mapping, or companion output; parser language semantics stay unchanged. | `project_build_policy` | `excluded_x5_packaging_or_deployment` | `project_selection` | `not_persisted` / `current` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli.rb:482` |
109
109
  | check-ambiguity | --algorithm=NAME | `parser.algorithm` | enum / enum | slr \| lalr \| ielr \| lr1 / lalr | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (parser.algorithm). | `grammar_contract` | `admitted_a1_a8` | `analysis_override` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `current` | `lib/ibex/cli/ambiguity.rb:58` |
110
110
  | check-ambiguity | --ambiguity | `invocation.check_ambiguity.ambiguity` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/ambiguity.rb:46` |
111
111
  | check-ambiguity | --entry-isolation | `parser.entries` | boolean / boolean | true \| false / shared | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (parser.entries). | `grammar_contract` | `admitted_a1_a8` | `analysis_override` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `current` | `lib/ibex/cli/ambiguity.rb:61` |
@@ -229,6 +229,18 @@ existing `pragma cst` compatibility declaration; declaration-free grammars retai
229
229
  | test | --mode=MODE | `grammar.mode` | enum / enum | default \| extended / default | frontend, normalization, parser_generation | Changes parser construction, grammar/action ABI, tree ownership, or parser public contract (grammar.mode). | `grammar_contract` | `admitted_a1_a8` | `analysis_override` | `grammar_ir_current` / `current` | Validate statically; do not execute grammar actions or user sections. | `current` | `lib/ibex/cli/grammar_tests.rb:61` |
230
230
  | test | --timeout=SECONDS | `invocation.test.timeout` | integer / integer | integer constrained by command validation / 10 | analysis, report | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x4_caller_budget` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/grammar_tests.rb:73` |
231
231
  | test | -h, --help | `presentation.help` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/grammar_tests.rb:81` |
232
+ | impact | --algorithm=NAME | `invocation.impact.algorithm` | enum / enum | validated command value / parser.algorithm registry default | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:72` |
233
+ | impact | --baseline=PATH | `invocation.impact.baseline` | string / string | string constrained by command validation / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:67` |
234
+ | impact | --coverage=PATH | `invocation.impact.coverage` | string / string | string constrained by command validation / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:66` |
235
+ | impact | --depth=N | `invocation.impact.depth` | integer / integer | non-negative integer / unset | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:57` |
236
+ | impact | --fail-on=LIST | `invocation.impact.fail_on` | string / string | string constrained by command validation / empty | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:69` |
237
+ | impact | --format=FORMAT | `invocation.impact.format` | enum / enum | validated command value / json | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:79` |
238
+ | impact | --help | `invocation.impact.help` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:80` |
239
+ | impact | --kind=LIST | `invocation.impact.kind` | string / string | string constrained by command validation / all | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:62` |
240
+ | impact | --mode=MODE | `invocation.impact.mode` | enum / enum | validated command value / grammar.mode registry default | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:75` |
241
+ | impact | --severity=LEVEL | `invocation.impact.severity` | enum / enum | validated command value / medium | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:63` |
242
+ | impact | --symbol=NAME[,NAME] | `invocation.impact.symbol` | string / string | string constrained by command validation / empty | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:54` |
243
+ | impact | --update-baseline | `invocation.impact.update_baseline` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/impact.rb:68` |
232
244
  | lsp | --help | `presentation.help` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/lsp.rb:29` |
233
245
  | lsp | --stdio | `invocation.lsp.stdio` | boolean / boolean | true \| false / false | invocation | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x1_operation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/lsp.rb:28` |
234
246
  | migrate-check | --format=FORMAT | `report.migrate_check.format` | enum / enum | text \| json / text | analysis, report | Changes only the selected operation, bounded evidence, destination, or presentation for this invocation. | `invocation_request` | `excluded_x3_presentation` | `invocation_only` | `not_persisted` / `not_applicable` | CLI input only; it must not become trusted grammar or execute while inventorying. | `current` | `lib/ibex/cli/racc_migration.rb:73` |
data/docs/development.md CHANGED
@@ -209,6 +209,23 @@ The release remains blocked until the outcome gates in
209
209
  release environment must provide a protected external signing identity and
210
210
  bind its signature or provenance attestation to the printed artifact digest.
211
211
 
212
+ ## GitHub release workflow
213
+
214
+ The tag-triggered [`Release` workflow](../.github/workflows/release.yml)
215
+ validates that the generator and runtime versions match the tag, runs the full
216
+ quality suite, checks reproducible package builds, and attaches both gems plus
217
+ `SHA256SUMS` to the GitHub Release. It does not publish to RubyGems.
218
+
219
+ After committing the intended release version, create and push its tag:
220
+
221
+ ```sh
222
+ git tag -a v0.4.0 -m "Release v0.4.0"
223
+ git push origin v0.4.0
224
+ ```
225
+
226
+ The same workflow can be started manually for an existing tag through
227
+ `workflow_dispatch`.
228
+
212
229
  ## Browser site and API documentation
213
230
 
214
231
  Install the locked browser dependencies and build the same self-hosted site
@@ -7,7 +7,7 @@ blocked. This decision is a feature gate, not a claim that direct IELR has no
7
7
  future value.
8
8
 
9
9
  The final decision date is 2026-08-11. Revision
10
- `d77aeeaf7eb47ad3b7cc70e7ba64f070194164ff` is the repository evidence snapshot
10
+ `05bf8c357cdb58a5f95ca4939a96be16e3d43c30` is the repository evidence snapshot
11
11
  reviewed immediately before this dossier was published; it is not a claim that
12
12
  the dossier itself existed in that revision. The machine record marks the
13
13
  decision `final_no_go`, its basis `repository_evidence`, and its review state
@@ -99,11 +99,11 @@ and verifier implementations by path and SHA-256 at the reviewed revision. It
99
99
  also binds:
100
100
 
101
101
  - H005 capture base revision
102
- `b5933ae49297422546113577072efce59878009f`;
102
+ `acb08c2848843dce52f6c806a5800cd3d3f83fe0`;
103
103
  - H005 bound-path digest
104
- `27b5abf3e1ec20b9b904e46c9f7283ebb6b9a710bb3f0d05a6cad067d9627ac3`;
104
+ `d6325f16b00c6215cd610cacd2d5c1151dc95159d38b35e60f102e279dc49210`;
105
105
  - H005 implementation digest
106
- `6c62c6c1ca7f9ad078405019502d1e7bed8364d1786a4f45755480d372122aac`;
106
+ `b8501d92797e3009bee79fa66ad01ddf56655e337af95d2a630c3f9c66138b3e`;
107
107
  - V001 revision `c7e5cad89ccd00591f3127fdb76a789bbeb202ab`.
108
108
 
109
109
  The quality gate verifies the schema, exact GO/NO-GO inventory, follow-on
@@ -5,7 +5,7 @@
5
5
  "reason": "awaiting-at-least-two-independent-reviews",
6
6
  "evidence": {
7
7
  "path": "docs/error-ux-round2-v1.json",
8
- "sha256": "6b0620a64bed0aec85b8cec58ce7ccc71703d2d28a5a3895373d333b60b300b6"
8
+ "sha256": "3bcdb4aefa63b888c2cbb81a4861e10d67680cee486ef300af13206ec5a42941"
9
9
  },
10
10
  "allowed_labels": [
11
11
  "useful",
@@ -11,7 +11,7 @@
11
11
  "implementation_sources": [
12
12
  {
13
13
  "path": "lib/ibex.rb",
14
- "sha256": "8da8f2b43bd71fbf359aba4d28d23fc4366b9b4a696a35ecb2eea9dbed0d889a"
14
+ "sha256": "d55ef0e0d5a3e4647eee23093055574078e26a99338a64162aa8cdabaa05b129"
15
15
  },
16
16
  {
17
17
  "path": "lib/ibex/analysis.rb",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  {
25
25
  "path": "lib/ibex/analysis/sets.rb",
26
- "sha256": "9fd97106dacd8dea5f342a422c961a6e71a94370bf97bbabf6abe201137a180d"
26
+ "sha256": "23356c106d47467f1d52f4d2bad4e8e29caf8a55b74fb245e6307b8275fc5027"
27
27
  },
28
28
  {
29
29
  "path": "lib/ibex/artifact_set.rb",
@@ -175,7 +175,7 @@
175
175
  },
176
176
  {
177
177
  "path": "lib/ibex/diff.rb",
178
- "sha256": "59bf6a408b344557fcfd4106a082ea9ecf00dc7b788e163f0ff023c587f05355"
178
+ "sha256": "05d5a262f7760eef66392f7392a98912b565c5363555de1bddfd69be353ac0fe"
179
179
  },
180
180
  {
181
181
  "path": "lib/ibex/equiv.rb",
@@ -361,6 +361,42 @@
361
361
  "path": "lib/ibex/grammar_tests.rb",
362
362
  "sha256": "9b14fcf8b027ce005d270976679da3af223a0ed3f555aaa53593a6f3761ab29a"
363
363
  },
364
+ {
365
+ "path": "lib/ibex/impact.rb",
366
+ "sha256": "dfb95aa512bb4ea481b67576f1e7630feaca79ab4985d8cd3be458bd947fb8c6"
367
+ },
368
+ {
369
+ "path": "lib/ibex/impact/action_impact.rb",
370
+ "sha256": "c701e9f097540f71d7a6ea68b8aff6982496f279db517032c4cae049a057058f"
371
+ },
372
+ {
373
+ "path": "lib/ibex/impact/automaton_impact.rb",
374
+ "sha256": "cfe404f6b7130ffd2b276b2a7f63c59ae23e601a828c4c68e352206753785705"
375
+ },
376
+ {
377
+ "path": "lib/ibex/impact/coverage_impact.rb",
378
+ "sha256": "3b971a44b77cc82aa19d07f4da2105c54d500f66126cf68e77bf94cae3b5ba5e"
379
+ },
380
+ {
381
+ "path": "lib/ibex/impact/graph.rb",
382
+ "sha256": "604a9638472e96bab9797287259c88ceaf12630c346b00de04357ba9510a6465"
383
+ },
384
+ {
385
+ "path": "lib/ibex/impact/propagation.rb",
386
+ "sha256": "e8f304a62160a235007ab3b985c677299f43f1010ca7fbc60380e19044ed68a3"
387
+ },
388
+ {
389
+ "path": "lib/ibex/impact/report.rb",
390
+ "sha256": "68f5e40fb39ed9ff7262623214ad1854728cfcb12865e61a08254588deb9d3de"
391
+ },
392
+ {
393
+ "path": "lib/ibex/impact/seeds.rb",
394
+ "sha256": "34ca25eefc11b538ae5e5a7ccf0422eaa68ba057a17f656a003a8510b4cee8b1"
395
+ },
396
+ {
397
+ "path": "lib/ibex/impact/severity.rb",
398
+ "sha256": "35e950839d0300136f754958992f34eeff641d772cf60468a8d5546432cd224b"
399
+ },
364
400
  {
365
401
  "path": "lib/ibex/ir.rb",
366
402
  "sha256": "897997bd1459f1024d06002ddd210c917ec6dc12e9b87855a2c9ba3929fedddb"
data/docs/impact.md ADDED
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: Grammar impact analysis
3
+ description: Review grammar propagation with ibex impact.
4
+ ---
5
+
6
+ # Grammar impact analysis
7
+
8
+ `ibex impact` is a Preview analysis surface for finding where a grammar change
9
+ can propagate. It works on Ibex's normalized Grammar and Automaton IR and does
10
+ not change parser generation or execute semantic actions.
11
+
12
+ ## Two analysis modes
13
+
14
+ Use a symbol seed before editing a grammar:
15
+
16
+ ```sh
17
+ ibex impact --symbol=expression parser.y
18
+ ```
19
+
20
+ This is the potential-impact mode. It follows reference, FIRST, and FOLLOW
21
+ dependencies, reports shortest witnesses, and groups recursive symbols into
22
+ strongly connected components. It is intentionally conservative. A nullable
23
+ boundary is called out because a later nullable change can change the edge set
24
+ itself.
25
+
26
+ Use two inputs after editing:
27
+
28
+ ```sh
29
+ ibex impact old-parser.y new-parser.y
30
+ ```
31
+
32
+ This is the confirmed-impact mode. It compares nullable, FIRST, and FOLLOW
33
+ sets, grammar rules, actions' structured metadata, and symbol metadata such as
34
+ display labels, semantic types, and documentation, plus automaton states and
35
+ conflicts. Metadata-only changes are reported at Low severity. This mode is
36
+ the canonical input for CI review and `--fail-on`.
37
+
38
+ Reports are JSON by default and conform to
39
+ [`impact-v1.schema.json`](../schema/impact-v1.schema.json). `--format=text`
40
+ prints a compact summary. Symbols are sorted by name, states by ID, and
41
+ witnesses are deterministic for identical inputs.
42
+
43
+ ## Useful gates
44
+
45
+ `--kind=reference,first,follow` limits potential propagation, while
46
+ `--depth=N` bounds it. `--severity=medium` is the default display threshold.
47
+ The accepted `--fail-on` values are `new_conflict`, `nullable_change`,
48
+ `first_change`, `follow_change`, `action_arity`, and `unreachable`.
49
+ The report separates unreachable parser states from newly unreachable nonterminals;
50
+ either kind activates `--fail-on=unreachable`.
51
+
52
+ `--baseline=PATH` records known conflict identities independently of numeric
53
+ state IDs. `--update-baseline` writes the current identities. A missing
54
+ baseline is treated as empty, so it is safe to introduce the option before a
55
+ baseline file exists.
56
+
57
+ ## Coverage narrowing
58
+
59
+ Pass one coverage report per test when test-level selection is needed:
60
+
61
+ ```sh
62
+ ibex impact --coverage=tmp/test-expression.json old-parser.y new-parser.y
63
+ ```
64
+
65
+ Reports whose `grammar_digest` does not match the analyzed Automaton IR are
66
+ ignored and produce a warning. A merged report contains aggregate sessions and
67
+ cannot be decomposed back into individual tests; pass separate reports for
68
+ that use case.
69
+
70
+ ## Performance evidence
71
+
72
+ Measure the three gallery grammars in an isolated process when reviewing
73
+ performance changes:
74
+
75
+ ```sh
76
+ for grammar in gallery/*/grammar.y; do
77
+ bundle exec ruby benchmark/impact.rb --grammar "$grammar" --iterations 3 --json
78
+ done
79
+ ```
80
+
81
+ The benchmark reports `Sets` and graph construction time, allocated objects,
82
+ dependency-edge count, and the shallow storage size of the retained dependency
83
+ arrays. Ruby allocator and RSS measurements are process-level observations;
84
+ the dependency-edge count and storage size explain the intentional memory cost
85
+ of retaining impact dependencies.
86
+
87
+ ## Limits and trust boundary
88
+
89
+ The analyzer treats action bodies and user code as opaque source. It uses only
90
+ `Action#named_refs` and `Action#context_length`, so position references such as
91
+ `$1` and `val[0]` are not inspected. A changed RHS with structured references
92
+ can produce a High finding, but source-only references remain a known blind
93
+ spot.
94
+
95
+ Potential mode cannot completely predict changes that cross a nullable
96
+ boundary; use two-version mode when the report warns about one. Impact is a
97
+ syntactic dependency analysis, not a semantic-equivalence proof and not a
98
+ replacement for `ibex equiv` or `ibex check`.
99
+
100
+ The feature is Preview. It is read-only, does not alter the default generation
101
+ path, and does not execute grammar actions or user-code sections.
data/docs/maturity.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [`maturity.yml`](maturity.yml) and the validator-owned commit authorities in
4
4
  [`maturity_authority.rb`](../tool/quality/maturity_authority.rb) form the joint
5
- human-reviewed trust boundary for H001. The registry binds the current 18
5
+ human-reviewed trust boundary for H001. The registry binds the current 19
6
6
  Preview and two Experimental features to the reviewed repository revision,
7
7
  source digests, activation, external-use status, specification-history
8
8
  confidence, issue audit, documentation and tooling gaps, performance and safety
@@ -12,7 +12,7 @@ the other; changing a classification requires reviewing and updating both.
12
12
  ## Result
13
13
 
14
14
  <!-- maturity-summary:start -->
15
- Inventory: **18 Preview, 2 Experimental**. Active new Preview tracks: **1/3** (grammar syntax: **1/1**). Experimental product features: **2/5**.
15
+ Inventory: **19 Preview, 2 Experimental**. Active new Preview tracks: **2/3** (grammar syntax: **1/1**). Experimental product features: **2/5**.
16
16
  Release dependency state: R001 **hold_external**; R002 **pending_exact_revision**; no feature is promoted by this audit.
17
17
 
18
18
  | Stable ID | Feature | Current maturity | Decision | External use | Release gate |
@@ -28,6 +28,7 @@ Release dependency state: R001 **hold_external**; R002 **pending_exact_revision*
28
28
  | `ast-generation` | AST generation | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
29
29
  | `grammar-tests` | grammar tests | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
30
30
  | `documentation-tooling` | documentation tooling | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
31
+ | `impact` | Grammar impact analysis | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
31
32
  | `ielr` | IELR | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
32
33
  | `lsp` | LSP | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
33
34
  | `watch` | watch | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
@@ -31,9 +31,9 @@ parser_tables:
31
31
  cst_readable: [6]
32
32
  fail_before_input: true
33
33
  versions:
34
- generator: "0.3.0"
35
- runtime: "0.3.0"
36
- runtime_dependency: "~> 0.3.0"
34
+ generator: "0.4.0"
35
+ runtime: "0.4.0"
36
+ runtime_dependency: "~> 0.4.0"
37
37
  runtime_paths:
38
38
  - .github/pull_request_template.md
39
39
  - .github/workflows/main.yml
@@ -180,18 +180,21 @@ current reader retain every historical table branch.
180
180
 
181
181
  | Generated artifact | Runtime used | Status |
182
182
  | --- | --- | --- |
183
+ | Ibex 0.4.0 non-embedded output (table v6) | `ibex-runtime` 0.4.0 | supported and covered by packaging/runtime tests |
184
+ | Ibex 0.4.0 non-embedded output | a future version admitted by `~> 0.4.0` | dependency resolution permits it; compatibility is an obligation of that future release, not current execution evidence |
185
+ | Ibex 0.4.0 embedded output | runtime sources copied by Ibex 0.4.0 | self-contained and covered by packaging/runtime tests |
183
186
  | Ibex 0.3.0 non-embedded output (table v6) | `ibex-runtime` 0.3.0 | supported and covered by packaging/runtime tests |
184
187
  | Ibex 0.3.0 non-embedded output | a future version admitted by `~> 0.3.0` | dependency resolution permits it; compatibility is an obligation of that future release, not current execution evidence |
185
188
  | Ibex 0.3.0 embedded output | runtime sources copied by Ibex 0.3.0 | self-contained and covered by packaging/runtime tests |
186
189
  | Ibex 0.2.0 non-embedded output (table v6) | `ibex-runtime` 0.2.0 | supported and covered by packaging/runtime tests |
187
190
  | Ibex 0.2.0 non-embedded output | a future version admitted by `~> 0.2.0` | dependency resolution permits it; compatibility is an obligation of that future release, not current execution evidence |
188
191
  | Ibex 0.2.0 embedded output | runtime sources copied by Ibex 0.2.0 | self-contained and covered by packaging/runtime tests |
189
- | old non-CST or CST table v1-v5 | `ibex-runtime` 0.3.0 | rejected before input; regenerate or pin the matching pre-v1 runtime |
190
- | table v7 or later | `ibex-runtime` 0.3.0 | rejected before input; upgrade the runtime or regenerate to a supported format |
192
+ | old non-CST or CST table v1-v5 | `ibex-runtime` 0.4.0 | rejected before input; regenerate or pin the matching pre-v1 runtime |
193
+ | table v7 or later | `ibex-runtime` 0.4.0 | rejected before input; upgrade the runtime or regenerate to a supported format |
191
194
 
192
- `ibex` 0.3.0 declares `ibex-runtime ~> 0.3.0`; in RubyGems terms that admits
193
- runtime releases from 0.3.0 up to, but not including, 0.4.0. The previous
194
- 0.2.0 line remains a historical compatibility boundary. The table format is
195
+ `ibex` 0.4.0 declares `ibex-runtime ~> 0.4.0`; in RubyGems terms that admits
196
+ runtime releases from 0.4.0 up to, but not including, 0.5.0. The previous
197
+ 0.3.0 and 0.2.0 lines remain historical compatibility boundaries. The table format is
195
198
  still the executable compatibility check. A package requirement alone does not
196
199
  prove that an unpublished runtime can execute a generated parser.
197
200
 
data/docs/stability.md CHANGED
@@ -101,7 +101,7 @@ current maturity. The canonical summary below is generated from that registry
101
101
  and checked against both public documents.
102
102
 
103
103
  <!-- maturity-summary:start -->
104
- Inventory: **18 Preview, 2 Experimental**. Active new Preview tracks: **1/3** (grammar syntax: **1/1**). Experimental product features: **2/5**.
104
+ Inventory: **19 Preview, 2 Experimental**. Active new Preview tracks: **2/3** (grammar syntax: **1/1**). Experimental product features: **2/5**.
105
105
  Release dependency state: R001 **hold_external**; R002 **pending_exact_revision**; no feature is promoted by this audit.
106
106
 
107
107
  | Stable ID | Feature | Current maturity | Decision | External use | Release gate |
@@ -117,6 +117,7 @@ Release dependency state: R001 **hold_external**; R002 **pending_exact_revision*
117
117
  | `ast-generation` | AST generation | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
118
118
  | `grammar-tests` | grammar tests | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
119
119
  | `documentation-tooling` | documentation tooling | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
120
+ | `impact` | Grammar impact analysis | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
120
121
  | `ielr` | IELR | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
121
122
  | `lsp` | LSP | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |
122
123
  | `watch` | watch | Preview | Keep Preview | not demonstrated | Blocked: R001, R002 |