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,10 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ DEST="target/debug/deps/sea_debug_test"
4
+ if [ -L "$DEST" ] || [ -f "$DEST" ]; then
5
+ rm -f "$DEST"
6
+ echo "Removed debug test link: $DEST"
7
+ else
8
+ echo "No debug test link found: $DEST"
9
+ fi
10
+ exit 0
@@ -0,0 +1,262 @@
1
+ #!/usr/bin/env bash
2
+ # create-github-release.sh - Create GitHub release using gh CLI
3
+ # Usage: ./scripts/create-github-release.sh [VERSION] [OPTIONS]
4
+
5
+ set -euo pipefail
6
+
7
+ # ============================================================================
8
+ # Configuration
9
+ # ============================================================================
10
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
12
+
13
+ # Colors
14
+ RED='\033[0;31m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ BLUE='\033[0;34m'
18
+ NC='\033[0m'
19
+
20
+ # Flags
21
+ DRY_RUN=false
22
+ DRAFT=false
23
+
24
+ # ============================================================================
25
+ # Helper Functions
26
+ # ============================================================================
27
+ log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
28
+ log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
29
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
30
+ log_error() { echo -e "${RED}[✗]${NC} $1"; }
31
+
32
+ usage() {
33
+ cat <<EOF
34
+ Usage: $(basename "$0") [VERSION] [OPTIONS]
35
+
36
+ Create a GitHub release using the GitHub CLI.
37
+
38
+ ARGUMENTS:
39
+ VERSION Version number (e.g., 0.7.0)
40
+ If not provided, reads from domainforge-core/Cargo.toml
41
+
42
+ OPTIONS:
43
+ --dry-run Show what would be done without creating release
44
+ --draft Create as draft release
45
+ -h, --help Show this help message
46
+
47
+ REQUIREMENTS:
48
+ - GitHub CLI (gh) must be installed and authenticated
49
+ - Tag must exist: v{VERSION}
50
+ - RELEASE_NOTES.md should exist for release body
51
+
52
+ BEHAVIOR:
53
+ - Creates release from existing tag
54
+ - Uploads all artifacts from dist/ directory
55
+ - Marks as pre-release if version contains alpha/beta/rc
56
+ - Generates additional notes via --generate-notes
57
+
58
+ EXAMPLES:
59
+ $(basename "$0") # Create release for current version
60
+ $(basename "$0") 0.7.0 # Create for specific version
61
+ $(basename "$0") --dry-run # Preview without creating
62
+ $(basename "$0") --draft # Create as draft
63
+ EOF
64
+ }
65
+
66
+ get_current_version() {
67
+ grep -m1 '^version = ' "$PROJECT_ROOT/domainforge-core/Cargo.toml" | sed 's/version = "\(.*\)"/\1/'
68
+ }
69
+
70
+ is_prerelease() {
71
+ local version="$1"
72
+ [[ "$version" =~ (alpha|beta|rc|pre) ]]
73
+ }
74
+
75
+ # ============================================================================
76
+ # Parse Arguments
77
+ # ============================================================================
78
+ VERSION=""
79
+
80
+ while [[ $# -gt 0 ]]; do
81
+ case $1 in
82
+ --dry-run)
83
+ DRY_RUN=true
84
+ shift
85
+ ;;
86
+ --draft)
87
+ DRAFT=true
88
+ shift
89
+ ;;
90
+ -h|--help)
91
+ usage
92
+ exit 0
93
+ ;;
94
+ -*)
95
+ log_error "Unknown option: $1"
96
+ usage
97
+ exit 1
98
+ ;;
99
+ *)
100
+ if [[ -z "$VERSION" ]]; then
101
+ VERSION="$1"
102
+ fi
103
+ shift
104
+ ;;
105
+ esac
106
+ done
107
+
108
+ if [[ -z "$VERSION" ]]; then
109
+ VERSION=$(get_current_version)
110
+ fi
111
+
112
+ TAG_NAME="v$VERSION"
113
+ TAG_NAME="${TAG_NAME//vv/v}"
114
+
115
+ # ============================================================================
116
+ # Main
117
+ # ============================================================================
118
+ cd "$PROJECT_ROOT"
119
+
120
+ echo ""
121
+ echo "=============================================="
122
+ echo " DomainForge GitHub Release"
123
+ echo "=============================================="
124
+ echo ""
125
+
126
+ if $DRY_RUN; then
127
+ log_warn "DRY RUN MODE - No release will be created"
128
+ echo ""
129
+ fi
130
+
131
+ # Check prerequisites
132
+ log_info "Checking prerequisites..."
133
+
134
+ # Check gh CLI
135
+ if ! command -v gh &>/dev/null; then
136
+ log_error "GitHub CLI (gh) is not installed"
137
+ log_info "Install with: https://cli.github.com/"
138
+ exit 1
139
+ fi
140
+ log_success "GitHub CLI found"
141
+
142
+ # Check authentication
143
+ if ! gh auth status &>/dev/null; then
144
+ log_error "GitHub CLI is not authenticated"
145
+ log_info "Authenticate with: gh auth login"
146
+ exit 1
147
+ fi
148
+ log_success "GitHub CLI authenticated"
149
+
150
+ # Check tag exists
151
+ if ! git rev-parse "$TAG_NAME" &>/dev/null; then
152
+ log_error "Tag $TAG_NAME does not exist"
153
+ log_info "Create with: git tag -a $TAG_NAME -m 'Release $TAG_NAME'"
154
+ exit 1
155
+ fi
156
+ log_success "Tag $TAG_NAME exists"
157
+
158
+ log_info "Version: $VERSION"
159
+ log_info "Tag: $TAG_NAME"
160
+
161
+ # Build gh release command
162
+ GH_CMD="gh release create $TAG_NAME"
163
+ GH_CMD+=" --title \"Release $TAG_NAME\""
164
+
165
+ # Add release notes if available
166
+ if [[ -f "RELEASE_NOTES.md" ]]; then
167
+ log_info "Using RELEASE_NOTES.md for release body"
168
+ GH_CMD+=" --notes-file RELEASE_NOTES.md"
169
+ else
170
+ log_info "No RELEASE_NOTES.md, using auto-generated notes"
171
+ GH_CMD+=" --generate-notes"
172
+ fi
173
+
174
+ # Check for pre-release
175
+ if is_prerelease "$VERSION"; then
176
+ log_info "Marking as pre-release (version contains alpha/beta/rc)"
177
+ GH_CMD+=" --prerelease"
178
+ fi
179
+
180
+ # Draft flag
181
+ if $DRAFT; then
182
+ log_info "Creating as draft release"
183
+ GH_CMD+=" --draft"
184
+ fi
185
+
186
+ # Add artifacts
187
+ DIST_DIR="$PROJECT_ROOT/dist"
188
+ if [[ -d "$DIST_DIR" ]]; then
189
+ ARTIFACT_COUNT=0
190
+ for artifact in "$DIST_DIR"/*; do
191
+ if [[ -f "$artifact" ]]; then
192
+ GH_CMD+=" \"$artifact\""
193
+ ARTIFACT_COUNT=$((ARTIFACT_COUNT + 1))
194
+ fi
195
+ done
196
+
197
+ if [[ $ARTIFACT_COUNT -gt 0 ]]; then
198
+ log_info "Will upload $ARTIFACT_COUNT artifacts from dist/"
199
+ else
200
+ log_warn "No artifacts found in dist/"
201
+ fi
202
+ else
203
+ log_warn "dist/ directory not found, no artifacts to upload"
204
+ fi
205
+
206
+ # Execute or preview
207
+ echo ""
208
+ log_info "Command:"
209
+ echo " $GH_CMD"
210
+ echo ""
211
+
212
+ if $DRY_RUN; then
213
+ log_info "Would execute the above command"
214
+ else
215
+ log_info "Creating GitHub release..."
216
+
217
+ # Build and execute the command properly
218
+ RELEASE_CMD="gh release create $TAG_NAME --title \"Release $TAG_NAME\""
219
+
220
+ if [[ -f "RELEASE_NOTES.md" ]]; then
221
+ RELEASE_CMD+=" --notes-file RELEASE_NOTES.md"
222
+ else
223
+ RELEASE_CMD+=" --generate-notes"
224
+ fi
225
+
226
+ if is_prerelease "$VERSION"; then
227
+ RELEASE_CMD+=" --prerelease"
228
+ fi
229
+
230
+ if $DRAFT; then
231
+ RELEASE_CMD+=" --draft"
232
+ fi
233
+
234
+ # Add artifacts to the command
235
+ if [[ -d "$DIST_DIR" ]]; then
236
+ for artifact in "$DIST_DIR"/*; do
237
+ if [[ -f "$artifact" ]]; then
238
+ RELEASE_CMD+=" \"$artifact\""
239
+ fi
240
+ done
241
+ fi
242
+
243
+ # Execute using eval
244
+ if eval "$RELEASE_CMD"; then
245
+ log_success "GitHub release created successfully"
246
+
247
+ # Show release URL
248
+ RELEASE_URL=$(gh release view "$TAG_NAME" --json url -q '.url' 2>/dev/null || true)
249
+ if [[ -n "$RELEASE_URL" ]]; then
250
+ echo ""
251
+ log_info "Release URL: $RELEASE_URL"
252
+ fi
253
+ else
254
+ log_error "Failed to create GitHub release"
255
+ exit 1
256
+ fi
257
+ fi
258
+
259
+ echo ""
260
+ echo "=============================================="
261
+ log_success "GitHub release process complete"
262
+ echo "=============================================="
@@ -0,0 +1,203 @@
1
+ #!/usr/bin/env bash
2
+ # create-tag.sh - Create annotated git tag for release
3
+ # Usage: ./scripts/create-tag.sh [VERSION] [OPTIONS]
4
+
5
+ set -euo pipefail
6
+
7
+ # ============================================================================
8
+ # Configuration
9
+ # ============================================================================
10
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
12
+
13
+ # Colors
14
+ RED='\033[0;31m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ BLUE='\033[0;34m'
18
+ NC='\033[0m'
19
+
20
+ # Flags
21
+ DRY_RUN=false
22
+ FORCE=false
23
+
24
+ # ============================================================================
25
+ # Helper Functions
26
+ # ============================================================================
27
+ log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
28
+ log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
29
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
30
+ log_error() { echo -e "${RED}[✗]${NC} $1"; }
31
+
32
+ usage() {
33
+ cat <<EOF
34
+ Usage: $(basename "$0") [VERSION] [OPTIONS]
35
+
36
+ Create an annotated git tag for a release.
37
+
38
+ ARGUMENTS:
39
+ VERSION Version number (e.g., 0.7.0 or v0.7.0)
40
+ If not provided, reads from domainforge-core/Cargo.toml
41
+
42
+ OPTIONS:
43
+ --dry-run Show what would be done without creating tag
44
+ --force Overwrite existing tag
45
+ -h, --help Show this help message
46
+
47
+ BEHAVIOR:
48
+ - Creates annotated tag with format: v{VERSION}
49
+ - Uses RELEASE_NOTES.md as tag message (if exists)
50
+ - Uses GPG signing if configured
51
+ - Does NOT push the tag
52
+
53
+ EXAMPLES:
54
+ $(basename "$0") # Tag with current version
55
+ $(basename "$0") 0.7.0 # Tag specific version
56
+ $(basename "$0") --dry-run # Preview without creating
57
+ $(basename "$0") --force # Overwrite existing tag
58
+ EOF
59
+ }
60
+
61
+ get_current_version() {
62
+ grep -m1 '^version = ' "$PROJECT_ROOT/domainforge-core/Cargo.toml" | sed 's/version = "\(.*\)"/\1/'
63
+ }
64
+
65
+ has_gpg_signing() {
66
+ git config --get user.signingkey &>/dev/null
67
+ }
68
+
69
+ # ============================================================================
70
+ # Parse Arguments
71
+ # ============================================================================
72
+ VERSION=""
73
+
74
+ while [[ $# -gt 0 ]]; do
75
+ case $1 in
76
+ --dry-run)
77
+ DRY_RUN=true
78
+ shift
79
+ ;;
80
+ --force)
81
+ FORCE=true
82
+ shift
83
+ ;;
84
+ -h|--help)
85
+ usage
86
+ exit 0
87
+ ;;
88
+ -*)
89
+ log_error "Unknown option: $1"
90
+ usage
91
+ exit 1
92
+ ;;
93
+ *)
94
+ if [[ -z "$VERSION" ]]; then
95
+ VERSION="$1"
96
+ fi
97
+ shift
98
+ ;;
99
+ esac
100
+ done
101
+
102
+ if [[ -z "$VERSION" ]]; then
103
+ VERSION=$(get_current_version)
104
+ fi
105
+
106
+ # Ensure version has v prefix for tag
107
+ TAG_NAME="v$VERSION"
108
+ TAG_NAME="${TAG_NAME//vv/v}" # Remove double v if already prefixed
109
+
110
+ # ============================================================================
111
+ # Main
112
+ # ============================================================================
113
+ cd "$PROJECT_ROOT"
114
+
115
+ echo ""
116
+ echo "=============================================="
117
+ echo " DomainForge Git Tagging"
118
+ echo "=============================================="
119
+ echo ""
120
+
121
+ if $DRY_RUN; then
122
+ log_warn "DRY RUN MODE - No tag will be created"
123
+ echo ""
124
+ fi
125
+
126
+ log_info "Tag name: $TAG_NAME"
127
+
128
+ # Check if tag already exists
129
+ if git rev-parse "$TAG_NAME" &>/dev/null; then
130
+ if $FORCE; then
131
+ log_warn "Tag $TAG_NAME exists, will be overwritten (--force)"
132
+ if ! $DRY_RUN; then
133
+ git tag -d "$TAG_NAME" 2>/dev/null || true
134
+ fi
135
+ else
136
+ log_error "Tag $TAG_NAME already exists. Use --force to overwrite."
137
+ exit 1
138
+ fi
139
+ fi
140
+
141
+ # Determine tag message source
142
+ if [[ -f "RELEASE_NOTES.md" ]]; then
143
+ log_info "Using RELEASE_NOTES.md for tag message"
144
+ TAG_MSG_FILE="RELEASE_NOTES.md"
145
+ else
146
+ log_info "RELEASE_NOTES.md not found, using default message"
147
+ TAG_MSG_FILE=""
148
+ fi
149
+
150
+ # Check for GPG signing
151
+ USE_GPG=false
152
+ if has_gpg_signing; then
153
+ log_info "GPG signing key configured"
154
+ USE_GPG=true
155
+ else
156
+ log_info "No GPG signing key configured (unsigned tag)"
157
+ fi
158
+
159
+ # Create the tag
160
+ if $DRY_RUN; then
161
+ log_info "Would create tag: $TAG_NAME"
162
+ if $USE_GPG; then
163
+ log_info "Would use: git tag -s $TAG_NAME"
164
+ else
165
+ log_info "Would use: git tag -a $TAG_NAME"
166
+ fi
167
+ if [[ -n "$TAG_MSG_FILE" ]]; then
168
+ log_info "Would use message from: $TAG_MSG_FILE"
169
+ fi
170
+ else
171
+ if $USE_GPG; then
172
+ if [[ -n "$TAG_MSG_FILE" ]]; then
173
+ git tag -s "$TAG_NAME" -F "$TAG_MSG_FILE"
174
+ else
175
+ git tag -s "$TAG_NAME" -m "Release $TAG_NAME"
176
+ fi
177
+ else
178
+ if [[ -n "$TAG_MSG_FILE" ]]; then
179
+ git tag -a "$TAG_NAME" -F "$TAG_MSG_FILE"
180
+ else
181
+ git tag -a "$TAG_NAME" -m "Release $TAG_NAME"
182
+ fi
183
+ fi
184
+
185
+ log_success "Created tag: $TAG_NAME"
186
+
187
+ # Verify tag
188
+ if git rev-parse "$TAG_NAME" &>/dev/null; then
189
+ log_success "Tag verified successfully"
190
+ git show "$TAG_NAME" --quiet --format="Commit: %H%nDate: %ci%nTagger: %an <%ae>"
191
+ else
192
+ log_error "Tag verification failed"
193
+ exit 1
194
+ fi
195
+ fi
196
+
197
+ echo ""
198
+ echo "=============================================="
199
+ log_success "Tagging complete"
200
+ echo ""
201
+ log_info "To push the tag:"
202
+ echo " git push origin $TAG_NAME"
203
+ echo "=============================================="
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env bash
2
+ set -o errexit
3
+ set -o nounset
4
+ set -o pipefail
5
+ # Build the requested test binary, locate the hashed executable, and ensure
6
+ # a stable path (`target/debug/deps/sea_debug_test`) exists for codelldb.
7
+
8
+ if [ "$#" -lt 1 ]; then
9
+ echo "Usage: $0 <test-file-stem-or-binary-name>"
10
+ echo "Example: $0 aggregation_eval_tests"
11
+ exit 2
12
+ fi
13
+
14
+ PYTHON_BIN="${PYTHON_BIN:-python3}"
15
+ if ! command -v "${PYTHON_BIN}" >/dev/null 2>&1; then
16
+ if command -v python >/dev/null 2>&1; then
17
+ PYTHON_BIN="python"
18
+ else
19
+ echo "python3 (or python) is required to locate the test binary" >&2
20
+ exit 1
21
+ fi
22
+ fi
23
+
24
+ TEST_NAME="$1"
25
+ CRATE_PATH="domainforge-core"
26
+ ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
27
+ SCRIPTS_DIR="${ROOT_DIR}/scripts"
28
+ STABLE_DEST_DIR="${ROOT_DIR}/target/debug/deps"
29
+ DEST="${STABLE_DEST_DIR}/sea_debug_test"
30
+
31
+ echo "Building test binaries for crate: ${CRATE_PATH}"
32
+ pushd "${ROOT_DIR}" >/dev/null
33
+ cargo test -p "${CRATE_PATH}" --no-run
34
+
35
+ echo "Locating compiled binary for: ${TEST_NAME}"
36
+ FOUND_BIN="$(
37
+ "${PYTHON_BIN}" "${SCRIPTS_DIR}/resolve_rust_binary.py" \
38
+ --workspace "${ROOT_DIR}" \
39
+ --name "${TEST_NAME}" \
40
+ --profile debug \
41
+ --match-mode prefix \
42
+ --fallback-mode contains \
43
+ --deps-subdir deps \
44
+ --require-executable
45
+ )"
46
+ popd >/dev/null
47
+
48
+ if [ -z "${FOUND_BIN}" ]; then
49
+ echo "Error: resolver did not return a binary path" >&2
50
+ exit 1
51
+ fi
52
+
53
+ echo "Found binary: ${FOUND_BIN}"
54
+ mkdir -p "${STABLE_DEST_DIR}"
55
+ if [ -e "${DEST}" ] || [ -L "${DEST}" ]; then
56
+ rm -f "${DEST}"
57
+ fi
58
+
59
+ echo "Linking ${FOUND_BIN} -> ${DEST}"
60
+ if ln -s "${FOUND_BIN}" "${DEST}" 2>/dev/null; then
61
+ echo "Created symlink: ${DEST} -> ${FOUND_BIN}"
62
+ else
63
+ cp "${FOUND_BIN}" "${DEST}"
64
+ chmod +x "${DEST}"
65
+ echo "Copied binary to: ${DEST}"
66
+ fi
67
+
68
+ echo "Prepared debug binary: ${DEST}"
69
+ printf '%s\n' "${DEST}"
70
+ exit 0