katalyst-forge 2.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-2.1.0/.gitignore +104 -0
  2. katalyst_forge-2.1.0/PKG-INFO +8 -0
  3. katalyst_forge-2.1.0/pyproject.toml +43 -0
  4. katalyst_forge-2.1.0/src/katalyst_forge/__init__.py +10 -0
  5. katalyst_forge-2.1.0/src/katalyst_forge/bundle.py +175 -0
  6. katalyst_forge-2.1.0/src/katalyst_forge/py.typed +0 -0
  7. katalyst_forge-2.1.0/src/katalyst_forge/relationships.py +263 -0
  8. katalyst_forge-2.1.0/src/katalyst_forge/templates/creation/_base.yaml.j2 +12 -0
  9. katalyst_forge-2.1.0/src/katalyst_forge/templates/creation/layer.yaml.j2 +21 -0
  10. katalyst_forge-2.1.0/src/katalyst_forge/templates/creation/project.yaml.j2 +16 -0
  11. katalyst_forge-2.1.0/src/katalyst_forge/templates/creation/stack.yaml.j2 +18 -0
  12. katalyst_forge-2.1.0/src/katalyst_forge/templates/creation/system.yaml.j2 +15 -0
  13. katalyst_forge-2.1.0/src/katalyst_forge/templates/creation/team.yaml.j2 +16 -0
  14. katalyst_forge-2.1.0/src/katalyst_forge/templates/creation/team_member.yaml.j2 +17 -0
  15. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/app-docker/.dockerignore +51 -0
  16. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/app-docker/.env.example +14 -0
  17. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/app-docker/README.md +40 -0
  18. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/app-docker/base/Dockerfile +54 -0
  19. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/app-docker/docker-compose.yaml +34 -0
  20. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/app-docker/env-template/Dockerfile +9 -0
  21. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/app-docker/env-template/docker-compose.override.yaml +12 -0
  22. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/app-docker/env-template/environment.yaml +9 -0
  23. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/app-docker/layer.yaml +15 -0
  24. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/README.md +149 -0
  25. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/main.tf +12 -0
  26. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/outputs.tf +5 -0
  27. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/variables.tf +5 -0
  28. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/env-template/environment.yaml +1 -0
  29. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/env-template/terragrunt.hcl +19 -0
  30. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/context.hcl +121 -0
  31. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/dev.yaml +4 -0
  32. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/prod.yaml +4 -0
  33. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/staging.yaml +4 -0
  34. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/layer.yaml +15 -0
  35. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/iac-terragrunt/version.yaml +1 -0
  36. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-argocd/README.md +136 -0
  37. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-argocd/base/app/argocd-application.yaml +17 -0
  38. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-argocd/base/kustomization.yaml +5 -0
  39. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-argocd/base/namespace.yaml +4 -0
  40. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/argocd-application.yaml +20 -0
  41. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/kustomization.yaml +9 -0
  42. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/patch-argocd-application.yaml +15 -0
  43. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-argocd/layer.yaml +18 -0
  44. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/README.md +95 -0
  45. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/deployment.yaml +22 -0
  46. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/kustomization.yaml +11 -0
  47. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/namespace.yaml +4 -0
  48. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/service.yaml +11 -0
  49. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/environment-template/kustomization.yaml +6 -0
  50. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/environment-template/patch-deployment.yaml +13 -0
  51. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/base/kustomization.yaml +4 -0
  52. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/base/namespace.yaml +4 -0
  53. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/kustomization.yaml +3 -0
  54. katalyst_forge-2.1.0/src/katalyst_forge/templates/scaffolds/k8s-kustomize/layer.yaml +15 -0
  55. katalyst_forge-2.1.0/src/katalyst_forge/wings/__init__.py +1 -0
  56. katalyst_forge-2.1.0/src/katalyst_forge/wings/agentic.py +137 -0
  57. katalyst_forge-2.1.0/src/katalyst_forge/wings/delivery.py +162 -0
  58. katalyst_forge-2.1.0/src/katalyst_forge/wings/design.py +462 -0
  59. katalyst_forge-2.1.0/src/katalyst_forge/wings/dx.py +157 -0
  60. katalyst_forge-2.1.0/src/katalyst_forge/wings/org.py +211 -0
  61. katalyst_forge-2.1.0/src/katalyst_forge/wings/pipeline.py +134 -0
  62. katalyst_forge-2.1.0/src/katalyst_forge/wings/practices.py +220 -0
  63. katalyst_forge-2.1.0/src/katalyst_forge/wings/system.py +266 -0
