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.
Files changed (481) hide show
  1. package/.cargo/config.toml +6 -0
  2. package/.claude/settings.local.json +18 -0
  3. package/.coderabbit.yml +43 -0
  4. package/.codex/skills/release-management/SKILL.md +151 -0
  5. package/.codex/skills/release-management/agents/openai.yaml +4 -0
  6. package/.github/actions/decrypt-secrets/action.yml +121 -0
  7. package/.github/agents/Coder.agent.md +97 -0
  8. package/.github/agents/DeepResearch.agent.md +61 -0
  9. package/.github/chatmodes/tdd.vibepro.chatmode.md +1183 -0
  10. package/.github/copilot-instructions.md +13 -0
  11. package/.github/dependabot.yml +68 -0
  12. package/.github/workflows/README.md +165 -0
  13. package/.github/workflows/ci.yml +335 -0
  14. package/.github/workflows/dependabot-automerge.yml +114 -0
  15. package/.github/workflows/dependency-review.yml +27 -0
  16. package/.github/workflows/deploy.yml +87 -0
  17. package/.github/workflows/prepare-release.yml +168 -0
  18. package/.github/workflows/release-crates.yml +42 -0
  19. package/.github/workflows/release-npm.yml +137 -0
  20. package/.github/workflows/release-please.yml +29 -0
  21. package/.github/workflows/release-pypi.yml +96 -0
  22. package/.gitkeep +1 -0
  23. package/.release-please-manifest.json +5 -0
  24. package/.sea-registry.toml +10 -0
  25. package/.serena/project.yml +133 -0
  26. package/.sops.yaml +10 -0
  27. package/AGENTS.md +216 -0
  28. package/CHANGELOG.md +400 -0
  29. package/CLAUDE.md +62 -0
  30. package/CONTRIBUTING.md +323 -0
  31. package/Cargo.lock +3612 -0
  32. package/Cargo.toml +12 -0
  33. package/LICENSE +201 -0
  34. package/README.md +660 -0
  35. package/README_PYTHON.md +256 -0
  36. package/README_TYPESCRIPT.md +305 -0
  37. package/README_WASM.md +329 -0
  38. package/RELEASE_NOTES.md +41 -0
  39. package/bun.lock +378 -0
  40. package/bunfig.toml +11 -0
  41. package/check_output.txt +83 -0
  42. package/clippy_output.txt +80 -0
  43. package/commitlint.config.cjs +8 -0
  44. package/deny.toml +42 -0
  45. package/devbox.json +14 -0
  46. package/devbox.lock +76 -0
  47. package/docs/RELEASE_PROCESS.md +360 -0
  48. package/docs/diagnostics.md +161 -0
  49. package/docs/doc_guidelines.md +53 -0
  50. package/docs/explanations/README.md +21 -0
  51. package/docs/explanations/architecture-overview.md +109 -0
  52. package/docs/explanations/cross-language-binding-strategy.md +68 -0
  53. package/docs/explanations/graph-store-design.md +47 -0
  54. package/docs/explanations/performance-benchmarks.md +63 -0
  55. package/docs/explanations/policy-evaluation-logic.md +106 -0
  56. package/docs/explanations/semantic-modeling-concepts.md +109 -0
  57. package/docs/explanations/three-valued-logic.md +66 -0
  58. package/docs/explanations/versioning-strategy.md +45 -0
  59. package/docs/governance.md +168 -0
  60. package/docs/how-tos/README.md +46 -0
  61. package/docs/how-tos/ci-cd-validation.md +93 -0
  62. package/docs/how-tos/create-custom-units.md +125 -0
  63. package/docs/how-tos/define-policies.md +119 -0
  64. package/docs/how-tos/export-to-calm.md +110 -0
  65. package/docs/how-tos/export-to-protobuf.md +312 -0
  66. package/docs/how-tos/extend-grammar.md +133 -0
  67. package/docs/how-tos/generate-rdf-turtle.md +106 -0
  68. package/docs/how-tos/import-from-calm.md +114 -0
  69. package/docs/how-tos/import-from-sbvr.md +249 -0
  70. package/docs/how-tos/install-cli.md +126 -0
  71. package/docs/how-tos/parse-sea-files.md +132 -0
  72. package/docs/how-tos/policy-evaluation-modes.md +30 -0
  73. package/docs/how-tos/run-cross-language-tests.md +115 -0
  74. package/docs/how-tos/troubleshoot-napi-builds.md +55 -0
  75. package/docs/how-tos/use-modules-imports.md +285 -0
  76. package/docs/index.md +13 -0
  77. package/docs/plans/canonical-normalizer.md +121 -0
  78. package/docs/plans/cd_improvement.md +112 -0
  79. package/docs/plans/cli-ast.md +29 -0
  80. package/docs/plans/expression-bindings-and-normalizer-integration.md +174 -0
  81. package/docs/plans/protobuf_advanced_features_plan.md +597 -0
  82. package/docs/plans/protobuf_plan.yml +525 -0
  83. package/docs/plans/refactor_dsl_architecture.md +131 -0
  84. package/docs/plans/release-plan.md +163 -0
  85. package/docs/plans/sea_fmt_implementation_plan.md +516 -0
  86. package/docs/playbooks/README.md +18 -0
  87. package/docs/playbooks/adding-new-primitive.md +68 -0
  88. package/docs/playbooks/debugging-parser-failures.md +42 -0
  89. package/docs/playbooks/local-release-preparation.md +139 -0
  90. package/docs/playbooks/migrating-schema-versions.md +43 -0
  91. package/docs/playbooks/onboarding-contributors.md +64 -0
  92. package/docs/playbooks/releasing-beta.md +86 -0
  93. package/docs/playbooks/secret-management.md +64 -0
  94. package/docs/reference/README.md +199 -0
  95. package/docs/reference/ast-json-api.md +427 -0
  96. package/docs/reference/calm-mapping.md +519 -0
  97. package/docs/reference/cli-commands.md +588 -0
  98. package/docs/reference/configuration.md +202 -0
  99. package/docs/reference/error-codes.md +664 -0
  100. package/docs/reference/generated-artifacts-policy.md +53 -0
  101. package/docs/reference/grammar-spec.md +255 -0
  102. package/docs/reference/primitives-api.md +317 -0
  103. package/docs/reference/protobuf-api.md +426 -0
  104. package/docs/reference/python-api.md +485 -0
  105. package/docs/reference/registry.md +50 -0
  106. package/docs/reference/sea-dsl-ai-cheatsheet.yaml +913 -0
  107. package/docs/reference/security-model.md +74 -0
  108. package/docs/reference/typescript-api.md +508 -0
  109. package/docs/reference/wasm-api.md +420 -0
  110. package/docs/semantic-pack-review.md +144 -0
  111. package/docs/semantic-pack-signing.md +234 -0
  112. package/docs/semantic-packs.md +284 -0
  113. package/docs/specs/ADR-001-sea-dsl-semantic-source-of-truth.md +33 -0
  114. package/docs/specs/ADR-002-projection-first-class-construct.md +50 -0
  115. package/docs/specs/ADR-003-protobuf-projection-target.md +51 -0
  116. package/docs/specs/ADR-004-projection-compatibility-semantics.md +57 -0
  117. package/docs/specs/ADR-005-multi-language-support-strategy.md +112 -0
  118. package/docs/specs/ADR-006-error-handling-strategy.md +115 -0
  119. package/docs/specs/ADR-007-policy-evaluation-engine.md +95 -0
  120. package/docs/specs/ADR-008-knowledge-graph-integration.md +90 -0
  121. package/docs/specs/ADR-009-module-resolution-strategy.md +115 -0
  122. package/docs/specs/ADR-010-unit-system.md +106 -0
  123. package/docs/specs/PRD-001-sea-projection-framework.md +155 -0
  124. package/docs/specs/PRD-002-sea-cli-tooling.md +169 -0
  125. package/docs/specs/PRD-003-dsl-core-capabilities.md +275 -0
  126. package/docs/specs/README.md +62 -0
  127. package/docs/specs/SDS-001-protobuf-projection-engine.md +451 -0
  128. package/docs/specs/SDS-002-sea-core-architecture.md +268 -0
  129. package/docs/specs/SDS-003-parser-semantic-graph.md +377 -0
  130. package/docs/specs/SDS-004-policy-engine-design.md +362 -0
  131. package/docs/specs/SDS-005-knowledge-graph-module.md +364 -0
  132. package/docs/specs/SDS-006-calm-integration.md +367 -0
  133. package/docs/specs/SDS-007-sbvr-import.md +347 -0
  134. package/docs/templates/template_explanation.md +14 -0
  135. package/docs/templates/template_howto.md +21 -0
  136. package/docs/templates/template_playbook.md +21 -0
  137. package/docs/templates/template_reference.md +17 -0
  138. package/docs/templates/template_tutorial.md +24 -0
  139. package/docs/tutorials/README.md +12 -0
  140. package/docs/tutorials/first-sea-model.md +85 -0
  141. package/docs/tutorials/getting-started.md +98 -0
  142. package/docs/tutorials/python-binding-quickstart.md +107 -0
  143. package/docs/tutorials/typescript-binding-quickstart.md +91 -0
  144. package/docs/tutorials/wasm-in-browser.md +75 -0
  145. package/domainforge-core/CHANGELOG.md +138 -0
  146. package/domainforge-core/Cargo.toml +101 -0
  147. package/domainforge-core/MIGRATING.md +32 -0
  148. package/domainforge-core/README.md +197 -0
  149. package/domainforge-core/benchmark_results.txt +51 -0
  150. package/domainforge-core/build.rs +6 -0
  151. package/domainforge-core/deny.toml +31 -0
  152. package/domainforge-core/docs/specs/projections/sbvr_kg_mapping.md +43 -0
  153. package/domainforge-core/examples/basic.sea +7 -0
  154. package/domainforge-core/examples/cli/import_export_workflow.sh +38 -0
  155. package/domainforge-core/examples/cli/validate_example.sh +30 -0
  156. package/domainforge-core/examples/evolution_semantics.sea +31 -0
  157. package/domainforge-core/examples/parser_demo.rs +203 -0
  158. package/domainforge-core/grammar/sea.pest +408 -0
  159. package/domainforge-core/schemas/calm-v1.schema.json +170 -0
  160. package/domainforge-core/schemas/shacl/sea_shapes.ttl +19 -0
  161. package/domainforge-core/src/authority/compiler.rs +309 -0
  162. package/domainforge-core/src/authority/environment.rs +203 -0
  163. package/domainforge-core/src/authority/error.rs +164 -0
  164. package/domainforge-core/src/authority/fact_resolver.rs +224 -0
  165. package/domainforge-core/src/authority/mod.rs +25 -0
  166. package/domainforge-core/src/authority/pack.rs +133 -0
  167. package/domainforge-core/src/authority/policy.rs +224 -0
  168. package/domainforge-core/src/authority/resolver.rs +446 -0
  169. package/domainforge-core/src/authority/trace.rs +217 -0
  170. package/domainforge-core/src/authority/transform.rs +168 -0
  171. package/domainforge-core/src/authority/types.rs +617 -0
  172. package/domainforge-core/src/bin/domainforge.rs +25 -0
  173. package/domainforge-core/src/calm/export.rs +538 -0
  174. package/domainforge-core/src/calm/import.rs +1220 -0
  175. package/domainforge-core/src/calm/mod.rs +9 -0
  176. package/domainforge-core/src/calm/models.rs +108 -0
  177. package/domainforge-core/src/calm/sbvr_import.rs +9 -0
  178. package/domainforge-core/src/cli/authority.rs +149 -0
  179. package/domainforge-core/src/cli/format.rs +85 -0
  180. package/domainforge-core/src/cli/import.rs +133 -0
  181. package/domainforge-core/src/cli/mod.rs +64 -0
  182. package/domainforge-core/src/cli/normalize.rs +180 -0
  183. package/domainforge-core/src/cli/pack.rs +904 -0
  184. package/domainforge-core/src/cli/parse.rs +112 -0
  185. package/domainforge-core/src/cli/project.rs +294 -0
  186. package/domainforge-core/src/cli/registry.rs +41 -0
  187. package/domainforge-core/src/cli/test.rs +12 -0
  188. package/domainforge-core/src/cli/validate.rs +195 -0
  189. package/domainforge-core/src/cli/validate_kg.rs +80 -0
  190. package/domainforge-core/src/concept_id.rs +89 -0
  191. package/domainforge-core/src/error/diagnostics.rs +426 -0
  192. package/domainforge-core/src/error/fuzzy.rs +253 -0
  193. package/domainforge-core/src/error/mod.rs +13 -0
  194. package/domainforge-core/src/formatter/comments.rs +223 -0
  195. package/domainforge-core/src/formatter/config.rs +114 -0
  196. package/domainforge-core/src/formatter/mod.rs +22 -0
  197. package/domainforge-core/src/formatter/printer.rs +906 -0
  198. package/domainforge-core/src/graph/mod.rs +858 -0
  199. package/domainforge-core/src/graph/to_ast.rs +66 -0
  200. package/domainforge-core/src/kg.rs +1476 -0
  201. package/domainforge-core/src/kg_import.rs +251 -0
  202. package/domainforge-core/src/lib.rs +203 -0
  203. package/domainforge-core/src/module/mod.rs +1 -0
  204. package/domainforge-core/src/module/resolver.rs +260 -0
  205. package/domainforge-core/src/parser/ast.rs +2919 -0
  206. package/domainforge-core/src/parser/ast_convert.rs +494 -0
  207. package/domainforge-core/src/parser/ast_schema.rs +491 -0
  208. package/domainforge-core/src/parser/error.rs +291 -0
  209. package/domainforge-core/src/parser/lint.rs +39 -0
  210. package/domainforge-core/src/parser/mod.rs +193 -0
  211. package/domainforge-core/src/parser/printer.rs +702 -0
  212. package/domainforge-core/src/parser/profiles.rs +71 -0
  213. package/domainforge-core/src/parser/string_utils.rs +138 -0
  214. package/domainforge-core/src/patterns.rs +68 -0
  215. package/domainforge-core/src/policy/core.rs +1148 -0
  216. package/domainforge-core/src/policy/expression.rs +399 -0
  217. package/domainforge-core/src/policy/mod.rs +18 -0
  218. package/domainforge-core/src/policy/normalize.rs +1028 -0
  219. package/domainforge-core/src/policy/quantifier.rs +940 -0
  220. package/domainforge-core/src/policy/three_valued.rs +140 -0
  221. package/domainforge-core/src/policy/three_valued_microbench.rs +104 -0
  222. package/domainforge-core/src/policy/type_inference.rs +67 -0
  223. package/domainforge-core/src/policy/violation.rs +36 -0
  224. package/domainforge-core/src/primitives/concept_change.rs +61 -0
  225. package/domainforge-core/src/primitives/entity.rs +224 -0
  226. package/domainforge-core/src/primitives/flow.rs +111 -0
  227. package/domainforge-core/src/primitives/instance.rs +93 -0
  228. package/domainforge-core/src/primitives/mapping_contract.rs +50 -0
  229. package/domainforge-core/src/primitives/metric.rs +79 -0
  230. package/domainforge-core/src/primitives/mod.rs +25 -0
  231. package/domainforge-core/src/primitives/projection_contract.rs +50 -0
  232. package/domainforge-core/src/primitives/quantity.rs +56 -0
  233. package/domainforge-core/src/primitives/relation.rs +68 -0
  234. package/domainforge-core/src/primitives/resource.rs +237 -0
  235. package/domainforge-core/src/primitives/resource_instance.rs +88 -0
  236. package/domainforge-core/src/primitives/role.rs +49 -0
  237. package/domainforge-core/src/projection/buf.rs +404 -0
  238. package/domainforge-core/src/projection/contracts.rs +22 -0
  239. package/domainforge-core/src/projection/engine.rs +19 -0
  240. package/domainforge-core/src/projection/mod.rs +16 -0
  241. package/domainforge-core/src/projection/protobuf.rs +3331 -0
  242. package/domainforge-core/src/projection/registry.rs +43 -0
  243. package/domainforge-core/src/python/authority.rs +253 -0
  244. package/domainforge-core/src/python/error.rs +227 -0
  245. package/domainforge-core/src/python/formatter.rs +86 -0
  246. package/domainforge-core/src/python/graph.rs +366 -0
  247. package/domainforge-core/src/python/mod.rs +9 -0
  248. package/domainforge-core/src/python/policy.rs +651 -0
  249. package/domainforge-core/src/python/primitives.rs +796 -0
  250. package/domainforge-core/src/python/registry.rs +98 -0
  251. package/domainforge-core/src/python/semantic_pack.rs +619 -0
  252. package/domainforge-core/src/python/units.rs +96 -0
  253. package/domainforge-core/src/registry/mod.rs +432 -0
  254. package/domainforge-core/src/registry/tests.rs +210 -0
  255. package/domainforge-core/src/sbvr.rs +744 -0
  256. package/domainforge-core/src/semantic_pack/builder.rs +470 -0
  257. package/domainforge-core/src/semantic_pack/canonical_json.rs +184 -0
  258. package/domainforge-core/src/semantic_pack/diagnostics.rs +214 -0
  259. package/domainforge-core/src/semantic_pack/diff.rs +216 -0
  260. package/domainforge-core/src/semantic_pack/mod.rs +31 -0
  261. package/domainforge-core/src/semantic_pack/pack_set.rs +240 -0
  262. package/domainforge-core/src/semantic_pack/resolver.rs +437 -0
  263. package/domainforge-core/src/semantic_pack/review.rs +125 -0
  264. package/domainforge-core/src/semantic_pack/schema.rs +342 -0
  265. package/domainforge-core/src/semantic_pack/signing.rs +105 -0
  266. package/domainforge-core/src/semantic_pack/validator.rs +368 -0
  267. package/domainforge-core/src/semantic_version.rs +140 -0
  268. package/domainforge-core/src/test_utils.rs +12 -0
  269. package/domainforge-core/src/typescript/authority.rs +184 -0
  270. package/domainforge-core/src/typescript/error.rs +146 -0
  271. package/domainforge-core/src/typescript/formatter.rs +76 -0
  272. package/domainforge-core/src/typescript/graph.rs +391 -0
  273. package/domainforge-core/src/typescript/mod.rs +9 -0
  274. package/domainforge-core/src/typescript/policy.rs +564 -0
  275. package/domainforge-core/src/typescript/primitives.rs +784 -0
  276. package/domainforge-core/src/typescript/registry.rs +88 -0
  277. package/domainforge-core/src/typescript/semantic_pack.rs +470 -0
  278. package/domainforge-core/src/typescript/units.rs +76 -0
  279. package/domainforge-core/src/units/mod.rs +462 -0
  280. package/domainforge-core/src/uuid_module.rs +42 -0
  281. package/domainforge-core/src/validation_error.rs +818 -0
  282. package/domainforge-core/src/validation_result.rs +30 -0
  283. package/domainforge-core/src/wasm/authority.rs +192 -0
  284. package/domainforge-core/src/wasm/error.rs +145 -0
  285. package/domainforge-core/src/wasm/formatter.rs +69 -0
  286. package/domainforge-core/src/wasm/graph.rs +471 -0
  287. package/domainforge-core/src/wasm/mod.rs +16 -0
  288. package/domainforge-core/src/wasm/policy.rs +607 -0
  289. package/domainforge-core/src/wasm/primitives.rs +295 -0
  290. package/domainforge-core/src/wasm/semantic_pack.rs +471 -0
  291. package/domainforge-core/src/wasm/units.rs +62 -0
  292. package/domainforge-core/std/aws.sea +6 -0
  293. package/domainforge-core/std/core.sea +6 -0
  294. package/domainforge-core/std/http.sea +27 -0
  295. package/domainforge-core/tests/aggregation_enhanced_tests.rs +162 -0
  296. package/domainforge-core/tests/aggregation_eval_tests.rs +248 -0
  297. package/domainforge-core/tests/aggregation_integration_tests.rs +379 -0
  298. package/domainforge-core/tests/aggregation_parser_tests.rs +92 -0
  299. package/domainforge-core/tests/aggregation_tests.rs +102 -0
  300. package/domainforge-core/tests/authority_conformance_tests.rs +1173 -0
  301. package/domainforge-core/tests/calm_round_trip_tests.rs +283 -0
  302. package/domainforge-core/tests/calm_schema_validation_tests.rs +137 -0
  303. package/domainforge-core/tests/cast_operator_tests.rs +85 -0
  304. package/domainforge-core/tests/cli_binary_check.rs +37 -0
  305. package/domainforge-core/tests/cli_import_tests.rs +291 -0
  306. package/domainforge-core/tests/cli_path_traversal_tests.rs +124 -0
  307. package/domainforge-core/tests/cli_tests.rs +63 -0
  308. package/domainforge-core/tests/diagnostics_tests.rs +203 -0
  309. package/domainforge-core/tests/dimension_unit_tests.rs +80 -0
  310. package/domainforge-core/tests/entity_tests.rs +69 -0
  311. package/domainforge-core/tests/evolution_semantics_tests.rs +157 -0
  312. package/domainforge-core/tests/flow_tests.rs +78 -0
  313. package/domainforge-core/tests/flow_unit_validation_tests.rs +31 -0
  314. package/domainforge-core/tests/graph_integration_tests.rs +218 -0
  315. package/domainforge-core/tests/graph_tests.rs +626 -0
  316. package/domainforge-core/tests/import_parsing_tests.rs +23 -0
  317. package/domainforge-core/tests/instance_integration_tests.rs +98 -0
  318. package/domainforge-core/tests/instance_parsing_tests.rs +58 -0
  319. package/domainforge-core/tests/instance_tests.rs +61 -0
  320. package/domainforge-core/tests/kg_uri_encoding_tests.rs +53 -0
  321. package/domainforge-core/tests/lint_tests.rs +19 -0
  322. package/domainforge-core/tests/metric_tests.rs +143 -0
  323. package/domainforge-core/tests/module_resolution_tests.rs +100 -0
  324. package/domainforge-core/tests/namespace_registry_tests.rs +247 -0
  325. package/domainforge-core/tests/null_handling_tests.rs +26 -0
  326. package/domainforge-core/tests/parser_ast_v3.rs +53 -0
  327. package/domainforge-core/tests/parser_dimension_registry_tests.rs +20 -0
  328. package/domainforge-core/tests/parser_integration_tests.rs +294 -0
  329. package/domainforge-core/tests/parser_metadata_tests.rs +97 -0
  330. package/domainforge-core/tests/parser_resource_domain_only_graph_test.rs +21 -0
  331. package/domainforge-core/tests/parser_resource_limits_tests.rs +122 -0
  332. package/domainforge-core/tests/parser_tests.rs +512 -0
  333. package/domainforge-core/tests/pattern_semantics_tests.rs +87 -0
  334. package/domainforge-core/tests/phase_14_determinism_tests.rs +166 -0
  335. package/domainforge-core/tests/phase_15_validation_error_tests.rs +136 -0
  336. package/domainforge-core/tests/phase_16_unicode_tests.rs +248 -0
  337. package/domainforge-core/tests/phase_17_export_tests.rs +285 -0
  338. package/domainforge-core/tests/phase_17_round_trip_tests.rs +264 -0
  339. package/domainforge-core/tests/policy_tests.rs +635 -0
  340. package/domainforge-core/tests/primitives_integration_tests.rs +151 -0
  341. package/domainforge-core/tests/print_rdf_xml.rs +14 -0
  342. package/domainforge-core/tests/printer_tests.rs +204 -0
  343. package/domainforge-core/tests/profile_tests.rs +35 -0
  344. package/domainforge-core/tests/projection_contracts_tests.rs +154 -0
  345. package/domainforge-core/tests/protobuf_projection_tests.rs +199 -0
  346. package/domainforge-core/tests/quantity_tests.rs +41 -0
  347. package/domainforge-core/tests/rdf_xml_typed_literal_tests.rs +105 -0
  348. package/domainforge-core/tests/registry_schema_tests.rs +33 -0
  349. package/domainforge-core/tests/resource_tests.rs +50 -0
  350. package/domainforge-core/tests/resource_unit_tests.rs +24 -0
  351. package/domainforge-core/tests/roles_relations_tests.rs +61 -0
  352. package/domainforge-core/tests/round_trip_tests.rs +34 -0
  353. package/domainforge-core/tests/runtime_toggle_tests.rs +70 -0
  354. package/domainforge-core/tests/sbvr_fact_schema_tests.rs +60 -0
  355. package/domainforge-core/tests/sbvr_flow_facts_tests.rs +55 -0
  356. package/domainforge-core/tests/sbvr_parsing_tests.rs +53 -0
  357. package/domainforge-core/tests/semantic_pack_alias_resolution.rs +197 -0
  358. package/domainforge-core/tests/semantic_pack_build.rs +302 -0
  359. package/domainforge-core/tests/semantic_pack_consumer_smoke.rs +150 -0
  360. package/domainforge-core/tests/semantic_pack_pack_set.rs +160 -0
  361. package/domainforge-core/tests/semantic_pack_signing.rs +157 -0
  362. package/domainforge-core/tests/semantic_pack_three_valued.rs +250 -0
  363. package/domainforge-core/tests/semantic_pack_validate.rs +196 -0
  364. package/domainforge-core/tests/std_lib_tests.rs +37 -0
  365. package/domainforge-core/tests/temporal_evaluation_tests.rs +159 -0
  366. package/domainforge-core/tests/temporal_semantics_tests.rs +214 -0
  367. package/domainforge-core/tests/three_valued_quantifiers_tests.rs +164 -0
  368. package/domainforge-core/tests/turtle_entity_export_tests.rs +38 -0
  369. package/domainforge-core/tests/turtle_escaping_tests.rs +53 -0
  370. package/domainforge-core/tests/turtle_resource_export_tests.rs +34 -0
  371. package/domainforge-core/tests/type_inference_tests.rs +40 -0
  372. package/domainforge-core/tests/unicode_validation_tests.rs +169 -0
  373. package/domainforge-core/tests/unit_tests.rs +81 -0
  374. package/domainforge-core/tests/validate_tests.rs +38 -0
  375. package/domainforge-core/tests/validation_unit_mismatch_tests.rs +83 -0
  376. package/domainforge-core/tests/wasm_tests.rs +229 -0
  377. package/domainforge-python/CHANGELOG-python.md +12 -0
  378. package/domainforge-python/MIGRATING.md +24 -0
  379. package/domainforge-python/README.md +256 -0
  380. package/domainforge-python/domainforge/__init__.py +95 -0
  381. package/domainforge-python/domainforge/domainforge.pyi +519 -0
  382. package/domainforge-python/pyproject.toml +36 -0
  383. package/domainforge-typescript/CHANGELOG-typescript.md +12 -0
  384. package/domainforge-typescript/LICENSE +201 -0
  385. package/domainforge-typescript/MIGRATING.md +24 -0
  386. package/domainforge-typescript/README.md +305 -0
  387. package/domainforge-typescript/index.d.ts +452 -0
  388. package/domainforge-typescript/index.js +361 -0
  389. package/domainforge-typescript/package.json +60 -0
  390. package/example.js +61 -0
  391. package/examples/browser.html +366 -0
  392. package/examples/namespaces/finance/cashflow.sea +5 -0
  393. package/examples/namespaces/logistics/core.sea +7 -0
  394. package/examples/observability_metrics.sea +38 -0
  395. package/fixtures/semantic_packs/acme_procurement/domain/entities.sea +39 -0
  396. package/fixtures/semantic_packs/acme_procurement/domain/metrics.sea +11 -0
  397. package/fixtures/semantic_packs/acme_procurement/domain/relations.sea +7 -0
  398. package/fixtures/semantic_packs/acme_procurement/domain/resources.sea +9 -0
  399. package/fixtures/semantic_packs/acme_procurement/review/acme.procurement.semantic-review.jsonl +7 -0
  400. package/fixtures/semantic_packs/acme_procurement/tests/ambiguous_vendor_alias.sea +8 -0
  401. package/fixtures/semantic_packs/acme_procurement/tests/deprecated_vendor_alias.sea +8 -0
  402. package/fixtures/semantic_packs/acme_procurement/tests/invalid_relation.sea +3 -0
  403. package/fixtures/semantic_packs/acme_procurement/tests/proposed_concept.sea +8 -0
  404. package/fixtures/semantic_packs/acme_procurement/tests/rejected_concept.sea +8 -0
  405. package/fixtures/semantic_packs/acme_procurement/tests/unit_mismatch.sea +7 -0
  406. package/fixtures/semantic_packs/acme_procurement/tests/unknown_vendor_policy.sea +8 -0
  407. package/fixtures/semantic_packs/acme_procurement/tests/valid_purchase_policy.sea +8 -0
  408. package/index.d.ts +2 -0
  409. package/index.js +8 -0
  410. package/justfile +200 -0
  411. package/lefthook.yml +13 -0
  412. package/lib/validate_native_exports.d.ts +4 -0
  413. package/lib/validate_native_exports.js +12 -0
  414. package/package.json +22 -0
  415. package/pytest.ini +5 -0
  416. package/python/tests/test_registry.py +75 -0
  417. package/python/tests/test_units.py +18 -0
  418. package/release-please-config.json +49 -0
  419. package/requirements-dev.txt +3 -0
  420. package/requirements.txt +3 -0
  421. package/rust-toolchain.toml +3 -0
  422. package/schemas/ast-v1.schema.json +72 -0
  423. package/schemas/ast-v2.schema.json +1200 -0
  424. package/schemas/ast-v3.schema.json +1200 -0
  425. package/schemas/sea-registry.schema.json +45 -0
  426. package/scripts/build-python.sh +37 -0
  427. package/scripts/build-release.sh +279 -0
  428. package/scripts/build-typescript.sh +13 -0
  429. package/scripts/build-wasm.sh +113 -0
  430. package/scripts/bump-version.sh +245 -0
  431. package/scripts/check_unused_test_imports.py +85 -0
  432. package/scripts/ci_tasks.py +379 -0
  433. package/scripts/clear_debug_test.sh +10 -0
  434. package/scripts/create-github-release.sh +262 -0
  435. package/scripts/create-tag.sh +203 -0
  436. package/scripts/find_and_link_test_binary.sh +70 -0
  437. package/scripts/generate-changelog.sh +271 -0
  438. package/scripts/generate-release-notes.sh +205 -0
  439. package/scripts/lint_release_security.py +96 -0
  440. package/scripts/lint_release_workflows.py +82 -0
  441. package/scripts/lint_workflow_gates.py +113 -0
  442. package/scripts/optimized-wasm-build.sh +61 -0
  443. package/scripts/patch_napi_types.py +62 -0
  444. package/scripts/pre-release-check.sh +289 -0
  445. package/scripts/prepare_rust_debug.sh +52 -0
  446. package/scripts/release.sh +373 -0
  447. package/scripts/resolve_rust_binary.py +230 -0
  448. package/scripts/run_commitlint.sh +29 -0
  449. package/scripts/test-all.sh +77 -0
  450. package/scripts/update_launch_program.py +93 -0
  451. package/secrets/README.md +27 -0
  452. package/secrets/secrets.yaml +21 -0
  453. package/test_integration.py +67 -0
  454. package/tests/test_authority.py +328 -0
  455. package/tests/test_ci_tasks.py +143 -0
  456. package/tests/test_expression.py +256 -0
  457. package/tests/test_golden_payment_flow.py +42 -0
  458. package/tests/test_graph.py +127 -0
  459. package/tests/test_instance.py +136 -0
  460. package/tests/test_parser.py +82 -0
  461. package/tests/test_primitives.py +68 -0
  462. package/tests/test_role_relation_parity.py +56 -0
  463. package/tests/test_runtime_toggle.py +156 -0
  464. package/tests/test_semantic_pack.py +639 -0
  465. package/tests/test_three_valued_eval.py +159 -0
  466. package/tsconfig.json +30 -0
  467. package/typescript-tests/advanced.test.ts +165 -0
  468. package/typescript-tests/authority.test.ts +216 -0
  469. package/typescript-tests/expression.test.ts +228 -0
  470. package/typescript-tests/golden-payment-flow.test.ts +51 -0
  471. package/typescript-tests/graph.test.ts +142 -0
  472. package/typescript-tests/native-binding.test.ts +20 -0
  473. package/typescript-tests/primitives.test.ts +88 -0
  474. package/typescript-tests/registry.test.ts +122 -0
  475. package/typescript-tests/role_relation.test.ts +63 -0
  476. package/typescript-tests/runtime_toggle.test.ts +141 -0
  477. package/typescript-tests/semantic-pack.test.ts +556 -0
  478. package/typescript-tests/three_valued_eval.test.ts +135 -0
  479. package/typescript-tests/units.test.ts +36 -0
  480. package/vitest.config.ts +13 -0
  481. 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).