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,588 @@
|
|
|
1
|
+
# CLI Commands
|
|
2
|
+
|
|
3
|
+
This reference captures the available CLI commands provided by the `sea` binary (feature `cli` in `domainforge-core`). Commands and flags mirror `domainforge --help` output and include examples with expected behavior.
|
|
4
|
+
|
|
5
|
+
## Conventions
|
|
6
|
+
|
|
7
|
+
- Replace `model.sea` with your own file paths.
|
|
8
|
+
- Commands exit non-zero on validation or parsing errors; examples note expected exit codes when relevant.
|
|
9
|
+
- Use `--format json` when integrating with tooling.
|
|
10
|
+
|
|
11
|
+
## Global options
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
domainforge --help
|
|
15
|
+
domainforge --version
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- `--version` prints `domainforge-core <version>` (matches the built crate version).
|
|
19
|
+
- `--help` lists subcommands.
|
|
20
|
+
|
|
21
|
+
## parse
|
|
22
|
+
|
|
23
|
+
Parse a SEA file into an internal graph and print a summary.
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
domainforge parse path/to/model.sea
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Options:
|
|
30
|
+
|
|
31
|
+
- `--format <human|json>`: default `human` shows counts; `json` output depends on `--ast`.
|
|
32
|
+
- Without `--ast`: outputs semantic Graph JSON (entities, resources, flows)
|
|
33
|
+
- With `--ast`: outputs Abstract Syntax Tree JSON (declarations, source locations)
|
|
34
|
+
- `--ast`: output AST structure instead of semantic graph.
|
|
35
|
+
- `--out <path>`: write output to a file instead of stdout.
|
|
36
|
+
|
|
37
|
+
Example:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
domainforge parse domainforge-core/examples/basic.sea --format human
|
|
41
|
+
|
|
42
|
+
# Output AST JSON
|
|
43
|
+
domainforge parse domainforge-core/examples/basic.sea --ast --format json
|
|
44
|
+
|
|
45
|
+
# Output Graph JSON
|
|
46
|
+
domainforge parse domainforge-core/examples/basic.sea --format json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Expected output includes entity/resource/flow counts and the active namespace. AST mode outputs tagged AST nodes (e.g., `{"type": "Entity", ...}`).
|
|
50
|
+
|
|
51
|
+
## validate
|
|
52
|
+
|
|
53
|
+
Validate syntax and semantics of a SEA file.
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
domainforge validate path/to/model.sea
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Options:
|
|
60
|
+
|
|
61
|
+
- `--format <human|json>`: JSON returns a structured report with errors and warnings.
|
|
62
|
+
- `--allow-unknown`: treat missing references as `Unknown` instead of failing (matches three-valued logic).
|
|
63
|
+
- `--registry <.sea-registry.toml>`: provide namespace registry for cross-file resolution.
|
|
64
|
+
|
|
65
|
+
Exit codes:
|
|
66
|
+
|
|
67
|
+
- `0` when valid
|
|
68
|
+
- `1` when parse or semantic errors occur
|
|
69
|
+
|
|
70
|
+
## project
|
|
71
|
+
|
|
72
|
+
Export a model to other formats.
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
domainforge project --format <calm|rdf|sbvr|dsl|protobuf> input.sea output.json
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Formats:
|
|
79
|
+
|
|
80
|
+
- `calm`: FINOS CALM JSON
|
|
81
|
+
- `rdf`: RDF/Turtle
|
|
82
|
+
- `sbvr`: SBVR fact types
|
|
83
|
+
- `dsl`: reformat the DSL (pretty-print)
|
|
84
|
+
- `protobuf`: Protocol Buffer `.proto` files
|
|
85
|
+
|
|
86
|
+
### Protobuf-specific options
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
domainforge project --format protobuf [OPTIONS] input.sea output.proto
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
| Option | Description |
|
|
93
|
+
| ------------------------ | --------------------------------------------------------- |
|
|
94
|
+
| `--package <name>` | Override the proto package name |
|
|
95
|
+
| `--include-services` | Generate gRPC service definitions from Flows |
|
|
96
|
+
| `--multi-file` | Output separate `.proto` files per namespace |
|
|
97
|
+
| `--output-dir <path>` | Directory for multi-file output |
|
|
98
|
+
| `--compatibility <mode>` | Compatibility mode: `additive`, `backward`, or `breaking` |
|
|
99
|
+
| `--against <path>` | Previous schema for compatibility checking |
|
|
100
|
+
| `--buf-lint` | Run buf lint on generated output (requires buf CLI) |
|
|
101
|
+
| `--buf-breaking` | Run buf breaking change detection (requires buf CLI) |
|
|
102
|
+
| `--option <key>=<value>` | Set proto options (e.g., `java_package=com.example`) |
|
|
103
|
+
|
|
104
|
+
Example:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Basic export
|
|
108
|
+
domainforge project --format protobuf model.sea output.proto
|
|
109
|
+
|
|
110
|
+
# With gRPC services and custom package
|
|
111
|
+
domainforge project --format protobuf --include-services --package "com.example.api" model.sea api.proto
|
|
112
|
+
|
|
113
|
+
# Multi-file with buf validation
|
|
114
|
+
domainforge project --format protobuf --multi-file --buf-lint --output-dir ./proto model.sea
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Use cases:
|
|
118
|
+
|
|
119
|
+
- `domainforge project --format calm model.sea calm.json` to feed downstream systems.
|
|
120
|
+
- `domainforge project --format rdf model.sea graph.ttl` to load into triple stores.
|
|
121
|
+
- `domainforge project --format protobuf model.sea schema.proto` for gRPC/binary serialization.
|
|
122
|
+
|
|
123
|
+
## import
|
|
124
|
+
|
|
125
|
+
Import CALM JSON into SEA DSL.
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
domainforge import --format calm calm.json
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
- Outputs SEA DSL to stdout by default; redirect to a file to persist.
|
|
132
|
+
- Use `--out` to write directly: `domainforge import --format calm calm.json --out restored.sea`.
|
|
133
|
+
|
|
134
|
+
### Import from Knowledge Graph (RDF)
|
|
135
|
+
|
|
136
|
+
Import RDF/Turtle or RDF/XML into SEA Graph.
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
domainforge import --format kg graph.ttl
|
|
140
|
+
domainforge import --format kg graph.rdf
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
- Auto-detects Turtle vs RDF/XML based on content.
|
|
144
|
+
- RDF/XML import requires building with `--features cli,shacl`.
|
|
145
|
+
|
|
146
|
+
### Import from SBVR
|
|
147
|
+
|
|
148
|
+
Import SBVR XMI vocabulary into SEA.
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
domainforge import --format sbvr vocabulary.xmi
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
- Converts noun concepts to entities.
|
|
155
|
+
- Converts verb concepts to relations.
|
|
156
|
+
- Converts business rules to policies.
|
|
157
|
+
- See [Import from SBVR](../how-tos/import-from-sbvr.md) for details.
|
|
158
|
+
|
|
159
|
+
## validate-kg
|
|
160
|
+
|
|
161
|
+
Validate RDF/Turtle or RDF/XML files against SHACL shapes.
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
domainforge validate-kg graph.ttl
|
|
165
|
+
domainforge validate-kg graph.rdf
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
- Requires building with `--features cli,shacl`.
|
|
169
|
+
- Validates structure conforms to SEA SHACL shapes.
|
|
170
|
+
- Reports SHACL violations with severity and message.
|
|
171
|
+
|
|
172
|
+
## normalize
|
|
173
|
+
|
|
174
|
+
Normalize and compare policy expressions.
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
domainforge normalize [OPTIONS] <EXPRESSION>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Options:
|
|
181
|
+
|
|
182
|
+
- `--check-equiv <EXPR>`: Compare the input expression with another for semantic equivalence.
|
|
183
|
+
- `--json`: Output result as JSON object (always includes normalized string and hash; includes equivalence result only if `--check-equiv` is used).
|
|
184
|
+
|
|
185
|
+
Examples:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# Normalize an expression
|
|
189
|
+
domainforge normalize "b AND a"
|
|
190
|
+
# Output: (a AND b)
|
|
191
|
+
|
|
192
|
+
# Check equivalence
|
|
193
|
+
domainforge normalize "a AND b" --check-equiv "b AND a"
|
|
194
|
+
# Output:
|
|
195
|
+
# (a AND b)
|
|
196
|
+
# Equivalent (hash: 0x...)
|
|
197
|
+
|
|
198
|
+
# JSON output
|
|
199
|
+
domainforge normalize "true AND x" --json
|
|
200
|
+
# Output: { "normalized": "x", "hash": "0x..." }
|
|
201
|
+
|
|
202
|
+
# JSON output with equivalence
|
|
203
|
+
domainforge normalize "true AND x" --check-equiv "x" --json
|
|
204
|
+
# Output: { "normalized": "x", "hash": "0x...", "equivalent": true }
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## graph
|
|
208
|
+
|
|
209
|
+
Display a normalized view of the graph for debugging.
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
sea graph model.sea
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
- Prints entities, resources, flows, instances, roles, and relations with IDs.
|
|
216
|
+
- Useful when mapping DSL names to UUIDs.
|
|
217
|
+
|
|
218
|
+
## eval (policy evaluation)
|
|
219
|
+
|
|
220
|
+
Evaluate policies against a model.
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
sea eval --policy policy.json model.sea
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Options:
|
|
227
|
+
|
|
228
|
+
- `--format <human|json>`: JSON exposes violation details.
|
|
229
|
+
- `--allow-unknown`: enable three-valued logic for incomplete data.
|
|
230
|
+
|
|
231
|
+
Policy JSON schema matches `domainforge-core::policy::Policy`. See [`primitives-api`](./primitives-api.md) for the policy type.
|
|
232
|
+
|
|
233
|
+
## fmt
|
|
234
|
+
|
|
235
|
+
Format SEA-DSL source files with consistent styling.
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
sea fmt model.sea # Output to stdout
|
|
239
|
+
sea fmt model.sea --out formatted.sea # Write to file
|
|
240
|
+
sea fmt --check model.sea # CI mode: exit 1 if changes needed
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Options
|
|
244
|
+
|
|
245
|
+
| Option | Default | Description |
|
|
246
|
+
| -------------------- | ------- | ------------------------------------------ |
|
|
247
|
+
| `--out <path>` | stdout | Write formatted output to file |
|
|
248
|
+
| `--check` | false | Check if file is formatted (exit 1 if not) |
|
|
249
|
+
| `--indent-width <n>` | 4 | Number of spaces per indent level |
|
|
250
|
+
| `--use-tabs` | false | Use tabs instead of spaces |
|
|
251
|
+
| `--sort-imports` | true | Sort imports alphabetically |
|
|
252
|
+
|
|
253
|
+
### Examples
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# Format and display
|
|
257
|
+
sea fmt model.sea
|
|
258
|
+
|
|
259
|
+
# Format in-place
|
|
260
|
+
sea fmt model.sea --out model.sea
|
|
261
|
+
|
|
262
|
+
# Check in CI (fails if formatting needed)
|
|
263
|
+
sea fmt --check model.sea
|
|
264
|
+
|
|
265
|
+
# Use tabs with 2-space equivalent
|
|
266
|
+
sea fmt model.sea --use-tabs
|
|
267
|
+
|
|
268
|
+
# Custom indent width
|
|
269
|
+
sea fmt model.sea --indent-width 2
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Features
|
|
273
|
+
|
|
274
|
+
- **14 declaration types supported**: Entity, Resource, Flow, Pattern, Role, Relation, Instance, Policy, Metric, Dimension, Unit, ConceptChange, Mapping, Projection
|
|
275
|
+
- **Comment preservation**: File header comments are preserved
|
|
276
|
+
- **Idempotent**: Formatting twice produces the same result as formatting once
|
|
277
|
+
- **Import sorting**: Organizes imports alphabetically by module path
|
|
278
|
+
|
|
279
|
+
## units
|
|
280
|
+
|
|
281
|
+
List known dimensions and units registered in a model.
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
sea units model.sea
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
- Shows base units and conversion factors.
|
|
288
|
+
- Errors if units are undefined or circular.
|
|
289
|
+
|
|
290
|
+
## explain
|
|
291
|
+
|
|
292
|
+
Show detailed error context for validation failures.
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
sea explain --format human model.sea
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
- Equivalent to `validate` but includes suggestions from the validator (e.g., did-you-mean for unknown IDs).
|
|
299
|
+
|
|
300
|
+
## Environment variables
|
|
301
|
+
|
|
302
|
+
- `SEA_LOG`: set to `debug` to enable verbose logging (`SEA_LOG=debug domainforge validate model.sea`).
|
|
303
|
+
- `SEA_REGISTRY`: default path for `.sea-registry.toml` if not provided via `--registry`.
|
|
304
|
+
|
|
305
|
+
## Exit codes summary
|
|
306
|
+
|
|
307
|
+
- `0`: success (parse/validate/eval/export succeeded)
|
|
308
|
+
- `1`: parser or validation errors
|
|
309
|
+
- `2`: IO or configuration errors (file not found, permission issues)
|
|
310
|
+
|
|
311
|
+
## Example workflow
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
domainforge validate payment.sea \
|
|
315
|
+
&& domainforge project --format calm payment.sea calm.json \
|
|
316
|
+
&& domainforge import --format calm calm.json --out roundtrip.sea
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
- First command fails fast on syntax/semantic issues.
|
|
320
|
+
- Second exports CALM JSON for integration.
|
|
321
|
+
- Third re-imports to verify round-trip fidelity.
|
|
322
|
+
|
|
323
|
+
## Troubleshooting
|
|
324
|
+
|
|
325
|
+
- If `sea` is not found, ensure `$HOME/.cargo/bin` is on `PATH` or reinstall with `cargo install --path domainforge-core --features cli --force`.
|
|
326
|
+
- For Windows, run inside Developer PowerShell so the MSVC toolchain is available.
|
|
327
|
+
- Use `--format json` when parsing complex files to pinpoint the failing declaration.
|
|
328
|
+
|
|
329
|
+
## See also
|
|
330
|
+
|
|
331
|
+
- [`../how-tos/install-cli.md`](../how-tos/install-cli.md) for installation and verification.
|
|
332
|
+
- [`../how-tos/parse-sea-files.md`](../how-tos/parse-sea-files.md) for parsing guidance.
|
|
333
|
+
- [`../how-tos/export-to-calm.md`](../how-tos/export-to-calm.md) and [`../how-tos/import-from-calm.md`](../how-tos/import-from-calm.md) for data exchange.
|
|
334
|
+
- [`error-codes.md`](./error-codes.md) for interpreting validation failures.
|
|
335
|
+
|
|
336
|
+
## Command reference by scenario
|
|
337
|
+
|
|
338
|
+
### Batch-validate a directory
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
find models -name "*.sea" -print0 | xargs -0 -n1 -I{} domainforge validate {}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
- Fails fast on the first invalid file when combined with `set -e` in CI scripts.
|
|
345
|
+
|
|
346
|
+
### Use a namespace registry
|
|
347
|
+
|
|
348
|
+
```toml
|
|
349
|
+
# .sea-registry.toml
|
|
350
|
+
[registry]
|
|
351
|
+
paths = ["./models/shared", "./models/payments"]
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
domainforge validate --registry .sea-registry.toml models/payments/payment.sea
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Emit JSON for tooling
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
domainforge parse model.sea --format json | jq '.entities[] | {name, id}'
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
- Use when integrating with code generators or graph visualizers.
|
|
365
|
+
|
|
366
|
+
### Check CLI help for a subcommand
|
|
367
|
+
|
|
368
|
+
```
|
|
369
|
+
domainforge project --help
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
- Mirrors the subcommand definitions in `domainforge-core/src/bin/sea.rs`.
|
|
373
|
+
|
|
374
|
+
## Command locations in the repository
|
|
375
|
+
|
|
376
|
+
- Entry point: `domainforge-core/src/bin/sea.rs`
|
|
377
|
+
- Subcommand implementations: `domainforge-core/src/cli/commands/*.rs`
|
|
378
|
+
- Argument parsing: `domainforge-core/src/cli/mod.rs` (clap definitions)
|
|
379
|
+
|
|
380
|
+
Reading these files ensures documentation stays aligned with the shipped binary.
|
|
381
|
+
|
|
382
|
+
## CI integration
|
|
383
|
+
|
|
384
|
+
- The repo uses `just all-tests` to run Rust, Python, and TypeScript suites; incorporate `domainforge validate` on sample DSL fixtures to guard docs.
|
|
385
|
+
- When building release artifacts, the GitHub workflows call the same CLI with `--format json` to capture machine-readable outputs.
|
|
386
|
+
|
|
387
|
+
## Legacy flags
|
|
388
|
+
|
|
389
|
+
- Older snapshots referenced `--pretty`; this is superseded by `sea fmt`.
|
|
390
|
+
- The `--dump-ast` debug flag is only available when building with `debug` assertions; it prints the parser AST and is unsupported in release binaries.
|
|
391
|
+
|
|
392
|
+
## Security considerations
|
|
393
|
+
|
|
394
|
+
- CLI does not execute embedded code; however, avoid running against untrusted files in directories with malicious symlinks (use `--out` to control output paths).
|
|
395
|
+
- When exporting CALM or RDF, check file permissions to avoid leaking sensitive model details.
|
|
396
|
+
|
|
397
|
+
## Pack Commands
|
|
398
|
+
|
|
399
|
+
The `domainforge pack` subcommand provides tools for building, validating, inspecting, diffing, signing, and verifying semantic packs.
|
|
400
|
+
|
|
401
|
+
### domainforge pack build
|
|
402
|
+
|
|
403
|
+
Build a semantic pack from .sea source files.
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
domainforge pack build \
|
|
407
|
+
--source <glob> \
|
|
408
|
+
--org <id> \
|
|
409
|
+
--domain <id> \
|
|
410
|
+
--version <semver> \
|
|
411
|
+
--meaning-version <semver> \
|
|
412
|
+
--approval candidate|approved \
|
|
413
|
+
--review <path> \
|
|
414
|
+
--previous-pack <path> \
|
|
415
|
+
--allow-first-approved-version \
|
|
416
|
+
--out <path> \
|
|
417
|
+
--format human|json|jsonl
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
Options:
|
|
421
|
+
|
|
422
|
+
| Option | Description |
|
|
423
|
+
|---------------------------------|--------------------------------------------------------------------|
|
|
424
|
+
| `--source` (required, repeatable) | Glob patterns or file paths for .sea source files. |
|
|
425
|
+
| `--org` (required) | Organization identifier. |
|
|
426
|
+
| `--domain` (required) | Domain identifier. |
|
|
427
|
+
| `--version` (required) | Pack version (semver). |
|
|
428
|
+
| `--meaning-version` (required) | Meaning version (semver). Must increase when fingerprint changes. |
|
|
429
|
+
| `--approval` | `candidate` (default) or `approved`. |
|
|
430
|
+
| `--review` | Path to JSONL review manifest (required for `approved`). |
|
|
431
|
+
| `--previous-pack` | Path to previous pack for version comparison. |
|
|
432
|
+
| `--allow-first-approved-version`| Allow first approved pack without a previous version. |
|
|
433
|
+
| `--out` | Output file path. Prints to stdout if omitted. |
|
|
434
|
+
| `--format` | Output format: `human` (default), `json`, or `jsonl`. |
|
|
435
|
+
|
|
436
|
+
Exit codes: `0` success, `1` semantic/build errors, `2` parse error.
|
|
437
|
+
|
|
438
|
+
Examples:
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
# Build a candidate pack
|
|
442
|
+
domainforge pack build --source "models/**/*.sea" --org acme --domain logistics \
|
|
443
|
+
--version 1.0.0 --meaning-version 1.0.0 --out packs/candidate.json
|
|
444
|
+
|
|
445
|
+
# Build an approved pack with review
|
|
446
|
+
domainforge pack build --source "models/**/*.sea" --org acme --domain logistics \
|
|
447
|
+
--version 1.1.0 --meaning-version 1.1.0 --approval approved \
|
|
448
|
+
--review reviews/logistics.jsonl --previous-pack packs/candidate.json \
|
|
449
|
+
--out packs/approved.json
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### domainforge pack validate
|
|
453
|
+
|
|
454
|
+
Validate .sea source files against a semantic pack.
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
domainforge pack validate \
|
|
458
|
+
--pack <path> \
|
|
459
|
+
--mode off|warn|strict \
|
|
460
|
+
--deprecated-policy allow|warn|error_in_strict|error_always \
|
|
461
|
+
--require-signature \
|
|
462
|
+
--expected-hash <hash> \
|
|
463
|
+
--format human|json|jsonl \
|
|
464
|
+
<input.sea>...
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
Options:
|
|
468
|
+
|
|
469
|
+
| Option | Description |
|
|
470
|
+
|--------------------------|--------------------------------------------------------------------|
|
|
471
|
+
| `--pack` (required) | Path to the semantic pack JSON file. |
|
|
472
|
+
| `--mode` | `warn` (default), `off`, or `strict`. |
|
|
473
|
+
| `--deprecated-policy` | `warn` (default), `allow`, `error_in_strict`, or `error_always`. |
|
|
474
|
+
| `--require-signature` | Fail if the pack is unsigned. |
|
|
475
|
+
| `--expected-hash` | Pin the expected pack content hash for tamper protection. |
|
|
476
|
+
| `--format` | Output format: `human` (default), `json`, or `jsonl`. |
|
|
477
|
+
| `<input.sea>...` | One or more .sea files to validate. |
|
|
478
|
+
|
|
479
|
+
Exit codes: `0` passed, `1` validation errors, `2` parse error, `3` unsigned pack, `4` signature failure.
|
|
480
|
+
|
|
481
|
+
Examples:
|
|
482
|
+
|
|
483
|
+
```bash
|
|
484
|
+
# Warn-mode validation
|
|
485
|
+
domainforge pack validate --pack packs/approved.json models/*.sea
|
|
486
|
+
|
|
487
|
+
# Strict CI validation
|
|
488
|
+
domainforge pack validate --pack packs/signed.json --mode strict \
|
|
489
|
+
--require-signature --expected-hash sha256:abc123... models/**/*.sea
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
### domainforge pack inspect
|
|
493
|
+
|
|
494
|
+
Display metadata and contents of a semantic pack.
|
|
495
|
+
|
|
496
|
+
```bash
|
|
497
|
+
domainforge pack inspect [--format human|json|jsonl] <pack-path>
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
Options:
|
|
501
|
+
|
|
502
|
+
| Option | Description |
|
|
503
|
+
|-------------|--------------------------------------------------------|
|
|
504
|
+
| `--format` | `human` (default), `json`, or `jsonl`. |
|
|
505
|
+
|
|
506
|
+
Example:
|
|
507
|
+
|
|
508
|
+
```bash
|
|
509
|
+
domainforge pack inspect packs/acme-logistics-1.1.0.json
|
|
510
|
+
domainforge pack inspect --format json packs/acme-logistics-1.1.0.json
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### domainforge pack diff
|
|
514
|
+
|
|
515
|
+
Compare two semantic packs and classify changes.
|
|
516
|
+
|
|
517
|
+
```bash
|
|
518
|
+
domainforge pack diff --old <path> --new <path> [--format human|json|jsonl]
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
Options:
|
|
522
|
+
|
|
523
|
+
| Option | Description |
|
|
524
|
+
|-------------|--------------------------------------------------------|
|
|
525
|
+
| `--old` | Path to the old (base) pack. |
|
|
526
|
+
| `--new` | Path to the new pack. |
|
|
527
|
+
| `--format` | `human` (default), `json`, or `jsonl`. |
|
|
528
|
+
|
|
529
|
+
Exit codes: `0` no breaking changes, `1` breaking changes detected.
|
|
530
|
+
|
|
531
|
+
Diff classifications: `ADD` (additive), `DEF` (definitional change), `DEP` (deprecating), `BRK` (breaking), `GOV` (governance critical), `SIG` (signature only).
|
|
532
|
+
|
|
533
|
+
Example:
|
|
534
|
+
|
|
535
|
+
```bash
|
|
536
|
+
domainforge pack diff --old packs/v1.0.0.json --new packs/v1.1.0.json
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
### domainforge pack sign
|
|
540
|
+
|
|
541
|
+
Sign a semantic pack with an Ed25519 private key.
|
|
542
|
+
|
|
543
|
+
```bash
|
|
544
|
+
domainforge pack sign <pack-path> --key <private.pem> [--out <path>]
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
Options:
|
|
548
|
+
|
|
549
|
+
| Option | Description |
|
|
550
|
+
|-------------|--------------------------------------------------------|
|
|
551
|
+
| `--key` | Path to the Ed25519 private key (PEM format). |
|
|
552
|
+
| `--out` | Output path for the signed pack. Prints to stdout if omitted. |
|
|
553
|
+
|
|
554
|
+
Exit codes: `0` success, `4` signing failure.
|
|
555
|
+
|
|
556
|
+
Example:
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
domainforge pack sign packs/approved.json --key keys/private.pem \
|
|
560
|
+
--out packs/signed.json
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
### domainforge pack verify
|
|
564
|
+
|
|
565
|
+
Verify the Ed25519 signature of a semantic pack.
|
|
566
|
+
|
|
567
|
+
```bash
|
|
568
|
+
domainforge pack verify <pack-path> --key <public.pem>
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
Options:
|
|
572
|
+
|
|
573
|
+
| Option | Description |
|
|
574
|
+
|-------------|--------------------------------------------------------|
|
|
575
|
+
| `--key` | Path to the Ed25519 public key (PEM format). |
|
|
576
|
+
|
|
577
|
+
Exit codes: `0` valid signature, `4` invalid or missing signature.
|
|
578
|
+
|
|
579
|
+
Example:
|
|
580
|
+
|
|
581
|
+
```bash
|
|
582
|
+
domainforge pack verify packs/signed.json --key keys/public.pem
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
## Version compatibility
|
|
586
|
+
|
|
587
|
+
- New flags are added under minor version bumps; scripts should check `domainforge --version` to ensure expected options exist.
|
|
588
|
+
- The CLI respects semantic versioning with breaking changes gated to major bumps; see [`../explanations/versioning-strategy.md`](../explanations/versioning-strategy.md).
|