katalyst-forge 2.1.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 (64) hide show
  1. katalyst_forge/__init__.py +10 -0
  2. katalyst_forge/bundle.py +175 -0
  3. katalyst_forge/py.typed +0 -0
  4. katalyst_forge/relationships.py +263 -0
  5. katalyst_forge/templates/creation/_base.yaml.j2 +12 -0
  6. katalyst_forge/templates/creation/layer.yaml.j2 +21 -0
  7. katalyst_forge/templates/creation/project.yaml.j2 +16 -0
  8. katalyst_forge/templates/creation/stack.yaml.j2 +18 -0
  9. katalyst_forge/templates/creation/system.yaml.j2 +15 -0
  10. katalyst_forge/templates/creation/team.yaml.j2 +16 -0
  11. katalyst_forge/templates/creation/team_member.yaml.j2 +17 -0
  12. katalyst_forge/templates/scaffolds/app-docker/.dockerignore +51 -0
  13. katalyst_forge/templates/scaffolds/app-docker/.env.example +14 -0
  14. katalyst_forge/templates/scaffolds/app-docker/README.md +40 -0
  15. katalyst_forge/templates/scaffolds/app-docker/base/Dockerfile +54 -0
  16. katalyst_forge/templates/scaffolds/app-docker/docker-compose.yaml +34 -0
  17. katalyst_forge/templates/scaffolds/app-docker/env-template/Dockerfile +9 -0
  18. katalyst_forge/templates/scaffolds/app-docker/env-template/docker-compose.override.yaml +12 -0
  19. katalyst_forge/templates/scaffolds/app-docker/env-template/environment.yaml +9 -0
  20. katalyst_forge/templates/scaffolds/app-docker/layer.yaml +15 -0
  21. katalyst_forge/templates/scaffolds/iac-terragrunt/README.md +149 -0
  22. katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/main.tf +12 -0
  23. katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/outputs.tf +5 -0
  24. katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/variables.tf +5 -0
  25. katalyst_forge/templates/scaffolds/iac-terragrunt/env-template/environment.yaml +1 -0
  26. katalyst_forge/templates/scaffolds/iac-terragrunt/env-template/terragrunt.hcl +19 -0
  27. katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/context.hcl +121 -0
  28. katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/dev.yaml +4 -0
  29. katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/prod.yaml +4 -0
  30. katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/staging.yaml +4 -0
  31. katalyst_forge/templates/scaffolds/iac-terragrunt/layer.yaml +15 -0
  32. katalyst_forge/templates/scaffolds/iac-terragrunt/version.yaml +1 -0
  33. katalyst_forge/templates/scaffolds/k8s-argocd/README.md +136 -0
  34. katalyst_forge/templates/scaffolds/k8s-argocd/base/app/argocd-application.yaml +17 -0
  35. katalyst_forge/templates/scaffolds/k8s-argocd/base/kustomization.yaml +5 -0
  36. katalyst_forge/templates/scaffolds/k8s-argocd/base/namespace.yaml +4 -0
  37. katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/argocd-application.yaml +20 -0
  38. katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/kustomization.yaml +9 -0
  39. katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/patch-argocd-application.yaml +15 -0
  40. katalyst_forge/templates/scaffolds/k8s-argocd/layer.yaml +18 -0
  41. katalyst_forge/templates/scaffolds/k8s-kustomize/README.md +95 -0
  42. katalyst_forge/templates/scaffolds/k8s-kustomize/base/deployment.yaml +22 -0
  43. katalyst_forge/templates/scaffolds/k8s-kustomize/base/kustomization.yaml +11 -0
  44. katalyst_forge/templates/scaffolds/k8s-kustomize/base/namespace.yaml +4 -0
  45. katalyst_forge/templates/scaffolds/k8s-kustomize/base/service.yaml +11 -0
  46. katalyst_forge/templates/scaffolds/k8s-kustomize/environment-template/kustomization.yaml +6 -0
  47. katalyst_forge/templates/scaffolds/k8s-kustomize/environment-template/patch-deployment.yaml +13 -0
  48. katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/base/kustomization.yaml +4 -0
  49. katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/base/namespace.yaml +4 -0
  50. katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/kustomization.yaml +3 -0
  51. katalyst_forge/templates/scaffolds/k8s-kustomize/layer.yaml +15 -0
  52. katalyst_forge/wings/__init__.py +1 -0
  53. katalyst_forge/wings/agentic.py +137 -0
  54. katalyst_forge/wings/delivery.py +162 -0
  55. katalyst_forge/wings/design.py +462 -0
  56. katalyst_forge/wings/dx.py +157 -0
  57. katalyst_forge/wings/org.py +211 -0
  58. katalyst_forge/wings/pipeline.py +134 -0
  59. katalyst_forge/wings/practices.py +220 -0
  60. katalyst_forge/wings/system.py +266 -0
  61. katalyst_forge-2.1.0.dist-info/METADATA +8 -0
  62. katalyst_forge-2.1.0.dist-info/RECORD +64 -0
  63. katalyst_forge-2.1.0.dist-info/WHEEL +4 -0
  64. katalyst_forge-2.1.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,10 @@
