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
### 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 alignment-template
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 index
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 /alignment-template`
- `GET /validate`
- `GET /capability-review?path=`
- `GET /graph`
- `GET /graph?format=mermaid`
- `GET /views`

View file

@ -1,7 +1,7 @@
repository: info-tech-canon
title: InfoTechCanon
status: service-baseline
version: 0.5.0
version: 0.6.0
description: >
An evolving, markdown-first canon for building interoperable, adaptable,
and extensible information-processing systems.
@ -92,7 +92,7 @@ models:
- id: itc-cap
title: InfoTechCanonCapabilityModel
path: infospace/models/capability/InfoTechCanonCapabilityModel.md
status: proposed
status: draft
version: 0.4.0
catalog: infospace/models/capability/capabilities.yaml
provenance:
@ -181,4 +181,5 @@ next_actions:
- implement ITC-WP-0003 validation and generated views
- implement ITC-WP-0004 small-saas profile proof
- 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
**Status:** inbound demand (un-reviewed)
**Status:** accepted (canon 0.6.0)
**Date:** 2026-07-30
**Source:** citation-evidence Capture UX (consumer)
**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.
- Infospace slug: `canon`
- Artifact count: 66
- Retrieval index items: 66
- Artifact count: 68
- Retrieval index items: 68
- Primary confidence command: `make validate`
- Refresh generated indexes and views with: `make index`
- Refresh agent briefs and interface templates with: `make agent-briefs`

View file

@ -43,7 +43,7 @@
}
],
"infospace": "canon",
"item_count": 66,
"item_count": 68,
"items": [
{
"canonical_path": "assimilation/it-capability-canon/ASSIMILATION.md",
@ -267,6 +267,20 @@
"title": "InfoTechCanon Capability Catalog",
"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",
"id": "catalog/evidence-basis",
@ -1024,6 +1038,10 @@
"target": "model/observability",
"type": "maps"
},
{
"target": "model/capability",
"type": "maps"
},
{
"target": "standard/tagging",
"type": "maps"
@ -1038,6 +1056,20 @@
"title": "InfoTechCanon Kernel Map",
"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",
"id": "mapping/purpose-demand-governance-candidates",
@ -1158,6 +1190,10 @@
{
"target": "assimilation/it-capability-canon",
"type": "derived_from"
},
{
"target": "mapping/capability-anchors",
"type": "introduces"
}
],
"source_path": "infospace/assimilation/it-capability-canon/source/ITCapabilityCanonV0.1.md",
@ -1184,6 +1220,10 @@
{
"target": "model/governance",
"type": "uses"
},
{
"target": "catalog/attribute-value-types",
"type": "introduces"
}
],
"source_path": "seeds/InfoTechCanonDataModel_RC1_seed.md",

View file

@ -4,7 +4,7 @@
Schema: `info-tech-canon.retrieval-index.v1`
Infospace: `canon`
Items: **66**
Items: **68**
## Common Distinctions
@ -85,6 +85,16 @@ Items: **66**
- Imports and anchors: none
- 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
- ID: `catalog/evidence-basis`
@ -285,6 +295,16 @@ Items: **66**
- Imports and anchors: none
- 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
- ID: `mapping/purpose-demand-governance-candidates`

View file

@ -1,6 +1,6 @@
schema: info-tech-canon.retrieval-index.v1
infospace: canon
item_count: 66
item_count: 68
items:
- id: assimilation/it-capability-canon
kind: assimilation
@ -144,6 +144,18 @@ items:
imports: []
relationships: []
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
kind: concept-catalog
title: InfoTechCanon Evidence Basis Catalog
@ -630,11 +642,25 @@ items:
target: model/network
- type: maps
target: model/observability
- type: maps
target: model/capability
- type: maps
target: standard/tagging
- type: maps
target: standard/caring
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
kind: mapping
title: Purpose Demand Governance Extension Candidates
@ -721,6 +747,8 @@ items:
target: capability-catalog/itc-cap
- type: derived_from
target: assimilation/it-capability-canon
- type: introduces
target: mapping/capability-anchors
warnings: []
- id: model/data
kind: model
@ -739,6 +767,8 @@ items:
target: kernel/itc-core
- type: uses
target: model/governance
- type: introduces
target: catalog/attribute-value-types
warnings: []
- id: model/devsecops
kind: model

View file

@ -41,6 +41,8 @@ artifacts:
target: model/network
- type: maps
target: model/observability
- type: maps
target: model/capability
- type: maps
target: standard/tagging
- type: maps
@ -135,6 +137,8 @@ artifacts:
target: capability-catalog/itc-cap
- type: derived_from
target: assimilation/it-capability-canon
- type: introduces
target: mapping/capability-anchors
- id: catalog/evidence-basis
path: models/governance/evidence-basis.yaml
kind: concept-catalog
@ -224,6 +228,16 @@ artifacts:
target: kernel/itc-core
- type: uses
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
path: models/devsecops/InfoTechCanonDevSecOpsModel.md
kind: model
@ -609,6 +623,14 @@ artifacts:
target: model/governance
- type: uses
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
path: examples/consumer-purpose-portfolio.yaml
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
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`

