clm-kernel 0.0.0__py3-none-any.whl

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 (333) hide show
  1. clm/__init__.py +230 -0
  2. clm/__main__.py +25 -0
  3. clm/cross_cutting/__init__.py +50 -0
  4. clm/cross_cutting/_test_runner.py +36 -0
  5. clm/cross_cutting/async_utils.py +25 -0
  6. clm/cross_cutting/cel_builder.py +123 -0
  7. clm/cross_cutting/cel_converter.py +697 -0
  8. clm/cross_cutting/cel_engine.py +252 -0
  9. clm/cross_cutting/cel_ops.py +72 -0
  10. clm/cross_cutting/cel_ops_db.py +157 -0
  11. clm/cross_cutting/cel_ops_files.py +99 -0
  12. clm/cross_cutting/cel_ops_state.py +71 -0
  13. clm/cross_cutting/cel_ops_strings.py +64 -0
  14. clm/cross_cutting/cel_resolver.py +63 -0
  15. clm/cross_cutting/cel_slices.py +56 -0
  16. clm/cross_cutting/cel_store.py +330 -0
  17. clm/cross_cutting/clm_logger.py +140 -0
  18. clm/cross_cutting/config/__init__.py +155 -0
  19. clm/cross_cutting/config/config_constants.py +392 -0
  20. clm/cross_cutting/config/env_parameters.py +90 -0
  21. clm/cross_cutting/config/logging.py +378 -0
  22. clm/cross_cutting/config/settings.py +504 -0
  23. clm/cross_cutting/context.py +5 -0
  24. clm/cross_cutting/domain_models.py +55 -0
  25. clm/cross_cutting/domain_types.py +61 -0
  26. clm/cross_cutting/effects.py +67 -0
  27. clm/cross_cutting/errors.py +153 -0
  28. clm/cross_cutting/governance.py +331 -0
  29. clm/cross_cutting/guards.py +41 -0
  30. clm/cross_cutting/mcard.py +321 -0
  31. clm/cross_cutting/native.py +185 -0
  32. clm/cross_cutting/observability.py +289 -0
  33. clm/cross_cutting/pcard.py +434 -0
  34. clm/cross_cutting/registry.py +71 -0
  35. clm/cross_cutting/resources.py +84 -0
  36. clm/cross_cutting/secrets.py +44 -0
  37. clm/cross_cutting/subprocess_utils.py +118 -0
  38. clm/cross_cutting/telemetry.py +164 -0
  39. clm/cross_cutting/testing/__init__.py +8 -0
  40. clm/cross_cutting/testing/comparator.py +187 -0
  41. clm/cross_cutting/testing/datasets.py +87 -0
  42. clm/cross_cutting/timeutil.py +20 -0
  43. clm/cross_cutting/types/new_type_check.py +0 -0
  44. clm/cross_cutting/utils/__init__.py +1 -0
  45. clm/cross_cutting/utils/url_safety.py +50 -0
  46. clm/cross_cutting/vcard.py +560 -0
  47. clm/cross_cutting/writer.py +118 -0
  48. clm/layer0/README.md +50 -0
  49. clm/layer0/__init__.py +223 -0
  50. clm/layer0/algebra.py +60 -0
  51. clm/layer0/algebra_baldwin.py +133 -0
  52. clm/layer0/algebra_baldwin_generators.py +36 -0
  53. clm/layer0/algebra_equivalence.py +262 -0
  54. clm/layer0/algebra_ingest.py +306 -0
  55. clm/layer0/algebra_manifest_io.py +156 -0
  56. clm/layer0/assembler.py +481 -0
  57. clm/layer0/cel/__init__.py +23 -0
  58. clm/layer0/cel_eval.py +491 -0
  59. clm/layer0/codec.py +106 -0
  60. clm/layer0/context.py +122 -0
  61. clm/layer0/db.py +160 -0
  62. clm/layer0/exceptions.py +73 -0
  63. clm/layer0/fibration.py +106 -0
  64. clm/layer0/gates.py +50 -0
  65. clm/layer0/hash.py +80 -0
  66. clm/layer0/loader.py +826 -0
  67. clm/layer0/math_utils.py +163 -0
  68. clm/layer0/mcard.py +96 -0
  69. clm/layer0/model/__init__.py +0 -0
  70. clm/layer0/model/action.py +223 -0
  71. clm/layer0/model/card.py +280 -0
  72. clm/layer0/model/card_triad.py +427 -0
  73. clm/layer0/model/compatibility.py +60 -0
  74. clm/layer0/model/dictionary.py +46 -0
  75. clm/layer0/model/dots.py +331 -0
  76. clm/layer0/model/event_producer.py +88 -0
  77. clm/layer0/model/g_time.py +89 -0
  78. clm/layer0/model/handle.py +163 -0
  79. clm/layer0/model/hash/__init__.py +6 -0
  80. clm/layer0/model/hash/algorithms/__init__.py +3 -0
  81. clm/layer0/model/hash/algorithms/custom_hash.py +7 -0
  82. clm/layer0/model/hash/algorithms/local_sha256.py +178 -0
  83. clm/layer0/model/hash/constants.py +53 -0
  84. clm/layer0/model/hash/enums.py +60 -0
  85. clm/layer0/model/hash/validator.py +307 -0
  86. clm/layer0/model/interpreter.py +275 -0
  87. clm/layer0/model/pagination.py +45 -0
  88. clm/layer0/model/pcard.py +716 -0
  89. clm/layer0/model/schema.py +44 -0
  90. clm/layer0/model/utils/__init__.py +1 -0
  91. clm/layer0/model/utils/content_analyzer.py +152 -0
  92. clm/layer0/model/validators/__init__.py +1 -0
  93. clm/layer0/model/validators/base_validator.py +44 -0
  94. clm/layer0/model/validators/binary_validator.py +66 -0
  95. clm/layer0/model/validators/text_validator.py +82 -0
  96. clm/layer0/model/validators/validation_registry.py +49 -0
  97. clm/layer0/model/vcard.py +823 -0
  98. clm/layer0/model/vcard_ext/__init__.py +39 -0
  99. clm/layer0/model/vcard_ext/core.py +60 -0
  100. clm/layer0/model/vcard_ext/network.py +23 -0
  101. clm/layer0/model/vcard_ext/observability.py +63 -0
  102. clm/layer0/model/vcard_ext/storage.py +60 -0
  103. clm/layer0/model/vcard_ext/vendors.py +211 -0
  104. clm/layer0/model/vcard_sandwich.py +119 -0
  105. clm/layer0/model/vcard_vocabulary.py +463 -0
  106. clm/layer0/model/workflow.py +274 -0
  107. clm/layer0/narrative.py +431 -0
  108. clm/layer0/ontology/collection.py +125 -0
  109. clm/layer0/parser.py +429 -0
  110. clm/layer0/relations.py +73 -0
  111. clm/layer0/rule_evaluator.py +251 -0
  112. clm/layer0/schema/__init__.py +38 -0
  113. clm/layer0/schema/ddl.py +97 -0
  114. clm/layer0/templates/abstract.yaml +99 -0
  115. clm/layer0/templates/balanced.yaml +253 -0
  116. clm/layer0/templates/concrete.yaml +172 -0
  117. clm/layer0/type_registry.py +223 -0
  118. clm/layer0/types.py +204 -0
  119. clm/layer0/utils.py +886 -0
  120. clm/layer0/verifier_core.py +262 -0
  121. clm/layer1/__init__.py +31 -0
  122. clm/layer1/action_dispatcher.py +275 -0
  123. clm/layer1/adapter_registry.py +233 -0
  124. clm/layer1/algebra_baldwin_generators.py +192 -0
  125. clm/layer1/arrow_compiler.py +525 -0
  126. clm/layer1/batch_processor.py +152 -0
  127. clm/layer1/cel/__init__.py +27 -0
  128. clm/layer1/cel/builder.py +173 -0
  129. clm/layer1/engine.py +759 -0
  130. clm/layer1/engine_async.py +89 -0
  131. clm/layer1/eval_callback.py +49 -0
  132. clm/layer1/gate_composer.py +229 -0
  133. clm/layer1/hoare_sandwich.py +298 -0
  134. clm/layer1/identity_guard.py +348 -0
  135. clm/layer1/matrix.py +138 -0
  136. clm/layer1/neural_runtime.py +221 -0
  137. clm/layer1/operations/__init__.py +123 -0
  138. clm/layer1/operations/augment.py +156 -0
  139. clm/layer1/operations/base.py +109 -0
  140. clm/layer1/operations/builtins.py +338 -0
  141. clm/layer1/operations/dispatch.py +144 -0
  142. clm/layer1/operations/exclude.py +107 -0
  143. clm/layer1/operations/handle.py +197 -0
  144. clm/layer1/operations/identity.py +139 -0
  145. clm/layer1/operations/invert.py +66 -0
  146. clm/layer1/operations/loader.py +116 -0
  147. clm/layer1/operations/manipulators/__init__.py +23 -0
  148. clm/layer1/operations/manipulators/document.py +211 -0
  149. clm/layer1/operations/manipulators/media.py +134 -0
  150. clm/layer1/operations/manipulators/structured.py +159 -0
  151. clm/layer1/operations/manipulators/tabular.py +334 -0
  152. clm/layer1/operations/port.py +65 -0
  153. clm/layer1/operations/services.py +529 -0
  154. clm/layer1/operations/split.py +117 -0
  155. clm/layer1/operations/substitute.py +75 -0
  156. clm/layer1/petri.py +1052 -0
  157. clm/layer1/pocketflow_orchestrator.py +408 -0
  158. clm/layer1/pocketflow_scheduler.py +519 -0
  159. clm/layer1/protocols.py +197 -0
  160. clm/layer1/runtime_adapter.py +718 -0
  161. clm/layer1/runtimes/__init__.py +71 -0
  162. clm/layer1/runtimes/_generated_assertions.py +125 -0
  163. clm/layer1/runtimes/_generated_types.py +42 -0
  164. clm/layer1/runtimes/base.py +265 -0
  165. clm/layer1/runtimes/binary.py +101 -0
  166. clm/layer1/runtimes/factory.py +203 -0
  167. clm/layer1/runtimes/javascript.py +321 -0
  168. clm/layer1/runtimes/javascript_runtime.js +33 -0
  169. clm/layer1/runtimes/js_scripts/isomorphism.mjs +22 -0
  170. clm/layer1/runtimes/js_scripts/loader.mjs +52 -0
  171. clm/layer1/runtimes/lambda_calc.py +126 -0
  172. clm/layer1/runtimes/python.py +288 -0
  173. clm/layer1/runtimes/python_runtime.py +41 -0
  174. clm/layer1/runtimes/script.py +114 -0
  175. clm/layer1/sandbox.py +334 -0
  176. clm/layer1/savepoint_guard.py +136 -0
  177. clm/layer1/sparse_net.py +122 -0
  178. clm/layer1/spec_tester.py +165 -0
  179. clm/layer1/store.py +295 -0
  180. clm/layer1/test_runner.py +498 -0
  181. clm/layer1/type_inspector.py +166 -0
  182. clm/layer1/verifier.py +772 -0
  183. clm/layer1/vm.py +91 -0
  184. clm/layer2/__init__.py +78 -0
  185. clm/layer2/card_collection.py +678 -0
  186. clm/layer2/classifier.py +479 -0
  187. clm/layer2/engine/__init__.py +1 -0
  188. clm/layer2/engine/abstract_sql_engine.py +320 -0
  189. clm/layer2/engine/base.py +193 -0
  190. clm/layer2/engine/duckdb_engine.py +576 -0
  191. clm/layer2/engine/sqlite_engine.py +518 -0
  192. clm/layer2/fiber/__init__.py +31 -0
  193. clm/layer2/fiber/context.py +89 -0
  194. clm/layer2/fiber/disposable.py +163 -0
  195. clm/layer2/fiber/fiber.py +125 -0
  196. clm/layer2/fiber/hoare.py +191 -0
  197. clm/layer2/file_io.py +376 -0
  198. clm/layer2/file_registrar.py +77 -0
  199. clm/layer2/ingest.py +202 -0
  200. clm/layer2/lineage.py +322 -0
  201. clm/layer2/mcard_fs.py +262 -0
  202. clm/layer2/merkle.py +11 -0
  203. clm/layer2/mime.py +244 -0
  204. clm/layer2/mime_detector.py +245 -0
  205. clm/layer2/private_collection.py +118 -0
  206. clm/layer2/shared_store.py +11 -0
  207. clm/layer2/storage/__init__.py +190 -0
  208. clm/layer2/storage/db_bitemporal.py +141 -0
  209. clm/layer2/storage/db_driver.py +331 -0
  210. clm/layer2/storage/db_hyperlinks.py +214 -0
  211. clm/layer2/storage/db_pool.py +139 -0
  212. clm/layer2/storage/db_repository.py +229 -0
  213. clm/layer2/storage/savepoint.py +78 -0
  214. clm/layer2/storage/sqlite_wal.py +74 -0
  215. clm/layer2/tridb.py +245 -0
  216. clm/layer2/vcard_receipt.py +71 -0
  217. clm/layer2/vfs.py +17 -0
  218. clm/layer3/__init__.py +141 -0
  219. clm/layer3/agency/__init__.py +19 -0
  220. clm/layer3/agency/config.py +220 -0
  221. clm/layer3/agency/providers/__init__.py +15 -0
  222. clm/layer3/agency/providers/base.py +91 -0
  223. clm/layer3/agency/providers/mlc_llm.py +169 -0
  224. clm/layer3/agency/providers/ollama.py +203 -0
  225. clm/layer3/agency/router.py +71 -0
  226. clm/layer3/agency/runtime.py +524 -0
  227. clm/layer3/gateway.py +353 -0
  228. clm/layer3/open_interpreter_adapter.py +159 -0
  229. clm/layer3/rag/__init__.py +70 -0
  230. clm/layer3/rag/cli.py +228 -0
  231. clm/layer3/rag/config.py +153 -0
  232. clm/layer3/rag/embeddings/__init__.py +16 -0
  233. clm/layer3/rag/embeddings/base.py +79 -0
  234. clm/layer3/rag/embeddings/ollama.py +211 -0
  235. clm/layer3/rag/embeddings/vision.py +290 -0
  236. clm/layer3/rag/engine.py +276 -0
  237. clm/layer3/rag/graph/__init__.py +22 -0
  238. clm/layer3/rag/graph/community.py +198 -0
  239. clm/layer3/rag/graph/engine.py +433 -0
  240. clm/layer3/rag/graph/extractor.py +255 -0
  241. clm/layer3/rag/graph/schema.py +115 -0
  242. clm/layer3/rag/graph/store.py +641 -0
  243. clm/layer3/rag/indexer.py +333 -0
  244. clm/layer3/rag/llm_providers.json +52 -0
  245. clm/layer3/rag/semantic_versioning.py +313 -0
  246. clm/layer3/rag/vector/__init__.py +28 -0
  247. clm/layer3/rag/vector/handle_vector_store.py +749 -0
  248. clm/layer3/rag/vector/schema.py +151 -0
  249. clm/layer3/rag/vector/store.py +632 -0
  250. clm/layer3/reticulum/__init__.py +55 -0
  251. clm/layer3/reticulum/bridge.py +74 -0
  252. clm/layer3/reticulum/daemon.py +88 -0
  253. clm/layer3/reticulum/discovery.py +164 -0
  254. clm/layer3/reticulum/identity.py +107 -0
  255. clm/layer3/reticulum/media.py +148 -0
  256. clm/layer3/reticulum/transport.py +133 -0
  257. clm/layer3/satori/__init__.py +209 -0
  258. clm/layer3/satori/alpha_conversion.py +168 -0
  259. clm/layer3/satori/beta_reduction.py +359 -0
  260. clm/layer3/satori/continuation.py +38 -0
  261. clm/layer3/satori/eta_conversion.py +205 -0
  262. clm/layer3/satori/free_variables.py +163 -0
  263. clm/layer3/satori/io_effects.py +370 -0
  264. clm/layer3/satori/lambda_runtime.py +726 -0
  265. clm/layer3/satori/lambda_term.py +230 -0
  266. clm/layer3/satori/sheaf_audit.py +261 -0
  267. clm/layer3/satori/speech_act.py +279 -0
  268. clm/layer4/README.md +9 -0
  269. clm/layer4/__init__.py +67 -0
  270. clm/layer4/_sovereign_executor.py +580 -0
  271. clm/layer4/action_commands.py +719 -0
  272. clm/layer4/api.py +236 -0
  273. clm/layer4/bootstrap/__init__.py +13 -0
  274. clm/layer4/bootstrap/bootstrapper.py +118 -0
  275. clm/layer4/bootstrap/cleanup.py +44 -0
  276. clm/layer4/bootstrap/clm_hooks.py +49 -0
  277. clm/layer4/bootstrap/genesis.py +77 -0
  278. clm/layer4/bootstrap/injection.py +125 -0
  279. clm/layer4/cli.py +549 -0
  280. clm/layer4/collection_manager.py +553 -0
  281. clm/layer4/commands/__init__.py +81 -0
  282. clm/layer4/commands/action_cmd.py +42 -0
  283. clm/layer4/commands/check_cmd.py +82 -0
  284. clm/layer4/commands/envelope.py +73 -0
  285. clm/layer4/commands/evaluate_cmd.py +224 -0
  286. clm/layer4/commands/mcard_cmd.py +24 -0
  287. clm/layer4/commands/petri_cmd.py +92 -0
  288. clm/layer4/commands/tridb_cmd.py +319 -0
  289. clm/layer4/commands/version_cmd.py +27 -0
  290. clm/layer4/diff_commands.py +167 -0
  291. clm/layer4/eoa_sponsor.py +232 -0
  292. clm/layer4/events.py +69 -0
  293. clm/layer4/flux_gateway.py +133 -0
  294. clm/layer4/gateway.py +91 -0
  295. clm/layer4/loader.py +307 -0
  296. clm/layer4/mcard_commands.py +166 -0
  297. clm/layer4/membrane.py +273 -0
  298. clm/layer4/navigation.py +50 -0
  299. clm/layer4/protocol/protocol_entry_python.py +108 -0
  300. clm/layer4/protocol/python_sync.py +126 -0
  301. clm/layer4/runner.py +150 -0
  302. clm/layer4/satori.py +262 -0
  303. clm/layer4/server/python_sync_client.py +150 -0
  304. clm/layer4/server/python_sync_server.py +139 -0
  305. clm/layer4/server/service_api.py +315 -0
  306. clm/layer4/server/start_servers.py +107 -0
  307. clm/layer4/server/stop_servers.py +24 -0
  308. clm/layer4/simulated_optimization_fix.py +0 -0
  309. clm/layer4/storage.py +463 -0
  310. clm/layer4/tridb_admin.py +268 -0
  311. clm/layer4/websocket/test_ws_client.py +104 -0
  312. clm/layer4/websocket/test_ws_server.py +138 -0
  313. clm/layer4/websocket/ws_server_local.py +160 -0
  314. clm/layer5/__init__.py +51 -0
  315. clm/layer5/async_batch_writer.py +133 -0
  316. clm/layer5/learning.py +276 -0
  317. clm/layer5/telemetry_hook.py +107 -0
  318. clm/layer5/type_lattice.py +238 -0
  319. clm/py.typed +0 -0
  320. clm/schemas/__init__.py +652 -0
  321. clm/schemas/abstract_face_schema.yaml +77 -0
  322. clm/schemas/cel_schema.yaml +416 -0
  323. clm/schemas/lifecycle/__init__.py +45 -0
  324. clm/schemas/lifecycle/models.py +123 -0
  325. clm/schemas/lifecycle/service.py +364 -0
  326. clm/schemas/mcard_schema.sql +192 -0
  327. clm/schemas/mcard_vector_schema.sql +283 -0
  328. clm/schemas/mlp-context-v1.json +91 -0
  329. clm_kernel-0.0.0.dist-info/METADATA +121 -0
  330. clm_kernel-0.0.0.dist-info/RECORD +333 -0
  331. clm_kernel-0.0.0.dist-info/WHEEL +4 -0
  332. clm_kernel-0.0.0.dist-info/entry_points.txt +3 -0
  333. clm_kernel-0.0.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,77 @@
