From 82424cc6f4c302bf3ffe7a100d9dd1a5ab30619f Mon Sep 17 00:00:00 2001 From: tegwick Date: Sat, 23 May 2026 04:59:16 +0200 Subject: [PATCH] Add purpose and demand model extension --- README.md | 8 + .../briefs/concept-catalog-purpose-demand.md | 31 +++ .../example-consumer-purpose-portfolio.md | 30 +++ infospace/agent/briefs/kernel-itc-core.md | 2 +- ...ng-purpose-demand-governance-candidates.md | 30 +++ infospace/agent/briefs/model-governance.md | 1 - .../briefs/model-purpose-demand-extension.md | 41 ++++ .../briefs/pattern-intent-scope-purposes.md | 32 +++ infospace/agent/briefs/profile-small-saas.md | 2 +- .../agent/consumer-briefs/railiance-fabric.md | 3 + .../agent/consumer-briefs/repo-scoping.md | 3 + .../agent/consumer-briefs/user-engine.md | 3 + infospace/agent/global-agent-brief.md | 6 +- infospace/agent/retrieval-index.json | 170 +++++++++++++- infospace/agent/retrieval-index.md | 54 ++++- infospace/agent/retrieval-index.yaml | 119 +++++++++- .../canon-interface-card.template.yaml | 11 +- .../templates/consumer-brief.template.md | 9 + infospace/artifacts/index.yaml | 72 ++++++ infospace/concepts/purpose-demand.yaml | 67 ++++++ .../examples/consumer-purpose-portfolio.yaml | 67 ++++++ infospace/indexes/artifact-tree.yaml | 32 ++- infospace/indexes/concept-ownership.yaml | 62 ++++- infospace/indexes/import-matrix.yaml | 47 ++++ .../purpose-demand-governance-candidates.yaml | 76 ++++++ .../InfoTechCanonPurposeDemandExtension.md | 218 ++++++++++++++++++ infospace/patterns/intent-scope-purposes.md | 118 ++++++++++ infospace/validation/latest.json | 18 +- infospace/views/by-concept.md | 17 +- infospace/views/by-mapping-target.md | 25 ++ infospace/views/import-matrix.md | 67 +++--- infospace/views/kernel-overview.md | 18 +- infospace/views/repository-tree.md | 12 +- src/info_tech_canon/generation.py | 54 ++++- src/info_tech_canon/validation.py | 118 +++++++++- tests/test_cli.py | 2 +- tests/test_service.py | 15 +- .../ITC-WP-0006-purpose-and-demand-model.md | 21 +- workplans/index.yaml | 2 +- 39 files changed, 1597 insertions(+), 86 deletions(-) create mode 100644 infospace/agent/briefs/concept-catalog-purpose-demand.md create mode 100644 infospace/agent/briefs/example-consumer-purpose-portfolio.md create mode 100644 infospace/agent/briefs/mapping-purpose-demand-governance-candidates.md create mode 100644 infospace/agent/briefs/model-purpose-demand-extension.md create mode 100644 infospace/agent/briefs/pattern-intent-scope-purposes.md create mode 100644 infospace/concepts/purpose-demand.yaml create mode 100644 infospace/examples/consumer-purpose-portfolio.yaml create mode 100644 infospace/mappings/purpose-demand-governance-candidates.yaml create mode 100644 infospace/models/governance/InfoTechCanonPurposeDemandExtension.md create mode 100644 infospace/patterns/intent-scope-purposes.md diff --git a/README.md b/README.md index 97e505e..2a495d8 100644 --- a/README.md +++ b/README.md @@ -74,3 +74,11 @@ Agent-facing retrieval assets live under `infospace/agent/`: - per-artifact briefs in `agent/briefs/` - consumer brief templates in `agent/consumer-briefs/` - Canon Interface Card template in `agent/templates/` + +## Purpose And Demand + +The PURPOSES candidate model is registered as a governance extension at +`infospace/models/governance/InfoTechCanonPurposeDemandExtension.md`. It defines +consumer purposes, demand signals, purpose fit, scope pressure, and evolution +requests so consumer demand can inform repo governance without silently changing +producer scope. diff --git a/infospace/agent/briefs/concept-catalog-purpose-demand.md b/infospace/agent/briefs/concept-catalog-purpose-demand.md new file mode 100644 index 0000000..91e1fab --- /dev/null +++ b/infospace/agent/briefs/concept-catalog-purpose-demand.md @@ -0,0 +1,31 @@ +--- +id: agent-brief/concept-catalog-purpose-demand +artifact_id: concept-catalog/purpose-demand +source_path: concepts/purpose-demand.yaml +source_kind: concept-catalog +generated: true +--- + + + +# Agent Brief: Purpose And Consumer Demand Concept Catalog + +- Artifact ID: `concept-catalog/purpose-demand` +- Kind: `concept-catalog` +- Canonical path: `concepts/purpose-demand.yaml` +- Full source: `concepts/purpose-demand.yaml` +- Summary: Structured candidate concept catalog: Purpose And Consumer Demand Concept Catalog. + +## Retrieval Hints + +Imports and anchors: +- `kernel/itc-core` +- `model/governance` + +## Owned Concepts + +- `Purpose And Consumer Demand Concept Catalog` + +## Related Distinctions + +No common distinction is anchored directly on this artifact. diff --git a/infospace/agent/briefs/example-consumer-purpose-portfolio.md b/infospace/agent/briefs/example-consumer-purpose-portfolio.md new file mode 100644 index 0000000..9e4cc97 --- /dev/null +++ b/infospace/agent/briefs/example-consumer-purpose-portfolio.md @@ -0,0 +1,30 @@ +--- +id: agent-brief/example-consumer-purpose-portfolio +artifact_id: example/consumer-purpose-portfolio +source_path: examples/consumer-purpose-portfolio.yaml +source_kind: example +generated: true +--- + + + +# Agent Brief: Canon-Side Consumer Purpose Portfolio + +- Artifact ID: `example/consumer-purpose-portfolio` +- Kind: `example` +- Canonical path: `examples/consumer-purpose-portfolio.yaml` +- Full source: `examples/consumer-purpose-portfolio.yaml` +- Summary: Canon-side example artifact: Canon-Side Consumer Purpose Portfolio. + +## Retrieval Hints + +Imports and anchors: +- `profile/small-saas` + +## Owned Concepts + +- `Canon-Side Consumer Purpose Portfolio` + +## Related Distinctions + +No common distinction is anchored directly on this artifact. diff --git a/infospace/agent/briefs/kernel-itc-core.md b/infospace/agent/briefs/kernel-itc-core.md index 3837c9d..cd30968 100644 --- a/infospace/agent/briefs/kernel-itc-core.md +++ b/infospace/agent/briefs/kernel-itc-core.md @@ -26,4 +26,4 @@ No imports or anchors recorded. ## Related Distinctions -- **Intent vs Scope vs Purpose**: Intent captures why an actor wants something, scope bounds what is included, and purpose captures consumer demand or use case pressure on the repo. +- **Intent vs Scope vs Purpose**: Intent captures why a producer or consumer exists, scope bounds producer ownership and promises, and purpose captures consumer demand anchored in consumer intent. diff --git a/infospace/agent/briefs/mapping-purpose-demand-governance-candidates.md b/infospace/agent/briefs/mapping-purpose-demand-governance-candidates.md new file mode 100644 index 0000000..c0722ca --- /dev/null +++ b/infospace/agent/briefs/mapping-purpose-demand-governance-candidates.md @@ -0,0 +1,30 @@ +--- +id: agent-brief/mapping-purpose-demand-governance-candidates +artifact_id: mapping/purpose-demand-governance-candidates +source_path: mappings/purpose-demand-governance-candidates.yaml +source_kind: mapping +generated: true +--- + + + +# Agent Brief: Purpose Demand Governance Extension Candidates + +- Artifact ID: `mapping/purpose-demand-governance-candidates` +- Kind: `mapping` +- Canonical path: `mappings/purpose-demand-governance-candidates.yaml` +- Full source: `mappings/purpose-demand-governance-candidates.yaml` +- Summary: Mapping artifact connecting canon surfaces: Purpose Demand Governance Extension Candidates. + +## Retrieval Hints + +Imports and anchors: +- `model/task` + +## Owned Concepts + +- `Purpose Demand Governance Extension Candidates` + +## Related Distinctions + +No common distinction is anchored directly on this artifact. diff --git a/infospace/agent/briefs/model-governance.md b/infospace/agent/briefs/model-governance.md index 4bb097d..12f9c48 100644 --- a/infospace/agent/briefs/model-governance.md +++ b/infospace/agent/briefs/model-governance.md @@ -28,4 +28,3 @@ Imports and anchors: ## Related Distinctions - **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. -- **Intent vs Scope vs Purpose**: Intent captures why an actor wants something, scope bounds what is included, and purpose captures consumer demand or use case pressure on the repo. diff --git a/infospace/agent/briefs/model-purpose-demand-extension.md b/infospace/agent/briefs/model-purpose-demand-extension.md new file mode 100644 index 0000000..aa81db3 --- /dev/null +++ b/infospace/agent/briefs/model-purpose-demand-extension.md @@ -0,0 +1,41 @@ +--- +id: agent-brief/model-purpose-demand-extension +artifact_id: model/purpose-demand-extension +source_path: models/governance/InfoTechCanonPurposeDemandExtension.md +source_kind: model-extension +generated: true +--- + + + +# Agent Brief: InfoTechCanon Purpose And Demand Model Extension + +- Artifact ID: `model/purpose-demand-extension` +- Kind: `model-extension` +- Canonical path: `models/governance/InfoTechCanonPurposeDemandExtension.md` +- Full source: `models/governance/InfoTechCanonPurposeDemandExtension.md` +- Summary: Candidate extension to an existing canon model: InfoTechCanon Purpose And Demand Model Extension. + +## Retrieval Hints + +Imports and anchors: +- `kernel/itc-core` +- `model/information-space` +- `model/task` + +## Owned Concepts + +- `ConsumerNeed` +- `ConsumerPurpose` +- `DemandSignal` +- `EvolutionRequest` +- `InfoTechCanon Purpose And Demand Model Extension` +- `ProducerCapability` +- `Purpose` +- `PurposeFit` +- `ScopePressure` +- `UseCase` + +## Related Distinctions + +- **Intent vs Scope vs Purpose**: Intent captures why a producer or consumer exists, scope bounds producer ownership and promises, and purpose captures consumer demand anchored in consumer intent. diff --git a/infospace/agent/briefs/pattern-intent-scope-purposes.md b/infospace/agent/briefs/pattern-intent-scope-purposes.md new file mode 100644 index 0000000..0903472 --- /dev/null +++ b/infospace/agent/briefs/pattern-intent-scope-purposes.md @@ -0,0 +1,32 @@ +--- +id: agent-brief/pattern-intent-scope-purposes +artifact_id: pattern/intent-scope-purposes +source_path: patterns/intent-scope-purposes.md +source_kind: pattern +generated: true +--- + + + +# Agent Brief: Intent Scope Purposes Pattern + +- Artifact ID: `pattern/intent-scope-purposes` +- Kind: `pattern` +- Canonical path: `patterns/intent-scope-purposes.md` +- Full source: `patterns/intent-scope-purposes.md` +- Summary: Reusable canon pattern: Intent Scope Purposes Pattern. + +## Retrieval Hints + +Imports and anchors: +- `model/governance` +- `model/task` + +## Owned Concepts + +- `Intent Scope Purposes Pattern` +- `IntentScopePurposePattern` + +## Related Distinctions + +- **Intent vs Scope vs Purpose**: Intent captures why a producer or consumer exists, scope bounds producer ownership and promises, and purpose captures consumer demand anchored in consumer intent. diff --git a/infospace/agent/briefs/profile-small-saas.md b/infospace/agent/briefs/profile-small-saas.md index e57818b..77dc17b 100644 --- a/infospace/agent/briefs/profile-small-saas.md +++ b/infospace/agent/briefs/profile-small-saas.md @@ -39,4 +39,4 @@ Imports and anchors: ## Related Distinctions -- **Intent vs Scope vs Purpose**: Intent captures why an actor wants something, scope bounds what is included, and purpose captures consumer demand or use case pressure on the repo. +- **Intent vs Scope vs Purpose**: Intent captures why a producer or consumer exists, scope bounds producer ownership and promises, and purpose captures consumer demand anchored in consumer intent. diff --git a/infospace/agent/consumer-briefs/railiance-fabric.md b/infospace/agent/consumer-briefs/railiance-fabric.md index 5df1855..cc5afbf 100644 --- a/infospace/agent/consumer-briefs/railiance-fabric.md +++ b/infospace/agent/consumer-briefs/railiance-fabric.md @@ -16,6 +16,9 @@ Use the canon to make captured entities and edges cleaner for conformance and vi - `agent/retrieval-index.md` - `agent/templates/canon-interface-card.template.yaml` +- `models/governance/InfoTechCanonPurposeDemandExtension.md` +- `patterns/intent-scope-purposes.md` +- `examples/consumer-purpose-portfolio.yaml` - `profiles/small-saas/profile.yaml` - `views/by-concept.md` diff --git a/infospace/agent/consumer-briefs/repo-scoping.md b/infospace/agent/consumer-briefs/repo-scoping.md index fdb5544..e3cd9d8 100644 --- a/infospace/agent/consumer-briefs/repo-scoping.md +++ b/infospace/agent/consumer-briefs/repo-scoping.md @@ -16,6 +16,9 @@ Compare repo-scoping concepts with canon INTENT, SCOPE, PURPOSES, and interface- - `agent/retrieval-index.md` - `agent/templates/canon-interface-card.template.yaml` +- `models/governance/InfoTechCanonPurposeDemandExtension.md` +- `patterns/intent-scope-purposes.md` +- `examples/consumer-purpose-portfolio.yaml` - `profiles/small-saas/profile.yaml` - `views/by-concept.md` diff --git a/infospace/agent/consumer-briefs/user-engine.md b/infospace/agent/consumer-briefs/user-engine.md index dd309f6..8df149b 100644 --- a/infospace/agent/consumer-briefs/user-engine.md +++ b/infospace/agent/consumer-briefs/user-engine.md @@ -16,6 +16,9 @@ Evaluate user-management concepts, roles, access traces, profile claims, and gov - `agent/retrieval-index.md` - `agent/templates/canon-interface-card.template.yaml` +- `models/governance/InfoTechCanonPurposeDemandExtension.md` +- `patterns/intent-scope-purposes.md` +- `examples/consumer-purpose-portfolio.yaml` - `profiles/small-saas/profile.yaml` - `views/by-concept.md` diff --git a/infospace/agent/global-agent-brief.md b/infospace/agent/global-agent-brief.md index 8e68ada..bcc5edf 100644 --- a/infospace/agent/global-agent-brief.md +++ b/infospace/agent/global-agent-brief.md @@ -5,8 +5,8 @@ This brief summarizes the current canon service surface for agents. - Infospace slug: `canon` -- Artifact count: 29 -- Retrieval index items: 29 +- Artifact count: 34 +- Retrieval index items: 34 - Primary confidence command: `make validate` - Refresh generated indexes and views with: `make index` - Refresh agent briefs and interface templates with: `make agent-briefs` @@ -32,7 +32,7 @@ This brief summarizes the current canon service surface for agents. - **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. - **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. -- **Intent vs Scope vs Purpose**: Intent captures why an actor wants something, scope bounds what is included, and purpose captures consumer demand or use case pressure on the repo. +- **Intent vs Scope vs Purpose**: Intent captures why a producer or consumer exists, scope bounds producer ownership and promises, and purpose captures consumer demand anchored in consumer intent. ## Consumption Notes diff --git a/infospace/agent/retrieval-index.json b/infospace/agent/retrieval-index.json index 413711a..8a3e0c4 100644 --- a/infospace/agent/retrieval-index.json +++ b/infospace/agent/retrieval-index.json @@ -34,16 +34,72 @@ "id": "intent-scope-purpose", "source_artifacts": [ "kernel/itc-core", - "model/governance", + "model/purpose-demand-extension", + "pattern/intent-scope-purposes", "profile/small-saas" ], - "summary": "Intent captures why an actor wants something, scope bounds what is included, and purpose captures consumer demand or use case pressure on the repo.", + "summary": "Intent captures why a producer or consumer exists, scope bounds producer ownership and promises, and purpose captures consumer demand anchored in consumer intent.", "title": "Intent vs Scope vs Purpose" } ], "infospace": "canon", - "item_count": 29, + "item_count": 34, "items": [ + { + "canonical_path": "concepts/purpose-demand.yaml", + "id": "concept-catalog/purpose-demand", + "imports": [ + "kernel/itc-core", + "model/governance" + ], + "kind": "concept-catalog", + "owned_concepts": [ + "Purpose And Consumer Demand Concept Catalog" + ], + "relationships": [ + { + "target": "kernel/itc-core", + "type": "conforms_to" + }, + { + "target": "model/governance", + "type": "uses" + } + ], + "source_path": "infospace/concepts/purpose-demand.yaml", + "summary": "Structured candidate concept catalog: Purpose And Consumer Demand Concept Catalog.", + "title": "Purpose And Consumer Demand Concept Catalog", + "warnings": [] + }, + { + "canonical_path": "examples/consumer-purpose-portfolio.yaml", + "id": "example/consumer-purpose-portfolio", + "imports": [ + "profile/small-saas" + ], + "kind": "example", + "owned_concepts": [ + "Canon-Side Consumer Purpose Portfolio" + ], + "relationships": [ + { + "target": "model/purpose-demand-extension", + "type": "illustrates" + }, + { + "target": "pattern/intent-scope-purposes", + "type": "illustrates" + }, + { + "target": "profile/small-saas", + "type": "uses" + } + ], + "source_path": "infospace/examples/consumer-purpose-portfolio.yaml", + "summary": "Canon-side example artifact: Canon-Side Consumer Purpose Portfolio.", + "title": "Canon-Side Consumer Purpose Portfolio", + "warnings": [] + }, { "canonical_path": "kernel/InfoTechCanonCore.md", "id": "kernel/itc-core", @@ -129,6 +185,35 @@ "title": "InfoTechCanon Kernel Map", "warnings": [] }, + { + "canonical_path": "mappings/purpose-demand-governance-candidates.yaml", + "id": "mapping/purpose-demand-governance-candidates", + "imports": [ + "model/task" + ], + "kind": "mapping", + "owned_concepts": [ + "Purpose Demand Governance Extension Candidates" + ], + "relationships": [ + { + "target": "model/purpose-demand-extension", + "type": "maps" + }, + { + "target": "model/governance", + "type": "maps" + }, + { + "target": "model/task", + "type": "uses" + } + ], + "source_path": "infospace/mappings/purpose-demand-governance-candidates.yaml", + "summary": "Mapping artifact connecting canon surfaces: Purpose Demand Governance Extension Candidates.", + "title": "Purpose Demand Governance Extension Candidates", + "warnings": [] + }, { "canonical_path": "models/access-control/InfoTechCanonAccessControlModel.md", "id": "model/access-control", @@ -348,6 +433,54 @@ "title": "InfoTechCanon Organization Model", "warnings": [] }, + { + "canonical_path": "models/governance/InfoTechCanonPurposeDemandExtension.md", + "id": "model/purpose-demand-extension", + "imports": [ + "kernel/itc-core", + "model/information-space", + "model/task" + ], + "kind": "model-extension", + "owned_concepts": [ + "ConsumerNeed", + "ConsumerPurpose", + "DemandSignal", + "EvolutionRequest", + "InfoTechCanon Purpose And Demand Model Extension", + "ProducerCapability", + "Purpose", + "PurposeFit", + "ScopePressure", + "UseCase" + ], + "relationships": [ + { + "target": "kernel/itc-core", + "type": "conforms_to" + }, + { + "target": "model/governance", + "type": "extends" + }, + { + "target": "model/information-space", + "type": "uses" + }, + { + "target": "model/task", + "type": "uses" + }, + { + "target": "concept-catalog/purpose-demand", + "type": "introduces" + } + ], + "source_path": "infospace/models/governance/InfoTechCanonPurposeDemandExtension.md", + "summary": "Candidate extension to an existing canon model: InfoTechCanon Purpose And Demand Model Extension.", + "title": "InfoTechCanon Purpose And Demand Model Extension", + "warnings": [] + }, { "canonical_path": "models/security/InfoTechCanonSecurityModel.md", "id": "model/security", @@ -395,6 +528,37 @@ "title": "InfoTechCanon Task Model", "warnings": [] }, + { + "canonical_path": "patterns/intent-scope-purposes.md", + "id": "pattern/intent-scope-purposes", + "imports": [ + "model/governance", + "model/task" + ], + "kind": "pattern", + "owned_concepts": [ + "Intent Scope Purposes Pattern", + "IntentScopePurposePattern" + ], + "relationships": [ + { + "target": "model/purpose-demand-extension", + "type": "implements" + }, + { + "target": "model/governance", + "type": "uses" + }, + { + "target": "model/task", + "type": "uses" + } + ], + "source_path": "infospace/patterns/intent-scope-purposes.md", + "summary": "Reusable canon pattern: Intent Scope Purposes Pattern.", + "title": "Intent Scope Purposes Pattern", + "warnings": [] + }, { "canonical_path": "profiles/small-saas/profile.yaml", "id": "profile/small-saas", diff --git a/infospace/agent/retrieval-index.md b/infospace/agent/retrieval-index.md index 9a27f96..a5c5893 100644 --- a/infospace/agent/retrieval-index.md +++ b/infospace/agent/retrieval-index.md @@ -4,17 +4,37 @@ Schema: `info-tech-canon.retrieval-index.v1` Infospace: `canon` -Items: **29** +Items: **34** ## Common Distinctions - **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` - **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` -- **Intent vs Scope vs Purpose**: Intent captures why an actor wants something, scope bounds what is included, and purpose captures consumer demand or use case pressure on the repo. Sources: `kernel/itc-core`, `model/governance`, `profile/small-saas` +- **Intent vs Scope vs Purpose**: Intent captures why a producer or consumer exists, scope bounds producer ownership and promises, and purpose captures consumer demand anchored in consumer intent. Sources: `kernel/itc-core`, `model/purpose-demand-extension`, `pattern/intent-scope-purposes`, `profile/small-saas` ## Items +### Purpose And Consumer Demand Concept Catalog + +- ID: `concept-catalog/purpose-demand` +- Kind: `concept-catalog` +- Canonical path: `concepts/purpose-demand.yaml` +- Source path: `infospace/concepts/purpose-demand.yaml` +- Summary: Structured candidate concept catalog: Purpose And Consumer Demand Concept Catalog. +- Imports and anchors: `kernel/itc-core`, `model/governance` +- Owned concepts: `Purpose And Consumer Demand Concept Catalog` + +### Canon-Side Consumer Purpose Portfolio + +- ID: `example/consumer-purpose-portfolio` +- Kind: `example` +- Canonical path: `examples/consumer-purpose-portfolio.yaml` +- Source path: `infospace/examples/consumer-purpose-portfolio.yaml` +- Summary: Canon-side example artifact: Canon-Side Consumer Purpose Portfolio. +- Imports and anchors: `profile/small-saas` +- Owned concepts: `Canon-Side Consumer Purpose Portfolio` + ### InfoTechCanon Core - ID: `kernel/itc-core` @@ -35,6 +55,16 @@ Items: **29** - Imports and anchors: none - Owned concepts: `InfoTechCanon Kernel Map` +### Purpose Demand Governance Extension Candidates + +- ID: `mapping/purpose-demand-governance-candidates` +- Kind: `mapping` +- Canonical path: `mappings/purpose-demand-governance-candidates.yaml` +- Source path: `infospace/mappings/purpose-demand-governance-candidates.yaml` +- Summary: Mapping artifact connecting canon surfaces: Purpose Demand Governance Extension Candidates. +- Imports and anchors: `model/task` +- Owned concepts: `Purpose Demand Governance Extension Candidates` + ### InfoTechCanon Access Control Model - ID: `model/access-control` @@ -125,6 +155,16 @@ Items: **29** - Imports and anchors: `kernel/itc-core` - Owned concepts: `InfoTechCanon Organization Model` +### InfoTechCanon Purpose And Demand Model Extension + +- ID: `model/purpose-demand-extension` +- Kind: `model-extension` +- Canonical path: `models/governance/InfoTechCanonPurposeDemandExtension.md` +- Source path: `infospace/models/governance/InfoTechCanonPurposeDemandExtension.md` +- Summary: Candidate extension to an existing canon model: InfoTechCanon Purpose And Demand Model Extension. +- Imports and anchors: `kernel/itc-core`, `model/information-space`, `model/task` +- Owned concepts: `ConsumerNeed`, `ConsumerPurpose`, `DemandSignal`, `EvolutionRequest`, `InfoTechCanon Purpose And Demand Model Extension`, `ProducerCapability`, `Purpose`, `PurposeFit`, `ScopePressure`, `UseCase` + ### InfoTechCanon Security Model - ID: `model/security` @@ -145,6 +185,16 @@ Items: **29** - Imports and anchors: `kernel/itc-core` - Owned concepts: `InfoTechCanon Task Model` +### Intent Scope Purposes Pattern + +- ID: `pattern/intent-scope-purposes` +- Kind: `pattern` +- Canonical path: `patterns/intent-scope-purposes.md` +- Source path: `infospace/patterns/intent-scope-purposes.md` +- Summary: Reusable canon pattern: Intent Scope Purposes Pattern. +- Imports and anchors: `model/governance`, `model/task` +- Owned concepts: `Intent Scope Purposes Pattern`, `IntentScopePurposePattern` + ### Small SaaS System Profile - ID: `profile/small-saas` diff --git a/infospace/agent/retrieval-index.yaml b/infospace/agent/retrieval-index.yaml index 75e57f3..8225856 100644 --- a/infospace/agent/retrieval-index.yaml +++ b/infospace/agent/retrieval-index.yaml @@ -1,7 +1,43 @@ schema: info-tech-canon.retrieval-index.v1 infospace: canon -item_count: 29 +item_count: 34 items: +- id: concept-catalog/purpose-demand + kind: concept-catalog + title: Purpose And Consumer Demand Concept Catalog + canonical_path: concepts/purpose-demand.yaml + source_path: infospace/concepts/purpose-demand.yaml + summary: 'Structured candidate concept catalog: Purpose And Consumer Demand Concept + Catalog.' + owned_concepts: + - Purpose And Consumer Demand Concept Catalog + imports: + - kernel/itc-core + - model/governance + relationships: + - type: conforms_to + target: kernel/itc-core + - type: uses + target: model/governance + warnings: [] +- id: example/consumer-purpose-portfolio + kind: example + title: Canon-Side Consumer Purpose Portfolio + canonical_path: examples/consumer-purpose-portfolio.yaml + source_path: infospace/examples/consumer-purpose-portfolio.yaml + summary: 'Canon-side example artifact: Canon-Side Consumer Purpose Portfolio.' + owned_concepts: + - Canon-Side Consumer Purpose Portfolio + imports: + - profile/small-saas + relationships: + - type: illustrates + target: model/purpose-demand-extension + - type: illustrates + target: pattern/intent-scope-purposes + - type: uses + target: profile/small-saas + warnings: [] - id: kernel/itc-core kind: kernel title: InfoTechCanon Core @@ -54,6 +90,25 @@ items: - type: maps target: standard/caring warnings: [] +- id: mapping/purpose-demand-governance-candidates + kind: mapping + title: Purpose Demand Governance Extension Candidates + canonical_path: mappings/purpose-demand-governance-candidates.yaml + source_path: infospace/mappings/purpose-demand-governance-candidates.yaml + summary: 'Mapping artifact connecting canon surfaces: Purpose Demand Governance + Extension Candidates.' + owned_concepts: + - Purpose Demand Governance Extension Candidates + imports: + - model/task + relationships: + - type: maps + target: model/purpose-demand-extension + - type: maps + target: model/governance + - type: uses + target: model/task + warnings: [] - id: model/access-control kind: model title: InfoTechCanon Access Control Model @@ -207,6 +262,40 @@ items: - type: conforms_to target: kernel/itc-core warnings: [] +- id: model/purpose-demand-extension + kind: model-extension + title: InfoTechCanon Purpose And Demand Model Extension + canonical_path: models/governance/InfoTechCanonPurposeDemandExtension.md + source_path: infospace/models/governance/InfoTechCanonPurposeDemandExtension.md + summary: 'Candidate extension to an existing canon model: InfoTechCanon Purpose + And Demand Model Extension.' + owned_concepts: + - ConsumerNeed + - ConsumerPurpose + - DemandSignal + - EvolutionRequest + - InfoTechCanon Purpose And Demand Model Extension + - ProducerCapability + - Purpose + - PurposeFit + - ScopePressure + - UseCase + imports: + - kernel/itc-core + - model/information-space + - model/task + relationships: + - type: conforms_to + target: kernel/itc-core + - type: extends + target: model/governance + - type: uses + target: model/information-space + - type: uses + target: model/task + - type: introduces + target: concept-catalog/purpose-demand + warnings: [] - id: model/security kind: model title: InfoTechCanon Security Model @@ -240,6 +329,26 @@ items: - type: conforms_to target: kernel/itc-core warnings: [] +- id: pattern/intent-scope-purposes + kind: pattern + title: Intent Scope Purposes Pattern + canonical_path: patterns/intent-scope-purposes.md + source_path: infospace/patterns/intent-scope-purposes.md + summary: 'Reusable canon pattern: Intent Scope Purposes Pattern.' + owned_concepts: + - Intent Scope Purposes Pattern + - IntentScopePurposePattern + imports: + - model/governance + - model/task + relationships: + - type: implements + target: model/purpose-demand-extension + - type: uses + target: model/governance + - type: uses + target: model/task + warnings: [] - id: profile/small-saas kind: profile title: Small SaaS System Profile @@ -665,9 +774,11 @@ common_distinctions: - model/observability - id: intent-scope-purpose title: Intent vs Scope vs Purpose - summary: Intent captures why an actor wants something, scope bounds what is included, - and purpose captures consumer demand or use case pressure on the repo. + summary: Intent captures why a producer or consumer exists, scope bounds producer + ownership and promises, and purpose captures consumer demand anchored in consumer + intent. source_artifacts: - kernel/itc-core - - model/governance + - model/purpose-demand-extension + - pattern/intent-scope-purposes - profile/small-saas diff --git a/infospace/agent/templates/canon-interface-card.template.yaml b/infospace/agent/templates/canon-interface-card.template.yaml index e227e10..8d6fe37 100644 --- a/infospace/agent/templates/canon-interface-card.template.yaml +++ b/infospace/agent/templates/canon-interface-card.template.yaml @@ -7,7 +7,11 @@ consumer: owner: '' intent: '' scope: '' - purposes: [] + purposes: + - id: '' + use_case: '' + consumer_need: '' + demand_signals: [] canon_surfaces: implemented_profiles: [] consumed_artifacts: [] @@ -19,6 +23,11 @@ validation_expectations: commands: [] evidence_required: [] known_gaps: [] +purpose_fit: + state: '' + matched_capabilities: [] + scope_pressure: '' + recommended_disposition: '' consumer_needs: current: [] requested_extensions: [] diff --git a/infospace/agent/templates/consumer-brief.template.md b/infospace/agent/templates/consumer-brief.template.md index d9df033..8d52c5d 100644 --- a/infospace/agent/templates/consumer-brief.template.md +++ b/infospace/agent/templates/consumer-brief.template.md @@ -13,6 +13,8 @@ generated: true - Intent: - Scope: - Purposes: +- Use cases: +- Demand signals: ## Canon Surfaces @@ -26,3 +28,10 @@ generated: true - Commands: - Evidence: - Known gaps: + +## Purpose Fit + +- State: +- Matched producer capabilities: +- Scope pressure: +- Requested evolution: diff --git a/infospace/artifacts/index.yaml b/infospace/artifacts/index.yaml index bddb6ae..6c79746 100644 --- a/infospace/artifacts/index.yaml +++ b/infospace/artifacts/index.yaml @@ -89,6 +89,24 @@ artifacts: relationships: - type: conforms_to target: kernel/itc-core + - id: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + kind: model-extension + title: InfoTechCanon Purpose And Demand Model Extension + provenance: + source_path: infospace/models/governance/InfoTechCanonPurposeDemandExtension.md + placement_workplan: ITC-WP-0006 + relationships: + - type: conforms_to + target: kernel/itc-core + - type: extends + target: model/governance + - type: uses + target: model/information-space + - type: uses + target: model/task + - type: introduces + target: concept-catalog/purpose-demand - id: model/task path: models/task/InfoTechCanonTaskModel.md kind: model @@ -259,6 +277,60 @@ artifacts: target: standard/tagging - type: requires target: standard/caring + - id: concept-catalog/purpose-demand + path: concepts/purpose-demand.yaml + kind: concept-catalog + title: Purpose And Consumer Demand Concept Catalog + provenance: + source_path: infospace/concepts/purpose-demand.yaml + placement_workplan: ITC-WP-0006 + relationships: + - type: conforms_to + target: kernel/itc-core + - type: uses + target: model/governance + - id: pattern/intent-scope-purposes + path: patterns/intent-scope-purposes.md + kind: pattern + title: Intent Scope Purposes Pattern + provenance: + source_path: infospace/patterns/intent-scope-purposes.md + placement_workplan: ITC-WP-0006 + relationships: + - type: implements + target: model/purpose-demand-extension + - type: uses + target: model/governance + - type: uses + target: model/task + - id: mapping/purpose-demand-governance-candidates + path: mappings/purpose-demand-governance-candidates.yaml + kind: mapping + title: Purpose Demand Governance Extension Candidates + provenance: + source_path: infospace/mappings/purpose-demand-governance-candidates.yaml + placement_workplan: ITC-WP-0006 + relationships: + - type: maps + target: model/purpose-demand-extension + - type: maps + target: model/governance + - type: uses + target: model/task + - id: example/consumer-purpose-portfolio + path: examples/consumer-purpose-portfolio.yaml + kind: example + title: Canon-Side Consumer Purpose Portfolio + provenance: + source_path: infospace/examples/consumer-purpose-portfolio.yaml + placement_workplan: ITC-WP-0006 + relationships: + - type: illustrates + target: model/purpose-demand-extension + - type: illustrates + target: pattern/intent-scope-purposes + - type: uses + target: profile/small-saas - id: small-saas/service/billing-portal path: profiles/small-saas/artifacts/service.billing-portal.yaml kind: profile-artifact diff --git a/infospace/concepts/purpose-demand.yaml b/infospace/concepts/purpose-demand.yaml new file mode 100644 index 0000000..73e2cf8 --- /dev/null +++ b/infospace/concepts/purpose-demand.yaml @@ -0,0 +1,67 @@ +id: concept-catalog/purpose-demand +title: Purpose And Consumer Demand Concept Catalog +owner: model/purpose-demand-extension +status: candidate +version: "0.1" +concepts: + - id: purpose + title: Purpose + proposed_owner: kernel/itc-core + definition: Generic reason or use-value orientation for an actor, artifact, capability, or repo in a context. + - id: consumer-purpose + title: ConsumerPurpose + proposed_owner: model/information-space + definition: Declared purpose from a consumer of a producer repo, artifact, profile, service, or canon surface. + - id: use-case + title: UseCase + proposed_owner: model/information-space + definition: Bounded scenario in which a consumer applies a producer capability to satisfy a purpose. + - id: demand-signal + title: DemandSignal + proposed_owner: model/information-space + definition: Traceable observation indicating consumer need, use, friction, request, value, or preference. + - id: consumer-need + title: ConsumerNeed + proposed_owner: model/information-space + definition: Need expressed or inferred from a consumer purpose and demand signals. + - id: producer-capability + title: ProducerCapability + proposed_owner: model/governance + definition: Capability, profile, interface, artifact, or service the producer can intentionally provide or promise. + - id: purpose-fit + title: PurposeFit + proposed_owner: model/governance + definition: Evaluation of how well producer scope and capabilities satisfy a consumer purpose. + - id: scope-pressure + title: ScopePressure + proposed_owner: model/governance + definition: Pressure on producer scope caused by unmet, repeated, high-value, or strategically aligned consumer purposes. + - id: evolution-request + title: EvolutionRequest + proposed_owner: model/task + definition: Proposed change to producer artifacts, interfaces, profiles, standards, or scope created in response to purpose pressure. +relationships: + - source: ConsumerPurpose + type: anchored_in + target: ConsumerIntent + - source: ConsumerPurpose + type: expresses + target: UseCase + - source: UseCase + type: creates + target: DemandSignal + - source: DemandSignal + type: indicates + target: ConsumerNeed + - source: ProducerCapability + type: satisfies + target: ConsumerNeed + - source: PurposeFit + type: evaluates + target: ConsumerPurpose + - source: ScopePressure + type: arises_from + target: PurposeFit + - source: EvolutionRequest + type: responds_to + target: ScopePressure diff --git a/infospace/examples/consumer-purpose-portfolio.yaml b/infospace/examples/consumer-purpose-portfolio.yaml new file mode 100644 index 0000000..d32c859 --- /dev/null +++ b/infospace/examples/consumer-purpose-portfolio.yaml @@ -0,0 +1,67 @@ +id: example/consumer-purpose-portfolio +title: Canon-Side Consumer Purpose Portfolio +status: candidate +model: model/purpose-demand-extension +pattern: pattern/intent-scope-purposes +consumers: + - id: user-engine + title: User Engine Evaluation + consumer_intent: Evaluate user-management capabilities against the canon before integrating user management as a producer capability. + consumer_scope: User identity, account lifecycle, roles, access decisions, tenancy boundaries, and governance evidence. + purposes: + - id: user-engine/user-management-evaluation + use_case: Compare user-engine entities and access behavior with InfoTechCanon models and small-saas profile expectations. + consumer_need: Clear distinctions among Actor, Subject, Principal, Organization Role, AccessRole, policy, control, and evidence. + demand_signals: + - Needs conformance questions before integration starts. + - Needs source-linked concepts for user, role, tenant, access, and evidence records. + producer_capabilities_used: + - profile/small-saas + - model/organization + - model/access-control + - model/governance + - standard/caring + purpose_fit: fits_with_profile + scope_pressure: Add evaluation pack and conformance questions after PURPOSES vocabulary is accepted. + evolution_requests: + - Create canon-side user-management evaluation pack. + - id: railiance-fabric + title: Railiance Fabric Refactoring Support + consumer_intent: Refactor captured entities and edges so the fabric conforms to and informs the canon. + consumer_scope: Entity capture, edge semantics, provenance, visualization utility, and governance of extracted relationships. + purposes: + - id: railiance-fabric/entity-edge-cleanliness + use_case: Use canon concepts to classify fabric nodes and edges for cleaner visualization and better practical meaning. + consumer_need: Stable concept ownership, relationship semantics, and examples for entity and edge capture. + demand_signals: + - Needs cleaner capture of entities and edges for visualization. + - Needs relationship types that can be traced to canon models. + producer_capabilities_used: + - model/information-space + - model/governance + - model/task + - standard/tagging + purpose_fit: partial_fit + scope_pressure: Add mapping examples and relationship expectations for visualization-oriented captures. + evolution_requests: + - Create fabric entity and edge capture criteria. + - id: repo-scoping + title: Repo Scoping Comparison + consumer_intent: Compare repo-scoping concepts with the canon and identify extensions that maximize scoping utility. + consumer_scope: Repository intent, scope, domain, consumer demand, governance, and interface-card semantics. + purposes: + - id: repo-scoping/intent-scope-purposes-alignment + use_case: Use INTENT, SCOPE, and PURPOSES to improve repo scoping and feed canon extension candidates back to InfoTechCanon. + consumer_need: Explicit fit between repo intent, current scope, consumer purposes, and governance decisions. + demand_signals: + - Needs canon vocabulary for PURPOSES as consumer demand. + - Needs interface card fields that repo-scoping can produce or consume. + producer_capabilities_used: + - kernel/itc-core + - model/purpose-demand-extension + - pattern/intent-scope-purposes + - agent/templates/canon-interface-card.template.yaml + purpose_fit: gap + scope_pressure: Extend interface cards and governance vocabulary around PURPOSES. + evolution_requests: + - Compare repo-scoping with canon purpose and demand model. diff --git a/infospace/indexes/artifact-tree.yaml b/infospace/indexes/artifact-tree.yaml index 96c54e8..58b396d 100644 --- a/infospace/indexes/artifact-tree.yaml +++ b/infospace/indexes/artifact-tree.yaml @@ -1,5 +1,5 @@ root: infospace -file_count: 91 +file_count: 101 files: - path: README.md directory: . @@ -7,12 +7,21 @@ files: - path: agent/README.md directory: agent name: README.md +- path: agent/briefs/concept-catalog-purpose-demand.md + directory: agent/briefs + name: concept-catalog-purpose-demand.md +- path: agent/briefs/example-consumer-purpose-portfolio.md + directory: agent/briefs + name: example-consumer-purpose-portfolio.md - path: agent/briefs/kernel-itc-core.md directory: agent/briefs name: kernel-itc-core.md - path: agent/briefs/kernel-itc-kernel-map.md directory: agent/briefs name: kernel-itc-kernel-map.md +- path: agent/briefs/mapping-purpose-demand-governance-candidates.md + directory: agent/briefs + name: mapping-purpose-demand-governance-candidates.md - path: agent/briefs/model-access-control.md directory: agent/briefs name: model-access-control.md @@ -40,12 +49,18 @@ files: - path: agent/briefs/model-organization.md directory: agent/briefs name: model-organization.md +- path: agent/briefs/model-purpose-demand-extension.md + directory: agent/briefs + name: model-purpose-demand-extension.md - path: agent/briefs/model-security.md directory: agent/briefs name: model-security.md - path: agent/briefs/model-task.md directory: agent/briefs name: model-task.md +- path: agent/briefs/pattern-intent-scope-purposes.md + directory: agent/briefs + name: pattern-intent-scope-purposes.md - path: agent/briefs/profile-small-saas.md directory: agent/briefs name: profile-small-saas.md @@ -88,9 +103,15 @@ files: - path: assimilation/README.md directory: assimilation name: README.md +- path: concepts/purpose-demand.yaml + directory: concepts + name: purpose-demand.yaml - path: examples/README.md directory: examples name: README.md +- path: examples/consumer-purpose-portfolio.yaml + directory: examples + name: consumer-purpose-portfolio.yaml - path: examples/small-saas/README.md directory: examples/small-saas name: README.md @@ -121,6 +142,9 @@ files: - path: mappings/README.md directory: mappings name: README.md +- path: mappings/purpose-demand-governance-candidates.yaml + directory: mappings + name: purpose-demand-governance-candidates.yaml - path: models/access-control/InfoTechCanonAccessControlModel.md directory: models/access-control name: InfoTechCanonAccessControlModel.md @@ -133,6 +157,9 @@ files: - path: models/governance/InfoTechCanonGovernanceModel.md directory: models/governance name: InfoTechCanonGovernanceModel.md +- path: models/governance/InfoTechCanonPurposeDemandExtension.md + directory: models/governance + name: InfoTechCanonPurposeDemandExtension.md - path: models/information-space/InfoTechCanonInformationSpaceModel.md directory: models/information-space name: InfoTechCanonInformationSpaceModel.md @@ -157,6 +184,9 @@ files: - path: patterns/README.md directory: patterns name: README.md +- path: patterns/intent-scope-purposes.md + directory: patterns + name: intent-scope-purposes.md - path: profiles/README.md directory: profiles name: README.md diff --git a/infospace/indexes/concept-ownership.yaml b/infospace/indexes/concept-ownership.yaml index e12dfcd..30ba4bd 100644 --- a/infospace/indexes/concept-ownership.yaml +++ b/infospace/indexes/concept-ownership.yaml @@ -1,5 +1,13 @@ -concept_count: 44 +concept_count: 59 concepts: +- concept: Purpose And Consumer Demand Concept Catalog + owner: concept-catalog/purpose-demand + path: concepts/purpose-demand.yaml + source: artifact_title +- concept: Canon-Side Consumer Purpose Portfolio + owner: example/consumer-purpose-portfolio + path: examples/consumer-purpose-portfolio.yaml + source: artifact_title - concept: InfoTechCanon Core owner: kernel/itc-core path: kernel/InfoTechCanonCore.md @@ -8,6 +16,10 @@ concepts: owner: kernel/itc-kernel-map path: kernel/InfoTechCanonKernelMap.md source: artifact_title +- concept: Purpose Demand Governance Extension Candidates + owner: mapping/purpose-demand-governance-candidates + path: mappings/purpose-demand-governance-candidates.yaml + source: artifact_title - concept: InfoTechCanon Access Control Model owner: model/access-control path: models/access-control/InfoTechCanonAccessControlModel.md @@ -44,6 +56,46 @@ concepts: owner: model/organization path: models/organization/InfoTechCanonOrganizationModel.md source: artifact_title +- concept: InfoTechCanon Purpose And Demand Model Extension + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: artifact_title +- concept: Purpose + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: frontmatter.owned_concepts +- concept: ConsumerPurpose + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: frontmatter.owned_concepts +- concept: UseCase + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: frontmatter.owned_concepts +- concept: DemandSignal + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: frontmatter.owned_concepts +- concept: ConsumerNeed + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: frontmatter.owned_concepts +- concept: ProducerCapability + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: frontmatter.owned_concepts +- concept: PurposeFit + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: frontmatter.owned_concepts +- concept: ScopePressure + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: frontmatter.owned_concepts +- concept: EvolutionRequest + owner: model/purpose-demand-extension + path: models/governance/InfoTechCanonPurposeDemandExtension.md + source: frontmatter.owned_concepts - concept: InfoTechCanon Security Model owner: model/security path: models/security/InfoTechCanonSecurityModel.md @@ -52,6 +104,14 @@ concepts: owner: model/task path: models/task/InfoTechCanonTaskModel.md source: artifact_title +- concept: Intent Scope Purposes Pattern + owner: pattern/intent-scope-purposes + path: patterns/intent-scope-purposes.md + source: artifact_title +- concept: IntentScopePurposePattern + owner: pattern/intent-scope-purposes + path: patterns/intent-scope-purposes.md + source: frontmatter.owned_concepts - concept: Small SaaS System Profile owner: profile/small-saas path: profiles/small-saas/profile.yaml diff --git a/infospace/indexes/import-matrix.yaml b/infospace/indexes/import-matrix.yaml index 676a65a..c582579 100644 --- a/infospace/indexes/import-matrix.yaml +++ b/infospace/indexes/import-matrix.yaml @@ -1,6 +1,9 @@ artifacts: +- concept-catalog/purpose-demand +- example/consumer-purpose-portfolio - kernel/itc-core - kernel/itc-kernel-map +- mapping/purpose-demand-governance-candidates - model/access-control - model/data - model/devsecops @@ -10,8 +13,10 @@ artifacts: - model/network - model/observability - model/organization +- model/purpose-demand-extension - model/security - model/task +- pattern/intent-scope-purposes - profile/small-saas - small-saas/control/namespace-per-tenant - small-saas/dataset/subscription-ledger @@ -29,6 +34,20 @@ artifacts: - standard/caring - standard/tagging rows: +- artifact: concept-catalog/purpose-demand + targets: + kernel/itc-core: + - conforms_to + model/governance: + - uses +- artifact: example/consumer-purpose-portfolio + targets: + model/purpose-demand-extension: + - illustrates + pattern/intent-scope-purposes: + - illustrates + profile/small-saas: + - uses - artifact: kernel/itc-core targets: {} - artifact: kernel/itc-kernel-map @@ -61,6 +80,14 @@ rows: - maps standard/tagging: - maps +- artifact: mapping/purpose-demand-governance-candidates + targets: + model/governance: + - maps + model/purpose-demand-extension: + - maps + model/task: + - uses - artifact: model/access-control targets: kernel/itc-core: @@ -109,6 +136,18 @@ rows: targets: kernel/itc-core: - conforms_to +- artifact: model/purpose-demand-extension + targets: + concept-catalog/purpose-demand: + - introduces + kernel/itc-core: + - conforms_to + model/governance: + - extends + model/information-space: + - uses + model/task: + - uses - artifact: model/security targets: kernel/itc-core: @@ -119,6 +158,14 @@ rows: targets: kernel/itc-core: - conforms_to +- artifact: pattern/intent-scope-purposes + targets: + model/governance: + - uses + model/purpose-demand-extension: + - implements + model/task: + - uses - artifact: profile/small-saas targets: kernel/itc-core: diff --git a/infospace/mappings/purpose-demand-governance-candidates.yaml b/infospace/mappings/purpose-demand-governance-candidates.yaml new file mode 100644 index 0000000..b5c4976 --- /dev/null +++ b/infospace/mappings/purpose-demand-governance-candidates.yaml @@ -0,0 +1,76 @@ +id: mapping/purpose-demand-governance-candidates +title: Purpose Demand Governance Extension Candidates +source: model/purpose-demand-extension +target: model/governance +mapping_type: model-extension-candidates +confidence: candidate +concept_mappings: + - concept: PurposeFit + governance_surface: Review + decision_need: Decide whether a consumer purpose fits current scope, needs mapping, creates a gap, conflicts, or is out of scope. + evidence_required: + - consumer purpose + - matched canon artifacts + - matched concepts + - gap or conflict statement + - concept: ScopePressure + governance_surface: Decision + decision_need: Decide whether demand pressure should extend scope, adapt a profile, create a mapping, add an interface field, defer, or reject. + evidence_required: + - purpose fit result + - demand signal strength + - producer intent alignment + - expected consumer value + - owner and review date + - concept: ProducerCapability + governance_surface: Policy + decision_need: Decide whether a capability is promised, experimental, deprecated, unsupported, or intentionally excluded. + evidence_required: + - scope statement + - capability owner + - supporting artifacts + - validation expectations + - concept: EvolutionRequest + governance_surface: ChangeControl + decision_need: Decide whether pressure becomes task work, profile change, interface change, mapping, standard candidate, or explicit rejection. + evidence_required: + - requested change + - affected artifacts + - intended consumer outcome + - decision authority + - acceptance criteria +decision_states: + purpose_triage: + - accepted_for_analysis + - needs_clarification + - out_of_scope + - duplicate + - parked + - rejected + purpose_fit: + - fits_current_scope + - fits_with_mapping + - fits_with_profile + - partial_fit + - gap + - conflict + - out_of_scope + - unknown + scope_pressure: + - extend_scope + - adapt_profile + - add_mapping + - add_interface_field + - add_standard_candidate + - create_task + - defer + - reject +task_bridge: + accepted_pressure_creates: EvolutionRequest + evolution_request_may_create: + - Task + - BacklogItem + - ReviewTask + - ChangeTask + - MappingTask + - ProfileChangeTask diff --git a/infospace/models/governance/InfoTechCanonPurposeDemandExtension.md b/infospace/models/governance/InfoTechCanonPurposeDemandExtension.md new file mode 100644 index 0000000..b58d164 --- /dev/null +++ b/infospace/models/governance/InfoTechCanonPurposeDemandExtension.md @@ -0,0 +1,218 @@ +--- +id: model/purpose-demand-extension +title: InfoTechCanon Purpose And Demand Model Extension +type: model-extension +status: candidate +version: "0.1" +extends: + - model/governance +uses: + - kernel/itc-core + - model/information-space + - model/task +owned_concepts: + - Purpose + - ConsumerPurpose + - UseCase + - DemandSignal + - ConsumerNeed + - ProducerCapability + - PurposeFit + - ScopePressure + - EvolutionRequest +--- + +# InfoTechCanon Purpose And Demand Model Extension + +## 1. Purpose + +This candidate extension defines the PURPOSES concept family for repos and +infospaces that need to learn what consumers use, need, want, and value from +the producer. + +The extension keeps three ideas distinct: + +```text +INTENT + Why a producer or consumer exists and what it is trying to become. + +SCOPE + What the producer currently includes, excludes, owns, and promises. + +PURPOSES + What consumers use, need, want, or value from the producer, anchored in the + consumers' own intent. +``` + +PURPOSES are not a replacement for producer intent or scope. They are a +consumer demand surface that can inform governance, profiles, interfaces, and +roadmap work. + +## 2. Position in InfoTechCanon + +Purpose and demand currently cross several existing model boundaries: + +```text +Core + Owns generic canon primitives such as Concept, Standard, Profile, Mapping, + Conformance, and canonical ownership. + +Governance + Owns decisions, decision rights, evidence, acceptance, deferral, rejection, + change control, and the evaluation of scope pressure. + +Information Space + Owns how consumer purposes, interface cards, briefs, mappings, evidence + references, and retrieval assets are captured and reused. + +Task + Owns work items created from accepted evolution requests, including backlog, + readiness, commitment, progress, and completion evidence. +``` + +This extension is intentionally registered as a candidate model extension until +the concepts are exercised by the first consumer evaluations. + +## 3. Concept Proposal + +| Concept | Proposed permanent owner | Definition | Notes | +| --- | --- | --- | --- | +| Purpose | Core | A reason or use-value orientation that explains why an actor, artifact, capability, or repo matters in a context. | Generic enough to become a core concept, but introduced here as a candidate. | +| ConsumerPurpose | Information Space | A declared purpose from a consumer of a producer repo, artifact, profile, service, or canon surface. | Captured through interface cards, consumer briefs, mappings, and evidence references. | +| UseCase | Information Space | A bounded scenario in which a consumer applies a producer capability to satisfy a purpose. | Should remain distinct from Task; tasks implement changes, use cases describe demand. | +| DemandSignal | Information Space | A traceable observation that indicates consumer need, use, friction, request, value, or preference. | Examples include evaluation gaps, repeated questions, integration attempts, issues, and usage evidence. | +| ConsumerNeed | Information Space | A need expressed or inferred from a consumer purpose and one or more demand signals. | Needs may be current, anticipated, or exploratory. | +| ProducerCapability | Governance | A capability, profile, interface, artifact, or service the producer can intentionally provide or promise. | Governance decides whether it is promised, experimental, deprecated, or out of scope. | +| PurposeFit | Governance | An evaluation of how well producer scope and capabilities satisfy a consumer purpose. | Requires rationale and evidence because it can drive scope change. | +| ScopePressure | Governance | Pressure on producer scope caused by unmet, repeated, high-value, or strategically aligned consumer purposes. | Should not automatically expand scope; it triggers governance review. | +| EvolutionRequest | Task | A proposed change to producer artifacts, interfaces, profiles, standards, or scope created in response to purpose pressure. | Becomes Task work only after triage and commitment. | + +## 4. Core Relationships + +```text +ConsumerPurpose anchored_in ConsumerIntent +ConsumerPurpose expresses UseCase +UseCase creates DemandSignal +DemandSignal indicates ConsumerNeed +ProducerCapability satisfies ConsumerNeed +PurposeFit evaluates ConsumerPurpose against ProducerCapability and Scope +ScopePressure arises_from PurposeFit or DemandSignal +EvolutionRequest responds_to ScopePressure +Decision accepts / rejects / defers EvolutionRequest +Task implements accepted EvolutionRequest +Evidence supports PurposeFit and Decision +``` + +## 5. Governance Extension Candidates + +Governance should gain three reviewable decision surfaces. + +### 5.1 Consumer Purpose Triage + +Purpose triage decides whether a declared consumer purpose is: + +```text +accepted_for_analysis +needs_clarification +out_of_scope +duplicate +parked +rejected +``` + +Required evidence: + +```text +consumer identity +consumer intent +declared purpose +use case +scope touched +source artifact or interface card +date captured +owner for follow-up +``` + +### 5.2 Purpose Fit Review + +Purpose fit review evaluates whether the canon currently satisfies the +consumer purpose. + +Fit states: + +```text +fits_current_scope +fits_with_mapping +fits_with_profile +partial_fit +gap +conflict +out_of_scope +unknown +``` + +Required evidence: + +```text +matched canon artifacts +matched concepts +gaps or ambiguity +consumer impact +producer impact +recommended disposition +``` + +### 5.3 Scope Pressure Decision + +Scope pressure decision decides whether repeated or high-value purposes should +change the producer. + +Outcomes: + +```text +extend_scope +adapt_profile +add_mapping +add_interface_field +add_standard_candidate +create_task +defer +reject +``` + +Required evidence: + +```text +purpose fit result +demand signal strength +alignment with producer intent +cost or complexity +affected owner +decision authority +review date +``` + +## 6. Boundaries + +Purpose is not Policy. A purpose can inform policy, but policy remains a +governance directive. + +Purpose is not Scope. Purpose can pressure scope, but scope remains the +producer's current boundary and promise. + +Purpose is not Task. Purpose can create work, but task semantics begin when +work is captured, triaged, committed, assigned, and executed. + +Purpose is not Capability. A consumer may need something the producer does not +yet provide, does not want to provide, or should explicitly reject. + +## 7. First Consumer Evaluation Use + +The first evaluations should use the purpose model to capture: + +- what user-engine needs from the canon before user-management integration, +- what railiance-fabric needs for clean entity and edge capture, +- what repo-scoping needs from INTENT, SCOPE, PURPOSES, and interface cards. + +Those evaluations should create consumer-side workplans in the consumer repos. +This repo owns the canon-side model, examples, and acceptance vocabulary. diff --git a/infospace/patterns/intent-scope-purposes.md b/infospace/patterns/intent-scope-purposes.md new file mode 100644 index 0000000..28a5f70 --- /dev/null +++ b/infospace/patterns/intent-scope-purposes.md @@ -0,0 +1,118 @@ +--- +id: pattern/intent-scope-purposes +title: Intent Scope Purposes Pattern +type: pattern +status: candidate +version: "0.1" +uses: + - model/purpose-demand-extension + - model/governance + - model/task +owned_concepts: + - IntentScopePurposePattern +--- + +# Intent Scope Purposes Pattern + +## Context + +A producer repo or infospace has its own reason to exist and a current boundary +of ownership. Consumers arrive with their own intents and use cases. Without a +purpose layer, the producer either ignores consumer demand or silently expands +scope through accidental commitments. + +## Problem + +Intent, scope, and purpose are often collapsed: + +```text +consumer asks for something +producer treats it as a requirement +scope expands without governance +tasks appear without a decision trail +``` + +This makes repos less clean over time and hides why interfaces or standards are +evolving. + +## Solution + +Keep the three planes explicit. + +```text +ProducerIntent + explains why the producer exists. + +ProducerScope + declares what the producer currently owns, excludes, and promises. + +ConsumerPurpose + declares what a consumer wants to use, need, or value from the producer, + anchored in the consumer's own intent. +``` + +Then connect them through reviewable fit and change decisions. + +```text +ConsumerIntent + -> ConsumerPurpose + -> UseCase + -> DemandSignal + -> PurposeFit + -> ScopePressure + -> EvolutionRequest + -> GovernanceDecision + -> Task / ProfileChange / InterfaceChange / Mapping +``` + +## Pattern Rules + +1. A ConsumerPurpose MUST identify the consumer and the consumer intent it is + anchored in. +2. A ConsumerPurpose SHOULD identify one or more use cases and demand signals. +3. A PurposeFit MUST distinguish current fit, fit through mapping, partial fit, + gap, conflict, and out-of-scope demand. +4. ScopePressure MUST NOT change producer scope by itself. +5. An EvolutionRequest SHOULD identify whether it proposes a task, mapping, + profile change, interface change, standard candidate, or explicit rejection. +6. Governance decisions SHOULD carry rationale and evidence. + +## Resulting Moves + +The pattern supports four clean moves: + +```text +Learn + Capture consumer purpose and demand signals. + +Evaluate + Compare purpose with producer scope and capabilities. + +Govern + Accept, reject, defer, map, or convert pressure into an evolution request. + +Implement + Create task work, profile changes, interface changes, mappings, or standards + only after the governance decision is explicit. +``` + +## Practical Interface + +Consumer-facing interface cards should carry: + +```text +consumer intent +consumer scope +consumer purposes +use cases +demand signals +needed concepts +producer capabilities used +purpose fit result +scope pressure +requested extensions +evidence references +``` + +This gives the producer a memory of why consumers use it and what they ask it +to become. diff --git a/infospace/validation/latest.json b/infospace/validation/latest.json index 9ae9fde..512389f 100644 --- a/infospace/validation/latest.json +++ b/infospace/validation/latest.json @@ -1,30 +1,18 @@ { "details": { - "artifact_count": 29, - "relationship_count": 113 + "artifact_count": 34, + "relationship_count": 129 }, "errors": [], "metrics": { "coherence_components": 1.0, "consistency_cycles": 0.0, "coverage_ratio": 1.0, - "granularity_entropy": 1.7490339557881076, + "granularity_entropy": 2.4357138959313844, "redundancy_ratio": 0.0 }, "ok": true, "warnings": [ - { - "code": "missing_optional_concepts_dir", - "path": "infospace/concepts" - }, - { - "code": "empty_optional_collection", - "path": "infospace/patterns" - }, - { - "code": "empty_optional_collection", - "path": "infospace/mappings" - }, { "code": "empty_optional_collection", "path": "infospace/assimilation" diff --git a/infospace/views/by-concept.md b/infospace/views/by-concept.md index d921957..bf922e9 100644 --- a/infospace/views/by-concept.md +++ b/infospace/views/by-concept.md @@ -2,12 +2,15 @@ # By Concept -Concept count: **44** +Concept count: **59** | Concept | Owner | Source | | --- | --- | --- | +| Purpose And Consumer Demand Concept Catalog | `concept-catalog/purpose-demand` | `artifact_title` | +| Canon-Side Consumer Purpose Portfolio | `example/consumer-purpose-portfolio` | `artifact_title` | | InfoTechCanon Core | `kernel/itc-core` | `artifact_title` | | InfoTechCanon Kernel Map | `kernel/itc-kernel-map` | `artifact_title` | +| Purpose Demand Governance Extension Candidates | `mapping/purpose-demand-governance-candidates` | `artifact_title` | | InfoTechCanon Access Control Model | `model/access-control` | `artifact_title` | | InfoTechCanon Data Model | `model/data` | `artifact_title` | | InfoTechCanon DevSecOps Model | `model/devsecops` | `artifact_title` | @@ -17,8 +20,20 @@ Concept count: **44** | InfoTechCanon Network Model | `model/network` | `artifact_title` | | InfoTechCanon Observability Model | `model/observability` | `artifact_title` | | InfoTechCanon Organization Model | `model/organization` | `artifact_title` | +| InfoTechCanon Purpose And Demand Model Extension | `model/purpose-demand-extension` | `artifact_title` | +| Purpose | `model/purpose-demand-extension` | `frontmatter.owned_concepts` | +| ConsumerPurpose | `model/purpose-demand-extension` | `frontmatter.owned_concepts` | +| UseCase | `model/purpose-demand-extension` | `frontmatter.owned_concepts` | +| DemandSignal | `model/purpose-demand-extension` | `frontmatter.owned_concepts` | +| ConsumerNeed | `model/purpose-demand-extension` | `frontmatter.owned_concepts` | +| ProducerCapability | `model/purpose-demand-extension` | `frontmatter.owned_concepts` | +| PurposeFit | `model/purpose-demand-extension` | `frontmatter.owned_concepts` | +| ScopePressure | `model/purpose-demand-extension` | `frontmatter.owned_concepts` | +| EvolutionRequest | `model/purpose-demand-extension` | `frontmatter.owned_concepts` | | InfoTechCanon Security Model | `model/security` | `artifact_title` | | InfoTechCanon Task Model | `model/task` | `artifact_title` | +| Intent Scope Purposes Pattern | `pattern/intent-scope-purposes` | `artifact_title` | +| IntentScopePurposePattern | `pattern/intent-scope-purposes` | `frontmatter.owned_concepts` | | Small SaaS System Profile | `profile/small-saas` | `artifact_title` | | Namespace Per Tenant Control | `small-saas/control/namespace-per-tenant` | `artifact_title` | | Subscription Ledger Dataset | `small-saas/dataset/subscription-ledger` | `artifact_title` | diff --git a/infospace/views/by-mapping-target.md b/infospace/views/by-mapping-target.md index d4a75a0..ff0b0f2 100644 --- a/infospace/views/by-mapping-target.md +++ b/infospace/views/by-mapping-target.md @@ -2,8 +2,13 @@ # By Mapping Target +## `concept-catalog/purpose-demand` + +- `model/purpose-demand-extension` via `introduces` + ## `kernel/itc-core` +- `concept-catalog/purpose-demand` via `conforms_to` - `kernel/itc-kernel-map` via `maps` - `model/access-control` via `conforms_to` - `model/data` via `conforms_to` @@ -14,6 +19,7 @@ - `model/network` via `conforms_to` - `model/observability` via `conforms_to` - `model/organization` via `conforms_to` +- `model/purpose-demand-extension` via `conforms_to` - `model/security` via `conforms_to` - `model/task` via `conforms_to` - `profile/small-saas` via `conforms_to` @@ -44,9 +50,13 @@ ## `model/governance` +- `concept-catalog/purpose-demand` via `uses` - `kernel/itc-kernel-map` via `maps` +- `mapping/purpose-demand-governance-candidates` via `maps` - `model/access-control` via `uses` - `model/data` via `uses` +- `model/purpose-demand-extension` via `extends` +- `pattern/intent-scope-purposes` via `uses` - `profile/small-saas` via `requires` - `small-saas/policy/tenant-isolation` via `uses` - `standard/caring` via `imports` @@ -54,6 +64,7 @@ ## `model/information-space` - `kernel/itc-kernel-map` via `maps` +- `model/purpose-demand-extension` via `uses` ## `model/landscape` @@ -87,6 +98,12 @@ - `small-saas/user/ada-admin` via `uses` - `standard/caring` via `imports` +## `model/purpose-demand-extension` + +- `example/consumer-purpose-portfolio` via `illustrates` +- `mapping/purpose-demand-governance-candidates` via `maps` +- `pattern/intent-scope-purposes` via `implements` + ## `model/security` - `kernel/itc-kernel-map` via `maps` @@ -100,14 +117,22 @@ ## `model/task` - `kernel/itc-kernel-map` via `maps` +- `mapping/purpose-demand-governance-candidates` via `uses` - `model/observability` via `uses` +- `model/purpose-demand-extension` via `uses` +- `pattern/intent-scope-purposes` via `uses` - `profile/small-saas` via `requires` - `small-saas/task/onboard-tenant` via `uses` - `standard/caring` via `imports` - `standard/tagging` via `imports` +## `pattern/intent-scope-purposes` + +- `example/consumer-purpose-portfolio` via `illustrates` + ## `profile/small-saas` +- `example/consumer-purpose-portfolio` via `uses` - `small-saas/control/namespace-per-tenant` via `instantiates` - `small-saas/dataset/subscription-ledger` via `instantiates` - `small-saas/deployment/production` via `instantiates` diff --git a/infospace/views/import-matrix.md b/infospace/views/import-matrix.md index 1cd3975..ac0e4ae 100644 --- a/infospace/views/import-matrix.md +++ b/infospace/views/import-matrix.md @@ -2,34 +2,39 @@ # Import Matrix -| Artifact | `kernel/itc-core` | `kernel/itc-kernel-map` | `model/access-control` | `model/data` | `model/devsecops` | `model/governance` | `model/information-space` | `model/landscape` | `model/network` | `model/observability` | `model/organization` | `model/security` | `model/task` | `profile/small-saas` | `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/tagging` | -| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `kernel/itc-kernel-map` | `maps` | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | | | | | | | | | | | | | | `maps` | `maps` | -| `model/access-control` | `conforms_to` | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | -| `model/data` | `conforms_to` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | -| `model/devsecops` | `conforms_to` | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | -| `model/governance` | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/information-space` | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/landscape` | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/network` | `conforms_to` | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | -| `model/observability` | `conforms_to` | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | -| `model/organization` | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/security` | `conforms_to` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/task` | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `profile/small-saas` | `conforms_to` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | `requires` | `requires` | | | | | | | | | | | | | | | `requires` | `requires` | -| `small-saas/control/namespace-per-tenant` | | | | | | | | | | | | `uses` | | `instantiates` | | | | `evidenced_by` | | | | | | | | | | `uses` | | -| `small-saas/dataset/subscription-ledger` | | | | `uses` | | | | | | | | | | `instantiates` | | | | | | `governed_by` | `owned_by` | | | | `partitioned_for` | `partitioned_for` | | | | -| `small-saas/deployment/production` | | | | | `uses` | | | | `uses` | | | | | `instantiates` | `implements` | | | | | | `deploys` | | | | `separates` | `separates` | | | | -| `small-saas/evidence/access-review-2026-05` | | | | | | | | | | `uses` | | | | `instantiates` | | | | | | | | | | | | | | | | -| `small-saas/incident/cross-tenant-access-attempt` | | | | | | | | | | | | `uses` | | `instantiates` | `constrained_by` | | | `evidenced_by` | | | | | | | | | | | | -| `small-saas/policy/tenant-isolation` | | | | | | `uses` | | | | | | | | `instantiates` | `requires` | | | `evidenced_by` | | | | | | | | | | | | -| `small-saas/service/billing-portal` | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | `part_of` | | `owned_by` | | | | | | -| `small-saas/system/billing-system` | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | | `serves` | `serves` | | | | -| `small-saas/task/onboard-tenant` | | | | | | | | | | | | | `uses` | `instantiates` | | | | | | `governed_by` | | | | `owned_by` | `changes` | | | | | -| `small-saas/team/platform` | | | | | | | | | | | `uses` | | | `instantiates` | | | | | | | | | | | | | | | | -| `small-saas/tenant/acme` | | | | | | | | | | | `uses` | | | `instantiates` | `isolated_by` | | | | | | | | | | | | `represented_by` | | | -| `small-saas/tenant/globex` | | | | | | | | | | | `uses` | | | `instantiates` | `isolated_by` | | | | | | | | | | | | | | | -| `small-saas/user/ada-admin` | | | `uses` | | | | | | | | `uses` | | | `instantiates` | | | | `access_evidenced_by` | | `has_access_under` | | | | `member_of` | | | | | | -| `standard/caring` | `conforms_to` | | `imports` | `imports` | `imports` | `imports` | | | `imports` | `imports` | `imports` | `imports` | `imports` | | | | | | | | | | | | | | | | `imports` | -| `standard/tagging` | `conforms_to` | | | | | | | | | | | | `imports` | | | | | | | | | | | | | | | | | +| Artifact | `concept-catalog/purpose-demand` | `example/consumer-purpose-portfolio` | `kernel/itc-core` | `kernel/itc-kernel-map` | `mapping/purpose-demand-governance-candidates` | `model/access-control` | `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` | `profile/small-saas` | `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/tagging` | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| `concept-catalog/purpose-demand` | | | `conforms_to` | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | +| `example/consumer-purpose-portfolio` | | | | | | | | | | | | | | | `illustrates` | | | `illustrates` | `uses` | | | | | | | | | | | | | | | | +| `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `kernel/itc-kernel-map` | | | `maps` | | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | `maps` | `maps` | +| `mapping/purpose-demand-governance-candidates` | | | | | | | | | `maps` | | | | | | `maps` | | `uses` | | | | | | | | | | | | | | | | | | +| `model/access-control` | | | `conforms_to` | | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | +| `model/data` | | | `conforms_to` | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/devsecops` | | | `conforms_to` | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | +| `model/governance` | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/information-space` | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/landscape` | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/network` | | | `conforms_to` | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | +| `model/observability` | | | `conforms_to` | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | +| `model/organization` | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/purpose-demand-extension` | `introduces` | | `conforms_to` | | | | | | `extends` | `uses` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | +| `model/security` | | | `conforms_to` | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/task` | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `pattern/intent-scope-purposes` | | | | | | | | | `uses` | | | | | | `implements` | | `uses` | | | | | | | | | | | | | | | | | | +| `profile/small-saas` | | | `conforms_to` | | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | | | | | | | | | | | | | | | | `requires` | `requires` | +| `small-saas/control/namespace-per-tenant` | | | | | | | | | | | | | | | | `uses` | | | `instantiates` | | | | `evidenced_by` | | | | | | | | | | `uses` | | +| `small-saas/dataset/subscription-ledger` | | | | | | | `uses` | | | | | | | | | | | | `instantiates` | | | | | | `governed_by` | `owned_by` | | | | `partitioned_for` | `partitioned_for` | | | | +| `small-saas/deployment/production` | | | | | | | | `uses` | | | | `uses` | | | | | | | `instantiates` | `implements` | | | | | | `deploys` | | | | `separates` | `separates` | | | | +| `small-saas/evidence/access-review-2026-05` | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | | | | | | | +| `small-saas/incident/cross-tenant-access-attempt` | | | | | | | | | | | | | | | | `uses` | | | `instantiates` | `constrained_by` | | | `evidenced_by` | | | | | | | | | | | | +| `small-saas/policy/tenant-isolation` | | | | | | | | | `uses` | | | | | | | | | | `instantiates` | `requires` | | | `evidenced_by` | | | | | | | | | | | | +| `small-saas/service/billing-portal` | | | | | | | | | | | `uses` | | | | | | | | `instantiates` | | | | | | | | `part_of` | | `owned_by` | | | | | | +| `small-saas/system/billing-system` | | | | | | | | | | | `uses` | | | | | | | | `instantiates` | | | | | | | | | | | `serves` | `serves` | | | | +| `small-saas/task/onboard-tenant` | | | | | | | | | | | | | | | | | `uses` | | `instantiates` | | | | | | `governed_by` | | | | `owned_by` | `changes` | | | | | +| `small-saas/team/platform` | | | | | | | | | | | | | | `uses` | | | | | `instantiates` | | | | | | | | | | | | | | | | +| `small-saas/tenant/acme` | | | | | | | | | | | | | | `uses` | | | | | `instantiates` | `isolated_by` | | | | | | | | | | | | `represented_by` | | | +| `small-saas/tenant/globex` | | | | | | | | | | | | | | `uses` | | | | | `instantiates` | `isolated_by` | | | | | | | | | | | | | | | +| `small-saas/user/ada-admin` | | | | | | `uses` | | | | | | | | `uses` | | | | | `instantiates` | | | | `access_evidenced_by` | | `has_access_under` | | | | `member_of` | | | | | | +| `standard/caring` | | | `conforms_to` | | | `imports` | `imports` | `imports` | `imports` | | | `imports` | `imports` | `imports` | | `imports` | `imports` | | | | | | | | | | | | | | | | | `imports` | +| `standard/tagging` | | | `conforms_to` | | | | | | | | | | | | | | `imports` | | | | | | | | | | | | | | | | | | diff --git a/infospace/views/kernel-overview.md b/infospace/views/kernel-overview.md index 4328141..09f7502 100644 --- a/infospace/views/kernel-overview.md +++ b/infospace/views/kernel-overview.md @@ -3,12 +3,17 @@ # Kernel Overview - Infospace: `canon` -- Artifacts: 29 +- Artifacts: 34 ## Artifact Kinds +- `concept-catalog`: 1 +- `example`: 1 - `kernel`: 2 +- `mapping`: 1 - `model`: 11 +- `model-extension`: 1 +- `pattern`: 1 - `profile`: 1 - `profile-artifact`: 13 - `standard`: 2 @@ -17,17 +22,20 @@ - `access_evidenced_by`: 1 - `changes`: 1 -- `conforms_to`: 14 +- `conforms_to`: 16 - `constrained_by`: 1 - `deploys`: 1 - `evidenced_by`: 3 +- `extends`: 1 - `governed_by`: 2 - `has_access_under`: 1 -- `implements`: 1 +- `illustrates`: 2 +- `implements`: 2 - `imports`: 11 - `instantiates`: 13 +- `introduces`: 1 - `isolated_by`: 2 -- `maps`: 14 +- `maps`: 16 - `member_of`: 1 - `owned_by`: 3 - `part_of`: 1 @@ -36,4 +44,4 @@ - `requires`: 13 - `separates`: 2 - `serves`: 2 -- `uses`: 23 +- `uses`: 30 diff --git a/infospace/views/repository-tree.md b/infospace/views/repository-tree.md index bfcad9b..cf713ce 100644 --- a/infospace/views/repository-tree.md +++ b/infospace/views/repository-tree.md @@ -2,12 +2,15 @@ # Repository Tree -File count: **91** +File count: **101** - `README.md` - `agent/README.md` +- `agent/briefs/concept-catalog-purpose-demand.md` +- `agent/briefs/example-consumer-purpose-portfolio.md` - `agent/briefs/kernel-itc-core.md` - `agent/briefs/kernel-itc-kernel-map.md` +- `agent/briefs/mapping-purpose-demand-governance-candidates.md` - `agent/briefs/model-access-control.md` - `agent/briefs/model-data.md` - `agent/briefs/model-devsecops.md` @@ -17,8 +20,10 @@ File count: **91** - `agent/briefs/model-network.md` - `agent/briefs/model-observability.md` - `agent/briefs/model-organization.md` +- `agent/briefs/model-purpose-demand-extension.md` - `agent/briefs/model-security.md` - `agent/briefs/model-task.md` +- `agent/briefs/pattern-intent-scope-purposes.md` - `agent/briefs/profile-small-saas.md` - `agent/briefs/standard-caring.md` - `agent/briefs/standard-tagging.md` @@ -33,7 +38,9 @@ File count: **91** - `agent/templates/consumer-brief.template.md` - `artifacts/index.yaml` - `assimilation/README.md` +- `concepts/purpose-demand.yaml` - `examples/README.md` +- `examples/consumer-purpose-portfolio.yaml` - `examples/small-saas/README.md` - `examples/small-saas/demo-commands.yaml` - `indexes/README.md` @@ -44,10 +51,12 @@ File count: **91** - `kernel/InfoTechCanonCore.md` - `kernel/InfoTechCanonKernelMap.md` - `mappings/README.md` +- `mappings/purpose-demand-governance-candidates.yaml` - `models/access-control/InfoTechCanonAccessControlModel.md` - `models/data/InfoTechCanonDataModel.md` - `models/devsecops/InfoTechCanonDevSecOpsModel.md` - `models/governance/InfoTechCanonGovernanceModel.md` +- `models/governance/InfoTechCanonPurposeDemandExtension.md` - `models/information-space/InfoTechCanonInformationSpaceModel.md` - `models/landscape/InfoTechCanonLandscapeModel.md` - `models/network/InfoTechCanonNetworkModel.md` @@ -56,6 +65,7 @@ File count: **91** - `models/security/InfoTechCanonSecurityModel.md` - `models/task/InfoTechCanonTaskModel.md` - `patterns/README.md` +- `patterns/intent-scope-purposes.md` - `profiles/README.md` - `profiles/small-saas/artifacts/control.namespace-per-tenant.yaml` - `profiles/small-saas/artifacts/dataset.subscription-ledger.yaml` diff --git a/src/info_tech_canon/generation.py b/src/info_tech_canon/generation.py index 4047bfb..37c805e 100644 --- a/src/info_tech_canon/generation.py +++ b/src/info_tech_canon/generation.py @@ -9,7 +9,17 @@ import yaml GENERATED_NOTICE = "" -RETRIEVAL_ARTIFACT_KINDS = {"kernel", "model", "standard", "profile"} +RETRIEVAL_ARTIFACT_KINDS = { + "concept-catalog", + "example", + "kernel", + "mapping", + "model", + "model-extension", + "pattern", + "profile", + "standard", +} CONSUMER_BRIEF_IDS = ("user-engine", "railiance-fabric", "repo-scoping") COMMON_DISTINCTIONS = [ { @@ -45,10 +55,11 @@ COMMON_DISTINCTIONS = [ { "id": "intent-scope-purpose", "title": "Intent vs Scope vs Purpose", - "summary": "Intent captures why an actor wants something, scope bounds what is included, and purpose captures consumer demand or use case pressure on the repo.", + "summary": "Intent captures why a producer or consumer exists, scope bounds producer ownership and promises, and purpose captures consumer demand anchored in consumer intent.", "source_artifacts": [ "kernel/itc-core", - "model/governance", + "model/purpose-demand-extension", + "pattern/intent-scope-purposes", "profile/small-saas", ], }, @@ -634,7 +645,14 @@ def interface_card_template() -> dict[str, Any]: "owner": "", "intent": "", "scope": "", - "purposes": [], + "purposes": [ + { + "id": "", + "use_case": "", + "consumer_need": "", + "demand_signals": [], + } + ], }, "canon_surfaces": { "implemented_profiles": [], @@ -649,6 +667,12 @@ def interface_card_template() -> dict[str, Any]: "evidence_required": [], "known_gaps": [], }, + "purpose_fit": { + "state": "", + "matched_capabilities": [], + "scope_pressure": "", + "recommended_disposition": "", + }, "consumer_needs": { "current": [], "requested_extensions": [], @@ -674,6 +698,8 @@ def _render_consumer_brief_template() -> str: "- Intent:", "- Scope:", "- Purposes:", + "- Use cases:", + "- Demand signals:", "", "## Canon Surfaces", "", @@ -687,6 +713,13 @@ def _render_consumer_brief_template() -> str: "- Commands:", "- Evidence:", "- Known gaps:", + "", + "## Purpose Fit", + "", + "- State:", + "- Matched producer capabilities:", + "- Scope pressure:", + "- Requested evolution:", ] return "\n".join(lines).rstrip() + "\n" @@ -721,6 +754,9 @@ def _render_consumer_brief(consumer_id: str) -> str: "", "- `agent/retrieval-index.md`", "- `agent/templates/canon-interface-card.template.yaml`", + "- `models/governance/InfoTechCanonPurposeDemandExtension.md`", + "- `patterns/intent-scope-purposes.md`", + "- `examples/consumer-purpose-portfolio.yaml`", "- `profiles/small-saas/profile.yaml`", "- `views/by-concept.md`", "", @@ -788,6 +824,16 @@ def _safe_id(value: str) -> str: def _summary_for_artifact(artifact: Any) -> str: if artifact.kind == "profile-artifact": return f"Example artifact for the {artifact.provenance.get('profile', 'unknown')} profile: {artifact.title}." + if artifact.kind == "concept-catalog": + return f"Structured candidate concept catalog: {artifact.title}." + if artifact.kind == "example": + return f"Canon-side example artifact: {artifact.title}." + if artifact.kind == "mapping": + return f"Mapping artifact connecting canon surfaces: {artifact.title}." + if artifact.kind == "model-extension": + return f"Candidate extension to an existing canon model: {artifact.title}." + if artifact.kind == "pattern": + return f"Reusable canon pattern: {artifact.title}." if artifact.kind == "profile": return f"Profile that constrains canon artifacts for a practical implementation slice: {artifact.title}." if artifact.kind == "kernel": diff --git a/src/info_tech_canon/validation.py b/src/info_tech_canon/validation.py index 8e946e4..a1980f1 100644 --- a/src/info_tech_canon/validation.py +++ b/src/info_tech_canon/validation.py @@ -52,6 +52,44 @@ REQUIRED_SCHEMAS = ( "workplan.schema.yaml", ) +RETRIEVAL_BRIEF_KINDS = { + "concept-catalog", + "example", + "kernel", + "mapping", + "model", + "model-extension", + "pattern", + "profile", + "standard", +} + +PURPOSE_REQUIRED_ARTIFACT_IDS = { + "concept-catalog/purpose-demand", + "example/consumer-purpose-portfolio", + "mapping/purpose-demand-governance-candidates", + "model/purpose-demand-extension", + "pattern/intent-scope-purposes", +} + +PURPOSE_REQUIRED_CONCEPTS = { + "Purpose", + "ConsumerPurpose", + "UseCase", + "DemandSignal", + "ConsumerNeed", + "ProducerCapability", + "PurposeFit", + "ScopePressure", + "EvolutionRequest", +} + +PURPOSE_REQUIRED_CONSUMERS = { + "user-engine", + "railiance-fabric", + "repo-scoping", +} + def structural_checks(context: Any) -> dict[str, list[dict[str, Any]]]: errors: list[dict[str, Any]] = [] @@ -63,6 +101,7 @@ def structural_checks(context: Any) -> dict[str, list[dict[str, Any]]]: _check_canon_paths(context.repo_root, context.infospace_root, errors) _check_artifact_index(context.repo_root, context.infospace_root, errors) _check_agent_assets(context.infospace_root, context.infospace.artifacts, errors) + _check_purpose_demand_assets(context.infospace_root, context.infospace.artifacts, errors) _check_optional_assets(context.infospace_root, warnings) return {"errors": errors, "warnings": warnings} @@ -370,7 +409,7 @@ def _check_agent_assets( required_brief_artifacts = [ artifact for artifact in artifacts - if artifact.kind in {"kernel", "model", "standard", "profile"} + if artifact.kind in RETRIEVAL_BRIEF_KINDS ] for artifact in required_brief_artifacts: relative = Path("agent") / "briefs" / f"{_safe_id(artifact.id)}.md" @@ -406,6 +445,83 @@ def _check_agent_assets( ) +def _check_purpose_demand_assets( + infospace_root: Path, + artifacts: list[Any], + errors: list[dict[str, Any]], +) -> None: + artifact_ids = {artifact.id for artifact in artifacts} + for artifact_id in sorted(PURPOSE_REQUIRED_ARTIFACT_IDS - artifact_ids): + errors.append( + { + "code": "missing_purpose_demand_artifact", + "artifact_id": artifact_id, + } + ) + + extension_path = ( + infospace_root + / "models" + / "governance" + / "InfoTechCanonPurposeDemandExtension.md" + ) + frontmatter = _read_markdown_frontmatter(extension_path, errors) + owned_concepts = set(frontmatter.get("owned_concepts") or []) + for concept in sorted(PURPOSE_REQUIRED_CONCEPTS - owned_concepts): + errors.append( + { + "code": "missing_purpose_demand_owned_concept", + "concept": concept, + "path": str(extension_path), + } + ) + + concept_catalog = _read_yaml(infospace_root / "concepts" / "purpose-demand.yaml", errors) + if isinstance(concept_catalog, dict): + concepts = concept_catalog.get("concepts") or [] + catalog_titles = { + str(concept.get("title")) + for concept in concepts + if isinstance(concept, dict) and concept.get("title") + } + for concept in sorted(PURPOSE_REQUIRED_CONCEPTS - catalog_titles): + errors.append( + { + "code": "missing_purpose_demand_catalog_concept", + "concept": concept, + "path": "infospace/concepts/purpose-demand.yaml", + } + ) + + examples = _read_yaml(infospace_root / "examples" / "consumer-purpose-portfolio.yaml", errors) + if isinstance(examples, dict): + consumers = examples.get("consumers") or [] + consumer_ids = { + str(consumer.get("id")) + for consumer in consumers + if isinstance(consumer, dict) and consumer.get("id") + } + for consumer_id in sorted(PURPOSE_REQUIRED_CONSUMERS - consumer_ids): + errors.append( + { + "code": "missing_consumer_purpose_example", + "consumer": consumer_id, + "path": "infospace/examples/consumer-purpose-portfolio.yaml", + } + ) + for consumer in consumers: + if not isinstance(consumer, dict): + continue + if not consumer.get("purposes"): + errors.append( + { + "code": "consumer_purpose_example_without_purposes", + "consumer": consumer.get("id"), + "path": "infospace/examples/consumer-purpose-portfolio.yaml", + } + ) + + def _artifact_paths_by_path( infospace_root: Path, errors: list[dict[str, Any]], diff --git a/tests/test_cli.py b/tests/test_cli.py index 3de0188..ccd8ba4 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -11,7 +11,7 @@ def test_cli_inspect_emits_json(capsys) -> None: assert exit_code == 0 payload = json.loads(capsys.readouterr().out) assert payload["ok"] is True - assert payload["infospace"]["artifact_count"] == 29 + assert payload["infospace"]["artifact_count"] == 34 def test_cli_missing_profile_uses_structured_error(capsys) -> None: diff --git a/tests/test_service.py b/tests/test_service.py index 0fd4968..6d303bd 100644 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -19,10 +19,15 @@ def test_inspect_canon_counts_artifact_kinds() -> None: assert payload["ok"] is True assert payload["infospace"]["slug"] == "canon" - assert payload["infospace"]["artifact_count"] == 29 + assert payload["infospace"]["artifact_count"] == 34 assert payload["infospace"]["kinds"] == { + "concept-catalog": 1, + "example": 1, "kernel": 2, + "mapping": 1, "model": 11, + "model-extension": 1, + "pattern": 1, "profile": 1, "profile-artifact": 13, "standard": 2, @@ -40,14 +45,14 @@ def test_validate_canon_passes_scaffold() -> None: assert payload["ok"] is True assert payload["errors"] == [] assert "warnings" in payload - assert payload["details"]["artifact_count"] == 29 + assert payload["details"]["artifact_count"] == 34 def test_graph_exports_relationship_summary() -> None: payload = artifact_graph() assert payload["ok"] is True - assert payload["graph"]["node_count"] == 29 + assert payload["graph"]["node_count"] == 34 assert payload["graph"]["edge_count"] > 15 @@ -87,6 +92,10 @@ def test_generators_write_expected_assets(tmp_path) -> None: assert (root / "agent" / "retrieval-index.yaml").is_file() assert (root / "agent" / "retrieval-index.json").is_file() assert (root / "agent" / "briefs" / "model-access-control.md").is_file() + assert ( + root / "agent" / "briefs" / "model-purpose-demand-extension.md" + ).is_file() + assert (root / "agent" / "briefs" / "pattern-intent-scope-purposes.md").is_file() assert ( root / "agent" / "templates" / "canon-interface-card.template.yaml" ).is_file() diff --git a/workplans/ITC-WP-0006-purpose-and-demand-model.md b/workplans/ITC-WP-0006-purpose-and-demand-model.md index 9ecb2c6..5982124 100644 --- a/workplans/ITC-WP-0006-purpose-and-demand-model.md +++ b/workplans/ITC-WP-0006-purpose-and-demand-model.md @@ -4,7 +4,7 @@ type: workplan title: "Purpose And Demand Model Extension" domain: canon repo: info-tech-canon -status: proposed +status: finished priority: high created: "2026-05-23" updated: "2026-05-23" @@ -47,7 +47,7 @@ PURPOSES ```task id: ITC-WP-0006-T01 -status: todo +status: done priority: high state_hub_task_id: "654ce87f-2967-4998-8528-3ec6db31ff1c" ``` @@ -68,7 +68,7 @@ state_hub_task_id: "654ce87f-2967-4998-8528-3ec6db31ff1c" ```task id: ITC-WP-0006-T02 -status: todo +status: done priority: high state_hub_task_id: "9fb752da-3daa-4f7b-96d4-3887673e68c2" ``` @@ -82,7 +82,7 @@ state_hub_task_id: "9fb752da-3daa-4f7b-96d4-3887673e68c2" ```task id: ITC-WP-0006-T03 -status: todo +status: done priority: high state_hub_task_id: "f2ec2951-fe90-48c6-acf2-35e0b7183513" ``` @@ -96,7 +96,7 @@ state_hub_task_id: "f2ec2951-fe90-48c6-acf2-35e0b7183513" ```task id: ITC-WP-0006-T04 -status: todo +status: done priority: medium state_hub_task_id: "5cfd80ee-3b04-4389-862b-d7913e953076" ``` @@ -110,3 +110,14 @@ state_hub_task_id: "5cfd80ee-3b04-4389-862b-d7913e953076" - PURPOSES is defined enough to use in the first consumer evaluations. - The relation between INTENT, SCOPE, and PURPOSES is explicit. - Governance model extension candidates are documented for review. + +## Implementation Notes + +- Added a candidate Purpose and Demand model extension under Governance. +- Added a structured concept catalog for Purpose, ConsumerPurpose, UseCase, + DemandSignal, ConsumerNeed, ProducerCapability, PurposeFit, ScopePressure, + and EvolutionRequest. +- Added the INTENT/SCOPE/PURPOSES pattern and governance extension mapping. +- Added canon-side examples for user-engine, railiance-fabric, and repo-scoping. +- Extended validation and retrieval generation so the new PURPOSES assets are + indexed, briefed, and checked. diff --git a/workplans/index.yaml b/workplans/index.yaml index 03c4b29..a1ab7d5 100644 --- a/workplans/index.yaml +++ b/workplans/index.yaml @@ -83,7 +83,7 @@ workplans: - id: ITC-WP-0006 title: Purpose And Demand Model Extension - status: proposed + status: finished priority: high path: workplans/ITC-WP-0006-purpose-and-demand-model.md depends_on: