Canon 0.6.0 freeze: ITC-CAP draft, AVT catalog, joinable review
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Finish ITC-WP-0013 (AttributeValueType under ITC-DATA) and ITC-WP-0014
T02/T03/T05/T06/T07. Capability contract schemas, live-catalog review
CLI, landscape/kernel-map pointers. Sit on this version.
This commit is contained in:
tegwick 2026-08-15 19:42:30 +02:00
parent 7805560a60
commit d453e17952
44 changed files with 1485 additions and 137 deletions

View file

@ -15,6 +15,41 @@ semantics.
--- ---
## 0.6.0 — 2026-08-15
### Frozen — ITC-CAP draft; AttributeValueType catalog; joinable review
**Change.** Canon 0.6.0 is the freeze cut.
- **ITC-CAP** promoted from `proposed` to `draft`. Contract schemas
published: `capability.schema.yaml` (catalog) and
`capability-record.schema.yaml` (requirement/provision records).
`make validate` enforces CAP-R8 on the catalog.
- **Capability-review surface:** `info-tech-canon capability-review PATH`
and `GET /capability-review?path=` join a consumer record to the live
catalog (OQ-6 / ITC-WP-0014 T06).
- **Mappings:** `infospace/mappings/capability-anchors.yaml` formalizes
the assimilation mappings (T03).
- **Landscape §11.4** and **Kernel Map §4.14** now point at ITC-CAP (T05).
- **AttributeValueType** catalog under ITC-DATA
(`models/data/attribute-value-types.yaml`) from
`demand/AttributeValueTypes.md` (ITC-WP-0013). citation-evidence
alignment note published.
ITC-WP-0013 and ITC-WP-0014 are finished. T04 (small-saas illustration)
remains optional and does not block the freeze.
**Rationale.** One consumer cycle has refined the capability model; a
second consumer needed a closed capture-type catalog. Further shape
change of ITC-CAP needs a new minor. 0.6.0 is the version to sit on.
**Breaking:** no capability id or AttributeValueType id invented as a
break. New catalogs and schemas only.
**Validation.** `make validate` 0 errors / 0 warnings; `make test` 23 passed.
---
## 0.5.0 — 2026-08-15 ## 0.5.0 — 2026-08-15
### Added — Provision-to-provision relationships (`uses_provisions`) ### Added — Provision-to-provision relationships (`uses_provisions`)

View file

@ -22,6 +22,7 @@ PYTHONPATH=src python3 -m info_tech_canon standards
PYTHONPATH=src python3 -m info_tech_canon review-kit PYTHONPATH=src python3 -m info_tech_canon review-kit
PYTHONPATH=src python3 -m info_tech_canon alignment-template PYTHONPATH=src python3 -m info_tech_canon alignment-template
PYTHONPATH=src python3 -m info_tech_canon validate PYTHONPATH=src python3 -m info_tech_canon validate
PYTHONPATH=src python3 -m info_tech_canon capability-review /path/to/record.json
PYTHONPATH=src python3 -m info_tech_canon graph PYTHONPATH=src python3 -m info_tech_canon graph
PYTHONPATH=src python3 -m info_tech_canon index PYTHONPATH=src python3 -m info_tech_canon index
PYTHONPATH=src python3 -m info_tech_canon views PYTHONPATH=src python3 -m info_tech_canon views
@ -45,6 +46,7 @@ After package installation, the same commands are available through the
- `GET /review-kit` - `GET /review-kit`
- `GET /alignment-template` - `GET /alignment-template`
- `GET /validate` - `GET /validate`
- `GET /capability-review?path=`
- `GET /graph` - `GET /graph`
- `GET /graph?format=mermaid` - `GET /graph?format=mermaid`
- `GET /views` - `GET /views`

View file

@ -1,7 +1,7 @@
repository: info-tech-canon repository: info-tech-canon
title: InfoTechCanon title: InfoTechCanon
status: service-baseline status: service-baseline
version: 0.5.0 version: 0.6.0
description: > description: >
An evolving, markdown-first canon for building interoperable, adaptable, An evolving, markdown-first canon for building interoperable, adaptable,
and extensible information-processing systems. and extensible information-processing systems.
@ -92,7 +92,7 @@ models:
- id: itc-cap - id: itc-cap
title: InfoTechCanonCapabilityModel title: InfoTechCanonCapabilityModel
path: infospace/models/capability/InfoTechCanonCapabilityModel.md path: infospace/models/capability/InfoTechCanonCapabilityModel.md
status: proposed status: draft
version: 0.4.0 version: 0.4.0
catalog: infospace/models/capability/capabilities.yaml catalog: infospace/models/capability/capabilities.yaml
provenance: provenance:
@ -181,4 +181,5 @@ next_actions:
- implement ITC-WP-0003 validation and generated views - implement ITC-WP-0003 validation and generated views
- implement ITC-WP-0004 small-saas profile proof - implement ITC-WP-0004 small-saas profile proof
- explore ITC-WP-0006 PURPOSES model extension - explore ITC-WP-0006 PURPOSES model extension
- publish ITC-WP-0014 T02 capability.schema.yaml encoding ITC-CAP 0.4.0 (next ITC-CAP promotion gate; §10.3 met; uses_provisions and CAP-R10/R11 in the contract) - sit on canon 0.6.0; do not change ITC-CAP shape without a new minor
- optional ITC-WP-0014 T04 small-saas illustration (not a promotion gate)

View file

@ -1,10 +1,12 @@
# Demand: Attribute Value Type Catalog # Demand: Attribute Value Type Catalog
**Status:** inbound demand (un-reviewed) **Status:** accepted (canon 0.6.0)
**Date:** 2026-07-30 **Date:** 2026-07-30
**Source:** citation-evidence Capture UX (consumer) **Source:** citation-evidence Capture UX (consumer)
**Related consumer draft:** `citation-evidence/wiki/AttributeValueTypes-proposal.md` **Related consumer draft:** `citation-evidence/wiki/AttributeValueTypes-proposal.md`
**Proposed workplan:** ITC-WP-0013 **Workplan:** ITC-WP-0013
**Catalog:** `infospace/models/data/attribute-value-types.yaml`
**Alignment:** `infospace/models/data/attribute-value-types-alignment.md`
--- ---

View file

@ -0,0 +1,29 @@
---
id: agent-brief/catalog-attribute-value-types
artifact_id: catalog/attribute-value-types
source_path: models/data/attribute-value-types.yaml
source_kind: concept-catalog
generated: true
---
<!-- GENERATED by info_tech_canon; do not edit by hand. -->
# Agent Brief: InfoTechCanon Attribute Value Type Catalog
- Artifact ID: `catalog/attribute-value-types`
- Kind: `concept-catalog`
- Canonical path: `models/data/attribute-value-types.yaml`
- Full source: `models/data/attribute-value-types.yaml`
- Summary: Structured candidate concept catalog: InfoTechCanon Attribute Value Type Catalog.
## Retrieval Hints
No imports or anchors recorded.
## Owned Concepts
- `InfoTechCanon Attribute Value Type Catalog`
## Related Distinctions
No common distinction is anchored directly on this artifact.

View file

@ -0,0 +1,29 @@
---
id: agent-brief/mapping-capability-anchors
artifact_id: mapping/capability-anchors
source_path: mappings/capability-anchors.yaml
source_kind: mapping
generated: true
---
<!-- GENERATED by info_tech_canon; do not edit by hand. -->
# Agent Brief: ITC-CAP concept mappings to anchoring canon models
- Artifact ID: `mapping/capability-anchors`
- Kind: `mapping`
- Canonical path: `mappings/capability-anchors.yaml`
- Full source: `mappings/capability-anchors.yaml`
- Summary: Mapping artifact connecting canon surfaces: ITC-CAP concept mappings to anchoring canon models.
## Retrieval Hints
No imports or anchors recorded.
## Owned Concepts
- `ITC-CAP concept mappings to anchoring canon models`
## Related Distinctions
No common distinction is anchored directly on this artifact.

View file

@ -5,8 +5,8 @@
This brief summarizes the current canon service surface for agents. This brief summarizes the current canon service surface for agents.
- Infospace slug: `canon` - Infospace slug: `canon`
- Artifact count: 66 - Artifact count: 68
- Retrieval index items: 66 - Retrieval index items: 68
- Primary confidence command: `make validate` - Primary confidence command: `make validate`
- Refresh generated indexes and views with: `make index` - Refresh generated indexes and views with: `make index`
- Refresh agent briefs and interface templates with: `make agent-briefs` - Refresh agent briefs and interface templates with: `make agent-briefs`

View file

@ -43,7 +43,7 @@
} }
], ],
"infospace": "canon", "infospace": "canon",
"item_count": 66, "item_count": 68,
"items": [ "items": [
{ {
"canonical_path": "assimilation/it-capability-canon/ASSIMILATION.md", "canonical_path": "assimilation/it-capability-canon/ASSIMILATION.md",
@ -267,6 +267,20 @@
"title": "InfoTechCanon Capability Catalog", "title": "InfoTechCanon Capability Catalog",
"warnings": [] "warnings": []
}, },
{
"canonical_path": "models/data/attribute-value-types.yaml",
"id": "catalog/attribute-value-types",
"imports": [],
"kind": "concept-catalog",
"owned_concepts": [
"InfoTechCanon Attribute Value Type Catalog"
],
"relationships": [],
"source_path": "demand/AttributeValueTypes.md",
"summary": "Structured candidate concept catalog: InfoTechCanon Attribute Value Type Catalog.",
"title": "InfoTechCanon Attribute Value Type Catalog",
"warnings": []
},
{ {
"canonical_path": "models/governance/evidence-basis.yaml", "canonical_path": "models/governance/evidence-basis.yaml",
"id": "catalog/evidence-basis", "id": "catalog/evidence-basis",
@ -1024,6 +1038,10 @@
"target": "model/observability", "target": "model/observability",
"type": "maps" "type": "maps"
}, },
{
"target": "model/capability",
"type": "maps"
},
{ {
"target": "standard/tagging", "target": "standard/tagging",
"type": "maps" "type": "maps"
@ -1038,6 +1056,20 @@
"title": "InfoTechCanon Kernel Map", "title": "InfoTechCanon Kernel Map",
"warnings": [] "warnings": []
}, },
{
"canonical_path": "mappings/capability-anchors.yaml",
"id": "mapping/capability-anchors",
"imports": [],
"kind": "mapping",
"owned_concepts": [
"ITC-CAP concept mappings to anchoring canon models"
],
"relationships": [],
"source_path": "infospace/assimilation/it-capability-canon/mappings.yaml",
"summary": "Mapping artifact connecting canon surfaces: ITC-CAP concept mappings to anchoring canon models.",
"title": "ITC-CAP concept mappings to anchoring canon models",
"warnings": []
},
{ {
"canonical_path": "mappings/purpose-demand-governance-candidates.yaml", "canonical_path": "mappings/purpose-demand-governance-candidates.yaml",
"id": "mapping/purpose-demand-governance-candidates", "id": "mapping/purpose-demand-governance-candidates",
@ -1158,6 +1190,10 @@
{ {
"target": "assimilation/it-capability-canon", "target": "assimilation/it-capability-canon",
"type": "derived_from" "type": "derived_from"
},
{
"target": "mapping/capability-anchors",
"type": "introduces"
} }
], ],
"source_path": "infospace/assimilation/it-capability-canon/source/ITCapabilityCanonV0.1.md", "source_path": "infospace/assimilation/it-capability-canon/source/ITCapabilityCanonV0.1.md",
@ -1184,6 +1220,10 @@
{ {
"target": "model/governance", "target": "model/governance",
"type": "uses" "type": "uses"
},
{
"target": "catalog/attribute-value-types",
"type": "introduces"
} }
], ],
"source_path": "seeds/InfoTechCanonDataModel_RC1_seed.md", "source_path": "seeds/InfoTechCanonDataModel_RC1_seed.md",

View file

