expressir 1.2.10-aarch64-linux → 2.4.29-aarch64-linux
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 +4 -4
- data/.cargo/config.toml +3 -0
- data/.github/scripts/test_installed_gem.rb +34 -0
- data/.github/workflows/codeql.yml +35 -0
- data/.github/workflows/docs.yml +99 -0
- data/.github/workflows/links.yml +100 -0
- data/.github/workflows/native-gems.yml +201 -0
- data/.github/workflows/rake.yml +10 -296
- data/.github/workflows/release.yml +26 -114
- data/.github/workflows/rust-ext.yml +41 -0
- data/.github/workflows/stress.yml +36 -0
- data/.github/workflows/validate_schemas.yml +48 -0
- data/.github/workflows/verify_remarks.yml +33 -0
- data/.gitignore +33 -1
- data/.rubocop.yml +11 -11
- data/.rubocop_todo.yml +297 -0
- data/CHANGELOG.md +159 -0
- data/Gemfile +15 -1
- data/README.adoc +2675 -47
- data/Rakefile +34 -10
- data/TODO.bugs/01-stale-transformer-autoload.md +39 -0
- data/TODO.bugs/02-parser-class-instance-vars.md +36 -0
- data/TODO.bugs/03-builder-mutable-state.md +43 -0
- data/TODO.bugs/04-formatter-public-send-dispatch.md +53 -0
- data/TODO.bugs/05-anonymous-formatter-subclass.md +45 -0
- data/TODO.bugs/06-collection-registry-single-source.md +53 -0
- data/TODO.bugs/07-require-relative-cleanup.md +42 -0
- data/TODO.bugs/08-require-expressir-in-commands.md +34 -0
- data/TODO.bugs/09-parser-split.md +53 -0
- data/TODO.bugs/10-to-s-override.md +42 -0
- data/TODO.bugs/11-parser-class-variables.md +39 -0
- data/TODO.bugs/12-marker-modules-vs-registry.md +64 -0
- data/TODO.bugs/13-string-literal-scanner-limitation.md +52 -0
- data/TODO.bugs/14-model-formatting-leak.md +30 -0
- data/TODO.bugs/15-expression-children-macro.md +27 -0
- data/TODO.bugs/16-pretty-formatter-duplication.md +28 -0
- data/TODO.bugs/17-snake-case-cache-mutable-constant.md +28 -0
- data/TODO.bugs/18-const-get-private-constants.md +30 -0
- data/TODO.bugs/19-format-methods-public.md +22 -0
- data/TODO.bugs/20-coverage-nested-entities-dedup.md +20 -0
- data/TODO.bugs/21-operator-tokens-secondary-dispatch.md +21 -0
- data/TODO.bugs/22-builder-fast-path-wrappers.md +32 -0
- data/TODO.bugs/23-coverage-inverse-maps.md +21 -0
- data/TODO.bugs/24-streaming-builder-complexity.md +19 -0
- data/TODO.bugs/25-debug-puts-in-production.md +21 -0
- data/TODO.bugs/26-generic-entity-children-misplaced.md +21 -0
- data/TODO.bugs/27-package-build-god-method.md +19 -0
- data/TODO.bugs/28-package-god-class.md +30 -0
- data/TODO.bugs/29-validate-ascii-god-class.md +24 -0
- data/TODO.bugs/30-unicode-map-extraction.md +19 -0
- data/TODO.bugs/README.md +43 -0
- data/TODO.max-perf/01-restore-ci-green.md +36 -0
- data/TODO.max-perf/02-streaming-parse-path.md +31 -0
- data/TODO.max-perf/03-cli-parallel-opt-in.md +27 -0
- data/TODO.max-perf/04-benchmark-harness.md +28 -0
- data/TODO.max-perf/05-parallel-fidelity-specs.md +22 -0
- data/TODO.max-perf/06-builder-cpu-audit.md +41 -0
- data/TODO.max-perf/07-upstream-parsanol-roadmap.md +27 -0
- data/TODO.max-perf/08-builder-build-perf.md +45 -0
- data/TODO.max-perf/09-grammar-cold-start.md +25 -0
- data/TODO.max-perf/10-parser-facade-hygiene.md +23 -0
- data/TODO.max-perf/11-ci-green-closeout.md +25 -0
- data/TODO.max-perf/12-require-boot-profile.md +25 -0
- data/TODO.max-perf/13-key-conversion-specs.md +26 -0
- data/TODO.max-perf/14-builder-call-handler-audit.md +28 -0
- data/TODO.parity-ee/00-overview.md +76 -0
- data/TODO.parity-ee/01-annex-g-rule-extraction.md +41 -0
- data/TODO.parity-ee/02-eeng-algorithm-inventory.md +8 -0
- data/TODO.parity-ee/03-eeng-oracle-harness.md +33 -0
- data/TODO.parity-ee/04-shtolo-concatenate.md +44 -0
- data/TODO.parity-ee/05-shtolo-longform-flatten.md +53 -0
- data/TODO.parity-ee/06-interface-scheduling-parity.md +47 -0
- data/TODO.parity-ee/07-semantic-checks-port.md +35 -0
- data/TODO.parity-ee/08-pretty-roundtrip-gate.md +27 -0
- data/TODO.parity-ee/09-smrl-index-and-listing.md +22 -0
- data/TODO.parity-ee/10-interface-dot-graph.md +21 -0
- data/TODO.parity-ee/11-import-eeng-tests.md +79 -0
- data/TODO.parity-ee/12-full-check-catalog.md +67 -0
- data/TODO.parity-ee/13-population-p21.md +54 -0
- data/TODO.parity-ee/14-shtolo-completion.md +44 -0
- data/TODO.parity-ee/15-part28-xml.md +51 -0
- data/TODO.parity-ee/16-compare-patch.md +48 -0
- data/TODO.parity-ee/17-official-tests.md +42 -0
- data/TODO.parity-ee/18-mim-mapping.md +47 -0
- data/TODO.parity-ee/19-architecture.md +97 -0
- data/TODO.parity-ee/parity-matrix.md +108 -0
- data/TODO.refpath-v2/00-overview.md +64 -0
- data/TODO.suma-improvements/00-overview.md +23 -0
- data/TODO.suma-improvements/01-prebuilt-platform-gems.md +33 -0
- data/TODO.suma-improvements/02-suma-e2e.md +39 -0
- data/TODO.suma-improvements/03-item-graph.md +22 -0
- data/TODO.suma-improvements/04-compiled-set-default.md +16 -0
- data/TODO.suma-improvements/05-validation-in-docs.md +17 -0
- data/TODO.suma-improvements/06-memory-remeasure.md +36 -0
- data/TODO.suma-improvements/07-part28-xml.md +15 -0
- data/TODO.suma-improvements/08-windows-gnu-toolchain.md +15 -0
- data/TODO.suma-improvements/09-checker-tranche3.md +13 -0
- data/TODO.suma-improvements/10-expressdoc.md +8 -0
- data/benchmark/srl_benchmark.rb +458 -0
- data/benchmark/srl_native_benchmark.rb +146 -0
- data/benchmark/srl_ruby_benchmark.rb +132 -0
- data/bin/rspec +2 -1
- data/docs/Gemfile +12 -0
- data/docs/_config.yml +141 -0
- data/docs/_guides/changes/changes-format.adoc +778 -0
- data/docs/_guides/changes/importing-eengine.adoc +898 -0
- data/docs/_guides/changes/index.adoc +396 -0
- data/docs/_guides/changes/programmatic-usage.adoc +1038 -0
- data/docs/_guides/changes/validating-changes.adoc +681 -0
- data/docs/_guides/cli/benchmark-performance.adoc +834 -0
- data/docs/_guides/cli/coverage-analysis.adoc +921 -0
- data/docs/_guides/cli/format-schemas.adoc +547 -0
- data/docs/_guides/cli/index.adoc +8 -0
- data/docs/_guides/cli/managing-changes.adoc +927 -0
- data/docs/_guides/cli/validate-ascii.adoc +645 -0
- data/docs/_guides/cli/validate-schemas.adoc +534 -0
- data/docs/_guides/formatter/formatter-architecture.adoc +401 -0
- data/docs/_guides/index.adoc +165 -0
- data/docs/_guides/ler/creating-packages.adoc +664 -0
- data/docs/_guides/ler/index.adoc +305 -0
- data/docs/_guides/ler/loading-packages.adoc +707 -0
- data/docs/_guides/ler/package-formats.adoc +748 -0
- data/docs/_guides/ler/querying-packages.adoc +826 -0
- data/docs/_guides/ler/step-packages.adoc +385 -0
- data/docs/_guides/ler/validating-packages.adoc +750 -0
- data/docs/_guides/liquid/basic-templates.adoc +813 -0
- data/docs/_guides/liquid/documentation-generation.adoc +1042 -0
- data/docs/_guides/liquid/drops-reference.adoc +829 -0
- data/docs/_guides/liquid/filters-and-tags.adoc +912 -0
- data/docs/_guides/liquid/index.adoc +468 -0
- data/docs/_guides/manifests/creating-manifests.adoc +483 -0
- data/docs/_guides/manifests/index.adoc +307 -0
- data/docs/_guides/manifests/resolving-manifests.adoc +557 -0
- data/docs/_guides/manifests/validating-manifests.adoc +713 -0
- data/docs/_guides/ruby-api/formatting-schemas.adoc +605 -0
- data/docs/_guides/ruby-api/index.adoc +257 -0
- data/docs/_guides/ruby-api/parsing-files.adoc +421 -0
- data/docs/_guides/ruby-api/search-engine.adoc +609 -0
- data/docs/_guides/ruby-api/working-with-repository.adoc +577 -0
- data/docs/_pages/data-model.adoc +665 -0
- data/docs/_pages/express-language.adoc +506 -0
- data/docs/_pages/getting-started.adoc +414 -0
- data/docs/_pages/index.adoc +116 -0
- data/docs/_pages/introduction.adoc +256 -0
- data/docs/_pages/ler-packages.adoc +837 -0
- data/docs/_pages/parsers.adoc +709 -0
- data/docs/_pages/schema-manifests.adoc +431 -0
- data/docs/_references/index.adoc +228 -0
- data/docs/_tutorials/creating-ler-package.adoc +735 -0
- data/docs/_tutorials/documentation-coverage.adoc +795 -0
- data/docs/_tutorials/formatting-schemas.adoc +89 -0
- data/docs/_tutorials/index.adoc +231 -0
- data/docs/_tutorials/liquid-templates.adoc +806 -0
- data/docs/_tutorials/parsing-your-first-schema.adoc +522 -0
- data/docs/_tutorials/querying-schemas.adoc +751 -0
- data/docs/_tutorials/working-with-multiple-schemas.adoc +676 -0
- data/docs/index.adoc +242 -0
- data/docs/lychee.toml +90 -0
- data/examples/demo_ler_usage.sh +86 -0
- data/examples/ler/README.md +111 -0
- data/examples/ler/simple_example.ler +0 -0
- data/examples/ler/simple_schema.exp +33 -0
- data/examples/ler_build.rb +75 -0
- data/examples/ler_cli.rb +79 -0
- data/examples/ler_demo_complete.rb +276 -0
- data/examples/ler_query.rb +91 -0
- data/examples/ler_query_examples.rb +305 -0
- data/examples/ler_stats.rb +81 -0
- data/examples/phase3_demo.rb +159 -0
- data/examples/query_demo_simple.rb +131 -0
- data/exe/expressir +6 -17
- data/exe/expressir-format +14 -0
- data/exe/{format-test → expressir-format-test} +8 -7
- data/expressir.gemspec +50 -37
- data/lib/expressir/3.2/expressir_core.so +0 -0
- data/lib/expressir/3.3/expressir_core.so +0 -0
- data/lib/expressir/3.4/expressir_core.so +0 -0
- data/lib/expressir/4.0/expressir_core.so +0 -0
- data/lib/expressir/benchmark.rb +310 -0
- data/lib/expressir/changes/item_change.rb +20 -0
- data/lib/expressir/changes/mapping_change.rb +16 -0
- data/lib/expressir/changes/schema_change.rb +85 -0
- data/lib/expressir/changes/version_change.rb +26 -0
- data/lib/expressir/changes.rb +9 -0
- data/lib/expressir/cli.rb +138 -11
- data/lib/expressir/commands/base.rb +25 -0
- data/lib/expressir/commands/benchmark.rb +59 -0
- data/lib/expressir/commands/benchmark_cache.rb +80 -0
- data/lib/expressir/commands/changes.rb +34 -0
- data/lib/expressir/commands/changes_import_eengine.rb +146 -0
- data/lib/expressir/commands/changes_validate.rb +63 -0
- data/lib/expressir/commands/check.rb +56 -0
- data/lib/expressir/commands/clean.rb +20 -0
- data/lib/expressir/commands/coverage.rb +458 -0
- data/lib/expressir/commands/expand.rb +26 -0
- data/lib/expressir/commands/file_violations.rb +70 -0
- data/lib/expressir/commands/fix.rb +33 -0
- data/lib/expressir/commands/flatten.rb +29 -0
- data/lib/expressir/commands/format.rb +43 -0
- data/lib/expressir/commands/manifest.rb +420 -0
- data/lib/expressir/commands/mapping_validate.rb +68 -0
- data/lib/expressir/commands/non_ascii_character.rb +49 -0
- data/lib/expressir/commands/non_ascii_violation_collection.rb +301 -0
- data/lib/expressir/commands/package.rb +1222 -0
- data/lib/expressir/commands/parity_inputs.rb +160 -0
- data/lib/expressir/commands/validate.rb +106 -0
- data/lib/expressir/commands/validate_ascii.rb +94 -0
- data/lib/expressir/commands/validate_load.rb +91 -0
- data/lib/expressir/commands/version.rb +9 -0
- data/lib/expressir/commands/xsd.rb +23 -0
- data/lib/expressir/commands.rb +30 -0
- data/lib/expressir/config.rb +40 -3
- data/lib/expressir/coverage.rb +510 -0
- data/lib/expressir/eengine/arm_compare_report.rb +23 -0
- data/lib/expressir/eengine/changes_section.rb +16 -0
- data/lib/expressir/eengine/compare_report.rb +69 -0
- data/lib/expressir/eengine/mim_compare_report.rb +23 -0
- data/lib/expressir/eengine/modified_object.rb +21 -0
- data/lib/expressir/eengine.rb +9 -0
- data/lib/expressir/errors.rb +113 -0
- data/lib/expressir/express/adoc_hyperlink_formatter.rb +30 -0
- data/lib/expressir/express/adoc_source_formatter.rb +12 -0
- data/lib/expressir/express/ast_key_converter.rb +114 -0
- data/lib/expressir/express/builder.rb +277 -0
- data/lib/expressir/express/builder_context.rb +22 -0
- data/lib/expressir/express/builder_registry.rb +397 -0
- data/lib/expressir/express/builders/attribute_decl_builder.rb +32 -0
- data/lib/expressir/express/builders/built_in_builder.rb +75 -0
- data/lib/expressir/express/builders/constant_builder.rb +108 -0
- data/lib/expressir/express/builders/declaration_builder.rb +20 -0
- data/lib/expressir/express/builders/derive_clause_builder.rb +14 -0
- data/lib/expressir/express/builders/derived_attr_builder.rb +28 -0
- data/lib/expressir/express/builders/domain_rule_builder.rb +21 -0
- data/lib/expressir/express/builders/entity_decl_builder.rb +116 -0
- data/lib/expressir/express/builders/explicit_attr_builder.rb +49 -0
- data/lib/expressir/express/builders/expression_builder.rb +416 -0
- data/lib/expressir/express/builders/function_decl_builder.rb +86 -0
- data/lib/expressir/express/builders/helpers.rb +148 -0
- data/lib/expressir/express/builders/interface_builder.rb +151 -0
- data/lib/expressir/express/builders/inverse_attr_builder.rb +43 -0
- data/lib/expressir/express/builders/inverse_attr_type_builder.rb +30 -0
- data/lib/expressir/express/builders/inverse_clause_builder.rb +14 -0
- data/lib/expressir/express/builders/literal_builder.rb +93 -0
- data/lib/expressir/express/builders/procedure_decl_builder.rb +82 -0
- data/lib/expressir/express/builders/qualifier_builder.rb +102 -0
- data/lib/expressir/express/builders/reference_builder.rb +18 -0
- data/lib/expressir/express/builders/rule_decl_builder.rb +97 -0
- data/lib/expressir/express/builders/schema_body_decl_builder.rb +18 -0
- data/lib/expressir/express/builders/schema_decl_builder.rb +56 -0
- data/lib/expressir/express/builders/schema_version_builder.rb +34 -0
- data/lib/expressir/express/builders/simple_id_builder.rb +17 -0
- data/lib/expressir/express/builders/statement_builder.rb +243 -0
- data/lib/expressir/express/builders/subtype_constraint_builder.rb +166 -0
- data/lib/expressir/express/builders/syntax_builder.rb +30 -0
- data/lib/expressir/express/builders/type_builder.rb +238 -0
- data/lib/expressir/express/builders/type_decl_builder.rb +26 -0
- data/lib/expressir/express/builders/unique_clause_builder.rb +20 -0
- data/lib/expressir/express/builders/unique_rule_builder.rb +41 -0
- data/lib/expressir/express/builders/where_clause_builder.rb +20 -0
- data/lib/expressir/express/builders.rb +55 -0
- data/lib/expressir/express/cache.rb +43 -18
- data/lib/expressir/express/checker.rb +812 -0
- data/lib/expressir/express/concatenator.rb +79 -0
- data/lib/expressir/express/core.rb +95 -0
- data/lib/expressir/express/error.rb +124 -0
- data/lib/expressir/express/formatter.rb +89 -1548
- data/lib/expressir/express/formatters/data_types_formatter.rb +362 -0
- data/lib/expressir/express/formatters/declarations_formatter.rb +753 -0
- data/lib/expressir/express/formatters/expressions_formatter.rb +180 -0
- data/lib/expressir/express/formatters/literals_formatter.rb +55 -0
- data/lib/expressir/express/formatters/references_formatter.rb +53 -0
- data/lib/expressir/express/formatters/remark_formatter.rb +270 -0
- data/lib/expressir/express/formatters/remark_item_formatter.rb +28 -0
- data/lib/expressir/express/formatters/statements_formatter.rb +272 -0
- data/lib/expressir/express/formatters/supertype_expressions_formatter.rb +54 -0
- data/lib/expressir/express/formatters.rb +22 -0
- data/lib/expressir/express/grammar/parser.rb +712 -0
- data/lib/expressir/express/grammar.rb +11 -0
- data/lib/expressir/express/hyperlink_formatter.rb +4 -5
- data/lib/expressir/express/interface_dot.rb +105 -0
- data/lib/expressir/express/lazy_repository.rb +211 -0
- data/lib/expressir/express/line_map.rb +48 -0
- data/lib/expressir/express/listing.rb +174 -0
- data/lib/expressir/express/model_traversal.rb +42 -0
- data/lib/expressir/express/model_visitor.rb +11 -10
- data/lib/expressir/express/node_position_index.rb +342 -0
- data/lib/expressir/express/parallel_files.rb +229 -0
- data/lib/expressir/express/parser.rb +501 -62
- data/lib/expressir/express/pretty_formatter.rb +586 -0
- data/lib/expressir/express/pretty_gate.rb +61 -0
- data/lib/expressir/express/refs_overlay.rb +47 -0
- data/lib/expressir/express/remark_attacher.rb +1098 -0
- data/lib/expressir/express/remark_overlay.rb +86 -0
- data/lib/expressir/express/remark_scanner.rb +245 -0
- data/lib/expressir/express/resolve_references_model_visitor.rb +7 -9
- data/lib/expressir/express/schema_block_scanner.rb +137 -0
- data/lib/expressir/express/schema_head_formatter.rb +4 -5
- data/lib/expressir/express/schema_plain_source_formatter.rb +11 -0
- data/lib/expressir/express/schema_source_formatter.rb +15 -0
- data/lib/expressir/express/scope_resolver.rb +223 -0
- data/lib/expressir/express/self_schema_reference.rb +126 -0
- data/lib/expressir/express/shtolo.rb +679 -0
- data/lib/expressir/express/smrl_xml.rb +125 -0
- data/lib/expressir/express/source_formatter.rb +15 -0
- data/lib/expressir/express/streaming_builder.rb +435 -0
- data/lib/expressir/express/xsd.rb +259 -0
- data/lib/expressir/express.rb +53 -0
- data/lib/expressir/liquid.rb +1 -0
- data/lib/expressir/manifest/resolver.rb +210 -0
- data/lib/expressir/manifest/validator.rb +192 -0
- data/lib/expressir/manifest.rb +6 -0
- data/lib/expressir/mapping/refpath.rb +857 -0
- data/lib/expressir/mapping.rb +253 -0
- data/lib/expressir/model/cache.rb +10 -9
- data/lib/expressir/model/concerns.rb +42 -0
- data/lib/expressir/model/data_types/aggregate.rb +8 -13
- data/lib/expressir/model/data_types/array.rb +15 -21
- data/lib/expressir/model/data_types/bag.rb +11 -15
- data/lib/expressir/model/data_types/binary.rb +9 -12
- data/lib/expressir/model/data_types/boolean.rb +7 -2
- data/lib/expressir/model/data_types/enumeration.rb +11 -15
- data/lib/expressir/model/data_types/enumeration_item.rb +5 -7
- data/lib/expressir/model/data_types/generic.rb +6 -8
- data/lib/expressir/model/data_types/generic_entity.rb +11 -13
- data/lib/expressir/model/data_types/integer.rb +7 -2
- data/lib/expressir/model/data_types/list.rb +13 -18
- data/lib/expressir/model/data_types/logical.rb +7 -2
- data/lib/expressir/model/data_types/number.rb +7 -2
- data/lib/expressir/model/data_types/real.rb +7 -9
- data/lib/expressir/model/data_types/select.rb +13 -18
- data/lib/expressir/model/data_types/set.rb +11 -15
- data/lib/expressir/model/data_types/string.rb +9 -12
- data/lib/expressir/model/data_types.rb +25 -0
- data/lib/expressir/model/declarations/attribute.rb +19 -28
- data/lib/expressir/model/declarations/constant.rb +10 -16
- data/lib/expressir/model/declarations/derived_attribute.rb +25 -0
- data/lib/expressir/model/declarations/entity.rb +39 -30
- data/lib/expressir/model/declarations/function.rb +32 -40
- data/lib/expressir/model/declarations/informal_proposition_rule.rb +25 -0
- data/lib/expressir/model/declarations/interface.rb +25 -16
- data/lib/expressir/model/declarations/interface_item.rb +9 -11
- data/lib/expressir/model/declarations/interfaced_item.rb +15 -19
- data/lib/expressir/model/declarations/inverse_attribute.rb +25 -0
- data/lib/expressir/model/declarations/parameter.rb +10 -16
- data/lib/expressir/model/declarations/procedure.rb +30 -37
- data/lib/expressir/model/declarations/remark_item.rb +11 -11
- data/lib/expressir/model/declarations/rule.rb +38 -43
- data/lib/expressir/model/declarations/schema.rb +162 -64
- data/lib/expressir/model/declarations/schema_version.rb +8 -11
- data/lib/expressir/model/declarations/schema_version_item.rb +8 -11
- data/lib/expressir/model/declarations/subtype_constraint.rb +14 -22
- data/lib/expressir/model/declarations/type.rb +18 -18
- data/lib/expressir/model/declarations/unique_rule.rb +8 -13
- data/lib/expressir/model/declarations/variable.rb +10 -16
- data/lib/expressir/model/declarations/where_rule.rb +8 -13
- data/lib/expressir/model/declarations.rb +31 -0
- data/lib/expressir/model/dependency_resolver.rb +268 -0
- data/lib/expressir/model/exp_file.rb +42 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +8 -9
- data/lib/expressir/model/expressions/aggregate_initializer_item.rb +10 -12
- data/lib/expressir/model/expressions/binary_expression.rb +42 -36
- data/lib/expressir/model/expressions/entity_constructor.rb +10 -12
- data/lib/expressir/model/expressions/function_call.rb +10 -12
- data/lib/expressir/model/expressions/interval.rb +18 -23
- data/lib/expressir/model/expressions/query_expression.rb +11 -15
- data/lib/expressir/model/expressions/unary_expression.rb +13 -15
- data/lib/expressir/model/expressions.rb +18 -0
- data/lib/expressir/model/identifier.rb +18 -26
- data/lib/expressir/model/indexes/entity_index.rb +103 -0
- data/lib/expressir/model/indexes/item_graph.rb +185 -0
- data/lib/expressir/model/indexes/reference_index.rb +148 -0
- data/lib/expressir/model/indexes/type_index.rb +149 -0
- data/lib/expressir/model/indexes.rb +12 -0
- data/lib/expressir/model/interface_validator.rb +384 -0
- data/lib/expressir/model/literals/binary.rb +7 -9
- data/lib/expressir/model/literals/integer.rb +7 -9
- data/lib/expressir/model/literals/logical.rb +10 -12
- data/lib/expressir/model/literals/real.rb +7 -9
- data/lib/expressir/model/literals/string.rb +10 -12
- data/lib/expressir/model/literals.rb +13 -0
- data/lib/expressir/model/model_element.rb +286 -117
- data/lib/expressir/model/references/attribute_reference.rb +9 -12
- data/lib/expressir/model/references/group_reference.rb +9 -12
- data/lib/expressir/model/references/index_reference.rb +11 -15
- data/lib/expressir/model/references/simple_reference.rb +11 -14
- data/lib/expressir/model/references.rb +12 -0
- data/lib/expressir/model/remark_format.rb +17 -0
- data/lib/expressir/model/remark_info.rb +92 -0
- data/lib/expressir/model/remark_placement.rb +42 -0
- data/lib/expressir/model/repository.rb +472 -12
- data/lib/expressir/model/repository_validator.rb +293 -0
- data/lib/expressir/model/search_engine.rb +551 -0
- data/lib/expressir/model/statements/alias.rb +12 -16
- data/lib/expressir/model/statements/assignment.rb +12 -11
- data/lib/expressir/model/statements/case.rb +31 -14
- data/lib/expressir/model/statements/case_action.rb +9 -11
- data/lib/expressir/model/statements/compound.rb +10 -8
- data/lib/expressir/model/statements/escape.rb +10 -2
- data/lib/expressir/model/statements/if.rb +15 -14
- data/lib/expressir/model/statements/null.rb +10 -2
- data/lib/expressir/model/statements/procedure_call.rb +11 -11
- data/lib/expressir/model/statements/repeat.rb +21 -28
- data/lib/expressir/model/statements/return.rb +9 -8
- data/lib/expressir/model/statements/skip.rb +10 -2
- data/lib/expressir/model/statements.rb +20 -0
- data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +13 -17
- data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +7 -9
- data/lib/expressir/model/supertype_expressions.rb +12 -0
- data/lib/expressir/model.rb +38 -78
- data/lib/expressir/package/builder.rb +231 -0
- data/lib/expressir/package/metadata.rb +79 -0
- data/lib/expressir/package/reader.rb +149 -0
- data/lib/expressir/package.rb +8 -0
- data/lib/expressir/schema_manifest.rb +159 -0
- data/lib/expressir/schema_manifest_entry.rb +15 -0
- data/lib/expressir/version.rb +6 -1
- data/lib/expressir.rb +79 -9
- data/lib/tasks/verify_remarks.rake +16 -0
- data/rakelib/native.rake +24 -0
- data/rakelib/oracle.rake +52 -0
- data/rakelib/verify_remarks.rake +16 -0
- metadata +431 -129
- data/.cross_rubies +0 -20
- data/.gitmodules +0 -6
- data/.yardopts +0 -11
- data/docs/development.md +0 -90
- data/exe/format +0 -18
- data/exe/generate-parser +0 -51
- data/lib/expressir/cli/ui.rb +0 -36
- data/lib/expressir/express/2.7/express_parser.so +0 -0
- data/lib/expressir/express/3.0/express_parser.so +0 -0
- data/lib/expressir/express/3.1/express_parser.so +0 -0
- data/lib/expressir/express/3.2/express_parser.so +0 -0
- data/lib/expressir/express/visitor.rb +0 -2588
- data/lib/expressir/model/data_type.rb +0 -9
- data/lib/expressir/model/declaration.rb +0 -9
- data/lib/expressir/model/expression.rb +0 -9
- data/lib/expressir/model/literal.rb +0 -9
- data/lib/expressir/model/reference.rb +0 -9
- data/lib/expressir/model/statement.rb +0 -9
- data/lib/expressir/model/supertype_expression.rb +0 -9
- data/rakelib/antlr4-native.rake +0 -161
- data/rakelib/cross-ruby.rake +0 -368
- data/spec/acceptance/version_spec.rb +0 -27
- data/spec/expressir/express/cache_spec.rb +0 -89
- data/spec/expressir/express/formatter_spec.rb +0 -173
- data/spec/expressir/express/parser_spec.rb +0 -141
- data/spec/expressir/model/model_element_spec.rb +0 -318
- data/spec/spec_helper.rb +0 -24
- data/spec/support/console_helper.rb +0 -29
- data/spec/syntax/multiple.exp +0 -23
- data/spec/syntax/multiple.yaml +0 -198
- data/spec/syntax/multiple_formatted.exp +0 -71
- data/spec/syntax/multiple_hyperlink_formatted.exp +0 -71
- data/spec/syntax/multiple_schema_head_hyperlink_formatted.exp +0 -13
- data/spec/syntax/remark.exp +0 -193
- data/spec/syntax/remark.yaml +0 -471
- data/spec/syntax/remark_formatted.exp +0 -228
- data/spec/syntax/single.exp +0 -4
- data/spec/syntax/single.yaml +0 -18
- data/spec/syntax/single_formatted.exp +0 -10
- data/spec/syntax/single_formatted.yaml +0 -36
- data/spec/syntax/syntax.exp +0 -333
- data/spec/syntax/syntax.yaml +0 -3509
- data/spec/syntax/syntax_formatted.exp +0 -902
- data/spec/syntax/syntax_hyperlink_formatted.exp +0 -902
- data/spec/syntax/syntax_schema_head_formatted.exp +0 -18
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# eeng ↔ expressir parity matrix (2026-09-21)
|
|
2
|
+
|
|
3
|
+
Reference: `~/src/external/exp-engine-engine` (eengine-5.0.20-Beta1).
|
|
4
|
+
Audited files: kernel/{find-declaration,find-entity,find-type,
|
|
5
|
+
resolve-interface,resolve-object,resolve-ref,references,schema-search,
|
|
6
|
+
interfaces,compute-inheritance,supertypes,derive-attrs,
|
|
7
|
+
inverse-attrs,check,compare,dot-graph}.lisp; plugins/p11/{schedule-*
|
|
8
|
+
,resolve-declaration,cleanup-interface,wo-*}.lisp.
|
|
9
|
+
|
|
10
|
+
## 1. Name resolution ladder (kernel/find-declaration.lisp:125-172)
|
|
11
|
+
|
|
12
|
+
eeng's schema-scope restriction ladder for `find-declaration`:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
nil = :use-from
|
|
16
|
+
:local → own declarations + constants only
|
|
17
|
+
:use-from → :local OR :use-only
|
|
18
|
+
:use-only → walk USE FROM interfaces only, transitively, each in
|
|
19
|
+
:use-from scope (so USE visibility is transitive)
|
|
20
|
+
:all-iface → :local OR all interfaces (USE and REFERENCE), transitively
|
|
21
|
+
cycle guard → *schema-path*: schema already on path ⇒ nil
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Per-kind restrictions (`resolve-interface.lisp:30-66`):
|
|
25
|
+
- USE FROM resolves **type + entity only**.
|
|
26
|
+
- REFERENCE FROM resolves constant/entity/function/procedure/type.
|
|
27
|
+
- Unresolved resource ⇒ hard **error** `"Resource '~A' not found"`.
|
|
28
|
+
|
|
29
|
+
**expressir today:** `ModelElement#find` climbs parent scopes through
|
|
30
|
+
`children_by_id`; `Schema#children` = `interfaced_items + safe_children`
|
|
31
|
+
where `interfaced_items` is **single-hop** (own interfaces only, no
|
|
32
|
+
transitivity), and the resolver never errors on unresolved resources.
|
|
33
|
+
Our `find` also treats REFERENCE and USE identically (no visibility
|
|
34
|
+
tiering), and has no cycle guard (schema interface cycles loop until
|
|
35
|
+
the memo fills — the memo makes this safe in practice, not by design).
|
|
36
|
+
|
|
37
|
+
**Gaps:** (a) transitive USE visibility — item visible through a chain
|
|
38
|
+
of USEs is invisible to our single-hop lookup; (b) USE/REFERENCE
|
|
39
|
+
visibility tiering absent; (c) no unresolved-resource diagnostics;
|
|
40
|
+
(d) no cycle guard by construction. Fix tracked in TODO 06.
|
|
41
|
+
|
|
42
|
+
## 2. Load scheduling (plugins/p11/schedule-*.lisp)
|
|
43
|
+
|
|
44
|
+
eeng: `schedule-load` (two-pass parse), `schedule-interfaces`
|
|
45
|
+
(one method per session kind: double-stepmod keeps trl/ref schema
|
|
46
|
+
sets — schema1/schemata1 = trial, schemata2 = reference), recursing
|
|
47
|
+
per interface symbol → find/load the foreign file via the stepmod
|
|
48
|
+
directory layout, then `schedule-resolve` → `resolve-declaration` per
|
|
49
|
+
schema with `*schema?*` dynamic scope (:trl-schema / :ref-schema).
|
|
50
|
+
|
|
51
|
+
**expressir today:** `from_files` (batch + compiled set), repository
|
|
52
|
+
flat over all files; no trl/ref duality (we never compare two
|
|
53
|
+
specification universes); interface targets located by name at resolve
|
|
54
|
+
time through the repository (single-hop, see §1).
|
|
55
|
+
|
|
56
|
+
**Verdict:** structural difference, not a bug — our repository model
|
|
57
|
+
subsumes their session model for everything except `--compare`
|
|
58
|
+
(two-universe schema comparison, kernel/compare.lisp, unported; TODO
|
|
59
|
+
07 candidate).
|
|
60
|
+
|
|
61
|
+
## 3. Entity computations (kernel/compute-inheritance.lisp,
|
|
62
|
+
derive-attrs.lisp, inverse-attrs.lisp, supertypes.lisp,
|
|
63
|
+
explicit-attrs.lisp)
|
|
64
|
+
|
|
65
|
+
eeng **materializes** inherited attributes onto entities:
|
|
66
|
+
explicit attributes from the full supertype closure, derived attrs,
|
|
67
|
+
inverse attrs, subtype/supertype links — used by `--validate`,
|
|
68
|
+
population checks, and SHTOLO's generalized-attribute handling
|
|
69
|
+
(Annex G.2.6 needs exactly these).
|
|
70
|
+
|
|
71
|
+
**expressir today:** nothing materialized; consumers walk the
|
|
72
|
+
supertype closure themselves (our item graph does this for edges, not
|
|
73
|
+
attributes).
|
|
74
|
+
|
|
75
|
+
**Gaps:** inherited-explicit-attribute flattening, derived/inverse
|
|
76
|
+
closures. Needed by 05 (G.2.6 select synthesis) and 07 (checks).
|
|
77
|
+
TODO 05 scope.
|
|
78
|
+
|
|
79
|
+
## 4. Semantic checks (kernel/check.lisp, 835 lines)
|
|
80
|
+
|
|
81
|
+
check-p11 methods per node type: schema-level (interface resource
|
|
82
|
+
existence, per-kind resolution rules), entity (attribute redeclare
|
|
83
|
+
compatibility, inverse target/entity/inverse-attr existence, derive
|
|
84
|
+
aggregation rules), function/procedure/rule parameters, subtype
|
|
85
|
+
constraints, types. Check severity/notes via check-notes.lisp.
|
|
86
|
+
|
|
87
|
+
**expressir today:** `RepositoryValidator` (interface-level only) +
|
|
88
|
+
`validate ascii` CLI. Gap tracked in TODO 07.
|
|
89
|
+
|
|
90
|
+
## 5. Writers (plugins/p11/wo-*.lisp)
|
|
91
|
+
|
|
92
|
+
| eeng | semantics | expressir |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| wo-pretty | normal encoding, 2-space indent | Formatter clean mode — parity specs landed (bug39/40) |
|
|
95
|
+
| wo-flat | `:flat` encoding, downcased symbols, typeof-option banner | 05 (Annex G — note eeng's flat KEEPS 2003 constructs: partial) |
|
|
96
|
+
| wo-list | declaration listing | 09 |
|
|
97
|
+
| wo-smrl-xml | `<concatenated_express_file_content_list>` index for longform/concatenated modes | 09 |
|
|
98
|
+
| wo-lexp | lisp S-expression dump | not planned (internal debugging) |
|
|
99
|
+
|
|
100
|
+
## 6. Bugs found by this audit
|
|
101
|
+
|
|
102
|
+
- **expressir#373** — Ruby parse path corrupts small USE FROM schemas
|
|
103
|
+
(<~70B, non-monotonic; core path correct). Found by the concatenator
|
|
104
|
+
fixtures; `dependency_resolver_spec` failures on main are the same
|
|
105
|
+
root cause. Fixed by the #371/#370 stack.
|
|
106
|
+
- eeng partial Annex G coverage — documented in
|
|
107
|
+
`spec/fixtures/shtolo/annex-g-rules.md` (eeng is a partial oracle;
|
|
108
|
+
the annex is the contract).
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# 00 — RefPath v2: ELF 5006 conformance
|
|
2
|
+
|
|
3
|
+
Goal: make `Expressir::Mapping::RefPath` a conforming validator for the
|
|
4
|
+
EXPRESS mapping language specification (ELF 5006:2025,
|
|
5
|
+
`~/src/expresslang/docs/sources/express-mapping/`), so that the WG12
|
|
6
|
+
validation of annotated EXPRESS links (TRThurman PDES proposal,
|
|
7
|
+
expressir 2.4.20+ capability, AP 242 ed5 DIS December 2026) finds
|
|
8
|
+
expressir ready at every reference position.
|
|
9
|
+
|
|
10
|
+
## Gap matrix (ELF 5006 §8 vs current RefPath)
|
|
11
|
+
|
|
12
|
+
| §8 requirement | status |
|
|
13
|
+
|---|---|
|
|
14
|
+
| entity existence, case-insensitive | done |
|
|
15
|
+
| `<=` / `=>` subtype/supertype, direct or transitive | done |
|
|
16
|
+
| attribute existence for `->` / `<-` (inherited attrs) | done |
|
|
17
|
+
| forward/inverse TYPE compatibility (attr type references target; SELECT membership) | v2 |
|
|
18
|
+
| navigation continuity (running path context) | v2 |
|
|
19
|
+
| constraint: entity in path context; attribute exists; not DERIVED/INVERSE | v2 |
|
|
20
|
+
| constraint value typing (STRING/INTEGER/REAL/NUMBER/BOOLEAN/LOGICAL/ENUMERATION/SELECT table) | v2 |
|
|
21
|
+
| start entity = ARM entity (relaxable for attribute mappings); end entity = MIM/aimelt | v2 |
|
|
22
|
+
| `*>` / `<*` select extension semantics | v2 |
|
|
23
|
+
| `!{...}` negation, `<...>` required path, `||...||` marker, `*...*` tree | v2 (tokenize + semantics) |
|
|
24
|
+
| collect-all-errors | done |
|
|
25
|
+
| structured output (text/JSON/YAML), per-path VALID/INVALID | v2 |
|
|
26
|
+
| case-mismatch warnings (optional) | v2 optional |
|
|
27
|
+
|
|
28
|
+
## Mapping-model gaps (ae-level fields in the wg12-step corpus)
|
|
29
|
+
|
|
30
|
+
587 module mapping files; keys beyond the current model:
|
|
31
|
+
|
|
32
|
+
- `rules` — 159 ae entries carry a rules list (a reference position in
|
|
33
|
+
the PDES proposal: "the rules list").
|
|
34
|
+
- `alt_map` — 74 ae entries carry an alternative map ("an alternative
|
|
35
|
+
map" reference position).
|
|
36
|
+
|
|
37
|
+
Both must be modeled with lutaml-model attributes (never hand-rolled
|
|
38
|
+
parsing) and their link/reference positions validated like ae/sc.
|
|
39
|
+
|
|
40
|
+
## Validation semantics (per §8 + §5/§6)
|
|
41
|
+
|
|
42
|
+
- Running context: the entity a path is "at". `<=`/`=>` move to the
|
|
43
|
+
right-hand entity; `a.attr -> b` requires attr on the current entity
|
|
44
|
+
whose type references b (supertypes and SELECT options count), moves
|
|
45
|
+
to b; `b <- a.attr` same checks, moves to a; `[i]`/`[n]` keep the
|
|
46
|
+
element type as context; a bare name restates or continues the
|
|
47
|
+
context (§6 chaining).
|
|
48
|
+
- Constraints `{e ... e.attr = v}`: e equals the current context entity
|
|
49
|
+
(§8: "at or before the constraint location"); attr exists on e and is
|
|
50
|
+
not DERIVED/INVERSE; v typed per the §8 table (STRING single-quoted,
|
|
51
|
+
INTEGER/REAL/NUMBER unquoted, BOOLEAN TRUE/FALSE, LOGICAL +UNKNOWN,
|
|
52
|
+
ENUMERATION item of the attribute's type, SELECT option match).
|
|
53
|
+
`!{...}` inverts the finding.
|
|
54
|
+
- Start entity: compatible with the ae `entity` (relaxed for aa-level
|
|
55
|
+
paths). End entity: a MIM-declared entity (cross-check `aimelt`).
|
|
56
|
+
|
|
57
|
+
## Test oracle
|
|
58
|
+
|
|
59
|
+
- `spec/expressir/mapping/refpath_spec.rb` — extend with one example
|
|
60
|
+
per §8 rule (firing + clean negative).
|
|
61
|
+
- Corpus: all 587 module mapping.yaml files; the suma MappingDrift
|
|
62
|
+
baseline (1541 entries) is the pre-v2 reference; v2 must not add
|
|
63
|
+
errors on paths the corpus proves valid, and must explain every new
|
|
64
|
+
error by an ELF 5006 rule.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Suma improvements — integration + expressir roadmap
|
|
2
|
+
|
|
3
|
+
The metanorma ↔ expressir chain via suma: ISO 10303 SMRL schemas → expressir
|
|
4
|
+
parse (compiled set EXSCS1) → LazyRepository + Liquid drops
|
|
5
|
+
(metanorma-plugin-lutaml) → metanorma-iso schema documents. The chain is
|
|
6
|
+
proven piecewise (1307 schemas, 0 failures, warm start 7.8s, live xrefs in
|
|
7
|
+
rendered XML); the items below close the last mile and deepen expressir.
|
|
8
|
+
|
|
9
|
+
| # | item | status |
|
|
10
|
+
|---|------|--------|
|
|
11
|
+
| 01 | prebuilt platform gems (oxidize-rb cross-gem, parsanol pattern) | in flight |
|
|
12
|
+
| 02 | suma full-document E2E on current stack | pending |
|
|
13
|
+
| 03 | ItemGraph — cross-schema subtype/interface graph API | pending |
|
|
14
|
+
| 04 | compiled-set + lazy path as suma default build | pending |
|
|
15
|
+
| 05 | corpus validation surfaced in suma builds | pending |
|
|
16
|
+
| 06 | memory/perf re-measure with binding-by-default | pending |
|
|
17
|
+
| 07 | #276 Part 28 XML — select mapping v2 | pending |
|
|
18
|
+
| 08 | windows gnu toolchain for in-place ext builds | superseded by 01 for CI; kept for local dev |
|
|
19
|
+
| 09 | checker tranche 3 (INVERSE, SELF\ qualifiers) | pending |
|
|
20
|
+
| 10 | #91 EXPRESSdoc (upstream-gated) | parked |
|
|
21
|
+
|
|
22
|
+
Evidence trail: #88/#461 (refpath validation), #462/#467 (ABSTRACT body
|
|
23
|
+
form), v2.4.21–v2.4.24 (binding by default), plugin 0.7.53 + #305/#306.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 01 — Prebuilt platform gems
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
`gem install expressir` compiles nothing on machines with a prebuilt
|
|
5
|
+
platform gem: the binding binary ships inside per-platform gems
|
|
6
|
+
(`expressir-<ver>-arm64-darwin` etc.), following the parsanol-ruby
|
|
7
|
+
pattern (oxidize-rb cross-gem + RbSys::ExtensionTask).
|
|
8
|
+
|
|
9
|
+
## Pattern (from ~/src/parsanol/parsanol-ruby)
|
|
10
|
+
- `oxidize-rb/actions/fetch-ci-data@v1` computes supported platforms
|
|
11
|
+
- `oxidize-rb/actions/cross-gem@v1` matrix builds per-platform gems in
|
|
12
|
+
rake-compiler-dock containers (coherent gnu toolchain per target —
|
|
13
|
+
this is what fixes windows)
|
|
14
|
+
- per-platform smoke jobs on REAL runners installing the gem and running
|
|
15
|
+
a smoke script (NATIVE true + parse)
|
|
16
|
+
- source gem still builds via the gemspec (extensions stay declared);
|
|
17
|
+
rubygems prefers a matching platform gem automatically
|
|
18
|
+
|
|
19
|
+
## expressir implementation
|
|
20
|
+
- `rakelib/native.rake`: `RbSys::ExtensionTask.new("expressir_core")`,
|
|
21
|
+
`ext.lib_dir = "lib/expressir"`, `cross_compiling` callback stages
|
|
22
|
+
`expressir_core.{so,dylib,dll}` into `lib/expressir/` (loads via the
|
|
23
|
+
existing first `require "expressir/expressir_core"` in core.rb)
|
|
24
|
+
- extconf: mingw skip becomes bypassable (`EXPRESSIR_CORE_FORCE=1` set in
|
|
25
|
+
the cross-gem container, where cargo gnu matches the mingw-ucrt ruby)
|
|
26
|
+
- `.github/workflows/native-gems.yml`: ci-data + cross-gem matrix +
|
|
27
|
+
smoke jobs + source gem + `gem push` on tag (RUBYGEMS_API_KEY secret)
|
|
28
|
+
- `.github/scripts/test_installed_gem.rb`: smoke script
|
|
29
|
+
|
|
30
|
+
## Acceptance
|
|
31
|
+
- workflow green across platforms with smoke jobs passing
|
|
32
|
+
- a platform gem installs cargo-less and reports NATIVE true
|
|
33
|
+
- source-gem install path unchanged (2.4.21 behavior)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 02 — Suma full-document E2E on the current stack
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
One clean E2E run of an actual suma document build with expressir 2.4.24 +
|
|
5
|
+
metanorma-plugin-lutaml 0.7.53 + current metanorma gems, rendering a real
|
|
6
|
+
ISO 10303 module document to XML.
|
|
7
|
+
|
|
8
|
+
## Why now
|
|
9
|
+
The earlier full-render was blocked by the metanorma-document/relaton
|
|
10
|
+
0.2.x skew; that ecosystem has moved (metanorma-document 0.5.1, relaton
|
|
11
|
+
3.0 pre-alpha). The expressir side is proven current.
|
|
12
|
+
|
|
13
|
+
## Steps
|
|
14
|
+
- locate the suma build entry (~/src/mn/iso-10303 suma config or the
|
|
15
|
+
metanorma-iso document that renders schema pages)
|
|
16
|
+
- bundle with current metanorma; render one module doc end to end
|
|
17
|
+
- capture XML diffs vs the last good render; if the relaton skew
|
|
18
|
+
persists, name the exact unresolved constraint
|
|
19
|
+
|
|
20
|
+
## Acceptance
|
|
21
|
+
- a rendered module document, or a one-line statement of the precise
|
|
22
|
+
upstream blocker with the failing constraint
|
|
23
|
+
|
|
24
|
+
## Result: DONE (2026-09-27)
|
|
25
|
+
|
|
26
|
+
The upstream blocker has cleared. On the iso-10303 ladder (user's
|
|
27
|
+
Gemfile WIP + suma from path + relaton prereleases with the rubyzip-3
|
|
28
|
+
fix now on rubygems — the fix/rubyzip-3 git pins were dropped as
|
|
29
|
+
obsolete):
|
|
30
|
+
|
|
31
|
+
bundle exec suma build srl-smol.yml # one-part SMOL collection
|
|
32
|
+
# => Compiling schema collection... Compiling complete collection...
|
|
33
|
+
# => SMOL-EXIT=0
|
|
34
|
+
|
|
35
|
+
Artifacts: 286 files in _site/ — real ISO document XML (flavor iso,
|
|
36
|
+
schema content present), schema-doc pages, presentation XML. The stale
|
|
37
|
+
sums pin was the rubygems suma 0.1.11 (expressir ~> 2.1, metanorma-cli
|
|
38
|
+
0.0.3 → broken 2019 stack); suma from source (metanorma ~> 2.3 line)
|
|
39
|
+
resolves cleanly.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# 03 — ItemGraph
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
Cross-schema graph API over a parsed repository: subtype edges, interface
|
|
5
|
+
(USE FROM/REFERENCE FROM) edges, transitive queries — feeding suma doc
|
|
6
|
+
generation (hyperlink coverage, "used by" sections, dependency diagrams).
|
|
7
|
+
|
|
8
|
+
## Evidence
|
|
9
|
+
SMRL full-set load proved the data: 37.7k subtype edges, 5.5k interface
|
|
10
|
+
edges over 1307 schemas (TODO.memory SMRL notes). The class is the
|
|
11
|
+
documented remaining gap.
|
|
12
|
+
|
|
13
|
+
## Shape
|
|
14
|
+
- `Expressir::Model::ItemGraph` built from a Repository (or a
|
|
15
|
+
LazyRepository hydrated once)
|
|
16
|
+
- `subtypes(id)`, `supertypes(id)`, `used_by(id)`, `uses(id)`,
|
|
17
|
+
`transitive_subtypes(id)` — downcased-id keyed, cycle-safe
|
|
18
|
+
- built once per repository; O(V+E)
|
|
19
|
+
|
|
20
|
+
## Acceptance
|
|
21
|
+
- specs over a multi-schema fixture (diamond subtyping, mutual USE FROM)
|
|
22
|
+
- SMRL smoke: edge counts match the recorded 37.7k/5.5k within tolerance
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 04 — Compiled-set + lazy path as the suma default build
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
suma builds parse the SMRL once into an EXSCS1 artifact and all document
|
|
5
|
+
renders hydrate per schema from it (warm start 7.8s vs 12s cold), instead
|
|
6
|
+
of eager-parsing on every build.
|
|
7
|
+
|
|
8
|
+
## Steps
|
|
9
|
+
- locate the suma/rake build entry that calls Parser.from_files
|
|
10
|
+
- switch to `Parser.from_files(files, compiled_set:)` then
|
|
11
|
+
`LazyRepository.new(set)`
|
|
12
|
+
- keep an escape hatch (env) for debugging with eager parse
|
|
13
|
+
|
|
14
|
+
## Acceptance
|
|
15
|
+
- a suma build log showing one artifact build + per-page hydration
|
|
16
|
+
- rendered output byte-identical to the eager path
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 05 — Corpus validation surfaced in suma builds
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
The expressir validation layers (mapping_validate incl. refpath
|
|
5
|
+
resolution — which found 2 genuine corpus drifts in a 60-module sweep)
|
|
6
|
+
run as part of suma builds, reporting per-module drift in the build log
|
|
7
|
+
(and optionally in published output).
|
|
8
|
+
|
|
9
|
+
## Steps
|
|
10
|
+
- wire `expressir mapping_validate` over each module's mapping.yaml in
|
|
11
|
+
the suma build loop
|
|
12
|
+
- aggregate a drift report artifact; non-zero exit only on NEW drift vs
|
|
13
|
+
a committed baseline file
|
|
14
|
+
|
|
15
|
+
## Acceptance
|
|
16
|
+
- baseline for the 2 known drifts; a build with a synthetic new drift
|
|
17
|
+
fails with the module/location in the message
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# 06 — Memory/perf re-measure with binding-by-default
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
The recorded profile ("50x memory ratio not achieved", pure-Ruby parse
|
|
5
|
+
dominating) predates binding-by-default. Consumers now get the Rust
|
|
6
|
+
parse path automatically; re-measure and refresh the story.
|
|
7
|
+
|
|
8
|
+
## Steps
|
|
9
|
+
- rerun the memory harness (TODO.memory methodology) with
|
|
10
|
+
NATIVE_AVAILABLE true on the same fixtures
|
|
11
|
+
- record ratio vs the 50x target; note remaining hot spots
|
|
12
|
+
- update TODO.memory notes + the perf memory file
|
|
13
|
+
|
|
14
|
+
## Acceptance
|
|
15
|
+
- fresh numbers committed alongside the old ones, with the parse
|
|
16
|
+
backend identified per measurement
|
|
17
|
+
|
|
18
|
+
## Results (2026-09-27, ruby 3.4.8, 227KB synthetic / 4000 entities)
|
|
19
|
+
|
|
20
|
+
| path | parse time | RSS delta | after GC |
|
|
21
|
+
|------|-----------|-----------|----------|
|
|
22
|
+
| Rust binding (NATIVE_AVAILABLE) | 7.7s | 348 MB | 387 MB |
|
|
23
|
+
| pure-Ruby (use_native: false) | 7.5s | 307 MB | 353 MB |
|
|
24
|
+
|
|
25
|
+
Both paths hydrate the full lutaml-model object tree, which dominates
|
|
26
|
+
the delta — the native parse itself is not the differentiator at this
|
|
27
|
+
size (arena overhead is offset by wire-hash materialization). The
|
|
28
|
+
binding's memory advantage in the field comes from the compiled-set
|
|
29
|
+
path (hydrate per file / warm start 7.8s), not from a lower per-parse
|
|
30
|
+
floor. Ratio ~1.5 MB/KB of source on both paths — consistent with the
|
|
31
|
+
older "~600x for large files" observation: the object MODEL is the
|
|
32
|
+
cost driver, which is exactly what M2 laziness addresses.
|
|
33
|
+
|
|
34
|
+
Old "50x memory ratio target" concern: RETIRED as the wrong metric for
|
|
35
|
+
the binding; per-page hydration (LazyRepository) is the delivered
|
|
36
|
+
mechanism for bounded memory at render time.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 07 — Part 28 XML: select mapping v2 (#276)
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
Full ISO 10303-28 EXPRESS-to-XML beyond the v1 skeleton
|
|
5
|
+
(lib/expressir/express/xsd.rb): proper SELECT mapping (currently
|
|
6
|
+
xs:anyType), aggregate/optional fidelity, schema-level structure.
|
|
7
|
+
|
|
8
|
+
## Steps
|
|
9
|
+
- ISO 10303-28 mapping rules for SELECT types (union/member semantics)
|
|
10
|
+
- apply on top of xsd.rb's element/complexType generation
|
|
11
|
+
- validate generated XSDs against the ISO 10303-28 conformance examples
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
- a select-typed attribute renders per the standard (not xs:anyType)
|
|
15
|
+
- the v1 examples still generate unchanged except where v2 improves them
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 08 — Windows gnu toolchain for in-place ext builds
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
Local windows source installs and windows CI in-place builds compile the
|
|
5
|
+
binding: rustup gnu target (`x86_64-pc-windows-gnu`) matching the mingw
|
|
6
|
+
ruby, so extconf's guard can be lifted there.
|
|
7
|
+
|
|
8
|
+
## Status
|
|
9
|
+
Superseded for CI by 01 (cross-gem containers carry coherent toolchains;
|
|
10
|
+
platform gems ship prebuilt). Kept for developers hacking on windows
|
|
11
|
+
checkouts directly.
|
|
12
|
+
|
|
13
|
+
## Acceptance
|
|
14
|
+
- a windows machine with the gnu target builds the ext via extconf
|
|
15
|
+
without EXPRESSIR_CORE_FORCE
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 09 — Checker tranche 3 + SHTOLO completion
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
Remaining eengine-parity checks: INVERSE-family rules and SELF\ qualifier
|
|
5
|
+
validation (tranche 3), then the leftover SHTOLO longform items
|
|
6
|
+
(TODO.parity-ee/14).
|
|
7
|
+
|
|
8
|
+
## Gate
|
|
9
|
+
Grammar support for INVERSE-scoped references and SELF\ qualified
|
|
10
|
+
refs — verify against the current grammar after recent fixes.
|
|
11
|
+
|
|
12
|
+
## Acceptance
|
|
13
|
+
- each new check has a fixture that fires it + a clean-corpus negative
|