katalyst-forge 4.0.0__tar.gz → 4.1.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 (63) hide show
  1. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/.gitignore +5 -0
  2. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/PKG-INFO +2 -2
  3. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/pyproject.toml +2 -2
  4. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/bundle.py +2 -2
  5. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/relationships.py +25 -0
  6. katalyst_forge-4.1.0/src/katalyst_forge/wings/delivery.py +310 -0
  7. katalyst_forge-4.0.0/src/katalyst_forge/wings/delivery.py +0 -160
  8. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/__init__.py +0 -0
  9. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/py.typed +0 -0
  10. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/creation/_base.yaml.j2 +0 -0
  11. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/creation/layer.yaml.j2 +0 -0
  12. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/creation/project.yaml.j2 +0 -0
  13. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/creation/stack.yaml.j2 +0 -0
  14. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/creation/system.yaml.j2 +0 -0
  15. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/creation/team.yaml.j2 +0 -0
  16. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/creation/team_member.yaml.j2 +0 -0
  17. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/app-docker/.dockerignore +0 -0
  18. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/app-docker/.env.example +0 -0
  19. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/app-docker/README.md +0 -0
  20. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/app-docker/base/Dockerfile +0 -0
  21. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/app-docker/docker-compose.yaml +0 -0
  22. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/app-docker/env-template/Dockerfile +0 -0
  23. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/app-docker/env-template/docker-compose.override.yaml +0 -0
  24. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/app-docker/env-template/environment.yaml +0 -0
  25. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/app-docker/layer.yaml +0 -0
  26. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/README.md +0 -0
  27. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/main.tf +0 -0
  28. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/outputs.tf +0 -0
  29. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/variables.tf +0 -0
  30. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/env-template/environment.yaml +0 -0
  31. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/env-template/terragrunt.hcl +0 -0
  32. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/context.hcl +0 -0
  33. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/dev.yaml +0 -0
  34. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/prod.yaml +0 -0
  35. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/staging.yaml +0 -0
  36. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/layer.yaml +0 -0
  37. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/version.yaml +0 -0
  38. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/README.md +0 -0
  39. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/base/app/argocd-application.yaml +0 -0
  40. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/base/kustomization.yaml +0 -0
  41. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/base/namespace.yaml +0 -0
  42. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/argocd-application.yaml +0 -0
  43. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/kustomization.yaml +0 -0
  44. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/patch-argocd-application.yaml +0 -0
  45. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/layer.yaml +0 -0
  46. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/README.md +0 -0
  47. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/deployment.yaml +0 -0
  48. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/kustomization.yaml +0 -0
  49. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/namespace.yaml +0 -0
  50. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/service.yaml +0 -0
  51. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/environment-template/kustomization.yaml +0 -0
  52. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/environment-template/patch-deployment.yaml +0 -0
  53. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/base/kustomization.yaml +0 -0
  54. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/base/namespace.yaml +0 -0
  55. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/kustomization.yaml +0 -0
  56. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/layer.yaml +0 -0
  57. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/wings/__init__.py +0 -0
  58. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/wings/agentic.py +0 -0
  59. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/wings/design.py +0 -0
  60. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/wings/org.py +0 -0
  61. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/wings/pipeline.py +0 -0
  62. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/wings/practices.py +0 -0
  63. {katalyst_forge-4.0.0 → katalyst_forge-4.1.0}/src/katalyst_forge/wings/system.py +0 -0
@@ -95,6 +95,11 @@ Thumbs.db
95
95
  # Browser/Playwright state files
96
96
  browser-state-*.json
97
97
 
98
+ # Agent harness scratch (run exhaust, never the design bundle)
99
+ .opencode/sessions/
100
+ .opencode/analysis/
101
+ .opencode/package-lock.json
102
+
98
103
  # Build artifacts
99
104
  site/
100
105
  stack-tests/cucumber-report/
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: katalyst-forge
3
- Version: 4.0.0
3
+ Version: 4.1.0
4
4
  Summary: The Forge bundle — 31 node-type definitions for software delivery taxonomy
5
5
  Author: eSimplicity
6
6
  License: Proprietary
7
7
  Requires-Python: >=3.12
8
- Requires-Dist: katalyst-engine<5,>=4.0
8
+ Requires-Dist: katalyst-engine<5,>=4.1
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "katalyst-forge"
3
- version = "4.0.0"
3
+ version = "4.1.0"
4
4
  description = "The Forge bundle — 31 node-type definitions for software delivery taxonomy"