1
+ """katalyst-forge — The Forge bundle for katalyst-engine.
2
+
3
+ Provides 33 node-type definitions across 8 wings for software delivery taxonomy.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from katalyst_forge.bundle import ForgeBundle
9
+
10
+ __all__ = ["ForgeBundle"]
@@ -0,0 +1,175 @@
1
+ """Forge bundle — the pre-installed taxonomy for software delivery.
2
+
3
+ Assembles 33 node types across 8 wings from the wing modules into
4
+ a single ``ForgeBundle`` that implements the engine's ``Bundle``
5
+ protocol. Discovered via the ``katalyst_engine.bundles`` entry point.
6
+
7
+ "Forge" — where delivery artifacts are forged.
8
+
9
+ Wing modules:
10
+ - ``wings/system.py`` — system, environment, stack, layer, library, capability
11
+ - ``wings/org.py`` — organization, program, project, team, team_member, role
12
+ - ``wings/practices.py`` — practice_area, competency, skill, tool
13
+ - ``wings/design.py`` — business_domain_model, user_type, user_story, adr, nfr, specification, assertion
14
+ - ``wings/delivery.py`` — work_item, change_entry
15
+ - ``wings/dx.py`` — template, action, template_overlay
16
+ - ``wings/pipeline.py`` — cicd_stage, cicd_job_template, cicd_workflow_template
17
+ - ``wings/agentic.py`` — agent, agent_skill
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ from pathlib import Path
23
+
24
+ from katalyst_engine.bundle.protocol import BundleManifest
25
+ from katalyst_engine.core.identity import Identity
26
+ from katalyst_engine.core.version import Version
27
+ from katalyst_engine.schema.definition import (
28
+ NodeDefinition,
29
+ RelationshipDefinition,
30
+ SchemaDefinition,
31
+ WingDefinition,
32
+ )
33
+ from katalyst_engine.schema.manager import SchemaManager
34
+
35
+ from katalyst_forge.relationships import ALL_RELATIONSHIP_DEFINITIONS
36
+ from katalyst_forge.wings.agentic import AGENTIC_WING, AGENTIC_WING_NODES
37
+ from katalyst_forge.wings.delivery import DELIVERY_WING, DELIVERY_WING_NODES
38
+ from katalyst_forge.wings.design import DESIGN_WING, DESIGN_WING_NODES
39
+ from katalyst_forge.wings.dx import DX_WING, DX_WING_NODES
40
+ from katalyst_forge.wings.org import ORG_WING, ORG_WING_NODES
41
+ from katalyst_forge.wings.pipeline import PIPELINE_WING, PIPELINE_WING_NODES
42
+ from katalyst_forge.wings.practices import PRACTICES_WING, PRACTICES_WING_NODES
43
+ from katalyst_forge.wings.system import SYSTEM_WING, SYSTEM_WING_NODES
44
+
45
+ # ---------------------------------------------------------------------------
46
+ # Aggregate all definitions from wing modules
47
+ # ---------------------------------------------------------------------------
48
+
49
+ ALL_NODE_DEFINITIONS: list[NodeDefinition] = [
50
+ *SYSTEM_WING_NODES,
51
+ *ORG_WING_NODES,
52
+ *PRACTICES_WING_NODES,
53
+ *DESIGN_WING_NODES,
54
+ *DELIVERY_WING_NODES,
55
+ *DX_WING_NODES,
56
+ *PIPELINE_WING_NODES,
57
+ *AGENTIC_WING_NODES,
58
+ ]
59
+
60
+ ALL_KINDS: frozenset[str] = frozenset(nd.describes_kind for nd in ALL_NODE_DEFINITIONS)
61
+
62
+ ALL_WING_DEFINITIONS: list[WingDefinition] = [
63
+ SYSTEM_WING,
64
+ ORG_WING,
65
+ DESIGN_WING,
66
+ DELIVERY_WING,
67
+ PRACTICES_WING,
68
+ DX_WING,
69
+ PIPELINE_WING,
70
+ AGENTIC_WING,
71
+ ]
72
+
73
+ ALL_WING_NAMES: frozenset[str] = frozenset(wd.identity.name for wd in ALL_WING_DEFINITIONS)
74
+
75
+
76
+ # ---------------------------------------------------------------------------
77
+ # Bundle class
78
+ # ---------------------------------------------------------------------------
79
+
80
+
81
+ class ForgeBundle:
82
+ """The Forge bundle — 33 node types across 8 wings.
83
+
84
+ This is the pre-installed taxonomy bundle that ships with
85
+ Katalyst Taxonomy. It models software delivery organizations
86
+ using systems, stacks, layers, teams, practices, and more.
87
+
88
+ "Forge" — where delivery artifacts are forged.
89
+ """
90
+
91
+ @property
92
+ def manifest(self) -> BundleManifest:
93
+ return BundleManifest(
94
+ identity=Identity(kind="bundle", name="forge"),
95
+ version=Version(major=2, minor=0),
96
+ provided_kinds=ALL_KINDS,
97
+ wing_names=ALL_WING_NAMES,
98
+ description="Forge taxonomy — 33 node types for modeling software delivery organizations",
99
+ )
100
+
101
+ def node_definitions(self) -> list[NodeDefinition]:
102
+ return list(ALL_NODE_DEFINITIONS)
103
+
104
+ def wing_definitions(self) -> list[WingDefinition]:
105
+ return list(ALL_WING_DEFINITIONS)
106
+
107
+ def relationship_definitions(self) -> list[RelationshipDefinition]:
108
+ return list(ALL_RELATIONSHIP_DEFINITIONS)
109
+
110
+ def schema_definition(self) -> SchemaDefinition:
111
+ return SchemaDefinition(
112
+ identity=Identity(kind="schema", name="forge"),
113
+ describes_kind="taxonomy",
114
+ api_version="v2alpha",
115
+ schema_version=Version(major=2),
116
+ node_definitions=tuple(nd.identity for nd in ALL_NODE_DEFINITIONS),
117
+ wing_definitions=tuple(wd.identity for wd in ALL_WING_DEFINITIONS),
118
+ )
119
+
120
+ def register(self, manager: SchemaManager) -> None:
121
+ manager.register_schema(
122
+ self.schema_definition(),
123
+ node_definitions=self.node_definitions(),
124
+ wing_definitions=self.wing_definitions(),
125
+ relationship_definitions=self.relationship_definitions(),
126
+ )
127
+
128
+ # ------------------------------------------------------------------
129
+ # Optional template declarations
130
+ # ------------------------------------------------------------------
131
+
132
+ def creation_templates(self) -> dict[str, str]:
133
+ """Return the 7 creation templates for Forge node types.
134
+
135
+ Templates are Jinja2-rendered ``.yaml.j2`` files that produce
136
+ the taxonomy YAML document when a node is created. The ``_base``
137
+ key provides a generic fallback for kinds without a dedicated
138
+ template.
139
+
140
+ Returns:
141
+ Mapping of kind name (or ``"_base"``) to template content.
142
+ """
143
+ creation_dir = Path(__file__).parent / "templates" / "creation"
144
+ templates: dict[str, str] = {}
145
+ if not creation_dir.is_dir():
146
+ return templates
147
+ for template_file in sorted(creation_dir.glob("*.yaml.j2")):
148
+ if template_file.name.startswith("_"):
149
+ # _base.yaml.j2 → key "_base"
150
+ key = template_file.stem.split(".")[0] # "_base"
151
+ else:
152
+ # system.yaml.j2 → key "system"
153
+ key = template_file.stem.split(".")[0]
154
+ templates[key] = template_file.read_text(encoding="utf-8")
155
+ return templates
156
+
157
+ def scaffold_templates(self) -> dict[str, Path]:
158
+ """Return scaffold template directories for layer variants.
159
+
160
+ Each subdirectory under ``templates/bundled/plugins/layer_types/``
161
+ is a scaffold variant (e.g. ``app-docker``, ``iac-terragrunt``).
162
+ Keys use the format ``layer:{variant}`` so the scaffolding plugin
163
+ can look up templates by ``(node_kind, scaffold_variant)``.
164
+
165
+ Returns:
166
+ Mapping of ``"layer:{variant}"`` to the scaffold directory path.
167
+ """
168
+ scaffold_dir = Path(__file__).parent / "templates" / "scaffolds"
169
+ result: dict[str, Path] = {}
170
+ if not scaffold_dir.is_dir():
171
+ return result
172
+ for child in sorted(scaffold_dir.iterdir()):
173
+ if child.is_dir():
174
+ result[f"layer:{child.name}"] = child
175
+ return result
File without changes
@@ -0,0 +1,263 @@
1
+ """Relationship definitions for the Forge bundle."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from katalyst_engine.core.identity import Identity
6
+ from katalyst_engine.core.relation import Cardinality
7
+ from katalyst_engine.schema.definition import RelationshipDefinition
8
+
9
+
10
+ def _rel_id(name: str) -> Identity:
11
+ return Identity(kind="relationship_definition", name=name)
12
+
13
+
14
+ # ── Structural wing ───────────────────────────────────────────────────
15
+
16
+ CHILD_OF_REL = RelationshipDefinition(
17
+ identity=_rel_id("child_of"),
18
+ describes_kind="child_of",
19
+ description="Hierarchical parent-child containment",
20
+ wing="structural",
21
+ display_order=10,
22
+ cardinality=Cardinality.MANY_TO_ONE,
23
+ directed=True,
24
+ structural=True,
25
+ )
26
+
27
+ EXTENDS_REL = RelationshipDefinition(
28
+ identity=_rel_id("extends"),
29
+ describes_kind="extends",
30
+ description="Node augments target with additional behavior or configuration",
31
+ wing="structural",
32
+ display_order=20,
33
+ cardinality=Cardinality.MANY_TO_MANY,
34
+ directed=True,
35
+ structural=True,
36
+ )
37
+
38
+ DEPENDS_ON_REL = RelationshipDefinition(
39
+ identity=_rel_id("depends_on"),
40
+ describes_kind="depends_on",
41
+ description="Runtime or build dependency between nodes",
42
+ wing="structural",
43
+ display_order=30,
44
+ cardinality=Cardinality.MANY_TO_MANY,
45
+ directed=True,
46
+ structural=True,
47
+ )
48
+
49
+ DEPLOYS_TO_REL = RelationshipDefinition(
50
+ identity=_rel_id("deploys_to"),
51
+ describes_kind="deploys_to",
52
+ description="Node is deployed to an environment",
53
+ wing="structural",
54
+ display_order=40,
55
+ cardinality=Cardinality.MANY_TO_MANY,
56
+ directed=True,
57
+ structural=True,
58
+ )
59
+
60
+ # ── Capability wing ──────────────────────────────────────────────────
61
+
62
+ PROVIDES_CAPABILITY_REL = RelationshipDefinition(
63
+ identity=_rel_id("provides_capability"),
64
+ describes_kind="provides_capability",
65
+ description="System, stack, or layer provides a capability",
66
+ wing="capability",
67
+ display_order=100,
68
+ cardinality=Cardinality.MANY_TO_MANY,
69
+ )
70
+
71
+ REQUIRES_CAPABILITY_REL = RelationshipDefinition(
72
+ identity=_rel_id("requires_capability"),
73
+ describes_kind="requires_capability",
74
+ description="User story requires a capability",
75
+ wing="capability",
76
+ display_order=110,
77
+ cardinality=Cardinality.MANY_TO_MANY,
78
+ )
79
+
80
+ DEPENDS_ON_CAPABILITY_REL = RelationshipDefinition(
81
+ identity=_rel_id("depends_on_capability"),
82
+ describes_kind="depends_on_capability",
83
+ description="Capability depends on another capability",
84
+ wing="capability",
85
+ display_order=120,
86
+ cardinality=Cardinality.MANY_TO_MANY,
87
+ )
88
+
89
+ SPECIFIES_CAPABILITY_REL = RelationshipDefinition(
90
+ identity=_rel_id("specifies_capability"),
91
+ describes_kind="specifies_capability",
92
+ description="Specification defines requirements for a capability",
93
+ wing="capability",
94
+ display_order=130,
95
+ cardinality=Cardinality.MANY_TO_MANY,
96
+ )
97
+
98
+ TESTS_CAPABILITY_REL = RelationshipDefinition(
99
+ identity=_rel_id("tests_capability"),
100
+ describes_kind="tests_capability",
101
+ description="Assertion verifies a capability",
102
+ wing="capability",
103
+ display_order=140,
104
+ cardinality=Cardinality.MANY_TO_MANY,
105
+ )
106
+
107
+ # ── Organizational wing ──────────────────────────────────────────────
108
+
109
+ FILLED_BY_REL = RelationshipDefinition(
110
+ identity=_rel_id("filled_by"),
111
+ describes_kind="filled_by",
112
+ description="Role is filled by team members",
113
+ wing="organizational",
114
+ display_order=200,
115
+ cardinality=Cardinality.MANY_TO_MANY,
116
+ )
117
+
118
+ DEVELOPS_COMPETENCY_REL = RelationshipDefinition(
119
+ identity=_rel_id("develops_competency"),
120
+ describes_kind="develops_competency",
121
+ description="Practice area develops a competency",
122
+ wing="organizational",
123
+ display_order=210,
124
+ cardinality=Cardinality.MANY_TO_MANY,
125
+ )
126
+
127
+ USES_TOOL_REL = RelationshipDefinition(
128
+ identity=_rel_id("uses_tool"),
129
+ describes_kind="uses_tool",
130
+ description="Practice area uses a tool",
131
+ wing="organizational",
132
+ display_order=220,
133
+ cardinality=Cardinality.MANY_TO_MANY,
134
+ )
135
+
136
+ REQUIRES_SKILL_REL = RelationshipDefinition(
137
+ identity=_rel_id("requires_skill"),
138
+ describes_kind="requires_skill",
139
+ description="Competency requires a skill",
140
+ wing="organizational",
141
+ display_order=230,
142
+ cardinality=Cardinality.MANY_TO_MANY,
143
+ )
144
+
145
+ # ── Verification wing ────────────────────────────────────────────────
146
+
147
+ VERIFIED_BY_REL = RelationshipDefinition(
148
+ identity=_rel_id("verified_by"),
149
+ describes_kind="verified_by",
150
+ description="Specification is verified by assertions",
151
+ wing="verification",
152
+ display_order=300,
153
+ cardinality=Cardinality.MANY_TO_MANY,
154
+ )
155
+
156
+ TESTS_SPECIFICATION_REL = RelationshipDefinition(
157
+ identity=_rel_id("tests_specification"),
158
+ describes_kind="tests_specification",
159
+ description="Assertion tests a specification",
160
+ wing="verification",
161
+ display_order=310,
162
+ cardinality=Cardinality.MANY_TO_MANY,
163
+ )
164
+
165
+ CAPTURES_STORY_REL = RelationshipDefinition(
166
+ identity=_rel_id("captures_story"),
167
+ describes_kind="captures_story",
168
+ description="Specification captures a user story",
169
+ wing="verification",
170
+ display_order=320,
171
+ cardinality=Cardinality.MANY_TO_MANY,
172
+ )
173
+
174
+ # ── Workflow wing ─────────────────────────────────────────────────────
175
+
176
+ BLOCKS_REL = RelationshipDefinition(
177
+ identity=_rel_id("blocks"),
178
+ describes_kind="blocks",
179
+ description="Work item blocks another work item",
180
+ wing="workflow",
181
+ display_order=400,
182
+ cardinality=Cardinality.MANY_TO_MANY,
183
+ )
184
+
185
+ BLOCKED_BY_REL = RelationshipDefinition(
186
+ identity=_rel_id("blocked_by"),
187
+ describes_kind="blocked_by",
188
+ description="Work item is blocked by another work item",
189
+ wing="workflow",
190
+ display_order=410,
191
+ cardinality=Cardinality.MANY_TO_MANY,
192
+ )
193
+
194
+ SUPERSEDED_BY_REL = RelationshipDefinition(
195
+ identity=_rel_id("superseded_by"),
196
+ describes_kind="superseded_by",
197
+ description="ADR is superseded by another ADR",
198
+ wing="workflow",
199
+ display_order=420,
200
+ cardinality=Cardinality.MANY_TO_ONE,
201
+ )
202
+
203
+ REFERENCES_ROAD_ITEM_REL = RelationshipDefinition(
204
+ identity=_rel_id("references_road_item"),
205
+ describes_kind="references_road_item",
206
+ description="Change entry references a road item",
207
+ wing="workflow",
208
+ display_order=430,
209
+ cardinality=Cardinality.MANY_TO_ONE,
210
+ )
211
+
212
+ # ── Pipeline wing ────────────────────────────────────────────────────
213
+
214
+ STAGE_DEPENDS_ON_REL = RelationshipDefinition(
215
+ identity=_rel_id("stage_depends_on"),
216
+ describes_kind="stage_depends_on",
217
+ description="CI/CD stage depends on another stage",
218
+ wing="pipeline",
219
+ display_order=500,
220
+ cardinality=Cardinality.MANY_TO_MANY,
221
+ )
222
+
223
+ BELONGS_TO_STAGE_REL = RelationshipDefinition(
224
+ identity=_rel_id("belongs_to_stage"),
225
+ describes_kind="belongs_to_stage",
226
+ description="CI/CD job template belongs to a stage",
227
+ wing="pipeline",
228
+ display_order=510,
229
+ cardinality=Cardinality.MANY_TO_ONE,
230
+ )
231
+
232
+ # ── Aggregate list ────────────────────────────────────────────────────
233
+
234
+ ALL_RELATIONSHIP_DEFINITIONS: list[RelationshipDefinition] = [
235
+ # structural
236
+ CHILD_OF_REL,
237
+ EXTENDS_REL,
238
+ DEPENDS_ON_REL,
239
+ DEPLOYS_TO_REL,
240
+ # capability
241
+ PROVIDES_CAPABILITY_REL,
242
+ REQUIRES_CAPABILITY_REL,
243
+ DEPENDS_ON_CAPABILITY_REL,
244
+ SPECIFIES_CAPABILITY_REL,
245
+ TESTS_CAPABILITY_REL,
246
+ # organizational
247
+ FILLED_BY_REL,
248
+ DEVELOPS_COMPETENCY_REL,
249
+ USES_TOOL_REL,
250
+ REQUIRES_SKILL_REL,
251
+ # verification
252
+ VERIFIED_BY_REL,
253
+ TESTS_SPECIFICATION_REL,
254
+ CAPTURES_STORY_REL,
255
+ # workflow
256
+ BLOCKS_REL,
257
+ BLOCKED_BY_REL,
258
+ SUPERSEDED_BY_REL,
259
+ REFERENCES_ROAD_ITEM_REL,
260
+ # pipeline
261
+ STAGE_DEPENDS_ON_REL,
262
+ BELONGS_TO_STAGE_REL,
263
+ ]
@@ -0,0 +1,12 @@
1
+ apiVersion: katalyst.taxonomy/v2alpha
2
+ kind: {{ node_type }}
3
+ metadata:
4
+ name: "{{ name }}"
5
+ spec:
6
+ description: "{{ description }}"
7
+ owners:
8
+ - "{{ primary_owner }}"
9
+ annotations:
10
+ templateVersion: "{{ template_version }}"
11
+ {{ parents_block }} environments:
12
+ {{ environments_block }}
@@ -0,0 +1,21 @@
1
+ apiVersion: katalyst.taxonomy/v2alpha
2
+ kind: layer
3
+ metadata:
4
+ name: "{{ name }}"
5
+ spec:
6
+ description: "{{ description }}"
7
+ owners:
8
+ - "{{ primary_owner }}"
9
+ annotations:
10
+ layout: root
11
+ layerType: "{{ layer_type }}"
12
+ templateVersion: "{{ template_version }}"
13
+ layerTypeVersion: "{{ layer_type_version }}"
14
+ parents:
15
+ node: "{{ parent_stack }}"
16
+ environments:
17
+ {{ environments_block }}
18
+ dependsOn:
19
+ nodes:
20
+ - "{{ parent_stack }}"
21
+ extensions: {}
@@ -0,0 +1,16 @@
1
+ apiVersion: katalyst.taxonomy/v2alpha
2
+ kind: project
3
+ metadata:
4
+ name: "{{ name }}"
5
+ spec:
6
+ description: "{{ description }}"
7
+ owners:
8
+ - "{{ primary_owner }}"
9
+ annotations:
10
+ templateVersion: "{{ template_version }}"
11
+ parents:
12
+ node: "{{ parent }}"
13
+ environments:
14
+ {{ environments_block }}
15
+ project:
16
+ status: active
@@ -0,0 +1,18 @@
1
+ apiVersion: katalyst.taxonomy/v2alpha
2
+ kind: stack
3
+ metadata:
4
+ name: "{{ name }}"
5
+ spec:
6
+ description: "{{ description }}"
7
+ owners:
8
+ - "{{ primary_owner }}"
9
+ annotations:
10
+ layout: root
11
+ templateVersion: "{{ template_version }}"
12
+ parents:
13
+ node: "{{ parent_system }}"
14
+ environments:
15
+ {{ environments_block }}
16
+ dependsOn:
17
+ nodes:
18
+ - "{{ parent_system }}"
@@ -0,0 +1,15 @@
1
+ apiVersion: katalyst.taxonomy/v2alpha
2
+ kind: system
3
+ metadata:
4
+ name: "{{ name }}"
5
+ spec:
6
+ description: "{{ description }}"
7
+ owners:
8
+ - "{{ primary_owner }}"
9
+ annotations:
10
+ layout: root
11
+ templateVersion: "{{ template_version }}"
12
+ {{ parents_block }} environments:
13
+ {{ environments_block }}
14
+ dependsOn:
15
+ nodes: []
@@ -0,0 +1,16 @@
1
+ apiVersion: katalyst.taxonomy/v2alpha
2
+ kind: team
3
+ metadata:
4
+ name: "{{ name }}"
5
+ spec:
6
+ description: "{{ description }}"
7
+ owners:
8
+ - "{{ primary_owner }}"
9
+ annotations:
10
+ templateVersion: "{{ template_version }}"
11
+ parents:
12
+ node: "{{ parent }}"
13
+ environments:
14
+ {{ environments_block }}
15
+ team:
16
+ unitType: squad
@@ -0,0 +1,17 @@
1
+ apiVersion: katalyst.taxonomy/v2alpha
2
+ kind: team_member
3
+ metadata:
4
+ name: "{{ name }}"
5
+ spec:
6
+ description: "{{ description }}"
7
+ owners:
8
+ - "{{ primary_owner }}"
9
+ annotations:
10
+ templateVersion: "{{ template_version }}"
11
+ parents:
12
+ node: "{{ parent }}"
13
+ environments:
14
+ {{ environments_block }}
15
+ teamMember:
16
+ role: engineer
17
+ email: "{{ primary_owner }}"
@@ -0,0 +1,51 @@
1
+ # Git
2
+ .git
3
+ .gitignore
4
+
5
+ # Documentation
6
+ *.md
7
+ docs/
8
+
9
+ # Tests
10
+ tests/
11
+ test/
12
+ __tests__/
13
+ *.test.js
14
+ *.spec.js
15
+ coverage/
16
+
17
+ # Development files
18
+ .env.local
19
+ .env.development
20
+ .env*.local
21
+ *.log
22
+
23
+ # IDE and editor
24
+ .idea/
25
+ .vscode/
26
+ *.swp
27
+ *.swo
28
+ *~
29
+
30
+ # OS files
31
+ .DS_Store
32
+ Thumbs.db
33
+
34
+ # Node.js
35
+ node_modules/
36
+ npm-debug.log*
37
+
38
+ # Build artifacts (if building outside Docker)
39
+ dist/
40
+ build/
41
+ *.tsbuildinfo
42
+
43
+ # Taxonomy files (not needed in container)
44
+ layer.yaml
45
+ *.yaml
46
+ !docker-compose.yaml
47
+
48
+ # Docker files (avoid recursion)
49
+ Dockerfile*
50
+ docker-compose*.yaml
51
+ .dockerignore
@@ -0,0 +1,14 @@
1
+ # Environment configuration for {{ layer_name }}
2
+ # Copy this file to .env and adjust values for your environment
3
+
4
+ # Application
5
+ NODE_ENV=development
6
+ LOG_LEVEL=debug
7
+
8
+ # Server
9
+ HOST_PORT=8080
10
+
11
+ # Add your environment-specific variables below
12
+ # DATABASE_URL=postgres://user:pass@localhost:5432/db
13
+ # REDIS_URL=redis://localhost:6379
14
+ # API_KEY=your-api-key
@@ -0,0 +1,40 @@
1
+ # {{ system_name }}/{{ stack_name }}/{{ layer_name }} layer
2
+
3
+ Layer type: app-docker
4
+
5
+ This scaffold creates a Docker-based application structure:
6
+
7
+ - `layer.yaml` - taxonomy node descriptor.
8
+ - `Dockerfile` - multi-stage Docker build.
9
+ - `docker-compose.yaml` - local development orchestration.
10
+ - `.dockerignore` - files excluded from Docker context.
11
+ - `<environment>/` - environment-specific configuration.
12
+
13
+ Copy `env-template/` for each environment and adjust the configuration files.
14
+
15
+ ## Local Development
16
+
17
+ ```bash
18
+ # Build the image
19
+ docker compose build
20
+
21
+ # Run locally
22
+ docker compose up
23
+
24
+ # Run with environment overrides
25
+ docker compose --env-file ./dev/.env up
26
+ ```
27
+
28
+ ## Building for Production
29
+
30
+ ```bash
31
+ # Build with specific tag
32
+ docker build -t {{ layer_name }}:latest .
33
+
34
+ # Build for specific environment
35
+ docker build --build-arg ENVIRONMENT=prod -t {{ layer_name }}:prod .
36
+ ```
37
+
38
+ <!-- BEGIN AUTO-LAYER -->
39
+ <!-- This section is managed by scripts. Manual edits inside may be overwritten. -->
40
+ <!-- END AUTO-LAYER -->