feat(ITC-WP-0016): establish PracticePattern language
Assistant: codex Assistant-Model: gpt-5.6-sol Assistant-Session: 01a025c2-407a-7a32-b40a-f37a52f03f62
This commit is contained in:
parent
5e2435aaf9
commit
149d2ced70
27 changed files with 1119 additions and 99 deletions
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
id: agent-brief/practice-pattern-interface-deprecation-strangler
|
||||||
|
artifact_id: practice-pattern/interface-deprecation-strangler
|
||||||
|
source_path: patterns/InterfaceDeprecationStrangler.md
|
||||||
|
source_kind: practice-pattern
|
||||||
|
generated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- GENERATED by info_tech_canon; do not edit by hand. -->
|
||||||
|
|
||||||
|
# Agent Brief: InterfaceDeprecationStrangler
|
||||||
|
|
||||||
|
- Artifact ID: `practice-pattern/interface-deprecation-strangler`
|
||||||
|
- Kind: `practice-pattern`
|
||||||
|
- Canonical path: `patterns/InterfaceDeprecationStrangler.md`
|
||||||
|
- Full source: `patterns/InterfaceDeprecationStrangler.md`
|
||||||
|
- Summary: Reusable canon PracticePattern: InterfaceDeprecationStrangler.
|
||||||
|
|
||||||
|
## Retrieval Hints
|
||||||
|
|
||||||
|
Imports and anchors:
|
||||||
|
- `model/devsecops`
|
||||||
|
- `model/governance`
|
||||||
|
- `model/observability`
|
||||||
|
- `scheme/practice-pattern`
|
||||||
|
|
||||||
|
## Owned Concepts
|
||||||
|
|
||||||
|
- `InterfaceDeprecationStrangler`
|
||||||
|
|
||||||
|
## Related Distinctions
|
||||||
|
|
||||||
|
- **Interface deprecation vs retirement vs removal**: Deprecation guides and observes callers, retirement ends legacy behavior while retaining a metered tombstone, and removal deletes that tombstone only after the evidence gate passes.
|
||||||
32
infospace/agent/briefs/scheme-practice-pattern.md
Normal file
32
infospace/agent/briefs/scheme-practice-pattern.md
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
id: agent-brief/scheme-practice-pattern
|
||||||
|
artifact_id: scheme/practice-pattern
|
||||||
|
source_path: patterns/PracticePatternScheme.md
|
||||||
|
source_kind: practice-pattern-scheme
|
||||||
|
generated: true
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- GENERATED by info_tech_canon; do not edit by hand. -->
|
||||||
|
|
||||||
|
# Agent Brief: PracticePattern Scheme
|
||||||
|
|
||||||
|
- Artifact ID: `scheme/practice-pattern`
|
||||||
|
- Kind: `practice-pattern-scheme`
|
||||||
|
- Canonical path: `patterns/PracticePatternScheme.md`
|
||||||
|
- Full source: `patterns/PracticePatternScheme.md`
|
||||||
|
- Summary: Contract for canon PracticePattern artifacts: PracticePattern Scheme.
|
||||||
|
|
||||||
|
## Retrieval Hints
|
||||||
|
|
||||||
|
Imports and anchors:
|
||||||
|
- `kernel/itc-core`
|
||||||
|
|
||||||
|
## Owned Concepts
|
||||||
|
|
||||||
|
- `PatternLanguage`
|
||||||
|
- `PracticePattern`
|
||||||
|
- `PracticePattern Scheme`
|
||||||
|
|
||||||
|
## Related Distinctions
|
||||||
|
|
||||||
|
No common distinction is anchored directly on this artifact.
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This brief summarizes the current canon service surface for agents.
|
This brief summarizes the current canon service surface for agents.
|
||||||
|
|
||||||
- Infospace slug: `canon`
|
- Infospace slug: `canon`
|
||||||
- Artifact count: 68
|
- Artifact count: 70
|
||||||
- Retrieval index items: 68
|
- Retrieval index items: 70
|
||||||
- Primary confidence command: `make validate`
|
- Primary confidence command: `make validate`
|
||||||
- Refresh generated indexes and views with: `make index`
|
- Refresh generated indexes and views with: `make index`
|
||||||
- Refresh agent briefs and interface templates with: `make agent-briefs`
|
- Refresh agent briefs and interface templates with: `make agent-briefs`
|
||||||
|
|
@ -29,6 +29,7 @@ This brief summarizes the current canon service surface for agents.
|
||||||
|
|
||||||
## Common Distinctions
|
## Common Distinctions
|
||||||
|
|
||||||
|
- **Interface deprecation vs retirement vs removal**: Deprecation guides and observes callers, retirement ends legacy behavior while retaining a metered tombstone, and removal deletes that tombstone only after the evidence gate passes.
|
||||||
- **Actor vs Subject vs Principal**: Use actor for the acting entity in a context, subject for the entity a policy evaluates, and principal for the authenticated identity bound to access decisions.
|
- **Actor vs Subject vs Principal**: Use actor for the acting entity in a context, subject for the entity a policy evaluates, and principal for the authenticated identity bound to access decisions.
|
||||||
- **Organization Role vs AccessRole vs CARING role**: Organization roles describe responsibility or position; access roles describe permissions; CARING roles classify access-governance needs and analysis.
|
- **Organization Role vs AccessRole vs CARING role**: Organization roles describe responsibility or position; access roles describe permissions; CARING roles classify access-governance needs and analysis.
|
||||||
- **Policy vs Control vs Evidence**: Policy states intent or rule, control implements or enforces that rule, and evidence records why the claim should be trusted.
|
- **Policy vs Control vs Evidence**: Policy states intent or rule, control implements or enforces that rule, and evidence records why the claim should be trusted.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,13 @@
|
||||||
{
|
{
|
||||||
"common_distinctions": [
|
"common_distinctions": [
|
||||||
|
{
|
||||||
|
"id": "interface-deprecation-retirement-removal",
|
||||||
|
"source_artifacts": [
|
||||||
|
"practice-pattern/interface-deprecation-strangler"
|
||||||
|
],
|
||||||
|
"summary": "Deprecation guides and observes callers, retirement ends legacy behavior while retaining a metered tombstone, and removal deletes that tombstone only after the evidence gate passes.",
|
||||||
|
"title": "Interface deprecation vs retirement vs removal"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "actor-subject-principal",
|
"id": "actor-subject-principal",
|
||||||
"source_artifacts": [
|
"source_artifacts": [
|
||||||
|
|
@ -43,7 +51,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"infospace": "canon",
|
"infospace": "canon",
|
||||||
"item_count": 68,
|
"item_count": 70,
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"canonical_path": "assimilation/it-capability-canon/ASSIMILATION.md",
|
"canonical_path": "assimilation/it-capability-canon/ASSIMILATION.md",
|
||||||
|
|
@ -1523,6 +1531,42 @@
|
||||||
"title": "Intent Scope Purposes Pattern",
|
"title": "Intent Scope Purposes Pattern",
|
||||||
"warnings": []
|
"warnings": []
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"canonical_path": "patterns/InterfaceDeprecationStrangler.md",
|
||||||
|
"id": "practice-pattern/interface-deprecation-strangler",
|
||||||
|
"imports": [
|
||||||
|
"model/devsecops",
|
||||||
|
"model/governance",
|
||||||
|
"model/observability",
|
||||||
|
"scheme/practice-pattern"
|
||||||
|
],
|
||||||
|
"kind": "practice-pattern",
|
||||||
|
"owned_concepts": [
|
||||||
|
"InterfaceDeprecationStrangler"
|
||||||
|
],
|
||||||
|
"relationships": [
|
||||||
|
{
|
||||||
|
"target": "scheme/practice-pattern",
|
||||||
|
"type": "conforms_to"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "model/governance",
|
||||||
|
"type": "uses"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "model/observability",
|
||||||
|
"type": "uses"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"target": "model/devsecops",
|
||||||
|
"type": "uses"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source_path": "patterns/InterfaceDeprecationStrangler.md",
|
||||||
|
"summary": "Reusable canon PracticePattern: InterfaceDeprecationStrangler.",
|
||||||
|
"title": "InterfaceDeprecationStrangler",
|
||||||
|
"warnings": []
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"canonical_path": "assimilation/intake-and-assimilation-practice.md",
|
"canonical_path": "assimilation/intake-and-assimilation-practice.md",
|
||||||
"id": "practice/intake-and-assimilation",
|
"id": "practice/intake-and-assimilation",
|
||||||
|
|
@ -1891,6 +1935,29 @@
|
||||||
"title": "Consumer Alignment Workplan Template",
|
"title": "Consumer Alignment Workplan Template",
|
||||||
"warnings": []
|
"warnings": []
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"canonical_path": "patterns/PracticePatternScheme.md",
|
||||||
|
"id": "scheme/practice-pattern",
|
||||||
|
"imports": [
|
||||||
|
"kernel/itc-core"
|
||||||
|
],
|
||||||
|
"kind": "practice-pattern-scheme",
|
||||||
|
"owned_concepts": [
|
||||||
|
"PatternLanguage",
|
||||||
|
"PracticePattern",
|
||||||
|
"PracticePattern Scheme"
|
||||||
|
],
|
||||||
|
"relationships": [
|
||||||
|
{
|
||||||
|
"target": "kernel/itc-core",
|
||||||
|
"type": "conforms_to"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source_path": "patterns/PracticePatternScheme.md",
|
||||||
|
"summary": "Contract for canon PracticePattern artifacts: PracticePattern Scheme.",
|
||||||
|
"title": "PracticePattern Scheme",
|
||||||
|
"warnings": []
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"canonical_path": "profiles/small-saas/artifacts/control.namespace-per-tenant.yaml",
|
"canonical_path": "profiles/small-saas/artifacts/control.namespace-per-tenant.yaml",
|
||||||
"id": "small-saas/control/namespace-per-tenant",
|
"id": "small-saas/control/namespace-per-tenant",
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,11 @@
|
||||||
|
|
||||||
Schema: `info-tech-canon.retrieval-index.v1`
|
Schema: `info-tech-canon.retrieval-index.v1`
|
||||||
Infospace: `canon`
|
Infospace: `canon`
|
||||||
Items: **68**
|
Items: **70**
|
||||||
|
|
||||||
## Common Distinctions
|
## Common Distinctions
|
||||||
|
|
||||||
|
- **Interface deprecation vs retirement vs removal**: Deprecation guides and observes callers, retirement ends legacy behavior while retaining a metered tombstone, and removal deletes that tombstone only after the evidence gate passes. Sources: `practice-pattern/interface-deprecation-strangler`
|
||||||
- **Actor vs Subject vs Principal**: Use actor for the acting entity in a context, subject for the entity a policy evaluates, and principal for the authenticated identity bound to access decisions. Sources: `model/organization`, `model/access-control`, `standard/caring`
|
- **Actor vs Subject vs Principal**: Use actor for the acting entity in a context, subject for the entity a policy evaluates, and principal for the authenticated identity bound to access decisions. Sources: `model/organization`, `model/access-control`, `standard/caring`
|
||||||
- **Organization Role vs AccessRole vs CARING role**: Organization roles describe responsibility or position; access roles describe permissions; CARING roles classify access-governance needs and analysis. Sources: `model/organization`, `model/access-control`, `standard/caring`
|
- **Organization Role vs AccessRole vs CARING role**: Organization roles describe responsibility or position; access roles describe permissions; CARING roles classify access-governance needs and analysis. Sources: `model/organization`, `model/access-control`, `standard/caring`
|
||||||
- **Policy vs Control vs Evidence**: Policy states intent or rule, control implements or enforces that rule, and evidence records why the claim should be trusted. Sources: `model/governance`, `model/security`, `model/observability`
|
- **Policy vs Control vs Evidence**: Policy states intent or rule, control implements or enforces that rule, and evidence records why the claim should be trusted. Sources: `model/governance`, `model/security`, `model/observability`
|
||||||
|
|
@ -455,6 +456,16 @@ Items: **68**
|
||||||
- Imports and anchors: `model/governance`, `model/task`
|
- Imports and anchors: `model/governance`, `model/task`
|
||||||
- Owned concepts: `Intent Scope Purposes Pattern`, `IntentScopePurposePattern`
|
- Owned concepts: `Intent Scope Purposes Pattern`, `IntentScopePurposePattern`
|
||||||
|
|
||||||
|
### InterfaceDeprecationStrangler
|
||||||
|
|
||||||
|
- ID: `practice-pattern/interface-deprecation-strangler`
|
||||||
|
- Kind: `practice-pattern`
|
||||||
|
- Canonical path: `patterns/InterfaceDeprecationStrangler.md`
|
||||||
|
- Source path: `patterns/InterfaceDeprecationStrangler.md`
|
||||||
|
- Summary: Reusable canon PracticePattern: InterfaceDeprecationStrangler.
|
||||||
|
- Imports and anchors: `model/devsecops`, `model/governance`, `model/observability`, `scheme/practice-pattern`
|
||||||
|
- Owned concepts: `InterfaceDeprecationStrangler`
|
||||||
|
|
||||||
### Intake and Assimilation Practice
|
### Intake and Assimilation Practice
|
||||||
|
|
||||||
- ID: `practice/intake-and-assimilation`
|
- ID: `practice/intake-and-assimilation`
|
||||||
|
|
@ -535,6 +546,16 @@ Items: **68**
|
||||||
- Imports and anchors: `model/purpose-demand-extension`, `model/task`
|
- Imports and anchors: `model/purpose-demand-extension`, `model/task`
|
||||||
- Owned concepts: `Consumer Alignment Workplan Template`
|
- Owned concepts: `Consumer Alignment Workplan Template`
|
||||||
|
|
||||||
|
### PracticePattern Scheme
|
||||||
|
|
||||||
|
- ID: `scheme/practice-pattern`
|
||||||
|
- Kind: `practice-pattern-scheme`
|
||||||
|
- Canonical path: `patterns/PracticePatternScheme.md`
|
||||||
|
- Source path: `patterns/PracticePatternScheme.md`
|
||||||
|
- Summary: Contract for canon PracticePattern artifacts: PracticePattern Scheme.
|
||||||
|
- Imports and anchors: `kernel/itc-core`
|
||||||
|
- Owned concepts: `PatternLanguage`, `PracticePattern`, `PracticePattern Scheme`
|
||||||
|
|
||||||
### Namespace Per Tenant Control
|
### Namespace Per Tenant Control
|
||||||
|
|
||||||
- ID: `small-saas/control/namespace-per-tenant`
|
- ID: `small-saas/control/namespace-per-tenant`
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
schema: info-tech-canon.retrieval-index.v1
|
schema: info-tech-canon.retrieval-index.v1
|
||||||
infospace: canon
|
infospace: canon
|
||||||
item_count: 68
|
item_count: 70
|
||||||
items:
|
items:
|
||||||
- id: assimilation/it-capability-canon
|
- id: assimilation/it-capability-canon
|
||||||
kind: assimilation
|
kind: assimilation
|
||||||
|
|
@ -973,6 +973,29 @@ items:
|
||||||
- type: uses
|
- type: uses
|
||||||
target: model/task
|
target: model/task
|
||||||
warnings: []
|
warnings: []
|
||||||
|
- id: practice-pattern/interface-deprecation-strangler
|
||||||
|
kind: practice-pattern
|
||||||
|
title: InterfaceDeprecationStrangler
|
||||||
|
canonical_path: patterns/InterfaceDeprecationStrangler.md
|
||||||
|
source_path: patterns/InterfaceDeprecationStrangler.md
|
||||||
|
summary: 'Reusable canon PracticePattern: InterfaceDeprecationStrangler.'
|
||||||
|
owned_concepts:
|
||||||
|
- InterfaceDeprecationStrangler
|
||||||
|
imports:
|
||||||
|
- model/devsecops
|
||||||
|
- model/governance
|
||||||
|
- model/observability
|
||||||
|
- scheme/practice-pattern
|
||||||
|
relationships:
|
||||||
|
- type: conforms_to
|
||||||
|
target: scheme/practice-pattern
|
||||||
|
- type: uses
|
||||||
|
target: model/governance
|
||||||
|
- type: uses
|
||||||
|
target: model/observability
|
||||||
|
- type: uses
|
||||||
|
target: model/devsecops
|
||||||
|
warnings: []
|
||||||
- id: practice/intake-and-assimilation
|
- id: practice/intake-and-assimilation
|
||||||
kind: practice
|
kind: practice
|
||||||
title: Intake and Assimilation Practice
|
title: Intake and Assimilation Practice
|
||||||
|
|
@ -1210,6 +1233,22 @@ items:
|
||||||
- type: uses
|
- type: uses
|
||||||
target: model/purpose-demand-extension
|
target: model/purpose-demand-extension
|
||||||
warnings: []
|
warnings: []
|
||||||
|
- id: scheme/practice-pattern
|
||||||
|
kind: practice-pattern-scheme
|
||||||
|
title: PracticePattern Scheme
|
||||||
|
canonical_path: patterns/PracticePatternScheme.md
|
||||||
|
source_path: patterns/PracticePatternScheme.md
|
||||||
|
summary: 'Contract for canon PracticePattern artifacts: PracticePattern Scheme.'
|
||||||
|
owned_concepts:
|
||||||
|
- PatternLanguage
|
||||||
|
- PracticePattern
|
||||||
|
- PracticePattern Scheme
|
||||||
|
imports:
|
||||||
|
- kernel/itc-core
|
||||||
|
relationships:
|
||||||
|
- type: conforms_to
|
||||||
|
target: kernel/itc-core
|
||||||
|
warnings: []
|
||||||
- id: small-saas/control/namespace-per-tenant
|
- id: small-saas/control/namespace-per-tenant
|
||||||
kind: profile-artifact
|
kind: profile-artifact
|
||||||
title: Namespace Per Tenant Control
|
title: Namespace Per Tenant Control
|
||||||
|
|
@ -1584,6 +1623,13 @@ items:
|
||||||
target: model/task
|
target: model/task
|
||||||
warnings: []
|
warnings: []
|
||||||
common_distinctions:
|
common_distinctions:
|
||||||
|
- id: interface-deprecation-retirement-removal
|
||||||
|
title: Interface deprecation vs retirement vs removal
|
||||||
|
summary: Deprecation guides and observes callers, retirement ends legacy behavior
|
||||||
|
while retaining a metered tombstone, and removal deletes that tombstone only after
|
||||||
|
the evidence gate passes.
|
||||||
|
source_artifacts:
|
||||||
|
- practice-pattern/interface-deprecation-strangler
|
||||||
- id: actor-subject-principal
|
- id: actor-subject-principal
|
||||||
title: Actor vs Subject vs Principal
|
title: Actor vs Subject vs Principal
|
||||||
summary: Use actor for the acting entity in a context, subject for the entity a
|
summary: Use actor for the acting entity in a context, subject for the entity a
|
||||||
|
|
|
||||||
|
|
@ -609,6 +609,33 @@ artifacts:
|
||||||
target: model/governance
|
target: model/governance
|
||||||
- type: uses
|
- type: uses
|
||||||
target: model/task
|
target: model/task
|
||||||
|
- id: scheme/practice-pattern
|
||||||
|
path: patterns/PracticePatternScheme.md
|
||||||
|
kind: practice-pattern-scheme
|
||||||
|
title: PracticePattern Scheme
|
||||||
|
provenance:
|
||||||
|
placement: authored
|
||||||
|
placement_workplan: ITC-WP-0016
|
||||||
|
relationships:
|
||||||
|
- type: conforms_to
|
||||||
|
target: kernel/itc-core
|
||||||
|
- id: practice-pattern/interface-deprecation-strangler
|
||||||
|
path: patterns/InterfaceDeprecationStrangler.md
|
||||||
|
kind: practice-pattern
|
||||||
|
title: InterfaceDeprecationStrangler
|
||||||
|
provenance:
|
||||||
|
placement: generalized
|
||||||
|
placement_workplan: ITC-WP-0016
|
||||||
|
known_use: state-hub/docs/workplan-terminology-transition.md
|
||||||
|
relationships:
|
||||||
|
- type: conforms_to
|
||||||
|
target: scheme/practice-pattern
|
||||||
|
- type: uses
|
||||||
|
target: model/governance
|
||||||
|
- type: uses
|
||||||
|
target: model/observability
|
||||||
|
- type: uses
|
||||||
|
target: model/devsecops
|
||||||
- id: mapping/purpose-demand-governance-candidates
|
- id: mapping/purpose-demand-governance-candidates
|
||||||
path: mappings/purpose-demand-governance-candidates.yaml
|
path: mappings/purpose-demand-governance-candidates.yaml
|
||||||
kind: mapping
|
kind: mapping
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
root: infospace
|
root: infospace
|
||||||
file_count: 183
|
file_count: 190
|
||||||
files:
|
files:
|
||||||
- path: README.md
|
- path: README.md
|
||||||
directory: .
|
directory: .
|
||||||
|
|
@ -22,6 +22,9 @@ files:
|
||||||
- path: agent/briefs/benchmark-caring-kubernetes-rbac.md
|
- path: agent/briefs/benchmark-caring-kubernetes-rbac.md
|
||||||
directory: agent/briefs
|
directory: agent/briefs
|
||||||
name: benchmark-caring-kubernetes-rbac.md
|
name: benchmark-caring-kubernetes-rbac.md
|
||||||
|
- path: agent/briefs/catalog-attribute-value-types.md
|
||||||
|
directory: agent/briefs
|
||||||
|
name: catalog-attribute-value-types.md
|
||||||
- path: agent/briefs/catalog-evidence-basis.md
|
- path: agent/briefs/catalog-evidence-basis.md
|
||||||
directory: agent/briefs
|
directory: agent/briefs
|
||||||
name: catalog-evidence-basis.md
|
name: catalog-evidence-basis.md
|
||||||
|
|
@ -82,6 +85,9 @@ files:
|
||||||
- path: agent/briefs/kernel-itc-kernel-map.md
|
- path: agent/briefs/kernel-itc-kernel-map.md
|
||||||
directory: agent/briefs
|
directory: agent/briefs
|
||||||
name: kernel-itc-kernel-map.md
|
name: kernel-itc-kernel-map.md
|
||||||
|
- path: agent/briefs/mapping-capability-anchors.md
|
||||||
|
directory: agent/briefs
|
||||||
|
name: mapping-capability-anchors.md
|
||||||
- path: agent/briefs/mapping-purpose-demand-governance-candidates.md
|
- path: agent/briefs/mapping-purpose-demand-governance-candidates.md
|
||||||
directory: agent/briefs
|
directory: agent/briefs
|
||||||
name: mapping-purpose-demand-governance-candidates.md
|
name: mapping-purpose-demand-governance-candidates.md
|
||||||
|
|
@ -127,6 +133,9 @@ files:
|
||||||
- path: agent/briefs/pattern-intent-scope-purposes.md
|
- path: agent/briefs/pattern-intent-scope-purposes.md
|
||||||
directory: agent/briefs
|
directory: agent/briefs
|
||||||
name: pattern-intent-scope-purposes.md
|
name: pattern-intent-scope-purposes.md
|
||||||
|
- path: agent/briefs/practice-pattern-interface-deprecation-strangler.md
|
||||||
|
directory: agent/briefs
|
||||||
|
name: practice-pattern-interface-deprecation-strangler.md
|
||||||
- path: agent/briefs/profile-small-saas.md
|
- path: agent/briefs/profile-small-saas.md
|
||||||
directory: agent/briefs
|
directory: agent/briefs
|
||||||
name: profile-small-saas.md
|
name: profile-small-saas.md
|
||||||
|
|
@ -148,6 +157,9 @@ files:
|
||||||
- path: agent/briefs/review-kit-alignment.md
|
- path: agent/briefs/review-kit-alignment.md
|
||||||
directory: agent/briefs
|
directory: agent/briefs
|
||||||
name: review-kit-alignment.md
|
name: review-kit-alignment.md
|
||||||
|
- path: agent/briefs/scheme-practice-pattern.md
|
||||||
|
directory: agent/briefs
|
||||||
|
name: scheme-practice-pattern.md
|
||||||
- path: agent/briefs/standard-caring.md
|
- path: agent/briefs/standard-caring.md
|
||||||
directory: agent/briefs
|
directory: agent/briefs
|
||||||
name: standard-caring.md
|
name: standard-caring.md
|
||||||
|
|
@ -394,6 +406,12 @@ files:
|
||||||
- path: models/task/InfoTechCanonTaskModel.md
|
- path: models/task/InfoTechCanonTaskModel.md
|
||||||
directory: models/task
|
directory: models/task
|
||||||
name: InfoTechCanonTaskModel.md
|
name: InfoTechCanonTaskModel.md
|
||||||
|
- path: patterns/InterfaceDeprecationStrangler.md
|
||||||
|
directory: patterns
|
||||||
|
name: InterfaceDeprecationStrangler.md
|
||||||
|
- path: patterns/PracticePatternScheme.md
|
||||||
|
directory: patterns
|
||||||
|
name: PracticePatternScheme.md
|
||||||
- path: patterns/README.md
|
- path: patterns/README.md
|
||||||
directory: patterns
|
directory: patterns
|
||||||
name: README.md
|
name: README.md
|
||||||
|
|
@ -484,6 +502,9 @@ files:
|
||||||
- path: schemas/mapping.schema.yaml
|
- path: schemas/mapping.schema.yaml
|
||||||
directory: schemas
|
directory: schemas
|
||||||
name: mapping.schema.yaml
|
name: mapping.schema.yaml
|
||||||
|
- path: schemas/practice-pattern.schema.yaml
|
||||||
|
directory: schemas
|
||||||
|
name: practice-pattern.schema.yaml
|
||||||
- path: schemas/profile.schema.yaml
|
- path: schemas/profile.schema.yaml
|
||||||
directory: schemas
|
directory: schemas
|
||||||
name: profile.schema.yaml
|
name: profile.schema.yaml
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
concept_count: 110
|
concept_count: 114
|
||||||
concepts:
|
concepts:
|
||||||
- concept: "Assimilation \u2014 IT Capability Canon (ITCC) v0.1"
|
- concept: "Assimilation \u2014 IT Capability Canon (ITCC) v0.1"
|
||||||
owner: assimilation/it-capability-canon
|
owner: assimilation/it-capability-canon
|
||||||
|
|
@ -268,6 +268,10 @@ concepts:
|
||||||
owner: pattern/intent-scope-purposes
|
owner: pattern/intent-scope-purposes
|
||||||
path: patterns/intent-scope-purposes.md
|
path: patterns/intent-scope-purposes.md
|
||||||
source: frontmatter.owned_concepts
|
source: frontmatter.owned_concepts
|
||||||
|
- concept: InterfaceDeprecationStrangler
|
||||||
|
owner: practice-pattern/interface-deprecation-strangler
|
||||||
|
path: patterns/InterfaceDeprecationStrangler.md
|
||||||
|
source: artifact_title
|
||||||
- concept: Intake and Assimilation Practice
|
- concept: Intake and Assimilation Practice
|
||||||
owner: practice/intake-and-assimilation
|
owner: practice/intake-and-assimilation
|
||||||
path: assimilation/intake-and-assimilation-practice.md
|
path: assimilation/intake-and-assimilation-practice.md
|
||||||
|
|
@ -300,6 +304,18 @@ concepts:
|
||||||
owner: review-kit/alignment/workplan-template
|
owner: review-kit/alignment/workplan-template
|
||||||
path: agent/templates/consumer-alignment-workplan.template.md
|
path: agent/templates/consumer-alignment-workplan.template.md
|
||||||
source: artifact_title
|
source: artifact_title
|
||||||
|
- concept: PracticePattern Scheme
|
||||||
|
owner: scheme/practice-pattern
|
||||||
|
path: patterns/PracticePatternScheme.md
|
||||||
|
source: artifact_title
|
||||||
|
- concept: PracticePattern
|
||||||
|
owner: scheme/practice-pattern
|
||||||
|
path: patterns/PracticePatternScheme.md
|
||||||
|
source: frontmatter.owned_concepts
|
||||||
|
- concept: PatternLanguage
|
||||||
|
owner: scheme/practice-pattern
|
||||||
|
path: patterns/PracticePatternScheme.md
|
||||||
|
source: frontmatter.owned_concepts
|
||||||
- concept: Namespace Per Tenant Control
|
- concept: Namespace Per Tenant Control
|
||||||
owner: small-saas/control/namespace-per-tenant
|
owner: small-saas/control/namespace-per-tenant
|
||||||
path: profiles/small-saas/artifacts/control.namespace-per-tenant.yaml
|
path: profiles/small-saas/artifacts/control.namespace-per-tenant.yaml
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ artifacts:
|
||||||
- model/security
|
- model/security
|
||||||
- model/task
|
- model/task
|
||||||
- pattern/intent-scope-purposes
|
- pattern/intent-scope-purposes
|
||||||
|
- practice-pattern/interface-deprecation-strangler
|
||||||
- practice/intake-and-assimilation
|
- practice/intake-and-assimilation
|
||||||
- profile/small-saas
|
- profile/small-saas
|
||||||
- review-kit/alignment
|
- review-kit/alignment
|
||||||
|
|
@ -51,6 +52,7 @@ artifacts:
|
||||||
- review-kit/alignment/scorecard
|
- review-kit/alignment/scorecard
|
||||||
- review-kit/alignment/workflow
|
- review-kit/alignment/workflow
|
||||||
- review-kit/alignment/workplan-template
|
- review-kit/alignment/workplan-template
|
||||||
|
- scheme/practice-pattern
|
||||||
- small-saas/control/namespace-per-tenant
|
- small-saas/control/namespace-per-tenant
|
||||||
- small-saas/dataset/subscription-ledger
|
- small-saas/dataset/subscription-ledger
|
||||||
- small-saas/deployment/production
|
- small-saas/deployment/production
|
||||||
|
|
@ -496,6 +498,16 @@ rows:
|
||||||
- implements
|
- implements
|
||||||
model/task:
|
model/task:
|
||||||
- uses
|
- uses
|
||||||
|
- artifact: practice-pattern/interface-deprecation-strangler
|
||||||
|
targets:
|
||||||
|
model/devsecops:
|
||||||
|
- uses
|
||||||
|
model/governance:
|
||||||
|
- uses
|
||||||
|
model/observability:
|
||||||
|
- uses
|
||||||
|
scheme/practice-pattern:
|
||||||
|
- conforms_to
|
||||||
- artifact: practice/intake-and-assimilation
|
- artifact: practice/intake-and-assimilation
|
||||||
targets:
|
targets:
|
||||||
kernel/itc-core:
|
kernel/itc-core:
|
||||||
|
|
@ -610,6 +622,10 @@ rows:
|
||||||
- uses
|
- uses
|
||||||
review-kit/alignment:
|
review-kit/alignment:
|
||||||
- part_of
|
- part_of
|
||||||
|
- artifact: scheme/practice-pattern
|
||||||
|
targets:
|
||||||
|
kernel/itc-core:
|
||||||
|
- conforms_to
|
||||||
- artifact: small-saas/control/namespace-per-tenant
|
- artifact: small-saas/control/namespace-per-tenant
|
||||||
targets:
|
targets:
|
||||||
model/security:
|
model/security:
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ disciplines:
|
||||||
path: standards/repository-layout/InfoTechCanonRepositoryLayoutStandard.md
|
path: standards/repository-layout/InfoTechCanonRepositoryLayoutStandard.md
|
||||||
schemas:
|
schemas:
|
||||||
standard: schemas/standard.schema.yaml
|
standard: schemas/standard.schema.yaml
|
||||||
|
practice-pattern: schemas/practice-pattern.schema.yaml
|
||||||
concept: schemas/concept.schema.yaml
|
concept: schemas/concept.schema.yaml
|
||||||
mapping: schemas/mapping.schema.yaml
|
mapping: schemas/mapping.schema.yaml
|
||||||
profile: schemas/profile.schema.yaml
|
profile: schemas/profile.schema.yaml
|
||||||
|
|
|
||||||
267
infospace/patterns/InterfaceDeprecationStrangler.md
Normal file
267
infospace/patterns/InterfaceDeprecationStrangler.md
Normal file
|
|
@ -0,0 +1,267 @@
|
||||||
|
---
|
||||||
|
id: practice-pattern/interface-deprecation-strangler
|
||||||
|
title: InterfaceDeprecationStrangler
|
||||||
|
type: practice-pattern
|
||||||
|
scheme: practice-pattern/0.1
|
||||||
|
status: active
|
||||||
|
version: "0.1"
|
||||||
|
summary: Replace an interface gradually while metering legacy use, guiding callers, and gating removal on evidence.
|
||||||
|
aliases:
|
||||||
|
- Metered Interface Strangler
|
||||||
|
- Evidence-Gated Interface Deprecation
|
||||||
|
uses:
|
||||||
|
- model/governance
|
||||||
|
- model/observability
|
||||||
|
- model/devsecops
|
||||||
|
related_patterns: []
|
||||||
|
known_uses:
|
||||||
|
- state-hub-workstream-to-workplan-transition
|
||||||
|
---
|
||||||
|
|
||||||
|
# InterfaceDeprecationStrangler
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
|
||||||
|
Phase out an old interface without guessing whether callers have migrated:
|
||||||
|
introduce and verify its successor, make deprecation visible to callers, meter
|
||||||
|
legacy use, progressively restrict the old behavior, and remove its final
|
||||||
|
tombstone only when evidence satisfies an explicit retirement policy.
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
Use this pattern when a service, library, event stream, command, file format, or
|
||||||
|
other integration surface must evolve while some callers may still depend on
|
||||||
|
the old interface. Caller inventory is incomplete, release cycles are not
|
||||||
|
coordinated, or removal has enough operational risk that absence of complaints
|
||||||
|
is insufficient evidence.
|
||||||
|
|
||||||
|
The old and new interfaces may coexist briefly, or the old interface may
|
||||||
|
already reject requests while still receiving attempts.
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
An interface cannot safely remain forever, but deleting it on a planned date
|
||||||
|
can break unknown callers. Keeping it indefinitely also has a cost: duplicated
|
||||||
|
logic, ambiguity, security exposure, testing burden, and pressure to keep
|
||||||
|
building on an obsolete contract.
|
||||||
|
|
||||||
|
A published deprecation notice alone proves neither that callers received it
|
||||||
|
nor that they migrated. Raw request totals alone are also ambiguous: a request
|
||||||
|
successfully served by compatibility code is different from an attempt rejected
|
||||||
|
by a retired endpoint.
|
||||||
|
|
||||||
|
## Forces
|
||||||
|
|
||||||
|
- Callers need enough continuity to migrate without synchronized releases.
|
||||||
|
- Maintainers need a bounded path to removal rather than permanent dual support.
|
||||||
|
- Unknown callers cannot be coordinated directly until telemetry identifies
|
||||||
|
them.
|
||||||
|
- Caller guidance must be available at the point of use, not only in release
|
||||||
|
notes.
|
||||||
|
- Privacy and security constrain how caller identity and request data are
|
||||||
|
recorded.
|
||||||
|
- Infrequent but important callers can be absent from a short review window.
|
||||||
|
- A replacement that exists but has not been verified is not a safe successor.
|
||||||
|
- Once behavior returns a terminal response, attempted use still matters even
|
||||||
|
though no legacy work was successfully performed.
|
||||||
|
|
||||||
|
## Solution
|
||||||
|
|
||||||
|
Therefore, wrap the interface transition in an evidence-producing strangler:
|
||||||
|
|
||||||
|
1. Register the legacy interface, its owner, successor, lifecycle state, and
|
||||||
|
applicable hold or retirement policy.
|
||||||
|
2. Implement and verify the successor before restricting the legacy path.
|
||||||
|
3. Instrument the legacy boundary and communicate deprecation plus an actionable
|
||||||
|
successor reference on every use where the protocol permits it.
|
||||||
|
4. Record privacy-bounded usage evidence with enough outcome information to
|
||||||
|
distinguish served legacy traffic, redirects, terminal rejection, and
|
||||||
|
failures.
|
||||||
|
5. Move through explicit stages from compatibility to terminal retirement.
|
||||||
|
6. Keep a lightweight metered tombstone after terminal retirement so late
|
||||||
|
attempts reveal remaining callers.
|
||||||
|
7. Remove the tombstone only after the configured evidence gate passes and no
|
||||||
|
manual hold remains.
|
||||||
|
|
||||||
|
The meter and caller guidance are part of the interface lifecycle, not optional
|
||||||
|
observability added after the fact.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
```text
|
||||||
|
Caller
|
||||||
|
-> Legacy Boundary
|
||||||
|
-> deprecation and successor guidance
|
||||||
|
-> outcome-aware usage meter
|
||||||
|
-> compatibility implementation OR terminal response
|
||||||
|
-> Successor Interface
|
||||||
|
|
||||||
|
Interface Registry
|
||||||
|
-> owner + lifecycle + successor + verification + holds
|
||||||
|
|
||||||
|
Review Activity
|
||||||
|
-> usage windows + last-seen + caller attribution + outcome
|
||||||
|
-> migration action OR stage advance OR continued hold
|
||||||
|
```
|
||||||
|
|
||||||
|
The registry carries policy and identity. The meter carries observations. The
|
||||||
|
review activity turns both into a decision; it must not infer removal from a
|
||||||
|
calendar date alone.
|
||||||
|
|
||||||
|
## Dynamics
|
||||||
|
|
||||||
|
### Stage 1 — Announce and observe
|
||||||
|
|
||||||
|
Serve the old behavior, emit protocol-appropriate deprecation and successor
|
||||||
|
information, and establish a usage baseline. Contact attributable callers.
|
||||||
|
|
||||||
|
### Stage 2 — Migrate and narrow
|
||||||
|
|
||||||
|
Move owned callers to the successor. Stop adding capabilities to the legacy
|
||||||
|
surface. Narrow compatibility where doing so is reversible and observable.
|
||||||
|
|
||||||
|
### Stage 3 — Retire behavior, retain the tombstone
|
||||||
|
|
||||||
|
Return an explicit terminal result such as HTTP `410 Gone`, a typed CLI error,
|
||||||
|
or a rejected event subject. Continue returning successor guidance and metering
|
||||||
|
attempts.
|
||||||
|
|
||||||
|
At this stage a count means attempted use of a retired interface, not successful
|
||||||
|
legacy traffic. Dashboards and evidence must preserve that distinction.
|
||||||
|
|
||||||
|
### Stage 4 — Remove the tombstone
|
||||||
|
|
||||||
|
Remove routing and instrumentation only after the successor is verified, no
|
||||||
|
hold remains, and the evidence policy's quiet period has elapsed. Preserve the
|
||||||
|
registry history and decision evidence.
|
||||||
|
|
||||||
|
Any new use can stop or reverse a stage transition when the cost of doing so is
|
||||||
|
lower than breaking the caller.
|
||||||
|
|
||||||
|
## Invariants
|
||||||
|
|
||||||
|
1. Every legacy interface has an owner and an actionable successor reference.
|
||||||
|
2. The successor is verified before legacy behavior is terminally retired.
|
||||||
|
3. Caller-facing deprecation information travels on the legacy interaction
|
||||||
|
where the protocol supports it.
|
||||||
|
4. Metering failure does not silently turn absence of evidence into evidence of
|
||||||
|
absence.
|
||||||
|
5. Successful legacy service and rejected post-retirement attempts are not
|
||||||
|
reported as the same outcome.
|
||||||
|
6. A manual hold prevents automatic stage advancement.
|
||||||
|
7. Quiet periods account for expected caller cadence and historical volume.
|
||||||
|
8. Irreversible removal has retained evidence, rationale, and rollback or
|
||||||
|
recovery guidance appropriate to its risk.
|
||||||
|
9. Telemetry does not capture credentials or unnecessary request payloads.
|
||||||
|
|
||||||
|
## Evidence
|
||||||
|
|
||||||
|
The practice should produce:
|
||||||
|
|
||||||
|
- a registry record with interface identity, owner, successor, lifecycle state,
|
||||||
|
replacement verification, and holds;
|
||||||
|
- usage totals and bounded review windows;
|
||||||
|
- last-seen time and, where allowed, tenant/user/component or equivalent caller
|
||||||
|
attribution;
|
||||||
|
- request outcome or an unambiguous derivation from the interface lifecycle
|
||||||
|
stage;
|
||||||
|
- evidence that owned callers use the successor;
|
||||||
|
- the retirement threshold and its result; and
|
||||||
|
- the decision that advanced, paused, or reversed the transition.
|
||||||
|
|
||||||
|
Quiet-window policy should reflect use cadence. A high-volume interface that
|
||||||
|
has been quiet for one week may require a longer last-seen threshold than an
|
||||||
|
interface that was used once. Evidence should say why an interface is or is not
|
||||||
|
a retirement candidate rather than emitting only a boolean.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
The organization gains a repeatable migration language, direct discovery of
|
||||||
|
unknown callers, and an evidence-backed point at which compatibility can end.
|
||||||
|
Late use becomes actionable information instead of a surprise outage.
|
||||||
|
|
||||||
|
The cost is temporary duplicate surface area, registry and telemetry storage,
|
||||||
|
review ownership, privacy design, and discipline around outcome semantics. A
|
||||||
|
tombstone has operating cost, but it is much smaller and safer than preserving
|
||||||
|
the full legacy implementation.
|
||||||
|
|
||||||
|
## Failure Modes
|
||||||
|
|
||||||
|
- **NoticeOnly:** publish a deprecation date without observing real use.
|
||||||
|
- **MeterWithoutMeaning:** count requests without distinguishing served traffic
|
||||||
|
from rejected attempts.
|
||||||
|
- **PermanentCompatibility:** meter forever but never define stage gates.
|
||||||
|
- **CalendarRemoval:** delete on a date despite contrary usage evidence.
|
||||||
|
- **UnverifiedSuccessor:** retire the old path because a replacement merely
|
||||||
|
exists.
|
||||||
|
- **SilentTombstone:** return a terminal response without successor guidance.
|
||||||
|
- **TelemetryBlindness:** treat a broken meter as a quiet interface.
|
||||||
|
- **IdentityOverreach:** collect payloads or personal data when coarse component
|
||||||
|
attribution would suffice.
|
||||||
|
- **ShortWindowConfidence:** miss monthly or quarterly callers by using only a
|
||||||
|
short quiet window.
|
||||||
|
|
||||||
|
## When Not to Use
|
||||||
|
|
||||||
|
Do not use the full pattern for an interface that was never released, has a
|
||||||
|
complete and controlled caller set that can be changed atomically, or must be
|
||||||
|
disabled immediately because continued exposure is an unacceptable security or
|
||||||
|
safety risk. In the last case, retire first and use the metered tombstone and
|
||||||
|
recovery guidance only where they do not preserve the vulnerability.
|
||||||
|
|
||||||
|
## Known Uses
|
||||||
|
|
||||||
|
### State Hub workstream-to-workplan transition
|
||||||
|
|
||||||
|
State Hub replaced legacy `workstream` REST terminology with `workplan`
|
||||||
|
interfaces. Its legacy registry records interface identity, owner, replacement,
|
||||||
|
verification, holds, and usage buckets. Legacy responses carry deprecation,
|
||||||
|
sunset, replacement, and successor-link metadata.
|
||||||
|
|
||||||
|
`GET /workstreams/{workstream_id}` is at Stage 3: it returns `410 Gone`, directs
|
||||||
|
the caller to `GET /workplans/{workplan_id}`, and records the attempt. The weekly
|
||||||
|
review therefore exposes remaining callers without implying that the retired
|
||||||
|
request succeeded. Retirement candidacy combines review-window traffic,
|
||||||
|
last-seen time, replacement verification, manual holds, and a quiet-period
|
||||||
|
ladder scaled by historical call volume.
|
||||||
|
|
||||||
|
Implementation references:
|
||||||
|
|
||||||
|
- repository: `state-hub`;
|
||||||
|
- compatibility behavior: `api/services/legacy_compat.py`;
|
||||||
|
- known route: `api/routers/workstreams.py`;
|
||||||
|
- evidence policy: `api/services/legacy_meter.py`; and
|
||||||
|
- operational description: `docs/workplan-terminology-transition.md`.
|
||||||
|
|
||||||
|
### Arc Nexus adoption
|
||||||
|
|
||||||
|
`arc-nexus` declares this PracticePattern as its policy for phasing out old
|
||||||
|
architecture registry interfaces. This is an adoption decision, not yet a
|
||||||
|
second implementation proof.
|
||||||
|
|
||||||
|
## Related Patterns
|
||||||
|
|
||||||
|
This pattern is a specialized strangler migration with an explicit evidence and
|
||||||
|
governance loop. Future related patterns may separate successor verification,
|
||||||
|
compatibility facades, evidence-gated removal, and consumer migration campaigns
|
||||||
|
once repeated uses justify independent names.
|
||||||
|
|
||||||
|
## Adoption Checklist
|
||||||
|
|
||||||
|
- [ ] Give the legacy and successor interfaces stable identities.
|
||||||
|
- [ ] Assign an owner and verify the successor.
|
||||||
|
- [ ] Define lifecycle stages, holds, and outcome semantics.
|
||||||
|
- [ ] Add caller-facing deprecation and successor guidance.
|
||||||
|
- [ ] Meter privacy-bounded usage and test meter failure behavior.
|
||||||
|
- [ ] Establish a review cadence and quiet-period policy.
|
||||||
|
- [ ] Migrate known callers and investigate unknown attribution.
|
||||||
|
- [ ] Retire behavior while retaining a metered tombstone.
|
||||||
|
- [ ] Confirm that evidence distinguishes attempted from successful use.
|
||||||
|
- [ ] Record the removal decision and preserve lifecycle history.
|
||||||
|
|
||||||
|
## Evolution
|
||||||
|
|
||||||
|
Version 0.1 generalizes the practice proven by State Hub's terminology
|
||||||
|
transition. The next useful evidence is a second implementation in a different
|
||||||
|
interface style, such as events, CLI commands, or schemas, to test which outcome
|
||||||
|
and successor fields should become structured canon concepts.
|
||||||
154
infospace/patterns/PracticePatternScheme.md
Normal file
154
infospace/patterns/PracticePatternScheme.md
Normal file
|
|
@ -0,0 +1,154 @@
|
||||||
|
---
|
||||||
|
id: scheme/practice-pattern
|
||||||
|
title: PracticePattern Scheme
|
||||||
|
type: practice-pattern-scheme
|
||||||
|
status: active
|
||||||
|
version: "0.1"
|
||||||
|
summary: A common Markdown contract for naming and sharing recurring socio-technical practices.
|
||||||
|
owned_concepts:
|
||||||
|
- PracticePattern
|
||||||
|
- PatternLanguage
|
||||||
|
---
|
||||||
|
|
||||||
|
# PracticePattern Scheme
|
||||||
|
|
||||||
|
## Intent
|
||||||
|
|
||||||
|
Give people and agents a stable language for recurring ways of working. A
|
||||||
|
PracticePattern names a proven or proposed arrangement of actions, roles,
|
||||||
|
interfaces, feedback, and evidence that resolves a recurring tension in a
|
||||||
|
particular context.
|
||||||
|
|
||||||
|
This scheme is inspired by Christopher Alexander's pattern-language method:
|
||||||
|
each pattern connects a context and a system of forces to a reusable solution,
|
||||||
|
describes the resulting consequences, and participates in a language of related
|
||||||
|
patterns. It adapts that idea for software, operations, architecture, and
|
||||||
|
governance practices; it does not copy a building pattern or require a fixed
|
||||||
|
implementation technology.
|
||||||
|
|
||||||
|
## Artifact identity
|
||||||
|
|
||||||
|
A PracticePattern is a Markdown canon artifact with:
|
||||||
|
|
||||||
|
- a speakable canonical name in UpperCamelCase, such as
|
||||||
|
`InterfaceDeprecationStrangler`;
|
||||||
|
- a stable artifact ID, `practice-pattern/<kebab-case-name>`;
|
||||||
|
- `type: practice-pattern`;
|
||||||
|
- `scheme: practice-pattern/0.1`;
|
||||||
|
- an independently versioned pattern body;
|
||||||
|
- a lifecycle status; and
|
||||||
|
- registration in `infospace/artifacts/index.yaml`.
|
||||||
|
|
||||||
|
The canonical name is part of the shared language. Aliases help discovery but
|
||||||
|
must not silently replace it.
|
||||||
|
|
||||||
|
## Required frontmatter
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
id: practice-pattern/example-name
|
||||||
|
title: ExampleName
|
||||||
|
type: practice-pattern
|
||||||
|
scheme: practice-pattern/0.1
|
||||||
|
status: candidate
|
||||||
|
version: "0.1"
|
||||||
|
summary: One sentence stating the practical move.
|
||||||
|
aliases: []
|
||||||
|
uses: []
|
||||||
|
related_patterns: []
|
||||||
|
known_uses: []
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
The machine-readable contract is
|
||||||
|
`infospace/schemas/practice-pattern.schema.yaml`.
|
||||||
|
|
||||||
|
### Lifecycle
|
||||||
|
|
||||||
|
| Status | Meaning |
|
||||||
|
| --- | --- |
|
||||||
|
| `draft` | The problem and solution are still being shaped. |
|
||||||
|
| `candidate` | Coherent enough for trial, but known uses are limited. |
|
||||||
|
| `active` | Supported by at least one concrete known use and suitable for reuse. |
|
||||||
|
| `deprecated` | Superseded or discouraged; relationship to its successor is explicit. |
|
||||||
|
| `retired` | Preserved for provenance but no longer recommended. |
|
||||||
|
|
||||||
|
Version and lifecycle are separate. A wording clarification can change the
|
||||||
|
version without changing lifecycle; evidence from a new known use can promote a
|
||||||
|
candidate to active.
|
||||||
|
|
||||||
|
## Required body sections
|
||||||
|
|
||||||
|
Every PracticePattern must contain these second-level headings:
|
||||||
|
|
||||||
|
1. `Intent` — the practical move in compact form.
|
||||||
|
2. `Context` — the conditions in which the pattern applies.
|
||||||
|
3. `Problem` — the recurring failure or tension.
|
||||||
|
4. `Forces` — pressures that make a simplistic solution insufficient.
|
||||||
|
5. `Solution` — the stable arrangement, written as a directive.
|
||||||
|
6. `Dynamics` — the sequence or feedback loop through which it operates.
|
||||||
|
7. `Invariants` — properties an implementation must preserve.
|
||||||
|
8. `Evidence` — observations needed to decide, advance, or stop.
|
||||||
|
9. `Consequences` — benefits, costs, and new responsibilities.
|
||||||
|
10. `Known Uses` — concrete applications and their maturity.
|
||||||
|
|
||||||
|
These headings are validated by the canon. Their contents may use diagrams,
|
||||||
|
tables, checklists, or prose.
|
||||||
|
|
||||||
|
## Recommended body sections
|
||||||
|
|
||||||
|
Use these where they improve adoption:
|
||||||
|
|
||||||
|
- `Structure` for roles, components, and relationships;
|
||||||
|
- `Failure Modes` for common incomplete or unsafe implementations;
|
||||||
|
- `When Not to Use` for boundary conditions;
|
||||||
|
- `Adoption Checklist` for a practical start and completion test;
|
||||||
|
- `Related Patterns` for the surrounding pattern language; and
|
||||||
|
- `Evolution` for provenance, open questions, and version history.
|
||||||
|
|
||||||
|
## Writing rules
|
||||||
|
|
||||||
|
1. Name a recurring practice, not a product feature or one repository's
|
||||||
|
implementation.
|
||||||
|
2. State the problem before prescribing the solution.
|
||||||
|
3. Make forces genuinely competing; a list of requirements is not a force
|
||||||
|
analysis.
|
||||||
|
4. Write the solution as a stable arrangement and keep technology-specific
|
||||||
|
examples in Known Uses.
|
||||||
|
5. Separate invariants from optional implementation techniques.
|
||||||
|
6. State which evidence changes the practice's state or permits an irreversible
|
||||||
|
move.
|
||||||
|
7. Name costs and failure modes as directly as benefits.
|
||||||
|
8. A known use must identify what was actually observed; intended adoption is
|
||||||
|
not implementation evidence.
|
||||||
|
9. Relationships must use stable artifact IDs when the related artifact is in
|
||||||
|
the canon.
|
||||||
|
10. Pattern conformance means preserving the invariants, not copying a known
|
||||||
|
use literally.
|
||||||
|
|
||||||
|
## Relationship vocabulary
|
||||||
|
|
||||||
|
PracticePatterns form a language rather than an isolated catalog. Use:
|
||||||
|
|
||||||
|
- `uses` when this pattern depends on another canon artifact or mechanism;
|
||||||
|
- `related_patterns` for complementary, alternative, predecessor, or successor
|
||||||
|
PracticePatterns, with the relation explained in the body;
|
||||||
|
- artifact-index `conforms_to` to point to this scheme;
|
||||||
|
- artifact-index `uses`, `requires`, or `implements` for graph-visible canon
|
||||||
|
relationships; and
|
||||||
|
- Known Uses to point outward to concrete consumer implementations.
|
||||||
|
|
||||||
|
## Conformance
|
||||||
|
|
||||||
|
A file conforms to PracticePattern v0.1 when its frontmatter validates against
|
||||||
|
the schema, all required body sections are present, its artifact index entry has
|
||||||
|
`kind: practice-pattern`, and every internal relationship target resolves.
|
||||||
|
|
||||||
|
Conformance does not imply that the practice is active or recommended. That is
|
||||||
|
expressed by lifecycle status and known-use evidence.
|
||||||
|
|
||||||
|
## Evolution
|
||||||
|
|
||||||
|
Version 0.1 establishes the smallest useful shared contract. Later versions may
|
||||||
|
add structured force, role, evidence, and known-use records after several
|
||||||
|
patterns demonstrate which structure is genuinely reusable.
|
||||||
|
|
@ -1,3 +1,19 @@
|
||||||
# Patterns
|
# Patterns
|
||||||
|
|
||||||
Reusable canon patterns live here.
|
Reusable canon patterns live here.
|
||||||
|
|
||||||
|
## PracticePattern language
|
||||||
|
|
||||||
|
PracticePatterns give recurring socio-technical practices stable, speakable
|
||||||
|
names. They follow the Alexander-inspired, Markdown-first contract in
|
||||||
|
[PracticePatternScheme](PracticePatternScheme.md). The current scheme is v0.1;
|
||||||
|
frontmatter is described by
|
||||||
|
[`practice-pattern.schema.yaml`](../schemas/practice-pattern.schema.yaml).
|
||||||
|
|
||||||
|
| PracticePattern | Status | Purpose |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| [InterfaceDeprecationStrangler](InterfaceDeprecationStrangler.md) | active | Phase out an interface through caller guidance, usage evidence, staged retirement, and an evidence-gated removal. |
|
||||||
|
|
||||||
|
The older [Intent Scope Purposes Pattern](intent-scope-purposes.md) predates the
|
||||||
|
PracticePattern v0.1 contract. It remains a candidate canon pattern and can be
|
||||||
|
migrated when its next substantive revision is made.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
schemas:
|
schemas:
|
||||||
- id: standard
|
- id: standard
|
||||||
path: standard.schema.yaml
|
path: standard.schema.yaml
|
||||||
|
- id: practice-pattern
|
||||||
|
path: practice-pattern.schema.yaml
|
||||||
- id: concept
|
- id: concept
|
||||||
path: concept.schema.yaml
|
path: concept.schema.yaml
|
||||||
- id: mapping
|
- id: mapping
|
||||||
|
|
|
||||||
54
infospace/schemas/practice-pattern.schema.yaml
Normal file
54
infospace/schemas/practice-pattern.schema.yaml
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
$schema: https://json-schema.org/draft/2020-12/schema
|
||||||
|
$id: https://info-tech-canon.local/schemas/practice-pattern.schema.yaml
|
||||||
|
title: InfoTechCanon PracticePattern frontmatter
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- id
|
||||||
|
- title
|
||||||
|
- type
|
||||||
|
- scheme
|
||||||
|
- status
|
||||||
|
- version
|
||||||
|
- summary
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: string
|
||||||
|
pattern: ^practice-pattern/[a-z0-9]+(?:-[a-z0-9]+)*$
|
||||||
|
title:
|
||||||
|
type: string
|
||||||
|
pattern: ^[A-Z][A-Za-z0-9]*$
|
||||||
|
type:
|
||||||
|
const: practice-pattern
|
||||||
|
scheme:
|
||||||
|
const: practice-pattern/0.1
|
||||||
|
status:
|
||||||
|
enum:
|
||||||
|
- draft
|
||||||
|
- candidate
|
||||||
|
- active
|
||||||
|
- deprecated
|
||||||
|
- retired
|
||||||
|
version:
|
||||||
|
type: string
|
||||||
|
pattern: ^[0-9]+\.[0-9]+(?:\.[0-9]+)?$
|
||||||
|
summary:
|
||||||
|
type: string
|
||||||
|
minLength: 1
|
||||||
|
aliases:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
uses:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
related_patterns:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
pattern: ^practice-pattern/
|
||||||
|
known_uses:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
additionalProperties: true
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
{
|
{
|
||||||
"details": {
|
"details": {
|
||||||
"artifact_count": 68,
|
"artifact_count": 70,
|
||||||
"relationship_count": 291
|
"relationship_count": 296
|
||||||
},
|
},
|
||||||
"errors": [],
|
"errors": [],
|
||||||
"metrics": {
|
"metrics": {
|
||||||
"coherence_components": 1.0,
|
"coherence_components": 1.0,
|
||||||
"consistency_cycles": 0.0,
|
"consistency_cycles": 0.0,
|
||||||
"coverage_ratio": 1.0,
|
"coverage_ratio": 1.0,
|
||||||
"granularity_entropy": 4.478787416971244,
|
"granularity_entropy": 4.566569747645274,
|
||||||
"redundancy_ratio": 0.0
|
"redundancy_ratio": 0.0
|
||||||
},
|
},
|
||||||
"ok": true,
|
"ok": true,
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
# By Concept
|
# By Concept
|
||||||
|
|
||||||
Concept count: **110**
|
Concept count: **114**
|
||||||
|
|
||||||
| Concept | Owner | Source |
|
| Concept | Owner | Source |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
|
|
@ -73,6 +73,7 @@ Concept count: **110**
|
||||||
| InfoTechCanon Task Model | `model/task` | `artifact_title` |
|
| InfoTechCanon Task Model | `model/task` | `artifact_title` |
|
||||||
| Intent Scope Purposes Pattern | `pattern/intent-scope-purposes` | `artifact_title` |
|
| Intent Scope Purposes Pattern | `pattern/intent-scope-purposes` | `artifact_title` |
|
||||||
| IntentScopePurposePattern | `pattern/intent-scope-purposes` | `frontmatter.owned_concepts` |
|
| IntentScopePurposePattern | `pattern/intent-scope-purposes` | `frontmatter.owned_concepts` |
|
||||||
|
| InterfaceDeprecationStrangler | `practice-pattern/interface-deprecation-strangler` | `artifact_title` |
|
||||||
| Intake and Assimilation Practice | `practice/intake-and-assimilation` | `artifact_title` |
|
| Intake and Assimilation Practice | `practice/intake-and-assimilation` | `artifact_title` |
|
||||||
| Small SaaS System Profile | `profile/small-saas` | `artifact_title` |
|
| Small SaaS System Profile | `profile/small-saas` | `artifact_title` |
|
||||||
| Canon Consumer Alignment Review Kit | `review-kit/alignment` | `artifact_title` |
|
| Canon Consumer Alignment Review Kit | `review-kit/alignment` | `artifact_title` |
|
||||||
|
|
@ -81,6 +82,9 @@ Concept count: **110**
|
||||||
| Canon Consumer Alignment Scorecard | `review-kit/alignment/scorecard` | `artifact_title` |
|
| Canon Consumer Alignment Scorecard | `review-kit/alignment/scorecard` | `artifact_title` |
|
||||||
| Canon Consumer Alignment Review Workflow | `review-kit/alignment/workflow` | `artifact_title` |
|
| Canon Consumer Alignment Review Workflow | `review-kit/alignment/workflow` | `artifact_title` |
|
||||||
| Consumer Alignment Workplan Template | `review-kit/alignment/workplan-template` | `artifact_title` |
|
| Consumer Alignment Workplan Template | `review-kit/alignment/workplan-template` | `artifact_title` |
|
||||||
|
| PracticePattern Scheme | `scheme/practice-pattern` | `artifact_title` |
|
||||||
|
| PracticePattern | `scheme/practice-pattern` | `frontmatter.owned_concepts` |
|
||||||
|
| PatternLanguage | `scheme/practice-pattern` | `frontmatter.owned_concepts` |
|
||||||
| Namespace Per Tenant Control | `small-saas/control/namespace-per-tenant` | `artifact_title` |
|
| Namespace Per Tenant Control | `small-saas/control/namespace-per-tenant` | `artifact_title` |
|
||||||
| Subscription Ledger Dataset | `small-saas/dataset/subscription-ledger` | `artifact_title` |
|
| Subscription Ledger Dataset | `small-saas/dataset/subscription-ledger` | `artifact_title` |
|
||||||
| Production Deployment | `small-saas/deployment/production` | `artifact_title` |
|
| Production Deployment | `small-saas/deployment/production` | `artifact_title` |
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,7 @@
|
||||||
- `practice/intake-and-assimilation` via `conforms_to`
|
- `practice/intake-and-assimilation` via `conforms_to`
|
||||||
- `profile/small-saas` via `conforms_to`
|
- `profile/small-saas` via `conforms_to`
|
||||||
- `review-kit/alignment` via `conforms_to`
|
- `review-kit/alignment` via `conforms_to`
|
||||||
|
- `scheme/practice-pattern` via `conforms_to`
|
||||||
- `standard/caring` via `conforms_to`
|
- `standard/caring` via `conforms_to`
|
||||||
- `standard/repository-layout` via `conforms_to`
|
- `standard/repository-layout` via `conforms_to`
|
||||||
- `standard/tagging` via `conforms_to`
|
- `standard/tagging` via `conforms_to`
|
||||||
|
|
@ -131,6 +132,7 @@
|
||||||
- `conformance/railiance-fabric/entity-edge-capture-criteria` via `uses`
|
- `conformance/railiance-fabric/entity-edge-capture-criteria` via `uses`
|
||||||
- `conformance/railiance-fabric/mapping-expectations` via `maps`
|
- `conformance/railiance-fabric/mapping-expectations` via `maps`
|
||||||
- `kernel/itc-kernel-map` via `maps`
|
- `kernel/itc-kernel-map` via `maps`
|
||||||
|
- `practice-pattern/interface-deprecation-strangler` via `uses`
|
||||||
- `profile/small-saas` via `requires`
|
- `profile/small-saas` via `requires`
|
||||||
- `review-kit/alignment/model-selection-guide` via `uses`
|
- `review-kit/alignment/model-selection-guide` via `uses`
|
||||||
- `small-saas/deployment/production` via `uses`
|
- `small-saas/deployment/production` via `uses`
|
||||||
|
|
@ -159,6 +161,7 @@
|
||||||
- `model/data` via `uses`
|
- `model/data` via `uses`
|
||||||
- `model/purpose-demand-extension` via `extends`
|
- `model/purpose-demand-extension` via `extends`
|
||||||
- `pattern/intent-scope-purposes` via `uses`
|
- `pattern/intent-scope-purposes` via `uses`
|
||||||
|
- `practice-pattern/interface-deprecation-strangler` via `uses`
|
||||||
- `profile/small-saas` via `requires`
|
- `profile/small-saas` via `requires`
|
||||||
- `review-kit/alignment` via `uses`
|
- `review-kit/alignment` via `uses`
|
||||||
- `review-kit/alignment/model-selection-guide` via `uses`
|
- `review-kit/alignment/model-selection-guide` via `uses`
|
||||||
|
|
@ -211,6 +214,7 @@
|
||||||
- `conformance/railiance-fabric/mapping-expectations` via `maps`
|
- `conformance/railiance-fabric/mapping-expectations` via `maps`
|
||||||
- `kernel/itc-kernel-map` via `maps`
|
- `kernel/itc-kernel-map` via `maps`
|
||||||
- `model/capability` via `uses`
|
- `model/capability` via `uses`
|
||||||
|
- `practice-pattern/interface-deprecation-strangler` via `uses`
|
||||||
- `profile/small-saas` via `requires`
|
- `profile/small-saas` via `requires`
|
||||||
- `review-kit/alignment/model-selection-guide` via `uses`
|
- `review-kit/alignment/model-selection-guide` via `uses`
|
||||||
- `small-saas/evidence/access-review-2026-05` via `uses`
|
- `small-saas/evidence/access-review-2026-05` via `uses`
|
||||||
|
|
@ -335,6 +339,10 @@
|
||||||
- `review-kit/alignment/workflow` via `part_of`
|
- `review-kit/alignment/workflow` via `part_of`
|
||||||
- `review-kit/alignment/workplan-template` via `part_of`
|
- `review-kit/alignment/workplan-template` via `part_of`
|
||||||
|
|
||||||
|
## `scheme/practice-pattern`
|
||||||
|
|
||||||
|
- `practice-pattern/interface-deprecation-strangler` via `conforms_to`
|
||||||
|
|
||||||
## `small-saas/control/namespace-per-tenant`
|
## `small-saas/control/namespace-per-tenant`
|
||||||
|
|
||||||
- `small-saas/deployment/production` via `implements`
|
- `small-saas/deployment/production` via `implements`
|
||||||
|
|
|
||||||
|
|
@ -2,73 +2,75 @@
|
||||||
|
|
||||||
# Import Matrix
|
# Import Matrix
|
||||||
|
|
||||||
| Artifact | `assimilation/it-capability-canon` | `benchmark/caring/kubernetes-rbac` | `benchmark/caring/kubernetes-rbac/access-descriptors` | `benchmark/caring/kubernetes-rbac/caring-mapping` | `benchmark/caring/kubernetes-rbac/findings` | `benchmark/caring/kubernetes-rbac/native-concepts` | `capability-catalog/itc-cap` | `catalog/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` |
|
| 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-pattern/interface-deprecation-strangler` | `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` | `scheme/practice-pattern` | `small-saas/control/namespace-per-tenant` | `small-saas/dataset/subscription-ledger` | `small-saas/deployment/production` | `small-saas/evidence/access-review-2026-05` | `small-saas/incident/cross-tenant-access-attempt` | `small-saas/policy/tenant-isolation` | `small-saas/service/billing-portal` | `small-saas/system/billing-system` | `small-saas/task/onboard-tenant` | `small-saas/team/platform` | `small-saas/tenant/acme` | `small-saas/tenant/globex` | `small-saas/user/ada-admin` | `standard/caring` | `standard/repository-layout` | `standard/tagging` |
|
||||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||||
| `assimilation/it-capability-canon` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `assimilation/it-capability-canon` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `benchmark/caring/kubernetes-rbac` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | `uses` |
|
| `benchmark/caring/kubernetes-rbac` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | `uses` |
|
||||||
| `benchmark/caring/kubernetes-rbac/access-descriptors` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
|
| `benchmark/caring/kubernetes-rbac/access-descriptors` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
|
||||||
| `benchmark/caring/kubernetes-rbac/caring-mapping` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | |
|
| `benchmark/caring/kubernetes-rbac/caring-mapping` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | |
|
||||||
| `benchmark/caring/kubernetes-rbac/findings` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | | | | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | |
|
| `benchmark/caring/kubernetes-rbac/findings` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | | | | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | |
|
||||||
| `benchmark/caring/kubernetes-rbac/native-concepts` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | |
|
| `benchmark/caring/kubernetes-rbac/native-concepts` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | |
|
||||||
| `capability-catalog/itc-cap` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `capability-catalog/itc-cap` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `catalog/attribute-value-types` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `catalog/attribute-value-types` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `catalog/evidence-basis` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `catalog/evidence-basis` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `comparison/repo-scoping/canon-benefit-analysis` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `maps` | `maps` | | | | | `maps` | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | `maps` |
|
| `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/consumer-workplan-brief` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `comparison/repo-scoping/extension-candidates` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `proposes` | `proposes` | | | | | `proposes` | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `comparison/repo-scoping/extension-candidates` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `proposes` | `proposes` | | | | | `proposes` | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `comparison/repo-scoping/frame` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `comparison/repo-scoping/frame` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `comparison/repo-scoping/report` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | | `compares` | | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `comparison/repo-scoping/report` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | | `compares` | | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `concept-catalog/purpose-demand` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `concept-catalog/purpose-demand` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `conformance/railiance-fabric` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `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/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/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/mapping-expectations` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | `maps` | `maps` | `maps` | | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `conformance/railiance-fabric/visualization-examples` | | | | | | | | | | | | | | | | `part_of` | | `illustrates` | `illustrates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `conformance/railiance-fabric/visualization-examples` | | | | | | | | | | | | | | | | `part_of` | | `illustrates` | `illustrates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `evaluation/user-engine` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | `evaluates` | | | | | | | | | | | | | | | | | | | | `uses` | | |
|
| `evaluation/user-engine` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | `uses` | | |
|
||||||
| `evaluation/user-engine/consumer-workplan-brief` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `evaluation/user-engine/consumer-workplan-brief` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `evaluation/user-engine/interface-card-expectations` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `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/questions` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `evaluation/user-engine/small-saas-alignment` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | `uses` | | | | `uses` | | | | | `uses` | | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | | |
|
| `evaluation/user-engine/small-saas-alignment` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | `uses` | | | | `uses` | | | | | `uses` | | | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `example/consumer-purpose-portfolio` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `illustrates` | | | `illustrates` | | `uses` | | | | | | | | | | | | | | | | | | | | | | |
|
| `example/consumer-purpose-portfolio` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `illustrates` | | | `illustrates` | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `kernel/itc-kernel-map` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | `maps` | | `maps` |
|
| `kernel/itc-kernel-map` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | `maps` |
|
||||||
| `mapping/capability-anchors` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `mapping/capability-anchors` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `mapping/purpose-demand-governance-candidates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `mapping/purpose-demand-governance-candidates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/access-control` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/access-control` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/capability` | `derived_from` | | | | | | `introduces` | | `uses` | | | | | | | | | | | | | | | | | | `conforms_to` | | `introduces` | | | | | | `uses` | | `uses` | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/capability` | `derived_from` | | | | | | `introduces` | | `uses` | | | | | | | | | | | | | | | | | | `conforms_to` | | `introduces` | | | | | | `uses` | | `uses` | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/data` | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/data` | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/devsecops` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/devsecops` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/governance` | | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/governance` | | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/information-space` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/information-space` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/landscape` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/landscape` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/network` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/network` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/observability` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/observability` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/organization` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/organization` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/purpose-demand-extension` | | | | | | | | | | | | | | | `introduces` | | | | | | | | | | | | `conforms_to` | | | | | | | | `extends` | `uses` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/purpose-demand-extension` | | | | | | | | | | | | | | | `introduces` | | | | | | | | | | | | `conforms_to` | | | | | | | | `extends` | `uses` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/security` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/security` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `model/task` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `model/task` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `pattern/intent-scope-purposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `implements` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `pattern/intent-scope-purposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `implements` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `practice/intake-and-assimilation` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `practice-pattern/interface-deprecation-strangler` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | `uses` | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | |
|
||||||
| `profile/small-saas` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `requires` | | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | | | | | | | | | | | | | | | | | | | | | | | `requires` | | `requires` |
|
| `practice/intake-and-assimilation` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `review-kit/alignment` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
|
| `profile/small-saas` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `requires` | | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | | | | | | | | | | | | | | | | | | | | | | | | | `requires` | | `requires` |
|
||||||
| `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` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | |
|
||||||
| `review-kit/alignment/schema` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
|
| `review-kit/alignment/model-selection-guide` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | | | | `uses` | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` |
|
||||||
| `review-kit/alignment/scorecard` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
|
| `review-kit/alignment/schema` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `review-kit/alignment/workflow` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
|
| `review-kit/alignment/scorecard` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `review-kit/alignment/workplan-template` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | |
|
| `review-kit/alignment/workflow` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `small-saas/control/namespace-per-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | | | | `evidenced_by` | | | | | | | | | | `uses` | | |
|
| `review-kit/alignment/workplan-template` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `small-saas/dataset/subscription-ledger` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | `instantiates` | | | | | | | | | | | | `governed_by` | `owned_by` | | | | `partitioned_for` | `partitioned_for` | | | | |
|
| `scheme/practice-pattern` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `small-saas/deployment/production` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `uses` | | | | | | | | `instantiates` | | | | | | | `implements` | | | | | | `deploys` | | | | `separates` | `separates` | | | | |
|
| `small-saas/control/namespace-per-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | `instantiates` | | | | | | | | | | | `evidenced_by` | | | | | | | | | | `uses` | | |
|
||||||
| `small-saas/evidence/access-review-2026-05` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | |
|
| `small-saas/dataset/subscription-ledger` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | `instantiates` | | | | | | | | | | | | | `governed_by` | `owned_by` | | | | `partitioned_for` | `partitioned_for` | | | | |
|
||||||
| `small-saas/incident/cross-tenant-access-attempt` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | `constrained_by` | | | `evidenced_by` | | | | | | | | | | | | |
|
| `small-saas/deployment/production` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | `implements` | | | | | | `deploys` | | | | `separates` | `separates` | | | | |
|
||||||
| `small-saas/policy/tenant-isolation` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | `instantiates` | | | | | | | `requires` | | | `evidenced_by` | | | | | | | | | | | | |
|
| `small-saas/evidence/access-review-2026-05` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `small-saas/service/billing-portal` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | `part_of` | | `owned_by` | | | | | | |
|
| `small-saas/incident/cross-tenant-access-attempt` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | `instantiates` | | | | | | | | `constrained_by` | | | `evidenced_by` | | | | | | | | | | | | |
|
||||||
| `small-saas/system/billing-system` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | `serves` | `serves` | | | | |
|
| `small-saas/policy/tenant-isolation` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | `instantiates` | | | | | | | | `requires` | | | `evidenced_by` | | | | | | | | | | | | |
|
||||||
| `small-saas/task/onboard-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `instantiates` | | | | | | | | | | | | `governed_by` | | | | `owned_by` | `changes` | | | | | |
|
| `small-saas/service/billing-portal` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | `part_of` | | `owned_by` | | | | | | |
|
||||||
| `small-saas/team/platform` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | |
|
| `small-saas/system/billing-system` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | `serves` | `serves` | | | | |
|
||||||
| `small-saas/tenant/acme` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | `represented_by` | | | |
|
| `small-saas/task/onboard-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | | | | | | | `governed_by` | | | | `owned_by` | `changes` | | | | | |
|
||||||
| `small-saas/tenant/globex` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | `isolated_by` | | | | | | | | | | | | | | | |
|
| `small-saas/team/platform` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
| `small-saas/user/ada-admin` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | `access_evidenced_by` | | `has_access_under` | | | | `member_of` | | | | | | |
|
| `small-saas/tenant/acme` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | `instantiates` | | | | | | | | `isolated_by` | | | | | | | | | | | | `represented_by` | | | |
|
||||||
| `standard/caring` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `imports` | | `imports` | `imports` | `imports` | | | `imports` | `imports` | `imports` | | `imports` | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | `imports` |
|
| `small-saas/tenant/globex` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | `instantiates` | | | | | | | | `isolated_by` | | | | | | | | | | | | | | | |
|
||||||
| `standard/repository-layout` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `imports` | `imports` | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `small-saas/user/ada-admin` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `uses` | | | | | | | `instantiates` | | | | | | | | | | | `access_evidenced_by` | | `has_access_under` | | | | `member_of` | | | | | | |
|
||||||
| `standard/tagging` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | |
|
| `standard/caring` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `imports` | | `imports` | `imports` | `imports` | | | `imports` | `imports` | `imports` | | `imports` | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | `imports` |
|
||||||
|
| `standard/repository-layout` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `imports` | `imports` | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| `standard/tagging` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
# Kernel Overview
|
# Kernel Overview
|
||||||
|
|
||||||
- Infospace: `canon`
|
- Infospace: `canon`
|
||||||
- Artifacts: 68
|
- Artifacts: 70
|
||||||
|
|
||||||
## Artifact Kinds
|
## Artifact Kinds
|
||||||
|
|
||||||
|
|
@ -39,6 +39,8 @@
|
||||||
- `native-concept-map`: 1
|
- `native-concept-map`: 1
|
||||||
- `pattern`: 1
|
- `pattern`: 1
|
||||||
- `practice`: 1
|
- `practice`: 1
|
||||||
|
- `practice-pattern`: 1
|
||||||
|
- `practice-pattern-scheme`: 1
|
||||||
- `profile`: 1
|
- `profile`: 1
|
||||||
- `profile-alignment`: 1
|
- `profile-alignment`: 1
|
||||||
- `profile-artifact`: 13
|
- `profile-artifact`: 13
|
||||||
|
|
@ -50,7 +52,7 @@
|
||||||
- `access_evidenced_by`: 1
|
- `access_evidenced_by`: 1
|
||||||
- `changes`: 1
|
- `changes`: 1
|
||||||
- `compares`: 1
|
- `compares`: 1
|
||||||
- `conforms_to`: 22
|
- `conforms_to`: 24
|
||||||
- `constrained_by`: 1
|
- `constrained_by`: 1
|
||||||
- `deploys`: 1
|
- `deploys`: 1
|
||||||
- `derived_from`: 1
|
- `derived_from`: 1
|
||||||
|
|
@ -76,4 +78,4 @@
|
||||||
- `separates`: 2
|
- `separates`: 2
|
||||||
- `serves`: 2
|
- `serves`: 2
|
||||||
- `stress_tests`: 6
|
- `stress_tests`: 6
|
||||||
- `uses`: 118
|
- `uses`: 121
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
# Repository Tree
|
# Repository Tree
|
||||||
|
|
||||||
File count: **175**
|
File count: **190**
|
||||||
|
|
||||||
- `README.md`
|
- `README.md`
|
||||||
- `agent/README.md`
|
- `agent/README.md`
|
||||||
|
|
@ -11,6 +11,8 @@ File count: **175**
|
||||||
- `agent/briefs/benchmark-caring-kubernetes-rbac-findings.md`
|
- `agent/briefs/benchmark-caring-kubernetes-rbac-findings.md`
|
||||||
- `agent/briefs/benchmark-caring-kubernetes-rbac-native-concepts.md`
|
- `agent/briefs/benchmark-caring-kubernetes-rbac-native-concepts.md`
|
||||||
- `agent/briefs/benchmark-caring-kubernetes-rbac.md`
|
- `agent/briefs/benchmark-caring-kubernetes-rbac.md`
|
||||||
|
- `agent/briefs/catalog-attribute-value-types.md`
|
||||||
|
- `agent/briefs/catalog-evidence-basis.md`
|
||||||
- `agent/briefs/comparison-repo-scoping-canon-benefit-analysis.md`
|
- `agent/briefs/comparison-repo-scoping-canon-benefit-analysis.md`
|
||||||
- `agent/briefs/comparison-repo-scoping-consumer-workplan-brief.md`
|
- `agent/briefs/comparison-repo-scoping-consumer-workplan-brief.md`
|
||||||
- `agent/briefs/comparison-repo-scoping-extension-candidates.md`
|
- `agent/briefs/comparison-repo-scoping-extension-candidates.md`
|
||||||
|
|
@ -30,6 +32,7 @@ File count: **175**
|
||||||
- `agent/briefs/example-consumer-purpose-portfolio.md`
|
- `agent/briefs/example-consumer-purpose-portfolio.md`
|
||||||
- `agent/briefs/kernel-itc-core.md`
|
- `agent/briefs/kernel-itc-core.md`
|
||||||
- `agent/briefs/kernel-itc-kernel-map.md`
|
- `agent/briefs/kernel-itc-kernel-map.md`
|
||||||
|
- `agent/briefs/mapping-capability-anchors.md`
|
||||||
- `agent/briefs/mapping-purpose-demand-governance-candidates.md`
|
- `agent/briefs/mapping-purpose-demand-governance-candidates.md`
|
||||||
- `agent/briefs/model-access-control.md`
|
- `agent/briefs/model-access-control.md`
|
||||||
- `agent/briefs/model-capability.md`
|
- `agent/briefs/model-capability.md`
|
||||||
|
|
@ -45,6 +48,7 @@ File count: **175**
|
||||||
- `agent/briefs/model-security.md`
|
- `agent/briefs/model-security.md`
|
||||||
- `agent/briefs/model-task.md`
|
- `agent/briefs/model-task.md`
|
||||||
- `agent/briefs/pattern-intent-scope-purposes.md`
|
- `agent/briefs/pattern-intent-scope-purposes.md`
|
||||||
|
- `agent/briefs/practice-pattern-interface-deprecation-strangler.md`
|
||||||
- `agent/briefs/profile-small-saas.md`
|
- `agent/briefs/profile-small-saas.md`
|
||||||
- `agent/briefs/review-kit-alignment-model-selection-guide.md`
|
- `agent/briefs/review-kit-alignment-model-selection-guide.md`
|
||||||
- `agent/briefs/review-kit-alignment-schema.md`
|
- `agent/briefs/review-kit-alignment-schema.md`
|
||||||
|
|
@ -52,6 +56,7 @@ File count: **175**
|
||||||
- `agent/briefs/review-kit-alignment-workflow.md`
|
- `agent/briefs/review-kit-alignment-workflow.md`
|
||||||
- `agent/briefs/review-kit-alignment-workplan-template.md`
|
- `agent/briefs/review-kit-alignment-workplan-template.md`
|
||||||
- `agent/briefs/review-kit-alignment.md`
|
- `agent/briefs/review-kit-alignment.md`
|
||||||
|
- `agent/briefs/scheme-practice-pattern.md`
|
||||||
- `agent/briefs/standard-caring.md`
|
- `agent/briefs/standard-caring.md`
|
||||||
- `agent/briefs/standard-repository-layout.md`
|
- `agent/briefs/standard-repository-layout.md`
|
||||||
- `agent/briefs/standard-tagging.md`
|
- `agent/briefs/standard-tagging.md`
|
||||||
|
|
@ -115,14 +120,18 @@ File count: **175**
|
||||||
- `kernel/InfoTechCanonCore.md`
|
- `kernel/InfoTechCanonCore.md`
|
||||||
- `kernel/InfoTechCanonKernelMap.md`
|
- `kernel/InfoTechCanonKernelMap.md`
|
||||||
- `mappings/README.md`
|
- `mappings/README.md`
|
||||||
|
- `mappings/capability-anchors.yaml`
|
||||||
- `mappings/purpose-demand-governance-candidates.yaml`
|
- `mappings/purpose-demand-governance-candidates.yaml`
|
||||||
- `models/access-control/InfoTechCanonAccessControlModel.md`
|
- `models/access-control/InfoTechCanonAccessControlModel.md`
|
||||||
- `models/capability/InfoTechCanonCapabilityModel.md`
|
- `models/capability/InfoTechCanonCapabilityModel.md`
|
||||||
- `models/capability/capabilities.yaml`
|
- `models/capability/capabilities.yaml`
|
||||||
- `models/data/InfoTechCanonDataModel.md`
|
- `models/data/InfoTechCanonDataModel.md`
|
||||||
|
- `models/data/attribute-value-types-alignment.md`
|
||||||
|
- `models/data/attribute-value-types.yaml`
|
||||||
- `models/devsecops/InfoTechCanonDevSecOpsModel.md`
|
- `models/devsecops/InfoTechCanonDevSecOpsModel.md`
|
||||||
- `models/governance/InfoTechCanonGovernanceModel.md`
|
- `models/governance/InfoTechCanonGovernanceModel.md`
|
||||||
- `models/governance/InfoTechCanonPurposeDemandExtension.md`
|
- `models/governance/InfoTechCanonPurposeDemandExtension.md`
|
||||||
|
- `models/governance/evidence-basis.yaml`
|
||||||
- `models/information-space/InfoTechCanonInformationSpaceModel.md`
|
- `models/information-space/InfoTechCanonInformationSpaceModel.md`
|
||||||
- `models/landscape/InfoTechCanonLandscapeModel.md`
|
- `models/landscape/InfoTechCanonLandscapeModel.md`
|
||||||
- `models/network/InfoTechCanonNetworkModel.md`
|
- `models/network/InfoTechCanonNetworkModel.md`
|
||||||
|
|
@ -130,6 +139,8 @@ File count: **175**
|
||||||
- `models/organization/InfoTechCanonOrganizationModel.md`
|
- `models/organization/InfoTechCanonOrganizationModel.md`
|
||||||
- `models/security/InfoTechCanonSecurityModel.md`
|
- `models/security/InfoTechCanonSecurityModel.md`
|
||||||
- `models/task/InfoTechCanonTaskModel.md`
|
- `models/task/InfoTechCanonTaskModel.md`
|
||||||
|
- `patterns/InterfaceDeprecationStrangler.md`
|
||||||
|
- `patterns/PracticePatternScheme.md`
|
||||||
- `patterns/README.md`
|
- `patterns/README.md`
|
||||||
- `patterns/intent-scope-purposes.md`
|
- `patterns/intent-scope-purposes.md`
|
||||||
- `profiles/README.md`
|
- `profiles/README.md`
|
||||||
|
|
@ -153,10 +164,14 @@ File count: **175**
|
||||||
- `schemas/agent-brief.schema.yaml`
|
- `schemas/agent-brief.schema.yaml`
|
||||||
- `schemas/alignment-review.schema.yaml`
|
- `schemas/alignment-review.schema.yaml`
|
||||||
- `schemas/assimilation.schema.yaml`
|
- `schemas/assimilation.schema.yaml`
|
||||||
|
- `schemas/attribute-value-type.schema.yaml`
|
||||||
|
- `schemas/capability-record.schema.yaml`
|
||||||
|
- `schemas/capability.schema.yaml`
|
||||||
- `schemas/concept.schema.yaml`
|
- `schemas/concept.schema.yaml`
|
||||||
- `schemas/index.yaml`
|
- `schemas/index.yaml`
|
||||||
- `schemas/interface-card.schema.yaml`
|
- `schemas/interface-card.schema.yaml`
|
||||||
- `schemas/mapping.schema.yaml`
|
- `schemas/mapping.schema.yaml`
|
||||||
|
- `schemas/practice-pattern.schema.yaml`
|
||||||
- `schemas/profile.schema.yaml`
|
- `schemas/profile.schema.yaml`
|
||||||
- `schemas/standard.schema.yaml`
|
- `schemas/standard.schema.yaml`
|
||||||
- `schemas/workplan.schema.yaml`
|
- `schemas/workplan.schema.yaml`
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,8 @@ RETRIEVAL_ARTIFACT_KINDS = {
|
||||||
"model-selection-guide",
|
"model-selection-guide",
|
||||||
"native-concept-map",
|
"native-concept-map",
|
||||||
"pattern",
|
"pattern",
|
||||||
|
"practice-pattern",
|
||||||
|
"practice-pattern-scheme",
|
||||||
"profile-alignment",
|
"profile-alignment",
|
||||||
"profile",
|
"profile",
|
||||||
"standard",
|
"standard",
|
||||||
|
|
@ -46,6 +48,14 @@ RETRIEVAL_ARTIFACT_KINDS = {
|
||||||
}
|
}
|
||||||
CONSUMER_BRIEF_IDS = ("user-engine", "railiance-fabric", "repo-scoping")
|
CONSUMER_BRIEF_IDS = ("user-engine", "railiance-fabric", "repo-scoping")
|
||||||
COMMON_DISTINCTIONS = [
|
COMMON_DISTINCTIONS = [
|
||||||
|
{
|
||||||
|
"id": "interface-deprecation-retirement-removal",
|
||||||
|
"title": "Interface deprecation vs retirement vs removal",
|
||||||
|
"summary": "Deprecation guides and observes callers, retirement ends legacy behavior while retaining a metered tombstone, and removal deletes that tombstone only after the evidence gate passes.",
|
||||||
|
"source_artifacts": [
|
||||||
|
"practice-pattern/interface-deprecation-strangler",
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "actor-subject-principal",
|
"id": "actor-subject-principal",
|
||||||
"title": "Actor vs Subject vs Principal",
|
"title": "Actor vs Subject vs Principal",
|
||||||
|
|
@ -934,6 +944,10 @@ def _summary_for_artifact(artifact: Any) -> str:
|
||||||
return f"Native source concept map for assimilation or benchmark work: {artifact.title}."
|
return f"Native source concept map for assimilation or benchmark work: {artifact.title}."
|
||||||
if artifact.kind == "pattern":
|
if artifact.kind == "pattern":
|
||||||
return f"Reusable canon pattern: {artifact.title}."
|
return f"Reusable canon pattern: {artifact.title}."
|
||||||
|
if artifact.kind == "practice-pattern":
|
||||||
|
return f"Reusable canon PracticePattern: {artifact.title}."
|
||||||
|
if artifact.kind == "practice-pattern-scheme":
|
||||||
|
return f"Contract for canon PracticePattern artifacts: {artifact.title}."
|
||||||
if artifact.kind == "profile-alignment":
|
if artifact.kind == "profile-alignment":
|
||||||
return f"Profile-specific evaluation alignment artifact: {artifact.title}."
|
return f"Profile-specific evaluation alignment artifact: {artifact.title}."
|
||||||
if artifact.kind == "visualization-example-set":
|
if artifact.kind == "visualization-example-set":
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import re
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
|
@ -54,6 +55,7 @@ REQUIRED_SCHEMAS = (
|
||||||
"capability.schema.yaml",
|
"capability.schema.yaml",
|
||||||
"capability-record.schema.yaml",
|
"capability-record.schema.yaml",
|
||||||
"attribute-value-type.schema.yaml",
|
"attribute-value-type.schema.yaml",
|
||||||
|
"practice-pattern.schema.yaml",
|
||||||
)
|
)
|
||||||
|
|
||||||
RETRIEVAL_BRIEF_KINDS = {
|
RETRIEVAL_BRIEF_KINDS = {
|
||||||
|
|
@ -85,6 +87,8 @@ RETRIEVAL_BRIEF_KINDS = {
|
||||||
"model-selection-guide",
|
"model-selection-guide",
|
||||||
"native-concept-map",
|
"native-concept-map",
|
||||||
"pattern",
|
"pattern",
|
||||||
|
"practice-pattern",
|
||||||
|
"practice-pattern-scheme",
|
||||||
"profile-alignment",
|
"profile-alignment",
|
||||||
"profile",
|
"profile",
|
||||||
"standard",
|
"standard",
|
||||||
|
|
@ -348,6 +352,43 @@ ALIGNMENT_REVIEW_TEMPLATE_MARKERS = {
|
||||||
"## Canon Feedback",
|
"## Canon Feedback",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PRACTICE_PATTERN_REQUIRED_FRONTMATTER = {
|
||||||
|
"id",
|
||||||
|
"title",
|
||||||
|
"type",
|
||||||
|
"scheme",
|
||||||
|
"status",
|
||||||
|
"version",
|
||||||
|
"summary",
|
||||||
|
}
|
||||||
|
|
||||||
|
PRACTICE_PATTERN_STATUSES = {
|
||||||
|
"draft",
|
||||||
|
"candidate",
|
||||||
|
"active",
|
||||||
|
"deprecated",
|
||||||
|
"retired",
|
||||||
|
}
|
||||||
|
|
||||||
|
PRACTICE_PATTERN_REQUIRED_HEADINGS = {
|
||||||
|
"## Intent",
|
||||||
|
"## Context",
|
||||||
|
"## Problem",
|
||||||
|
"## Forces",
|
||||||
|
"## Solution",
|
||||||
|
"## Dynamics",
|
||||||
|
"## Invariants",
|
||||||
|
"## Evidence",
|
||||||
|
"## Consequences",
|
||||||
|
"## Known Uses",
|
||||||
|
}
|
||||||
|
|
||||||
|
PRACTICE_PATTERN_ID_RE = re.compile(
|
||||||
|
r"^practice-pattern/[a-z0-9]+(?:-[a-z0-9]+)*$"
|
||||||
|
)
|
||||||
|
PRACTICE_PATTERN_TITLE_RE = re.compile(r"^[A-Z][A-Za-z0-9]*$")
|
||||||
|
PRACTICE_PATTERN_VERSION_RE = re.compile(r"^[0-9]+\.[0-9]+(?:\.[0-9]+)?$")
|
||||||
|
|
||||||
|
|
||||||
def structural_checks(context: Any) -> dict[str, list[dict[str, Any]]]:
|
def structural_checks(context: Any) -> dict[str, list[dict[str, Any]]]:
|
||||||
errors: list[dict[str, Any]] = []
|
errors: list[dict[str, Any]] = []
|
||||||
|
|
@ -359,6 +400,11 @@ def structural_checks(context: Any) -> dict[str, list[dict[str, Any]]]:
|
||||||
_check_capability_catalog(errors)
|
_check_capability_catalog(errors)
|
||||||
_check_canon_paths(context.repo_root, context.infospace_root, errors)
|
_check_canon_paths(context.repo_root, context.infospace_root, errors)
|
||||||
_check_artifact_index(context.repo_root, context.infospace_root, errors)
|
_check_artifact_index(context.repo_root, context.infospace_root, errors)
|
||||||
|
_check_practice_pattern_assets(
|
||||||
|
context.infospace_root,
|
||||||
|
context.infospace.artifacts,
|
||||||
|
errors,
|
||||||
|
)
|
||||||
_check_agent_assets(context.infospace_root, context.infospace.artifacts, errors)
|
_check_agent_assets(context.infospace_root, context.infospace.artifacts, errors)
|
||||||
_check_purpose_demand_assets(context.infospace_root, context.infospace.artifacts, errors)
|
_check_purpose_demand_assets(context.infospace_root, context.infospace.artifacts, errors)
|
||||||
_check_user_engine_evaluation_assets(
|
_check_user_engine_evaluation_assets(
|
||||||
|
|
@ -391,6 +437,140 @@ def structural_checks(context: Any) -> dict[str, list[dict[str, Any]]]:
|
||||||
return {"errors": errors, "warnings": warnings}
|
return {"errors": errors, "warnings": warnings}
|
||||||
|
|
||||||
|
|
||||||
|
def _check_practice_pattern_assets(
|
||||||
|
infospace_root: Path,
|
||||||
|
artifacts: list[Any],
|
||||||
|
errors: list[dict[str, Any]],
|
||||||
|
) -> None:
|
||||||
|
for artifact in artifacts:
|
||||||
|
if artifact.kind != "practice-pattern":
|
||||||
|
continue
|
||||||
|
|
||||||
|
path = infospace_root / artifact.path
|
||||||
|
frontmatter = _read_markdown_frontmatter(path, errors)
|
||||||
|
missing_fields = sorted(
|
||||||
|
PRACTICE_PATTERN_REQUIRED_FRONTMATTER - set(frontmatter)
|
||||||
|
)
|
||||||
|
if missing_fields:
|
||||||
|
errors.append(
|
||||||
|
{
|
||||||
|
"code": "practice_pattern_missing_frontmatter",
|
||||||
|
"artifact_id": artifact.id,
|
||||||
|
"path": artifact.path,
|
||||||
|
"fields": missing_fields,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
expected = {
|
||||||
|
"id": artifact.id,
|
||||||
|
"title": artifact.title,
|
||||||
|
"type": "practice-pattern",
|
||||||
|
"scheme": "practice-pattern/0.1",
|
||||||
|
}
|
||||||
|
for field, value in expected.items():
|
||||||
|
if frontmatter.get(field) != value:
|
||||||
|
errors.append(
|
||||||
|
{
|
||||||
|
"code": "practice_pattern_frontmatter_mismatch",
|
||||||
|
"artifact_id": artifact.id,
|
||||||
|
"path": artifact.path,
|
||||||
|
"field": field,
|
||||||
|
"expected": value,
|
||||||
|
"actual": frontmatter.get(field),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
status = frontmatter.get("status")
|
||||||
|
if status not in PRACTICE_PATTERN_STATUSES:
|
||||||
|
errors.append(
|
||||||
|
{
|
||||||
|
"code": "practice_pattern_invalid_status",
|
||||||
|
"artifact_id": artifact.id,
|
||||||
|
"path": artifact.path,
|
||||||
|
"status": status,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
scalar_contracts = (
|
||||||
|
("id", PRACTICE_PATTERN_ID_RE),
|
||||||
|
("title", PRACTICE_PATTERN_TITLE_RE),
|
||||||
|
("version", PRACTICE_PATTERN_VERSION_RE),
|
||||||
|
)
|
||||||
|
for field, pattern in scalar_contracts:
|
||||||
|
value = frontmatter.get(field)
|
||||||
|
if not isinstance(value, str) or pattern.fullmatch(value) is None:
|
||||||
|
errors.append(
|
||||||
|
{
|
||||||
|
"code": "practice_pattern_invalid_frontmatter_value",
|
||||||
|
"artifact_id": artifact.id,
|
||||||
|
"path": artifact.path,
|
||||||
|
"field": field,
|
||||||
|
"value": value,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
summary = frontmatter.get("summary")
|
||||||
|
if not isinstance(summary, str) or not summary.strip():
|
||||||
|
errors.append(
|
||||||
|
{
|
||||||
|
"code": "practice_pattern_invalid_frontmatter_value",
|
||||||
|
"artifact_id": artifact.id,
|
||||||
|
"path": artifact.path,
|
||||||
|
"field": "summary",
|
||||||
|
"value": summary,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
for field in ("aliases", "uses", "related_patterns", "known_uses"):
|
||||||
|
value = frontmatter.get(field, [])
|
||||||
|
if not isinstance(value, list) or not all(
|
||||||
|
isinstance(item, str) for item in value
|
||||||
|
):
|
||||||
|
errors.append(
|
||||||
|
{
|
||||||
|
"code": "practice_pattern_invalid_frontmatter_value",
|
||||||
|
"artifact_id": artifact.id,
|
||||||
|
"path": artifact.path,
|
||||||
|
"field": field,
|
||||||
|
"value": value,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
related_patterns = frontmatter.get("related_patterns", [])
|
||||||
|
if isinstance(related_patterns, list):
|
||||||
|
for related in related_patterns:
|
||||||
|
if isinstance(related, str) and not related.startswith(
|
||||||
|
"practice-pattern/"
|
||||||
|
):
|
||||||
|
errors.append(
|
||||||
|
{
|
||||||
|
"code": "practice_pattern_invalid_related_pattern",
|
||||||
|
"artifact_id": artifact.id,
|
||||||
|
"path": artifact.path,
|
||||||
|
"value": related,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
headings = {
|
||||||
|
line.strip()
|
||||||
|
for line in path.read_text(encoding="utf-8").splitlines()
|
||||||
|
if line.startswith("## ")
|
||||||
|
}
|
||||||
|
except FileNotFoundError:
|
||||||
|
continue
|
||||||
|
missing_headings = sorted(PRACTICE_PATTERN_REQUIRED_HEADINGS - headings)
|
||||||
|
if missing_headings:
|
||||||
|
errors.append(
|
||||||
|
{
|
||||||
|
"code": "practice_pattern_missing_sections",
|
||||||
|
"artifact_id": artifact.id,
|
||||||
|
"path": artifact.path,
|
||||||
|
"headings": missing_headings,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _check_required_top_level_files(
|
def _check_required_top_level_files(
|
||||||
repo_root: Path,
|
repo_root: Path,
|
||||||
errors: list[dict[str, Any]],
|
errors: list[dict[str, Any]],
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ def test_cli_inspect_emits_json(capsys) -> None:
|
||||||
assert exit_code == 0
|
assert exit_code == 0
|
||||||
payload = json.loads(capsys.readouterr().out)
|
payload = json.loads(capsys.readouterr().out)
|
||||||
assert payload["ok"] is True
|
assert payload["ok"] is True
|
||||||
assert payload["infospace"]["artifact_count"] == 68
|
assert payload["infospace"]["artifact_count"] == 70
|
||||||
|
|
||||||
|
|
||||||
def test_cli_missing_profile_uses_structured_error(capsys) -> None:
|
def test_cli_missing_profile_uses_structured_error(capsys) -> None:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ from info_tech_canon.service import (
|
||||||
generate_indexes,
|
generate_indexes,
|
||||||
generate_tree,
|
generate_tree,
|
||||||
inspect_canon,
|
inspect_canon,
|
||||||
|
list_artifacts,
|
||||||
list_models,
|
list_models,
|
||||||
list_standards,
|
list_standards,
|
||||||
profile_graph,
|
profile_graph,
|
||||||
|
|
@ -24,7 +25,7 @@ def test_inspect_canon_counts_artifact_kinds() -> None:
|
||||||
|
|
||||||
assert payload["ok"] is True
|
assert payload["ok"] is True
|
||||||
assert payload["infospace"]["slug"] == "canon"
|
assert payload["infospace"]["slug"] == "canon"
|
||||||
assert payload["infospace"]["artifact_count"] == 68
|
assert payload["infospace"]["artifact_count"] == 70
|
||||||
assert payload["infospace"]["kinds"] == {
|
assert payload["infospace"]["kinds"] == {
|
||||||
"access-descriptor-set": 1,
|
"access-descriptor-set": 1,
|
||||||
"alignment-review-kit": 1,
|
"alignment-review-kit": 1,
|
||||||
|
|
@ -58,6 +59,8 @@ def test_inspect_canon_counts_artifact_kinds() -> None:
|
||||||
"native-concept-map": 1,
|
"native-concept-map": 1,
|
||||||
"pattern": 1,
|
"pattern": 1,
|
||||||
"practice": 1,
|
"practice": 1,
|
||||||
|
"practice-pattern": 1,
|
||||||
|
"practice-pattern-scheme": 1,
|
||||||
"profile-alignment": 1,
|
"profile-alignment": 1,
|
||||||
"profile": 1,
|
"profile": 1,
|
||||||
"profile-artifact": 13,
|
"profile-artifact": 13,
|
||||||
|
|
@ -96,17 +99,27 @@ def test_validate_canon_passes_scaffold() -> None:
|
||||||
assert payload["ok"] is True
|
assert payload["ok"] is True
|
||||||
assert payload["errors"] == []
|
assert payload["errors"] == []
|
||||||
assert "warnings" in payload
|
assert "warnings" in payload
|
||||||
assert payload["details"]["artifact_count"] == 68
|
assert payload["details"]["artifact_count"] == 70
|
||||||
|
|
||||||
|
|
||||||
def test_graph_exports_relationship_summary() -> None:
|
def test_graph_exports_relationship_summary() -> None:
|
||||||
payload = artifact_graph()
|
payload = artifact_graph()
|
||||||
|
|
||||||
assert payload["ok"] is True
|
assert payload["ok"] is True
|
||||||
assert payload["graph"]["node_count"] == 68
|
assert payload["graph"]["node_count"] == 70
|
||||||
assert payload["graph"]["edge_count"] > 15
|
assert payload["graph"]["edge_count"] > 15
|
||||||
|
|
||||||
|
|
||||||
|
def test_interface_deprecation_strangler_is_a_registered_practice_pattern() -> None:
|
||||||
|
payload = list_artifacts(kind="practice-pattern")
|
||||||
|
|
||||||
|
assert payload["count"] == 1
|
||||||
|
pattern = payload["artifacts"][0]
|
||||||
|
assert pattern["id"] == "practice-pattern/interface-deprecation-strangler"
|
||||||
|
assert pattern["title"] == "InterfaceDeprecationStrangler"
|
||||||
|
assert pattern["path"] == "patterns/InterfaceDeprecationStrangler.md"
|
||||||
|
|
||||||
|
|
||||||
def test_capability_review_joins_a_minimal_record(tmp_path) -> None:
|
def test_capability_review_joins_a_minimal_record(tmp_path) -> None:
|
||||||
record = {
|
record = {
|
||||||
"record_id": "test",
|
"record_id": "test",
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ title: "PracticePattern language and InterfaceDeprecationStrangler"
|
||||||
domain: infotech
|
domain: infotech
|
||||||
topic_slug: canon
|
topic_slug: canon
|
||||||
repo: info-tech-canon
|
repo: info-tech-canon
|
||||||
status: active
|
status: finished
|
||||||
priority: high
|
priority: high
|
||||||
created: "2026-08-21"
|
created: "2026-08-21"
|
||||||
updated: "2026-08-21"
|
updated: "2026-08-21"
|
||||||
|
|
@ -33,7 +33,7 @@ Christopher Alexander's pattern-language method, seed it with the proven
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: ITC-WP-0016-T01
|
id: ITC-WP-0016-T01
|
||||||
status: progress
|
status: done
|
||||||
priority: high
|
priority: high
|
||||||
state_hub_task_id: "4e581485-52cc-4de6-86ac-8876104df930"
|
state_hub_task_id: "4e581485-52cc-4de6-86ac-8876104df930"
|
||||||
```
|
```
|
||||||
|
|
@ -47,7 +47,7 @@ canon validation for the contract.
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: ITC-WP-0016-T02
|
id: ITC-WP-0016-T02
|
||||||
status: todo
|
status: done
|
||||||
priority: high
|
priority: high
|
||||||
state_hub_task_id: "f94abadb-26e1-49cf-bf0a-7d6b7bbe6b2e"
|
state_hub_task_id: "f94abadb-26e1-49cf-bf0a-7d6b7bbe6b2e"
|
||||||
```
|
```
|
||||||
|
|
@ -60,7 +60,7 @@ consequences, adoption checklist, and known use in State Hub.
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: ITC-WP-0016-T03
|
id: ITC-WP-0016-T03
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "ca98c387-25f4-4493-9f83-1b91269ee584"
|
state_hub_task_id: "ca98c387-25f4-4493-9f83-1b91269ee584"
|
||||||
```
|
```
|
||||||
|
|
@ -73,7 +73,7 @@ retrieve the named practice without relying on the originating repository.
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: ITC-WP-0016-T04
|
id: ITC-WP-0016-T04
|
||||||
status: todo
|
status: done
|
||||||
priority: medium
|
priority: medium
|
||||||
state_hub_task_id: "ff7e1e12-ada5-43ae-8a86-78419fff79ae"
|
state_hub_task_id: "ff7e1e12-ada5-43ae-8a86-78419fff79ae"
|
||||||
```
|
```
|
||||||
|
|
@ -84,11 +84,19 @@ artifact ID and path and the local adoption expectations.
|
||||||
|
|
||||||
## Acceptance
|
## Acceptance
|
||||||
|
|
||||||
- [ ] PracticePattern Markdown artifacts have a documented and validated v0.1 scheme.
|
- [x] PracticePattern Markdown artifacts have a documented and validated v0.1 scheme.
|
||||||
- [ ] `InterfaceDeprecationStrangler` is a registered, retrieval-visible canon artifact.
|
- [x] `InterfaceDeprecationStrangler` is a registered, retrieval-visible canon artifact.
|
||||||
- [ ] The pattern distinguishes successful legacy traffic from attempted use of a retired interface.
|
- [x] The pattern distinguishes successful legacy traffic from attempted use of a retired interface.
|
||||||
- [ ] `arc-nexus` names the pattern and states how it applies locally.
|
- [x] `arc-nexus` names the pattern and states how it applies locally.
|
||||||
- [ ] Canon validation and tests pass; both repositories are committed and synchronized.
|
- [x] Canon validation and tests pass; both repositories are committed and synchronized.
|
||||||
|
|
||||||
|
## Result
|
||||||
|
|
||||||
|
Completed 2026-08-21. The canon now carries an Alexander-inspired
|
||||||
|
PracticePattern v0.1 Markdown scheme, a matching frontmatter schema and
|
||||||
|
structural validator, the active `InterfaceDeprecationStrangler` known use, and
|
||||||
|
generated graph, view, and agent-retrieval assets. `arc-nexus` adopted the
|
||||||
|
pattern by name and contract in commit `ff21e8a`.
|
||||||
|
|
||||||
## Out of scope
|
## Out of scope
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue