katalyst-forge 4.1.0__tar.gz → 4.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- katalyst_forge-4.2.0/.gitignore +8 -0
- katalyst_forge-4.2.0/CHANGELOG.md +83 -0
- katalyst_forge-4.2.0/LICENSE +8 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/PKG-INFO +3 -2
- katalyst_forge-4.2.0/pyproject.toml +91 -0
- katalyst_forge-4.2.0/schemas/CHANGELOG.md +117 -0
- katalyst_forge-4.2.0/schemas/README.md +300 -0
- katalyst_forge-4.2.0/schemas/agents/agent.schema.json +200 -0
- katalyst_forge-4.2.0/schemas/agents/config.schema.json +148 -0
- katalyst_forge-4.2.0/schemas/agents/manifest.json +37 -0
- katalyst_forge-4.2.0/schemas/agents/skill.schema.json +82 -0
- katalyst_forge-4.2.0/schemas/environment.schema.json +95 -0
- katalyst_forge-4.2.0/schemas/hooks/hook-config.schema.json +116 -0
- katalyst_forge-4.2.0/schemas/katalyst-lock.schema.json +190 -0
- katalyst_forge-4.2.0/schemas/nodes/common.schema.json +114 -0
- katalyst_forge-4.2.0/schemas/nodes/design.schema.json +341 -0
- katalyst_forge-4.2.0/schemas/nodes/organizational.schema.json +205 -0
- katalyst_forge-4.2.0/schemas/nodes/portfolio.schema.json +97 -0
- katalyst_forge-4.2.0/schemas/nodes/technical.schema.json +130 -0
- katalyst_forge-4.2.0/schemas/taxonomy-node.schema.json +24 -0
- katalyst_forge-4.2.0/tests/conftest.py +0 -0
- katalyst_forge-4.2.0/tests/test_agent_run.py +29 -0
- katalyst_forge-4.2.0/tests/test_delivery_doc_consistency.py +66 -0
- katalyst_forge-4.2.0/tests/test_delivery_traceability.py +73 -0
- katalyst_forge-4.2.0/tests/test_entry_point_discovery.py +38 -0
- katalyst_forge-4.2.0/tests/test_forge.py +154 -0
- katalyst_forge-4.2.0/tests/test_wing_schemas.py +581 -0
- katalyst_forge-4.2.0/tests/test_wings.py +120 -0
- katalyst_forge-4.1.0/.gitignore +0 -117
- katalyst_forge-4.1.0/pyproject.toml +0 -43
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/__init__.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/bundle.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/py.typed +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/relationships.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/creation/_base.yaml.j2 +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/creation/layer.yaml.j2 +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/creation/project.yaml.j2 +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/creation/stack.yaml.j2 +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/creation/system.yaml.j2 +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/creation/team.yaml.j2 +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/creation/team_member.yaml.j2 +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/app-docker/.dockerignore +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/app-docker/.env.example +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/app-docker/README.md +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/app-docker/base/Dockerfile +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/app-docker/docker-compose.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/app-docker/env-template/Dockerfile +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/app-docker/env-template/docker-compose.override.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/app-docker/env-template/environment.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/app-docker/layer.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/README.md +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/main.tf +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/outputs.tf +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/composite/terraform/variables.tf +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/env-template/environment.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/env-template/terragrunt.hcl +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/context.hcl +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/dev.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/prod.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/global/iac/staging.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/layer.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/iac-terragrunt/version.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/README.md +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/base/app/argocd-application.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/base/kustomization.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/base/namespace.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/argocd-application.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/kustomization.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/environment-template/patch-argocd-application.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-argocd/layer.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/README.md +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/deployment.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/kustomization.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/namespace.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/base/service.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/environment-template/kustomization.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/environment-template/patch-deployment.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/base/kustomization.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/base/namespace.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/global/k8s/kustomization.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/templates/scaffolds/k8s-kustomize/layer.yaml +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/wings/__init__.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/wings/agentic.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/wings/delivery.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/wings/design.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/wings/org.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/wings/pipeline.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/wings/practices.py +0 -0
- {katalyst_forge-4.1.0 → katalyst_forge-4.2.0}/src/katalyst_forge/wings/system.py +0 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Changelog — katalyst-forge
|
|
2
|
+
|
|
3
|
+
All notable changes to the **katalyst-forge** bundle are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
As of 4.2.0 this package lives in its own repository
|
|
9
|
+
(`esimplicityinc/katalyst-forge`) and tags use the plain `vX.Y.Z` prefix.
|
|
10
|
+
Releases 4.1.0 and earlier were cut from the `katalyst-taxonomy` monorepo
|
|
11
|
+
with `forge-vX.Y.Z` tags.
|
|
12
|
+
|
|
13
|
+
The Forge **bundle `schema_version`** (declared in `bundle.py`) is the
|
|
14
|
+
consumer-facing node-model contract and is versioned separately from this
|
|
15
|
+
PyPI package version. A breaking node-type/model change bumps `schema_version`.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## [4.2.0] -- 2026-07-06
|
|
20
|
+
|
|
21
|
+
Repo split (RIC-1070). First release from the standalone
|
|
22
|
+
`esimplicityinc/katalyst-forge` repository, extracted from `katalyst-taxonomy`.
|
|
23
|
+
No node-model changes; bundle `schema_version` stays **4**.
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- Standalone repository: the Forge schema bundle, the 21 kata-forge agent
|
|
28
|
+
definitions and forge skills (extracted from `katalyst-taxonomy-agents`),
|
|
29
|
+
the creation/scaffold templates, the JSON Schemas, and the Forge lifecycle
|
|
30
|
+
docs now live and version together as one product.
|
|
31
|
+
- JSON Schemas ship as package data in the wheel under `katalyst_forge/schemas/`.
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- Release tags drop the `forge-` prefix: this repo tags plain `vX.Y.Z`.
|
|
36
|
+
- Docs move to https://esimplicityinc.github.io/katalyst-forge/.
|
|
37
|
+
|
|
38
|
+
## [4.1.0] -- 2026-06-26
|
|
39
|
+
|
|
40
|
+
Delivery-wing evolution (#138 / #140). Bundle `schema_version` stays **4** (additive within the v4 node-model); bundle node count 29 → 30.
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
|
|
44
|
+
- **`agent_run` node kind** (child of `work_item`): per-stage agent telemetry (`stages`, `totals`, `entered_status` / `exited_status`, `started` / `ended`) -- identifiers and counts only, no prompts or PII.
|
|
45
|
+
- **`work_item.status` 10-state lifecycle enum** (`idea, proposed, accepted, planned, in_progress, blocked, delivered, validated, released, retired`), enforced through the engine's `FieldSpec.allowed_values`.
|
|
46
|
+
- **Single `TRACES_TO` relationship** on `work_item`, disambiguated by the source field's target kind, covering `capabilities`, `user_needs`, `nfrs`, `adrs`, `design_specs`, `specifications`. Adding a new traceable target is a one-line field addition.
|
|
47
|
+
- **`change_entry` -> `work_item` link** (`work_item_id` + `REFERENCES_WORK_ITEM`).
|
|
48
|
+
|
|
49
|
+
### Changed
|
|
50
|
+
|
|
51
|
+
- Minimum `katalyst-engine` raised to `>=4.1` -- the `work_item` status enum relies on `FieldSpec.allowed_values`, added in engine 4.1.0.
|
|
52
|
+
- Replaced the per-target relationship definitions (`implements_capability`, `addresses_need`, `satisfies_nfr`) with the single `TRACES_TO` edge. `road_id` / `REFERENCES_ROAD_ITEM` on `change_entry` retained as a deprecated alias of `work_item_id`.
|
|
53
|
+
|
|
54
|
+
## [4.0.0] -- 2026-06-16
|
|
55
|
+
|
|
56
|
+
Bundle `schema_version` bumped to **4** and manifest version to **4.0** to reflect the breaking node-kind removals below.
|
|
57
|
+
|
|
58
|
+
### Removed
|
|
59
|
+
|
|
60
|
+
- **BREAKING: Relocated mechanism kinds out of the Forge bundle** (#79/#82). Six node kinds no longer ship in Forge: `template`, `action`, `template_overlay`, `dx`, `cicd_job_template`, and `cicd_workflow_template`. Scaffolding/CI-CD mechanisms are now provided by the taxonomy runtime and its plugins rather than declared as Forge node types. Documents using these kinds must migrate (`kata tax migrate`); `template_overlay` becomes `node_wiring`.
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
|
|
64
|
+
- **`design_spec` node type** in the Design wing (#44). A pre-executable specification artifact sitting between `user_need` and `specification` in the intent chain, capturing visual structure, interaction flows, and testable design constraints. Includes a `design_specs` field + `IMPLEMENTS_DESIGN` cross-reference on `specification`, and the `DESIGNS_FOR_NEED` / `DESIGNS_CAPABILITY` / `IMPLEMENTS_DESIGN` relationships. Brings the Forge bundle to **29 node types**.
|
|
65
|
+
|
|
66
|
+
## [3.0.1] -- 2026-06-11
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
- **Corrected bundle `schema_version` to `3`** to reflect the breaking `user_story` → `user_need` rename that shipped in 3.0.0. The `BundleManifest.version` was bumped to `3.0` and `SchemaDefinition.schema_version` to `3`.
|
|
70
|
+
- First release published independently via the per-package `forge-v*` release pipeline.
|
|
71
|
+
|
|
72
|
+
## [3.0.0] -- 2026-06-10
|
|
73
|
+
|
|
74
|
+
### Changed
|
|
75
|
+
- **BREAKING: Renamed `user_story` node type to `user_need`** in the Design wing. The kind (`user_story` → `user_need`), directory (`user_stories/` → `user_needs/`), display labels (`User Story`/`User Stories` → `User Need`/`User Needs`), and Neo4j label (`UserStory` → `UserNeed`) all changed. Creation template `user_story.yaml.j2` → `user_need.yaml.j2`. No backward-compatibility alias is provided. (RIC-616)
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
- **`katalyst-xbrl` bundle** companion node types and the pluggable parser registry landed in the same `3.0.0` release train (see root `CHANGELOG.md` for cross-package detail).
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
> Versions prior to 3.0.0 were released in lockstep with `katalyst-taxonomy`
|
|
83
|
+
> under the umbrella `vX.Y.Z` tags. See the root `CHANGELOG.md` for that history.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Copyright (c) 2024 eSimplicity
|
|
2
|
+
|
|
3
|
+
All Rights Reserved.
|
|
4
|
+
|
|
5
|
+
This software is proprietary and confidential. Unauthorized copying, distribution,
|
|
6
|
+
modification, or use of this software, via any medium, is strictly prohibited.
|
|
7
|
+
|
|
8
|
+
This software is licensed for internal use within eSimplicity only.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: katalyst-forge
|
|
3
|
-
Version: 4.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 4.2.0
|
|
4
|
+
Summary: Katalyst Forge: the delivery-lifecycle bundle (node kinds, wings, agents, templates, schemas)
|
|
5
5
|
Author: eSimplicity
|
|
6
6
|
License: Proprietary
|
|
7
|
+
License-File: LICENSE
|
|
7
8
|
Requires-Python: >=3.12
|
|
8
9
|
Requires-Dist: katalyst-engine<5,>=4.1
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "katalyst-forge"
|
|
3
|
+
version = "4.2.0"
|
|
4
|
+
description = "Katalyst Forge: the delivery-lifecycle bundle (node kinds, wings, agents, templates, schemas)"
|
|
5
|
+
license = { text = "Proprietary" }
|
|
6
|
+
requires-python = ">=3.12"
|
|
7
|
+
authors = [
|
|
8
|
+
{ name = "eSimplicity" }
|
|
9
|
+
]
|
|
10
|
+
dependencies = [
|
|
11
|
+
"katalyst-engine>=4.1,<5",
|
|
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
|
+
]
|
|
44
|
+
|
|
45
|
+
# JSON Schemas ship as package data inside the wheel so consumers
|
|
46
|
+
# (katalyst-taxonomy's importlib.resources fallback) can resolve them
|
|
47
|
+
# without a repo checkout.
|
|
48
|
+
[tool.hatch.build.targets.wheel.force-include]
|
|
49
|
+
"schemas" = "katalyst_forge/schemas"
|
|
50
|
+
|
|
51
|
+
# The wheel is built from the sdist, so the sdist must carry schemas/
|
|
52
|
+
# for the wheel force-include to resolve.
|
|
53
|
+
[tool.hatch.build.targets.sdist]
|
|
54
|
+
include = [
|
|
55
|
+
"src/katalyst_forge/**",
|
|
56
|
+
"schemas/**",
|
|
57
|
+
"tests/**",
|
|
58
|
+
"CHANGELOG.md",
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
[dependency-groups]
|
|
62
|
+
dev = [
|
|
63
|
+
"pytest>=8.2",
|
|
64
|
+
"ruff>=0.5",
|
|
65
|
+
"pyright>=1.1",
|
|
66
|
+
# test_wing_schemas.py validates the shipped JSON Schemas
|
|
67
|
+
"jsonschema>=4.22",
|
|
68
|
+
"referencing>=0.35",
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
[tool.ruff]
|
|
72
|
+
target-version = "py312"
|
|
73
|
+
line-length = 100
|
|
74
|
+
|
|
75
|
+
[tool.ruff.lint]
|
|
76
|
+
select = ["E4", "E7", "E9", "F", "B", "I"]
|
|
77
|
+
|
|
78
|
+
[tool.ruff.format]
|
|
79
|
+
quote-style = "double"
|
|
80
|
+
|
|
81
|
+
[tool.pyright]
|
|
82
|
+
include = ["src", "tests"]
|
|
83
|
+
venvPath = "."
|
|
84
|
+
venv = ".venv"
|
|
85
|
+
pythonVersion = "3.12"
|
|
86
|
+
typeCheckingMode = "strict"
|
|
87
|
+
|
|
88
|
+
[tool.pytest.ini_options]
|
|
89
|
+
addopts = ["-ra"]
|
|
90
|
+
testpaths = ["tests"]
|
|
91
|
+
pythonpath = ["src"]
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Schema Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the Katalyst Taxonomy schemas will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **BREAKING: Renamed `user_story` node type to `user_need`** (Forge bundle schema_version → 3). The `kind`, directory (`user_stories/` → `user_needs/`), display labels, and Neo4j label changed; no backward-compatibility alias. Shipped in `katalyst-forge` 3.0.0; schema_version metadata corrected in 3.0.1.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
- `references` annotation on cross-reference attributes declaring target node types
|
|
15
|
+
- `rel_type` annotation for semantic relationship names (e.g., `TESTS_CAPABILITY`, `PROVIDES_CAPABILITY`)
|
|
16
|
+
- `cross_references` field in registry.json per node type
|
|
17
|
+
- Environment node type (`node_types/system/environment.yaml`) in system wing
|
|
18
|
+
|
|
19
|
+
### Removed
|
|
20
|
+
- **`subsystem` node type** — Systems are now self-referential (a system can be a child of another system). The `subsystem` taxonomyNodeType has been removed from `nodes/technical.schema.json`, along with its if/then conditional block. All enum/scope lists across plugin manifests (`capabilities`, `design`, `practices`, `archetypes`) and agent schemas (`config.schema.json`, `agent.schema.json`) have been updated to remove `subsystem` references. Existing subsystem nodes should be migrated to nested systems.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## [0.16.0] - 2026-03-19
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- **Per-wing schema split** — `taxonomy-node.schema.json` is now a slim coordinator that delegates to four wing schemas via `$ref`:
|
|
28
|
+
- `nodes/common.schema.json` — shared field definitions (metadata, specBase)
|
|
29
|
+
- `nodes/technical.schema.json` — system, subsystem, stack, layer, library
|
|
30
|
+
- `nodes/portfolio.schema.json` — organization, program, project (with type-specific spec blocks and if/then guards)
|
|
31
|
+
- `nodes/organizational.schema.json` — team, team_member, user, practice_area, competency (with type-specific spec blocks and if/then guards)
|
|
32
|
+
- `nodes/design.schema.json` — 15 design types (DDD, capabilities, user research, delivery, architecture, BDD)
|
|
33
|
+
- **`$ref` resolution infrastructure** — new `schema_registry.py` module builds a `referencing.Registry` from all schema files, enabling cross-file `$ref` resolution in Python validation
|
|
34
|
+
- **Cross-wing spec guards** — each wing explicitly forbids type-specific spec blocks from other wings (e.g. `spec.organization` forbidden on technical wing nodes)
|
|
35
|
+
- `practice_area` and `competency` moved to the Organizational wing (alongside team, team_member, user)
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
- `taxonomy-node.schema.json` reduced from 576 lines to ~24 lines (coordinator only)
|
|
39
|
+
- `taxonomy_linter.py` and `plugin_linter.py` now pass a `referencing.Registry` to `Draft202012Validator`, fixing previously silent `$ref` resolution failures in plugin schemas
|
|
40
|
+
- `_shared.py` classifier updated to detect slug pattern errors regardless of oneOf index prefix in schema_path
|
|
41
|
+
- `pyproject.toml` — added explicit `referencing>=0.35` dependency
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
- **Plugin `$ref` resolution** — 30+ cross-file `$ref`s in plugin schemas (pointing at `../common/plugin-requirement.schema.json` and `../common/environment-contract.schema.json`) are now actually resolved during Python-side validation. Previously they were silently skipped.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## [0.15.0] - 2026-03-17
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
- **Design plugin** (`katalyst.taxonomy.plugins.design/v1alpha`) — 16 resource kinds across 6 domain areas:
|
|
52
|
+
- **Capabilities:** `Capability`, `CapabilityRelationship` — business/technical capability modeling with node bindings
|
|
53
|
+
- **DDD:** `BoundedContext`, `Aggregate`, `ValueObject`, `DomainEvent`, `GlossaryTerm` — Domain-Driven Design tactical patterns
|
|
54
|
+
- **User Research:** `UserType`, `UserStory`, `UseCase` — personas, stories, and interaction flows
|
|
55
|
+
- **Delivery Lifecycle:** `RoadItem`, `ChangeEntry` — roadmap governance with ADR/BDD/NFR compliance tracking
|
|
56
|
+
- **Architecture Decisions:** `Adr`, `Nfr` — Architecture Decision Records and Non-Functional Requirements
|
|
57
|
+
- **Executable Specs (BDD):** `Feature`, `Scenario` — BDD feature and scenario metadata with Given/When/Then steps
|
|
58
|
+
- **Practices plugin** (`katalyst.taxonomy.plugins.practices/v1alpha`) — 2 resource kinds:
|
|
59
|
+
- `PracticeArea` — team knowledge organized around 6 pillars (strategy, standards, frameworks, libraries, processes, measures)
|
|
60
|
+
- `Competency` — skills with 3 level definitions (basic, intermediate, advanced) and dependency DAG
|
|
61
|
+
- `schemas/plugins/design/manifest.json` — design plugin manifest with 16 registered schemas
|
|
62
|
+
- `schemas/plugins/practices/manifest.json` — practices plugin manifest with 2 registered schemas
|
|
63
|
+
- 14 new `taxonomyNodeType` values added to `taxonomy-node.schema.json` for design and practices kinds
|
|
64
|
+
- Plugin schema validation wired into `kata tax lint` for both plugins
|
|
65
|
+
|
|
66
|
+
### Changed
|
|
67
|
+
- `schemas/plugins/registry.json` — added `design` and `practices` plugins; marked `capabilities` as deprecated
|
|
68
|
+
- `schemas/plugins/capabilities/manifest.json` — added `deprecated: true` and `replacedBy: "design"` fields
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## [0.14.0] - 2026-03-14
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
- `plugins/commitguard/commitguard-config.schema.json` — CommitGuardConfig schema for declaring supported hook tools (pre-commit, Husky, Lefthook) with install/generate commands
|
|
76
|
+
- `plugins/commitguard/commitguard-binding.schema.json` — CommitGuardBinding schema for mapping kata actions and additional hooks to a specific layer type per tool
|
|
77
|
+
- `hooks/hook-config.schema.json` — Schema for `.katalyst-hooks.yaml` user configuration (tool selection, kata_actions by layer type, additional_hooks)
|
|
78
|
+
- `plugins/extensions/extension.schema.json` — Extension plugin schema (existing, now with bundled seed content)
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## [0.13.0] - 2026-03-09
|
|
83
|
+
|
|
84
|
+
### Added
|
|
85
|
+
- Initial public schema hosting setup
|
|
86
|
+
- `index.json` manifest listing all available schemas
|
|
87
|
+
- Version and timestamp metadata in index
|
|
88
|
+
- `katalyst-lock.schema.json` - Lock file schema for tracking installed components and versions
|
|
89
|
+
|
|
90
|
+
### Changed
|
|
91
|
+
- Replaced `org_unit` taxonomy node type with five new types: `organization`, `program`, `project`, `team`, `team_member`
|
|
92
|
+
- `PARENT_NODE_TYPES` now supports polymorphic parents (`project` can be child of `program` or `organization`; `team` can be child of `organization` or another `team`)
|
|
93
|
+
- Added conditional spec blocks: `spec.organization`, `spec.program`, `spec.project`, `spec.team`, `spec.teamMember`
|
|
94
|
+
|
|
95
|
+
### Removed
|
|
96
|
+
- `org_unit` taxonomy node type (replaced by `team`)
|
|
97
|
+
|
|
98
|
+
## [0.1.0] - 2025-01-11
|
|
99
|
+
|
|
100
|
+
### Added
|
|
101
|
+
- Core schemas:
|
|
102
|
+
- `taxonomy-node.schema.json` - TaxonomyNode definition (system, subsystem, stack, layer, user, organization, program, project, team, team_member)
|
|
103
|
+
- `environment.schema.json` - Environment configuration schema
|
|
104
|
+
|
|
105
|
+
- Plugin schemas:
|
|
106
|
+
- `plugins/registry.json` - Plugin registry manifest
|
|
107
|
+
- `plugins/capabilities/` - Capability and CapabilityRelationship schemas
|
|
108
|
+
- `plugins/cicd/` - CI/CD workflow, job, and stage template schemas
|
|
109
|
+
- `plugins/layer-actions/` - Layer action catalog schemas
|
|
110
|
+
- `plugins/layer-types/` - Layer type definition schemas
|
|
111
|
+
- `plugins/tools/` - Tool catalog schemas
|
|
112
|
+
|
|
113
|
+
### Schema Features
|
|
114
|
+
- JSON Schema Draft 2020-12 compliance
|
|
115
|
+
- Canonical `$id` URLs at `https://prima.dev/schemas/katalyst/`
|
|
116
|
+
- Support for organizational wing (user, organization, program, project, team, team_member) taxonomy nodes
|
|
117
|
+
- Plugin extension system via `spec.extensions` block
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# Katalyst Taxonomy Schemas
|
|
2
|
+
|
|
3
|
+
This directory contains the **v1** JSON Schema definitions for Katalyst Taxonomy resources.
|
|
4
|
+
|
|
5
|
+
> **Note:** The v2 modeling engine generates per-kind JSON schemas from LinkML
|
|
6
|
+
> definitions. V2 generated schemas live in `taxonomy/src/katalyst_taxonomy/engine/generated/schemas/`
|
|
7
|
+
> and are produced by `kata tax build-types`. Both v1 and v2 schemas coexist
|
|
8
|
+
> during the transition period. See `plan.md` for migration status.
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
| Schema | Description |
|
|
13
|
+
|--------|-------------|
|
|
14
|
+
| [`taxonomy-node.schema.json`](taxonomy-node.schema.json) | Coordinator schema — delegates to per-wing schemas via `$ref` |
|
|
15
|
+
| [`nodes/common.schema.json`](nodes/common.schema.json) | Shared field definitions (metadata, spec base) |
|
|
16
|
+
| [`nodes/technical.schema.json`](nodes/technical.schema.json) | Technical wing: system, stack, layer, library |
|
|
17
|
+
| [`nodes/portfolio.schema.json`](nodes/portfolio.schema.json) | Portfolio wing: organization, program, project |
|
|
18
|
+
| [`nodes/organizational.schema.json`](nodes/organizational.schema.json) | Organizational wing: team, team\_member, practice\_area, competency |
|
|
19
|
+
| [`nodes/design.schema.json`](nodes/design.schema.json) | Design wing: DDD, capabilities, user research, delivery, architecture, BDD |
|
|
20
|
+
| [`environment.schema.json`](environment.schema.json) | Environment configuration |
|
|
21
|
+
| [`katalyst-lock.schema.json`](katalyst-lock.schema.json) | Lock file for tracking installed components |
|
|
22
|
+
| [`plugins/extensions/`](plugins/extensions/) | Extension plugin schema |
|
|
23
|
+
| [`hooks/hook-config.schema.json`](hooks/hook-config.schema.json) | `.katalyst-hooks.yaml` configuration |
|
|
24
|
+
|
|
25
|
+
## Schema Version
|
|
26
|
+
|
|
27
|
+
- **V1 API Version**: `katalyst.taxonomy/v1alpha` (schemas in this directory)
|
|
28
|
+
- **V2 API Version**: `katalyst.taxonomy/v2alpha` (schemas in `taxonomy/src/katalyst_taxonomy/engine/generated/schemas/`)
|
|
29
|
+
- **JSON Schema Draft**: 2020-12
|
|
30
|
+
- **Canonical URL Base**: `https://prima.dev/schemas/katalyst/`
|
|
31
|
+
|
|
32
|
+
The parser accepts both v1alpha and v2alpha documents. V2 documents use
|
|
33
|
+
`kind` as the node type directly (e.g., `kind: system`) instead of the
|
|
34
|
+
v1 pattern of `kind: TaxonomyNode` + `taxonomyNodeType: system`.
|
|
35
|
+
|
|
36
|
+
## Core Schemas
|
|
37
|
+
|
|
38
|
+
### TaxonomyNode (`taxonomy-node.schema.json`)
|
|
39
|
+
|
|
40
|
+
The coordinator schema for all taxonomy nodes. It delegates to four per-wing schemas via `$ref`:
|
|
41
|
+
|
|
42
|
+
| Wing | File | Node Types |
|
|
43
|
+
|------|------|------------|
|
|
44
|
+
| **Technical** | `nodes/technical.schema.json` | system, stack, layer, library |
|
|
45
|
+
| **Portfolio** | `nodes/portfolio.schema.json` | organization, program, project |
|
|
46
|
+
| **Organizational** | `nodes/organizational.schema.json` | team, team\_member, practice\_area, competency |
|
|
47
|
+
| **Design** | `nodes/design.schema.json` | business\_domain\_model, capability, user\_type, user\_story, use\_case, work\_item, adr, nfr, change\_entry, specification, assertion |
|
|
48
|
+
|
|
49
|
+
Shared field definitions (metadata, spec base) live in `nodes/common.schema.json` and are referenced by each wing.
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
apiVersion: katalyst.taxonomy/v1alpha
|
|
53
|
+
kind: TaxonomyNode
|
|
54
|
+
metadata:
|
|
55
|
+
name: my-service # DNS-compatible name
|
|
56
|
+
labels: {} # Key-value labels
|
|
57
|
+
taxonomyNodeType: layer # system | stack | layer | organization | program | project | team | team_member
|
|
58
|
+
spec:
|
|
59
|
+
description: "My service"
|
|
60
|
+
owners:
|
|
61
|
+
- team@example.com
|
|
62
|
+
environments:
|
|
63
|
+
- dev
|
|
64
|
+
- prod
|
|
65
|
+
parents:
|
|
66
|
+
node: my-stack # Parent reference
|
|
67
|
+
dependsOn:
|
|
68
|
+
nodes:
|
|
69
|
+
- other-layer # Dependencies
|
|
70
|
+
extensions: {} # Plugin-specific data
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Key Constraints:**
|
|
74
|
+
- `metadata.name` must match pattern `^[a-z0-9]([-_a-z0-9]{0,61}[a-z0-9])?$`
|
|
75
|
+
- `spec.environments` must have at least one entry
|
|
76
|
+
- `spec.parents.node` required for all types except `system` and `organization`
|
|
77
|
+
|
|
78
|
+
### Environment (`environment.schema.json`)
|
|
79
|
+
|
|
80
|
+
Defines environment configurations with template replacements.
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
apiVersion: katalyst.taxonomy/v1alpha
|
|
84
|
+
kind: Environment
|
|
85
|
+
metadata:
|
|
86
|
+
name: prod
|
|
87
|
+
spec:
|
|
88
|
+
description: "Production environment"
|
|
89
|
+
templateReplacements:
|
|
90
|
+
ENVIRONMENT: PROD
|
|
91
|
+
REPLICA_COUNT: "3"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Lock File (`katalyst-lock.schema.json`)
|
|
95
|
+
|
|
96
|
+
Tracks installed components and versions.
|
|
97
|
+
|
|
98
|
+
```yaml
|
|
99
|
+
apiVersion: katalyst.taxonomy/v1alpha
|
|
100
|
+
kind: KatalystLock
|
|
101
|
+
metadata:
|
|
102
|
+
generatedAt: "2025-01-15T10:30:00Z"
|
|
103
|
+
generatedBy: "kata tax init"
|
|
104
|
+
katalystVersion: "1.0.0"
|
|
105
|
+
installed:
|
|
106
|
+
core:
|
|
107
|
+
version: "1.0.0"
|
|
108
|
+
schemaVersion: "v1alpha"
|
|
109
|
+
installedAt: "2025-01-15T10:30:00Z"
|
|
110
|
+
source: bundled
|
|
111
|
+
plugins:
|
|
112
|
+
layer_types:
|
|
113
|
+
version: "1.0.0"
|
|
114
|
+
installedAt: "2025-01-15T10:30:00Z"
|
|
115
|
+
source: bundled
|
|
116
|
+
canonical:
|
|
117
|
+
- app-docker
|
|
118
|
+
- k8s-kustomize
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Plugin Schemas
|
|
122
|
+
|
|
123
|
+
Plugin schemas extend the core taxonomy with additional resource types.
|
|
124
|
+
|
|
125
|
+
| Directory | Plugin | Description |
|
|
126
|
+
|-----------|--------|-------------|
|
|
127
|
+
| [`plugins/capabilities/`](plugins/capabilities/) | Capabilities | Service capability definitions *(deprecated -- use design)* |
|
|
128
|
+
| [`plugins/design/`](plugins/design/) | Design | System design: capabilities, DDD, user research, delivery, architecture, BDD (16 kinds) |
|
|
129
|
+
| [`plugins/practices/`](plugins/practices/) | Practices | Team knowledge with practice areas and competencies (2 kinds) |
|
|
130
|
+
| [`plugins/layer-actions/`](plugins/layer-actions/) | Actions | Executable actions bound to layer types |
|
|
131
|
+
| [`plugins/layer-types/`](plugins/layer-types/) | Layer Types | Scaffolding template definitions |
|
|
132
|
+
| [`plugins/cicd/`](plugins/cicd/) | CI/CD | Pipeline workflow and job templates |
|
|
133
|
+
| [`plugins/tools/`](plugins/tools/) | Tools | Tool catalog definitions |
|
|
134
|
+
| [`plugins/extensions/`](plugins/extensions/) | Extensions | Conditional layer type augmentation |
|
|
135
|
+
| [`hooks/`](hooks/) | Hooks | `.katalyst-hooks.yaml` user configuration |
|
|
136
|
+
|
|
137
|
+
### Plugin Registry
|
|
138
|
+
|
|
139
|
+
The [`plugins/registry.json`](plugins/registry.json) file lists all available plugins:
|
|
140
|
+
|
|
141
|
+
```json
|
|
142
|
+
{
|
|
143
|
+
"plugins": [
|
|
144
|
+
{ "name": "capabilities", "manifest": "capabilities/manifest.json" },
|
|
145
|
+
{ "name": "layer_actions", "manifest": "layer-actions/manifest.json" },
|
|
146
|
+
{ "name": "layer_types", "manifest": "layer-types/manifest.json" },
|
|
147
|
+
{ "name": "tools", "manifest": "tools/manifest.json" },
|
|
148
|
+
{ "name": "cicd", "manifest": "cicd/manifest.json" }
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Layer Types (`plugins/layer-types/`)
|
|
154
|
+
|
|
155
|
+
```yaml
|
|
156
|
+
apiVersion: katalyst.taxonomy.plugins.layer_types/v1alpha
|
|
157
|
+
kind: LayerType
|
|
158
|
+
metadata:
|
|
159
|
+
name: app-docker
|
|
160
|
+
spec:
|
|
161
|
+
description: "Docker application scaffold"
|
|
162
|
+
template: templates/app-docker
|
|
163
|
+
defaultLayerDir: app
|
|
164
|
+
optionalPaths:
|
|
165
|
+
- README.md
|
|
166
|
+
- "*/Dockerfile"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Layer Actions (`plugins/layer-actions/`)
|
|
170
|
+
|
|
171
|
+
```yaml
|
|
172
|
+
apiVersion: katalyst.taxonomy.plugins.actions/v1alpha
|
|
173
|
+
kind: Action
|
|
174
|
+
metadata:
|
|
175
|
+
name: build-docker
|
|
176
|
+
labels:
|
|
177
|
+
layerType: app-docker
|
|
178
|
+
spec:
|
|
179
|
+
description: "Build Docker image"
|
|
180
|
+
type: shell
|
|
181
|
+
when: pre
|
|
182
|
+
run: docker build -t $IMAGE_NAME .
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Capabilities (`plugins/capabilities/`)
|
|
186
|
+
|
|
187
|
+
```yaml
|
|
188
|
+
apiVersion: katalyst.taxonomy.plugins.capabilities/v1alpha
|
|
189
|
+
kind: Capability
|
|
190
|
+
metadata:
|
|
191
|
+
name: user-authentication
|
|
192
|
+
spec:
|
|
193
|
+
description: "OAuth2/OIDC authentication service"
|
|
194
|
+
categories:
|
|
195
|
+
- security
|
|
196
|
+
- identity
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### CI/CD Templates (`plugins/cicd/`)
|
|
200
|
+
|
|
201
|
+
```yaml
|
|
202
|
+
apiVersion: katalyst.taxonomy.plugins.cicd/v1alpha
|
|
203
|
+
kind: Stage
|
|
204
|
+
metadata:
|
|
205
|
+
name: ci
|
|
206
|
+
spec:
|
|
207
|
+
description: "Continuous Integration stage"
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Hook Config (`hooks/`)
|
|
211
|
+
|
|
212
|
+
Schema for the user-facing `.katalyst-hooks.yaml` file:
|
|
213
|
+
|
|
214
|
+
```yaml
|
|
215
|
+
apiVersion: katalyst.taxonomy.hooks/v1alpha
|
|
216
|
+
kind: HookConfig
|
|
217
|
+
spec:
|
|
218
|
+
tool: pre-commit
|
|
219
|
+
kata_actions:
|
|
220
|
+
app-docker:
|
|
221
|
+
- action: lint
|
|
222
|
+
stage: pre-commit
|
|
223
|
+
- action: build
|
|
224
|
+
stage: pre-push
|
|
225
|
+
iac-terragrunt:
|
|
226
|
+
- action: validate
|
|
227
|
+
stage: pre-commit
|
|
228
|
+
additional_hooks:
|
|
229
|
+
- name: hadolint
|
|
230
|
+
stage: pre-commit
|
|
231
|
+
run: hadolint Dockerfile
|
|
232
|
+
files: Dockerfile
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Validation
|
|
236
|
+
|
|
237
|
+
### Using the CLI
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Validate all taxonomy documents
|
|
241
|
+
kata tax lint
|
|
242
|
+
|
|
243
|
+
# JSON output for CI
|
|
244
|
+
kata tax lint --json
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Using jsonschema (Python)
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
pip install jsonschema
|
|
251
|
+
|
|
252
|
+
# Validate a single document
|
|
253
|
+
python -m jsonschema my-node.yaml -i schemas/taxonomy-node.schema.json
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### IDE Integration
|
|
257
|
+
|
|
258
|
+
Most IDEs support JSON Schema validation for YAML files:
|
|
259
|
+
|
|
260
|
+
**VS Code** (with YAML extension):
|
|
261
|
+
```yaml
|
|
262
|
+
# .vscode/settings.json
|
|
263
|
+
{
|
|
264
|
+
"yaml.schemas": {
|
|
265
|
+
"./schemas/taxonomy-node.schema.json": ["**/layer.yaml", "**/stack.yaml", "**/system.yaml"]
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**JetBrains IDEs**:
|
|
271
|
+
Configure in Settings > Languages & Frameworks > Schemas and DTDs > JSON Schema Mappings.
|
|
272
|
+
|
|
273
|
+
## Versioning
|
|
274
|
+
|
|
275
|
+
Schemas follow semantic versioning within the `apiVersion` field:
|
|
276
|
+
|
|
277
|
+
- **Alpha** (`v1alpha`): Breaking changes possible
|
|
278
|
+
- **Beta** (`v1beta`): Mostly stable, minor changes possible
|
|
279
|
+
- **Stable** (`v1`): Backwards compatible
|
|
280
|
+
|
|
281
|
+
See [CHANGELOG.md](CHANGELOG.md) for version history.
|
|
282
|
+
|
|
283
|
+
## Extending Schemas
|
|
284
|
+
|
|
285
|
+
To add custom fields to taxonomy nodes, use the `spec.extensions` block:
|
|
286
|
+
|
|
287
|
+
```yaml
|
|
288
|
+
spec:
|
|
289
|
+
extensions:
|
|
290
|
+
myPlugin:
|
|
291
|
+
customField: value
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
For creating new plugin schemas, see the [Plugin Architecture](../docs/extending/plugin-architecture.md) documentation.
|
|
295
|
+
|
|
296
|
+
## Resources
|
|
297
|
+
|
|
298
|
+
- [Core Concepts](../docs/users/core-concepts.md) - Understanding the taxonomy model
|
|
299
|
+
- [Plugin Architecture](../docs/extending/plugin-architecture.md) - Creating plugins
|
|
300
|
+
- [Creating Layer Types](../docs/extending/creating-layer-types.md) - Layer type schemas
|