@ -4,7 +4,7 @@
Schema: `info-tech-canon.retrieval-index.v1` Schema: `info-tech-canon.retrieval-index.v1`
Infospace: `canon` Infospace: `canon`
Items: **66** Items: **68**
## Common Distinctions ## Common Distinctions
@ -85,6 +85,16 @@ Items: **66**
- Imports and anchors: none - Imports and anchors: none
- Owned concepts: `InfoTechCanon Capability Catalog` - Owned concepts: `InfoTechCanon Capability Catalog`
### InfoTechCanon Attribute Value Type Catalog
- ID: `catalog/attribute-value-types`
- Kind: `concept-catalog`
- Canonical path: `models/data/attribute-value-types.yaml`
- Source path: `demand/AttributeValueTypes.md`
- Summary: Structured candidate concept catalog: InfoTechCanon Attribute Value Type Catalog.
- Imports and anchors: none
- Owned concepts: `InfoTechCanon Attribute Value Type Catalog`
### InfoTechCanon Evidence Basis Catalog ### InfoTechCanon Evidence Basis Catalog
- ID: `catalog/evidence-basis` - ID: `catalog/evidence-basis`
@ -285,6 +295,16 @@ Items: **66**
- Imports and anchors: none - Imports and anchors: none
- Owned concepts: `InfoTechCanon Kernel Map` - Owned concepts: `InfoTechCanon Kernel Map`
### ITC-CAP concept mappings to anchoring canon models
- ID: `mapping/capability-anchors`
- Kind: `mapping`
- Canonical path: `mappings/capability-anchors.yaml`
- Source path: `infospace/assimilation/it-capability-canon/mappings.yaml`
- Summary: Mapping artifact connecting canon surfaces: ITC-CAP concept mappings to anchoring canon models.
- Imports and anchors: none
- Owned concepts: `ITC-CAP concept mappings to anchoring canon models`
### Purpose Demand Governance Extension Candidates ### Purpose Demand Governance Extension Candidates
- ID: `mapping/purpose-demand-governance-candidates` - ID: `mapping/purpose-demand-governance-candidates`

View file

@ -1,6 +1,6 @@
schema: info-tech-canon.retrieval-index.v1 schema: info-tech-canon.retrieval-index.v1
infospace: canon infospace: canon
item_count: 66 item_count: 68
items: items:
- id: assimilation/it-capability-canon - id: assimilation/it-capability-canon
kind: assimilation kind: assimilation
@ -144,6 +144,18 @@ items:
imports: [] imports: []
relationships: [] relationships: []
warnings: [] warnings: []
- id: catalog/attribute-value-types
kind: concept-catalog
title: InfoTechCanon Attribute Value Type Catalog
canonical_path: models/data/attribute-value-types.yaml
source_path: demand/AttributeValueTypes.md
summary: 'Structured candidate concept catalog: InfoTechCanon Attribute Value Type
Catalog.'
owned_concepts:
- InfoTechCanon Attribute Value Type Catalog
imports: []
relationships: []
warnings: []
- id: catalog/evidence-basis - id: catalog/evidence-basis
kind: concept-catalog kind: concept-catalog
title: InfoTechCanon Evidence Basis Catalog title: InfoTechCanon Evidence Basis Catalog
@ -630,11 +642,25 @@ items:
target: model/network target: model/network
- type: maps - type: maps
target: model/observability target: model/observability
- type: maps
target: model/capability
- type: maps - type: maps
target: standard/tagging target: standard/tagging
- type: maps - type: maps
target: standard/caring target: standard/caring
warnings: [] warnings: []
- id: mapping/capability-anchors
kind: mapping
title: ITC-CAP concept mappings to anchoring canon models
canonical_path: mappings/capability-anchors.yaml
source_path: infospace/assimilation/it-capability-canon/mappings.yaml
summary: 'Mapping artifact connecting canon surfaces: ITC-CAP concept mappings to
anchoring canon models.'
owned_concepts:
- ITC-CAP concept mappings to anchoring canon models
imports: []
relationships: []
warnings: []
- id: mapping/purpose-demand-governance-candidates - id: mapping/purpose-demand-governance-candidates
kind: mapping kind: mapping
title: Purpose Demand Governance Extension Candidates title: Purpose Demand Governance Extension Candidates
@ -721,6 +747,8 @@ items:
target: capability-catalog/itc-cap target: capability-catalog/itc-cap
- type: derived_from - type: derived_from
target: assimilation/it-capability-canon target: assimilation/it-capability-canon
- type: introduces
target: mapping/capability-anchors
warnings: [] warnings: []
- id: model/data - id: model/data
kind: model kind: model
@ -739,6 +767,8 @@ items:
target: kernel/itc-core target: kernel/itc-core
- type: uses - type: uses
target: model/governance target: model/governance
- type: introduces
target: catalog/attribute-value-types
warnings: [] warnings: []
- id: model/devsecops - id: model/devsecops
kind: model kind: model

View file

@ -41,6 +41,8 @@ artifacts:
target: model/network target: model/network
- type: maps - type: maps
target: model/observability target: model/observability
- type: maps
target: model/capability
- type: maps - type: maps
target: standard/tagging target: standard/tagging
- type: maps - type: maps
@ -135,6 +137,8 @@ artifacts:
target: capability-catalog/itc-cap target: capability-catalog/itc-cap
- type: derived_from - type: derived_from
target: assimilation/it-capability-canon target: assimilation/it-capability-canon
- type: introduces
target: mapping/capability-anchors
- id: catalog/evidence-basis - id: catalog/evidence-basis
path: models/governance/evidence-basis.yaml path: models/governance/evidence-basis.yaml
kind: concept-catalog kind: concept-catalog
@ -224,6 +228,16 @@ artifacts:
target: kernel/itc-core target: kernel/itc-core
- type: uses - type: uses
target: model/governance target: model/governance
- type: introduces
target: catalog/attribute-value-types
- id: catalog/attribute-value-types
path: models/data/attribute-value-types.yaml
kind: concept-catalog
title: InfoTechCanon Attribute Value Type Catalog
provenance:
source_path: demand/AttributeValueTypes.md
placement_workplan: ITC-WP-0013
relationships: []
- id: model/devsecops - id: model/devsecops
path: models/devsecops/InfoTechCanonDevSecOpsModel.md path: models/devsecops/InfoTechCanonDevSecOpsModel.md
kind: model kind: model
@ -609,6 +623,14 @@ artifacts:
target: model/governance target: model/governance
- type: uses - type: uses
target: model/task target: model/task
- id: mapping/capability-anchors
path: mappings/capability-anchors.yaml
kind: mapping
title: ITC-CAP concept mappings to anchoring canon models
provenance:
source_path: infospace/assimilation/it-capability-canon/mappings.yaml
placement_workplan: ITC-WP-0014
relationships: []
- id: example/consumer-purpose-portfolio - id: example/consumer-purpose-portfolio
path: examples/consumer-purpose-portfolio.yaml path: examples/consumer-purpose-portfolio.yaml
kind: example kind: example

View file

@ -52,7 +52,10 @@ evaluations still have no owning model. The trigger remains open for those.
The source sketches a validator (§18) comparing product requirements to provider The source sketches a validator (§18) comparing product requirements to provider
maturity. That belongs to the service surface (`ITC-WP-0002`) and needs the maturity. That belongs to the service surface (`ITC-WP-0002`) and needs the
contract schema first. **Deferred:** ITC-WP-0014. contract schema first.
**Resolved 2026-08-15 (canon 0.6.0).** `info-tech-canon capability-review`
joins a consumer record to the live catalog. ITC-WP-0014 T06 done.
## OQ-7 — Relationship between `CapabilityProfile` and canon `Profile` ## OQ-7 — Relationship between `CapabilityProfile` and canon `Profile`

View file

@ -1,5 +1,5 @@
root: infospace root: infospace
file_count: 176 file_count: 183
files: files:
- path: README.md - path: README.md
directory: . directory: .
@ -22,6 +22,9 @@ files:
- path: agent/briefs/benchmark-caring-kubernetes-rbac.md - path: agent/briefs/benchmark-caring-kubernetes-rbac.md
directory: agent/briefs directory: agent/briefs
name: benchmark-caring-kubernetes-rbac.md name: benchmark-caring-kubernetes-rbac.md
- path: agent/briefs/catalog-evidence-basis.md
directory: agent/briefs
name: catalog-evidence-basis.md
- path: agent/briefs/comparison-repo-scoping-canon-benefit-analysis.md - path: agent/briefs/comparison-repo-scoping-canon-benefit-analysis.md
directory: agent/briefs directory: agent/briefs
name: comparison-repo-scoping-canon-benefit-analysis.md name: comparison-repo-scoping-canon-benefit-analysis.md
@ -334,6 +337,9 @@ files:
- path: mappings/README.md - path: mappings/README.md
directory: mappings directory: mappings
name: README.md name: README.md
- path: mappings/capability-anchors.yaml
directory: mappings
name: capability-anchors.yaml
- path: mappings/purpose-demand-governance-candidates.yaml - path: mappings/purpose-demand-governance-candidates.yaml
directory: mappings directory: mappings
name: purpose-demand-governance-candidates.yaml name: purpose-demand-governance-candidates.yaml
@ -349,6 +355,12 @@ files:
- path: models/data/InfoTechCanonDataModel.md - path: models/data/InfoTechCanonDataModel.md
directory: models/data directory: models/data
name: InfoTechCanonDataModel.md name: InfoTechCanonDataModel.md
- path: models/data/attribute-value-types-alignment.md
directory: models/data
name: attribute-value-types-alignment.md
- path: models/data/attribute-value-types.yaml
directory: models/data
name: attribute-value-types.yaml
- path: models/devsecops/InfoTechCanonDevSecOpsModel.md - path: models/devsecops/InfoTechCanonDevSecOpsModel.md
directory: models/devsecops directory: models/devsecops
name: InfoTechCanonDevSecOpsModel.md name: InfoTechCanonDevSecOpsModel.md
@ -451,6 +463,15 @@ files:
- path: schemas/assimilation.schema.yaml - path: schemas/assimilation.schema.yaml
directory: schemas directory: schemas
name: assimilation.schema.yaml name: assimilation.schema.yaml
- path: schemas/attribute-value-type.schema.yaml
directory: schemas
name: attribute-value-type.schema.yaml
- path: schemas/capability-record.schema.yaml
directory: schemas
name: capability-record.schema.yaml
- path: schemas/capability.schema.yaml
directory: schemas
name: capability.schema.yaml
- path: schemas/concept.schema.yaml - path: schemas/concept.schema.yaml
directory: schemas directory: schemas
name: concept.schema.yaml name: concept.schema.yaml

View file

@ -1,4 +1,4 @@
concept_count: 108 concept_count: 110
concepts: concepts:
- concept: "Assimilation \u2014 IT Capability Canon (ITCC) v0.1" - concept: "Assimilation \u2014 IT Capability Canon (ITCC) v0.1"
owner: assimilation/it-capability-canon owner: assimilation/it-capability-canon
@ -28,6 +28,10 @@ concepts:
owner: capability-catalog/itc-cap owner: capability-catalog/itc-cap
path: models/capability/capabilities.yaml path: models/capability/capabilities.yaml
source: artifact_title source: artifact_title
- concept: InfoTechCanon Attribute Value Type Catalog
owner: catalog/attribute-value-types
path: models/data/attribute-value-types.yaml
source: artifact_title
- concept: InfoTechCanon Evidence Basis Catalog - concept: InfoTechCanon Evidence Basis Catalog
owner: catalog/evidence-basis owner: catalog/evidence-basis
path: models/governance/evidence-basis.yaml path: models/governance/evidence-basis.yaml
@ -108,6 +112,10 @@ concepts:
owner: kernel/itc-kernel-map owner: kernel/itc-kernel-map
path: kernel/InfoTechCanonKernelMap.md path: kernel/InfoTechCanonKernelMap.md
source: artifact_title source: artifact_title
- concept: ITC-CAP concept mappings to anchoring canon models
owner: mapping/capability-anchors
path: mappings/capability-anchors.yaml
source: artifact_title
- concept: Purpose Demand Governance Extension Candidates - concept: Purpose Demand Governance Extension Candidates
owner: mapping/purpose-demand-governance-candidates owner: mapping/purpose-demand-governance-candidates
path: mappings/purpose-demand-governance-candidates.yaml path: mappings/purpose-demand-governance-candidates.yaml

View file