5
5
  license = { text = "Proprietary" }
6
6
  requires-python = ">=3.12"
@@ -8,7 +8,7 @@ authors = [
8
8
  { name = "eSimplicity" }
9
9
  ]
10
10
  dependencies = [
11
- "katalyst-engine>=4.0,<5",
11
+ "katalyst-engine>=4.1,<5",
12
12
  ]
13
13
 
14
14
  [project.entry-points."katalyst_engine.bundles"]
@@ -11,7 +11,7 @@ Wing modules:
11
11
  - ``wings/org.py`` — organization, program, project, team, team_member, role
12
12
  - ``wings/practices.py`` — practice_area, competency, skill, tool
13
13
  - ``wings/design.py`` — business_domain_model, user_type, user_need, design_spec, adr, nfr, specification, assertion
14
- - ``wings/delivery.py`` — work_item, change_entry
14
+ - ``wings/delivery.py`` — work_item, change_entry, agent_run
15
15
  - ``wings/pipeline.py`` — cicd_stage
16
16
  - ``wings/pipeline.py`` — cicd_stage, cicd_job_template, cicd_workflow_template
17
17
  - ``wings/agentic.py`` — agent, agent_skill
@@ -92,7 +92,7 @@ class ForgeBundle:
92
92
  version=Version(major=4, minor=0),
93
93
  provided_kinds=ALL_KINDS,
94
94
  wing_names=ALL_WING_NAMES,
95
- description="Forge taxonomy — 29 node types for modeling software delivery organizations",
95
+ description="Forge taxonomy — 30 node types for modeling software delivery organizations",
96
96
  )
97
97
 
98
98
  def node_definitions(self) -> list[NodeDefinition]:
@@ -236,6 +236,29 @@ REFERENCES_ROAD_ITEM_REL = RelationshipDefinition(
236
236
  cardinality=Cardinality.MANY_TO_ONE,
237
237
  )
238
238
 
239
+ REFERENCES_WORK_ITEM_REL = RelationshipDefinition(
240
+ identity=_rel_id("references_work_item"),
241
+ describes_kind="references_work_item",
242
+ description="Change entry references a work item",
243
+ wing="workflow",
244
+ display_order=440,
245
+ cardinality=Cardinality.MANY_TO_ONE,
246
+ )
247
+
248
+ TRACES_TO_REL = RelationshipDefinition(
249
+ identity=_rel_id("traces_to"),
250
+ describes_kind="traces_to",
251
+ description=(
252
+ "Work item traces to a design-wing artifact it implements, addresses, or "
253
+ "satisfies (capability, user_need, nfr, adr, design_spec, specification). "
254
+ "The target kind is carried by the source field reference, so adding a new "
255
+ "traceable target kind is a one-line field addition, not a new edge type."
256
+ ),
257
+ wing="workflow",
258
+ display_order=450,
259
+ cardinality=Cardinality.MANY_TO_MANY,
260
+ )
261
+
239
262
  # ── Pipeline wing ────────────────────────────────────────────────────
240
263
 
