katalyst-engine 3.1.0__tar.gz → 4.0.0__tar.gz
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.
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/.gitignore +7 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/CHANGELOG.md +6 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/PKG-INFO +1 -1
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/pyproject.toml +1 -1
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/definition.py +0 -3
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/registry.py +0 -13
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/test_path_loader.py +0 -1
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/test_definition.py +12 -5
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/README.md +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/discovery.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/loader.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/path_loader.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/protocol.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/compatibility.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/compositional.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/definitive.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/evolvable.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/identity.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/lifecycle.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/relation.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/version.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/discovery/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/discovery/declaration.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/discovery/dispatcher.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/discovery/protocol.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/events/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/events/bus.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/events/event.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/capability.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/discovery.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/effector.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/provider.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/registry.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/trigger.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/manager.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/materializer.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/node.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/query.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/store.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/py.typed +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/replication/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/replication/engine.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/replication/job.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/replication/transform.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/resolution/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/resolution/conflict.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/resolution/engine.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/resolution/strategies.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/manager.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/versioning.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/snapshot/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/snapshot/diff.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/snapshot/snapshot.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/source/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/source/manifest.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/source/registry.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/source/source.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/toolkit/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/toolkit/file_ops.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/toolkit/rendering.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/test_discovery.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/test_loader.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/test_protocol.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/conftest.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_compatibility.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_compositional.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_definitive.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_evolvable.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_identity.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_init.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_lifecycle.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_relation.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_version.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/discovery/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/discovery/test_declaration.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/discovery/test_dispatcher.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/events/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/events/test_bus.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/extensions/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/extensions/test_effector.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/extensions/test_provider.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/extensions/test_registry.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/test_materializer.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/test_node.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/test_query.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/test_store.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/replication/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/replication/test_engine.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/resolution/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/resolution/test_engine.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/resolution/test_strategies.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/test_manager.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/test_registry.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/test_versioning.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/snapshot/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/snapshot/test_diff.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/snapshot/test_snapshot.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/source/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/source/test_source.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/toolkit/__init__.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/toolkit/test_file_ops.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/toolkit/test_rendering.py +0 -0
- {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/uv.lock +0 -0
|
@@ -103,3 +103,10 @@ stack-tests/test-results/
|
|
|
103
103
|
# Generated artifacts (rebuild with `just generate-schemas`)
|
|
104
104
|
taxonomy/src/katalyst_taxonomy/engine/generated/
|
|
105
105
|
.worktrees/
|
|
106
|
+
.plan-74-75-76-77.md
|
|
107
|
+
.HANDOFF-scaffolding-wiring.md
|
|
108
|
+
.HANDOFF-2-cicd-migration.md
|
|
109
|
+
.HANDOFF-action-execution-fixes.md
|
|
110
|
+
.HANDOFF-bdd-coverage.md
|
|
111
|
+
.HANDOFF-*.md
|
|
112
|
+
docs/superpowers/
|
|
@@ -10,6 +10,12 @@ workspace packages. Tags use the `engine-vX.Y.Z` prefix.
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
## [4.0.0] -- 2026-06-16
|
|
14
|
+
|
|
15
|
+
### Removed
|
|
16
|
+
|
|
17
|
+
- **BREAKING: Removed the `scaffoldable` flag from the node-model API.** The `NodeDefinition.scaffoldable` field and the `SchemaRegistry.is_scaffoldable()` and `SchemaRegistry.scaffoldable_kinds()` methods are gone. Scaffolding is no longer an engine-level concept: any node kind may be scaffolded, and the decision is owned entirely by the scaffolding plugin/runtime in `katalyst-taxonomy`. Consumers that called `is_scaffoldable()` / `scaffoldable_kinds()` or read `NodeDefinition.scaffoldable` must drop those calls — scaffolding capability is determined by the taxonomy layer, not the engine.
|
|
18
|
+
|
|
13
19
|
## [3.1.0] -- 2026-06-11
|
|
14
20
|
|
|
15
21
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: katalyst-engine
|
|
3
|
-
Version:
|
|
3
|
+
Version: 4.0.0
|
|
4
4
|
Summary: A distributed declaration framework — primitives for schema-aware, multi-source, evolvable artifact graphs
|
|
5
5
|
Project-URL: Repository, https://github.com/esimplicityinc/katalyst-taxonomy
|
|
6
6
|
Author: eSimplicity
|
|
@@ -120,9 +120,6 @@ class NodeDefinition(Definitive, frozen=True):
|
|
|
120
120
|
cross_references: tuple[FieldRef, ...] = ()
|
|
121
121
|
"""Typed references from fields on this kind to other node kinds."""
|
|
122
122
|
|
|
123
|
-
scaffoldable: bool = False
|
|
124
|
-
"""Whether instances of this kind support scaffolding (project generation)."""
|
|
125
|
-
|
|
126
123
|
clonable: bool = False
|
|
127
124
|
"""Whether instances of this kind can be cloned."""
|
|
128
125
|
|
|
@@ -168,24 +168,11 @@ class SchemaRegistry:
|
|
|
168
168
|
nd = self._node_defs.get(kind)
|
|
169
169
|
return nd.is_extension if nd else False
|
|
170
170
|
|
|
171
|
-
def is_scaffoldable(self, kind: str) -> bool:
|
|
172
|
-
"""Whether this kind supports project scaffolding."""
|
|
173
|
-
nd = self._node_defs.get(kind)
|
|
174
|
-
return nd.scaffoldable if nd else False
|
|
175
|
-
|
|
176
171
|
def is_clonable(self, kind: str) -> bool:
|
|
177
172
|
"""Whether this kind can be cloned."""
|
|
178
173
|
nd = self._node_defs.get(kind)
|
|
179
174
|
return nd.clonable if nd else False
|
|
180
175
|
|
|
181
|
-
def scaffoldable_kinds(self) -> list[str]:
|
|
182
|
-
"""Return all kinds that support scaffolding, sorted by display_order."""
|
|
183
|
-
return [
|
|
184
|
-
nd.describes_kind
|
|
185
|
-
for nd in sorted(self._node_defs.values(), key=lambda d: d.display_order)
|
|
186
|
-
if nd.scaffoldable
|
|
187
|
-
]
|
|
188
|
-
|
|
189
176
|
def clonable_kinds(self) -> list[str]:
|
|
190
177
|
"""Return all kinds that can be cloned, sorted by display_order."""
|
|
191
178
|
return [
|
|
@@ -134,22 +134,29 @@ class TestNodeDefinition:
|
|
|
134
134
|
assert restored.describes_kind == nd.describes_kind
|
|
135
135
|
assert len(restored.fields) == len(nd.fields)
|
|
136
136
|
|
|
137
|
-
def
|
|
137
|
+
def test_clonable_default(self) -> None:
|
|
138
138
|
nd = NodeDefinition(
|
|
139
139
|
identity=_id("node_definition", "system"),
|
|
140
140
|
describes_kind="system",
|
|
141
141
|
)
|
|
142
|
-
assert nd.scaffoldable is False
|
|
143
142
|
assert nd.clonable is False
|
|
144
143
|
|
|
145
|
-
def
|
|
144
|
+
def test_no_scaffoldable_field(self) -> None:
|
|
145
|
+
# Scaffolding is a plugin concern — the engine NodeDefinition must NOT
|
|
146
|
+
# carry a scaffoldable flag (regression guard for the extraction).
|
|
147
|
+
nd = NodeDefinition(
|
|
148
|
+
identity=_id("node_definition", "layer"),
|
|
149
|
+
describes_kind="layer",
|
|
150
|
+
)
|
|
151
|
+
assert not hasattr(nd, "scaffoldable")
|
|
152
|
+
assert "scaffoldable" not in type(nd).model_fields
|
|
153
|
+
|
|
154
|
+
def test_clonable_set(self) -> None:
|
|
146
155
|
nd = NodeDefinition(
|
|
147
156
|
identity=_id("node_definition", "layer"),
|
|
148
157
|
describes_kind="layer",
|
|
149
|
-
scaffoldable=True,
|
|
150
158
|
clonable=True,
|
|
151
159
|
)
|
|
152
|
-
assert nd.scaffoldable is True
|
|
153
160
|
assert nd.clonable is True
|
|
154
161
|
|
|
155
162
|
def test_display_label_defaults(self) -> None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/discovery/declaration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/capability.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/replication/transform.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/resolution/strategies.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|