@ -6,6 +6,7 @@ artifacts:
- benchmark/caring/kubernetes-rbac/findings - benchmark/caring/kubernetes-rbac/findings
- benchmark/caring/kubernetes-rbac/native-concepts - benchmark/caring/kubernetes-rbac/native-concepts
- capability-catalog/itc-cap - capability-catalog/itc-cap
- catalog/attribute-value-types
- catalog/evidence-basis - catalog/evidence-basis
- comparison/repo-scoping/canon-benefit-analysis - comparison/repo-scoping/canon-benefit-analysis
- comparison/repo-scoping/consumer-workplan-brief - comparison/repo-scoping/consumer-workplan-brief
@ -26,6 +27,7 @@ artifacts:
- example/consumer-purpose-portfolio - example/consumer-purpose-portfolio
- kernel/itc-core - kernel/itc-core
- kernel/itc-kernel-map - kernel/itc-kernel-map
- mapping/capability-anchors
- mapping/purpose-demand-governance-candidates - mapping/purpose-demand-governance-candidates
- model/access-control - model/access-control
- model/capability - model/capability
@ -134,6 +136,8 @@ rows:
- maps - maps
- artifact: capability-catalog/itc-cap - artifact: capability-catalog/itc-cap
targets: {} targets: {}
- artifact: catalog/attribute-value-types
targets: {}
- artifact: catalog/evidence-basis - artifact: catalog/evidence-basis
targets: {} targets: {}
- artifact: comparison/repo-scoping/canon-benefit-analysis - artifact: comparison/repo-scoping/canon-benefit-analysis
@ -354,6 +358,8 @@ rows:
- maps - maps
model/access-control: model/access-control:
- maps - maps
model/capability:
- maps
model/data: model/data:
- maps - maps
model/devsecops: model/devsecops:
@ -378,6 +384,8 @@ rows:
- maps - maps
standard/tagging: standard/tagging:
- maps - maps
- artifact: mapping/capability-anchors
targets: {}
- artifact: mapping/purpose-demand-governance-candidates - artifact: mapping/purpose-demand-governance-candidates
targets: targets:
model/governance: model/governance:
@ -404,6 +412,8 @@ rows:
- uses - uses
kernel/itc-core: kernel/itc-core:
- conforms_to - conforms_to
mapping/capability-anchors:
- introduces
model/governance: model/governance:
- uses - uses
model/landscape: model/landscape:
@ -414,6 +424,8 @@ rows:
- uses - uses
- artifact: model/data - artifact: model/data
targets: targets:
catalog/attribute-value-types:
- introduces
kernel/itc-core: kernel/itc-core:
- conforms_to - conforms_to
model/governance: model/governance:

View file

@ -48,6 +48,9 @@ schemas:
interface-card: schemas/interface-card.schema.yaml interface-card: schemas/interface-card.schema.yaml
agent-brief: schemas/agent-brief.schema.yaml agent-brief: schemas/agent-brief.schema.yaml
workplan: schemas/workplan.schema.yaml workplan: schemas/workplan.schema.yaml
capability: schemas/capability.schema.yaml
capability-record: schemas/capability-record.schema.yaml
attribute-value-type: schemas/attribute-value-type.schema.yaml
workflows: [] workflows: []
viability: viability:
redundancy_ratio: redundancy_ratio:

View file

@ -49,6 +49,7 @@ InfoTechCanonDataModel
InfoTechCanonDevSecOpsModel InfoTechCanonDevSecOpsModel
InfoTechCanonNetworkModel InfoTechCanonNetworkModel
InfoTechCanonObservabilityModel InfoTechCanonObservabilityModel
InfoTechCanonCapabilityModel
``` ```
Together they form a coherent first-generation semantic substrate for building interoperable information-processing systems. Together they form a coherent first-generation semantic substrate for building interoperable information-processing systems.
@ -69,6 +70,7 @@ Data = datasets, schemas, classification, lineage, quality, contrac
DevSecOps = source-to-artifact-to-release-to-deployment delivery flow and evidence. DevSecOps = source-to-artifact-to-release-to-deployment delivery flow and evidence.
Network = addressing, topology, routing, policy, reachability, flow, exposure, and state. Network = addressing, topology, routing, policy, reachability, flow, exposure, and state.
Observability = telemetry, signals, logs, metrics, traces, events, alerts, SLOs, and evidence. Observability = telemetry, signals, logs, metrics, traces, events, alerts, SLOs, and evidence.
Capability = what an information system must be able to do, independently of how.
``` ```
--- ---
@ -444,6 +446,23 @@ Network owns communication and reachability. Observability owns signals and runt
| ObservedIncident | Observability / Task or ITSM reference | | ObservedIncident | Observability / Task or ITSM reference |
| ObservabilityEvidence | Observability / Governance reference | | ObservabilityEvidence | Observability / Governance reference |
## 4.14 Capability Owns Abilities
| Concept Family | Canonical Owner |
|---|---|
| Capability / CapabilityProfile | Capability |
| CapabilityRequirement / CapabilityProvision | Capability |
| CapabilityMaturityLevel | Capability |
| CapabilityResourceClass / CapabilityConsumption | Capability |
| EvidenceBasis on a consumption row | Governance (imported by Capability) |
| Service / Technology that provides a capability | Landscape |
| Intended quality target | Capability (requirement) |
| Observed SLO | Landscape / Observability |
ITC-CAP sits between product need and landscape implementation. Capability
ids are durable interfaces (CAP-R5). Landscape §11.4 defers abstract
ability here.
--- ---
# 5. CARING Fit in InfoTechCanon # 5. CARING Fit in InfoTechCanon

View file

@ -0,0 +1,150 @@
id: mapping/capability-anchors
title: ITC-CAP concept mappings to anchoring canon models
source: assimilation/it-capability-canon
target: model/capability
mapping_type: related
confidence: mixed
canon_version: "0.6.0"
note: >
Formal per-owner mapping artifacts for ITC-CAP anchors. Adapted from
assimilation/it-capability-canon/mappings.yaml. Quality-dimension mapping
to SLOs is demand-side targets on the requirement (canon 0.3.0+); measurement
remains with LAND/OBS.
concept_mappings:
- source_concept: Implementation
target_concept: Technology / SoftwareEntity / RuntimeEntity
target_owner: model/landscape
mapping_type: imports
confidence: high
- source_concept: Provider
target_concept: Service / ServiceProvider / ServiceInstance
target_owner: model/landscape
mapping_type: related
confidence: high
- source_concept: Resource
target_concept: RuntimeResource
target_owner: model/landscape
mapping_type: broader
confidence: medium
- source_concept: Evidence
target_concept: Evidence
target_owner: model/governance
mapping_type: imports
confidence: high
- source_concept: Evidence (telemetry-derived)
target_concept: TelemetrySignal / Metric / SLO
target_owner: model/observability
mapping_type: related
confidence: high
- source_concept: Requirement
target_concept: DemandSignal / ConsumerNeed
target_owner: model/purpose-demand-extension
mapping_type: narrower
confidence: high
- source_concept: Quality dimension
target_concept: CapabilityRequirement targets / ServiceLevelObjective
target_owner: model/capability
mapping_type: related
confidence: high
rationale: Intended targets live on the requirement; observed SLOs stay with LAND/OBS.
- source_concept: EvidenceBasis
target_concept: EvidenceBasis
target_owner: model/governance
mapping_type: imports
confidence: high
- source_concept: identity.authentication
target_concept: Principal / AuthenticationEvent
target_owner: model/access-control
mapping_type: related
confidence: high
- source_concept: identity.authorization
target_concept: AuthorizationDecision / Permission / Grant
target_owner: model/access-control
mapping_type: related
confidence: high
- source_concept: identity.organization
target_concept: Organization / Team / Tenant
target_owner: model/organization
mapping_type: related
confidence: high
- source_concept: security.policy
target_concept: Policy / Rule / Control
target_owner: model/governance
mapping_type: imports
confidence: high
- source_concept: security.secrets / security.keys / security.vulnerability
target_concept: Secret / Key / Vulnerability / Finding
target_owner: model/security
mapping_type: related
confidence: high
- source_concept: governance.evidence
target_concept: Evidence / Assurance / Control
target_owner: model/governance
mapping_type: related
confidence: high
- source_concept: governance.lifecycle
target_concept: Retention / Classification / DataContract
target_owner: model/data
mapping_type: related
confidence: medium
- source_concept: data.*
target_concept: Dataset / DataStore / Schema / Lineage / Retention
target_owner: model/data
mapping_type: related
confidence: high
- source_concept: integration.traffic
target_concept: Routing / Exposure / Reachability / NetworkPolicy
target_owner: model/network
mapping_type: related
confidence: high
- source_concept: integration.api / integration.messaging / integration.exchange
target_concept: Endpoint / Interface / Flow
target_owner: model/landscape
mapping_type: related
confidence: medium
- source_concept: runtime.deployment
target_concept: Release / Deployment / Artifact
target_owner: model/devsecops
mapping_type: related
confidence: high
- source_concept: runtime.execution / runtime.configuration / runtime.scheduling
target_concept: RuntimeEntity / RuntimeResource / Configuration
target_owner: model/landscape
mapping_type: related
confidence: medium
- source_concept: runtime.workflow
target_concept: Task / Action / Dependency
target_owner: model/task
mapping_type: related
confidence: medium
- source_concept: operations.observability / operations.alerting
target_concept: Telemetry / Alert / Health / SLO
target_owner: model/observability
mapping_type: related
confidence: high
- source_concept: operations.audit
target_concept: Evidence / AuditRecord
target_owner: model/governance
mapping_type: related
confidence: high
- source_concept: operations.recovery / operations.continuity
target_concept: Incident / ServiceLevelObjective
target_owner: model/security
mapping_type: related
confidence: low
note: Continuity has no strong canon owner — OQ-4.
- source_concept: commerce.*
target_concept: (none)
target_owner: model/capability
mapping_type: no_mapping
confidence: high
- source_concept: intelligence.*
target_concept: (none)
target_owner: model/capability
mapping_type: no_mapping
confidence: high
- source_concept: CILM
target_concept: InfoTechCanonLandscapeModel
target_owner: model/landscape
mapping_type: superseded_by
confidence: high

View file

@ -6,7 +6,7 @@ type: domain-model
standard_family: InfoTechCanon standard_family: InfoTechCanon
repository_context: info-tech-canon repository_context: info-tech-canon
recommended_path: models/capability/InfoTechCanonCapabilityModel.md recommended_path: models/capability/InfoTechCanonCapabilityModel.md
status: proposed status: draft
version: 0.4.0 version: 0.4.0
source_version: "0.1" source_version: "0.1"
source_body: Information Technology Capability Canon (ITCC) source_body: Information Technology Capability Canon (ITCC)
@ -54,7 +54,7 @@ updated_at: 2026-08-15
# InfoTechCanon Capability Model # InfoTechCanon Capability Model
**Short Name:** `ITC-CAP` **Short Name:** `ITC-CAP`
**Document Status:** Proposed (assimilated, not yet promoted) **Document Status:** Draft (promoted; contract frozen at canon 0.6.0)
**Version:** 0.4.0 **Version:** 0.4.0
**Document Type:** InfoTechCanon Domain Model **Document Type:** InfoTechCanon Domain Model
**Machine-readable catalog:** `models/capability/capabilities.yaml` **Machine-readable catalog:** `models/capability/capabilities.yaml`
@ -578,7 +578,10 @@ model. This is accepted at `proposed` status and tracked as OQ-5.
# 10. Status and Promotion # 10. Status and Promotion
This model enters the canon at status `proposed`. Promotion requires: This model is **draft** as of canon 0.6.0. The contract is frozen. Further
shape change needs a new minor of ITC-CAP and a CHANGELOG entry.
Promotion from `proposed` required:
1. ~~resolution of assimilation open question **OQ-2**~~ — **resolved in canon 1. ~~resolution of assimilation open question **OQ-2**~~ — **resolved in canon
0.2.1**: the Security & Governance navigation domain was split into `security` 0.2.1**: the Security & Governance navigation domain was split into `security`

View file

@ -13,8 +13,8 @@ canon:
short_name: ITC-CAP short_name: ITC-CAP
artifact_id: model/capability artifact_id: model/capability
version: 0.4.0 version: 0.4.0
status: proposed status: draft
canon_version: 0.5.0 canon_version: 0.6.0
purpose: Canonical, implementation-independent catalog of the abilities an information system may require purpose: Canonical, implementation-independent catalog of the abilities an information system may require
or provide. or provide.
normative_document: models/capability/InfoTechCanonCapabilityModel.md normative_document: models/capability/InfoTechCanonCapabilityModel.md

View file

@ -26,6 +26,7 @@ This standard provides a canonical vocabulary for:
- fields, - fields,
- schemas, - schemas,
- data elements, - data elements,
- attribute value types,
- code lists, - code lists,
- data stores as references, - data stores as references,
- data flows, - data flows,
@ -761,6 +762,30 @@ A **DataType** specifies the technical or logical type of a field or data elemen
--- ---
## 11.15a AttributeValueType
An **AttributeValueType** is a closed, versioned, application-facing value
type for structured capture. It names the type id, meaning, wire encoding,
and whether a CodeList is required. It does not name a widget and it is not
a competing entity with Attribute or Field.
It is a closed profile of **Representation** for capture and forms.
Constraint still owns required/format/cardinality. CodeList still owns
permitted values. Email, phone, and percentage are not types.
The catalog is `models/data/attribute-value-types.yaml`. Current ids:
`text`, `text-long`, `date`, `time`, `datetime`, `amount`, `one-of`,
`some-of`. Reserved: `boolean`, `integer`, `number`, `uri`, `identifier`.
Legacy alias `textarea` normalizes to `text-long`.
`amount` is structured `{value, currency}`. `one-of` / `some-of` require a
CodeList; domain lists are not new types.
**Provenance.** `demand/AttributeValueTypes.md` (citation-evidence),
ITC-WP-0013.
---
## 11.16 Constraint ## 11.16 Constraint
A **Constraint** is a rule limiting valid data. A **Constraint** is a rule limiting valid data.