1
+ # Abstract Face Schema (Face A)
2
+ # ==============================
3
+ # Validates the structure of computable_knowledge/Abstract/layer0/stageN_*.yaml.
4
+ #
5
+ # Sprint 134 — formalizes the `context.external_references` block that was
6
+ # already deployed across all 6 Abstract face YAMLs but lived outside any
7
+ # schema. Reuses the existing CEL `ref:` reserved word (replacing `path:`)
8
+ # and adds two optional fields (`kind`, `content_hash`) drawn from existing
9
+ # vocabulary. See docs/spec/external_references_grammar.md for the
10
+ # keyword inventory and worked examples.
11
+ #
12
+ # Version: 1.0
13
+ # Sprint: 134
14
+
15
+ universe_level: 0
16
+ version: "1.0"
17
+
18
+ # ---------------------------------------------------------------------------
19
+ # Top-level shape of an Abstract face YAML
20
+ # ---------------------------------------------------------------------------
21
+ abstract_face:
22
+ required: [version, clm]
23
+ clm:
24
+ required: [layer, stage, name, face, type, context, goal, success_criteria]
25
+ layer:
26
+ enum: ["0", "1", "2", "3"]
27
+ face:
28
+ enum: ["A"]
29
+ type:
30
+ enum: ["mcard"]
31
+ context:
32
+ required: [description]
33
+ optional: [dependencies, external_references]
34
+ dependencies:
35
+ type: list
36
+ items: { type: string }
37
+ description: "Inter-stage handle names (e.g. layer0_stage1_abstract)."
38
+ external_references:
39
+ type: list
40
+ description: >
41
+ External architecture / spec / standard docs that ground this
42
+ stage. Each entry is a pointer, not inlined content. Reuses the
43
+ CEL `ref:` reserved word (single source of truth for 'reference'
44
+ across the CLM grammar).
45
+ items:
46
+ required: [ref, relevance]
47
+ optional: [kind, content_hash]
48
+ ref:
49
+ type: string
50
+ description: >
51
+ Repo-relative filesystem path (e.g.
52
+ docs/architecture/directive_4_*.md), an mcard:// URI
53
+ (mcard://handle/<handle> or mcard://hash/<64hex>), or a
54
+ [[wikilink]] name. Reuses the CEL `ref:` reserved word.
55
+ kind:
56
+ enum: [directive, specification, architecture, comparison, standard, rationale]
57
+ description: >
58
+ Discriminator reusing existing docs/architecture/ naming
59
+ vocabulary. No new concepts introduced.
60
+ content_hash:
61
+ type: string
62
+ pattern: "^[a-fA-F0-9]{64}$"
63
+ description: >
64
+ Optional SHA-256 pin of the referenced content. If absent,
65
+ the reference floats (drift undetected). If present, the lint
66
+ gate recomputes the file hash and fails on drift. Reuses the
67
+ `content_hash` field name already on the Card model.
68
+ relevance:
69
+ type: string
70
+ min_length: 1
71
+ description: "Free-form prose explaining why this reference grounds this stage."
72
+ goal:
73
+ required: [description]
74
+ success_criteria:
75
+ type: list
76
+ items: { type: string }
77
+ min_items: 1
@@ -0,0 +1,416 @@
1
+ # CLM Expression Language (CEL) Schema
2
+ # =====================================
3
+ # Defines language-agnostic operation descriptors for Balanced (Face B) assertions.
4
+ # Each 'actual' field in vcard_post can be either:
5
+ # - A legacy Python expression string (backward compatible)
6
+ # - A structured CEL operation dict (language-agnostic)
7
+ #
8
+ # Version: 1.1
9
+ # Sprint: 119 (v1.0), 126.1 (v1.1 — added run_test_suite, string_concat, path_basename, string_join)
10
+
11
+ universe_level: 0
12
+ version: "1.1"
13
+
14
+ # ---------------------------------------------------------------------------
15
+ # Reference Syntax
16
+ # ---------------------------------------------------------------------------
17
+ # References use dot-notation to access context values:
18
+ # inputs.key → inputs['key']
19
+ # outputs.key → outputs['key']
20
+ # state.key → retrieve('key') (cross-assertion state)
21
+ # env.tmp_dir → sandbox temporary directory
22
+ # env.clm_root → workspace root directory
23
+ # env.rc → return code from operation execution
24
+
25
+ # ---------------------------------------------------------------------------
26
+ # Primitive Types
27
+ # ---------------------------------------------------------------------------
28
+ # string — UTF-8 text
29
+ # integer — whole number
30
+ # boolean — true / false
31
+ # list — ordered sequence
32
+ # dict — key-value mapping
33
+ # any — unspecified (runtime-determined)
34
+
35
+ # ---------------------------------------------------------------------------
36
+ # Operation Types
37
+ # ---------------------------------------------------------------------------
38
+
39
+ operations:
40
+
41
+ # === value_ref ===
42
+ # Look up a named value from the execution context.
43
+ value_ref:
44
+ required: [name]
45
+ optional: [returns]
46
+ description: "Reference a named context variable (e.g., rc, tmp_dir)."
47
+ example:
48
+ op: value_ref
49
+ name: rc
50
+ returns: integer
51
+
52
+ # === db_query ===
53
+ # Execute a SQL query against a named pillar database.
54
+ db_query:
55
+ required: [pillar, sql]
56
+ optional: [params, transform, returns]
57
+ description: "Execute SQL against a Tri-Database pillar."
58
+ defaults:
59
+ transform: strip
60
+ returns: string
61
+ example:
62
+ op: db_query
63
+ pillar: agent_identities
64
+ sql: "SELECT name FROM sqlite_master WHERE type='table' AND name='card';"
65
+ returns: string
66
+
67
+ # === call ===
68
+ # Invoke a registered function with arguments.
69
+ call:
70
+ required: [function]
71
+ optional: [args, kwargs, default, returns]
72
+ description: "Call a registered CLM function."
73
+ # Canonical list of Python-bound functions that are deprecated (Sprint 127.4).
74
+ # Both the CEL evaluator (cel_engine.py) and the lint gate (lint_cel_bindings.py)
75
+ # load this list at startup — single source of truth.
76
+ deprecated_functions:
77
+ - operator.add
78
+ - operator.sub
79
+ - operator.mul
80
+ - operator.truediv
81
+ - operator.mod
82
+ - str.join
83
+ - os.system
84
+ example:
85
+ op: call
86
+ function: classify_clm
87
+ args:
88
+ - ref: inputs.classify_string
89
+ returns: string
90
+
91
+ # === store ===
92
+ # Store a computed value in cross-assertion state.
93
+ store:
94
+ required: [key, value]
95
+ optional: [returns]
96
+ description: "Store a value for retrieval in subsequent assertions."
97
+ example:
98
+ op: store
99
+ key: v0_hash
100
+ value:
101
+ op: call
102
+ function: repo.resolve_handle_hash
103
+ args:
104
+ - ref: inputs.handle_name
105
+ returns: any
106
+
107
+ # === retrieve ===
108
+ # Retrieve a previously stored value.
109
+ retrieve:
110
+ required: [key]
111
+ optional: [returns]
112
+ description: "Retrieve a previously stored cross-assertion value."
113
+ example:
114
+ op: retrieve
115
+ key: v0_hash
116
+ returns: string
117
+
118
+ # === write_file ===
119
+ # Write content to a file in the sandbox.
120
+ write_file:
121
+ required: [path, content]
122
+ optional: [returns]
123
+ description: "Write content to a file path."
124
+ defaults:
125
+ returns: boolean
126
+ example:
127
+ op: write_file
128
+ path:
129
+ op: path_join
130
+ parts:
131
+ - ref: env.tmp_dir
132
+ - "sample.txt"
133
+ content:
134
+ ref: inputs.version_0_content
135
+ returns: boolean
136
+
137
+ # === set_env ===
138
+ # Set an environment variable.
139
+ set_env:
140
+ required: [var, value]
141
+ optional: [returns]
142
+ description: "Set an environment variable."
143
+ defaults:
144
+ returns: boolean
145
+ example:
146
+ op: set_env
147
+ var: CLM_POLYGLOT_RUNTIME
148
+ value: shell
149
+ returns: boolean
150
+
151
+ # === unset_env ===
152
+ # Remove an environment variable.
153
+ unset_env:
154
+ required: [var]
155
+ optional: [returns]
156
+ description: "Remove an environment variable."
157
+ defaults:
158
+ returns: boolean
159
+ example:
160
+ op: unset_env
161
+ var: CLM_POLYGLOT_RUNTIME
162
+ returns: boolean
163
+
164
+ # === sleep ===
165
+ # Pause execution for a specified duration.
166
+ sleep:
167
+ required: [seconds]
168
+ optional: [returns]
169
+ description: "Pause execution for N seconds."
170
+ defaults:
171
+ returns: boolean
172
+ example:
173
+ op: sleep
174
+ seconds: 1.1
175
+ returns: boolean
176
+
177
+ # === sequence ===
178
+ # Execute multiple operations in order, return the result of the last.
179
+ sequence:
180
+ required: [steps]
181
+ optional: [returns]
182
+ description: "Execute a sequence of operations. Returns result of last step."
183
+ max_depth: 2
184
+ example:
185
+ op: sequence
186
+ steps:
187
+ - op: set_env
188
+ var: CLM_POLYGLOT_RUNTIME
189
+ value: shell
190
+ - op: set_env
191
+ var: CLM_RUNTIME_BACKEND
192
+ value: shell
193
+ returns: boolean
194
+
195
+ # ---------------------------------------------------------------------------
196
+ # Utility Operations (composable within other ops)
197
+ # ---------------------------------------------------------------------------
198
+
199
+ # === path_join ===
200
+ # Join path segments (platform-independent).
201
+ path_join:
202
+ required: [parts]
203
+ optional: [returns]
204
+ description: "Join filesystem path segments."
205
+ defaults:
206
+ returns: string
207
+ example:
208
+ op: path_join
209
+ parts:
210
+ - ref: env.tmp_dir
211
+ - "db"
212
+ - "agent_identities.db"
213
+
214
+ # === len ===
215
+ # Get the length of a value.
216
+ len:
217
+ required: [value]
218
+ optional: [returns]
219
+ description: "Get length of a string, list, or dict."
220
+ defaults:
221
+ returns: integer
222
+
223
+ # === compare ===
224
+ # Compare two values with an operator.
225
+ compare:
226
+ required: [left, operator, right]
227
+ optional: [returns]
228
+ description: "Compare two values. Operators: eq, ne, gt, gte, lt, lte, in, not_in."
229
+ defaults:
230
+ returns: boolean
231
+ example:
232
+ op: compare
233
+ left:
234
+ op: call
235
+ function: repo.resolve_handle_hash
236
+ args:
237
+ - ref: inputs.handle_name
238
+ operator: ne
239
+ right:
240
+ ref: state.v0_hash
241
+ returns: boolean
242
+
243
+ # === int_cast ===
244
+ # Cast a value to integer.
245
+ int_cast:
246
+ required: [value]
247
+ optional: [returns]
248
+ description: "Cast a value to integer."
249
+ defaults:
250
+ returns: integer
251
+
252
+ # === contains ===
253
+ # Check if a value is contained in another.
254
+ contains:
255
+ required: [haystack, needle]
256
+ optional: [returns]
257
+ description: "Check if needle is contained in haystack."
258
+ defaults:
259
+ returns: boolean
260
+
261
+ # === make_mcard_content ===
262
+ # Generate MCard YAML content string.
263
+ make_mcard_content:
264
+ required: [content_hash, content]
265
+ optional: [filename, mime_type, returns]
266
+ description: "Generate an MCard YAML content string."
267
+ defaults:
268
+ filename: "test.txt"
269
+ mime_type: "text/plain"
270
+ returns: string
271
+
272
+ # === copy_file ===
273
+ # Copy a file from source to destination.
274
+ copy_file:
275
+ required: [src, dest]
276
+ optional: [returns]
277
+ description: "Copy a file from source to destination."
278
+ defaults:
279
+ returns: boolean
280
+
281
+ # === not_null ===
282
+ # Assert value is not null/None.
283
+ not_null:
284
+ required: [value]
285
+ optional: [returns]
286
+ description: "Check that value is not null/None."
287
+ defaults:
288
+ returns: boolean
289
+
290
+ # === callable_check ===
291
+ # Check if a value is callable (a function).
292
+ callable_check:
293
+ required: [value]
294
+ optional: [returns]
295
+ description: "Check if a value is callable."
296
+ defaults:
297
+ returns: boolean
298
+
299
+ # === json_parse ===
300
+ # Parse a JSON string into a dict/list.
301
+ json_parse:
302
+ required: [value]
303
+ optional: [returns]
304
+ description: "Parse a JSON string into structured data."
305
+ defaults:
306
+ returns: any
307
+
308
+ # === dict_get ===
309
+ # Access a key from a dict value.
310
+ dict_get:
311
+ required: [value, key]
312
+ optional: [default, returns]
313
+ description: "Get a key from a dict, with optional default."
314
+ defaults:
315
+ returns: any
316
+
317
+ # === index ===
318
+ # Access an element by index from a list.
319
+ index:
320
+ required: [value, position]
321
+ optional: [returns]
322
+ description: "Get element at position from a list."
323
+ defaults:
324
+ returns: any
325
+
326
+ # === replace ===
327
+ # String replacement.
328
+ replace:
329
+ required: [value, old, new]
330
+ optional: [returns]
331
+ description: "Replace occurrences of 'old' with 'new' in a string."
332
+ defaults:
333
+ returns: string
334
+
335
+ # === read_file ===
336
+ read_file:
337
+ required: [path]
338
+ optional: [returns]
339
+ description: "Read the contents of a file as text."
340
+ defaults:
341
+ returns: string
342
+ example:
343
+ op: read_file
344
+ path:
345
+ op: path_join
346
+ parts:
347
+ - ref: env.clm_root
348
+ - "README.md"
349
+
350
+ # === capture_output ===
351
+ # Capture stdout/stderr from an operation.
352
+ capture_output:
353
+ required: [operation]
354
+ optional: [stream, returns]
355
+ description: "Capture stdout or stderr from an operation."
356
+ defaults:
357
+ stream: stdout
358
+ returns: string
359
+
360
+ # === run_test_suite === (Sprint 126.1)
361
+ # Execute a test file in the appropriate runtime, returning its exit code.
362
+ run_test_suite:
363
+ required: [test_file]
364
+ optional: [env, timeout, returns]
365
+ description: >
366
+ Execute a test file in the appropriate runtime, returning its exit code.
367
+ Runtime is auto-detected from file extension (.py → python, .sh → shell, .rs → cargo test).
368
+ Environment variables are injected declaratively via the 'env' dict.
369
+ defaults:
370
+ returns: integer
371
+ timeout: 300
372
+ example:
373
+ op: "run_test_suite"
374
+ test_file: "computable_knowledge/files/layer0/python/test_core_exclude.py"
375
+ env:
376
+ CLM_ROOT: { ref: "env.clm_root" }
377
+ PYTHONPATH: { op: "path_join", parts: [{ ref: "env.clm_root" }, "kernel/scripts"] }
378
+
379
+ # === string_concat === (Sprint 126.1)
380
+ # Concatenate a list of string parts into a single string (no separator).
381
+ string_concat:
382
+ required: [parts]
383
+ optional: [returns]
384
+ description: "Concatenate a list of string parts into a single string (no separator)."
385
+ defaults:
386
+ returns: string
387
+ example:
388
+ op: "string_concat"
389
+ parts:
390
+ - "ast:"
391
+ - { op: "retrieve", key: "stripped_hash" }
392
+
393
+ # === path_basename === (Sprint 126.1)
394
+ # Extract the last component of a filesystem path.
395
+ path_basename:
396
+ required: [value]
397
+ optional: [returns]
398
+ description: "Extract the last component of a filesystem path."
399
+ defaults:
400
+ returns: string
401
+ example:
402
+ op: "path_basename"
403
+ value: "db/agent_identities.db"
404
+
405
+ # === string_join === (Sprint 126.1)
406
+ # Join a list of string parts with a separator.
407
+ string_join:
408
+ required: [separator, parts]
409
+ optional: [returns]
410
+ description: "Join a list of string parts with a separator."
411
+ defaults:
412
+ returns: string
413
+ example:
414
+ op: "string_join"
415
+ separator: " "
416
+ parts: ["hello", "world"]
@@ -0,0 +1,45 @@
1
+ """Lifecycle Sub-Lattice Schemas and Models (DV-376-01)."""
2
+
3
+ from clm.schemas.lifecycle.models import (
4
+ ArtifactMCard,
5
+ ArtifactPayload,
6
+ CommitMCard,
7
+ CommitPayload,
8
+ DeliverableItem,
9
+ DesignDecisionMCard,
10
+ DesignDecisionPayload,
11
+ FeedbackMCard,
12
+ FeedbackPayload,
13
+ LifecycleBaseModel,
14
+ LifecycleMCard,
15
+ SprintStatusMCard,
16
+ SprintStatusPayload,
17
+ )
18
+
19
+ __all__ = [
20
+ "ArtifactMCard",
21
+ "ArtifactPayload",
22
+ "CommitMCard",
23
+ "CommitPayload",
24
+ "DeliverableItem",
25
+ "DesignDecisionMCard",
26
+ "DesignDecisionPayload",
27
+ "FeedbackMCard",
28
+ "FeedbackPayload",
29
+ "LifecycleBaseModel",
30
+ "LifecycleMCard",
31
+ "SprintStatusMCard",
32
+ "SprintStatusPayload",
33
+ "import_decisions_from_dir",
34
+ "query_decisions",
35
+ "emit_sprint_status",
36
+ "query_lifecycle_cards",
37
+ ]
38
+
39
+ from clm.schemas.lifecycle.service import (
40
+ emit_sprint_status,
41
+ import_decisions_from_dir,
42
+ query_decisions,
43
+ query_lifecycle_cards,
44
+ )
45
+
@@ -0,0 +1,123 @@
1
+ """Pydantic v2 Models for Universal MCard Lifecycle Sub-Lattice Archetypes (DV-376-01).
2
+
3
+ Implements strictly validated schemas for Commit, DesignDecision, Feedback,
4
+ Artifact, and SprintStatus MCards.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import json
10
+ from typing import Any, Literal
11
+
12
+ from pydantic import BaseModel, ConfigDict, Field
13
+
14
+
15
+ class LifecycleBaseModel(BaseModel):
16
+ """Base immutable model for lifecycle archetype structures."""
17
+
18
+ model_config = ConfigDict(frozen=True, extra="forbid")
19
+
20
+ def to_canonical_json(self) -> str:
21
+ """Produce canonical JSON representation with sorted keys and minimal separators."""
22
+ return json.dumps(
23
+ self.model_dump(mode="json", exclude_none=True),
24
+ sort_keys=True,
25
+ separators=(",", ":"),
26
+ ensure_ascii=False,
27
+ )
28
+
29
+
30
+ class CommitPayload(LifecycleBaseModel):
31
+ commit_id: str
32
+ diff_hash: str
33
+ author: str
34
+ message: str
35
+ g_time: str
36
+ parent_commits: list[str] = Field(default_factory=list)
37
+ changed_files: list[str] = Field(default_factory=list)
38
+
39
+
40
+ class CommitMCard(LifecycleBaseModel):
41
+ archetype: Literal["CommitMCard"] = "CommitMCard"
42
+ version: str = "1.0.0"
43
+ metadata: dict[str, Any] = Field(default_factory=dict)
44
+ payload: CommitPayload
45
+
46
+
47
+ class DesignDecisionPayload(LifecycleBaseModel):
48
+ decision_id: str
49
+ summary: str
50
+ rationale: str
51
+ status: Literal["proposed", "approved", "rejected", "superseded"]
52
+ alternatives: list[str] = Field(default_factory=list)
53
+ consequences: list[str] = Field(default_factory=list)
54
+ v_pre: list[dict[str, Any]] = Field(default_factory=list)
55
+ v_post: list[dict[str, Any]] = Field(default_factory=list)
56
+
57
+
58
+ class DesignDecisionMCard(LifecycleBaseModel):
59
+ archetype: Literal["DesignDecisionMCard"] = "DesignDecisionMCard"
60
+ version: str = "1.0.0"
61
+ metadata: dict[str, Any] = Field(default_factory=dict)
62
+ payload: DesignDecisionPayload
63
+
64
+
65
+ class FeedbackPayload(LifecycleBaseModel):
66
+ feedback_id: str
67
+ source: Literal["human", "llm", "ci", "runtime"]
68
+ content: str
69
+ severity: Literal["info", "warning", "error", "fatal"]
70
+ target_ref: str | None = None
71
+ action_items: list[str] = Field(default_factory=list)
72
+
73
+
74
+ class FeedbackMCard(LifecycleBaseModel):
75
+ archetype: Literal["FeedbackMCard"] = "FeedbackMCard"
76
+ version: str = "1.0.0"
77
+ metadata: dict[str, Any] = Field(default_factory=dict)
78
+ payload: FeedbackPayload
79
+
80
+
81
+ class ArtifactPayload(LifecycleBaseModel):
82
+ artifact_id: str
83
+ name: str
84
+ uri: str
85
+ content_type: str
86
+ size_bytes: int = Field(ge=0)
87
+ content_hash: str
88
+ origin: Literal["ci", "build", "doc", "test", "manual", "package"]
89
+ metadata: dict[str, Any] = Field(default_factory=dict)
90
+
91
+
92
+ class ArtifactMCard(LifecycleBaseModel):
93
+ archetype: Literal["ArtifactMCard"] = "ArtifactMCard"
94
+ version: str = "1.0.0"
95
+ metadata: dict[str, Any] = Field(default_factory=dict)
96
+ payload: ArtifactPayload
97
+
98
+
99
+ class DeliverableItem(LifecycleBaseModel):
100
+ id: str
101
+ name: str
102
+ status: str
103
+ commit_ref: str | None = None
104
+
105
+
106
+ class SprintStatusPayload(LifecycleBaseModel):
107
+ sprint_id: str
108
+ title: str
109
+ status: Literal["planned", "in_progress", "review", "completed", "failed", "blocked"]
110
+ completion_ratio: float = Field(ge=0.0, le=1.0)
111
+ deliverables: list[DeliverableItem] = Field(default_factory=list)
112
+ quality_gate_passed: bool
113
+ g_time: str
114
+
115
+
116
+ class SprintStatusMCard(LifecycleBaseModel):
117
+ archetype: Literal["SprintStatusMCard"] = "SprintStatusMCard"
118
+ version: str = "1.0.0"
119
+ metadata: dict[str, Any] = Field(default_factory=dict)
120
+ payload: SprintStatusPayload
121
+
122
+
123
+ LifecycleMCard = CommitMCard | DesignDecisionMCard | FeedbackMCard | ArtifactMCard | SprintStatusMCard