@@ -0,0 +1,104 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+
27
+ # PyInstaller
28
+ *.manifest
29
+ *.spec
30
+
31
+ # Installer logs
32
+ pip-log.txt
33
+ pip-delete-this-directory.txt
34
+
35
+ # Unit test / coverage reports
36
+ htmlcov/
37
+ .tox/
38
+ .nox/
39
+ .coverage
40
+ .coverage.*
41
+ .cache
42
+ nosetests.xml
43
+ coverage.xml
44
+ *.cover
45
+ *.py,cover
46
+ .hypothesis/
47
+ .pytest_cache/
48
+
49
+ # Translations
50
+ *.mo
51
+ *.pot
52
+
53
+ # Environments
54
+ .env
55
+ .venv
56
+ env/
57
+ venv/
58
+ ENV/
59
+ env.bak/
60
+ venv.bak/
61
+
62
+ # Spyder project settings
63
+ .spyderproject
64
+ .spyproject
65
+
66
+ # Rope project settings
67
+ .ropeproject
68
+
69
+ # mkdocs documentation
70
+ /site
71
+
72
+ # mypy / pyright
73
+ .mypy_cache/
74
+ .dmypy.json
75
+ dmypy.json
76
+ .pyright/
77
+
78
+ # Ruff
79
+ .ruff_cache/
80
+
81
+ # IDE
82
+ .idea/
83
+ .vscode/
84
+ *.swp
85
+ *.swo
86
+ *~
87
+
88
+ # OS
89
+ .DS_Store
90
+ Thumbs.db
91
+
92
+ # Local configuration
93
+ *.local
94
+
95
+ # Browser/Playwright state files
96
+ browser-state-*.json
97
+
98
+ # Build artifacts
99
+ site/
100
+ stack-tests/cucumber-report/
101
+ stack-tests/test-results/
102
+
103
+ # Generated artifacts (rebuild with `just generate-schemas`)
104
+ taxonomy/src/katalyst_taxonomy/engine/generated/
@@ -0,0 +1,8 @@
1
+ Metadata-Version: 2.4
2
+ Name: katalyst-forge
3
+ Version: 2.1.0
4
+ Summary: The Forge bundle — 31 node-type definitions for software delivery taxonomy
5
+ Author: eSimplicity
6
+ License: Proprietary
7
+ Requires-Python: >=3.12
8
+ Requires-Dist: katalyst-engine
@@ -0,0 +1,43 @@
1
+ [project]
2
+ name = "katalyst-forge"
3
+ version = "2.1.0"
4
+ description = "The Forge bundle — 31 node-type definitions for software delivery taxonomy"
5
+ license = { text = "Proprietary" }
6
+ requires-python = ">=3.12"
7
+ authors = [
8
+ { name = "eSimplicity" }
9
+ ]
10
+ dependencies = [
11
+ "katalyst-engine",
12
+ ]
13
+
14
+ [project.entry-points."katalyst_engine.bundles"]
15
+ forge = "katalyst_forge.bundle:ForgeBundle"
16
+
17
+ [build-system]
18
+ requires = ["hatchling"]
19
+ build-backend = "hatchling.build"
20
+
21
+ [tool.hatch.build.targets.wheel]
22
+ packages = ["src/katalyst_forge"]
23
+
24
+ [tool.hatch.build.targets.wheel.sources]
25
+ "src" = ""
26
+
27
+ [tool.hatch.build]
28
+ include = [
29
+ "src/katalyst_forge/**/*.py",
30
+ "src/katalyst_forge/**/*.yaml.j2",
31
+ "src/katalyst_forge/**/*.yaml",
32
+ "src/katalyst_forge/**/*.json",
33
+ "src/katalyst_forge/**/*.tf",
34
+ "src/katalyst_forge/**/*.hcl",
35
+ "src/katalyst_forge/**/*.md",
36
+ "src/katalyst_forge/**/*.just",
37
+ "src/katalyst_forge/**/*.sh",
38
+ "src/katalyst_forge/**/Justfile",
39
+ "src/katalyst_forge/**/Dockerfile",
40
+ "src/katalyst_forge/**/.dockerignore",
41
+ "src/katalyst_forge/**/.env.example",
42
+ "src/katalyst_forge/py.typed",
43
+ ]
@@ -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: []