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
package/README.md ADDED
@@ -0,0 +1,660 @@
1
+ # πŸ›οΈ DomainForge
2
+
3
+ ## Executable domain meaning for humans, agents, and systems
4
+
5
+ > Business rules should not live in folklore, stale PDFs, and three different implementations. DomainForge turns domain meaning into readable, executable structure that can move across languages, runtimes, and governance surfaces.
6
+
7
+ [![Rust](https://img.shields.io/badge/rust-1.92%2B-orange.svg)](https://www.rust-lang.org/)
8
+ [![Python](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
9
+ [![TypeScript](https://img.shields.io/badge/typescript-5.0%2B-blue.svg)](https://www.typescriptlang.org/)
10
+ [![WASM](https://img.shields.io/badge/wasm-ready-purple.svg)](https://webassembly.org/)
11
+ [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
12
+ [![CI](https://github.com/GodSpeedAI/DomainForge/actions/workflows/ci.yml/badge.svg)](https://github.com/GodSpeedAI/DomainForge/actions/workflows/ci.yml)
13
+
14
+ ---
15
+
16
+ ## The Drift Problem
17
+
18
+ Every organization has domain truth: the rules, entities, flows, policies, metrics, and relationships that define how the business actually works.
19
+
20
+ The problem is that this meaning usually gets scattered.
21
+
22
+ - Analysts describe it in documents.
23
+ - Developers reimplement it in services.
24
+ - Frontends rebuild parts of it again.
25
+ - Architects model it somewhere else.
26
+ - Auditors ask where it is enforced.
27
+ - Agents receive fragments and improvise.
28
+
29
+ That is not governance. That is a scavenger hunt.
30
+
31
+ DomainForge gives teams a semantic source of truth for domain structure: human-readable, machine-executable, versionable, and projectable into the systems that need to use it.
32
+
33
+ Analysts can read it. Developers can bind to it. Agents can reason over it. Governance systems can inspect it. Architecture tools can project it.
34
+
35
+ Not documentation hoping to be obeyed. Executable meaning with receipts.
36
+
37
+ | What You Get | Why It Matters |
38
+ | --- | --- |
39
+ | **One model, every language** | Python validation and TypeScript validation can use the same declared domain structure. |
40
+ | **Fast rule checking** | Current benchmarks include validation of 10,000 entities in under 100 milliseconds. |
41
+ | **Business-readable, machine-executable structure** | Analysts can read the rules. Systems can parse, validate, and enforce them. |
42
+ | **Architecture-as-Code projection** | Export to FINOS CALM for enterprise architecture and governance workflows. |
43
+ | **Structured validation and deterministic projection surfaces** | Not just documentation β€” rules that can be parsed, checked, projected, and tested. |
44
+
45
+ ---
46
+
47
+ ## See It Working: 60 Seconds
48
+
49
+ ```python
50
+ import domainforge
51
+
52
+ graph = domainforge.Graph()
53
+
54
+ # Define WHO does the work
55
+ warehouse = domainforge.Entity("Warehouse", "logistics")
56
+ assembly_line = domainforge.Entity("Assembly Line A", "manufacturing")
57
+ graph.add_entity(warehouse)
58
+ graph.add_entity(assembly_line)
59
+
60
+ # Define WHAT moves between them
61
+ cameras = domainforge.Resource("Camera", "units")
62
+ graph.add_resource(cameras)
63
+
64
+ # Define HOW much moves
65
+ flow = domainforge.Flow(
66
+ cameras.id(),
67
+ assembly_line.id(),
68
+ warehouse.id(),
69
+ 1000.0
70
+ )
71
+ graph.add_flow(flow)
72
+
73
+ # Validate everything
74
+ print(f"Entities: {graph.entity_count()}")
75
+ print(f"Flows: {graph.flow_count()}")
76
+ ```
77
+
78
+ **That's it.** You just created an executable domain model that:
79
+
80
+ - Defines entities, resources, and flows as a typed graph
81
+ - Uses the same Rust-backed core semantics across Python, TypeScript, Rust, and browser/WASM surfaces
82
+ - Exports to FINOS CALM for architecture governance
83
+ - Becomes a source of truth teams can inspect, test, version, and govern
84
+
85
+ ---
86
+
87
+ ## Install in 30 Seconds
88
+
89
+ ```bash
90
+ # Python
91
+ pip install domainforge
92
+
93
+ # TypeScript / Node.js
94
+ npm install @godspeedai/domainforge
95
+
96
+ # Rust
97
+ cargo add domainforge-core
98
+
99
+ # Verify it works
100
+ python -c "import domainforge; print('βœ… Ready:', domainforge.__version__)"
101
+ ```
102
+
103
+ > πŸ’‘ Pre-built packages for PyPI, npm, and Crates.io. Build from source if pre-built wheels/binaries are not yet available for your platform.
104
+
105
+ ---
106
+
107
+ ## Use DomainForge Anywhere
108
+
109
+ DomainForge is stack-agnostic.
110
+
111
+ It does **not** require the GodSpeed AI ecosystem. It does not require SEA-Forge, SWE_SEED, GodSpeed-Agent, a specific agent runtime, a specific cloud, or a specific governance platform.
112
+
113
+ You can use DomainForge as a standalone Apache 2.0 semantic/domain layer in:
114
+
115
+ - internal tools
116
+ - backend services
117
+ - frontend validation
118
+ - architecture repositories
119
+ - agent runtimes
120
+ - policy engines
121
+ - knowledge graphs
122
+ - compliance workflows
123
+ - browser/WASM applications
124
+ - Python, TypeScript, and Rust systems
125
+
126
+ DomainForge's value is self-contained: it makes domain meaning readable, executable, portable, and testable.
127
+
128
+ Within the broader GodSpeed AI stack, DomainForge can also serve as the semantic layer:
129
+
130
+ ```text
131
+ DomainForge defines the domain.
132
+ SEA-Forge governs the work.
133
+ SWE_SEED proves the change.
134
+ GodSpeed-Agent compounds the capability.
135
+ ```
136
+
137
+ That stack is optional. DomainForge stands on its own.
138
+
139
+ ---
140
+
141
+ ## Who Benefits?
142
+
143
+ <table>
144
+ <tr>
145
+ <td width="50%">
146
+
147
+ ### πŸ’Ό Business Analysts
148
+
149
+ **"I can finally model our processes without waiting for every rule to become custom code."**
150
+
151
+ - Write rules in controlled natural language
152
+ - Get validation feedback
153
+ - See the same domain model developers use
154
+
155
+ </td>
156
+ <td width="50%">
157
+
158
+ ### πŸ›οΈ Enterprise Architects
159
+
160
+ **"We can make business architecture executable and projectable."**
161
+
162
+ - Export to FINOS CALM
163
+ - Preserve semantic consistency across systems
164
+ - Integrate with architecture and governance workflows
165
+
166
+ </td>
167
+ </tr>
168
+ <tr>
169
+ <td width="50%">
170
+
171
+ ### πŸ’» Software Developers
172
+
173
+ **"Type-safe domain models that work across our stack."**
174
+
175
+ - Native APIs for Python, TypeScript, Rust, and WASM
176
+ - Runtime validation backed by a Rust core
177
+ - Less duplicate business logic across services and frontends
178
+
179
+ </td>
180
+ <td width="50%">
181
+
182
+ ### πŸ“‹ Compliance and Governance Teams
183
+
184
+ **"Policies can become executable, auditable structures."**
185
+
186
+ - Express complex rules in controlled language
187
+ - Check policies against declared domain structure
188
+ - Preserve inspectable traces of policy changes and decisions
189
+
190
+ </td>
191
+ </tr>
192
+ </table>
193
+
194
+ ---
195
+
196
+ ## How It Works: Six Core Building Blocks
197
+
198
+ DomainForge starts with **six core concepts**:
199
+
200
+ | Concept | What It Represents | Example |
201
+ | --- | --- | --- |
202
+ | **🏒 Entity** | Actors and locations in your system | Assembly Line, Customer, Warehouse |
203
+ | **πŸ“¦ Resource** | Things of value that move | Products, Money, Information |
204
+ | **πŸ”„ Flow** | Movement between entities | Shipments, Payments, Work Orders |
205
+ | **πŸ”– Instance** | Specific, trackable items | Camera #SN12345, Invoice #INV-2024 |
206
+ | **πŸ” Pattern** | Reusable validation patterns | Email format, SKU codes |
207
+ | **πŸ“œ Policy** | Business rules and constraints | "All shipments must be inspected" |
208
+
209
+ That is the starting vocabulary. More advanced declarations β€” roles, relations, dimensions, units, metrics, mappings, projections, and concept changes β€” extend the model when the domain needs more structure.
210
+
211
+ No magic syntax. No framework lock-in. Just executable domain meaning.
212
+
213
+ ---
214
+
215
+ ## SEA DSL Syntax
216
+
217
+ Write models directly in `.sea` files β€” human-readable, version-controllable, and parseable by all bindings.
218
+
219
+ ### Basic Example
220
+
221
+ ```sea
222
+ // Define entities (who/where)
223
+ Entity "Warehouse" in logistics
224
+ Entity "Factory" in manufacturing
225
+
226
+ // Define resources (what moves)
227
+ Resource "Camera" units in inventory
228
+
229
+ // Define flows (how things move)
230
+ Flow "Camera" from "Warehouse" to "Factory" quantity 100
231
+
232
+ // Define validation patterns
233
+ Pattern "SKU" matches "^[A-Z]{3}-[0-9]{4}$"
234
+
235
+ // Define business rules
236
+ Policy min_shipment as: quantity >= 10
237
+ ```
238
+
239
+ ### Advanced Features
240
+
241
+ ```sea
242
+ // Versioned entities with evolution tracking
243
+ Entity "Vendor" v2.0.0
244
+ @replaces "Supplier" v1.0.0
245
+ @changes ["renamed", "added_fields"]
246
+
247
+ // Roles and relations
248
+ Role "Approver" in governance
249
+
250
+ Relation "Payment"
251
+ subject: "Buyer"
252
+ predicate: "pays"
253
+ object: "Seller"
254
+ via: flow "Money"
255
+
256
+ // Typed instances
257
+ Instance acme_corp of "Vendor" {
258
+ name: "Acme Corporation",
259
+ credit_limit: 50000 "USD"
260
+ }
261
+
262
+ // Quantified policy expressions
263
+ Policy all_shipments_inspected as:
264
+ forall s in flows: (s.inspected = true)
265
+ ```
266
+
267
+ ### All Declaration Types
268
+
269
+ | Declaration | Syntax |
270
+ | --- | --- |
271
+ | Entity | `Entity "Name" [vX.Y.Z] [in domain]` |
272
+ | Resource | `Resource "Name" [unit] [in domain]` |
273
+ | Flow | `Flow "Resource" from "A" to "B" [quantity N]` |
274
+ | Pattern | `Pattern "Name" matches "regex"` |
275
+ | Role | `Role "Name" [in domain]` |
276
+ | Relation | `Relation "Name" subject: ... predicate: ... object: ...` |
277
+ | Instance | `Instance id of "Entity" { field: value }` |
278
+ | Policy | `Policy name as: expression` |
279
+ | Dimension | `Dimension "Name"` |
280
+ | Unit | `Unit "Name" of "Dimension" factor N base "Base"` |
281
+ | Metric | `Metric "Name" as: expression` |
282
+ | Mapping | `Mapping "Name" for format { ... }` |
283
+ | Projection | `Projection "Name" for format { ... }` |
284
+ | ConceptChange | `ConceptChange "Name" @from_version ... @to_version ...` |
285
+
286
+ ---
287
+
288
+ ## Real-World Impact
289
+
290
+ <details>
291
+ <summary><strong>🏭 Manufacturing: Assembly Line Control</strong> (click to expand)</summary>
292
+
293
+ ```python
294
+ import domainforge
295
+
296
+ graph = domainforge.Graph()
297
+
298
+ # Define the supply chain
299
+ supplier = domainforge.Entity("Component Supplier", "supply")
300
+ assembly = domainforge.Entity("Assembly Line A", "manufacturing")
301
+ quality_control = domainforge.Entity("QC Department", "quality")
302
+ finished_goods = domainforge.Entity("Finished Goods Warehouse", "logistics")
303
+ graph.add_entity(supplier)
304
+ graph.add_entity(assembly)
305
+ graph.add_entity(quality_control)
306
+ graph.add_entity(finished_goods)
307
+
308
+ # Define what's being built
309
+ pcb_board = domainforge.Resource("PCB Board", "pieces")
310
+ camera_module = domainforge.Resource("Camera Module", "units")
311
+ graph.add_resource(pcb_board)
312
+ graph.add_resource(camera_module)
313
+
314
+ # Define the flow of components
315
+ component_delivery = domainforge.Flow(
316
+ pcb_board.id(),
317
+ supplier.id(),
318
+ assembly.id(),
319
+ 500.0
320
+ )
321
+ graph.add_flow(component_delivery)
322
+ ```
323
+
324
+ **Result:** Inventory constraints can be checked before they turn into production delays.
325
+
326
+ </details>
327
+
328
+ <details>
329
+ <summary><strong>πŸ’° Finance: Payment Fraud Detection</strong> (click to expand)</summary>
330
+
331
+ ```typescript
332
+ import { Graph, Entity, Resource, Flow } from "@godspeedai/domainforge";
333
+
334
+ const graph = new Graph();
335
+
336
+ const customer = new Entity("Customer Account");
337
+ const merchant = new Entity("Merchant Account");
338
+ const gateway = new Entity("Payment Gateway");
339
+ graph.addEntity(customer);
340
+ graph.addEntity(merchant);
341
+ graph.addEntity(gateway);
342
+
343
+ const money = new Resource("USD", "dollars");
344
+ graph.addResource(money);
345
+
346
+ // Track payment flows
347
+ const payment = new Flow(money.id, customer.id, merchant.id, 100);
348
+ graph.addFlow(payment);
349
+ ```
350
+
351
+ **Result:** The same domain model can support policy checks before downstream action.
352
+
353
+ </details>
354
+
355
+ <details>
356
+ <summary><strong>🚚 Logistics: Cross-Border Compliance</strong> (click to expand)</summary>
357
+
358
+ ```python
359
+ import domainforge
360
+
361
+ graph = domainforge.Graph()
362
+
363
+ # Multi-location warehouses
364
+ warehouse_us = domainforge.Entity("US Distribution Center", "logistics")
365
+ warehouse_us.set_attribute("location", "USA")
366
+
367
+ warehouse_eu = domainforge.Entity("EU Distribution Center", "logistics")
368
+ warehouse_eu.set_attribute("location", "Germany")
369
+
370
+ retail_store = domainforge.Entity("Retail Store", "logistics")
371
+ retail_store.set_attribute("location", "France")
372
+
373
+ graph.add_entity(warehouse_us)
374
+ graph.add_entity(warehouse_eu)
375
+ graph.add_entity(retail_store)
376
+
377
+ product = domainforge.Resource("Widget", "boxes")
378
+ graph.add_resource(product)
379
+
380
+ # Create cross-border flow
381
+ shipment = domainforge.Flow(
382
+ product.id(),
383
+ warehouse_eu.id(),
384
+ retail_store.id(),
385
+ 250.0
386
+ )
387
+ graph.add_flow(shipment)
388
+ ```
389
+
390
+ **Result:** Cross-border requirements can be modeled as enforceable policy instead of scattered checklist logic.
391
+
392
+ </details>
393
+
394
+ ---
395
+
396
+ ## Technical Foundation
397
+
398
+ <details>
399
+ <summary><strong>⚑ Performance Characteristics</strong></summary>
400
+
401
+ - **Rust core** for performance-critical validation
402
+ - **FFI overhead < 1ms** per operation
403
+ - **Streaming validation** for large models
404
+
405
+ See [benchmarks](docs/explanations/performance-benchmarks.md) for measured results.
406
+
407
+ </details>
408
+
409
+ <details>
410
+ <summary><strong>πŸ”Œ Language Bindings</strong></summary>
411
+
412
+ **Python (PyO3):**
413
+
414
+ ```python
415
+ import domainforge
416
+
417
+ d = domainforge.Dimension.parse("currency")
418
+ u = domainforge.Unit("USD", "US Dollar", "Currency", 1.0, "USD")
419
+ ```
420
+
421
+ **TypeScript (napi-rs):**
422
+
423
+ ```typescript
424
+ import { Dimension, Unit } from "@godspeedai/domainforge";
425
+
426
+ const d = Dimension.parse("currency");
427
+ const u = new Unit("USD", "US Dollar", "Currency", 1.0, "USD");
428
+ ```
429
+
430
+ **WASM (browser):**
431
+
432
+ ```javascript
433
+ import init, { Dimension, Unit } from "./domainforge_core.js";
434
+ await init();
435
+
436
+ const d = new Dimension("currency");
437
+ const u = new Unit("USD", "US Dollar", "Currency", 1.0, "USD");
438
+
439
+ // Programmatic Expression Building & Normalization
440
+ const expr = Expression.binary(
441
+ BinaryOp.And,
442
+ Expression.variable("b"),
443
+ Expression.variable("a")
444
+ );
445
+ console.log(expr.normalize().toStringRepr()); // "(a AND b)"
446
+ ```
447
+
448
+ Bindings are designed to preserve the same core semantics across runtimes, with conformance tests guarding against behavioral drift.
449
+
450
+ </details>
451
+
452
+ <details>
453
+ <summary><strong>πŸ—οΈ Architecture</strong></summary>
454
+
455
+ ```text
456
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
457
+ β”‚ Your Application β”‚
458
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
459
+ β”‚ Python API β”‚ TypeScript β”‚ WASM β”‚
460
+ β”‚ (PyO3) β”‚ (napi-rs) β”‚ (wasm-bindgen) β”‚
461
+ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
462
+ β”‚ Rust Core Engine (domainforge-core) β”‚
463
+ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
464
+ β”‚ β”‚ Primitives β”‚ Graph Store β”‚ Policy Engine β”‚ β”‚
465
+ β”‚ β”‚ Parser β”‚ Validator β”‚ CALM Export β”‚ β”‚
466
+ β”‚ β”‚ Authority β”‚ Fact Store β”‚ Provenance β”‚ β”‚
467
+ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
468
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
469
+ ```
470
+
471
+ **Design Principles:**
472
+
473
+ 1. **Rust core is canonical.** Bindings wrap core behavior instead of duplicating logic.
474
+ 2. **Deterministic behavior.** Stable ordering supports repeatable outputs across runs.
475
+ 3. **Standards-aware projection.** SBVR-aligned expressions and FINOS CALM export help domain models travel into enterprise architecture workflows.
476
+
477
+ </details>
478
+
479
+ <details>
480
+ <summary><strong>πŸ”§ CLI Usage</strong></summary>
481
+
482
+ ```bash
483
+ # Install the CLI
484
+ cargo install --path domainforge-core --features cli
485
+
486
+ # Validate a model
487
+ domainforge validate model.sea
488
+
489
+ # Export to FINOS CALM
490
+ domainforge project --format calm model.sea architecture.json
491
+
492
+ # Import from Knowledge Graph
493
+ domainforge import --format kg model.ttl
494
+
495
+ # Normalize Expressions
496
+ domainforge normalize "b AND a" # -> "(a AND b)"
497
+
498
+ # Evaluate authority decisions
499
+ domainforge authority config.json request.json --facts facts.json --json
500
+ ```
501
+
502
+ [Full CLI Reference β†’](docs/reference/cli-commands.md)
503
+
504
+ </details>
505
+
506
+ <details>
507
+ <summary><strong>πŸ›‘οΈ Policy Authority</strong></summary>
508
+
509
+ DomainForge includes a **Policy Authority** system that makes business authority executable, deterministic, fact-grounded, and traceable.
510
+
511
+ **Key capabilities:**
512
+
513
+ - **Four policy modalities:** Permission, Prohibition, Obligation, Override
514
+ - **Trusted fact provenance:** Caller-supplied facts are untrusted by default
515
+ - **Three-valued logic:** True, False, and Unknown with modality-aware unknown handling
516
+ - **Deterministic conflict resolution:** Modality precedence β†’ priority β†’ specificity vector dominance
517
+ - **Replayable audit traces:** Every decision produces a complete `AuthorityTrace`
518
+
519
+ ```python
520
+ from domainforge import AuthorityEnvironment
521
+
522
+ # Create environment from config
523
+ env = AuthorityEnvironment(config_json)
524
+ env.validate()
525
+
526
+ # Evaluate an authority request
527
+ trace_json, decision_json = env.evaluate(request_json, facts_json)
528
+ ```
529
+
530
+ ```typescript
531
+ import { evaluateAuthority } from '@godspeedai/domainforge';
532
+
533
+ const result = evaluateAuthority(configJson, requestJson, factsJson);
534
+ console.log(result.decisionJson);
535
+ ```
536
+
537
+ **Decision outcomes:** `Allow`, `Deny`, `Escalate`, `NotApplicable`, `Reject`
538
+
539
+ **Safety guarantees:**
540
+
541
+ - No authority without declared semantics
542
+ - No decision without trusted facts
543
+ - No trust upgrade through derivation
544
+ - No allow from unknown permission
545
+ - No weakened prohibition from omitted facts
546
+ - No scalar specificity shortcuts
547
+
548
+ </details>
549
+
550
+ <details>
551
+ <summary><strong>πŸ” Error Diagnostics</strong></summary>
552
+
553
+ Comprehensive error handling with fuzzy matching suggestions:
554
+
555
+ ```text
556
+ Error[E001]: Undefined Entity: 'Warehous' at line 1
557
+ --> 1:23
558
+ |
559
+ 1 | Flow "Materials" from "Warehous" to "Factory"
560
+ | ^^^^^^^^^^
561
+ |
562
+ hint: Did you mean 'Warehouse'?
563
+ ```
564
+
565
+ - **30+ structured error codes** with detailed descriptions
566
+ - **Multiple output formats**: JSON, human-readable, LSP
567
+ - **Native error types** for Python, TypeScript, and WASM
568
+
569
+ [Error Code Catalog β†’](docs/reference/error-codes.md)
570
+
571
+ </details>
572
+
573
+ ---
574
+
575
+ ## Getting Started
576
+
577
+ ### Quick Start
578
+
579
+ ```bash
580
+ # Clone and set up
581
+ git clone https://github.com/GodSpeedAI/DomainForge.git
582
+ cd DomainForge
583
+ pip install maturin
584
+ maturin develop
585
+
586
+ # Run your first model
587
+ python examples/camera_factory.py
588
+ ```
589
+
590
+ ### Running Tests
591
+
592
+ ```bash
593
+ # Per-language tests
594
+ just rust-test # Rust core
595
+ just python-test # Python bindings
596
+ just ts-test # TypeScript bindings
597
+
598
+ # All tests at once
599
+ just all-tests
600
+ ```
601
+
602
+ ### Build from Source
603
+
604
+ ```bash
605
+ # Python bindings
606
+ pip install maturin && maturin build --release
607
+
608
+ # TypeScript bindings
609
+ npm install && npm run build
610
+
611
+ # WebAssembly
612
+ ./scripts/build-wasm.sh
613
+ ```
614
+
615
+ ---
616
+
617
+ ## Documentation
618
+
619
+ | Resource | Description |
620
+ | --- | --- |
621
+ | πŸ“˜ [**Copilot Instructions**](.github/copilot-instructions.md) | Essential guide for AI coding agents |
622
+ | πŸ“— [**Product Requirements**](docs/specs/PRD-001-sea-projection-framework.md) | PRD with success metrics |
623
+ | πŸ“• [**System Design**](docs/specs/SDS-002-domainforge-core-architecture.md) | Technical specifications |
624
+ | πŸ›οΈ [**Architecture Decisions**](docs/specs/ADR-001-sea-dsl-semantic-source-of-truth.md) | Key architectural choices |
625
+ | πŸ—ΊοΈ [**CALM Mapping**](docs/reference/calm-mapping.md) | SEA ↔ CALM conversion |
626
+ | πŸ“– [**Error Codes**](docs/reference/error-codes.md) | Validation error reference |
627
+ | πŸ”§ [**CLI Reference**](docs/reference/cli-commands.md) | CLI commands and usage |
628
+
629
+ ---
630
+
631
+ ## Contributing
632
+
633
+ We welcome contributions. Please see [Contributing Guide](CONTRIBUTING.md) for developer notes on building the CLI, TypeScript bindings, and WASM.
634
+
635
+ ---
636
+
637
+ ## License
638
+
639
+ DomainForge is open source under the [Apache-2.0 License](LICENSE).
640
+
641
+ ---
642
+
643
+ ## Acknowledgments
644
+
645
+ Built on foundational work from:
646
+
647
+ - **[ERP5 Unified Business Model](https://www.erp5.com/)** β€” Foundational primitive design
648
+ - **[SBVR Standard (OMG)](https://www.omg.org/spec/SBVR/)** β€” Semantic business vocabulary
649
+ - **[FINOS CALM](https://github.com/finos/architecture-as-code)** β€” Architecture-as-Code integration
650
+ - **[Rust Community](https://www.rust-lang.org/)** β€” High-performance core runtime
651
+
652
+ ---
653
+
654
+ <div align="center">
655
+
656
+ **Make business meaning executable.**
657
+
658
+ [Get Started β†’](#install-in-30-seconds) Β· [Read the Docs β†’](#documentation) Β· [See Examples β†’](#real-world-impact)
659
+
660
+ </div>