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,60 @@
1
+ """
2
+ Compatibility layer for the refactored interpreter.
3
+
4
+ This module provides backward compatibility for the original interpreter.py
5
+ while allowing gradual migration to the new modular architecture.
6
+ """
7
+
8
+ import warnings
9
+
10
+ # Import the original ValidationError for compatibility
11
+ from .validators.base_validator import ValidationError
12
+
13
+ # Re-export ValidationError at module level for backward compatibility
14
+ __all__ = ["ValidationError"]
15
+
16
+
17
+ def deprecated_method(old_name: str, new_location: str):
18
+ """Decorator to mark methods as deprecated."""
19
+
20
+ def decorator(func):
21
+ def wrapper(*args, **kwargs):
22
+ warnings.warn(
23
+ f"{old_name} is deprecated. Use {new_location} instead.",
24
+ DeprecationWarning,
25
+ stacklevel=2,
26
+ )
27
+ return func(*args, **kwargs)
28
+
29
+ return wrapper
30
+
31
+ return decorator
32
+
33
+
34
+ class LegacyContentTypeInterpreter:
35
+ """
36
+ Legacy wrapper for the original ContentTypeInterpreter interface.
37
+
38
+ This class provides the same interface as the original while delegating
39
+ to the new modular components. It includes deprecation warnings to guide
40
+ users toward the new architecture.
41
+ """
42
+
43
+ def __init__(self):
44
+ from .interpreter_refactored import ContentTypeInterpreter
45
+
46
+ self._interpreter = ContentTypeInterpreter()
47
+
48
+ @deprecated_method("LegacyContentTypeInterpreter", "ContentTypeInterpreter")
49
+ def detect_content_type(self, content: str | bytes, file_extension: str = None):
50
+ """Legacy method - use ContentTypeInterpreter.detect_content_type instead."""
51
+ return self._interpreter.detect_content_type(content, file_extension)
52
+
53
+ @deprecated_method(
54
+ "LegacyContentTypeInterpreter.validate_content", "validation_registry.validate"
55
+ )
56
+ def validate_content(self, content: str | bytes) -> None:
57
+ """Legacy method - use validation_registry.validate instead."""
58
+ return self._interpreter.validate_content(content)
59
+
60
+ # Add other legacy methods as needed...
@@ -0,0 +1,46 @@
1
+ from enum import Enum
2
+ from pathlib import Path
3
+
4
+ import yaml
5
+
6
+
7
+ class DataSemanticType(str, Enum):
8
+ StringValue = "StringValue"
9
+ PathReference = "PathReference"
10
+ UrlReference = "UrlReference"
11
+ HashPointer = "HashPointer"
12
+
13
+
14
+ class ClmReservedWords:
15
+ """Python implementation of the Metamodel Dictionary."""
16
+
17
+ def __init__(
18
+ self,
19
+ version: str,
20
+ description: str,
21
+ valid_types: list[str],
22
+ dictionary: dict[str, DataSemanticType],
23
+ ):
24
+ self.version = version
25
+ self.description = description
26
+ self.valid_types = valid_types
27
+ self.dictionary = dictionary
28
+
29
+ @classmethod
30
+ def load_from_file(cls, path: str | Path) -> "ClmReservedWords":
31
+ """Loads the explicitly defined Reserved Words schema configuration mapping into Python natively."""
32
+ with open(path, encoding="utf-8") as f:
33
+ data = yaml.safe_load(f)
34
+
35
+ return cls(
36
+ version=data.get("version", "0.0.0"),
37
+ description=data.get("description", ""),
38
+ valid_types=data.get("valid_types", []),
39
+ dictionary={
40
+ k: DataSemanticType(v) for k, v in data.get("dictionary", {}).items()
41
+ },
42
+ )
43
+
44
+ def lookup(self, key: str) -> DataSemanticType:
45
+ """Retrieve the data type for a given domain key, defaulting to a regular StringValue if unknown."""
46
+ return self.dictionary.get(key, DataSemanticType.StringValue)
@@ -0,0 +1,331 @@
1
+ """DOTS Vocabulary Types - Double Operadic Theory of Systems.
2
+
3
+ This module defines the core vocabulary from the DOTS framework,
4
+ which provides a minimal, mathematically grounded language for describing
5
+ any compositional system, including MVP Cards architecture.
6
+
7
+ DOTS Vocabulary
8
+ ===============
9
+
10
+ The DOTS vocabulary consists of 9 fundamental terms that form a
11
+ complete language for describing compositional systems:
12
+
13
+ +----------+--------------------+-----------------------------+
14
+ | Term | Definition | MVP Cards Mapping |
15
+ +----------+--------------------+-----------------------------+
16
+ | Arena | Container for IO | VCard (boundary/gatekeeper) |
17
+ | Lens | Bidirectional map | PCard (CLM transformations) |
18
+ | Chart | Category positions | CLM YAML specification |
19
+ | Target | Design space | CLM Abstract/Balanced/Conc |
20
+ | Carrier | Actual systems | MCard (content-addressable) |
21
+ | Tight | Vertical/∧ ops | Prerequisite dependencies |
22
+ | Loose | Horizontal/∨ ops | Alternative options |
23
+ | Action | Morphism in Car | CardCollection.add() |
24
+ | Unit | Identity element | Empty MCard / null content |
25
+ +----------+--------------------+-----------------------------+
26
+
27
+ Polynomial Functor Foundation
28
+ =============================
29
+
30
+ The DOTS vocabulary is grounded in **polynomial functor algebra**:
31
+
32
+ p(y) = Σ(s:S) y^{d(s)}
33
+
34
+ Where:
35
+ - S = positions (types/states)
36
+ - d(s) = directions from each position (transitions)
37
+
38
+ This maps to MVP Cards as:
39
+
40
+ MVP(y) = Interface × y^Operations
41
+
42
+ Which expresses: "For each interface, we have a set of possible operations."
43
+
44
+ See Also:
45
+ - docs/WorkingNotes/Hub/Theory/Integration/DOTS Vocabulary as Efficient Representation for ABC Curriculum.md
46
+ - docs/WorkingNotes/Permanent/Projects/PKC Kernel/MCard.md
47
+ - docs/WorkingNotes/Permanent/Projects/PKC Kernel/PCard.md
48
+ - docs/WorkingNotes/Permanent/Projects/PKC Kernel/VCard.md
49
+ """
50
+
51
+ from dataclasses import dataclass
52
+ from enum import Enum
53
+
54
+
55
+ class DOTSRole(Enum):
56
+ """The 9 fundamental DOTS vocabulary terms.
57
+
58
+ From the Double Operadic Theory of Systems, these terms provide
59
+ a complete language for describing any compositional system.
60
+ """
61
+
62
+ CARRIER = "Carrier"
63
+ """The category of actual systems (data artifacts).
64
+
65
+ In MVP Cards: MCard instances - immutable, content-addressable objects.
66
+ Mathematically: Objects and morphisms in Car(S).
67
+ """
68
+
69
+ LENS = "Lens"
70
+ """Bidirectional transformations between systems.
71
+
72
+ In MVP Cards: PCard transformations that map input → output.
73
+ Mathematically: Chart composed with an arena map.
74
+ """
75
+
76
+ CHART = "Chart"
77
+ """Category positions and interface definitions.
78
+
79
+ In MVP Cards: CLM YAML specifications defining the transformation.
80
+ Mathematically: Functor specifying positions in the Target category.
81
+ """
82
+
83
+ ARENA = "Arena"
84
+ """Container for input/output operations; the system boundary.
85
+
86
+ In MVP Cards: VCard - the sovereign gatekeeper for all IO.
87
+ Mathematically: A polynomial functor p with sum and product types.
88
+ """
89
+
90
+ ACTION = "Action"
91
+ """Morphisms in the Carrier category; state transitions.
92
+
93
+ In MVP Cards: CardCollection.add() - produces new MCards.
94
+ Mathematically: Loose(I) ⊛ Car(S) → Car(S).
95
+ """
96
+
97
+ TARGET = "Target"
98
+ """The design space; categories of possible interfaces.
99
+
100
+ In MVP Cards: CLM Abstract/Balanced/Concrete triad.
101
+ Mathematically: Category of polynomials Poly.
102
+ """
103
+
104
+ TIGHT = "Tight"
105
+ """Vertical composition; prerequisite dependencies (∧).
106
+
107
+ In MVP Cards: Sequential execution, dependency chains.
108
+ Mathematically: Product types, conjunction.
109
+ """
110
+
111
+ LOOSE = "Loose"
112
+ """Horizontal composition; alternative options (∨).
113
+
114
+ In MVP Cards: Parallel execution, polyglot consensus.
115
+ Mathematically: Sum types, disjunction.
116
+ """
117
+
118
+ UNIT = "Unit"
119
+ """Identity element; the starting point.
120
+
121
+ In MVP Cards: Empty collection, null content.
122
+ Mathematically: Terminal object 1 in the category.
123
+ """
124
+
125
+
126
+ class EOSRole(Enum):
127
+ """Experimental-Operational Symmetry roles.
128
+
129
+ Each MVP Card type plays a specific role in maintaining the
130
+ symmetry between experimental (development) and operational
131
+ (production) environments.
132
+ """
133
+
134
+ INVARIANT_CONTENT = "InvariantContent"
135
+ """MCard: The Galois root - same content = same hash everywhere.
136
+
137
+ This is the "Joint Reality" P(H,E) = P(E,H) in Bayesian terms.
138
+ Hash computation is a pure function with no side effects.
139
+ """
140
+
141
+ GENERATIVE_LENS = "GenerativeLens"
142
+ """PCard: The dynamic lens - pure function transformations.
143
+
144
+ PCard transformations must be deterministic and reproducible.
145
+ Same input + same PCard = same output in any environment.
146
+ """
147
+
148
+ SOVEREIGN_DECISION = "SovereignDecision"
149
+ """VCard: The gatekeeper - authorized IO and value exchange.
150
+
151
+ VCard manages credentials, authorization, and controlled side effects.
152
+ Only VCard can break symmetry; it documents when and why.
153
+ """
154
+
155
+
156
+ class CardPlane(Enum):
157
+ """MVP Cards architectural planes.
158
+
159
+ The triadic architecture separates concerns into three planes,
160
+ each with distinct responsibilities and DOTS vocabulary mappings.
161
+ """
162
+
163
+ DATA = "Data"
164
+ """MCard plane: Immutable, content-addressable storage.
165
+
166
+ DOTS Role: Carrier
167
+ Responsibilities: Store, hash, retrieve content
168
+ """
169
+
170
+ CONTROL = "Control"
171
+ """PCard plane: Polynomial functor composition.
172
+
173
+ DOTS Role: Lens + Chart
174
+ Responsibilities: Transform, compose, verify
175
+ """
176
+
177
+ APPLICATION = "Application"
178
+ """VCard plane: Value exchange and authorization.
179
+
180
+ DOTS Role: Arena + Action
181
+ Responsibilities: AuthN/AuthZ, IO gatekeeper, credentials
182
+ """
183
+
184
+
185
+ @dataclass
186
+ class PolynomialFunctor:
187
+ """Representation of a polynomial functor p(y) = Σ(s:S) y^{d(s)}.
188
+
189
+ Polynomial functors are the mathematical foundation for DOTS.
190
+ They capture the notion of "interface + operations" in a precise way.
191
+
192
+ Attributes:
193
+ positions: List of position names (S = set of states/types)
194
+ directions: Dict mapping position → list of direction names
195
+
196
+ Example:
197
+ A simple boolean functor:
198
+ >>> p = PolynomialFunctor(
199
+ ... positions=['true', 'false'],
200
+ ... directions={'true': ['stay', 'flip'], 'false': ['stay', 'flip']}
201
+ ... )
202
+ """
203
+
204
+ positions: list[str]
205
+ directions: dict # position → list of directions
206
+
207
+
208
+ @dataclass
209
+ class DOTSMetadata:
210
+ """DOTS vocabulary metadata for a card.
211
+
212
+ This dataclass captures the DOTS role information for any card,
213
+ enabling programmatic identification of the card's role in the
214
+ compositional system.
215
+
216
+ Attributes:
217
+ role: Primary DOTS role (Carrier, Lens, Chart, Arena, etc.)
218
+ eos_role: Experimental-Operational Symmetry role
219
+ plane: MVP Cards architectural plane
220
+ polynomial: Optional polynomial functor representation
221
+ tight_refs: Prerequisite hash references (vertical composition)
222
+ loose_refs: Alternative hash references (horizontal composition)
223
+ """
224
+
225
+ role: DOTSRole
226
+ eos_role: EOSRole | None
227
+ plane: CardPlane
228
+ polynomial: PolynomialFunctor | None = None
229
+ tight_refs: list[str] | None = None
230
+ loose_refs: list[str] | None = None
231
+
232
+
233
+ def create_mcard_dots_metadata(
234
+ tight_refs: list[str] | None = None, loose_refs: list[str] | None = None
235
+ ) -> DOTSMetadata:
236
+ """Create DOTS metadata for an MCard.
237
+
238
+ MCard is always a CARRIER in the DATA plane with INVARIANT_CONTENT role.
239
+
240
+ Args:
241
+ tight_refs: Optional prerequisite hash references
242
+ loose_refs: Optional alternative hash references
243
+
244
+ Returns:
245
+ DOTSMetadata configured for MCard
246
+
247
+ Example:
248
+ >>> meta = create_mcard_dots_metadata()
249
+ >>> meta.role
250
+ <DOTSRole.CARRIER: 'Carrier'>
251
+ >>> meta.plane
252
+ <CardPlane.DATA: 'Data'>
253
+ """
254
+ return DOTSMetadata(
255
+ role=DOTSRole.CARRIER,
256
+ eos_role=EOSRole.INVARIANT_CONTENT,
257
+ plane=CardPlane.DATA,
258
+ polynomial=PolynomialFunctor(
259
+ positions=["content"], directions={"content": ["hash", "get", "text"]}
260
+ ),
261
+ tight_refs=tight_refs,
262
+ loose_refs=loose_refs,
263
+ )
264
+
265
+
266
+ def create_pcard_dots_metadata(
267
+ spec_hash: str | None = None,
268
+ tight_refs: list[str] | None = None,
269
+ loose_refs: list[str] | None = None,
270
+ ) -> DOTSMetadata:
271
+ """Create DOTS metadata for a PCard.
272
+
273
+ PCard is LENS + CHART in the CONTROL plane with GENERATIVE_LENS role.
274
+
275
+ Args:
276
+ spec_hash: Optional hash of the CLM specification
277
+ tight_refs: Sequential execution dependencies
278
+ loose_refs: Parallel/polyglot alternatives
279
+
280
+ Returns:
281
+ DOTSMetadata configured for PCard
282
+ """
283
+ return DOTSMetadata(
284
+ role=DOTSRole.LENS,
285
+ eos_role=EOSRole.GENERATIVE_LENS,
286
+ plane=CardPlane.CONTROL,
287
+ polynomial=PolynomialFunctor(
288
+ positions=["abstract", "balanced", "concrete"],
289
+ directions={
290
+ "abstract": ["specification"],
291
+ "balanced": ["parse", "verify", "execute"],
292
+ "concrete": ["code", "runtime", "result"],
293
+ },
294
+ ),
295
+ tight_refs=tight_refs or ([spec_hash] if spec_hash else None),
296
+ loose_refs=loose_refs,
297
+ )
298
+
299
+
300
+ def create_vcard_dots_metadata(
301
+ credential_hash: str | None = None,
302
+ tight_refs: list[str] | None = None,
303
+ loose_refs: list[str] | None = None,
304
+ ) -> DOTSMetadata:
305
+ """Create DOTS metadata for a VCard.
306
+
307
+ VCard is ARENA + ACTION in the APPLICATION plane with SOVEREIGN_DECISION role.
308
+
309
+ Args:
310
+ credential_hash: Optional hash of the credential/certificate
311
+ tight_refs: Authorization chain dependencies
312
+ loose_refs: Alternative authorization paths
313
+
314
+ Returns:
315
+ DOTSMetadata configured for VCard
316
+ """
317
+ return DOTSMetadata(
318
+ role=DOTSRole.ARENA,
319
+ eos_role=EOSRole.SOVEREIGN_DECISION,
320
+ plane=CardPlane.APPLICATION,
321
+ polynomial=PolynomialFunctor(
322
+ positions=["ingress", "egress", "internal"],
323
+ directions={
324
+ "ingress": ["authenticate", "authorize", "admit"],
325
+ "egress": ["sign", "encrypt", "emit"],
326
+ "internal": ["store", "retrieve", "delete"],
327
+ },
328
+ ),
329
+ tight_refs=tight_refs or ([credential_hash] if credential_hash else None),
330
+ loose_refs=loose_refs,
331
+ )
@@ -0,0 +1,88 @@
1
+ import json
2
+
3
+ from clm.cross_cutting.config.config_constants import (
4
+ COLLISION_EVENT_TYPE,
5
+ COLLISION_TIME,
6
+ CONTENT_SIZE,
7
+ DUPLICATE_EVENT_TYPE,
8
+ DUPLICATE_TIME,
9
+ FIRST_G_TIME,
10
+ HASH,
11
+ TYPE,
12
+ UPGRADED_FUNCTION,
13
+ UPGRADED_HASH,
14
+ )
15
+ from clm.layer0.model.card import MCard
16
+ from clm.layer0.model.g_time import GTime
17
+ from clm.layer0.model.hash.constants import HASH_ALGORITHM_HIERARCHY
18
+ from clm.layer0.model.hash.enums import HashAlgorithm
19
+ from clm.layer0.model.hash.validator import HashValidator
20
+
21
+
22
+ def next_hash_function(current_hash_function: str | HashAlgorithm) -> str:
23
+ """Get the next hash function in the hierarchy.
24
+
25
+ Args:
26
+ current_hash_function: Current hash function name or enum
27
+
28
+ Returns:
29
+ str: Name of the next hash function to use
30
+ """
31
+ # Convert enum to string if needed
32
+ if isinstance(current_hash_function, HashAlgorithm):
33
+ current_hash_function = current_hash_function.value
34
+ elif isinstance(current_hash_function, str):
35
+ current_hash_function = current_hash_function.lower()
36
+
37
+ # Convert to HashAlgorithm enum
38
+ try:
39
+ current_algo = HashAlgorithm(current_hash_function)
40
+ except ValueError:
41
+ return HashAlgorithm.SHA1.value
42
+
43
+ # Get stronger algorithms for current algorithm
44
+ stronger_algos = HASH_ALGORITHM_HIERARCHY.get(current_algo, set())
45
+
46
+ # Return the first stronger algorithm, or SHA1 if none exist
47
+ for algo in [HashAlgorithm.SHA1, HashAlgorithm.SHA256, HashAlgorithm.SHA512]:
48
+ if algo in stronger_algos:
49
+ return algo.value
50
+
51
+ return HashAlgorithm.SHA1.value
52
+
53
+
54
+ def compute_content_size(card: MCard) -> int:
55
+ """Compute the size of a card's content.
56
+
57
+ Args:
58
+ card: The card to compute size for
59
+
60
+ Returns:
61
+ int: Size of content in bytes
62
+ """
63
+ return len(card.content)
64
+
65
+
66
+ def generate_collision_event(card: MCard) -> str:
67
+ """Generate a collision event for the given card."""
68
+ next_algo = next_hash_function(GTime.get_hash_function(card.g_time))
69
+ collision_event = {
70
+ TYPE: COLLISION_EVENT_TYPE,
71
+ HASH: str(card.hash),
72
+ FIRST_G_TIME: str(card.g_time),
73
+ COLLISION_TIME: str(card.g_time),
74
+ CONTENT_SIZE: len(card.content),
75
+ UPGRADED_FUNCTION: next_algo,
76
+ UPGRADED_HASH: HashValidator.compute_hash(card.content, next_algo),
77
+ }
78
+ return json.dumps(collision_event)
79
+
80
+
81
+ def generate_duplication_event(card: MCard) -> str:
82
+ """Generate a duplication event for the given card."""
83
+ duplication_event = {
84
+ TYPE: DUPLICATE_EVENT_TYPE,
85
+ HASH: str(card.hash),
86
+ DUPLICATE_TIME: str(card.g_time),
87
+ }
88
+ return json.dumps(duplication_event)
@@ -0,0 +1,89 @@
1
+ from datetime import datetime, timezone
2
+
3
+ from clm.layer0.model.hash.enums import HashAlgorithm
4
+
5
+
6
+ class GTime:
7
+ @staticmethod
8
+ def stamp_now(
9
+ hash_function: str | HashAlgorithm, locale_or_did: str = "UTC"
10
+ ) -> str:
11
+ """Get current timestamp in ISO format with hash function and locale_or_did.
12
+ Format: ALGORITHM|TIMESTAMP|LOCALE_OR_DID
13
+ Representing the mathematical coordinate (a,b,c) for an event signature.
14
+ """
15
+ if hash_function is None:
16
+ raise ValueError("hash_function cannot be None")
17
+
18
+ # Convert string to HashAlgorithm if needed
19
+ if isinstance(hash_function, str):
20
+ try:
21
+ hash_function = HashAlgorithm(hash_function.lower())
22
+ except ValueError as e:
23
+ raise ValueError(f"Invalid hash function: {hash_function}") from e
24
+
25
+ return f"{hash_function.value}|{datetime.now(timezone.utc).isoformat()}|{locale_or_did}"
26
+
27
+ @staticmethod
28
+ def get_algorithm(string_value: str) -> HashAlgorithm:
29
+ """Get the hash algorithm from the formatted string (Coordinate 'a')."""
30
+ hash_function_str = string_value.split("|")[
31
+ 0
32
+ ].lower() # Get the part before the first '|'
33
+
34
+ try:
35
+ return HashAlgorithm(hash_function_str)
36
+ except ValueError as e:
37
+ raise ValueError(f"Invalid hash function: {hash_function_str}") from e
38
+
39
+ @staticmethod
40
+ def get_hash_function(string_value: str) -> HashAlgorithm:
41
+ """Alias for backward compatibility."""
42
+ return GTime.get_algorithm(string_value)
43
+
44
+ @staticmethod
45
+ def get_timestamp(string_value: str) -> str:
46
+ """Get the timestamp from the formatted string (Coordinate 'b')."""
47
+ return string_value.split("|")[1]
48
+
49
+ @staticmethod
50
+ def get_locale_or_did(string_value: str) -> str:
51
+ """Get the locale or DID from the formatted string (Coordinate 'c')."""
52
+ return string_value.split("|")[2]
53
+
54
+ @staticmethod
55
+ def get_region_code(string_value: str) -> str:
56
+ """Alias for backward compatibility."""
57
+ return GTime.get_locale_or_did(string_value)
58
+
59
+ @staticmethod
60
+ def is_valid_hash_function(hash_function: str | HashAlgorithm) -> bool:
61
+ """Check if the provided hash function is valid."""
62
+ if isinstance(hash_function, HashAlgorithm):
63
+ return True
64
+
65
+ if isinstance(hash_function, str):
66
+ try:
67
+ HashAlgorithm(hash_function.lower())
68
+ return True
69
+ except ValueError:
70
+ return False
71
+
72
+ return False
73
+
74
+ @staticmethod
75
+ def is_valid_region_code(region_code: str) -> bool:
76
+ """Check if the provided locale or region code is valid."""
77
+ return bool(region_code and isinstance(region_code, str))
78
+
79
+ @staticmethod
80
+ def is_iso_format(timestamp: str) -> bool:
81
+ """Check if the provided timestamp is in ISO format."""
82
+ try:
83
+ # Handle Z suffix for UTC (common in JS/ISO8601 but not supported by older python fromisoformat)
84
+ if timestamp.endswith("Z"):
85
+ timestamp = timestamp[:-1] + "+00:00"
86
+ datetime.fromisoformat(timestamp)
87
+ return True
88
+ except ValueError:
89
+ return False