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.
- clm/__init__.py +230 -0
- clm/__main__.py +25 -0
- clm/cross_cutting/__init__.py +50 -0
- clm/cross_cutting/_test_runner.py +36 -0
- clm/cross_cutting/async_utils.py +25 -0
- clm/cross_cutting/cel_builder.py +123 -0
- clm/cross_cutting/cel_converter.py +697 -0
- clm/cross_cutting/cel_engine.py +252 -0
- clm/cross_cutting/cel_ops.py +72 -0
- clm/cross_cutting/cel_ops_db.py +157 -0
- clm/cross_cutting/cel_ops_files.py +99 -0
- clm/cross_cutting/cel_ops_state.py +71 -0
- clm/cross_cutting/cel_ops_strings.py +64 -0
- clm/cross_cutting/cel_resolver.py +63 -0
- clm/cross_cutting/cel_slices.py +56 -0
- clm/cross_cutting/cel_store.py +330 -0
- clm/cross_cutting/clm_logger.py +140 -0
- clm/cross_cutting/config/__init__.py +155 -0
- clm/cross_cutting/config/config_constants.py +392 -0
- clm/cross_cutting/config/env_parameters.py +90 -0
- clm/cross_cutting/config/logging.py +378 -0
- clm/cross_cutting/config/settings.py +504 -0
- clm/cross_cutting/context.py +5 -0
- clm/cross_cutting/domain_models.py +55 -0
- clm/cross_cutting/domain_types.py +61 -0
- clm/cross_cutting/effects.py +67 -0
- clm/cross_cutting/errors.py +153 -0
- clm/cross_cutting/governance.py +331 -0
- clm/cross_cutting/guards.py +41 -0
- clm/cross_cutting/mcard.py +321 -0
- clm/cross_cutting/native.py +185 -0
- clm/cross_cutting/observability.py +289 -0
- clm/cross_cutting/pcard.py +434 -0
- clm/cross_cutting/registry.py +71 -0
- clm/cross_cutting/resources.py +84 -0
- clm/cross_cutting/secrets.py +44 -0
- clm/cross_cutting/subprocess_utils.py +118 -0
- clm/cross_cutting/telemetry.py +164 -0
- clm/cross_cutting/testing/__init__.py +8 -0
- clm/cross_cutting/testing/comparator.py +187 -0
- clm/cross_cutting/testing/datasets.py +87 -0
- clm/cross_cutting/timeutil.py +20 -0
- clm/cross_cutting/types/new_type_check.py +0 -0
- clm/cross_cutting/utils/__init__.py +1 -0
- clm/cross_cutting/utils/url_safety.py +50 -0
- clm/cross_cutting/vcard.py +560 -0
- clm/cross_cutting/writer.py +118 -0
- clm/layer0/README.md +50 -0
- clm/layer0/__init__.py +223 -0
- clm/layer0/algebra.py +60 -0
- clm/layer0/algebra_baldwin.py +133 -0
- clm/layer0/algebra_baldwin_generators.py +36 -0
- clm/layer0/algebra_equivalence.py +262 -0
- clm/layer0/algebra_ingest.py +306 -0
- clm/layer0/algebra_manifest_io.py +156 -0
- clm/layer0/assembler.py +481 -0
- clm/layer0/cel/__init__.py +23 -0
- clm/layer0/cel_eval.py +491 -0
- clm/layer0/codec.py +106 -0
- clm/layer0/context.py +122 -0
- clm/layer0/db.py +160 -0
- clm/layer0/exceptions.py +73 -0
- clm/layer0/fibration.py +106 -0
- clm/layer0/gates.py +50 -0
- clm/layer0/hash.py +80 -0
- clm/layer0/loader.py +826 -0
- clm/layer0/math_utils.py +163 -0
- clm/layer0/mcard.py +96 -0
- clm/layer0/model/__init__.py +0 -0
- clm/layer0/model/action.py +223 -0
- clm/layer0/model/card.py +280 -0
- clm/layer0/model/card_triad.py +427 -0
- clm/layer0/model/compatibility.py +60 -0
- clm/layer0/model/dictionary.py +46 -0
- clm/layer0/model/dots.py +331 -0
- clm/layer0/model/event_producer.py +88 -0
- clm/layer0/model/g_time.py +89 -0
- clm/layer0/model/handle.py +163 -0
- clm/layer0/model/hash/__init__.py +6 -0
- clm/layer0/model/hash/algorithms/__init__.py +3 -0
- clm/layer0/model/hash/algorithms/custom_hash.py +7 -0
- clm/layer0/model/hash/algorithms/local_sha256.py +178 -0
- clm/layer0/model/hash/constants.py +53 -0
- clm/layer0/model/hash/enums.py +60 -0
- clm/layer0/model/hash/validator.py +307 -0
- clm/layer0/model/interpreter.py +275 -0
- clm/layer0/model/pagination.py +45 -0
- clm/layer0/model/pcard.py +716 -0
- clm/layer0/model/schema.py +44 -0
- clm/layer0/model/utils/__init__.py +1 -0
- clm/layer0/model/utils/content_analyzer.py +152 -0
- clm/layer0/model/validators/__init__.py +1 -0
- clm/layer0/model/validators/base_validator.py +44 -0
- clm/layer0/model/validators/binary_validator.py +66 -0
- clm/layer0/model/validators/text_validator.py +82 -0
- clm/layer0/model/validators/validation_registry.py +49 -0
- clm/layer0/model/vcard.py +823 -0
- clm/layer0/model/vcard_ext/__init__.py +39 -0
- clm/layer0/model/vcard_ext/core.py +60 -0
- clm/layer0/model/vcard_ext/network.py +23 -0
- clm/layer0/model/vcard_ext/observability.py +63 -0
- clm/layer0/model/vcard_ext/storage.py +60 -0
- clm/layer0/model/vcard_ext/vendors.py +211 -0
- clm/layer0/model/vcard_sandwich.py +119 -0
- clm/layer0/model/vcard_vocabulary.py +463 -0
- clm/layer0/model/workflow.py +274 -0
- clm/layer0/narrative.py +431 -0
- clm/layer0/ontology/collection.py +125 -0
- clm/layer0/parser.py +429 -0
- clm/layer0/relations.py +73 -0
- clm/layer0/rule_evaluator.py +251 -0
- clm/layer0/schema/__init__.py +38 -0
- clm/layer0/schema/ddl.py +97 -0
- clm/layer0/templates/abstract.yaml +99 -0
- clm/layer0/templates/balanced.yaml +253 -0
- clm/layer0/templates/concrete.yaml +172 -0
- clm/layer0/type_registry.py +223 -0
- clm/layer0/types.py +204 -0
- clm/layer0/utils.py +886 -0
- clm/layer0/verifier_core.py +262 -0
- clm/layer1/__init__.py +31 -0
- clm/layer1/action_dispatcher.py +275 -0
- clm/layer1/adapter_registry.py +233 -0
- clm/layer1/algebra_baldwin_generators.py +192 -0
- clm/layer1/arrow_compiler.py +525 -0
- clm/layer1/batch_processor.py +152 -0
- clm/layer1/cel/__init__.py +27 -0
- clm/layer1/cel/builder.py +173 -0
- clm/layer1/engine.py +759 -0
- clm/layer1/engine_async.py +89 -0
- clm/layer1/eval_callback.py +49 -0
- clm/layer1/gate_composer.py +229 -0
- clm/layer1/hoare_sandwich.py +298 -0
- clm/layer1/identity_guard.py +348 -0
- clm/layer1/matrix.py +138 -0
- clm/layer1/neural_runtime.py +221 -0
- clm/layer1/operations/__init__.py +123 -0
- clm/layer1/operations/augment.py +156 -0
- clm/layer1/operations/base.py +109 -0
- clm/layer1/operations/builtins.py +338 -0
- clm/layer1/operations/dispatch.py +144 -0
- clm/layer1/operations/exclude.py +107 -0
- clm/layer1/operations/handle.py +197 -0
- clm/layer1/operations/identity.py +139 -0
- clm/layer1/operations/invert.py +66 -0
- clm/layer1/operations/loader.py +116 -0
- clm/layer1/operations/manipulators/__init__.py +23 -0
- clm/layer1/operations/manipulators/document.py +211 -0
- clm/layer1/operations/manipulators/media.py +134 -0
- clm/layer1/operations/manipulators/structured.py +159 -0
- clm/layer1/operations/manipulators/tabular.py +334 -0
- clm/layer1/operations/port.py +65 -0
- clm/layer1/operations/services.py +529 -0
- clm/layer1/operations/split.py +117 -0
- clm/layer1/operations/substitute.py +75 -0
- clm/layer1/petri.py +1052 -0
- clm/layer1/pocketflow_orchestrator.py +408 -0
- clm/layer1/pocketflow_scheduler.py +519 -0
- clm/layer1/protocols.py +197 -0
- clm/layer1/runtime_adapter.py +718 -0
- clm/layer1/runtimes/__init__.py +71 -0
- clm/layer1/runtimes/_generated_assertions.py +125 -0
- clm/layer1/runtimes/_generated_types.py +42 -0
- clm/layer1/runtimes/base.py +265 -0
- clm/layer1/runtimes/binary.py +101 -0
- clm/layer1/runtimes/factory.py +203 -0
- clm/layer1/runtimes/javascript.py +321 -0
- clm/layer1/runtimes/javascript_runtime.js +33 -0
- clm/layer1/runtimes/js_scripts/isomorphism.mjs +22 -0
- clm/layer1/runtimes/js_scripts/loader.mjs +52 -0
- clm/layer1/runtimes/lambda_calc.py +126 -0
- clm/layer1/runtimes/python.py +288 -0
- clm/layer1/runtimes/python_runtime.py +41 -0
- clm/layer1/runtimes/script.py +114 -0
- clm/layer1/sandbox.py +334 -0
- clm/layer1/savepoint_guard.py +136 -0
- clm/layer1/sparse_net.py +122 -0
- clm/layer1/spec_tester.py +165 -0
- clm/layer1/store.py +295 -0
- clm/layer1/test_runner.py +498 -0
- clm/layer1/type_inspector.py +166 -0
- clm/layer1/verifier.py +772 -0
- clm/layer1/vm.py +91 -0
- clm/layer2/__init__.py +78 -0
- clm/layer2/card_collection.py +678 -0
- clm/layer2/classifier.py +479 -0
- clm/layer2/engine/__init__.py +1 -0
- clm/layer2/engine/abstract_sql_engine.py +320 -0
- clm/layer2/engine/base.py +193 -0
- clm/layer2/engine/duckdb_engine.py +576 -0
- clm/layer2/engine/sqlite_engine.py +518 -0
- clm/layer2/fiber/__init__.py +31 -0
- clm/layer2/fiber/context.py +89 -0
- clm/layer2/fiber/disposable.py +163 -0
- clm/layer2/fiber/fiber.py +125 -0
- clm/layer2/fiber/hoare.py +191 -0
- clm/layer2/file_io.py +376 -0
- clm/layer2/file_registrar.py +77 -0
- clm/layer2/ingest.py +202 -0
- clm/layer2/lineage.py +322 -0
- clm/layer2/mcard_fs.py +262 -0
- clm/layer2/merkle.py +11 -0
- clm/layer2/mime.py +244 -0
- clm/layer2/mime_detector.py +245 -0
- clm/layer2/private_collection.py +118 -0
- clm/layer2/shared_store.py +11 -0
- clm/layer2/storage/__init__.py +190 -0
- clm/layer2/storage/db_bitemporal.py +141 -0
- clm/layer2/storage/db_driver.py +331 -0
- clm/layer2/storage/db_hyperlinks.py +214 -0
- clm/layer2/storage/db_pool.py +139 -0
- clm/layer2/storage/db_repository.py +229 -0
- clm/layer2/storage/savepoint.py +78 -0
- clm/layer2/storage/sqlite_wal.py +74 -0
- clm/layer2/tridb.py +245 -0
- clm/layer2/vcard_receipt.py +71 -0
- clm/layer2/vfs.py +17 -0
- clm/layer3/__init__.py +141 -0
- clm/layer3/agency/__init__.py +19 -0
- clm/layer3/agency/config.py +220 -0
- clm/layer3/agency/providers/__init__.py +15 -0
- clm/layer3/agency/providers/base.py +91 -0
- clm/layer3/agency/providers/mlc_llm.py +169 -0
- clm/layer3/agency/providers/ollama.py +203 -0
- clm/layer3/agency/router.py +71 -0
- clm/layer3/agency/runtime.py +524 -0
- clm/layer3/gateway.py +353 -0
- clm/layer3/open_interpreter_adapter.py +159 -0
- clm/layer3/rag/__init__.py +70 -0
- clm/layer3/rag/cli.py +228 -0
- clm/layer3/rag/config.py +153 -0
- clm/layer3/rag/embeddings/__init__.py +16 -0
- clm/layer3/rag/embeddings/base.py +79 -0
- clm/layer3/rag/embeddings/ollama.py +211 -0
- clm/layer3/rag/embeddings/vision.py +290 -0
- clm/layer3/rag/engine.py +276 -0
- clm/layer3/rag/graph/__init__.py +22 -0
- clm/layer3/rag/graph/community.py +198 -0
- clm/layer3/rag/graph/engine.py +433 -0
- clm/layer3/rag/graph/extractor.py +255 -0
- clm/layer3/rag/graph/schema.py +115 -0
- clm/layer3/rag/graph/store.py +641 -0
- clm/layer3/rag/indexer.py +333 -0
- clm/layer3/rag/llm_providers.json +52 -0
- clm/layer3/rag/semantic_versioning.py +313 -0
- clm/layer3/rag/vector/__init__.py +28 -0
- clm/layer3/rag/vector/handle_vector_store.py +749 -0
- clm/layer3/rag/vector/schema.py +151 -0
- clm/layer3/rag/vector/store.py +632 -0
- clm/layer3/reticulum/__init__.py +55 -0
- clm/layer3/reticulum/bridge.py +74 -0
- clm/layer3/reticulum/daemon.py +88 -0
- clm/layer3/reticulum/discovery.py +164 -0
- clm/layer3/reticulum/identity.py +107 -0
- clm/layer3/reticulum/media.py +148 -0
- clm/layer3/reticulum/transport.py +133 -0
- clm/layer3/satori/__init__.py +209 -0
- clm/layer3/satori/alpha_conversion.py +168 -0
- clm/layer3/satori/beta_reduction.py +359 -0
- clm/layer3/satori/continuation.py +38 -0
- clm/layer3/satori/eta_conversion.py +205 -0
- clm/layer3/satori/free_variables.py +163 -0
- clm/layer3/satori/io_effects.py +370 -0
- clm/layer3/satori/lambda_runtime.py +726 -0
- clm/layer3/satori/lambda_term.py +230 -0
- clm/layer3/satori/sheaf_audit.py +261 -0
- clm/layer3/satori/speech_act.py +279 -0
- clm/layer4/README.md +9 -0
- clm/layer4/__init__.py +67 -0
- clm/layer4/_sovereign_executor.py +580 -0
- clm/layer4/action_commands.py +719 -0
- clm/layer4/api.py +236 -0
- clm/layer4/bootstrap/__init__.py +13 -0
- clm/layer4/bootstrap/bootstrapper.py +118 -0
- clm/layer4/bootstrap/cleanup.py +44 -0
- clm/layer4/bootstrap/clm_hooks.py +49 -0
- clm/layer4/bootstrap/genesis.py +77 -0
- clm/layer4/bootstrap/injection.py +125 -0
- clm/layer4/cli.py +549 -0
- clm/layer4/collection_manager.py +553 -0
- clm/layer4/commands/__init__.py +81 -0
- clm/layer4/commands/action_cmd.py +42 -0
- clm/layer4/commands/check_cmd.py +82 -0
- clm/layer4/commands/envelope.py +73 -0
- clm/layer4/commands/evaluate_cmd.py +224 -0
- clm/layer4/commands/mcard_cmd.py +24 -0
- clm/layer4/commands/petri_cmd.py +92 -0
- clm/layer4/commands/tridb_cmd.py +319 -0
- clm/layer4/commands/version_cmd.py +27 -0
- clm/layer4/diff_commands.py +167 -0
- clm/layer4/eoa_sponsor.py +232 -0
- clm/layer4/events.py +69 -0
- clm/layer4/flux_gateway.py +133 -0
- clm/layer4/gateway.py +91 -0
- clm/layer4/loader.py +307 -0
- clm/layer4/mcard_commands.py +166 -0
- clm/layer4/membrane.py +273 -0
- clm/layer4/navigation.py +50 -0
- clm/layer4/protocol/protocol_entry_python.py +108 -0
- clm/layer4/protocol/python_sync.py +126 -0
- clm/layer4/runner.py +150 -0
- clm/layer4/satori.py +262 -0
- clm/layer4/server/python_sync_client.py +150 -0
- clm/layer4/server/python_sync_server.py +139 -0
- clm/layer4/server/service_api.py +315 -0
- clm/layer4/server/start_servers.py +107 -0
- clm/layer4/server/stop_servers.py +24 -0
- clm/layer4/simulated_optimization_fix.py +0 -0
- clm/layer4/storage.py +463 -0
- clm/layer4/tridb_admin.py +268 -0
- clm/layer4/websocket/test_ws_client.py +104 -0
- clm/layer4/websocket/test_ws_server.py +138 -0
- clm/layer4/websocket/ws_server_local.py +160 -0
- clm/layer5/__init__.py +51 -0
- clm/layer5/async_batch_writer.py +133 -0
- clm/layer5/learning.py +276 -0
- clm/layer5/telemetry_hook.py +107 -0
- clm/layer5/type_lattice.py +238 -0
- clm/py.typed +0 -0
- clm/schemas/__init__.py +652 -0
- clm/schemas/abstract_face_schema.yaml +77 -0
- clm/schemas/cel_schema.yaml +416 -0
- clm/schemas/lifecycle/__init__.py +45 -0
- clm/schemas/lifecycle/models.py +123 -0
- clm/schemas/lifecycle/service.py +364 -0
- clm/schemas/mcard_schema.sql +192 -0
- clm/schemas/mcard_vector_schema.sql +283 -0
- clm/schemas/mlp-context-v1.json +91 -0
- clm_kernel-0.0.0.dist-info/METADATA +121 -0
- clm_kernel-0.0.0.dist-info/RECORD +333 -0
- clm_kernel-0.0.0.dist-info/WHEEL +4 -0
- clm_kernel-0.0.0.dist-info/entry_points.txt +3 -0
- clm_kernel-0.0.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Specification Tester for the Polynomial Type Runtime.
|
|
3
|
+
|
|
4
|
+
Isolates testing and validation capabilities that match PCards against
|
|
5
|
+
their defined `balanced` expectations (e.g. unit tests encoded inside the PCard).
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
import yaml
|
|
11
|
+
|
|
12
|
+
from clm.layer0.model.card import MCard
|
|
13
|
+
from clm.layer1.engine import PTREngine
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SpecTester:
|
|
17
|
+
"""Evaluates balanced tests defined in a PCard's CLM."""
|
|
18
|
+
|
|
19
|
+
def __init__(self, engine: PTREngine):
|
|
20
|
+
self.engine = engine
|
|
21
|
+
self.collection = engine.collection
|
|
22
|
+
|
|
23
|
+
def run_balanced_tests(
|
|
24
|
+
self, pcard_hash: str, context: dict[str, Any] | None = None
|
|
25
|
+
) -> dict[str, Any]:
|
|
26
|
+
"""Run all test cases defined in the PCard's balanced dimension."""
|
|
27
|
+
pcard = self.collection.get(pcard_hash)
|
|
28
|
+
if not pcard:
|
|
29
|
+
raise ValueError(f"PCard not found: {pcard_hash}")
|
|
30
|
+
|
|
31
|
+
pcard_content = pcard.get_content().decode("utf-8")
|
|
32
|
+
pcard_data = yaml.safe_load(pcard_content)
|
|
33
|
+
|
|
34
|
+
balanced = pcard_data.get("confirmation", pcard_data.get("balanced", {}))
|
|
35
|
+
test_cases = balanced.get("test_cases", [])
|
|
36
|
+
|
|
37
|
+
results = {"total": len(test_cases), "passed": 0, "failed": 0, "details": []}
|
|
38
|
+
|
|
39
|
+
for i, test_case in enumerate(test_cases):
|
|
40
|
+
description = test_case.get("description", f"Test Case #{i + 1}")
|
|
41
|
+
|
|
42
|
+
given = test_case.get("assumption", test_case.get("given", {}))
|
|
43
|
+
expected = test_case.get("confirmation", test_case.get("then", {}))
|
|
44
|
+
|
|
45
|
+
input_val = given
|
|
46
|
+
if isinstance(given, dict) and "input" in given:
|
|
47
|
+
input_val = given["input"]
|
|
48
|
+
elif isinstance(given, dict) and len(given) == 1:
|
|
49
|
+
input_val = list(given.values())[0]
|
|
50
|
+
|
|
51
|
+
when = test_case.get("behavior", test_case.get("when", {}))
|
|
52
|
+
test_context = when.get("params", {})
|
|
53
|
+
|
|
54
|
+
full_context = (context or {}).copy()
|
|
55
|
+
full_context.update(test_context)
|
|
56
|
+
|
|
57
|
+
if isinstance(input_val, str):
|
|
58
|
+
target_content = input_val.encode("utf-8")
|
|
59
|
+
else:
|
|
60
|
+
import json
|
|
61
|
+
|
|
62
|
+
target_content = json.dumps(input_val).encode("utf-8")
|
|
63
|
+
|
|
64
|
+
target = MCard(target_content)
|
|
65
|
+
self.collection.add(target)
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
result = self.engine.execute_pcard(
|
|
69
|
+
pcard_hash, target.hash, context=full_context
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
passed = True
|
|
73
|
+
failure_reason = ""
|
|
74
|
+
actual = result.output
|
|
75
|
+
|
|
76
|
+
for key, expected_val in expected.items():
|
|
77
|
+
if key == "epsilon":
|
|
78
|
+
continue
|
|
79
|
+
|
|
80
|
+
actual_val = actual
|
|
81
|
+
if isinstance(actual, dict) and key in actual:
|
|
82
|
+
actual_val = actual[key]
|
|
83
|
+
elif isinstance(actual, int | float | str) and key in [
|
|
84
|
+
"result",
|
|
85
|
+
"sine_value",
|
|
86
|
+
"value",
|
|
87
|
+
]:
|
|
88
|
+
actual_val = actual
|
|
89
|
+
|
|
90
|
+
if isinstance(expected_val, int | float) and isinstance(
|
|
91
|
+
actual_val, int | float
|
|
92
|
+
):
|
|
93
|
+
epsilon = float(expected.get("epsilon", 0))
|
|
94
|
+
if abs(actual_val - expected_val) > epsilon:
|
|
95
|
+
passed = False
|
|
96
|
+
failure_reason = f"Expected {key}={expected_val} (epsilon={epsilon}), got {actual_val}"
|
|
97
|
+
break
|
|
98
|
+
elif isinstance(expected_val, dict) and isinstance(
|
|
99
|
+
actual_val, dict
|
|
100
|
+
):
|
|
101
|
+
|
|
102
|
+
def check_subset(exp, act, path=""):
|
|
103
|
+
for k, v in exp.items():
|
|
104
|
+
if k not in act:
|
|
105
|
+
return False, f"Missing key '{path}{k}'"
|
|
106
|
+
|
|
107
|
+
if isinstance(v, dict) and isinstance(act[k], dict):
|
|
108
|
+
sub_ok, sub_reason = check_subset(
|
|
109
|
+
v, act[k], f"{path}{k}."
|
|
110
|
+
)
|
|
111
|
+
if not sub_ok:
|
|
112
|
+
return False, sub_reason
|
|
113
|
+
elif v != act[k]:
|
|
114
|
+
return (
|
|
115
|
+
False,
|
|
116
|
+
f"Value mismatch at '{path}{k}': expected {v}, got {act[k]}",
|
|
117
|
+
)
|
|
118
|
+
return True, ""
|
|
119
|
+
|
|
120
|
+
subset_ok, subset_reason = check_subset(
|
|
121
|
+
expected_val, actual_val
|
|
122
|
+
)
|
|
123
|
+
if not subset_ok:
|
|
124
|
+
passed = False
|
|
125
|
+
failure_reason = f"Dict mismatch for {key}: {subset_reason}"
|
|
126
|
+
break
|
|
127
|
+
elif actual_val != expected_val:
|
|
128
|
+
passed = False
|
|
129
|
+
failure_reason = (
|
|
130
|
+
f"Expected {key}={expected_val}, got {actual_val}"
|
|
131
|
+
)
|
|
132
|
+
break
|
|
133
|
+
|
|
134
|
+
if passed:
|
|
135
|
+
results["passed"] += 1
|
|
136
|
+
status = "PASSED"
|
|
137
|
+
else:
|
|
138
|
+
results["failed"] += 1
|
|
139
|
+
status = "FAILED"
|
|
140
|
+
|
|
141
|
+
results["details"].append(
|
|
142
|
+
{
|
|
143
|
+
"id": i + 1,
|
|
144
|
+
"description": description,
|
|
145
|
+
"status": status,
|
|
146
|
+
"input": input_val,
|
|
147
|
+
"expected": expected,
|
|
148
|
+
"actual": actual,
|
|
149
|
+
"reason": failure_reason,
|
|
150
|
+
}
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
except Exception as e:
|
|
154
|
+
results["failed"] += 1
|
|
155
|
+
results["details"].append(
|
|
156
|
+
{
|
|
157
|
+
"id": i + 1,
|
|
158
|
+
"description": description,
|
|
159
|
+
"status": "ERROR",
|
|
160
|
+
"input": input_val,
|
|
161
|
+
"error": str(e),
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
return results
|
clm/layer1/store.py
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"""PTR Shared Store - Standardized data contract for PCard execution.
|
|
2
|
+
|
|
3
|
+
Canonical Path: kernel/scripts/clm/layer1/store.py
|
|
4
|
+
Parity: TypeScript `mcard-js/src/ptr/core/SharedStore.ts`
|
|
5
|
+
|
|
6
|
+
Based on PocketFlow's Shared Store pattern, this module provides a formalized
|
|
7
|
+
data structure for communication between PCards in the PTR execution pipeline.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from dataclasses import dataclass, field, replace
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class PTRSharedStore:
|
|
18
|
+
"""Standardized shared store for PTR execution.
|
|
19
|
+
|
|
20
|
+
All nodes (PCards) agree upon this data contract for communication.
|
|
21
|
+
Replaces ad-hoc context dictionaries with typed, validated fields.
|
|
22
|
+
|
|
23
|
+
Layers:
|
|
24
|
+
- Identity: Zero-Trust routing and caller verification
|
|
25
|
+
- Content: PCard and target artifacts
|
|
26
|
+
- Execution: Runtime inputs, outputs, and configuration
|
|
27
|
+
- Verification: VCard proofs and validation results
|
|
28
|
+
- Observability: Metrics, timing, and correctness tracking
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
# =========================================================================
|
|
32
|
+
# IDENTITY LAYER - Zero-Trust routing and authentication
|
|
33
|
+
# =========================================================================
|
|
34
|
+
caller_identity_hash: str | None = None
|
|
35
|
+
"""DID or hash of the calling identity for AuthZ/AuthN checks."""
|
|
36
|
+
|
|
37
|
+
agent_identities: Any = field(default=None, repr=False)
|
|
38
|
+
"""CardCollection reference to agent_identities.db for Zero-Trust routing."""
|
|
39
|
+
|
|
40
|
+
# =========================================================================
|
|
41
|
+
# CONTENT LAYER - PCard and target artifacts
|
|
42
|
+
# =========================================================================
|
|
43
|
+
pcard: Any = field(default=None, repr=False)
|
|
44
|
+
"""The PCard (Polynomial Card) being executed."""
|
|
45
|
+
|
|
46
|
+
target: Any = field(default=None, repr=False)
|
|
47
|
+
"""The target MCard the PCard operates upon."""
|
|
48
|
+
|
|
49
|
+
pcard_hash: str | None = None
|
|
50
|
+
"""Content-addressed hash of the PCard."""
|
|
51
|
+
|
|
52
|
+
target_hash: str | None = None
|
|
53
|
+
"""Content-addressed hash of the target."""
|
|
54
|
+
|
|
55
|
+
# =========================================================================
|
|
56
|
+
# EXECUTION LAYER - Runtime inputs, outputs, and configuration
|
|
57
|
+
# =========================================================================
|
|
58
|
+
inputs: dict[str, Any] = field(default_factory=dict)
|
|
59
|
+
"""Input parameters for execution (replaces raw context dict)."""
|
|
60
|
+
|
|
61
|
+
outputs: dict[str, Any] = field(default_factory=dict)
|
|
62
|
+
"""Output results from execution."""
|
|
63
|
+
|
|
64
|
+
runtime_config: dict[str, Any] = field(default_factory=dict)
|
|
65
|
+
"""Runtime configuration (timeouts, language, sandbox settings, etc.)."""
|
|
66
|
+
|
|
67
|
+
# =========================================================================
|
|
68
|
+
# VERIFICATION LAYER - VCard proofs and validation
|
|
69
|
+
# =========================================================================
|
|
70
|
+
v_pre: Any = field(default=None, repr=False)
|
|
71
|
+
"""Pre-condition VCard (verification before execution)."""
|
|
72
|
+
|
|
73
|
+
v_post: Any = field(default=None, repr=False)
|
|
74
|
+
"""Post-condition VCard (verification after execution)."""
|
|
75
|
+
|
|
76
|
+
verification_result: Any = field(default=None, repr=False)
|
|
77
|
+
"""Result from CLMVerifier.validate() or similar."""
|
|
78
|
+
|
|
79
|
+
# =========================================================================
|
|
80
|
+
# OBSERVABILITY LAYER - Metrics, timing, and correctness
|
|
81
|
+
# =========================================================================
|
|
82
|
+
execution_time_ms: int = 0
|
|
83
|
+
"""Total execution time in milliseconds."""
|
|
84
|
+
|
|
85
|
+
alignment_score: float | None = None
|
|
86
|
+
"""Directional alignment score (if enabled)."""
|
|
87
|
+
|
|
88
|
+
invariants_preserved: bool = True
|
|
89
|
+
"""Whether all correctness invariants were preserved."""
|
|
90
|
+
|
|
91
|
+
# =========================================================================
|
|
92
|
+
# TRI-DATABASE TOPOLOGY - Four-Database context (§Key Arch Principles #4)
|
|
93
|
+
# =========================================================================
|
|
94
|
+
tri_db: Any = field(default=None, repr=False)
|
|
95
|
+
"""TriDatabase reference — soul-bound SSOT for the agency.
|
|
96
|
+
Carries the complete Who/What/How cognitive mapping."""
|
|
97
|
+
|
|
98
|
+
data_plane_hash: str | None = None
|
|
99
|
+
"""Current Data Plane input hash — bits-to-hash guarantee (§1.1 Data Plane)."""
|
|
100
|
+
|
|
101
|
+
control_plane_phase: str | None = None
|
|
102
|
+
"""Current PTR lifecycle phase: prep/exec/post/await (§1.1 Control Plane)."""
|
|
103
|
+
|
|
104
|
+
chl_temporal: Any = field(default=None, repr=False)
|
|
105
|
+
"""Active CHL temporal dimension (CHLTemporal instance).
|
|
106
|
+
Tracks Design/Compile/Execute time per §1.5."""
|
|
107
|
+
|
|
108
|
+
retry_count: int = 0
|
|
109
|
+
"""Number of retries attempted (for retry mechanism)."""
|
|
110
|
+
|
|
111
|
+
# =========================================================================
|
|
112
|
+
# GOVERNANCE TELEMETRY LAYER (Token Arithmetics)
|
|
113
|
+
# Computed during prep→exec→post lifecycle per Architecture §03 Token Arithmetics
|
|
114
|
+
# and Specifications §04 §2.5 Type-Based Possibility Arithmetics
|
|
115
|
+
# =========================================================================
|
|
116
|
+
possibility_magnitude: float | None = None
|
|
117
|
+
"""M(B^A) = |B|^|A| — total combinatorial possibility space."""
|
|
118
|
+
|
|
119
|
+
governance_narrowing: float | None = None
|
|
120
|
+
"""N = 1 - |B'|^|A'| / |B|^|A| — policy restrictiveness ratio."""
|
|
121
|
+
|
|
122
|
+
epiplexity_yield: float | None = None
|
|
123
|
+
"""E = S_T / M — structured knowledge per possibility (using alignment_score as S_T)."""
|
|
124
|
+
|
|
125
|
+
product_dependency_count: int | None = None
|
|
126
|
+
"""Pi = |A1 × A2 × ... × An| — concurrent precondition count."""
|
|
127
|
+
|
|
128
|
+
# =========================================================================
|
|
129
|
+
# LEGACY COMPATIBILITY - Support dict-style access
|
|
130
|
+
# =========================================================================
|
|
131
|
+
|
|
132
|
+
def __getitem__(self, key: str) -> Any:
|
|
133
|
+
"""Enable dict-style access for backward compatibility."""
|
|
134
|
+
if hasattr(self, key):
|
|
135
|
+
return getattr(self, key)
|
|
136
|
+
# Fallback to inputs dict for arbitrary keys
|
|
137
|
+
if key in self.inputs:
|
|
138
|
+
return self.inputs[key]
|
|
139
|
+
raise KeyError(f"'{key}' not found in store attributes or inputs")
|
|
140
|
+
|
|
141
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
142
|
+
"""Enable dict-style assignment for backward compatibility."""
|
|
143
|
+
if hasattr(self, key) and not key.startswith("_"):
|
|
144
|
+
setattr(self, key, value)
|
|
145
|
+
else:
|
|
146
|
+
# Store arbitrary keys in inputs dict
|
|
147
|
+
self.inputs[key] = value
|
|
148
|
+
|
|
149
|
+
def get(self, key: str, default: Any = None) -> Any:
|
|
150
|
+
"""Dict-style .get() method for backward compatibility."""
|
|
151
|
+
try:
|
|
152
|
+
return self[key]
|
|
153
|
+
except KeyError:
|
|
154
|
+
return default
|
|
155
|
+
|
|
156
|
+
def to_dict(self) -> dict[str, Any]:
|
|
157
|
+
"""Convert store to dictionary (for serialization)."""
|
|
158
|
+
result = {
|
|
159
|
+
# Identity
|
|
160
|
+
"caller_identity_hash": self.caller_identity_hash,
|
|
161
|
+
"agent_identities": self.agent_identities,
|
|
162
|
+
# Content
|
|
163
|
+
"pcard_hash": self.pcard_hash,
|
|
164
|
+
"target_hash": self.target_hash,
|
|
165
|
+
# Execution
|
|
166
|
+
"inputs": self.inputs,
|
|
167
|
+
"outputs": self.outputs,
|
|
168
|
+
"runtime_config": self.runtime_config,
|
|
169
|
+
# Verification
|
|
170
|
+
"verification_result": self.verification_result,
|
|
171
|
+
# Observability
|
|
172
|
+
"execution_time_ms": self.execution_time_ms,
|
|
173
|
+
"alignment_score": self.alignment_score,
|
|
174
|
+
"invariants_preserved": self.invariants_preserved,
|
|
175
|
+
"retry_count": self.retry_count,
|
|
176
|
+
# Governance telemetry
|
|
177
|
+
"possibility_magnitude": self.possibility_magnitude,
|
|
178
|
+
"governance_narrowing": self.governance_narrowing,
|
|
179
|
+
"epiplexity_yield": self.epiplexity_yield,
|
|
180
|
+
"product_dependency_count": self.product_dependency_count,
|
|
181
|
+
}
|
|
182
|
+
# Tri-Database topology (only include when set)
|
|
183
|
+
if self.data_plane_hash is not None:
|
|
184
|
+
result["data_plane_hash"] = self.data_plane_hash
|
|
185
|
+
if self.control_plane_phase is not None:
|
|
186
|
+
result["control_plane_phase"] = self.control_plane_phase
|
|
187
|
+
if self.chl_temporal is not None:
|
|
188
|
+
result["chl_temporal"] = (
|
|
189
|
+
self.chl_temporal.to_dict()
|
|
190
|
+
if hasattr(self.chl_temporal, "to_dict")
|
|
191
|
+
else self.chl_temporal
|
|
192
|
+
)
|
|
193
|
+
return result
|
|
194
|
+
|
|
195
|
+
@classmethod
|
|
196
|
+
def from_dict(cls, data: dict[str, Any]) -> PTRSharedStore:
|
|
197
|
+
"""Create store from dictionary (for deserialization)."""
|
|
198
|
+
# Extract known fields
|
|
199
|
+
known_fields = {
|
|
200
|
+
"caller_identity_hash",
|
|
201
|
+
"agent_identities",
|
|
202
|
+
"pcard_hash",
|
|
203
|
+
"target_hash",
|
|
204
|
+
"inputs",
|
|
205
|
+
"outputs",
|
|
206
|
+
"runtime_config",
|
|
207
|
+
"verification_result",
|
|
208
|
+
"execution_time_ms",
|
|
209
|
+
"alignment_score",
|
|
210
|
+
"invariants_preserved",
|
|
211
|
+
"retry_count",
|
|
212
|
+
# Tri-Database topology fields
|
|
213
|
+
"tri_db",
|
|
214
|
+
"data_plane_hash",
|
|
215
|
+
"control_plane_phase",
|
|
216
|
+
"chl_temporal",
|
|
217
|
+
# Governance telemetry fields
|
|
218
|
+
"possibility_magnitude",
|
|
219
|
+
"governance_narrowing",
|
|
220
|
+
"epiplexity_yield",
|
|
221
|
+
"product_dependency_count",
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
store_data = {k: v for k, v in data.items() if k in known_fields}
|
|
225
|
+
|
|
226
|
+
# Unknown fields go into inputs
|
|
227
|
+
unknown_fields = {k: v for k, v in data.items() if k not in known_fields}
|
|
228
|
+
if unknown_fields:
|
|
229
|
+
store_data.setdefault("inputs", {}).update(unknown_fields)
|
|
230
|
+
|
|
231
|
+
return cls(**store_data)
|
|
232
|
+
|
|
233
|
+
def merge_inputs(self, additional: dict[str, Any]) -> PTRSharedStore:
|
|
234
|
+
"""Return new store with merged inputs (immutable update pattern)."""
|
|
235
|
+
new_inputs = {**self.inputs, **additional}
|
|
236
|
+
return replace(self, inputs=new_inputs)
|
|
237
|
+
|
|
238
|
+
def with_outputs(self, outputs: dict[str, Any]) -> PTRSharedStore:
|
|
239
|
+
"""Return new store with outputs set (immutable update pattern)."""
|
|
240
|
+
return replace(self, outputs=outputs)
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def create_store_from_context(
|
|
244
|
+
context: dict[str, Any],
|
|
245
|
+
pcard: Any | None = None,
|
|
246
|
+
target: Any | None = None,
|
|
247
|
+
agent_identities: Any | None = None,
|
|
248
|
+
) -> PTRSharedStore:
|
|
249
|
+
"""Create a PTRSharedStore from a legacy context dictionary.
|
|
250
|
+
|
|
251
|
+
This helper enables gradual migration from dict-based context to typed store.
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
context: Legacy context dictionary
|
|
255
|
+
pcard: PCard instance (if available)
|
|
256
|
+
target: Target MCard instance (if available)
|
|
257
|
+
agent_identities: Identity space collection (if available)
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
PTRSharedStore with context data properly partitioned
|
|
261
|
+
"""
|
|
262
|
+
known_mapping = {
|
|
263
|
+
"caller_identity_hash": "caller_identity_hash",
|
|
264
|
+
"pcard_hash": "pcard_hash",
|
|
265
|
+
"target_hash": "target_hash",
|
|
266
|
+
"execution_time_ms": "execution_time_ms",
|
|
267
|
+
"alignment_score": "alignment_score",
|
|
268
|
+
"invariants_preserved": "invariants_preserved",
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
store_kwargs: dict[str, Any] = {}
|
|
272
|
+
remaining_context = dict(context) # Copy
|
|
273
|
+
|
|
274
|
+
for context_key, store_key in known_mapping.items():
|
|
275
|
+
if context_key in remaining_context:
|
|
276
|
+
store_kwargs[store_key] = remaining_context.pop(context_key)
|
|
277
|
+
|
|
278
|
+
# Handle boolean string conversion for invariants_preserved
|
|
279
|
+
if "invariants_preserved" in store_kwargs:
|
|
280
|
+
val = store_kwargs["invariants_preserved"]
|
|
281
|
+
if isinstance(val, str):
|
|
282
|
+
store_kwargs["invariants_preserved"] = val.lower() == "true"
|
|
283
|
+
|
|
284
|
+
# Add object references
|
|
285
|
+
store_kwargs["pcard"] = pcard
|
|
286
|
+
store_kwargs["target"] = target
|
|
287
|
+
store_kwargs["agent_identities"] = agent_identities
|
|
288
|
+
|
|
289
|
+
# Remaining context goes into inputs
|
|
290
|
+
store_kwargs["inputs"] = remaining_context
|
|
291
|
+
|
|
292
|
+
return PTRSharedStore(**store_kwargs)
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
__all__ = ["PTRSharedStore", "create_store_from_context"]
|