domainforge 0.13.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.
- package/.cargo/config.toml +6 -0
- package/.claude/settings.local.json +18 -0
- package/.coderabbit.yml +43 -0
- package/.codex/skills/release-management/SKILL.md +151 -0
- package/.codex/skills/release-management/agents/openai.yaml +4 -0
- package/.github/actions/decrypt-secrets/action.yml +121 -0
- package/.github/agents/Coder.agent.md +97 -0
- package/.github/agents/DeepResearch.agent.md +61 -0
- package/.github/chatmodes/tdd.vibepro.chatmode.md +1183 -0
- package/.github/copilot-instructions.md +13 -0
- package/.github/dependabot.yml +68 -0
- package/.github/workflows/README.md +165 -0
- package/.github/workflows/ci.yml +335 -0
- package/.github/workflows/dependabot-automerge.yml +114 -0
- package/.github/workflows/dependency-review.yml +27 -0
- package/.github/workflows/deploy.yml +87 -0
- package/.github/workflows/prepare-release.yml +168 -0
- package/.github/workflows/release-crates.yml +42 -0
- package/.github/workflows/release-npm.yml +137 -0
- package/.github/workflows/release-please.yml +29 -0
- package/.github/workflows/release-pypi.yml +96 -0
- package/.gitkeep +1 -0
- package/.release-please-manifest.json +5 -0
- package/.sea-registry.toml +10 -0
- package/.serena/project.yml +133 -0
- package/.sops.yaml +10 -0
- package/AGENTS.md +216 -0
- package/CHANGELOG.md +400 -0
- package/CLAUDE.md +62 -0
- package/CONTRIBUTING.md +323 -0
- package/Cargo.lock +3612 -0
- package/Cargo.toml +12 -0
- package/LICENSE +201 -0
- package/README.md +660 -0
- package/README_PYTHON.md +256 -0
- package/README_TYPESCRIPT.md +305 -0
- package/README_WASM.md +329 -0
- package/RELEASE_NOTES.md +41 -0
- package/bun.lock +378 -0
- package/bunfig.toml +11 -0
- package/check_output.txt +83 -0
- package/clippy_output.txt +80 -0
- package/commitlint.config.cjs +8 -0
- package/deny.toml +42 -0
- package/devbox.json +14 -0
- package/devbox.lock +76 -0
- package/docs/RELEASE_PROCESS.md +360 -0
- package/docs/diagnostics.md +161 -0
- package/docs/doc_guidelines.md +53 -0
- package/docs/explanations/README.md +21 -0
- package/docs/explanations/architecture-overview.md +109 -0
- package/docs/explanations/cross-language-binding-strategy.md +68 -0
- package/docs/explanations/graph-store-design.md +47 -0
- package/docs/explanations/performance-benchmarks.md +63 -0
- package/docs/explanations/policy-evaluation-logic.md +106 -0
- package/docs/explanations/semantic-modeling-concepts.md +109 -0
- package/docs/explanations/three-valued-logic.md +66 -0
- package/docs/explanations/versioning-strategy.md +45 -0
- package/docs/governance.md +168 -0
- package/docs/how-tos/README.md +46 -0
- package/docs/how-tos/ci-cd-validation.md +93 -0
- package/docs/how-tos/create-custom-units.md +125 -0
- package/docs/how-tos/define-policies.md +119 -0
- package/docs/how-tos/export-to-calm.md +110 -0
- package/docs/how-tos/export-to-protobuf.md +312 -0
- package/docs/how-tos/extend-grammar.md +133 -0
- package/docs/how-tos/generate-rdf-turtle.md +106 -0
- package/docs/how-tos/import-from-calm.md +114 -0
- package/docs/how-tos/import-from-sbvr.md +249 -0
- package/docs/how-tos/install-cli.md +126 -0
- package/docs/how-tos/parse-sea-files.md +132 -0
- package/docs/how-tos/policy-evaluation-modes.md +30 -0
- package/docs/how-tos/run-cross-language-tests.md +115 -0
- package/docs/how-tos/troubleshoot-napi-builds.md +55 -0
- package/docs/how-tos/use-modules-imports.md +285 -0
- package/docs/index.md +13 -0
- package/docs/plans/canonical-normalizer.md +121 -0
- package/docs/plans/cd_improvement.md +112 -0
- package/docs/plans/cli-ast.md +29 -0
- package/docs/plans/expression-bindings-and-normalizer-integration.md +174 -0
- package/docs/plans/protobuf_advanced_features_plan.md +597 -0
- package/docs/plans/protobuf_plan.yml +525 -0
- package/docs/plans/refactor_dsl_architecture.md +131 -0
- package/docs/plans/release-plan.md +163 -0
- package/docs/plans/sea_fmt_implementation_plan.md +516 -0
- package/docs/playbooks/README.md +18 -0
- package/docs/playbooks/adding-new-primitive.md +68 -0
- package/docs/playbooks/debugging-parser-failures.md +42 -0
- package/docs/playbooks/local-release-preparation.md +139 -0
- package/docs/playbooks/migrating-schema-versions.md +43 -0
- package/docs/playbooks/onboarding-contributors.md +64 -0
- package/docs/playbooks/releasing-beta.md +86 -0
- package/docs/playbooks/secret-management.md +64 -0
- package/docs/reference/README.md +199 -0
- package/docs/reference/ast-json-api.md +427 -0
- package/docs/reference/calm-mapping.md +519 -0
- package/docs/reference/cli-commands.md +588 -0
- package/docs/reference/configuration.md +202 -0
- package/docs/reference/error-codes.md +664 -0
- package/docs/reference/generated-artifacts-policy.md +53 -0
- package/docs/reference/grammar-spec.md +255 -0
- package/docs/reference/primitives-api.md +317 -0
- package/docs/reference/protobuf-api.md +426 -0
- package/docs/reference/python-api.md +485 -0
- package/docs/reference/registry.md +50 -0
- package/docs/reference/sea-dsl-ai-cheatsheet.yaml +913 -0
- package/docs/reference/security-model.md +74 -0
- package/docs/reference/typescript-api.md +508 -0
- package/docs/reference/wasm-api.md +420 -0
- package/docs/semantic-pack-review.md +144 -0
- package/docs/semantic-pack-signing.md +234 -0
- package/docs/semantic-packs.md +284 -0
- package/docs/specs/ADR-001-sea-dsl-semantic-source-of-truth.md +33 -0
- package/docs/specs/ADR-002-projection-first-class-construct.md +50 -0
- package/docs/specs/ADR-003-protobuf-projection-target.md +51 -0
- package/docs/specs/ADR-004-projection-compatibility-semantics.md +57 -0
- package/docs/specs/ADR-005-multi-language-support-strategy.md +112 -0
- package/docs/specs/ADR-006-error-handling-strategy.md +115 -0
- package/docs/specs/ADR-007-policy-evaluation-engine.md +95 -0
- package/docs/specs/ADR-008-knowledge-graph-integration.md +90 -0
- package/docs/specs/ADR-009-module-resolution-strategy.md +115 -0
- package/docs/specs/ADR-010-unit-system.md +106 -0
- package/docs/specs/PRD-001-sea-projection-framework.md +155 -0
- package/docs/specs/PRD-002-sea-cli-tooling.md +169 -0
- package/docs/specs/PRD-003-dsl-core-capabilities.md +275 -0
- package/docs/specs/README.md +62 -0
- package/docs/specs/SDS-001-protobuf-projection-engine.md +451 -0
- package/docs/specs/SDS-002-sea-core-architecture.md +268 -0
- package/docs/specs/SDS-003-parser-semantic-graph.md +377 -0
- package/docs/specs/SDS-004-policy-engine-design.md +362 -0
- package/docs/specs/SDS-005-knowledge-graph-module.md +364 -0
- package/docs/specs/SDS-006-calm-integration.md +367 -0
- package/docs/specs/SDS-007-sbvr-import.md +347 -0
- package/docs/templates/template_explanation.md +14 -0
- package/docs/templates/template_howto.md +21 -0
- package/docs/templates/template_playbook.md +21 -0
- package/docs/templates/template_reference.md +17 -0
- package/docs/templates/template_tutorial.md +24 -0
- package/docs/tutorials/README.md +12 -0
- package/docs/tutorials/first-sea-model.md +85 -0
- package/docs/tutorials/getting-started.md +98 -0
- package/docs/tutorials/python-binding-quickstart.md +107 -0
- package/docs/tutorials/typescript-binding-quickstart.md +91 -0
- package/docs/tutorials/wasm-in-browser.md +75 -0
- package/domainforge-core/CHANGELOG.md +138 -0
- package/domainforge-core/Cargo.toml +101 -0
- package/domainforge-core/MIGRATING.md +32 -0
- package/domainforge-core/README.md +197 -0
- package/domainforge-core/benchmark_results.txt +51 -0
- package/domainforge-core/build.rs +6 -0
- package/domainforge-core/deny.toml +31 -0
- package/domainforge-core/docs/specs/projections/sbvr_kg_mapping.md +43 -0
- package/domainforge-core/examples/basic.sea +7 -0
- package/domainforge-core/examples/cli/import_export_workflow.sh +38 -0
- package/domainforge-core/examples/cli/validate_example.sh +30 -0
- package/domainforge-core/examples/evolution_semantics.sea +31 -0
- package/domainforge-core/examples/parser_demo.rs +203 -0
- package/domainforge-core/grammar/sea.pest +408 -0
- package/domainforge-core/schemas/calm-v1.schema.json +170 -0
- package/domainforge-core/schemas/shacl/sea_shapes.ttl +19 -0
- package/domainforge-core/src/authority/compiler.rs +309 -0
- package/domainforge-core/src/authority/environment.rs +203 -0
- package/domainforge-core/src/authority/error.rs +164 -0
- package/domainforge-core/src/authority/fact_resolver.rs +224 -0
- package/domainforge-core/src/authority/mod.rs +25 -0
- package/domainforge-core/src/authority/pack.rs +133 -0
- package/domainforge-core/src/authority/policy.rs +224 -0
- package/domainforge-core/src/authority/resolver.rs +446 -0
- package/domainforge-core/src/authority/trace.rs +217 -0
- package/domainforge-core/src/authority/transform.rs +168 -0
- package/domainforge-core/src/authority/types.rs +617 -0
- package/domainforge-core/src/bin/domainforge.rs +25 -0
- package/domainforge-core/src/calm/export.rs +538 -0
- package/domainforge-core/src/calm/import.rs +1220 -0
- package/domainforge-core/src/calm/mod.rs +9 -0
- package/domainforge-core/src/calm/models.rs +108 -0
- package/domainforge-core/src/calm/sbvr_import.rs +9 -0
- package/domainforge-core/src/cli/authority.rs +149 -0
- package/domainforge-core/src/cli/format.rs +85 -0
- package/domainforge-core/src/cli/import.rs +133 -0
- package/domainforge-core/src/cli/mod.rs +64 -0
- package/domainforge-core/src/cli/normalize.rs +180 -0
- package/domainforge-core/src/cli/pack.rs +904 -0
- package/domainforge-core/src/cli/parse.rs +112 -0
- package/domainforge-core/src/cli/project.rs +294 -0
- package/domainforge-core/src/cli/registry.rs +41 -0
- package/domainforge-core/src/cli/test.rs +12 -0
- package/domainforge-core/src/cli/validate.rs +195 -0
- package/domainforge-core/src/cli/validate_kg.rs +80 -0
- package/domainforge-core/src/concept_id.rs +89 -0
- package/domainforge-core/src/error/diagnostics.rs +426 -0
- package/domainforge-core/src/error/fuzzy.rs +253 -0
- package/domainforge-core/src/error/mod.rs +13 -0
- package/domainforge-core/src/formatter/comments.rs +223 -0
- package/domainforge-core/src/formatter/config.rs +114 -0
- package/domainforge-core/src/formatter/mod.rs +22 -0
- package/domainforge-core/src/formatter/printer.rs +906 -0
- package/domainforge-core/src/graph/mod.rs +858 -0
- package/domainforge-core/src/graph/to_ast.rs +66 -0
- package/domainforge-core/src/kg.rs +1476 -0
- package/domainforge-core/src/kg_import.rs +251 -0
- package/domainforge-core/src/lib.rs +203 -0
- package/domainforge-core/src/module/mod.rs +1 -0
- package/domainforge-core/src/module/resolver.rs +260 -0
- package/domainforge-core/src/parser/ast.rs +2919 -0
- package/domainforge-core/src/parser/ast_convert.rs +494 -0
- package/domainforge-core/src/parser/ast_schema.rs +491 -0
- package/domainforge-core/src/parser/error.rs +291 -0
- package/domainforge-core/src/parser/lint.rs +39 -0
- package/domainforge-core/src/parser/mod.rs +193 -0
- package/domainforge-core/src/parser/printer.rs +702 -0
- package/domainforge-core/src/parser/profiles.rs +71 -0
- package/domainforge-core/src/parser/string_utils.rs +138 -0
- package/domainforge-core/src/patterns.rs +68 -0
- package/domainforge-core/src/policy/core.rs +1148 -0
- package/domainforge-core/src/policy/expression.rs +399 -0
- package/domainforge-core/src/policy/mod.rs +18 -0
- package/domainforge-core/src/policy/normalize.rs +1028 -0
- package/domainforge-core/src/policy/quantifier.rs +940 -0
- package/domainforge-core/src/policy/three_valued.rs +140 -0
- package/domainforge-core/src/policy/three_valued_microbench.rs +104 -0
- package/domainforge-core/src/policy/type_inference.rs +67 -0
- package/domainforge-core/src/policy/violation.rs +36 -0
- package/domainforge-core/src/primitives/concept_change.rs +61 -0
- package/domainforge-core/src/primitives/entity.rs +224 -0
- package/domainforge-core/src/primitives/flow.rs +111 -0
- package/domainforge-core/src/primitives/instance.rs +93 -0
- package/domainforge-core/src/primitives/mapping_contract.rs +50 -0
- package/domainforge-core/src/primitives/metric.rs +79 -0
- package/domainforge-core/src/primitives/mod.rs +25 -0
- package/domainforge-core/src/primitives/projection_contract.rs +50 -0
- package/domainforge-core/src/primitives/quantity.rs +56 -0
- package/domainforge-core/src/primitives/relation.rs +68 -0
- package/domainforge-core/src/primitives/resource.rs +237 -0
- package/domainforge-core/src/primitives/resource_instance.rs +88 -0
- package/domainforge-core/src/primitives/role.rs +49 -0
- package/domainforge-core/src/projection/buf.rs +404 -0
- package/domainforge-core/src/projection/contracts.rs +22 -0
- package/domainforge-core/src/projection/engine.rs +19 -0
- package/domainforge-core/src/projection/mod.rs +16 -0
- package/domainforge-core/src/projection/protobuf.rs +3331 -0
- package/domainforge-core/src/projection/registry.rs +43 -0
- package/domainforge-core/src/python/authority.rs +253 -0
- package/domainforge-core/src/python/error.rs +227 -0
- package/domainforge-core/src/python/formatter.rs +86 -0
- package/domainforge-core/src/python/graph.rs +366 -0
- package/domainforge-core/src/python/mod.rs +9 -0
- package/domainforge-core/src/python/policy.rs +651 -0
- package/domainforge-core/src/python/primitives.rs +796 -0
- package/domainforge-core/src/python/registry.rs +98 -0
- package/domainforge-core/src/python/semantic_pack.rs +619 -0
- package/domainforge-core/src/python/units.rs +96 -0
- package/domainforge-core/src/registry/mod.rs +432 -0
- package/domainforge-core/src/registry/tests.rs +210 -0
- package/domainforge-core/src/sbvr.rs +744 -0
- package/domainforge-core/src/semantic_pack/builder.rs +470 -0
- package/domainforge-core/src/semantic_pack/canonical_json.rs +184 -0
- package/domainforge-core/src/semantic_pack/diagnostics.rs +214 -0
- package/domainforge-core/src/semantic_pack/diff.rs +216 -0
- package/domainforge-core/src/semantic_pack/mod.rs +31 -0
- package/domainforge-core/src/semantic_pack/pack_set.rs +240 -0
- package/domainforge-core/src/semantic_pack/resolver.rs +437 -0
- package/domainforge-core/src/semantic_pack/review.rs +125 -0
- package/domainforge-core/src/semantic_pack/schema.rs +342 -0
- package/domainforge-core/src/semantic_pack/signing.rs +105 -0
- package/domainforge-core/src/semantic_pack/validator.rs +368 -0
- package/domainforge-core/src/semantic_version.rs +140 -0
- package/domainforge-core/src/test_utils.rs +12 -0
- package/domainforge-core/src/typescript/authority.rs +184 -0
- package/domainforge-core/src/typescript/error.rs +146 -0
- package/domainforge-core/src/typescript/formatter.rs +76 -0
- package/domainforge-core/src/typescript/graph.rs +391 -0
- package/domainforge-core/src/typescript/mod.rs +9 -0
- package/domainforge-core/src/typescript/policy.rs +564 -0
- package/domainforge-core/src/typescript/primitives.rs +784 -0
- package/domainforge-core/src/typescript/registry.rs +88 -0
- package/domainforge-core/src/typescript/semantic_pack.rs +470 -0
- package/domainforge-core/src/typescript/units.rs +76 -0
- package/domainforge-core/src/units/mod.rs +462 -0
- package/domainforge-core/src/uuid_module.rs +42 -0
- package/domainforge-core/src/validation_error.rs +818 -0
- package/domainforge-core/src/validation_result.rs +30 -0
- package/domainforge-core/src/wasm/authority.rs +192 -0
- package/domainforge-core/src/wasm/error.rs +145 -0
- package/domainforge-core/src/wasm/formatter.rs +69 -0
- package/domainforge-core/src/wasm/graph.rs +471 -0
- package/domainforge-core/src/wasm/mod.rs +16 -0
- package/domainforge-core/src/wasm/policy.rs +607 -0
- package/domainforge-core/src/wasm/primitives.rs +295 -0
- package/domainforge-core/src/wasm/semantic_pack.rs +471 -0
- package/domainforge-core/src/wasm/units.rs +62 -0
- package/domainforge-core/std/aws.sea +6 -0
- package/domainforge-core/std/core.sea +6 -0
- package/domainforge-core/std/http.sea +27 -0
- package/domainforge-core/tests/aggregation_enhanced_tests.rs +162 -0
- package/domainforge-core/tests/aggregation_eval_tests.rs +248 -0
- package/domainforge-core/tests/aggregation_integration_tests.rs +379 -0
- package/domainforge-core/tests/aggregation_parser_tests.rs +92 -0
- package/domainforge-core/tests/aggregation_tests.rs +102 -0
- package/domainforge-core/tests/authority_conformance_tests.rs +1173 -0
- package/domainforge-core/tests/calm_round_trip_tests.rs +283 -0
- package/domainforge-core/tests/calm_schema_validation_tests.rs +137 -0
- package/domainforge-core/tests/cast_operator_tests.rs +85 -0
- package/domainforge-core/tests/cli_binary_check.rs +37 -0
- package/domainforge-core/tests/cli_import_tests.rs +291 -0
- package/domainforge-core/tests/cli_path_traversal_tests.rs +124 -0
- package/domainforge-core/tests/cli_tests.rs +63 -0
- package/domainforge-core/tests/diagnostics_tests.rs +203 -0
- package/domainforge-core/tests/dimension_unit_tests.rs +80 -0
- package/domainforge-core/tests/entity_tests.rs +69 -0
- package/domainforge-core/tests/evolution_semantics_tests.rs +157 -0
- package/domainforge-core/tests/flow_tests.rs +78 -0
- package/domainforge-core/tests/flow_unit_validation_tests.rs +31 -0
- package/domainforge-core/tests/graph_integration_tests.rs +218 -0
- package/domainforge-core/tests/graph_tests.rs +626 -0
- package/domainforge-core/tests/import_parsing_tests.rs +23 -0
- package/domainforge-core/tests/instance_integration_tests.rs +98 -0
- package/domainforge-core/tests/instance_parsing_tests.rs +58 -0
- package/domainforge-core/tests/instance_tests.rs +61 -0
- package/domainforge-core/tests/kg_uri_encoding_tests.rs +53 -0
- package/domainforge-core/tests/lint_tests.rs +19 -0
- package/domainforge-core/tests/metric_tests.rs +143 -0
- package/domainforge-core/tests/module_resolution_tests.rs +100 -0
- package/domainforge-core/tests/namespace_registry_tests.rs +247 -0
- package/domainforge-core/tests/null_handling_tests.rs +26 -0
- package/domainforge-core/tests/parser_ast_v3.rs +53 -0
- package/domainforge-core/tests/parser_dimension_registry_tests.rs +20 -0
- package/domainforge-core/tests/parser_integration_tests.rs +294 -0
- package/domainforge-core/tests/parser_metadata_tests.rs +97 -0
- package/domainforge-core/tests/parser_resource_domain_only_graph_test.rs +21 -0
- package/domainforge-core/tests/parser_resource_limits_tests.rs +122 -0
- package/domainforge-core/tests/parser_tests.rs +512 -0
- package/domainforge-core/tests/pattern_semantics_tests.rs +87 -0
- package/domainforge-core/tests/phase_14_determinism_tests.rs +166 -0
- package/domainforge-core/tests/phase_15_validation_error_tests.rs +136 -0
- package/domainforge-core/tests/phase_16_unicode_tests.rs +248 -0
- package/domainforge-core/tests/phase_17_export_tests.rs +285 -0
- package/domainforge-core/tests/phase_17_round_trip_tests.rs +264 -0
- package/domainforge-core/tests/policy_tests.rs +635 -0
- package/domainforge-core/tests/primitives_integration_tests.rs +151 -0
- package/domainforge-core/tests/print_rdf_xml.rs +14 -0
- package/domainforge-core/tests/printer_tests.rs +204 -0
- package/domainforge-core/tests/profile_tests.rs +35 -0
- package/domainforge-core/tests/projection_contracts_tests.rs +154 -0
- package/domainforge-core/tests/protobuf_projection_tests.rs +199 -0
- package/domainforge-core/tests/quantity_tests.rs +41 -0
- package/domainforge-core/tests/rdf_xml_typed_literal_tests.rs +105 -0
- package/domainforge-core/tests/registry_schema_tests.rs +33 -0
- package/domainforge-core/tests/resource_tests.rs +50 -0
- package/domainforge-core/tests/resource_unit_tests.rs +24 -0
- package/domainforge-core/tests/roles_relations_tests.rs +61 -0
- package/domainforge-core/tests/round_trip_tests.rs +34 -0
- package/domainforge-core/tests/runtime_toggle_tests.rs +70 -0
- package/domainforge-core/tests/sbvr_fact_schema_tests.rs +60 -0
- package/domainforge-core/tests/sbvr_flow_facts_tests.rs +55 -0
- package/domainforge-core/tests/sbvr_parsing_tests.rs +53 -0
- package/domainforge-core/tests/semantic_pack_alias_resolution.rs +197 -0
- package/domainforge-core/tests/semantic_pack_build.rs +302 -0
- package/domainforge-core/tests/semantic_pack_consumer_smoke.rs +150 -0
- package/domainforge-core/tests/semantic_pack_pack_set.rs +160 -0
- package/domainforge-core/tests/semantic_pack_signing.rs +157 -0
- package/domainforge-core/tests/semantic_pack_three_valued.rs +250 -0
- package/domainforge-core/tests/semantic_pack_validate.rs +196 -0
- package/domainforge-core/tests/std_lib_tests.rs +37 -0
- package/domainforge-core/tests/temporal_evaluation_tests.rs +159 -0
- package/domainforge-core/tests/temporal_semantics_tests.rs +214 -0
- package/domainforge-core/tests/three_valued_quantifiers_tests.rs +164 -0
- package/domainforge-core/tests/turtle_entity_export_tests.rs +38 -0
- package/domainforge-core/tests/turtle_escaping_tests.rs +53 -0
- package/domainforge-core/tests/turtle_resource_export_tests.rs +34 -0
- package/domainforge-core/tests/type_inference_tests.rs +40 -0
- package/domainforge-core/tests/unicode_validation_tests.rs +169 -0
- package/domainforge-core/tests/unit_tests.rs +81 -0
- package/domainforge-core/tests/validate_tests.rs +38 -0
- package/domainforge-core/tests/validation_unit_mismatch_tests.rs +83 -0
- package/domainforge-core/tests/wasm_tests.rs +229 -0
- package/domainforge-python/CHANGELOG-python.md +12 -0
- package/domainforge-python/MIGRATING.md +24 -0
- package/domainforge-python/README.md +256 -0
- package/domainforge-python/domainforge/__init__.py +95 -0
- package/domainforge-python/domainforge/domainforge.pyi +519 -0
- package/domainforge-python/pyproject.toml +36 -0
- package/domainforge-typescript/CHANGELOG-typescript.md +12 -0
- package/domainforge-typescript/LICENSE +201 -0
- package/domainforge-typescript/MIGRATING.md +24 -0
- package/domainforge-typescript/README.md +305 -0
- package/domainforge-typescript/index.d.ts +452 -0
- package/domainforge-typescript/index.js +361 -0
- package/domainforge-typescript/package.json +60 -0
- package/example.js +61 -0
- package/examples/browser.html +366 -0
- package/examples/namespaces/finance/cashflow.sea +5 -0
- package/examples/namespaces/logistics/core.sea +7 -0
- package/examples/observability_metrics.sea +38 -0
- package/fixtures/semantic_packs/acme_procurement/domain/entities.sea +39 -0
- package/fixtures/semantic_packs/acme_procurement/domain/metrics.sea +11 -0
- package/fixtures/semantic_packs/acme_procurement/domain/relations.sea +7 -0
- package/fixtures/semantic_packs/acme_procurement/domain/resources.sea +9 -0
- package/fixtures/semantic_packs/acme_procurement/review/acme.procurement.semantic-review.jsonl +7 -0
- package/fixtures/semantic_packs/acme_procurement/tests/ambiguous_vendor_alias.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/deprecated_vendor_alias.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/invalid_relation.sea +3 -0
- package/fixtures/semantic_packs/acme_procurement/tests/proposed_concept.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/rejected_concept.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/unit_mismatch.sea +7 -0
- package/fixtures/semantic_packs/acme_procurement/tests/unknown_vendor_policy.sea +8 -0
- package/fixtures/semantic_packs/acme_procurement/tests/valid_purchase_policy.sea +8 -0
- package/index.d.ts +2 -0
- package/index.js +8 -0
- package/justfile +200 -0
- package/lefthook.yml +13 -0
- package/lib/validate_native_exports.d.ts +4 -0
- package/lib/validate_native_exports.js +12 -0
- package/package.json +22 -0
- package/pytest.ini +5 -0
- package/python/tests/test_registry.py +75 -0
- package/python/tests/test_units.py +18 -0
- package/release-please-config.json +49 -0
- package/requirements-dev.txt +3 -0
- package/requirements.txt +3 -0
- package/rust-toolchain.toml +3 -0
- package/schemas/ast-v1.schema.json +72 -0
- package/schemas/ast-v2.schema.json +1200 -0
- package/schemas/ast-v3.schema.json +1200 -0
- package/schemas/sea-registry.schema.json +45 -0
- package/scripts/build-python.sh +37 -0
- package/scripts/build-release.sh +279 -0
- package/scripts/build-typescript.sh +13 -0
- package/scripts/build-wasm.sh +113 -0
- package/scripts/bump-version.sh +245 -0
- package/scripts/check_unused_test_imports.py +85 -0
- package/scripts/ci_tasks.py +379 -0
- package/scripts/clear_debug_test.sh +10 -0
- package/scripts/create-github-release.sh +262 -0
- package/scripts/create-tag.sh +203 -0
- package/scripts/find_and_link_test_binary.sh +70 -0
- package/scripts/generate-changelog.sh +271 -0
- package/scripts/generate-release-notes.sh +205 -0
- package/scripts/lint_release_security.py +96 -0
- package/scripts/lint_release_workflows.py +82 -0
- package/scripts/lint_workflow_gates.py +113 -0
- package/scripts/optimized-wasm-build.sh +61 -0
- package/scripts/patch_napi_types.py +62 -0
- package/scripts/pre-release-check.sh +289 -0
- package/scripts/prepare_rust_debug.sh +52 -0
- package/scripts/release.sh +373 -0
- package/scripts/resolve_rust_binary.py +230 -0
- package/scripts/run_commitlint.sh +29 -0
- package/scripts/test-all.sh +77 -0
- package/scripts/update_launch_program.py +93 -0
- package/secrets/README.md +27 -0
- package/secrets/secrets.yaml +21 -0
- package/test_integration.py +67 -0
- package/tests/test_authority.py +328 -0
- package/tests/test_ci_tasks.py +143 -0
- package/tests/test_expression.py +256 -0
- package/tests/test_golden_payment_flow.py +42 -0
- package/tests/test_graph.py +127 -0
- package/tests/test_instance.py +136 -0
- package/tests/test_parser.py +82 -0
- package/tests/test_primitives.py +68 -0
- package/tests/test_role_relation_parity.py +56 -0
- package/tests/test_runtime_toggle.py +156 -0
- package/tests/test_semantic_pack.py +639 -0
- package/tests/test_three_valued_eval.py +159 -0
- package/tsconfig.json +30 -0
- package/typescript-tests/advanced.test.ts +165 -0
- package/typescript-tests/authority.test.ts +216 -0
- package/typescript-tests/expression.test.ts +228 -0
- package/typescript-tests/golden-payment-flow.test.ts +51 -0
- package/typescript-tests/graph.test.ts +142 -0
- package/typescript-tests/native-binding.test.ts +20 -0
- package/typescript-tests/primitives.test.ts +88 -0
- package/typescript-tests/registry.test.ts +122 -0
- package/typescript-tests/role_relation.test.ts +63 -0
- package/typescript-tests/runtime_toggle.test.ts +141 -0
- package/typescript-tests/semantic-pack.test.ts +556 -0
- package/typescript-tests/three_valued_eval.test.ts +135 -0
- package/typescript-tests/units.test.ts +36 -0
- package/vitest.config.ts +13 -0
- package/wasm_demo.html +225 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
# Build the CLI
|
|
5
|
+
cargo build --bin domainforge --features cli
|
|
6
|
+
|
|
7
|
+
# Path to the binary (compute absolute path from script directory)
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
SEA="$SCRIPT_DIR/../../../target/debug/domainforge"
|
|
10
|
+
|
|
11
|
+
# Validate that the binary exists and is executable
|
|
12
|
+
if [ ! -x "$SEA" ]; then
|
|
13
|
+
echo "Error: SEA binary not found or not executable at: $SEA" >&2
|
|
14
|
+
echo "Please ensure 'cargo build --bin domainforge --features cli' completed successfully." >&2
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
# Create a sample SEA file
|
|
19
|
+
echo 'Entity "Factory" in manufacturing' > factory.sea
|
|
20
|
+
echo 'Resource "Widget" units' >> factory.sea
|
|
21
|
+
echo 'Flow "Widget" from "Factory" to "Factory" quantity 100' >> factory.sea
|
|
22
|
+
|
|
23
|
+
# Project to CALM
|
|
24
|
+
echo "Projecting to CALM..."
|
|
25
|
+
$SEA project --format calm factory.sea factory.json
|
|
26
|
+
cat factory.json
|
|
27
|
+
|
|
28
|
+
# Project to KG (Turtle)
|
|
29
|
+
echo "Projecting to Knowledge Graph (Turtle)..."
|
|
30
|
+
$SEA project --format kg factory.sea factory.ttl
|
|
31
|
+
cat factory.ttl
|
|
32
|
+
|
|
33
|
+
# Import back from KG (Turtle)
|
|
34
|
+
echo "Importing from Knowledge Graph..."
|
|
35
|
+
$SEA import --format kg factory.ttl
|
|
36
|
+
|
|
37
|
+
# Clean up
|
|
38
|
+
rm factory.sea factory.json factory.ttl
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
# Build the CLI
|
|
5
|
+
cargo build --bin domainforge --features cli
|
|
6
|
+
|
|
7
|
+
# Path to the binary (compute absolute path from script directory)
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
SEA="$SCRIPT_DIR/../../../target/debug/domainforge"
|
|
10
|
+
|
|
11
|
+
# Validate that the binary exists and is executable
|
|
12
|
+
if [ ! -x "$SEA" ]; then
|
|
13
|
+
echo "Error: SEA binary not found or not executable at: $SEA" >&2
|
|
14
|
+
echo "Please ensure 'cargo build --bin domainforge --features cli' completed successfully." >&2
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
# Create a sample SEA file
|
|
19
|
+
echo 'Entity "Warehouse" in logistics' > sample.sea
|
|
20
|
+
|
|
21
|
+
# Validate it
|
|
22
|
+
echo "Validating sample.sea..."
|
|
23
|
+
$SEA validate sample.sea
|
|
24
|
+
|
|
25
|
+
# Validate with JSON output
|
|
26
|
+
echo "Validating with JSON output..."
|
|
27
|
+
$SEA validate --format json sample.sea
|
|
28
|
+
|
|
29
|
+
# Clean up
|
|
30
|
+
rm sample.sea
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Evolution Semantics Example
|
|
2
|
+
// This file demonstrates versioning and migration tracking in the DSL
|
|
3
|
+
|
|
4
|
+
// Version 1.0.0 - Original Vendor entity
|
|
5
|
+
Entity "Vendor" v1.0.0 in procurement
|
|
6
|
+
|
|
7
|
+
// Version 2.0.0 - Added credit tracking
|
|
8
|
+
Entity "VendorV2" v2.0.0
|
|
9
|
+
@replaces "Vendor" v1.0.0
|
|
10
|
+
@changes ["added credit_limit field", "added payment_terms field"]
|
|
11
|
+
in procurement
|
|
12
|
+
|
|
13
|
+
// Version 2.1.0 - Removed legacy fields
|
|
14
|
+
Entity "VendorV2_1" v2.1.0
|
|
15
|
+
@replaces "VendorV2" v2.0.0
|
|
16
|
+
@changes ["removed legacy_id field", "added vendor_rating field"]
|
|
17
|
+
in procurement
|
|
18
|
+
|
|
19
|
+
// Migration from v2.0.0 to v2.1.0
|
|
20
|
+
ConceptChange "Vendor_v2_1_migration"
|
|
21
|
+
@from_version v2.0.0
|
|
22
|
+
@to_version v2.1.0
|
|
23
|
+
@migration_policy mandatory
|
|
24
|
+
@breaking_change true
|
|
25
|
+
|
|
26
|
+
// Migration from v2.1.0 to v2.1.1 (patch)
|
|
27
|
+
ConceptChange "Vendor_v2_1_1_migration"
|
|
28
|
+
@from_version v2.1.0
|
|
29
|
+
@to_version v2.1.1
|
|
30
|
+
@migration_policy optional
|
|
31
|
+
@breaking_change false
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
//! Example demonstrating the SEA DSL Parser
|
|
2
|
+
//!
|
|
3
|
+
//! This example shows how to use the parser to create a supply chain model
|
|
4
|
+
//! from DSL source code.
|
|
5
|
+
|
|
6
|
+
use domainforge_core::parse_to_graph;
|
|
7
|
+
use rust_decimal::prelude::ToPrimitive;
|
|
8
|
+
|
|
9
|
+
fn main() {
|
|
10
|
+
// Define a camera supply chain using SEA DSL
|
|
11
|
+
let supply_chain_dsl = r#"
|
|
12
|
+
// === Entities in the Supply Chain ===
|
|
13
|
+
Entity "Component Supplier" in sourcing
|
|
14
|
+
Entity "Camera Assembly Plant" in manufacturing
|
|
15
|
+
Entity "Quality Control Lab" in qa
|
|
16
|
+
Entity "Distribution Center" in logistics
|
|
17
|
+
Entity "Retail Partner A" in sales
|
|
18
|
+
Entity "Retail Partner B" in sales
|
|
19
|
+
|
|
20
|
+
// === Resources ===
|
|
21
|
+
Resource "Camera Lens" units in components
|
|
22
|
+
Resource "Camera Body" units in components
|
|
23
|
+
Resource "Camera Sensor" units in components
|
|
24
|
+
Resource "Assembled Camera" units in products
|
|
25
|
+
Resource "QA Approved Camera" units in products
|
|
26
|
+
|
|
27
|
+
// === Flows ===
|
|
28
|
+
// Component sourcing
|
|
29
|
+
Flow "Camera Lens" from "Component Supplier" to "Camera Assembly Plant" quantity 1000
|
|
30
|
+
Flow "Camera Body" from "Component Supplier" to "Camera Assembly Plant" quantity 1000
|
|
31
|
+
Flow "Camera Sensor" from "Component Supplier" to "Camera Assembly Plant" quantity 1000
|
|
32
|
+
|
|
33
|
+
// Assembly and QA
|
|
34
|
+
Flow "Assembled Camera" from "Camera Assembly Plant" to "Quality Control Lab" quantity 950
|
|
35
|
+
Flow "QA Approved Camera" from "Quality Control Lab" to "Distribution Center" quantity 900
|
|
36
|
+
|
|
37
|
+
// Distribution to retail
|
|
38
|
+
Flow "QA Approved Camera" from "Distribution Center" to "Retail Partner A" quantity 450
|
|
39
|
+
Flow "QA Approved Camera" from "Distribution Center" to "Retail Partner B" quantity 450
|
|
40
|
+
|
|
41
|
+
// === Business Policies ===
|
|
42
|
+
Policy min_flow_quantity as forall f in flows: (f.quantity > 0)
|
|
43
|
+
Policy qa_exists as exists e in entities: (e.name = "Quality Control Lab")
|
|
44
|
+
Policy unique_distribution as exists_unique e in entities: (e.name = "Distribution Center")
|
|
45
|
+
"#;
|
|
46
|
+
|
|
47
|
+
// Parse the DSL into a Graph
|
|
48
|
+
match parse_to_graph(supply_chain_dsl) {
|
|
49
|
+
Ok(graph) => {
|
|
50
|
+
println!("✅ Successfully parsed supply chain model!\n");
|
|
51
|
+
|
|
52
|
+
// Display summary
|
|
53
|
+
println!("📊 Model Summary:");
|
|
54
|
+
println!(" • Entities: {}", graph.all_entities().len());
|
|
55
|
+
println!(" • Resources: {}", graph.all_resources().len());
|
|
56
|
+
println!(" • Flows: {}", graph.all_flows().len());
|
|
57
|
+
println!();
|
|
58
|
+
|
|
59
|
+
// Display entities by domain
|
|
60
|
+
println!("🏢 Entities by Domain:");
|
|
61
|
+
let mut domains = std::collections::HashMap::new();
|
|
62
|
+
for entity in graph.all_entities() {
|
|
63
|
+
let domain = if entity.namespace().is_empty() {
|
|
64
|
+
"(no domain)"
|
|
65
|
+
} else {
|
|
66
|
+
entity.namespace()
|
|
67
|
+
};
|
|
68
|
+
domains
|
|
69
|
+
.entry(domain)
|
|
70
|
+
.or_insert_with(Vec::new)
|
|
71
|
+
.push(entity.name());
|
|
72
|
+
}
|
|
73
|
+
for (domain, entities) in domains.iter() {
|
|
74
|
+
println!(" {}: {}", domain, entities.join(", "));
|
|
75
|
+
}
|
|
76
|
+
println!();
|
|
77
|
+
|
|
78
|
+
// Display resource types
|
|
79
|
+
println!("📦 Resources:");
|
|
80
|
+
for resource in graph.all_resources() {
|
|
81
|
+
let namespace = if resource.namespace().is_empty() {
|
|
82
|
+
"(no domain)"
|
|
83
|
+
} else {
|
|
84
|
+
resource.namespace()
|
|
85
|
+
};
|
|
86
|
+
println!(
|
|
87
|
+
" • {} [{}] in {}",
|
|
88
|
+
resource.name(),
|
|
89
|
+
resource.unit().symbol(),
|
|
90
|
+
namespace
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
println!();
|
|
94
|
+
|
|
95
|
+
// Analyze a specific entity
|
|
96
|
+
if let Some(plant) = graph
|
|
97
|
+
.all_entities()
|
|
98
|
+
.iter()
|
|
99
|
+
.find(|e| e.name() == "Camera Assembly Plant")
|
|
100
|
+
{
|
|
101
|
+
println!("🏭 Camera Assembly Plant Analysis:");
|
|
102
|
+
|
|
103
|
+
let inflows = graph.flows_to(plant.id());
|
|
104
|
+
println!(" Incoming flows: {}", inflows.len());
|
|
105
|
+
for flow in inflows {
|
|
106
|
+
match (
|
|
107
|
+
graph.get_entity(flow.from_id()),
|
|
108
|
+
graph.get_resource(flow.resource_id()),
|
|
109
|
+
) {
|
|
110
|
+
(Some(from), Some(resource)) => {
|
|
111
|
+
println!(
|
|
112
|
+
" ← {} of {} from {}",
|
|
113
|
+
flow.quantity(),
|
|
114
|
+
resource.name(),
|
|
115
|
+
from.name()
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
_ => {
|
|
119
|
+
eprintln!(
|
|
120
|
+
"Warning: incoming flow {} has missing references, skipping",
|
|
121
|
+
flow.id()
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
let outflows = graph.flows_from(plant.id());
|
|
128
|
+
println!(" Outgoing flows: {}", outflows.len());
|
|
129
|
+
for flow in outflows {
|
|
130
|
+
match (
|
|
131
|
+
graph.get_entity(flow.to_id()),
|
|
132
|
+
graph.get_resource(flow.resource_id()),
|
|
133
|
+
) {
|
|
134
|
+
(Some(to), Some(resource)) => {
|
|
135
|
+
println!(
|
|
136
|
+
" → {} of {} to {}",
|
|
137
|
+
flow.quantity(),
|
|
138
|
+
resource.name(),
|
|
139
|
+
to.name()
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
_ => {
|
|
143
|
+
eprintln!(
|
|
144
|
+
"Warning: outgoing flow {} has missing references, skipping",
|
|
145
|
+
flow.id()
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
println!(
|
|
152
|
+
" Upstream entities: {}",
|
|
153
|
+
graph.upstream_entities(plant.id()).len()
|
|
154
|
+
);
|
|
155
|
+
println!(
|
|
156
|
+
" Downstream entities: {}",
|
|
157
|
+
graph.downstream_entities(plant.id()).len()
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
println!();
|
|
161
|
+
|
|
162
|
+
// Display flow summary
|
|
163
|
+
println!("🔄 Total Flow Quantities:");
|
|
164
|
+
let mut resource_totals = std::collections::HashMap::new();
|
|
165
|
+
for flow in graph.all_flows() {
|
|
166
|
+
if let Some(resource) = graph.get_resource(flow.resource_id()) {
|
|
167
|
+
// Direct conversion from Decimal to f64, handle invalid values explicitly
|
|
168
|
+
match flow.quantity().to_f64() {
|
|
169
|
+
Some(quantity) if quantity.is_finite() => {
|
|
170
|
+
*resource_totals.entry(resource.name()).or_insert(0.0) += quantity;
|
|
171
|
+
}
|
|
172
|
+
Some(_) => {
|
|
173
|
+
eprintln!(
|
|
174
|
+
"Warning: flow {} has non-finite quantity {}, treating as 0.0",
|
|
175
|
+
flow.id(),
|
|
176
|
+
flow.quantity()
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
None => {
|
|
180
|
+
eprintln!(
|
|
181
|
+
"Warning: flow {} has invalid quantity {}, treating as 0.0",
|
|
182
|
+
flow.id(),
|
|
183
|
+
flow.quantity()
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
} else {
|
|
188
|
+
eprintln!(
|
|
189
|
+
"Warning: flow {} missing resource, omitting from totals",
|
|
190
|
+
flow.id()
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
for (resource, total) in resource_totals.iter() {
|
|
195
|
+
println!(" • {}: {} units", resource, total);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
Err(e) => {
|
|
199
|
+
eprintln!("❌ Parse error: {}", e);
|
|
200
|
+
std::process::exit(1);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|