View file

@ -1,5 +1,5 @@
root: infospace
file_count: 176
file_count: 183
files:
- path: README.md
directory: .
@ -22,6 +22,9 @@ files:
- path: agent/briefs/benchmark-caring-kubernetes-rbac.md
directory: agent/briefs
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
directory: agent/briefs
name: comparison-repo-scoping-canon-benefit-analysis.md
@ -334,6 +337,9 @@ files:
- path: mappings/README.md
directory: mappings
name: README.md
- path: mappings/capability-anchors.yaml
directory: mappings
name: capability-anchors.yaml
- path: mappings/purpose-demand-governance-candidates.yaml
directory: mappings
name: purpose-demand-governance-candidates.yaml
@ -349,6 +355,12 @@ files:
- path: models/data/InfoTechCanonDataModel.md
directory: models/data
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
directory: models/devsecops
name: InfoTechCanonDevSecOpsModel.md
@ -451,6 +463,15 @@ files:
- path: schemas/assimilation.schema.yaml
directory: schemas
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
directory: schemas
name: concept.schema.yaml

View file

@ -1,4 +1,4 @@
concept_count: 108
concept_count: 110
concepts:
- concept: "Assimilation \u2014 IT Capability Canon (ITCC) v0.1"
owner: assimilation/it-capability-canon
@ -28,6 +28,10 @@ concepts:
owner: capability-catalog/itc-cap
path: models/capability/capabilities.yaml
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
owner: catalog/evidence-basis
path: models/governance/evidence-basis.yaml
@ -108,6 +112,10 @@ concepts:
owner: kernel/itc-kernel-map
path: kernel/InfoTechCanonKernelMap.md
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
owner: mapping/purpose-demand-governance-candidates
path: mappings/purpose-demand-governance-candidates.yaml

View file

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

View file

@ -48,6 +48,9 @@ schemas:
interface-card: schemas/interface-card.schema.yaml
agent-brief: schemas/agent-brief.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: []
viability:
redundancy_ratio:

View file

@ -49,6 +49,7 @@ InfoTechCanonDataModel
InfoTechCanonDevSecOpsModel
InfoTechCanonNetworkModel
InfoTechCanonObservabilityModel
InfoTechCanonCapabilityModel
```
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.
Network = addressing, topology, routing, policy, reachability, flow, exposure, and state.
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 |
| 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

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
repository_context: info-tech-canon
recommended_path: models/capability/InfoTechCanonCapabilityModel.md
status: proposed
status: draft
version: 0.4.0
source_version: "0.1"
source_body: Information Technology Capability Canon (ITCC)
@ -54,7 +54,7 @@ updated_at: 2026-08-15
# InfoTechCanon Capability Model
**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
**Document Type:** InfoTechCanon Domain Model
**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
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
0.2.1**: the Security & Governance navigation domain was split into `security`

View file

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

View file

@ -26,6 +26,7 @@ This standard provides a canonical vocabulary for:
- fields,
- schemas,
- data elements,
- attribute value types,
- code lists,
- data stores as references,
- 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
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,
- 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
- id: alignment-review
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": {
"artifact_count": 66,
"relationship_count": 288
"artifact_count": 68,
"relationship_count": 291
},
"errors": [],
"metrics": {
"coherence_components": 1.0,
"consistency_cycles": 0.0,
"coverage_ratio": 1.0,
"granularity_entropy": 4.459014704982469,
"granularity_entropy": 4.478787416971244,
"redundancy_ratio": 0.0
},
"ok": true,

View file

@ -2,7 +2,7 @@
# By Concept
Concept count: **108**
Concept count: **110**
| 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 Native Concept Map | `benchmark/caring/kubernetes-rbac/native-concepts` | `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` |
| 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` |
@ -33,6 +34,7 @@ Concept count: **108**
| Canon-Side Consumer Purpose Portfolio | `example/consumer-purpose-portfolio` | `artifact_title` |
| InfoTechCanon Core | `kernel/itc-core` | `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` |
| InfoTechCanon Access Control Model | `model/access-control` | `artifact_title` |
| InfoTechCanon Capability Model | `model/capability` | `artifact_title` |

View file

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

View file

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

View file

@ -2,71 +2,73 @@
# 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` |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `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/access-descriptors` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `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/native-concepts` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | |
| `capability-catalog/itc-cap` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `catalog/evidence-basis` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/canon-benefit-analysis` | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `maps` | `maps` | | | | | `maps` | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | `maps` |
| `comparison/repo-scoping/consumer-workplan-brief` | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/extension-candidates` | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `proposes` | `proposes` | | | | | `proposes` | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/frame` | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/report` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | | `compares` | | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | |
| `concept-catalog/purpose-demand` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` |
| `conformance/railiance-fabric/consumer-workplan-brief` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric/entity-edge-capture-criteria` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric/mapping-expectations` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | `maps` | `maps` | `maps` | | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric/visualization-examples` | | | | | | | | | | | | | | | `part_of` | | `illustrates` | `illustrates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `evaluation/user-engine` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | `evaluates` | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `evaluation/user-engine/consumer-workplan-brief` | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `evaluation/user-engine/interface-card-expectations` | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `evaluation/user-engine/questions` | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `evaluation/user-engine/small-saas-alignment` | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | `uses` | | | | `uses` | | | | | `uses` | | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | | |
| `example/consumer-purpose-portfolio` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `illustrates` | | | `illustrates` | | `uses` | | | | | | | | | | | | | | | | | | | | | | |
| `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `kernel/itc-kernel-map` | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | `maps` | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | `maps` | | `maps` |
| `mapping/purpose-demand-governance-candidates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/access-control` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/capability` | `derived_from` | | | | | | `introduces` | `uses` | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | `uses` | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/data` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/devsecops` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/governance` | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/information-space` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/landscape` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/network` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/observability` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/organization` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/purpose-demand-extension` | | | | | | | | | | | | | | `introduces` | | | | | | | | | | | | `conforms_to` | | | | | | | `extends` | `uses` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/security` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/task` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `pattern/intent-scope-purposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `implements` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `practice/intake-and-assimilation` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `profile/small-saas` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | `requires` | | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | | | | | | | | | | | | | | | | | | | | | | | `requires` | | `requires` |
| `review-kit/alignment` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `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/schema` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `review-kit/alignment/scorecard` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `review-kit/alignment/workflow` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `review-kit/alignment/workplan-template` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/control/namespace-per-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | | | | `evidenced_by` | | | | | | | | | | `uses` | | |
| `small-saas/dataset/subscription-ledger` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | `instantiates` | | | | | | | | | | | | `governed_by` | `owned_by` | | | | `partitioned_for` | `partitioned_for` | | | | |
| `small-saas/deployment/production` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `uses` | | | | | | | | `instantiates` | | | | | | | `implements` | | | | | | `deploys` | | | | `separates` | `separates` | | | | |
| `small-saas/evidence/access-review-2026-05` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/incident/cross-tenant-access-attempt` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | `constrained_by` | | | `evidenced_by` | | | | | | | | | | | | |
| `small-saas/policy/tenant-isolation` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | `instantiates` | | | | | | | `requires` | | | `evidenced_by` | | | | | | | | | | | | |
| `small-saas/service/billing-portal` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | `part_of` | | `owned_by` | | | | | | |
| `small-saas/system/billing-system` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | `serves` | `serves` | | | | |
| `small-saas/task/onboard-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `instantiates` | | | | | | | | | | | | `governed_by` | | | | `owned_by` | `changes` | | | | | |
| `small-saas/team/platform` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/tenant/acme` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | `represented_by` | | | |
| `small-saas/tenant/globex` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | | | | |
| `small-saas/user/ada-admin` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | `access_evidenced_by` | | `has_access_under` | | | | `member_of` | | | | | | |
| `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` | | | | | | | | | | | | | | | | | | | | | | | | | |
| 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` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `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/caring-mapping` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | |
| `benchmark/caring/kubernetes-rbac/findings` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | | | | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | |
| `benchmark/caring/kubernetes-rbac/native-concepts` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | |
| `capability-catalog/itc-cap` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `catalog/attribute-value-types` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `catalog/evidence-basis` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/canon-benefit-analysis` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `maps` | `maps` | | | | | `maps` | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | `maps` |
| `comparison/repo-scoping/consumer-workplan-brief` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/extension-candidates` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `proposes` | `proposes` | | | | | `proposes` | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/frame` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `comparison/repo-scoping/report` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | | `compares` | | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | |
| `concept-catalog/purpose-demand` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` |
| `conformance/railiance-fabric/consumer-workplan-brief` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric/entity-edge-capture-criteria` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric/mapping-expectations` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | `maps` | `maps` | `maps` | | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `conformance/railiance-fabric/visualization-examples` | | | | | | | | | | | | | | | | `part_of` | | `illustrates` | `illustrates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `evaluation/user-engine` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | `evaluates` | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `evaluation/user-engine/consumer-workplan-brief` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `evaluation/user-engine/interface-card-expectations` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `evaluation/user-engine/questions` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `evaluation/user-engine/small-saas-alignment` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | `uses` | | | | `uses` | | | | | `uses` | | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | | |
| `example/consumer-purpose-portfolio` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `illustrates` | | | `illustrates` | | `uses` | | | | | | | | | | | | | | | | | | | | | | |
| `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `kernel/itc-kernel-map` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | `maps` | | `maps` |
| `mapping/capability-anchors` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `mapping/purpose-demand-governance-candidates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/access-control` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/capability` | `derived_from` | | | | | | `introduces` | | `uses` | | | | | | | | | | | | | | | | | | `conforms_to` | | `introduces` | | | | | | `uses` | | `uses` | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/data` | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/devsecops` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/governance` | | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/information-space` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/landscape` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/network` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/observability` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/organization` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/purpose-demand-extension` | | | | | | | | | | | | | | | `introduces` | | | | | | | | | | | | `conforms_to` | | | | | | | | `extends` | `uses` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/security` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `model/task` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `pattern/intent-scope-purposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `implements` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
| `practice/intake-and-assimilation` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| `profile/small-saas` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `requires` | | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | | | | | | | | | | | | | | | | | | | | | | | `requires` | | `requires` |
| `review-kit/alignment` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
| `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/schema` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `review-kit/alignment/scorecard` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `review-kit/alignment/workflow` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `review-kit/alignment/workplan-template` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/control/namespace-per-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | | | | `evidenced_by` | | | | | | | | | | `uses` | | |
| `small-saas/dataset/subscription-ledger` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | `instantiates` | | | | | | | | | | | | `governed_by` | `owned_by` | | | | `partitioned_for` | `partitioned_for` | | | | |
| `small-saas/deployment/production` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `uses` | | | | | | | | `instantiates` | | | | | | | `implements` | | | | | | `deploys` | | | | `separates` | `separates` | | | | |
| `small-saas/evidence/access-review-2026-05` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/incident/cross-tenant-access-attempt` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | `constrained_by` | | | `evidenced_by` | | | | | | | | | | | | |
| `small-saas/policy/tenant-isolation` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | `instantiates` | | | | | | | `requires` | | | `evidenced_by` | | | | | | | | | | | | |
| `small-saas/service/billing-portal` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | `part_of` | | `owned_by` | | | | | | |
| `small-saas/system/billing-system` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | `serves` | `serves` | | | | |
| `small-saas/task/onboard-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `instantiates` | | | | | | | | | | | | `governed_by` | | | | `owned_by` | `changes` | | | | | |
| `small-saas/team/platform` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | |
| `small-saas/tenant/acme` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | `represented_by` | | | |
| `small-saas/tenant/globex` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | | | | |
| `small-saas/user/ada-admin` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | `access_evidenced_by` | | `has_access_under` | | | | `member_of` | | | | | | |
| `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
- Infospace: `canon`
- Artifacts: 66
- Artifacts: 68
## Artifact Kinds
@ -21,7 +21,7 @@
- `caring-mapping`: 1
- `comparison-frame`: 1
- `comparison-report`: 1
- `concept-catalog`: 2
- `concept-catalog`: 3
- `conformance-pack`: 1
- `consumer-workplan-brief`: 3
- `consumer-workplan-template`: 1
@ -31,7 +31,7 @@
- `extension-candidate-set`: 1
- `interface-card-expectation`: 1
- `kernel`: 2
- `mapping`: 1
- `mapping`: 2
- `mapping-expectation`: 1
- `model`: 12
- `model-extension`: 1
@ -63,9 +63,9 @@
- `implements`: 2
- `imports`: 14
- `instantiates`: 13
- `introduces`: 3
- `introduces`: 5
- `isolated_by`: 2
- `maps`: 36
- `maps`: 37
- `member_of`: 1
- `owned_by`: 3
- `part_of`: 22