241
264
  STAGE_DEPENDS_ON_REL = RelationshipDefinition(
@@ -287,6 +310,8 @@ ALL_RELATIONSHIP_DEFINITIONS: list[RelationshipDefinition] = [
287
310
  BLOCKED_BY_REL,
288
311
  SUPERSEDED_BY_REL,
289
312
  REFERENCES_ROAD_ITEM_REL,
313
+ REFERENCES_WORK_ITEM_REL,
314
+ TRACES_TO_REL,
290
315
  # pipeline
291
316
  STAGE_DEPENDS_ON_REL,
292
317
  BELONGS_TO_STAGE_REL,
@@ -0,0 +1,310 @@
1
+ """Delivery wing — work_item, change_entry."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from katalyst_engine.core.identity import Identity
6
+ from katalyst_engine.schema.definition import (
7
+ FieldRef,
8
+ FieldSpec,
9
+ NodeDefinition,
10
+ ParentRule,
11
+ WingDefinition,
12
+ )
13
+
14
+ WORK_ITEM: NodeDefinition = NodeDefinition(
15
+ identity=Identity(kind="node_definition", name="work_item"),
16
+ describes_kind="work_item",
17
+ wing="delivery",
18
+ display_order=370,
19
+ directory_name="work_items",
20
+ is_root=True,
21
+ is_leaf=False,
22
+ is_extension=False,
23
+ clonable=False,
24
+ display_label="Work Item",
25
+ display_label_plural="Work Items",
26
+ extends_kinds=(),
27
+ parent_rules=(),
28
+ fields=(
29
+ FieldSpec(
30
+ name="title",
31
+ field_type="string",
32
+ required=False,
33
+ description="",
34
+ ),
35
+ FieldSpec(
36
+ name="status",
37
+ field_type="string",
38
+ required=False,
39
+ description="",
40
+ allowed_values=(
41
+ "idea",
42
+ "proposed",
43
+ "accepted",
44
+ "planned",
45
+ "in_progress",
46
+ "blocked",
47
+ "delivered",
48
+ "validated",
49
+ "released",
50
+ "retired",
51
+ ),
52
+ ),
53
+ FieldSpec(
54
+ name="phase",
55
+ field_type="integer",
56
+ required=False,
57
+ description="Implementation phase (0-3)",
58
+ ),
59
+ FieldSpec(
60
+ name="priority",
61
+ field_type="string",
62
+ required=False,
63
+ description="",
64
+ ),
65
+ FieldSpec(
66
+ name="started",
67
+ field_type="string",
68
+ required=False,
69
+ description="ISO 8601 start date",
70
+ ),
71
+ FieldSpec(
72
+ name="completed",
73
+ field_type="string",
74
+ required=False,
75
+ description="ISO 8601 completion date",
76
+ ),
77
+ FieldSpec(
78
+ name="blocked_by",
79
+ field_type="list",
80
+ required=False,
81
+ description="",
82
+ ),
83
+ FieldSpec(
84
+ name="blocks",
85
+ field_type="list",
86
+ required=False,
87
+ description="",
88
+ ),
89
+ FieldSpec(
90
+ name="capabilities",
91
+ field_type="list",
92
+ required=False,
93
+ description="Capabilities this work item implements",
94
+ ),
95
+ FieldSpec(
96
+ name="user_needs",
97
+ field_type="list",
98
+ required=False,
99
+ description="User needs this work item addresses",
100
+ ),
101
+ FieldSpec(
102
+ name="nfrs",
103
+ field_type="list",
104
+ required=False,
105
+ description="NFRs this work item satisfies",
106
+ ),
107
+ FieldSpec(
108
+ name="adrs",
109
+ field_type="list",
110
+ required=False,
111
+ description="ADRs this work item implements",
112
+ ),
113
+ FieldSpec(
114
+ name="design_specs",
115
+ field_type="list",
116
+ required=False,
117
+ description="Design specs this work item realizes",
118
+ ),
119
+ FieldSpec(
120
+ name="specifications",
121
+ field_type="list",
122
+ required=False,
123
+ description="Specifications this work item fulfills",
124
+ ),
125
+ ),
126
+ cross_references=(
127
+ FieldRef(
128
+ field_name="blocked_by",
129
+ target_kind="work_item",
130
+ rel_type="BLOCKED_BY",
131
+ ),
132
+ FieldRef(
133
+ field_name="blocks",
134
+ target_kind="work_item",
135
+ rel_type="BLOCKS",
136
+ ),
137
+ FieldRef(
138
+ field_name="capabilities",
139
+ target_kind="capability",
140
+ rel_type="TRACES_TO",
141
+ ),
142
+ FieldRef(
143
+ field_name="user_needs",
144
+ target_kind="user_need",
145
+ rel_type="TRACES_TO",
146
+ ),
147
+ FieldRef(
148
+ field_name="nfrs",
149
+ target_kind="nfr",
150
+ rel_type="TRACES_TO",
151
+ ),
152
+ FieldRef(
153
+ field_name="adrs",
154
+ target_kind="adr",
155
+ rel_type="TRACES_TO",
156
+ ),
157
+ FieldRef(
158
+ field_name="design_specs",
159
+ target_kind="design_spec",
160
+ rel_type="TRACES_TO",
161
+ ),
162
+ FieldRef(
163
+ field_name="specifications",
164
+ target_kind="specification",
165
+ rel_type="TRACES_TO",
166
+ ),
167
+ ),
168
+ )
169
+
170
+ CHANGE_ENTRY: NodeDefinition = NodeDefinition(
171
+ identity=Identity(kind="node_definition", name="change_entry"),
172
+ describes_kind="change_entry",
173
+ wing="delivery",
174
+ display_order=395,
175
+ directory_name="change_entries",
176
+ is_root=False,
177
+ is_leaf=True,
178
+ is_extension=False,
179
+ clonable=False,
180
+ display_label="Change Entry",
181
+ display_label_plural="Change Entries",
182
+ extends_kinds=(),
183
+ parent_rules=(
184
+ ParentRule(
185
+ child_kind="change_entry",
186
+ allowed_parent_kinds=frozenset({"work_item"}),
187
+ required=False,
188
+ ),
189
+ ),
190
+ fields=(
191
+ FieldSpec(
192
+ name="title",
193
+ field_type="string",
194
+ required=False,
195
+ description="",
196
+ ),
197
+ FieldSpec(
198
+ name="work_item_id",
199
+ field_type="string",
200
+ required=False,
201
+ description="Reference to the parent work item",
202
+ ),
203
+ FieldSpec(
204
+ name="road_id",
205
+ field_type="string",
206
+ required=False,
207
+ description="DEPRECATED alias of work_item_id",
208
+ ),
209
+ FieldSpec(
210
+ name="date",
211
+ field_type="string",
212
+ required=False,
213
+ description="ISO 8601 date",
214
+ ),
215
+ FieldSpec(
216
+ name="version",
217
+ field_type="string",
218
+ required=False,
219
+ description="",
220
+ ),
221
+ FieldSpec(
222
+ name="categories",
223
+ field_type="list",
224
+ required=False,
225
+ description="",
226
+ ),
227
+ ),
228
+ cross_references=(
229
+ FieldRef(
230
+ field_name="work_item_id",
231
+ target_kind="work_item",
232
+ rel_type="REFERENCES_WORK_ITEM",
233
+ ),
234
+ FieldRef(
235
+ field_name="road_id",
236
+ target_kind="work_item",
237
+ rel_type="REFERENCES_ROAD_ITEM",
238
+ ),
239
+ ),
240
+ )
241
+
242
+ AGENT_RUN: NodeDefinition = NodeDefinition(
243
+ identity=Identity(kind="node_definition", name="agent_run"),
244
+ describes_kind="agent_run",
245
+ wing="delivery",
246
+ display_order=398,
247
+ directory_name="agent_runs",
248
+ is_root=False,
249
+ is_leaf=True,
250
+ is_extension=False,
251
+ clonable=False,
252
+ display_label="Agent Run",
253
+ display_label_plural="Agent Runs",
254
+ extends_kinds=(),
255
+ parent_rules=(
256
+ ParentRule(
257
+ child_kind="agent_run",
258
+ allowed_parent_kinds=frozenset({"work_item"}),
259
+ required=False,
260
+ ),
261
+ ),
262
+ fields=(
263
+ FieldSpec(
264
+ name="stages",
265
+ field_type="list",
266
+ required=False,
267
+ description="Ordered per-stage telemetry: stage, agent, gate, started, ended, model, tokens, retries (identifiers and counts only)",
268
+ ),
269
+ FieldSpec(
270
+ name="totals",
271
+ field_type="list",
272
+ required=False,
273
+ description="Run-level totals (e.g. total tokens, total retries)",
274
+ ),
275
+ FieldSpec(
276
+ name="entered_status",
277
+ field_type="string",
278
+ required=False,
279
+ description="work_item status when the run started",
280
+ ),
281
+ FieldSpec(
282
+ name="exited_status",
283
+ field_type="string",
284
+ required=False,
285
+ description="work_item status when the run ended",
286
+ ),
287
+ FieldSpec(
288
+ name="started",
289
+ field_type="string",
290
+ required=False,
291
+ description="ISO 8601 run start timestamp",
292
+ ),
293
+ FieldSpec(
294
+ name="ended",
295
+ field_type="string",
296
+ required=False,
297
+ description="ISO 8601 run end timestamp",
298
+ ),
299
+ ),
300
+ cross_references=(),
301
+ )
302
+
303
+ DELIVERY_WING: WingDefinition = WingDefinition(
304
+ identity=Identity(kind="wing_definition", name="delivery"),
305
+ describes_kind="delivery",
306
+ display_name="Delivery",
307
+ member_kinds=("work_item", "change_entry", "agent_run"),
308
+ )
309
+
310
+ DELIVERY_WING_NODES = [WORK_ITEM, CHANGE_ENTRY, AGENT_RUN]
@@ -1,160 +0,0 @@
1
- """Delivery wing — work_item, change_entry."""
2
-
3
- from __future__ import annotations
4
-
5
- from katalyst_engine.core.identity import Identity
6
- from katalyst_engine.schema.definition import (
7
- FieldRef,
8
- FieldSpec,
9
- NodeDefinition,
10
- ParentRule,
11
- WingDefinition,
12
- )
13
-
14
- WORK_ITEM: NodeDefinition = NodeDefinition(
15
- identity=Identity(kind="node_definition", name="work_item"),
16
- describes_kind="work_item",
17
- wing="delivery",
18
- display_order=370,
19
- directory_name="work_items",
20
- is_root=True,
21
- is_leaf=False,
22
- is_extension=False,
23
- clonable=False,
24
- display_label="Work Item",
25
- display_label_plural="Work Items",
26
- extends_kinds=(),
27
- parent_rules=(),
28
- fields=(
29
- FieldSpec(
30
- name="title",
31
- field_type="string",
32
- required=False,
33
- description="",
34
- ),
35
- FieldSpec(
36
- name="status",
37
- field_type="string",
38
- required=False,
39
- description="",
40
- ),
41
- FieldSpec(
42
- name="phase",
43
- field_type="integer",
44
- required=False,
45
- description="Implementation phase (0-3)",
46
- ),
47
- FieldSpec(
48
- name="priority",
49
- field_type="string",
50
- required=False,
51
- description="",
52
- ),
53
- FieldSpec(
54
- name="started",
55
- field_type="string",
56
- required=False,
57
- description="ISO 8601 start date",
58
- ),
59
- FieldSpec(
60
- name="completed",
61
- field_type="string",
62
- required=False,
63
- description="ISO 8601 completion date",
64
- ),
65
- FieldSpec(
66
- name="blocked_by",
67
- field_type="list",
68
- required=False,
69
- description="",
70
- ),
71
- FieldSpec(
72
- name="blocks",
73
- field_type="list",
74
- required=False,
75
- description="",
76
- ),
77
- ),
78
- cross_references=(
79
- FieldRef(
80
- field_name="blocked_by",
81
- target_kind="work_item",
82
- rel_type="BLOCKED_BY",
83
- ),
84
- FieldRef(
85
- field_name="blocks",
86
- target_kind="work_item",
87
- rel_type="BLOCKS",
88
- ),
89
- ),
90
- )
91
-
92
- CHANGE_ENTRY: NodeDefinition = NodeDefinition(
93
- identity=Identity(kind="node_definition", name="change_entry"),
94
- describes_kind="change_entry",
95
- wing="delivery",
96
- display_order=395,
97
- directory_name="change_entries",
98
- is_root=False,
99
- is_leaf=True,
100
- is_extension=False,
101
- clonable=False,
102
- display_label="Change Entry",
103
- display_label_plural="Change Entries",
104
- extends_kinds=(),
105
- parent_rules=(
106
- ParentRule(
107
- child_kind="change_entry",
108
- allowed_parent_kinds=frozenset({"road_item"}),
109
- required=False,
110
- ),
111
- ),
112
- fields=(
113
- FieldSpec(
114
- name="title",
115
- field_type="string",
116
- required=False,
117
- description="",
118
- ),
119
- FieldSpec(
120
- name="road_id",
121
- field_type="string",
122
- required=False,
123
- description="Reference to the parent road item",
124
- ),
125
- FieldSpec(
126
- name="date",
127
- field_type="string",
128
- required=False,
129
- description="ISO 8601 date",
130
- ),
131
- FieldSpec(
132
- name="version",
133
- field_type="string",
134
- required=False,
135
- description="",
136
- ),
137
- FieldSpec(
138
- name="categories",
139
- field_type="list",
140
- required=False,
141
- description="",
142
- ),
143
- ),
144
- cross_references=(
145
- FieldRef(
146
- field_name="road_id",
147
- target_kind="road_item",
148
- rel_type="REFERENCES_ROAD_ITEM",
149
- ),
150
- ),
151
- )
152
-
153
- DELIVERY_WING: WingDefinition = WingDefinition(
154
- identity=Identity(kind="wing_definition", name="delivery"),
155
- describes_kind="delivery",
156
- display_name="Delivery",
157
- member_kinds=("work_item", "change_entry"),
158
- )
159
-
160
- DELIVERY_WING_NODES = [WORK_ITEM, CHANGE_ENTRY]