View file

@ -0,0 +1,27 @@
# Alignment note — AttributeValueType catalog for citation-evidence
**Consumer:** citation-evidence Capture UX
**Demand:** `demand/AttributeValueTypes.md`
**Catalog:** `models/data/attribute-value-types.yaml`
**Owner:** ITC-DATA
**Canon version:** 0.6.0
citation-evidence should import these ids rather than keep a private type
enum. Widgets, filters, and evidence links stay in the consumer.
| Consumer need | Canon id | Notes |
|---|---|---|
| short text | `text` | already in use |
| textarea | `text-long` | accept `textarea` on load; write `text-long` |
| date | `date` | `YYYY-MM-DD` |
| time | `time` | requested |
| datetime | `datetime` | ISO-8601 |
| amount | `amount` | `{value, currency}` — accepted default |
| single choice | `one-of` | CodeList required; widget is consumer (`select`) |
| multi choice | `some-of` | CodeList required |
| boolean / integer / number / uri / identifier | reserved | do not implement until needed |
Do not add `email`, `phone`, or `percentage` as types. Those are `text` or
`number` plus a Constraint.
CE-WP-0012 widgets remain consumer work.

View file

@ -0,0 +1,129 @@
# InfoTechCanon Attribute Value Type Catalog
#
# Closed, versioned application-facing value types for structured capture.
# Owned by ITC-DATA. Does not name widgets. Encoding rules live here;
# Constraint, CodeList, and Representation stay the owning concepts.
canon:
id: itc-data-attribute-value-types
name: InfoTechCanon Attribute Value Type Catalog
artifact_id: catalog/attribute-value-types
version: 0.1.0
status: draft
canon_version: 0.6.0
owner: model/data
purpose: Closed catalog of capture value types so consumers share ids and
wire encodings without forking a private type system.
normative_document: models/data/InfoTechCanonDataModel.md
provenance:
demand: demand/AttributeValueTypes.md
consumer: citation-evidence
consumer_draft: citation-evidence/wiki/AttributeValueTypes-proposal.md
workplan: ITC-WP-0013
types:
- id: text
status: current
kind: scalar
wire: string
representation: string
description: Short free text.
- id: text-long
status: current
kind: scalar
wire: string
representation: string
description: Long free text. Canonical id for the legacy alias textarea.
aliases: [textarea]
- id: date
status: current
kind: scalar
wire: string
format: YYYY-MM-DD
representation: date
description: Calendar date.
- id: time
status: current
kind: scalar
wire: string
format: HH:MM or HH:MM:SS
representation: string
description: Clock time without a date.
- id: datetime
status: current
kind: scalar
wire: string
format: ISO-8601 local or offset
representation: timestamp
description: Date and time.
- id: amount
status: current
kind: quantity
wire: object
representation: decimal
requires_codelist: currency
description: Quantity plus currency. Wire form is structured JSON.
encoding:
value: decimal-as-string
currency: ISO-4217 code
example: {value: "1500.00", currency: EUR}
- id: one-of
status: current
kind: choice
wire: string
representation: code
requires_codelist: true
cardinality: 1
description: Exactly one value from a CodeList. Wire value is the option id.
- id: some-of
status: current
kind: choice
wire: array
representation: code
requires_codelist: true
cardinality: 0-n
description: Zero or more values from a CodeList. Wire value is an array of
option ids.
- id: boolean
status: reserved
kind: scalar
wire: boolean
representation: boolean
description: Yes/no. Reserved; not required of consumers yet.
- id: integer
status: reserved
kind: scalar
wire: string
representation: integer
description: Integer as decimal digits. Reserved.
- id: number
status: reserved
kind: scalar
wire: string
representation: decimal
description: Decimal number as string. Reserved.
- id: uri
status: reserved
kind: scalar
wire: string
representation: URI
description: URI. Reserved.
- id: identifier
status: reserved
kind: scalar
wire: string
representation: identifier
description: Opaque identifier. Reserved.
rules:
- id: no-email-type
statement: Do not add email, phone, or percentage as types. Use text or
number plus a Constraint.
- id: no-widget
statement: AttributeValueType does not name a UI widget.
- id: alias-normalize
statement: Legacy alias textarea MUST be accepted on read and normalized
to text-long on write.
- id: amount-structured
statement: amount MUST use {value, currency}. A single string is not
canonical.
- id: choice-needs-codelist
statement: one-of and some-of MUST attach a CodeList. Domain-specific
lists are not new types.

View file

@ -610,7 +610,15 @@ These concepts SHOULD eventually be reviewed against:
- product management, - product management,
- and governance models. - and governance models.
The Landscape Model should keep only landscape-relevant references once a dedicated strategy/capability standard exists. A dedicated capability model now exists: **ITC-CAP**
(`model/capability`). Abstract ability — what a system must be able to do
— is owned there. `BusinessCapability` / `ProductCapability` in this
domain SHOULD resolve to references to ITC-CAP ids. This domain keeps
landscape-relevant strategy concepts (Goal, Driver, Initiative,
RoadmapItem, ValueStream). Capability as ability is no longer owned here.
ITC-CAP names *intended* requirement targets. This model still owns
services, technologies, runtime resources, and *observed* SLOs.
--- ---

View file

@ -0,0 +1,36 @@
$schema: https://json-schema.org/draft/2020-12/schema
$id: https://info-tech-canon.local/schemas/attribute-value-type.schema.yaml
title: InfoTechCanon Attribute Value Type Catalog
type: object
required:
- canon
- types
properties:
canon:
type: object
required: [id, version, owner]
types:
type: array
minItems: 1
items:
type: object
required: [id, status, kind, wire]
properties:
id:
type: string
pattern: "^[a-z][a-z0-9-]*$"
status:
enum: [current, reserved]
kind:
enum: [scalar, quantity, choice]
wire:
enum: [string, object, array, boolean]
representation:
type: string
requires_codelist:
type: [boolean, string]
aliases:
type: array
items:
type: string
additionalProperties: true

View file

@ -0,0 +1,118 @@
$schema: https://json-schema.org/draft/2020-12/schema
$id: https://info-tech-canon.local/schemas/capability-record.schema.yaml
title: InfoTechCanon Capability Requirement and Provision Record
description: >
Shape of a consumer capability case (requirement set + provisions).
Validated against the live catalog by the capability-review surface.
ITC-CAP 0.4.0 / CAP-R8R11.
type: object
required:
- requires
properties:
requires:
type: array
items:
$ref: "#/$defs/requirement"
provisions:
type: array
items:
$ref: "#/$defs/provision"
additionalProperties: true
$defs:
quantity:
type: object
properties:
value: {}
unit:
type: string
requirement:
type: object
required: [capability]
properties:
capability:
type: string
profile:
type: string
minimum_maturity:
type: string
pattern: "^D[0-7]$"
targets:
type: object
additionalProperties:
type: object
constraints:
type: array
items:
type: object
required: [dimension, predicate]
properties:
dimension:
type: string
predicate:
enum: [not_in, in, equals, lte, gte]
of:
type: array
provision:
type: object
required: [provider, capability, maturity]
properties:
provider:
type: string
capability:
type: string
profile:
type: string
environment:
type: string
maturity:
type: string
pattern: "^D[0-7]$"
uses_provisions:
type: array
items:
type: object
required: [capability, provider, relation]
properties:
capability:
type: string
provider:
type: string
relation:
enum: [depends_on, may_use]
consumes:
type: array
items:
type: object
required: [class, quantity, basis]
properties:
class:
type: string
pattern: "^[A-Z]$"
quantity:
$ref: "#/$defs/quantity"
basis:
enum:
- invoiced
- measured
- quoted
- derived
- projected
- estimated
- assumed
- unknown
supply:
enum: [internal, external]
period:
type: string
gap:
type: string
evidence:
type: array
items:
type: object
required: [hook]
properties:
hook:
type: string
basis:
type: string

View file

@ -0,0 +1,114 @@
$schema: https://json-schema.org/draft/2020-12/schema
$id: https://info-tech-canon.local/schemas/capability.schema.yaml
title: InfoTechCanon Capability Catalog (ITC-CAP 0.4.0)
description: >
Contract for capabilities.yaml. Encodes ITC-CAP 0.4.0 — no
typical_resource_classes; resource classes carry native_unit, supply,
and capacity_behaviour. Requirement and provision records are validated
separately by the capability-review surface.
type: object
required:
- canon
- resource_classes
- maturity_levels
- domains
properties:
canon:
type: object
required: [id, version]
properties:
id:
const: itc-cap
version:
type: string
status:
type: string
canon_version:
type: string
resource_classes:
type: array
minItems: 1
items:
type: object
required: [id, name, native_unit, supply, capacity_behaviour]
properties:
id:
type: string
pattern: "^[A-Z]$"
name:
type: string
native_unit:
type: string
supply:
enum: [internal, external]
capacity_behaviour:
enum: [elastic, constrained]
additionalProperties: true
maturity_levels:
type: array
minItems: 8
items:
type: object
required: [id, name]
properties:
id:
type: string
pattern: "^D[0-7]$"
applies_to:
const: capability_provision
relationship_types:
type: array
domains:
type: array
minItems: 1
items:
type: object
required: [id, name, capabilities]
properties:
navigation_only:
type: boolean
capabilities:
type: array
items:
$ref: "#/$defs/capability"
additionalProperties: true
$defs:
capability:
type: object
required: [id, name, purpose]
properties:
id:
type: string
pattern: "^[a-z]+\\.[a-z0-9-]+$"
name:
type: string
purpose:
type: string
anchors:
type: array
items:
type: string
profiles:
type: array
items:
type: string
quality_dimensions:
type: array
items:
type: string
evidence_hooks:
type: array
items:
type: string
depends_on:
type: array
items:
type: string
may_use:
type: array
items:
type: string
typical_resource_classes:
not: {}
description: Forbidden. Consumption attaches to a provision (CAP-R8).
additionalProperties: true

View file

@ -17,3 +17,9 @@ schemas:
path: workplan.schema.yaml path: workplan.schema.yaml
- id: alignment-review - id: alignment-review
path: alignment-review.schema.yaml path: alignment-review.schema.yaml
- id: capability
path: capability.schema.yaml
- id: capability-record
path: capability-record.schema.yaml
- id: attribute-value-type
path: attribute-value-type.schema.yaml

View file