View file

@ -20,6 +20,7 @@ from .service import (
profile_inspect,
profile_validate,
read_view,
review_capability_record,
review_kit,
validate_canon,
)
@ -108,6 +109,18 @@ def _route(
profile = path.removeprefix("/profiles/").removesuffix("/validate").strip("/")
payload = profile_validate(profile, root)
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"):
profile = path.removeprefix("/profiles/").removesuffix("/graph").strip("/")
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_validate,
read_view,
review_capability_record,
review_kit,
validate_canon,
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.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.add_argument("--host", default="127.0.0.1")
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)
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]:
return profile_inspect(args.profile, _root(args))

View file

@ -328,6 +328,18 @@ def profile_graph(
) 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]:
return generation.generate_indexes(load_context(root))

View file

@ -51,6 +51,9 @@ REQUIRED_SCHEMAS = (
"agent-brief.schema.yaml",
"workplan.schema.yaml",
"alignment-review.schema.yaml",
"capability.schema.yaml",
"capability-record.schema.yaml",
"attribute-value-type.schema.yaml",
)
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_infospace_dirs(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_artifact_index(context.repo_root, context.infospace_root, 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(
infospace_root: Path,
errors: list[dict[str, Any]],

View file

@ -11,7 +11,7 @@ def test_cli_inspect_emits_json(capsys) -> None:
assert exit_code == 0
payload = json.loads(capsys.readouterr().out)
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:

View file

@ -9,10 +9,13 @@ from info_tech_canon.service import (
list_standards,
profile_graph,
profile_validate,
review_capability_record,
review_kit,
validate_canon,
)
from info_tech_canon.service import DEFAULT_INFOSPACE_ROOT
from pathlib import Path
import json
import shutil
@ -21,7 +24,7 @@ def test_inspect_canon_counts_artifact_kinds() -> None:
assert payload["ok"] is True
assert payload["infospace"]["slug"] == "canon"
assert payload["infospace"]["artifact_count"] == 66
assert payload["infospace"]["artifact_count"] == 68
assert payload["infospace"]["kinds"] == {
"access-descriptor-set": 1,
"alignment-review-kit": 1,
@ -37,7 +40,7 @@ def test_inspect_canon_counts_artifact_kinds() -> None:
"caring-mapping": 1,
"comparison-frame": 1,
"comparison-report": 1,
"concept-catalog": 2,
"concept-catalog": 3,
"conformance-pack": 1,
"consumer-workplan-brief": 3,
"consumer-workplan-template": 1,
@ -47,7 +50,7 @@ def test_inspect_canon_counts_artifact_kinds() -> None:
"extension-candidate-set": 1,
"interface-card-expectation": 1,
"kernel": 2,
"mapping": 1,
"mapping": 2,
"mapping-expectation": 1,
"model": 12,
"model-extension": 1,
@ -93,17 +96,58 @@ def test_validate_canon_passes_scaffold() -> None:
assert payload["ok"] is True
assert payload["errors"] == []
assert "warnings" in payload
assert payload["details"]["artifact_count"] == 66
assert payload["details"]["artifact_count"] == 68
def test_graph_exports_relationship_summary() -> None:
payload = artifact_graph()
assert payload["ok"] is True
assert payload["graph"]["node_count"] == 66
assert payload["graph"]["node_count"] == 68
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:
payload = profile_validate("small-saas")

View file

@ -4,17 +4,17 @@ type: workplan
title: "Attribute Value Type catalog (Data Model extension)"
domain: infotech
repo: info-tech-canon
status: proposed
status: finished
priority: high
created: "2026-07-30"
updated: "2026-07-30"
updated: "2026-08-15"
depends_on_workplans:
- ITC-WP-0006
owner: codex
owner: grok
spec_refs:
- demand/AttributeValueTypes.md
- seeds/InfoTechCanonDataModel_RC1_seed.md
- ../citation-evidence/wiki/AttributeValueTypes-proposal.md
- infospace/models/data/InfoTechCanonDataModel.md
- infospace/models/data/attribute-value-types.yaml
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,
machine-readable catalog of attribute value types** under the Data Model
(or a tightly coupled standard), so consumers such as citation-evidence share
stable type ids, encodings, and CodeList cardinality rules.
so consumers such as citation-evidence share stable type ids, encodings,
and CodeList cardinality rules.
## Intent
ITC-DATA already owns Attribute / Field / DataType / Representation / CodeList
but does not close the set of practical value types for structured capture.
This workplan fills that gap without inventing a parallel “form field”
universe.
but did not close the set of practical value types for structured capture.
This workplan fills that gap without inventing a parallel form-field universe.
Owner is ITC-DATA, not a sibling standard.
## Tasks
@ -40,58 +40,61 @@ universe.
```task
id: ITC-WP-0013-T01
status: todo
status: done
priority: high
state_hub_task_id: "d865f73c-7ff0-4b9c-9905-678ce3da964a"
```
Process `demand/AttributeValueTypes.md` under Purpose/Demand (ITC-WP-0006)
if still required for kernel-adjacent standards; record decision to extend
ITC-DATA vs new sibling standard.
Process `demand/AttributeValueTypes.md`. Decision: extend ITC-DATA (new
`AttributeValueType` as a closed Representation profile), not a sibling
standard. Matches the consumer's accepted default of 2026-07-30.
**Done 2026-08-15.**
### T02 — Draft catalog standard
```task
id: ITC-WP-0013-T02
status: todo
status: done
priority: high
depends_on: [T01]
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)
- wire encoding rules
- mapping to Representation / CodeList / Constraint
- out-of-scope rules (email-as-type, etc.)
**Done 2026-08-15.**
### T03 — Machine-readable catalog
```task
id: ITC-WP-0013-T03
status: todo
status: done
priority: high
depends_on: [T02]
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
```task
id: ITC-WP-0013-T04
status: todo
status: done
priority: medium
depends_on: [T03]
state_hub_task_id: "78e0d31f-afcd-459b-9d01-e6fbc801bb50"
```
Publish short alignment note for citation-evidence (and future form UIs);
link from Data Model kernel map.
`infospace/models/data/attribute-value-types-alignment.md` for
citation-evidence. Linked from §11.15a.
---
**Done 2026-08-15.**
## Out of scope

View file

@ -5,7 +5,7 @@ title: "Capability Model consolidation (post-ITCC assimilation)"
domain: infotech
topic_slug: canon
repo: info-tech-canon
status: active
status: finished
priority: medium
created: "2026-08-14"
updated: "2026-08-15"
@ -62,7 +62,7 @@ and `governance` (2); no capability id changed. Decision record in
```task
id: ITC-WP-0014-T02
status: todo
status: done
priority: high
depends_on: [T01]
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
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
```task
id: ITC-WP-0014-T03
status: todo
status: done
priority: medium
depends_on: [T02]
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
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
```task
@ -109,7 +117,7 @@ validates against the live catalog (T11).
```task
id: ITC-WP-0014-T05
status: todo
status: done
priority: medium
depends_on: [T01]
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
`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
```task
id: ITC-WP-0014-T06
status: todo
status: done
priority: low
depends_on: [T02]
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
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
```task
id: ITC-WP-0014-T07
status: todo
status: done
priority: medium
depends_on: [T01, T02, T03, T11]
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)
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
```task

View file

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