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,664 @@
1
+ # Error Code Catalog
2
+
3
+ This document provides a comprehensive catalog of all error codes used in the SEA DSL validation system.
4
+
5
+ ## Error Code Format
6
+
7
+ Error codes follow the format `EXXX` where:
8
+
9
+ - `E` indicates an error
10
+ - `XXX` is a three-digit number organized by category
11
+
12
+ ## Error Categories
13
+
14
+ - **E001-E099**: Syntax and Parsing Errors
15
+ - **E100-E199**: Type System Errors
16
+ - **E200-E299**: Unit and Dimension Errors
17
+ - **E300-E399**: Scope and Reference Errors
18
+ - **E400-E499**: Policy Validation Errors
19
+ - **E500-E599**: Namespace and Module Errors
20
+
21
+ ---
22
+
23
+ ## E001-E099: Syntax and Parsing Errors
24
+
25
+ _Note:_ Codes in the range **E011–E099** are currently reserved for future syntax/parse error additions and will be documented as the project expands. For now, E001–E010 cover the commonly used parsing diagnostics.
26
+
27
+ ### E001: Undefined Entity
28
+
29
+ **Description**: Reference to an entity that has not been defined.
30
+
31
+ **Example**:
32
+
33
+ ```sea
34
+ Flow "Materials" from "Warehouse" to "Factory" quantity 100
35
+ // Error: Entity "Warehouse" is not defined
36
+ ```
37
+
38
+ **Common Fixes**:
39
+
40
+ - Define the entity before referencing it
41
+ - Check for typos in the entity name
42
+ - Ensure the entity is in the correct namespace
43
+
44
+ **Suggestion**: The error will suggest similar entity names if available using fuzzy matching.
45
+
46
+ ---
47
+
48
+ ### E002: Undefined Resource
49
+
50
+ **Description**: Reference to a resource that has not been defined.
51
+
52
+ **Example**:
53
+
54
+ ```sea
55
+ Flow "Steel" from "Supplier" to "Factory" quantity 100
56
+ // Error: Resource "Steel" is not defined
57
+ ```
58
+
59
+ **Common Fixes**:
60
+
61
+ - Define the resource before using it
62
+ - Check for typos in the resource name
63
+ - Verify the resource is in scope
64
+
65
+ **Suggestion**: The error will suggest similar resource names if available.
66
+
67
+ ---
68
+
69
+ ### E003: Unit Mismatch (moved)
70
+
71
+ **Description**: This entry was previously documented in the Syntax/Parsing section and has been moved to the Unit/Dimension category (E200–E299). See `E200: Dimension Mismatch` and `E203: Incompatible Dimensions` for details and suggested fixes.
72
+
73
+ ---
74
+
75
+ _Note:_ The old `E004: Type Mismatch` entry has been moved into the Type System section (E100–E199). See `E100: Incompatible Types` for details and suggested fixes.
76
+
77
+ ---
78
+
79
+ ### E005: Syntax Error
80
+
81
+ **Description**: General syntax error in DSL parsing.
82
+
83
+ **Example**:
84
+
85
+ ```sea
86
+ Entity "Warehouse" in logistics
87
+ Flow "Materials" from "Warehouse" to // Missing destination
88
+ ```
89
+
90
+ **Common Fixes**:
91
+
92
+ - Check for missing or extra tokens
93
+ - Verify proper DSL syntax
94
+ - Look for unclosed quotes or brackets
95
+
96
+ **Suggestion**: Shows line and column of the error.
97
+
98
+ ---
99
+
100
+ ### E006: Invalid Expression
101
+
102
+ **Description**: An expression that is syntactically valid but semantically invalid.
103
+
104
+ **Example**:
105
+
106
+ ```sea
107
+ Entity "API"
108
+ Resource "Payload" units
109
+ Flow "Payload" from "API" to "API"
110
+
111
+ Policy invalid_expr as:
112
+ Payload and 42
113
+ // Error: mixes a resource reference and a number without a valid operator
114
+ ```
115
+
116
+ **Common Fixes**:
117
+
118
+ - Review expression logic
119
+ - Check operator precedence
120
+ - Verify operand types
121
+
122
+ ---
123
+
124
+ ### E007: Duplicate Declaration
125
+
126
+ **Description**: An entity, resource, or other item is declared more than once.
127
+
128
+ **Example**:
129
+
130
+ ```sea
131
+ Entity "Warehouse" in logistics
132
+ Entity "Warehouse" in manufacturing
133
+ // Error: "Warehouse" is already defined
134
+ ```
135
+
136
+ **Common Fixes**:
137
+
138
+ - Use unique names for each declaration
139
+ - Remove duplicate declarations
140
+ - Use namespaces to avoid conflicts
141
+
142
+ **Suggestion**: Shows both declaration locations.
143
+
144
+ ---
145
+
146
+ ### E008: Undefined Variable
147
+
148
+ **Description**: Reference to a variable that is not in scope.
149
+
150
+ **Example**:
151
+
152
+ ```sea
153
+ Entity "API"
154
+ Resource "Payload" units
155
+ // Missing entity definition for Backend
156
+ Flow "Payload" from "API" to "Backend"
157
+ // Error: "Backend" is referenced but never declared
158
+ ```
159
+
160
+ **Common Fixes**:
161
+
162
+ - Define the variable before use
163
+ - Check variable scope
164
+ - Verify spelling
165
+
166
+ **Suggestion**: Suggests similar variable names in scope.
167
+
168
+ ---
169
+
170
+ ### E009: Invalid Quantity
171
+
172
+ **Description**: A quantity value is invalid or malformed.
173
+
174
+ **Example**:
175
+
176
+ ```sea
177
+ Flow "Steel" from "Mine" to "Refinery" quantity -100
178
+ // Error: Negative quantity
179
+ ```
180
+
181
+ **Common Fixes**:
182
+
183
+ - Use positive quantities
184
+ - Check numeric format
185
+ - Verify units
186
+
187
+ ---
188
+
189
+ ### E010: Invalid Identifier
190
+
191
+ **Description**: An identifier (name) is invalid or uses reserved keywords.
192
+
193
+ **Example**:
194
+
195
+ ```sea
196
+ Entity "Entity" in logistics
197
+ // Error: "Entity" is a reserved keyword
198
+ ```
199
+
200
+ **Common Fixes**:
201
+
202
+ - Use different names
203
+ - Avoid reserved keywords
204
+ - Follow naming conventions
205
+
206
+ ---
207
+
208
+ ## E100-E199: Type System Errors
209
+
210
+ ### E100: Incompatible Types
211
+
212
+ **Description**: Types cannot be used together in the given context.
213
+
214
+ **Note**: This entry also covers `Type Mismatch` cases (previously E004) such as assigning a string where a number is expected.
215
+
216
+ **Example**:
217
+
218
+ ```sea
219
+ Policy upload_capacity as:
220
+ "high" + 5
221
+ // Error: cannot add a string and a number
222
+ ```
223
+
224
+ **Common Fixes**:
225
+
226
+ - Ensure types match in assignments
227
+ - Use appropriate type conversions
228
+ - Check function signatures and type requirements
229
+
230
+ ---
231
+
232
+ ### E101: Invalid Type Conversion
233
+
234
+ **Description**: Attempted type conversion is not allowed.
235
+
236
+ **Common Fixes**:
237
+
238
+ - Use valid conversion functions
239
+ - Check if conversion is necessary
240
+ - Verify source and target types
241
+
242
+ ---
243
+
244
+ ### E102: Type Inference Failed
245
+
246
+ **Description**: The type system cannot infer the type of an expression.
247
+
248
+ **Common Fixes**:
249
+
250
+ - Add explicit type annotations
251
+ - Provide more context
252
+ - Simplify the expression
253
+
254
+ ---
255
+
256
+ ### E103: Invalid Operand Type
257
+
258
+ **Description**: An operator is used with an incompatible operand type.
259
+
260
+ **Common Fixes**:
261
+
262
+ - Check operator requirements
263
+ - Use correct operand types
264
+ - Review operator documentation
265
+
266
+ ---
267
+
268
+ ### E104: Invalid Comparison Type
269
+
270
+ **Description**: Types cannot be compared with the given operator.
271
+
272
+ **Common Fixes**:
273
+
274
+ - Use comparable types
275
+ - Check comparison operator
276
+ - Add type conversions if needed
277
+
278
+ ---
279
+
280
+ ## E200-E299: Unit and Dimension Errors
281
+
282
+ ### E200: Dimension Mismatch
283
+
284
+ **Description**: Operations on quantities with incompatible dimensions.
285
+
286
+ **Example**:
287
+
288
+ ```sea
289
+ Policy dimension_collision as:
290
+ 10 "kg" + 5 "meters"
291
+ // Error: Cannot add Mass and Length
292
+ ```
293
+
294
+ **Common Fixes**:
295
+
296
+ - Use quantities with the same dimension
297
+ - Add unit conversions
298
+ - Review calculation logic
299
+
300
+ ---
301
+
302
+ _Note_: `E003: Unit Mismatch` was historically listed in the Syntax/Parsing category (E003) and has been consolidated under the Unit/Dimension category. Consult `E200`/`E203` for dimension/unit mismatches.
303
+
304
+ ### E201: Invalid Unit
305
+
306
+ **Description**: A unit is not recognized or is invalid in context.
307
+
308
+ **Common Fixes**:
309
+
310
+ - Use standard unit names
311
+ - Check unit definitions
312
+ - Verify unit spelling
313
+
314
+ ---
315
+
316
+ ### E202: Unit Conversion Failed
317
+
318
+ **Description**: Cannot convert between the specified units.
319
+
320
+ **Common Fixes**:
321
+
322
+ - Ensure units are convertible
323
+ - Check conversion factors
324
+ - Verify dimension compatibility
325
+
326
+ ---
327
+
328
+ ### E203: Incompatible Dimensions
329
+
330
+ **Description**: Dimensions cannot be used together in the operation.
331
+
332
+ **Common Fixes**:
333
+
334
+ - Use compatible dimensions
335
+ - Review operation requirements
336
+ - Add dimension conversions
337
+
338
+ ---
339
+
340
+ ## E300-E399: Scope and Reference Errors
341
+
342
+ ### E300: Variable Not In Scope
343
+
344
+ **Description**: A variable is referenced outside its scope.
345
+
346
+ **Example**:
347
+
348
+ ```sea
349
+ Policy scoped_check as:
350
+ exists e in entities: (e.name = "service")
351
+
352
+ Policy leak_scope as:
353
+ e.name = "api" // Error: `e` is not in scope here
354
+ ```
355
+
356
+ **Common Fixes**:
357
+
358
+ - Move variable reference inside scope
359
+ - Expand variable scope
360
+ - Define variable in outer scope
361
+
362
+ **Suggestion**: Shows available variables in scope.
363
+
364
+ ---
365
+
366
+ ### E301: Undefined Reference
367
+
368
+ **Description**: General reference to an undefined item.
369
+
370
+ **Common Fixes**:
371
+
372
+ - Define the referenced item
373
+ - Check spelling and case
374
+ - Verify namespace
375
+
376
+ ---
377
+
378
+ ### E302: Circular Reference
379
+
380
+ **Description**: A circular dependency exists between items.
381
+
382
+ **Example**:
383
+
384
+ ```sea
385
+ Entity "A"
386
+ Entity "B"
387
+ Flow "Data" from "A" to "B" quantity 1
388
+ Flow "Data" from "B" to "A" quantity 1
389
+ // Error: circular dependency between A and B
390
+ ```
391
+
392
+ **Common Fixes**:
393
+
394
+ - Break the circular dependency
395
+ - Restructure definitions
396
+ - Use forward declarations if supported
397
+
398
+ ---
399
+
400
+ ### E303: Invalid Reference
401
+
402
+ **Description**: A reference is malformed or points to an invalid target.
403
+
404
+ **Common Fixes**:
405
+
406
+ - Check reference syntax
407
+ - Verify target exists
408
+ - Review reference path
409
+
410
+ ---
411
+
412
+ ## E400-E499: Policy Validation Errors
413
+
414
+ ### E400: Policy Evaluation Failed
415
+
416
+ **Description**: A policy could not be evaluated.
417
+
418
+ **Common Fixes**:
419
+
420
+ - Check policy expression syntax
421
+ - Verify policy inputs
422
+ - Review policy logic
423
+
424
+ ---
425
+
426
+ ### E401: Invalid Policy Expression
427
+
428
+ **Description**: A policy expression is invalid or malformed.
429
+
430
+ **Common Fixes**:
431
+
432
+ - Review policy syntax
433
+ - Check expression operators
434
+ - Verify operand types
435
+
436
+ ---
437
+
438
+ ### E402: Determinism Violation
439
+
440
+ **Description**: A policy or expression is non-deterministic when determinism is required.
441
+
442
+ **Common Fixes**:
443
+
444
+ - Remove non-deterministic operations
445
+ - Use deterministic alternatives
446
+ - Review determinism requirements
447
+
448
+ **Suggestion**: Provides hints on making the code deterministic.
449
+
450
+ ---
451
+
452
+ ### E403: Invalid Modality
453
+
454
+ **Description**: A policy modality (must, should, may) is invalid in context.
455
+
456
+ **Common Fixes**:
457
+
458
+ - Use correct modality
459
+ - Review policy requirements
460
+ - Check modality syntax
461
+
462
+ ---
463
+
464
+ ## E500-E599: Namespace and Module Errors
465
+
466
+ ### E500: Namespace Not Found
467
+
468
+ **Description**: A referenced namespace does not exist.
469
+
470
+ **Common Fixes**:
471
+
472
+ - Define the namespace
473
+ - Check namespace spelling
474
+ - Verify namespace imports
475
+
476
+ ---
477
+
478
+ ### E501: Ambiguous Namespace
479
+
480
+ **Description**: A namespace reference is ambiguous (multiple matches).
481
+
482
+ **Common Fixes**:
483
+
484
+ - Use fully qualified names
485
+ - Add namespace aliases
486
+ - Resolve namespace conflicts
487
+
488
+ ---
489
+
490
+ ### E502: Invalid Namespace
491
+
492
+ **Description**: A namespace definition or reference is invalid.
493
+
494
+ **Common Fixes**:
495
+
496
+ - Check namespace syntax
497
+ - Verify namespace rules
498
+ - Review namespace structure
499
+
500
+ ---
501
+
502
+ ### E503: Module Not Found
503
+
504
+ **Description**: A referenced module cannot be found.
505
+
506
+ **Example**:
507
+
508
+ ```sea
509
+ import "missing_module"
510
+ // Error: Module 'missing_module' could not be found
511
+ ```
512
+
513
+ **Common Fixes**:
514
+
515
+ - Check module path
516
+ - Verify module file exists
517
+ - Review import statements
518
+
519
+ ---
520
+
521
+ ### E504: Symbol Not Exported
522
+
523
+ **Description**: A symbol is imported from a module but is not exported by that module.
524
+
525
+ **Example**:
526
+
527
+ ```sea
528
+ import { Secret } from "utils"
529
+ // Error: Symbol 'Secret' is not exported by module 'utils'. Available exports: PublicHelper
530
+ ```
531
+
532
+ **Common Fixes**:
533
+
534
+ - Check symbol name spelling
535
+ - Verify the symbol is exported (`export Entity X`) in the source module
536
+ - Use `import * as alias` to inspect available exports
537
+ - Check available exports listed in the error message
538
+
539
+ ---
540
+
541
+ ### E505: Circular Dependency
542
+
543
+ **Description**: A circular dependency exists between modules (e.g., A imports B, and B imports A).
544
+
545
+ **Example**:
546
+
547
+ ```sea
548
+ // In a.sea:
549
+ import "b"
550
+
551
+ // In b.sea:
552
+ import "a"
553
+ // Error: Circular dependency detected: a -> b -> a
554
+ ```
555
+
556
+ **Common Fixes**:
557
+
558
+ - Refactor code to extract shared dependencies to a third module
559
+ - Remove unnecessary imports
560
+ - Merge tightly coupled modules
561
+
562
+ ## Using Error Codes
563
+
564
+ ### In CLI
565
+
566
+ ```bash
567
+ # Get detailed error information
568
+ domainforge validate myfile.sea
569
+
570
+ # JSON output with error codes
571
+ domainforge validate --format json myfile.sea
572
+
573
+ # LSP format for IDE integration
574
+ domainforge validate --format lsp myfile.sea
575
+ ```
576
+
577
+ ### In Python
578
+
579
+ ```python
580
+ from domainforge import Graph
581
+
582
+ try:
583
+ graph = Graph.parse(source)
584
+ except Exception as e:
585
+ print(f"Error {e.code}: {e}")
586
+ if hasattr(e, 'suggestion'):
587
+ print(f"Suggestion: {e.suggestion}")
588
+ ```
589
+
590
+ ### In TypeScript
591
+
592
+ ```typescript
593
+ import { Graph } from "@godspeedai/domainforge";
594
+
595
+ try {
596
+ const graph = Graph.parse(source);
597
+ } catch (e: any) {
598
+ const metadata = JSON.parse(e.message.split("__metadata__: ")[1]);
599
+ console.error(`Error ${metadata.code}: ${metadata.errorType}`);
600
+ if (metadata.suggestion) {
601
+ console.log(`Suggestion: ${metadata.suggestion}`);
602
+ }
603
+ }
604
+ ```
605
+
606
+ ### In WASM/JavaScript
607
+
608
+ ```javascript
609
+ import { Graph } from "@godspeedai/domainforge-wasm";
610
+
611
+ try {
612
+ const graph = Graph.parse(source);
613
+ } catch (e) {
614
+ // Different bindings emit metadata tokens with different markers.
615
+ // Node/NAPI wrappers commonly use "__metadata__: " while WASM/json errors may use
616
+ // "__SEA_DSL_ERROR_METADATA__: ". Try both when extracting metadata.
617
+ const raw = e.message || e.toString();
618
+ const token = raw.includes("__SEA_DSL_ERROR_METADATA__:")
619
+ ? "__SEA_DSL_ERROR_METADATA__: "
620
+ : "__metadata__: ";
621
+ const [msg, meta] = raw.split(token);
622
+ const metadata = JSON.parse(meta);
623
+ console.error(`Error ${metadata.code}: ${msg}`);
624
+ if (metadata.suggestion) {
625
+ console.log(`Suggestion: ${metadata.suggestion}`);
626
+ }
627
+ }
628
+ ```
629
+
630
+ ---
631
+
632
+ ## Contributing
633
+
634
+ When adding new error codes:
635
+
636
+ 1. Choose the appropriate category range
637
+ 2. Add the error code to `ErrorCode` enum in `validation_error.rs`
638
+ 3. Implement `as_str()` and `description()` methods
639
+ 4. Update this documentation
640
+ 5. Add tests for the new error code
641
+ 6. Update language binding error converters if needed
642
+
643
+ ---
644
+
645
+ ## See Also
646
+
647
+ - [Diagnostic Formatters](../README.md#diagnostic-formatters)
648
+ - [Fuzzy Matching](../README.md#fuzzy-matching)
649
+ - [Language Bindings](../README.md#language-bindings)
650
+
651
+ ## Binding surfaces
652
+
653
+ Python bindings surface validation errors as `ValidationError` with `.code` and `.message` fields. TypeScript bindings throw an `Error` where the message includes the code (e.g., `E201`). Use the tables above to map messages to remediation steps.
654
+
655
+ ## Integration tips
656
+
657
+ - Enable `--format json` when using the CLI to capture structured error reports for CI pipelines.
658
+ - Log the `help` string alongside `code` in downstream tooling to aid non-DSL users.
659
+
660
+ ## Related documentation
661
+
662
+ - `docs/new_docs/reference/cli-commands.md` — `validate` and `explain` commands that emit these codes.
663
+ - `docs/new_docs/how-tos/debugging-parser-failures.md` — troubleshooting workflows.
664
+ - `docs/new_docs/reference/primitives-api.md` — context for identifiers referenced in errors.
@@ -0,0 +1,53 @@
1
+ # Generated Artifacts Policy
2
+
3
+ This document defines what is source truth and what is a build output in DomainForge.
4
+
5
+ ## Source Truth
6
+
7
+ The following files are authoritative source inputs. Changes must be made here first:
8
+
9
+ - **Rust source**: `domainforge-core/src/`, `domainforge-core/grammar/`
10
+ - **Grammar**: `domainforge-core/grammar/sea.pest`
11
+ - **Schemas and manifests**: `Cargo.toml`, `domainforge-core/Cargo.toml`, `pyproject.toml`, `package.json`
12
+ - **Lockfiles**: `Cargo.lock`, `bun.lock`
13
+ - **Documentation**: `docs/`, `README*.md`, `CONTRIBUTING.md`
14
+ - **Examples**: `examples/`, `domainforge-core/examples/`
15
+ - **Tests**: `domainforge-core/tests/`, `tests/`, `typescript-tests/`
16
+ - **Workflows**: `.github/workflows/`, `.github/actions/`
17
+ - **Scripts**: `scripts/`, `justfile`
18
+
19
+ ## Build Outputs
20
+
21
+ The following are generated artifacts and must NOT be hand-edited as source truth:
22
+
23
+ - `pkg/` — WASM package output (generated by `wasm-pack`)
24
+ - `domainforge-core/pkg/` — WASM package output (generated by `wasm-pack`)
25
+ - `dist/` — Release archives and wheels
26
+ - `*.whl` — Python wheels (generated by `maturin`)
27
+ - `*.node` — Native Node.js addons (generated by `napi-rs`)
28
+ - `*.tar.gz` — Release archives
29
+ - `target/` — Rust build artifacts
30
+ - Generated `.d.ts`, `.wasm`, `.js` in `pkg/` directories
31
+
32
+ ## Allowed Checked-In Generated Files
33
+
34
+ Generated files may be checked in ONLY when they are:
35
+
36
+ 1. **Explicit test fixtures** under a `fixtures/` path with a documented purpose
37
+ 2. **Golden test inputs** with a corresponding test that validates them
38
+
39
+ All other generated artifacts must be produced by CI from a clean checkout.
40
+
41
+ ## CI Requirements
42
+
43
+ - Release artifacts must be regenerated, packed, installed, and smoke-tested by CI before publication
44
+ - No release artifact should be hand-edited after generation
45
+ - If a generated artifact is wrong, fix the generator, not the output
46
+
47
+ ## Violations
48
+
49
+ If a build output is found tracked without being a fixture:
50
+
51
+ 1. Add it to `.gitignore`
52
+ 2. Remove from tracking with `git rm --cached`
53
+ 3. Fix the generator if the output was incorrect