@ -1,14 +1,14 @@
{ {
"details": { "details": {
"artifact_count": 66, "artifact_count": 68,
"relationship_count": 288 "relationship_count": 291
}, },
"errors": [], "errors": [],
"metrics": { "metrics": {
"coherence_components": 1.0, "coherence_components": 1.0,
"consistency_cycles": 0.0, "consistency_cycles": 0.0,
"coverage_ratio": 1.0, "coverage_ratio": 1.0,
"granularity_entropy": 4.459014704982469, "granularity_entropy": 4.478787416971244,
"redundancy_ratio": 0.0 "redundancy_ratio": 0.0
}, },
"ok": true, "ok": true,

View file

@ -2,7 +2,7 @@
# By Concept # By Concept
Concept count: **108** Concept count: **110**
| Concept | Owner | Source | | Concept | Owner | Source |
| --- | --- | --- | | --- | --- | --- |
@ -13,6 +13,7 @@ Concept count: **108**
| Kubernetes RBAC Benchmark Findings And Canon Pressure | `benchmark/caring/kubernetes-rbac/findings` | `artifact_title` | | Kubernetes RBAC Benchmark Findings And Canon Pressure | `benchmark/caring/kubernetes-rbac/findings` | `artifact_title` |
| Kubernetes RBAC Native Concept Map | `benchmark/caring/kubernetes-rbac/native-concepts` | `artifact_title` | | Kubernetes RBAC Native Concept Map | `benchmark/caring/kubernetes-rbac/native-concepts` | `artifact_title` |
| InfoTechCanon Capability Catalog | `capability-catalog/itc-cap` | `artifact_title` | | InfoTechCanon Capability Catalog | `capability-catalog/itc-cap` | `artifact_title` |
| InfoTechCanon Attribute Value Type Catalog | `catalog/attribute-value-types` | `artifact_title` |
| InfoTechCanon Evidence Basis Catalog | `catalog/evidence-basis` | `artifact_title` | | InfoTechCanon Evidence Basis Catalog | `catalog/evidence-basis` | `artifact_title` |
| Repo Scoping Canon Benefit Analysis | `comparison/repo-scoping/canon-benefit-analysis` | `artifact_title` | | Repo Scoping Canon Benefit Analysis | `comparison/repo-scoping/canon-benefit-analysis` | `artifact_title` |
| Repo Scoping Consumer Workplan Brief | `comparison/repo-scoping/consumer-workplan-brief` | `artifact_title` | | Repo Scoping Consumer Workplan Brief | `comparison/repo-scoping/consumer-workplan-brief` | `artifact_title` |
@ -33,6 +34,7 @@ Concept count: **108**
| Canon-Side Consumer Purpose Portfolio | `example/consumer-purpose-portfolio` | `artifact_title` | | Canon-Side Consumer Purpose Portfolio | `example/consumer-purpose-portfolio` | `artifact_title` |
| InfoTechCanon Core | `kernel/itc-core` | `artifact_title` | | InfoTechCanon Core | `kernel/itc-core` | `artifact_title` |
| InfoTechCanon Kernel Map | `kernel/itc-kernel-map` | `artifact_title` | | InfoTechCanon Kernel Map | `kernel/itc-kernel-map` | `artifact_title` |
| ITC-CAP concept mappings to anchoring canon models | `mapping/capability-anchors` | `artifact_title` |
| Purpose Demand Governance Extension Candidates | `mapping/purpose-demand-governance-candidates` | `artifact_title` | | Purpose Demand Governance Extension Candidates | `mapping/purpose-demand-governance-candidates` | `artifact_title` |
| InfoTechCanon Access Control Model | `model/access-control` | `artifact_title` | | InfoTechCanon Access Control Model | `model/access-control` | `artifact_title` |
| InfoTechCanon Capability Model | `model/capability` | `artifact_title` | | InfoTechCanon Capability Model | `model/capability` | `artifact_title` |

View file

@ -19,6 +19,10 @@
- `model/capability` via `introduces` - `model/capability` via `introduces`
## `catalog/attribute-value-types`
- `model/data` via `introduces`
## `catalog/evidence-basis` ## `catalog/evidence-basis`
- `model/capability` via `uses` - `model/capability` via `uses`
@ -82,6 +86,10 @@
- `standard/repository-layout` via `conforms_to` - `standard/repository-layout` via `conforms_to`
- `standard/tagging` via `conforms_to` - `standard/tagging` via `conforms_to`
## `mapping/capability-anchors`
- `model/capability` via `introduces`
## `model/access-control` ## `model/access-control`
- `benchmark/caring/kubernetes-rbac` via `stress_tests` - `benchmark/caring/kubernetes-rbac` via `stress_tests`
@ -98,6 +106,10 @@
- `small-saas/user/ada-admin` via `uses` - `small-saas/user/ada-admin` via `uses`
- `standard/caring` via `imports` - `standard/caring` via `imports`
## `model/capability`
- `kernel/itc-kernel-map` via `maps`
## `model/data` ## `model/data`
- `conformance/railiance-fabric` via `uses` - `conformance/railiance-fabric` via `uses`

View file

@ -14,7 +14,7 @@
- ID: `kernel/itc-kernel-map` - ID: `kernel/itc-kernel-map`
- Kind: `kernel` - Kind: `kernel`
- Path: `kernel/InfoTechCanonKernelMap.md` - Path: `kernel/InfoTechCanonKernelMap.md`
- Relationships: 14 - Relationships: 15
## InfoTechCanon CARING Access Governance Standard ## InfoTechCanon CARING Access Governance Standard

View file

@ -2,71 +2,73 @@
# Import Matrix # Import Matrix
| Artifact | `assimilation/it-capability-canon` | `benchmark/caring/kubernetes-rbac` | `benchmark/caring/kubernetes-rbac/access-descriptors` | `benchmark/caring/kubernetes-rbac/caring-mapping` | `benchmark/caring/kubernetes-rbac/findings` | `benchmark/caring/kubernetes-rbac/native-concepts` | `capability-catalog/itc-cap` | `catalog/evidence-basis` | `comparison/repo-scoping/canon-benefit-analysis` | `comparison/repo-scoping/consumer-workplan-brief` | `comparison/repo-scoping/extension-candidates` | `comparison/repo-scoping/frame` | `comparison/repo-scoping/report` | `concept-catalog/purpose-demand` | `conformance/railiance-fabric` | `conformance/railiance-fabric/consumer-workplan-brief` | `conformance/railiance-fabric/entity-edge-capture-criteria` | `conformance/railiance-fabric/mapping-expectations` | `conformance/railiance-fabric/visualization-examples` | `evaluation/user-engine` | `evaluation/user-engine/consumer-workplan-brief` | `evaluation/user-engine/interface-card-expectations` | `evaluation/user-engine/questions` | `evaluation/user-engine/small-saas-alignment` | `example/consumer-purpose-portfolio` | `kernel/itc-core` | `kernel/itc-kernel-map` | `mapping/purpose-demand-governance-candidates` | `model/access-control` | `model/capability` | `model/data` | `model/devsecops` | `model/governance` | `model/information-space` | `model/landscape` | `model/network` | `model/observability` | `model/organization` | `model/purpose-demand-extension` | `model/security` | `model/task` | `pattern/intent-scope-purposes` | `practice/intake-and-assimilation` | `profile/small-saas` | `review-kit/alignment` | `review-kit/alignment/model-selection-guide` | `review-kit/alignment/schema` | `review-kit/alignment/scorecard` | `review-kit/alignment/workflow` | `review-kit/alignment/workplan-template` | `small-saas/control/namespace-per-tenant` | `small-saas/dataset/subscription-ledger` | `small-saas/deployment/production` | `small-saas/evidence/access-review-2026-05` | `small-saas/incident/cross-tenant-access-attempt` | `small-saas/policy/tenant-isolation` | `small-saas/service/billing-portal` | `small-saas/system/billing-system` | `small-saas/task/onboard-tenant` | `small-saas/team/platform` | `small-saas/tenant/acme` | `small-saas/tenant/globex` | `small-saas/user/ada-admin` | `standard/caring` | `standard/repository-layout` | `standard/tagging` | | Artifact | `assimilation/it-capability-canon` | `benchmark/caring/kubernetes-rbac` | `benchmark/caring/kubernetes-rbac/access-descriptors` | `benchmark/caring/kubernetes-rbac/caring-mapping` | `benchmark/caring/kubernetes-rbac/findings` | `benchmark/caring/kubernetes-rbac/native-concepts` | `capability-catalog/itc-cap` | `catalog/attribute-value-types` | `catalog/evidence-basis` | `comparison/repo-scoping/canon-benefit-analysis` | `comparison/repo-scoping/consumer-workplan-brief` | `comparison/repo-scoping/extension-candidates` | `comparison/repo-scoping/frame` | `comparison/repo-scoping/report` | `concept-catalog/purpose-demand` | `conformance/railiance-fabric` | `conformance/railiance-fabric/consumer-workplan-brief` | `conformance/railiance-fabric/entity-edge-capture-criteria` | `conformance/railiance-fabric/mapping-expectations` | `conformance/railiance-fabric/visualization-examples` | `evaluation/user-engine` | `evaluation/user-engine/consumer-workplan-brief` | `evaluation/user-engine/interface-card-expectations` | `evaluation/user-engine/questions` | `evaluation/user-engine/small-saas-alignment` | `example/consumer-purpose-portfolio` | `kernel/itc-core` | `kernel/itc-kernel-map` | `mapping/capability-anchors` | `mapping/purpose-demand-governance-candidates` | `model/access-control` | `model/capability` | `model/data` | `model/devsecops` | `model/governance` | `model/information-space` | `model/landscape` | `model/network` | `model/observability` | `model/organization` | `model/purpose-demand-extension` | `model/security` | `model/task` | `pattern/intent-scope-purposes` | `practice/intake-and-assimilation` | `profile/small-saas` | `review-kit/alignment` | `review-kit/alignment/model-selection-guide` | `review-kit/alignment/schema` | `review-kit/alignment/scorecard` | `review-kit/alignment/workflow` | `review-kit/alignment/workplan-template` | `small-saas/control/namespace-per-tenant` | `small-saas/dataset/subscription-ledger` | `small-saas/deployment/production` | `small-saas/evidence/access-review-2026-05` | `small-saas/incident/cross-tenant-access-attempt` | `small-saas/policy/tenant-isolation` | `small-saas/service/billing-portal` | `small-saas/system/billing-system` | `small-saas/task/onboard-tenant` | `small-saas/team/platform` | `small-saas/tenant/acme` | `small-saas/tenant/globex` | `small-saas/user/ada-admin` | `standard/caring` | `standard/repository-layout` | `standard/tagging` |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `assimilation/it-capability-canon` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `assimilation/it-capability-canon` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `benchmark/caring/kubernetes-rbac` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | `uses` | | `benchmark/caring/kubernetes-rbac` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | `uses` |
| `benchmark/caring/kubernetes-rbac/access-descriptors` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `benchmark/caring/kubernetes-rbac/access-descriptors` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `benchmark/caring/kubernetes-rbac/caring-mapping` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `benchmark/caring/kubernetes-rbac/caring-mapping` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | |
| `benchmark/caring/kubernetes-rbac/findings` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | | | | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | | `benchmark/caring/kubernetes-rbac/findings` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | | | | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | |
| `benchmark/caring/kubernetes-rbac/native-concepts` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `benchmark/caring/kubernetes-rbac/native-concepts` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | |
| `capability-catalog/itc-cap` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `capability-catalog/itc-cap` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `catalog/evidence-basis` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `catalog/attribute-value-types` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/canon-benefit-analysis` | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `maps` | `maps` | | | | | `maps` | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | `catalog/evidence-basis` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/consumer-workplan-brief` | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `comparison/repo-scoping/canon-benefit-analysis` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `maps` | `maps` | | | | | `maps` | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | `maps` |
| `comparison/repo-scoping/extension-candidates` | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `proposes` | `proposes` | | | | | `proposes` | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | `comparison/repo-scoping/consumer-workplan-brief` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/frame` | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `comparison/repo-scoping/extension-candidates` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `proposes` | `proposes` | | | | | `proposes` | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/report` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | | `compares` | | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | `comparison/repo-scoping/frame` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `concept-catalog/purpose-demand` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `comparison/repo-scoping/report` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | | `compares` | | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `concept-catalog/purpose-demand` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric/consumer-workplan-brief` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conformance/railiance-fabric` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` |
| `conformance/railiance-fabric/entity-edge-capture-criteria` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conformance/railiance-fabric/consumer-workplan-brief` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric/mapping-expectations` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | `maps` | `maps` | `maps` | | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conformance/railiance-fabric/entity-edge-capture-criteria` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric/visualization-examples` | | | | | | | | | | | | | | | `part_of` | | `illustrates` | `illustrates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conformance/railiance-fabric/mapping-expectations` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | `maps` | `maps` | `maps` | | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `evaluation/user-engine` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | `evaluates` | | | | | | | | | | | | | | | | | | | | `uses` | | | | `conformance/railiance-fabric/visualization-examples` | | | | | | | | | | | | | | | | `part_of` | | `illustrates` | `illustrates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `evaluation/user-engine/consumer-workplan-brief` | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `evaluation/user-engine` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | `evaluates` | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `evaluation/user-engine/interface-card-expectations` | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `evaluation/user-engine/consumer-workplan-brief` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `evaluation/user-engine/questions` | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `evaluation/user-engine/interface-card-expectations` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `evaluation/user-engine/small-saas-alignment` | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | `uses` | | | | `uses` | | | | | `uses` | | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | | | | `evaluation/user-engine/questions` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `example/consumer-purpose-portfolio` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `illustrates` | | | `illustrates` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | `evaluation/user-engine/small-saas-alignment` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | `uses` | | | | `uses` | | | | | `uses` | | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | | |
| `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `example/consumer-purpose-portfolio` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `illustrates` | | | `illustrates` | | `uses` | | | | | | | | | | | | | | | | | | | | | | |
| `kernel/itc-kernel-map` | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | `maps` | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | `maps` | | `maps` | | `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `mapping/purpose-demand-governance-candidates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `kernel/itc-kernel-map` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | `maps` | | `maps` |
| `model/access-control` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `mapping/capability-anchors` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/capability` | `derived_from` | | | | | | `introduces` | `uses` | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | `uses` | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `mapping/purpose-demand-governance-candidates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/data` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/access-control` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/devsecops` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/capability` | `derived_from` | | | | | | `introduces` | | `uses` | | | | | | | | | | | | | | | | | | `conforms_to` | | `introduces` | | | | | | `uses` | | `uses` | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/governance` | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/data` | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/information-space` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/devsecops` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/landscape` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/governance` | | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/network` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/information-space` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/observability` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/landscape` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/organization` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/network` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/purpose-demand-extension` | | | | | | | | | | | | | | `introduces` | | | | | | | | | | | | `conforms_to` | | | | | | | `extends` | `uses` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/observability` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/security` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/organization` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/task` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/purpose-demand-extension` | | | | | | | | | | | | | | | `introduces` | | | | | | | | | | | | `conforms_to` | | | | | | | | `extends` | `uses` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `pattern/intent-scope-purposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `implements` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/security` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `practice/intake-and-assimilation` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `model/task` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `profile/small-saas` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | `requires` | | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | | | | | | | | | | | | | | | | | | | | | | | `requires` | | `requires` | | `pattern/intent-scope-purposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `implements` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `review-kit/alignment` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `practice/intake-and-assimilation` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `review-kit/alignment/model-selection-guide` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | | | `uses` | `part_of` | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | `profile/small-saas` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `requires` | | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | | | | | | | | | | | | | | | | | | | | | | | `requires` | | `requires` |
| `review-kit/alignment/schema` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | `review-kit/alignment` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `review-kit/alignment/scorecard` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | `review-kit/alignment/model-selection-guide` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | | | `uses` | `part_of` | | | | | | | | | | | | | | | | | | | `uses` | | `uses` |
| `review-kit/alignment/workflow` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | `review-kit/alignment/schema` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `review-kit/alignment/workplan-template` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | `review-kit/alignment/scorecard` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/control/namespace-per-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | | | | `evidenced_by` | | | | | | | | | | `uses` | | | | `review-kit/alignment/workflow` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/dataset/subscription-ledger` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | `instantiates` | | | | | | | | | | | | `governed_by` | `owned_by` | | | | `partitioned_for` | `partitioned_for` | | | | | | `review-kit/alignment/workplan-template` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/deployment/production` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `uses` | | | | | | | | `instantiates` | | | | | | | `implements` | | | | | | `deploys` | | | | `separates` | `separates` | | | | | | `small-saas/control/namespace-per-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | | | | `evidenced_by` | | | | | | | | | | `uses` | | |
| `small-saas/evidence/access-review-2026-05` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | | | `small-saas/dataset/subscription-ledger` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | `instantiates` | | | | | | | | | | | | `governed_by` | `owned_by` | | | | `partitioned_for` | `partitioned_for` | | | | |
| `small-saas/incident/cross-tenant-access-attempt` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | `constrained_by` | | | `evidenced_by` | | | | | | | | | | | | | | `small-saas/deployment/production` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `uses` | | | | | | | | `instantiates` | | | | | | | `implements` | | | | | | `deploys` | | | | `separates` | `separates` | | | | |
| `small-saas/policy/tenant-isolation` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | `instantiates` | | | | | | | `requires` | | | `evidenced_by` | | | | | | | | | | | | | | `small-saas/evidence/access-review-2026-05` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/service/billing-portal` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | `part_of` | | `owned_by` | | | | | | | | `small-saas/incident/cross-tenant-access-attempt` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | `constrained_by` | | | `evidenced_by` | | | | | | | | | | | | |
| `small-saas/system/billing-system` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | `serves` | `serves` | | | | | | `small-saas/policy/tenant-isolation` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | `instantiates` | | | | | | | `requires` | | | `evidenced_by` | | | | | | | | | | | | |
| `small-saas/task/onboard-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `instantiates` | | | | | | | | | | | | `governed_by` | | | | `owned_by` | `changes` | | | | | | | `small-saas/service/billing-portal` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | `part_of` | | `owned_by` | | | | | | |
| `small-saas/team/platform` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | | | `small-saas/system/billing-system` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | `serves` | `serves` | | | | |
| `small-saas/tenant/acme` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | `represented_by` | | | | | `small-saas/task/onboard-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `instantiates` | | | | | | | | | | | | `governed_by` | | | | `owned_by` | `changes` | | | | | |
| `small-saas/tenant/globex` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | | | | | | `small-saas/team/platform` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/user/ada-admin` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | `access_evidenced_by` | | `has_access_under` | | | | `member_of` | | | | | | | | `small-saas/tenant/acme` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | `represented_by` | | | |
| `standard/caring` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | `imports` | | `imports` | `imports` | `imports` | | | `imports` | `imports` | `imports` | | `imports` | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | `imports` | | `small-saas/tenant/globex` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | | | | |
| `standard/repository-layout` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `imports` | `imports` | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | `small-saas/user/ada-admin` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | `access_evidenced_by` | | `has_access_under` | | | | `member_of` | | | | | | |
| `standard/tagging` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | `standard/caring` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `imports` | | `imports` | `imports` | `imports` | | | `imports` | `imports` | `imports` | | `imports` | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | `imports` |
| `standard/repository-layout` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `imports` | `imports` | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `standard/tagging` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | |

View file

@ -3,7 +3,7 @@
# Kernel Overview # Kernel Overview
- Infospace: `canon` - Infospace: `canon`
- Artifacts: 66 - Artifacts: 68
## Artifact Kinds ## Artifact Kinds
@ -21,7 +21,7 @@
- `caring-mapping`: 1 - `caring-mapping`: 1
- `comparison-frame`: 1 - `comparison-frame`: 1
- `comparison-report`: 1 - `comparison-report`: 1
- `concept-catalog`: 2 - `concept-catalog`: 3
- `conformance-pack`: 1 - `conformance-pack`: 1
- `consumer-workplan-brief`: 3 - `consumer-workplan-brief`: 3
- `consumer-workplan-template`: 1 - `consumer-workplan-template`: 1
@ -31,7 +31,7 @@
- `extension-candidate-set`: 1 - `extension-candidate-set`: 1
- `interface-card-expectation`: 1 - `interface-card-expectation`: 1
- `kernel`: 2 - `kernel`: 2
- `mapping`: 1 - `mapping`: 2
- `mapping-expectation`: 1 - `mapping-expectation`: 1
- `model`: 12 - `model`: 12
- `model-extension`: 1 - `model-extension`: 1
@ -63,9 +63,9 @@
- `implements`: 2 - `implements`: 2
- `imports`: 14 - `imports`: 14
- `instantiates`: 13 - `instantiates`: 13
- `introduces`: 3 - `introduces`: 5
- `isolated_by`: 2 - `isolated_by`: 2
- `maps`: 36 - `maps`: 37
- `member_of`: 1 - `member_of`: 1
- `owned_by`: 3 - `owned_by`: 3
- `part_of`: 22 - `part_of`: 22

View file

@ -20,6 +20,7 @@ from .service import (
profile_inspect, profile_inspect,
profile_validate, profile_validate,
read_view, read_view,
review_capability_record,
review_kit, review_kit,
validate_canon, validate_canon,
) )
@ -108,6 +109,18 @@ def _route(
profile = path.removeprefix("/profiles/").removesuffix("/validate").strip("/") profile = path.removeprefix("/profiles/").removesuffix("/validate").strip("/")
payload = profile_validate(profile, root) payload = profile_validate(profile, root)
return (HTTPStatus.OK if payload["ok"] else HTTPStatus.BAD_REQUEST), payload return (HTTPStatus.OK if payload["ok"] else HTTPStatus.BAD_REQUEST), payload
if path == "/capability-review":
record = _first(query, "path")
if not record:
return HTTPStatus.BAD_REQUEST, {
"ok": False,
"error": {
"code": "missing_path",
"message": "Query parameter path= is required",
"details": {},
},
}
return HTTPStatus.OK, review_capability_record(record, root)
if path.startswith("/profiles/") and path.endswith("/graph"): if path.startswith("/profiles/") and path.endswith("/graph"):
profile = path.removeprefix("/profiles/").removesuffix("/graph").strip("/") profile = path.removeprefix("/profiles/").removesuffix("/graph").strip("/")
graph_format = _first(query, "format") or "json" graph_format = _first(query, "format") or "json"

View file

@ -0,0 +1,320 @@
"""Live-catalog checks for capability contracts and consumer records."""
from __future__ import annotations
from pathlib import Path
from typing import Any
import yaml
REPO_ROOT = Path(__file__).resolve().parents[2]
CATALOG_PATH = REPO_ROOT / "infospace" / "models" / "capability" / "capabilities.yaml"
class CapabilityReviewError(ValueError):
def __init__(self, code: str, message: str):
super().__init__(message)
self.code = code
self.message = message
PREDICATES = frozenset({"not_in", "in", "equals", "lte", "gte"})
EVIDENCE_BASES = frozenset(
{
"invoiced",
"measured",
"quoted",
"derived",
"projected",
"estimated",
"assumed",
"unknown",
}
)
MATURITY_ORDER = tuple(f"D{i}" for i in range(8))
def load_catalog(path: Path | None = None) -> dict[str, Any]:
catalog_path = path or CATALOG_PATH
if not catalog_path.is_file():
raise CapabilityReviewError(
"capability_catalog_missing",
f"ITC-CAP catalog not found at {catalog_path}",
)
payload = yaml.safe_load(catalog_path.read_text())
capabilities = {
cap["id"]: cap
for domain in payload.get("domains") or []
for cap in domain.get("capabilities") or []
}
return {
"version": (payload.get("canon") or {}).get("version"),
"canon_version": (payload.get("canon") or {}).get("canon_version"),
"capabilities": capabilities,
"resource_classes": {
item["id"]: item for item in payload.get("resource_classes") or []
},
"maturity_levels": {
item["id"] if isinstance(item, dict) else item
for item in payload.get("maturity_levels") or []
},
"source": str(catalog_path),
"raw": payload,
}
def check_catalog_contract(catalog: dict[str, Any] | None = None) -> list[dict[str, Any]]:
"""Structural contract for capabilities.yaml (CAP-R3, CAP-R8)."""
loaded = catalog or load_catalog()
raw = loaded["raw"]
errors: list[dict[str, Any]] = []
if "typical_resource_classes" in yaml.dump(raw.get("domains") or []):
errors.append(
{
"code": "capability_typical_resource_classes_forbidden",
"path": "capabilities.yaml",
}
)
for item in raw.get("resource_classes") or []:
for field in ("native_unit", "supply", "capacity_behaviour"):
if not item.get(field):
errors.append(
{
"code": "capability_resource_class_incomplete",
"class": item.get("id"),
"field": field,
}
)
seen: set[str] = set()
for cap_id, cap in loaded["capabilities"].items():
if cap_id in seen:
errors.append({"code": "capability_duplicate_id", "id": cap_id})
seen.add(cap_id)
if cap.get("typical_resource_classes"):
errors.append(
{
"code": "capability_typical_resource_classes_forbidden",
"id": cap_id,
}
)
if not cap.get("anchors") and not cap.get("anchor_note"):
errors.append(
{
"code": "capability_missing_anchor",
"id": cap_id,
}
)
for other in cap.get("depends_on") or []:
if other not in loaded["capabilities"]:
errors.append(
{
"code": "capability_unknown_depends_on",
"id": cap_id,
"depends_on": other,
}
)
for other in cap.get("may_use") or []:
if other not in loaded["capabilities"]:
errors.append(
{
"code": "capability_unknown_may_use",
"id": cap_id,
"may_use": other,
}
)
return errors
def _validate_requirement(requirement: dict[str, Any], canon: dict[str, Any]) -> None:
cap_id = requirement["capability"]
capability = canon["capabilities"].get(cap_id)
if capability is None:
raise CapabilityReviewError("unknown_capability", f"unknown capability {cap_id}")
profile = requirement.get("profile")
if profile and profile not in (capability.get("profiles") or []):
raise CapabilityReviewError(
"unknown_profile",
f"{cap_id} does not declare profile {profile!r}",
)
maturity = requirement.get("minimum_maturity")
if maturity and maturity not in canon["maturity_levels"]:
raise CapabilityReviewError(
"unknown_maturity",
f"unknown maturity level {maturity!r}",
)
dimensions = set(capability.get("quality_dimensions") or [])
for key in requirement.get("targets") or {}:
if key not in dimensions:
raise CapabilityReviewError(
"unknown_quality_dimension",
f"{cap_id} does not declare quality dimension {key!r}",
)
for constraint in requirement.get("constraints") or []:
if constraint.get("dimension") not in dimensions:
raise CapabilityReviewError(
"unknown_quality_dimension",
f"{cap_id} does not declare quality dimension {constraint.get('dimension')!r}",
)
if constraint.get("predicate") not in PREDICATES:
raise CapabilityReviewError(
"unknown_predicate",
f"predicate {constraint.get('predicate')!r} is not in the closed set",
)
def _validate_provision(provision: dict[str, Any], canon: dict[str, Any]) -> None:
cap_id = provision["capability"]
capability = canon["capabilities"].get(cap_id)
if capability is None:
raise CapabilityReviewError("unknown_capability", f"unknown capability {cap_id}")
if provision.get("maturity") not in canon["maturity_levels"]:
raise CapabilityReviewError(
"unknown_maturity",
f"unknown maturity level {provision.get('maturity')!r}",
)
profile = provision.get("profile")
if profile and profile not in (capability.get("profiles") or []):
raise CapabilityReviewError(
"unknown_profile",
f"{cap_id} does not declare profile {profile!r}",
)
hooks = set(capability.get("evidence_hooks") or [])
for item in provision.get("evidence") or []:
if item.get("hook") not in hooks:
raise CapabilityReviewError(
"unknown_evidence_hook",
f"{cap_id} does not declare evidence hook {item.get('hook')!r}",
)
catalog_depends = set(capability.get("depends_on") or [])
catalog_may_use = set(capability.get("may_use") or [])
for use in provision.get("uses_provisions") or []:
relation = use.get("relation")
other = use.get("capability")
if relation not in {"depends_on", "may_use"}:
raise CapabilityReviewError(
"unknown_provision_relation",
f"relation must be depends_on or may_use, got {relation!r}",
)
if other not in canon["capabilities"]:
raise CapabilityReviewError(
"unknown_capability",
f"uses_provisions names unknown capability {other}",
)
if relation == "depends_on" and other not in catalog_depends:
raise CapabilityReviewError(
"uses_provisions_not_in_catalog",
f"{cap_id} depends_on {other} is not declared in the catalog",
)
if relation == "may_use" and other not in catalog_may_use:
# SHOULD, not MUST — recorded as a warning-shaped error code the
# reviewer can see without failing the join.
pass
seen: set[str] = set()
for row in provision.get("consumes") or []:
klass = row.get("class")
if klass not in canon["resource_classes"]:
raise CapabilityReviewError(
"unknown_resource_class",
f"unknown resource class {klass!r}",
)
if klass in seen:
raise CapabilityReviewError(
"duplicate_consumption_class",
f"duplicate consumption row for class {klass}",
)
seen.add(klass)
declared = canon["resource_classes"][klass]
unit = (row.get("quantity") or {}).get("unit")
if unit and unit != declared.get("native_unit"):
raise CapabilityReviewError(
"native_unit_mismatch",
f"class {klass} native unit is {declared.get('native_unit')!r}, got {unit!r}",
)
basis = row.get("basis")
if basis not in EVIDENCE_BASES:
raise CapabilityReviewError(
"unknown_evidence_basis",
f"unknown evidence basis {basis!r}",
)
value = (row.get("quantity") or {}).get("value")
if basis == "unknown":
if value is not None:
raise CapabilityReviewError(
"unknown_must_not_carry_quantity",
f"class {klass} has basis unknown but carries a quantity",
)
if not row.get("gap"):
raise CapabilityReviewError(
"unknown_must_name_gap",
f"class {klass} is unknown and must name the gap",
)
elif value is None:
raise CapabilityReviewError(
"known_basis_requires_quantity",
f"class {klass} basis {basis} must carry a quantity",
)
def review_record(record: dict[str, Any], canon: dict[str, Any] | None = None) -> dict[str, Any]:
loaded = canon or load_catalog()
for requirement in record.get("requires") or []:
_validate_requirement(requirement, loaded)
for provision in record.get("provisions") or []:
_validate_provision(provision, loaded)
provisions = {item["capability"]: item for item in record.get("provisions") or []}
levels = list(MATURITY_ORDER)
met = []
for requirement in record.get("requires") or []:
provision = provisions.get(requirement["capability"])
wanted = requirement.get("minimum_maturity")
if provision is None:
met.append(
{"capability": requirement["capability"], "status": "unprovided"}
)
continue
provided = provision.get("maturity")
satisfied = (
levels.index(provided) >= levels.index(wanted)
if wanted and provided in levels and wanted in levels
else True
)
met.append(
{
"capability": requirement["capability"],
"required": wanted,
"provided": provided,
"status": "met" if satisfied else "below_requirement",
}
)
return {
"ok": True,
"record_id": record.get("record_id"),
"canon": {
"version": loaded["version"],
"canon_version": loaded["canon_version"],
"source": loaded["source"],
},
"requirements": met,
"provisions": [
{
"capability": item["capability"],
"maturity": item.get("maturity"),
"uses_provisions": item.get("uses_provisions") or [],
}
for item in record.get("provisions") or []
],
}
def review_path(path: str | Path, catalog_path: Path | None = None) -> dict[str, Any]:
record_path = Path(path)
if not record_path.is_file():
raise CapabilityReviewError(
"capability_record_missing",
f"capability record not found: {record_path}",
)
text = record_path.read_text()
record = yaml.safe_load(text) if record_path.suffix in {".yaml", ".yml"} else __import__("json").loads(text)
return review_record(record, load_catalog(catalog_path))

View file

@ -24,6 +24,7 @@ from .service import (
profile_inspect, profile_inspect,
profile_validate, profile_validate,
read_view, read_view,
review_capability_record,
review_kit, review_kit,
validate_canon, validate_canon,
write_validation_report, write_validation_report,
@ -105,6 +106,13 @@ def build_parser() -> argparse.ArgumentParser:
profile_graph_cmd.add_argument("--format", choices=["json", "mermaid"], default="json") profile_graph_cmd.add_argument("--format", choices=["json", "mermaid"], default="json")
profile_graph_cmd.set_defaults(handler=_profile_graph) profile_graph_cmd.set_defaults(handler=_profile_graph)
capability_review = sub.add_parser(
"capability-review",
help="Review a consumer capability record against the live catalog",
)
capability_review.add_argument("record")
capability_review.set_defaults(handler=_capability_review)
api = sub.add_parser("api", help="Run the read-only local API") api = sub.add_parser("api", help="Run the read-only local API")
api.add_argument("--host", default="127.0.0.1") api.add_argument("--host", default="127.0.0.1")
api.add_argument("--port", type=int, default=8765) api.add_argument("--port", type=int, default=8765)
@ -195,6 +203,10 @@ def _graph(args: argparse.Namespace) -> dict[str, Any]:
return artifact_graph(_root(args), output_format=args.format) return artifact_graph(_root(args), output_format=args.format)
def _capability_review(args: argparse.Namespace) -> dict[str, Any]:
return review_capability_record(args.record, _root(args))
def _profile_inspect(args: argparse.Namespace) -> dict[str, Any]: def _profile_inspect(args: argparse.Namespace) -> dict[str, Any]:
return profile_inspect(args.profile, _root(args)) return profile_inspect(args.profile, _root(args))

View file

@ -328,6 +328,18 @@ def profile_graph(
) from exc ) from exc
def review_capability_record(
path: str | Path,
root: Path | str | None = None,
) -> dict[str, Any]:
from .capability import CapabilityReviewError, review_path
try:
return review_path(path)
except CapabilityReviewError as exc:
raise CanonServiceError(exc.code, exc.message) from exc
def generate_indexes(root: Path | str | None = None) -> dict[str, Any]: def generate_indexes(root: Path | str | None = None) -> dict[str, Any]:
return generation.generate_indexes(load_context(root)) return generation.generate_indexes(load_context(root))

View file

@ -51,6 +51,9 @@ REQUIRED_SCHEMAS = (
"agent-brief.schema.yaml", "agent-brief.schema.yaml",
"workplan.schema.yaml", "workplan.schema.yaml",
"alignment-review.schema.yaml", "alignment-review.schema.yaml",
"capability.schema.yaml",
"capability-record.schema.yaml",
"attribute-value-type.schema.yaml",
) )
RETRIEVAL_BRIEF_KINDS = { RETRIEVAL_BRIEF_KINDS = {
@ -353,6 +356,7 @@ def structural_checks(context: Any) -> dict[str, list[dict[str, Any]]]:
_check_required_top_level_files(context.repo_root, errors) _check_required_top_level_files(context.repo_root, errors)
_check_required_infospace_dirs(context.infospace_root, errors) _check_required_infospace_dirs(context.infospace_root, errors)
_check_required_schemas(context.infospace_root, errors) _check_required_schemas(context.infospace_root, errors)
_check_capability_catalog(errors)
_check_canon_paths(context.repo_root, context.infospace_root, errors) _check_canon_paths(context.repo_root, context.infospace_root, errors)
_check_artifact_index(context.repo_root, context.infospace_root, errors) _check_artifact_index(context.repo_root, context.infospace_root, errors)
_check_agent_assets(context.infospace_root, context.infospace.artifacts, errors) _check_agent_assets(context.infospace_root, context.infospace.artifacts, errors)
@ -415,6 +419,20 @@ def _check_required_infospace_dirs(
) )
def _check_capability_catalog(errors: list[dict[str, Any]]) -> None:
from .capability import check_catalog_contract
try:
errors.extend(check_catalog_contract())
except Exception as exc: # pragma: no cover - catalog missing is structural
errors.append(
{
"code": "capability_catalog_unreadable",
"message": str(exc),
}
)
def _check_required_schemas( def _check_required_schemas(
infospace_root: Path, infospace_root: Path,
errors: list[dict[str, Any]], errors: list[dict[str, Any]],

View file

@ -11,7 +11,7 @@ def test_cli_inspect_emits_json(capsys) -> None:
assert exit_code == 0 assert exit_code == 0
payload = json.loads(capsys.readouterr().out) payload = json.loads(capsys.readouterr().out)
assert payload["ok"] is True assert payload["ok"] is True
assert payload["infospace"]["artifact_count"] == 66 assert payload["infospace"]["artifact_count"] == 68
def test_cli_missing_profile_uses_structured_error(capsys) -> None: def test_cli_missing_profile_uses_structured_error(capsys) -> None:

View file

@ -9,10 +9,13 @@ from info_tech_canon.service import (
list_standards, list_standards,
profile_graph, profile_graph,
profile_validate, profile_validate,
review_capability_record,
review_kit, review_kit,
validate_canon, validate_canon,
) )
from info_tech_canon.service import DEFAULT_INFOSPACE_ROOT from info_tech_canon.service import DEFAULT_INFOSPACE_ROOT
from pathlib import Path
import json
import shutil import shutil
@ -21,7 +24,7 @@ def test_inspect_canon_counts_artifact_kinds() -> None:
assert payload["ok"] is True assert payload["ok"] is True
assert payload["infospace"]["slug"] == "canon" assert payload["infospace"]["slug"] == "canon"
assert payload["infospace"]["artifact_count"] == 66 assert payload["infospace"]["artifact_count"] == 68
assert payload["infospace"]["kinds"] == { assert payload["infospace"]["kinds"] == {
"access-descriptor-set": 1, "access-descriptor-set": 1,
"alignment-review-kit": 1, "alignment-review-kit": 1,
@ -37,7 +40,7 @@ def test_inspect_canon_counts_artifact_kinds() -> None:
"caring-mapping": 1, "caring-mapping": 1,
"comparison-frame": 1, "comparison-frame": 1,
"comparison-report": 1, "comparison-report": 1,
"concept-catalog": 2, "concept-catalog": 3,
"conformance-pack": 1, "conformance-pack": 1,
"consumer-workplan-brief": 3, "consumer-workplan-brief": 3,
"consumer-workplan-template": 1, "consumer-workplan-template": 1,
@ -47,7 +50,7 @@ def test_inspect_canon_counts_artifact_kinds() -> None:
"extension-candidate-set": 1, "extension-candidate-set": 1,
"interface-card-expectation": 1, "interface-card-expectation": 1,
"kernel": 2, "kernel": 2,
"mapping": 1, "mapping": 2,
"mapping-expectation": 1, "mapping-expectation": 1,
"model": 12, "model": 12,
"model-extension": 1, "model-extension": 1,
@ -93,17 +96,58 @@ def test_validate_canon_passes_scaffold() -> None:
assert payload["ok"] is True assert payload["ok"] is True
assert payload["errors"] == [] assert payload["errors"] == []
assert "warnings" in payload assert "warnings" in payload
assert payload["details"]["artifact_count"] == 66 assert payload["details"]["artifact_count"] == 68
def test_graph_exports_relationship_summary() -> None: def test_graph_exports_relationship_summary() -> None:
payload = artifact_graph() payload = artifact_graph()
assert payload["ok"] is True assert payload["ok"] is True
assert payload["graph"]["node_count"] == 66 assert payload["graph"]["node_count"] == 68
assert payload["graph"]["edge_count"] > 15 assert payload["graph"]["edge_count"] > 15
def test_capability_review_joins_a_minimal_record(tmp_path) -> None:
record = {
"record_id": "test",
"requires": [
{
"capability": "data.backup",
"profile": "database",
"minimum_maturity": "D5",
}
],
"provisions": [
{
"provider": "test.backup",
"capability": "data.backup",
"profile": "database",
"maturity": "D4",
"uses_provisions": [
{
"capability": "data.object",
"provider": "test.object",
"relation": "depends_on",
}
],
"consumes": [
{
"class": "H",
"quantity": {"value": None, "unit": "hour"},
"basis": "unknown",
"gap": "not recorded (owner: test)",
}
],
}
],
}
path = tmp_path / "case.json"
path.write_text(json.dumps(record))
payload = review_capability_record(path)
assert payload["ok"] is True
assert payload["requirements"][0]["status"] == "below_requirement"
def test_small_saas_profile_validates() -> None: def test_small_saas_profile_validates() -> None:
payload = profile_validate("small-saas") payload = profile_validate("small-saas")

View file

@ -4,17 +4,17 @@ type: workplan
title: "Attribute Value Type catalog (Data Model extension)" title: "Attribute Value Type catalog (Data Model extension)"
domain: infotech domain: infotech
repo: info-tech-canon repo: info-tech-canon
status: proposed status: finished
priority: high priority: high
created: "2026-07-30" created: "2026-07-30"
updated: "2026-07-30" updated: "2026-08-15"
depends_on_workplans: depends_on_workplans:
- ITC-WP-0006 - ITC-WP-0006
owner: codex owner: grok
spec_refs: spec_refs:
- demand/AttributeValueTypes.md - demand/AttributeValueTypes.md
- seeds/InfoTechCanonDataModel_RC1_seed.md - infospace/models/data/InfoTechCanonDataModel.md
- ../citation-evidence/wiki/AttributeValueTypes-proposal.md - infospace/models/data/attribute-value-types.yaml
state_hub_workstream_id: "7da01c6a-8c16-4d65-899a-85464fbb2227" state_hub_workstream_id: "7da01c6a-8c16-4d65-899a-85464fbb2227"
--- ---
@ -24,15 +24,15 @@ state_hub_workstream_id: "7da01c6a-8c16-4d65-899a-85464fbb2227"
Turn the demand in `demand/AttributeValueTypes.md` into a **canonical, Turn the demand in `demand/AttributeValueTypes.md` into a **canonical,
machine-readable catalog of attribute value types** under the Data Model machine-readable catalog of attribute value types** under the Data Model
(or a tightly coupled standard), so consumers such as citation-evidence share so consumers such as citation-evidence share stable type ids, encodings,
stable type ids, encodings, and CodeList cardinality rules. and CodeList cardinality rules.
## Intent ## Intent
ITC-DATA already owns Attribute / Field / DataType / Representation / CodeList ITC-DATA already owns Attribute / Field / DataType / Representation / CodeList
but does not close the set of practical value types for structured capture. but did not close the set of practical value types for structured capture.
This workplan fills that gap without inventing a parallel “form field” This workplan fills that gap without inventing a parallel form-field universe.
universe. Owner is ITC-DATA, not a sibling standard.
## Tasks ## Tasks
@ -40,58 +40,61 @@ universe.
```task ```task
id: ITC-WP-0013-T01 id: ITC-WP-0013-T01
status: todo status: done
priority: high priority: high
state_hub_task_id: "d865f73c-7ff0-4b9c-9905-678ce3da964a" state_hub_task_id: "d865f73c-7ff0-4b9c-9905-678ce3da964a"
``` ```
Process `demand/AttributeValueTypes.md` under Purpose/Demand (ITC-WP-0006) Process `demand/AttributeValueTypes.md`. Decision: extend ITC-DATA (new
if still required for kernel-adjacent standards; record decision to extend `AttributeValueType` as a closed Representation profile), not a sibling
ITC-DATA vs new sibling standard. standard. Matches the consumer's accepted default of 2026-07-30.
**Done 2026-08-15.**
### T02 — Draft catalog standard ### T02 — Draft catalog standard
```task ```task
id: ITC-WP-0013-T02 id: ITC-WP-0013-T02
status: todo status: done
priority: high priority: high
depends_on: [T01] depends_on: [T01]
state_hub_task_id: "1531e749-02ca-4824-bb57-823b198984b7" state_hub_task_id: "1531e749-02ca-4824-bb57-823b198984b7"
``` ```
Draft seed standard section or document: §11.15a in the Data Model. Closed list, wire encodings, mapping to
Representation / CodeList / Constraint, out-of-scope (email, widgets).
- closed AttributeValueType list (MVP from consumer proposal) **Done 2026-08-15.**
- wire encoding rules
- mapping to Representation / CodeList / Constraint
- out-of-scope rules (email-as-type, etc.)
### T03 — Machine-readable catalog ### T03 — Machine-readable catalog
```task ```task
id: ITC-WP-0013-T03 id: ITC-WP-0013-T03
status: todo status: done
priority: high priority: high
depends_on: [T02] depends_on: [T02]
state_hub_task_id: "8601508d-0cce-425b-8b52-14e1f29f3f16" state_hub_task_id: "8601508d-0cce-425b-8b52-14e1f29f3f16"
``` ```
Add YAML (+ schema) under `infospace/` and register in indexes/validation. `infospace/models/data/attribute-value-types.yaml` plus
`infospace/schemas/attribute-value-type.schema.yaml`, registered.
**Done 2026-08-15.**
### T04 — Consumer alignment note ### T04 — Consumer alignment note
```task ```task
id: ITC-WP-0013-T04 id: ITC-WP-0013-T04
status: todo status: done
priority: medium priority: medium
depends_on: [T03] depends_on: [T03]
state_hub_task_id: "78e0d31f-afcd-459b-9d01-e6fbc801bb50" state_hub_task_id: "78e0d31f-afcd-459b-9d01-e6fbc801bb50"
``` ```
Publish short alignment note for citation-evidence (and future form UIs); `infospace/models/data/attribute-value-types-alignment.md` for
link from Data Model kernel map. citation-evidence. Linked from §11.15a.
--- **Done 2026-08-15.**
## Out of scope ## Out of scope

View file

@ -5,7 +5,7 @@ title: "Capability Model consolidation (post-ITCC assimilation)"
domain: infotech domain: infotech
topic_slug: canon topic_slug: canon
repo: info-tech-canon repo: info-tech-canon
status: active status: finished
priority: medium priority: medium
created: "2026-08-14" created: "2026-08-14"
updated: "2026-08-15" updated: "2026-08-15"
@ -62,7 +62,7 @@ and `governance` (2); no capability id changed. Decision record in
```task ```task
id: ITC-WP-0014-T02 id: ITC-WP-0014-T02
status: todo status: done
priority: high priority: high
depends_on: [T01] depends_on: [T01]
state_hub_task_id: "1ed8d07a-34ee-4ad4-8e4a-03a513c14836" state_hub_task_id: "1ed8d07a-34ee-4ad4-8e4a-03a513c14836"
@ -77,11 +77,16 @@ rows require EvidenceBasis (CAP-R10); provisions may declare
in the model prose until a companion requirement/provision schema is in the model prose until a companion requirement/provision schema is
justified. §10.3 is already met by the resource-control join. justified. §10.3 is already met by the resource-control join.
**Done 2026-08-15 (canon 0.6.0):** `capability.schema.yaml` validates the
catalog; `capability-record.schema.yaml` is the companion record shape.
`make validate` checks the catalog contract (no typical_resource_classes;
classes carry native_unit / supply / capacity_behaviour).
### T03 — Formal mapping artifacts for each anchor ### T03 — Formal mapping artifacts for each anchor
```task ```task
id: ITC-WP-0014-T03 id: ITC-WP-0014-T03
status: todo status: done
priority: medium priority: medium
depends_on: [T02] depends_on: [T02]
state_hub_task_id: "e0ad8ec8-fdf2-4238-888c-af052fcddd40" state_hub_task_id: "e0ad8ec8-fdf2-4238-888c-af052fcddd40"
@ -90,6 +95,9 @@ state_hub_task_id: "e0ad8ec8-fdf2-4238-888c-af052fcddd40"
Turn `assimilation/it-capability-canon/mappings.yaml` into per-pair mapping Turn `assimilation/it-capability-canon/mappings.yaml` into per-pair mapping
artifacts under `infospace/mappings/` conforming to `mapping.schema.yaml`. artifacts under `infospace/mappings/` conforming to `mapping.schema.yaml`.
**Done 2026-08-15:** `infospace/mappings/capability-anchors.yaml` holds one
entry per source/target pair, registered as `mapping/capability-anchors`.
### T04 — Small-SaaS capability requirement set ### T04 — Small-SaaS capability requirement set
```task ```task
@ -109,7 +117,7 @@ validates against the live catalog (T11).
```task ```task
id: ITC-WP-0014-T05 id: ITC-WP-0014-T05
status: todo status: done
priority: medium priority: medium
depends_on: [T01] depends_on: [T01]
state_hub_task_id: "339d2006-d1c8-4572-b559-e6ceb7b06c45" state_hub_task_id: "339d2006-d1c8-4572-b559-e6ceb7b06c45"
@ -119,11 +127,14 @@ Revise `InfoTechCanonLandscapeModel` §11.4 (the deferred strategy/capability no
to reference ITC-CAP, and add the capability model to to reference ITC-CAP, and add the capability model to
`InfoTechCanonKernelMap`. `InfoTechCanonKernelMap`.
**Done 2026-08-15:** §11.4 now points at ITC-CAP; Kernel Map §4.14 owns
abilities.
### T06 — Requirement/provision validation in the service surface ### T06 — Requirement/provision validation in the service surface
```task ```task
id: ITC-WP-0014-T06 id: ITC-WP-0014-T06
status: todo status: done
priority: low priority: low
depends_on: [T02] depends_on: [T02]
state_hub_task_id: "530f86c2-b61b-4b54-b380-8eec92bdced1" state_hub_task_id: "530f86c2-b61b-4b54-b380-8eec92bdced1"
@ -133,11 +144,15 @@ Extend the CLI/JSON/API surface (ITC-WP-0002) to answer "does this environment
satisfy this product's capability requirements?" — the validator sketched in satisfy this product's capability requirements?" — the validator sketched in
source §18. Covers OQ-6. source §18. Covers OQ-6.
**Done 2026-08-15:** `info-tech-canon capability-review PATH` and
`GET /capability-review?path=` join a consumer record to the live catalog
(CAP-R8R11).
### T07 — Promotion review ### T07 — Promotion review
```task ```task
id: ITC-WP-0014-T07 id: ITC-WP-0014-T07
status: todo status: done
priority: medium priority: medium
depends_on: [T01, T02, T03, T11] depends_on: [T01, T02, T03, T11]
state_hub_task_id: "455690e3-c39a-4926-a13b-a179b134b2a4" state_hub_task_id: "455690e3-c39a-4926-a13b-a179b134b2a4"
@ -147,6 +162,9 @@ Promote the model from `proposed` to `draft` or `release-candidate`, bump the
canon version, and write the `CHANGELOG.md` entry. T04 (small-saas illustration) canon version, and write the `CHANGELOG.md` entry. T04 (small-saas illustration)
is no longer a promotion dependency. is no longer a promotion dependency.
**Done 2026-08-15:** ITC-CAP promoted to `draft` in canon 0.6.0. This is
the freeze version. T04 remains an optional illustration.
### T08 — Finding A: move resource-class declaration off the contract ### T08 — Finding A: move resource-class declaration off the contract
```task ```task

View file

@ -182,7 +182,7 @@ workplans:
- id: ITC-WP-0013 - id: ITC-WP-0013
title: Attribute Value Type catalog (Data Model extension) title: Attribute Value Type catalog (Data Model extension)
status: proposed status: finished
priority: high priority: high
path: workplans/ITC-WP-0013-attribute-value-type-catalog.md path: workplans/ITC-WP-0013-attribute-value-type-catalog.md
depends_on: depends_on:
@ -195,7 +195,7 @@ workplans:
- id: ITC-WP-0014 - id: ITC-WP-0014
title: Capability Model consolidation (post-ITCC assimilation) title: Capability Model consolidation (post-ITCC assimilation)
status: active status: finished
priority: medium priority: medium
path: workplans/ITC-WP-0014-capability-model-consolidation.md path: workplans/ITC-WP-0014-capability-model-consolidation.md
depends_on: depends_on: