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.
Files changed (113) hide show
  1. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/.gitignore +7 -0
  2. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/CHANGELOG.md +6 -0
  3. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/PKG-INFO +1 -1
  4. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/pyproject.toml +1 -1
  5. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/definition.py +0 -3
  6. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/registry.py +0 -13
  7. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/test_path_loader.py +0 -1
  8. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/test_definition.py +12 -5
  9. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/README.md +0 -0
  10. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/__init__.py +0 -0
  11. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/__init__.py +0 -0
  12. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/discovery.py +0 -0
  13. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/loader.py +0 -0
  14. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/path_loader.py +0 -0
  15. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/bundle/protocol.py +0 -0
  16. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/__init__.py +0 -0
  17. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/compatibility.py +0 -0
  18. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/compositional.py +0 -0
  19. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/definitive.py +0 -0
  20. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/evolvable.py +0 -0
  21. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/identity.py +0 -0
  22. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/lifecycle.py +0 -0
  23. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/relation.py +0 -0
  24. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/core/version.py +0 -0
  25. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/discovery/__init__.py +0 -0
  26. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/discovery/declaration.py +0 -0
  27. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/discovery/dispatcher.py +0 -0
  28. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/discovery/protocol.py +0 -0
  29. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/events/__init__.py +0 -0
  30. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/events/bus.py +0 -0
  31. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/events/event.py +0 -0
  32. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/__init__.py +0 -0
  33. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/capability.py +0 -0
  34. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/discovery.py +0 -0
  35. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/effector.py +0 -0
  36. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/provider.py +0 -0
  37. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/registry.py +0 -0
  38. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/extensions/trigger.py +0 -0
  39. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/__init__.py +0 -0
  40. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/manager.py +0 -0
  41. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/materializer.py +0 -0
  42. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/node.py +0 -0
  43. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/query.py +0 -0
  44. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/model/store.py +0 -0
  45. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/py.typed +0 -0
  46. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/replication/__init__.py +0 -0
  47. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/replication/engine.py +0 -0
  48. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/replication/job.py +0 -0
  49. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/replication/transform.py +0 -0
  50. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/resolution/__init__.py +0 -0
  51. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/resolution/conflict.py +0 -0
  52. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/resolution/engine.py +0 -0
  53. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/resolution/strategies.py +0 -0
  54. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/__init__.py +0 -0
  55. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/manager.py +0 -0
  56. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/schema/versioning.py +0 -0
  57. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/snapshot/__init__.py +0 -0
  58. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/snapshot/diff.py +0 -0
  59. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/snapshot/snapshot.py +0 -0
  60. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/source/__init__.py +0 -0
  61. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/source/manifest.py +0 -0
  62. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/source/registry.py +0 -0
  63. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/source/source.py +0 -0
  64. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/toolkit/__init__.py +0 -0
  65. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/toolkit/file_ops.py +0 -0
  66. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/src/katalyst_engine/toolkit/rendering.py +0 -0
  67. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/__init__.py +0 -0
  68. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/test_discovery.py +0 -0
  69. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/test_loader.py +0 -0
  70. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/bundle/test_protocol.py +0 -0
  71. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/conftest.py +0 -0
  72. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/__init__.py +0 -0
  73. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_compatibility.py +0 -0
  74. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_compositional.py +0 -0
  75. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_definitive.py +0 -0
  76. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_evolvable.py +0 -0
  77. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_identity.py +0 -0
  78. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_init.py +0 -0
  79. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_lifecycle.py +0 -0
  80. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_relation.py +0 -0
  81. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/core/test_version.py +0 -0
  82. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/discovery/__init__.py +0 -0
  83. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/discovery/test_declaration.py +0 -0
  84. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/discovery/test_dispatcher.py +0 -0
  85. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/events/__init__.py +0 -0
  86. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/events/test_bus.py +0 -0
  87. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/extensions/__init__.py +0 -0
  88. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/extensions/test_effector.py +0 -0
  89. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/extensions/test_provider.py +0 -0
  90. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/extensions/test_registry.py +0 -0
  91. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/__init__.py +0 -0
  92. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/test_materializer.py +0 -0
  93. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/test_node.py +0 -0
  94. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/test_query.py +0 -0
  95. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/model/test_store.py +0 -0
  96. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/replication/__init__.py +0 -0
  97. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/replication/test_engine.py +0 -0
  98. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/resolution/__init__.py +0 -0
  99. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/resolution/test_engine.py +0 -0
  100. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/resolution/test_strategies.py +0 -0
  101. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/__init__.py +0 -0
  102. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/test_manager.py +0 -0
  103. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/test_registry.py +0 -0
  104. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/schema/test_versioning.py +0 -0
  105. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/snapshot/__init__.py +0 -0
  106. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/snapshot/test_diff.py +0 -0
  107. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/snapshot/test_snapshot.py +0 -0
  108. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/source/__init__.py +0 -0
  109. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/source/test_source.py +0 -0
  110. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/toolkit/__init__.py +0 -0
  111. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/toolkit/test_file_ops.py +0 -0
  112. {katalyst_engine-3.1.0 → katalyst_engine-4.0.0}/tests/toolkit/test_rendering.py +0 -0
  113. {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.1.0
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "katalyst-engine"
3
- version = "3.1.0"
3
+ version = "4.0.0"
4
4
  description = "A distributed declaration framework — primitives for schema-aware, multi-source, evolvable artifact graphs"
5
5
  readme = "README.md"
6
6
  license = { text = "Proprietary" }
@@ -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 [
@@ -62,7 +62,6 @@ def _write_bundle(root: Path, *, deps: str = '"katalyst-engine>=3.0,<4"') -> Pat
62
62
  is_root=True,
63
63
  is_leaf=True,
64
64
  is_extension=False,
65
- scaffoldable=False,
66
65
  clonable=False,
67
66
  display_label="Demo Thing",
68
67
  display_label_plural="Demo Things",
@@ -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 test_scaffoldable_and_clonable_defaults(self) -> None:
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 test_scaffoldable_and_clonable_set(self) -> None:
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