From b081d39da1353201f879ee6832d4e3e52b791c73 Mon Sep 17 00:00:00 2001 From: tegwick Date: Sat, 5 Sep 2026 00:50:09 +0200 Subject: [PATCH] Implement canon conformance and maintenance optimizations Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a06e82-3e08-7042-a79d-438ac6eed8db --- .repo-manager/index.json | 1090 +++++++++++++++++ CHANGELOG.md | 39 + INTENT.md | 30 +- Makefile | 14 +- README.md | 13 + SCOPE.md | 308 ++--- WORK-RECORDS.md | 15 +- canon.yaml | 29 +- docs/canon-consumption.md | 86 ++ ...-09-05_002437+0200-scope-against-intent.md | 193 +++ .../2026-09-05_optimization-implementation.md | 87 ++ ...xample-emission-cadence-qonto-assistant.md | 30 + .../mapping-emission-cadence-handover.md | 29 + .../agent/briefs/standard-emission-cadence.md | 37 + infospace/agent/global-agent-brief.md | 4 +- infospace/agent/retrieval-index.json | 144 ++- infospace/agent/retrieval-index.md | 52 +- infospace/agent/retrieval-index.yaml | 96 +- infospace/artifacts/index.yaml | 70 ++ .../emission-cadence/ASSIMILATION.md | 79 ++ .../emission-cadence/assimilation.yaml | 18 + .../emission-cadence/comparison-matrix.md | 12 + .../emission-cadence/extracted-concepts.yaml | 33 + .../emission-cadence/mappings.yaml | 25 + .../emission-cadence/open-questions.md | 14 + .../emission-cadence/proposed-changes.md | 12 + .../emission-cadence/source-summary.md | 17 + .../source/EmissionCadenceDeclaration.md | 134 ++ infospace/indexes/artifact-tree.yaml | 53 +- infospace/indexes/concept-ownership.yaml | 42 +- infospace/indexes/import-matrix.yaml | 41 + infospace/infospace.yaml | 3 + .../artifacts/capability-requirements.yaml | 68 + infospace/profiles/small-saas/profile.yaml | 2 + .../schemas/emission-cadence.schema.yaml | 159 +++ infospace/schemas/index.yaml | 2 + .../InfoTechCanonEmissionCadenceStandard.md | 214 ++++ .../examples/qonto-assistant.yaml | 36 + infospace/validation/latest.json | 488 +++++++- infospace/views/by-concept.md | 12 +- infospace/views/by-mapping-target.md | 19 + infospace/views/by-standard.md | 7 + infospace/views/import-matrix.md | 151 +-- infospace/views/kernel-overview.md | 27 +- infospace/views/repository-tree.md | 19 +- intakes/intakes.md | 11 +- pyproject.toml | 3 +- src/info_tech_canon/bench.py | 10 +- src/info_tech_canon/capability.py | 3 +- src/info_tech_canon/cli.py | 50 + src/info_tech_canon/contracts.py | 82 ++ src/info_tech_canon/maintenance.py | 108 ++ src/info_tech_canon/paths.py | 15 + src/info_tech_canon/service.py | 25 +- src/info_tech_canon/validation.py | 24 +- tests/test_api.py | 2 +- tests/test_cli.py | 2 +- tests/test_emission_cadence.py | 59 + tests/test_maintenance.py | 116 ++ tests/test_service.py | 34 +- ...NFO-WP-0019-conformance-and-maintenance.md | 132 ++ ...-WP-0014-capability-model-consolidation.md | 10 +- .../ITC-WP-0018-emission-cadence-contract.md | 80 ++ workplans/index.yaml | 45 +- 64 files changed, 4491 insertions(+), 373 deletions(-) create mode 100644 .repo-manager/index.json create mode 100644 docs/canon-consumption.md create mode 100644 history/2026-09-05_002437+0200-scope-against-intent.md create mode 100644 history/2026-09-05_optimization-implementation.md create mode 100644 infospace/agent/briefs/example-emission-cadence-qonto-assistant.md create mode 100644 infospace/agent/briefs/mapping-emission-cadence-handover.md create mode 100644 infospace/agent/briefs/standard-emission-cadence.md create mode 100644 infospace/assimilation/emission-cadence/ASSIMILATION.md create mode 100644 infospace/assimilation/emission-cadence/assimilation.yaml create mode 100644 infospace/assimilation/emission-cadence/comparison-matrix.md create mode 100644 infospace/assimilation/emission-cadence/extracted-concepts.yaml create mode 100644 infospace/assimilation/emission-cadence/mappings.yaml create mode 100644 infospace/assimilation/emission-cadence/open-questions.md create mode 100644 infospace/assimilation/emission-cadence/proposed-changes.md create mode 100644 infospace/assimilation/emission-cadence/source-summary.md create mode 100644 infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md create mode 100644 infospace/profiles/small-saas/artifacts/capability-requirements.yaml create mode 100644 infospace/schemas/emission-cadence.schema.yaml create mode 100644 infospace/standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md create mode 100644 infospace/standards/emission-cadence/examples/qonto-assistant.yaml create mode 100644 src/info_tech_canon/contracts.py create mode 100644 src/info_tech_canon/maintenance.py create mode 100644 src/info_tech_canon/paths.py create mode 100644 tests/test_emission_cadence.py create mode 100644 tests/test_maintenance.py create mode 100644 workplans/INFO-WP-0019-conformance-and-maintenance.md create mode 100644 workplans/ITC-WP-0018-emission-cadence-contract.md diff --git a/.repo-manager/index.json b/.repo-manager/index.json new file mode 100644 index 0000000..ffe9a42 --- /dev/null +++ b/.repo-manager/index.json @@ -0,0 +1,1090 @@ +{ + "schema": "repo_manager.index.v1", + "slug": "layer-declaration", + "repo_root": "/home/worsch/info-tech-canon", + "head_sha": "1dda84fc56467bb0c84610cfb6ffc8137a6d97a9", + "observed_at": "2026-08-28T21:01:51.712288Z", + "source_fingerprint": "dc60dfec42d37db1efdc946037a878409f51b5be88fba1ac9e0149772c76147d", + "source_files": [ + ".repo-classification.yaml", + "INTENT.md", + "intakes/intakes.md", + "workplans/ADHOC-2026-08-15.md", + "workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md", + "workplans/ITC-WP-0002-service-surface-cli-json-api.md", + "workplans/ITC-WP-0003-validation-indexes-and-generated-views.md", + "workplans/ITC-WP-0004-small-saas-profile-proof.md", + "workplans/ITC-WP-0005-retrieval-agent-briefs-and-interface-cards.md", + "workplans/ITC-WP-0006-purpose-and-demand-model.md", + "workplans/ITC-WP-0007-user-engine-evaluation-readiness.md", + "workplans/ITC-WP-0008-railiance-fabric-conformance-support.md", + "workplans/ITC-WP-0009-repo-scoping-comparison-and-extension.md", + "workplans/ITC-WP-0010-caring-kubernetes-rbac-benchmark.md", + "workplans/ITC-WP-0011-canon-consumer-alignment-review-kit.md", + "workplans/ITC-WP-0012-canonical-repository-layout-standard.md", + "workplans/ITC-WP-0013-attribute-value-type-catalog.md", + "workplans/ITC-WP-0014-capability-model-consolidation.md", + "workplans/ITC-WP-0015-evidence-basis.md", + "workplans/ITC-WP-0016-practice-pattern-language.md", + "workplans/ITC-WP-0017-agentic-drives-functional.md" + ], + "work_records": [ + { + "kind": "workplan", + "id": "ITC-WP-ADHOC-2026-08-15", + "status": "finished", + "title": "Ad hoc: feedback directory and provision relationships", + "source_path": "workplans/ADHOC-2026-08-15.md", + "uuid": null, + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-ADHOC-2026-08-15-T01", + "status": "done", + "title": "T01 \u2014 Establish `feedback/` front door", + "source_path": "workplans/ADHOC-2026-08-15.md", + "uuid": null, + "parent_id": "ITC-WP-ADHOC-2026-08-15", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-ADHOC-2026-08-15-T02", + "status": "done", + "title": "T02 \u2014 Seed first report from resource-control", + "source_path": "workplans/ADHOC-2026-08-15.md", + "uuid": null, + "parent_id": "ITC-WP-ADHOC-2026-08-15", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-ADHOC-2026-08-15-T03", + "status": "done", + "title": "T03 \u2014 Provision-to-provision relationships", + "source_path": "workplans/ADHOC-2026-08-15.md", + "uuid": null, + "parent_id": "ITC-WP-ADHOC-2026-08-15", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0001", + "status": "finished", + "title": "Infospace Scaffold And Seed Placement", + "source_path": "workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md", + "uuid": "609380c7-fcc7-40ef-bb23-cdca80b4ce0a", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0001-T01", + "status": "done", + "title": "T01 - Create infospace layout", + "source_path": "workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md", + "uuid": "3a7b29ba-bc15-4ca1-ba61-ec4ffaefa2a1", + "parent_id": "ITC-WP-0001", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0001-T02", + "status": "done", + "title": "T02 - Move seed artifacts into canonical paths", + "source_path": "workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md", + "uuid": "b5894ec2-e79e-4308-9125-fd10c4b76faf", + "parent_id": "ITC-WP-0001", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0001-T03", + "status": "done", + "title": "T03 - Adapt manifests and path references", + "source_path": "workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md", + "uuid": "4826fbad-3dc7-4759-b086-8cb3cf50f6ff", + "parent_id": "ITC-WP-0001", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0001-T04", + "status": "done", + "title": "T04 - Preserve provenance", + "source_path": "workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md", + "uuid": "ff5bae40-9e89-4ec7-9f96-6670e140f4fa", + "parent_id": "ITC-WP-0001", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0002", + "status": "finished", + "title": "Service Surface Baseline CLI JSON API", + "source_path": "workplans/ITC-WP-0002-service-surface-cli-json-api.md", + "uuid": "b467e4da-6ce4-4608-a446-319427954b32", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0002-T01", + "status": "done", + "title": "T01 - Package skeleton", + "source_path": "workplans/ITC-WP-0002-service-surface-cli-json-api.md", + "uuid": "0d843b8f-0bba-4bd8-8879-5641d2b50848", + "parent_id": "ITC-WP-0002", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0002-T02", + "status": "done", + "title": "T02 - CLI commands", + "source_path": "workplans/ITC-WP-0002-service-surface-cli-json-api.md", + "uuid": "030955d2-e6af-48d8-a617-943cf4f10628", + "parent_id": "ITC-WP-0002", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0002-T03", + "status": "done", + "title": "T03 - Python service layer", + "source_path": "workplans/ITC-WP-0002-service-surface-cli-json-api.md", + "uuid": "a926fa1d-7dc0-4450-84c9-c0d49b3744ea", + "parent_id": "ITC-WP-0002", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0002-T04", + "status": "done", + "title": "T04 - API baseline", + "source_path": "workplans/ITC-WP-0002-service-surface-cli-json-api.md", + "uuid": "070ef996-cf45-47ed-b9d8-1e313c9b0e22", + "parent_id": "ITC-WP-0002", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0003", + "status": "finished", + "title": "Validation Indexes And Generated Views", + "source_path": "workplans/ITC-WP-0003-validation-indexes-and-generated-views.md", + "uuid": "510e6d15-ac2a-48ee-9ef1-3d14c21e16aa", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0003-T01", + "status": "done", + "title": "T01 - Make targets", + "source_path": "workplans/ITC-WP-0003-validation-indexes-and-generated-views.md", + "uuid": "246d5671-9585-43e1-880c-cc4ce728459f", + "parent_id": "ITC-WP-0003", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0003-T02", + "status": "done", + "title": "T02 - Structural validation", + "source_path": "workplans/ITC-WP-0003-validation-indexes-and-generated-views.md", + "uuid": "8db6058f-754f-4d92-a93f-d4119b2cad55", + "parent_id": "ITC-WP-0003", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0003-T03", + "status": "done", + "title": "T03 - Schemas", + "source_path": "workplans/ITC-WP-0003-validation-indexes-and-generated-views.md", + "uuid": "ea3c6e98-fb3c-44fd-9f54-9a934ab62455", + "parent_id": "ITC-WP-0003", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0003-T04", + "status": "done", + "title": "T04 - Generated views", + "source_path": "workplans/ITC-WP-0003-validation-indexes-and-generated-views.md", + "uuid": "b33bbda7-8ec6-48b2-a637-571a87473c5a", + "parent_id": "ITC-WP-0003", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0003-T05", + "status": "done", + "title": "T05 - Ownership and duplication checks", + "source_path": "workplans/ITC-WP-0003-validation-indexes-and-generated-views.md", + "uuid": "01469609-91fb-48e3-b6e5-11e6342b29af", + "parent_id": "ITC-WP-0003", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0004", + "status": "finished", + "title": "Small SaaS Profile Proof", + "source_path": "workplans/ITC-WP-0004-small-saas-profile-proof.md", + "uuid": "b531a077-ccc1-4aff-bbd3-a5ee3daf8661", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0004-T01", + "status": "done", + "title": "T01 - Profile definition", + "source_path": "workplans/ITC-WP-0004-small-saas-profile-proof.md", + "uuid": "21801d10-2ec9-45b9-bb7a-632f251075d5", + "parent_id": "ITC-WP-0004", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0004-T02", + "status": "done", + "title": "T02 - Example artifacts", + "source_path": "workplans/ITC-WP-0004-small-saas-profile-proof.md", + "uuid": "92c860ca-174d-4d31-b11c-66750a2d3588", + "parent_id": "ITC-WP-0004", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0004-T03", + "status": "done", + "title": "T03 - Validation rules", + "source_path": "workplans/ITC-WP-0004-small-saas-profile-proof.md", + "uuid": "b342257f-beef-4ec6-b116-b9f8798df10c", + "parent_id": "ITC-WP-0004", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0004-T04", + "status": "done", + "title": "T04 - Report and demo commands", + "source_path": "workplans/ITC-WP-0004-small-saas-profile-proof.md", + "uuid": "58a85249-be34-497d-a19c-96b6b343b076", + "parent_id": "ITC-WP-0004", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0005", + "status": "finished", + "title": "Retrieval Agent Briefs And Interface Cards", + "source_path": "workplans/ITC-WP-0005-retrieval-agent-briefs-and-interface-cards.md", + "uuid": "1dc61e3a-7451-42ac-bba7-1c6fa30c826c", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0005-T01", + "status": "done", + "title": "T01 - Agent briefs", + "source_path": "workplans/ITC-WP-0005-retrieval-agent-briefs-and-interface-cards.md", + "uuid": "3e509e68-2f6d-43fb-a4da-a0289f38960c", + "parent_id": "ITC-WP-0005", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0005-T02", + "status": "done", + "title": "T02 - Retrieval index", + "source_path": "workplans/ITC-WP-0005-retrieval-agent-briefs-and-interface-cards.md", + "uuid": "12f350a2-d6d2-402e-820a-5ef86478a562", + "parent_id": "ITC-WP-0005", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0005-T03", + "status": "done", + "title": "T03 - Canon Interface Card template", + "source_path": "workplans/ITC-WP-0005-retrieval-agent-briefs-and-interface-cards.md", + "uuid": "12c17aeb-1da2-4a6f-b71d-cc8614a53394", + "parent_id": "ITC-WP-0005", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0005-T04", + "status": "done", + "title": "T04 - Consumer brief templates", + "source_path": "workplans/ITC-WP-0005-retrieval-agent-briefs-and-interface-cards.md", + "uuid": "c504ffe6-1a4c-4ce6-85b4-4c455edaa461", + "parent_id": "ITC-WP-0005", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0006", + "status": "finished", + "title": "Purpose And Demand Model Extension", + "source_path": "workplans/ITC-WP-0006-purpose-and-demand-model.md", + "uuid": "71fba9d5-f34f-427b-9da1-01990ab04e4d", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0006-T01", + "status": "done", + "title": "T01 - Concept proposal", + "source_path": "workplans/ITC-WP-0006-purpose-and-demand-model.md", + "uuid": "654ce87f-2967-4998-8528-3ec6db31ff1c", + "parent_id": "ITC-WP-0006", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0006-T02", + "status": "done", + "title": "T02 - INTENT/SCOPE/PURPOSES pattern", + "source_path": "workplans/ITC-WP-0006-purpose-and-demand-model.md", + "uuid": "9fb752da-3daa-4f7b-96d4-3887673e68c2", + "parent_id": "ITC-WP-0006", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0006-T03", + "status": "done", + "title": "T03 - Governance extension candidates", + "source_path": "workplans/ITC-WP-0006-purpose-and-demand-model.md", + "uuid": "f2ec2951-fe90-48c6-acf2-35e0b7183513", + "parent_id": "ITC-WP-0006", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0006-T04", + "status": "done", + "title": "T04 - Examples", + "source_path": "workplans/ITC-WP-0006-purpose-and-demand-model.md", + "uuid": "5cfd80ee-3b04-4389-862b-d7913e953076", + "parent_id": "ITC-WP-0006", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0007", + "status": "finished", + "title": "User Engine Evaluation Readiness", + "source_path": "workplans/ITC-WP-0007-user-engine-evaluation-readiness.md", + "uuid": "72e168f7-35b2-459a-86e6-93f05206f6c2", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0007-T01", + "status": "done", + "title": "T01 - Evaluation question set", + "source_path": "workplans/ITC-WP-0007-user-engine-evaluation-readiness.md", + "uuid": "17d5792f-7452-4179-b346-f8c976fbe2eb", + "parent_id": "ITC-WP-0007", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0007-T02", + "status": "done", + "title": "T02 - Expected artifact profile", + "source_path": "workplans/ITC-WP-0007-user-engine-evaluation-readiness.md", + "uuid": "d44c6608-14d8-44cc-80a8-9959296da286", + "parent_id": "ITC-WP-0007", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0007-T03", + "status": "done", + "title": "T03 - Small SaaS alignment", + "source_path": "workplans/ITC-WP-0007-user-engine-evaluation-readiness.md", + "uuid": "fa1e3da2-1990-4945-8d53-140ad4bedcbf", + "parent_id": "ITC-WP-0007", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0007-T04", + "status": "done", + "title": "T04 - Consumer workplan brief", + "source_path": "workplans/ITC-WP-0007-user-engine-evaluation-readiness.md", + "uuid": "ffcd728f-b5eb-4449-945b-1a3f8a9640de", + "parent_id": "ITC-WP-0007", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0008", + "status": "finished", + "title": "Railiance Fabric Conformance Support", + "source_path": "workplans/ITC-WP-0008-railiance-fabric-conformance-support.md", + "uuid": "09f95da5-bfe0-42c0-a828-4b85f3cfc90a", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0008-T01", + "status": "done", + "title": "T01 - Entity and edge capture criteria", + "source_path": "workplans/ITC-WP-0008-railiance-fabric-conformance-support.md", + "uuid": "fbe6e497-5c1b-4221-b470-d185e55b99a0", + "parent_id": "ITC-WP-0008", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0008-T02", + "status": "done", + "title": "T02 - Mapping expectations", + "source_path": "workplans/ITC-WP-0008-railiance-fabric-conformance-support.md", + "uuid": "23bfb8b0-060e-4a66-a6a1-244cebc1e3c7", + "parent_id": "ITC-WP-0008", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0008-T03", + "status": "done", + "title": "T03 - Visualization examples", + "source_path": "workplans/ITC-WP-0008-railiance-fabric-conformance-support.md", + "uuid": "3f8167a3-029b-4ebf-a517-1713e80ea39f", + "parent_id": "ITC-WP-0008", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0008-T04", + "status": "done", + "title": "T04 - Consumer workplan brief", + "source_path": "workplans/ITC-WP-0008-railiance-fabric-conformance-support.md", + "uuid": "8454dda9-4fcc-4db9-afc1-3d7634d1a49f", + "parent_id": "ITC-WP-0008", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0009", + "status": "finished", + "title": "Repo Scoping Comparison And Extension", + "source_path": "workplans/ITC-WP-0009-repo-scoping-comparison-and-extension.md", + "uuid": "97efb3e4-3303-41bd-a220-d1fbd7c24f01", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0009-T01", + "status": "done", + "title": "T01 - Comparison frame", + "source_path": "workplans/ITC-WP-0009-repo-scoping-comparison-and-extension.md", + "uuid": "7f5b0093-29b8-453f-ab73-c44db71cde52", + "parent_id": "ITC-WP-0009", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0009-T02", + "status": "done", + "title": "T02 - Canon benefit analysis", + "source_path": "workplans/ITC-WP-0009-repo-scoping-comparison-and-extension.md", + "uuid": "d026d36b-e89d-4498-9c07-0f2e7f0c3c4c", + "parent_id": "ITC-WP-0009", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0009-T03", + "status": "done", + "title": "T03 - Extension candidates", + "source_path": "workplans/ITC-WP-0009-repo-scoping-comparison-and-extension.md", + "uuid": "98888f6a-774f-4e6b-93f4-335fb3001e9c", + "parent_id": "ITC-WP-0009", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0009-T04", + "status": "done", + "title": "T04 - Consumer workplan brief", + "source_path": "workplans/ITC-WP-0009-repo-scoping-comparison-and-extension.md", + "uuid": "5b8ac21c-e0e4-4e45-817c-a91111712c82", + "parent_id": "ITC-WP-0009", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0010", + "status": "finished", + "title": "CARING Kubernetes RBAC Benchmark", + "source_path": "workplans/ITC-WP-0010-caring-kubernetes-rbac-benchmark.md", + "uuid": "b64f0fc9-8668-4c02-8247-67a41660bdeb", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0010-T01", + "status": "done", + "title": "T01 - Benchmark workspace", + "source_path": "workplans/ITC-WP-0010-caring-kubernetes-rbac-benchmark.md", + "uuid": "9ad31e13-7dc2-469c-b539-d3375a16c5f4", + "parent_id": "ITC-WP-0010", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0010-T02", + "status": "done", + "title": "T02 - RBAC assimilation", + "source_path": "workplans/ITC-WP-0010-caring-kubernetes-rbac-benchmark.md", + "uuid": "180d7ccf-7daa-4f4c-a92a-641ef5d7b442", + "parent_id": "ITC-WP-0010", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0010-T03", + "status": "done", + "title": "T03 - CARING access descriptors", + "source_path": "workplans/ITC-WP-0010-caring-kubernetes-rbac-benchmark.md", + "uuid": "4ffd6643-a7ab-487c-a09a-0fcaf0115c83", + "parent_id": "ITC-WP-0010", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0010-T04", + "status": "done", + "title": "T04 - Findings and canon pressure", + "source_path": "workplans/ITC-WP-0010-caring-kubernetes-rbac-benchmark.md", + "uuid": "52632a4c-6e03-4212-ad6b-0cbb7b3a6e42", + "parent_id": "ITC-WP-0010", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0011", + "status": "finished", + "title": "Canon Consumer Alignment Review Kit", + "source_path": "workplans/ITC-WP-0011-canon-consumer-alignment-review-kit.md", + "uuid": "86df9550-c49b-471d-b472-040a1626efc4", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0011-T01", + "status": "done", + "title": "T01 - Review workflow and intake protocol", + "source_path": "workplans/ITC-WP-0011-canon-consumer-alignment-review-kit.md", + "uuid": "0cc9582b-e0c6-4f71-a5b8-51a65a9a741b", + "parent_id": "ITC-WP-0011", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0011-T02", + "status": "done", + "title": "T02 - Alignment review schema and scorecard", + "source_path": "workplans/ITC-WP-0011-canon-consumer-alignment-review-kit.md", + "uuid": "0318d67e-0e67-4ba8-9d6f-a425959b1060", + "parent_id": "ITC-WP-0011", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0011-T03", + "status": "done", + "title": "T03 - Model and standard selection guide", + "source_path": "workplans/ITC-WP-0011-canon-consumer-alignment-review-kit.md", + "uuid": "d7074e43-02c6-4cd3-b4e7-a86271b0c2fa", + "parent_id": "ITC-WP-0011", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0011-T04", + "status": "done", + "title": "T04 - Consumer workplan templates", + "source_path": "workplans/ITC-WP-0011-canon-consumer-alignment-review-kit.md", + "uuid": "fd7d60e9-cf83-41f7-84bc-ece4f66530e9", + "parent_id": "ITC-WP-0011", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0011-T05", + "status": "done", + "title": "T05 - CLI, JSON, API, and retrieval surface", + "source_path": "workplans/ITC-WP-0011-canon-consumer-alignment-review-kit.md", + "uuid": "50f29030-4558-4c6b-a60b-16b7c560d153", + "parent_id": "ITC-WP-0011", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0012", + "status": "finished", + "title": "Canonical Repository Layout Standard Integration", + "source_path": "workplans/ITC-WP-0012-canonical-repository-layout-standard.md", + "uuid": "f40ecb8b-7d81-46e6-a420-f7843f708175", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0012-T01", + "status": "done", + "title": "T01 - Demand intake", + "source_path": "workplans/ITC-WP-0012-canonical-repository-layout-standard.md", + "uuid": "9ea93c0f-e69b-4ab5-81c4-75d43a4273cf", + "parent_id": "ITC-WP-0012", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0012-T02", + "status": "done", + "title": "T02 - Placement decision (review gate)", + "source_path": "workplans/ITC-WP-0012-canonical-repository-layout-standard.md", + "uuid": "55232b4f-f286-410e-9795-99c8a2cdf25b", + "parent_id": "ITC-WP-0012", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0012-T03", + "status": "done", + "title": "T03 - Author the standard artifact", + "source_path": "workplans/ITC-WP-0012-canonical-repository-layout-standard.md", + "uuid": "b9e30be4-c567-4a15-a8ee-8d2898dee9a5", + "parent_id": "ITC-WP-0012", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0012-T04", + "status": "done", + "title": "T04 - Reconcile and regenerate", + "source_path": "workplans/ITC-WP-0012-canonical-repository-layout-standard.md", + "uuid": "8a89122f-737d-4348-83a8-909b251fa1ae", + "parent_id": "ITC-WP-0012", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0012-T05", + "status": "done", + "title": "T05 - Consumer adoption brief", + "source_path": "workplans/ITC-WP-0012-canonical-repository-layout-standard.md", + "uuid": "7313abf2-e9d3-40d9-8d27-0279d8f4b36c", + "parent_id": "ITC-WP-0012", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0013", + "status": "finished", + "title": "Attribute Value Type catalog (Data Model extension)", + "source_path": "workplans/ITC-WP-0013-attribute-value-type-catalog.md", + "uuid": "58bbefc3-ac9f-58af-b3ab-2a56174aecdc", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0013-T01", + "status": "done", + "title": "T01 \u2014 Demand intake (PURPOSES)", + "source_path": "workplans/ITC-WP-0013-attribute-value-type-catalog.md", + "uuid": "dc724ebb-e0f1-516b-b989-1457cfaa6f1e", + "parent_id": "ITC-WP-0013", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0013-T02", + "status": "done", + "title": "T02 \u2014 Draft catalog standard", + "source_path": "workplans/ITC-WP-0013-attribute-value-type-catalog.md", + "uuid": "ca60c901-f58e-56da-9c16-7fa64db4b139", + "parent_id": "ITC-WP-0013", + "extra": { + "depends_on": [ + "T01" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0013-T03", + "status": "done", + "title": "T03 \u2014 Machine-readable catalog", + "source_path": "workplans/ITC-WP-0013-attribute-value-type-catalog.md", + "uuid": "eac48a02-297b-5b75-a845-60253e39b1db", + "parent_id": "ITC-WP-0013", + "extra": { + "depends_on": [ + "T02" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0013-T04", + "status": "done", + "title": "T04 \u2014 Consumer alignment note", + "source_path": "workplans/ITC-WP-0013-attribute-value-type-catalog.md", + "uuid": "f8ebcdc1-250d-5df6-89cf-dff9920cd310", + "parent_id": "ITC-WP-0013", + "extra": { + "depends_on": [ + "T03" + ] + } + }, + { + "kind": "workplan", + "id": "ITC-WP-0014", + "status": "finished", + "title": "Capability Model consolidation (post-ITCC assimilation)", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "f2811adc-7244-5d07-b1e9-39b0717097af", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0014-T01", + "status": "done", + "title": "T01 \u2014 Resolve the `governance.*` identifier prefix (OQ-2)", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "2c17cd2e-3526-51ea-bf2f-39e387b5ca9a", + "parent_id": "ITC-WP-0014", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0014-T02", + "status": "done", + "title": "T02 \u2014 Publish `capability.schema.yaml`", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "9471f300-a0a9-5159-a99d-4a2dafc9e5b7", + "parent_id": "ITC-WP-0014", + "extra": { + "depends_on": [ + "T01" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0014-T03", + "status": "done", + "title": "T03 \u2014 Formal mapping artifacts for each anchor", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "5ef471bc-4741-5b21-b9fe-5f0616a0b7f5", + "parent_id": "ITC-WP-0014", + "extra": { + "depends_on": [ + "T02" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0014-T04", + "status": "todo", + "title": "T04 \u2014 Small-SaaS capability requirement set", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "a4621991-fea8-5f74-b0fd-e5e606ea32a7", + "parent_id": "ITC-WP-0014", + "extra": { + "depends_on": [ + "T02" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0014-T05", + "status": "done", + "title": "T05 \u2014 Landscape and kernel-map revision", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "15f92689-6679-5861-992b-a923df12570a", + "parent_id": "ITC-WP-0014", + "extra": { + "depends_on": [ + "T01" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0014-T06", + "status": "done", + "title": "T06 \u2014 Requirement/provision validation in the service surface", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "917d899b-ba0b-5dad-863d-4f3598315c09", + "parent_id": "ITC-WP-0014", + "extra": { + "depends_on": [ + "T02" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0014-T07", + "status": "done", + "title": "T07 \u2014 Promotion review", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "47c80168-47f4-5c62-978d-1a4865805240", + "parent_id": "ITC-WP-0014", + "extra": { + "depends_on": [ + "T01", + "T02", + "T03", + "T11" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0014-T08", + "status": "done", + "title": "T08 \u2014 Finding A: move resource-class declaration off the contract", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "e5781819-0762-5235-9d15-e8bff7076a94", + "parent_id": "ITC-WP-0014", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0014-T09", + "status": "done", + "title": "T09 \u2014 Finding B: demand-side targets and constraints", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "4ae015ae-9a90-5efd-8521-673cbe595569", + "parent_id": "ITC-WP-0014", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0014-T10", + "status": "done", + "title": "T10 \u2014 Finding C: human effort, native units, intelligence as substitute", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "87dccc73-a8dd-5a5a-a3fa-0bc488098b45", + "parent_id": "ITC-WP-0014", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0014-T11", + "status": "done", + "title": "T11 \u2014 Joinable consumer proof for \u00a710.3", + "source_path": "workplans/ITC-WP-0014-capability-model-consolidation.md", + "uuid": "5cb4d4ab-9463-5bd5-b7be-ecf7da941d39", + "parent_id": "ITC-WP-0014", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0015", + "status": "finished", + "title": "Evidence Basis catalog (Governance extension)", + "source_path": "workplans/ITC-WP-0015-evidence-basis.md", + "uuid": "0419b55f-541c-5289-9918-b30aa2d2a827", + "parent_id": null, + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0015-T01", + "status": "done", + "title": "T01 \u2014 Demand intake", + "source_path": "workplans/ITC-WP-0015-evidence-basis.md", + "uuid": "15b98c69-6de7-56fe-8d72-d0ac2221ceef", + "parent_id": "ITC-WP-0015", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0015-T02", + "status": "done", + "title": "T02 \u2014 Catalog and GOV section", + "source_path": "workplans/ITC-WP-0015-evidence-basis.md", + "uuid": "8a4af843-241d-51c4-adb9-6589d23e1f08", + "parent_id": "ITC-WP-0015", + "extra": { + "depends_on": [ + "T01" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0015-T03", + "status": "done", + "title": "T03 \u2014 Import on CapabilityConsumption", + "source_path": "workplans/ITC-WP-0015-evidence-basis.md", + "uuid": "5cf6b32b-fddf-5289-99b7-df9f5e2fbc8f", + "parent_id": "ITC-WP-0015", + "extra": { + "depends_on": [ + "T02" + ] + } + }, + { + "kind": "workplan", + "id": "ITC-WP-0016", + "status": "finished", + "title": "PracticePattern language and InterfaceDeprecationStrangler", + "source_path": "workplans/ITC-WP-0016-practice-pattern-language.md", + "uuid": "333d0ab9-cd9d-54a1-94ee-719fec419c90", + "parent_id": null, + "extra": { + "related": [ + "STATE-WP-0079" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0016-T01", + "status": "done", + "title": "T01 \u2014 Define the PracticePattern scheme", + "source_path": "workplans/ITC-WP-0016-practice-pattern-language.md", + "uuid": "f0bdca33-246b-5796-bdda-0ab018a411fe", + "parent_id": "ITC-WP-0016", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0016-T02", + "status": "done", + "title": "T02 \u2014 Document InterfaceDeprecationStrangler", + "source_path": "workplans/ITC-WP-0016-practice-pattern-language.md", + "uuid": "7b02cde0-3208-5f69-87c8-2b9ccc0cbde4", + "parent_id": "ITC-WP-0016", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0016-T03", + "status": "done", + "title": "T03 \u2014 Publish retrieval and navigation assets", + "source_path": "workplans/ITC-WP-0016-practice-pattern-language.md", + "uuid": "8aa4de40-27a8-5a73-8ead-5b9a7b9f595a", + "parent_id": "ITC-WP-0016", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0016-T04", + "status": "done", + "title": "T04 \u2014 Reference the pattern from arc-nexus", + "source_path": "workplans/ITC-WP-0016-practice-pattern-language.md", + "uuid": "eb0c1da1-407a-5616-939d-6b4a6bf1a347", + "parent_id": "ITC-WP-0016", + "extra": {} + }, + { + "kind": "workplan", + "id": "ITC-WP-0017", + "status": "finished", + "title": "AgenticDrivesFunctional PracticePattern", + "source_path": "workplans/ITC-WP-0017-agentic-drives-functional.md", + "uuid": "bd5c26dc-2751-5502-8151-c1eb09ce3378", + "parent_id": null, + "extra": { + "related": [ + "ITC-WP-0016" + ] + } + }, + { + "kind": "task", + "id": "ITC-WP-0017-T01", + "status": "done", + "title": "T01 \u2014 Define the practice", + "source_path": "workplans/ITC-WP-0017-agentic-drives-functional.md", + "uuid": "dc7f97f0-251c-5344-a951-12f66c58b71e", + "parent_id": "ITC-WP-0017", + "extra": {} + }, + { + "kind": "task", + "id": "ITC-WP-0017-T02", + "status": "done", + "title": "T02 \u2014 Register and publish the pattern", + "source_path": "workplans/ITC-WP-0017-agentic-drives-functional.md", + "uuid": "ce2cb013-7f15-5818-b80b-0cb1f52ddaab", + "parent_id": "ITC-WP-0017", + "extra": {} + }, + { + "kind": "intake", + "id": "ITC-IN-0001", + "status": "open", + "title": "Declaration requested: state this repository's layer in INTENT.md (security layer model \u00a711)", + "source_path": "intakes/intakes.md", + "uuid": null, + "parent_id": null, + "extra": { + "record": { + "id": "ITC-IN-0001", + "kind": "intake", + "title": "Declaration requested: state this repository's layer in INTENT.md (security layer model \u00a711)", + "status": "open", + "origin": "cross-repo", + "origin_ref": "net-kingdom security-layer-model_v0.4 \u00a711", + "priority": "low", + "owner": "info-tech-canon", + "requested_by": "gate-house", + "proposed_layer": "Taxonomy", + "description": "A conformance sweep on 2026-08-28 found this repository has no layer declaration of its own. It carries a layering review note gate-house wrote into the top of its INTENT.md on 2026-08-24, and that note names a layer \u2014 but the words are gate-house's, sitting above a line admitting the body is unadapted. Section 11 has since been amended to say so explicitly: a layer stated about a repository by another repository is not a declaration; only the repository's own file, in its own voice, conforms. Seven of fifteen estate-authored repositories have declared; this is one of the eight that have not, and the standard does not claim adoption on the basis of notes gate-house wrote. REQUESTED: state the layer in INTENT.md in your own voice, or contest it. PROPOSED LAYER: Taxonomy. Cross-cutting semantic contracts for the whole ecosystem; NetKingdom-specific security architecture is net-kingdom canon's. The boundary between the two canons is worth stating in your own words. Contesting is a real option and costs nothing \u2014 the three repositories that reviewed this model each returned a correction, two of which changed the standard. If the proposed layer is wrong for what this repository actually does, that is more useful to us than a label added to close a checkbox. Standard: net-kingdom/canon/standards/security-layer-model_v0.4.md.", + "created": "2026-08-28T21:01:51.123381Z", + "updated": "2026-08-28T21:01:51.123381Z" + } + } + } + ], + "events": [ + { + "type": "repo.command.applied", + "command": "repo.work.create_intake", + "operation": "create", + "correlation_id": "d5052143-94f3-49e8-8cd5-0a0a135b8473", + "kind": "intake", + "id": "ITC-IN-0001", + "git_sha": "1dda84fc56467bb0c84610cfb6ffc8137a6d97a9", + "files_touched": [ + "intakes/intakes.md" + ], + "source": "repo-manager", + "emitted_at": "2026-08-28T21:01:51.712359Z" + } + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index d4afd7b..a8e9bf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,45 @@ semantics. --- +## 0.7.0 — 2026-09-04 + +### Added — ecosystem-wide EmissionCadenceDeclaration contract + +**Change.** Added the draft `ITC-EMISSION-CADENCE` standard and JSON Schema +contract version `0.1`. The contract defines source-authored expected-rate, +heartbeat, and reconciliation cadence semantics, namespaced profile extensions, +strict form validation, and compatibility rules. A schema-valid +`qonto-assistant` worked example demonstrates both forms without claiming to be +the source-owned live declaration. + +**Ownership.** InfoTechCanon owns the generic forms, fields, validation, and +evolution under `GH-DEC-2026-004`. NetKingdom owns its importing security +profile, including evidence-class policy and stronger requirements for rare +load-bearing streams. Sources own instances; observers own evaluation and +findings. + +**Rationale.** Stream silence cannot be evaluated from event contents alone, +and a Staff-layer consumer must not own the Taxonomy contract it evaluates. +The split preserves one owner per semantic layer without turning NetKingdom +security doctrine into an ecosystem-wide rule. + +**Provenance.** King's Guard draft 0.1.0, frozen under +`assimilation/emission-cadence`; disposition `adapt`; `ITC-WP-0018`. + +**Breaking:** no. This is a new draft artifact and schema. + +**Validation.** The built-in example is checked against JSON Schema Draft 2020-12; +negative tests cover missing/ambiguous windows, missing intermittent mechanisms, +and unnamespaced profile fields. `make validate` reports 0 errors and 0 warnings; +`make test` passes 29 tests. + +**Completed illustration.** The Small-SaaS profile now includes the optional +ITC-CAP requirement/provision record left by `ITC-WP-0014-T04`. Its four +requirements are joined to catalog-valid provisions and evidence and meet their +declared maturity floors. + +--- + ## 0.6.0 — 2026-08-15 ### Frozen — ITC-CAP draft; AttributeValueType catalog; joinable review diff --git a/INTENT.md b/INTENT.md index 598c1aa..ae7adbf 100644 --- a/INTENT.md +++ b/INTENT.md @@ -1,26 +1,25 @@ # INTENT -> **NetKingdom layering review — 2026-08-28.** This repository's role was reviewed -> against the NetKingdom IT-security layer model: **Taxonomy → Tooling → Engines → -> Staff**, layered by determinism and by the kind of artifact each layer produces. -> Findings and the argument behind them: -> `gate-house/history/2026-08-28-security-layer-model-and-gate-house-recut.md`. -> The model is `net-kingdom/canon/standards/security-layer-model_v0.1.md` (proposed), -> ratified by `gate-house/decisions/decisions.md` GH-DEC-2026-001. -> -> The layer rule that binds every repository: **Staff never touches tooling -> directly. It acts only through engine APIs.** -> -> **This repository is Taxonomy — cross-cutting, ecosystem-wide.** Clarify the split with net-kingdom canon: info-tech-canon owns cross-cutting semantic contracts and terminology for the whole ecosystem; NetKingdom-specific security architecture — including the layer model — is net-kingdom canon's. No change of role, only an explicit boundary so the two canons are not read as competing. -> -> *This note records what should change. The body below is not yet adapted.* - ## Purpose This repository exists to develop and maintain **InfoTechCanon**: an evolving, markdown-first reference system for building interoperable, adaptable, and extensible information-processing systems. InfoTechCanon provides a shared semantic foundation for standards, concepts, patterns, profiles, mappings, and assimilation processes used across software, infrastructure, governance, DevSecOps, task management, knowledge systems, and related domains. +## Layer And Boundary + +This repository declares itself part of the **Taxonomy** layer under the +NetKingdom Security Layer Model. It produces cross-cutting language: terms, +semantic contracts, standards, profiles, mappings, and compatibility rules that +let independently owned systems interoperate. + +InfoTechCanon owns ecosystem-wide semantic contracts and terminology. It does +not own a runtime position or state on which another layer depends. NetKingdom +owns its security architecture and standards of record, including the security +layer model and any NetKingdom-specific profiles that import this canon. A +generic semantic contract belongs here; a security obligation imposed on the +NetKingdom estate belongs there. + --- ## Primary Utility @@ -120,4 +119,3 @@ The repository should initially establish: - and example subsystem interface declarations. Over time, the repository should grow into a living canon that supports human reasoning, agentic workflows, validation, documentation generation, knowledge retrieval, and practical system integration. - diff --git a/Makefile b/Makefile index 4b7f85d..cc29b4f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,7 @@ PYTHON ?= python3 -CANON_CLI = PYTHONPATH=src $(PYTHON) -m info_tech_canon +CANON_CLI = PYTHONPATH=src:$(BENCH_SOURCE) $(PYTHON) -m info_tech_canon +# Optional development source override; installed distributions need no override. +BENCH_SOURCE ?= ../infospace-bench/src .PHONY: validate index tree agent-briefs test @@ -17,3 +19,13 @@ agent-briefs: test: $(PYTHON) -m pytest + +.PHONY: check-generated refresh check +check-generated: + $(CANON_CLI) check-generated + +refresh: index tree agent-briefs + +check: test check-generated + $(CANON_CLI) validate + $(CANON_CLI) profile validate small-saas diff --git a/README.md b/README.md index 6d06a7d..7e92879 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,10 @@ The first service surface is intentionally small: ## Source-Tree Usage +These commands assume `infospace-bench` is installed. For development against +an adjacent checkout, use `PYTHONPATH=src:../infospace-bench/src` instead of +`PYTHONPATH=src`, or use the Makefile targets. + ```bash PYTHONPATH=src python3 -m info_tech_canon inspect PYTHONPATH=src python3 -m info_tech_canon artifacts @@ -57,6 +61,15 @@ After package installation, the same commands are available through the ## Maintenance +Contract consumption, installation boundaries, independent adoption criteria, +and freshness checks are documented in +[Reproducible canon consumption](docs/canon-consumption.md). + +Additional CLI commands: `emission-review RECORD`, +`export-emission-contract DIRECTORY`, `validation-coverage`, `scope-inventory`, +`check-generated`, and `benchmark-reads`. Use `--root PATH` before the command +to select a corpus independently of the installed package. + ```bash make validate make index diff --git a/SCOPE.md b/SCOPE.md index 93c6ef3..879277b 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -1,241 +1,115 @@ # SCOPE -## Current Repository Scope +Reviewed: 2026-09-05 (Europe/Berlin), including the uncommitted working tree. -This repository currently contains the seed structure for **InfoTechCanon**: an evolving, markdown-first canon for building interoperable, adaptable, and extensible information-processing systems. +## Current repository scope -At this stage, the repository is not yet a fully validated standards system. It is a **seed corpus** of kernel documents, domain models, specialized standards, and integration guidance that together define the first-generation InfoTechCanon kernel. +InfoTechCanon maintains one concrete, Markdown-first, machine-readable canon +under `infospace/`, with a Python service for inspection, validation, retrieval, +and generation. It has progressed beyond its seed corpus to a **service baseline +with executable proofs and mixed artifact maturity**. ---- +The working-tree canon version is `0.7.0`; the Python package version is +`0.1.0`. These are separate version surfaces. Many models remain `RC1-seed`; +ITC-CAP is a frozen draft at `0.4.0`, and Emission Cadence is a draft document +at `0.1.0` with wire schema version `0.1`. This is not yet a stable, +ecosystem-wide conformance release. -## Current Purpose +## Ownership and boundaries -The repository currently serves to: +Following [INTENT.md](INTENT.md), this repository occupies the Taxonomy layer: +it owns shared terminology, generic semantic contracts, compatibility rules, +and reference artifacts for independently owned systems. -- collect the first generation of InfoTechCanon standards and models, -- define the semantic boundaries between domains, -- preserve orthogonality between concepts, -- provide seed structures for mappings, profiles, patterns, assimilation, validation, and agent use, -- support future machine-readable extraction, -- and act as the first major use case for markdown-based infospaces and related tooling. +The CLI, library, and local read-only HTTP API serve and check those artifacts. +They do not establish ownership of consumer runtime state, enforcement, +observation, or orchestration. NetKingdom owns its security architecture and +importing security profiles. Sources own emission-cadence instances; observers +own evaluation and findings; importing profiles own additional policy requirements. ---- +## Implemented canon content -## Current Kernel +| Surface | Current responsibility | +| --- | --- | +| `infospace/kernel/` | Core mechanisms for artifacts, ownership, relationships, mappings, assimilation, profiles, patterns, conformance, provenance, and interfaces; kernel map. | +| `infospace/models/` | Information Space, Landscape, Organization, Governance, Task, Access Control, Security, Data, DevSecOps, Network, Observability, and Capability models. | +| Extensions and catalogs | PURPOSES/Purpose and Demand governance extension; EvidenceBasis; AttributeValueType; ITC-CAP capabilities, requirements, provisions, maturity, economics, and evidence relationships. | +| `infospace/standards/` | Tagging, CARING access governance, Repository Layout, and draft Emission Cadence. | +| `infospace/profiles/small-saas/` | Executable example linking service, system, tenants, user, team, data, deployment, task, policy, control, evidence, incident, and capability requirements/provisions. | +| `infospace/patterns/` | Intent–Scope–Purposes, PracticePattern scheme, InterfaceDeprecationStrangler, and AgenticDrivesFunctional. | +| Mappings and assimilation | Mapping artifacts and source-preserving workspaces for IT Capability Canon and Emission Cadence, including comparisons, dispositions, gaps, and open questions. | +| `infospace/evaluations/` | Evaluation/comparison packs for user-engine, railiance-fabric, repo-scoping, and repository-layout. These prepare adoption and review; they do not certify deployed consumers. | +| CARING Kubernetes RBAC benchmark | Native-concept mappings, structured access descriptors, findings, conflicts, and proposed improvements. | +| `infospace/agent/` | Generated retrieval indexes and artifact briefs, consumer briefs, interface-card template, alignment review kit, and consumer workplan template. | -The current kernel consists of: +The root is the service and governance shell. `seeds/` preserves provenance. +`incoming/`, `demand/`, and `feedback/` distinguish source material, consumer +needs, and utility evidence. Workplans and intake records track work; +`history/` holds dated assessments. Generated navigation lives under +`infospace/indexes/`, `infospace/views/`, and `infospace/agent/`. -```text -kernel/ - InfoTechCanonCore.md - InfoTechCanonKernelMap.md -``` +## Implemented service and checks -### InfoTechCanonCore +`src/info_tech_canon/` provides an importable Python service, JSON-first CLI, +and read-only HTTP API, defaulting to `127.0.0.1:8765`. Operations include +artifact/model/standard inspection, graph export (JSON or Mermaid), canon and +profile validation, capability-record review, generated-view retrieval, and +alignment-review materials. CLI maintenance commands generate indexes, trees, +and agent briefs. Usage and endpoints are in [README.md](README.md). -Defines shared canon mechanisms: +Validation checks registered paths, artifact IDs and relationship targets, +collection metrics, required schema presence, and selected content contracts. +Specialized checks cover capability records/catalogs, practice patterns, +consumer packs, and the built-in Emission Cadence example. JSON Schemas exist +for multiple artifact types, but general schema-to-instance validation and +semantic conformance are not complete across the corpus. -- canon artifacts, -- concepts, -- concept ownership, -- relationships, -- mappings, -- assimilation, -- profiles, -- patterns, -- validation rules, -- conformance levels, -- versioning, -- provenance, -- agent briefs, -- and Canon Interface Cards. +Dependencies are Python 3.12+, PyYAML, jsonschema, and `infospace-bench`. +The loader discovers an installed bench distribution. An explicit `--root` or +`INFO_TECH_CANON_ROOT` selects a separately supplied corpus. Narrow wheel +installation is supported; upstream bench's full transitive dependency metadata +still contains workstation-specific paths. See +[consumption instructions](docs/canon-consumption.md). -### InfoTechCanonKernelMap +## Verified baseline and limits -Shows how the first-generation standards and models fit together, including the position of CARING as a specialized access-governance standard. +After INFO-WP-0019 implementation, `make check` passed **36 tests** and +verified **77 generated assets**. Read-only CLI validation +reported **76 registered artifacts, 315 relationships, zero errors and zero +warnings**. Small-SaaS validation passed with **15 artifacts/payloads**. ---- +The ownership calculation reports 129 entries and no cross-owner conflicts, +but derives entries from artifact titles and explicit `owned_concepts` +frontmatter. It does not establish ownership of every concept in prose. +Collection coverage metrics measure the registered corpus, not fulfillment +of every intent commitment. -## Current Models +Current limitations include: -The repository currently includes seed models for: +- incomplete concept extraction and enforcement of concept-level imports; +- uneven schema depth and validation coverage, including no formal + CARINGAccessDescriptor schema or complete effective-access calculus; +- limited external mapping and independent consumer interoperability evidence; +- interface templates and evaluation packs without a complete set of + source-owned, version-pinned consumer declarations; +- draft promotion and compatibility questions, including the requirement for + two independent Emission Cadence source implementations; +- upstream full-application packaging limitations and consumer-owned adoption evidence. -```text -models/ - information-space/ - landscape/ - organization/ - governance/ - task/ - access-control/ - security/ - data/ - devsecops/ - network/ - observability/ -``` +INFO-WP-0019 adds reusable arbitrary Emission Cadence declaration validation, +mapping schema checks, explicit ownership-conflict enforcement, a validation +coverage report, content-addressed contract export, generated-asset freshness +checks, scope inventory, and validation source/time evidence. These mechanisms +do not close the semantic or independent-adoption gaps listed above. -These models define broad domain structures. +## Exclusions and evolution -| Model | Current Responsibility | -|---|---| -| Information Space | Markdown-first knowledge packaging, retrieval, links, chunks, indexes, agent briefs | -| Landscape | IT landscapes, services, systems, runtime resources, infrastructure context | -| Organization | Actors, roles, teams, membership, responsibility, authority, accountability | -| Governance | Policies, rules, decisions, controls, risk, evidence, exceptions, assurance | -| Task | Work items, options, tasks, actions, blockers, dependencies, commitment, outcomes | -| Access Control | Subjects, principals, permissions, grants, authorization decisions, enforcement | -| Security | Threats, weaknesses, vulnerabilities, findings, exposure, attack paths, incidents | -| Data | Datasets, schemas, data products, classification, lineage, quality, contracts | -| DevSecOps | Source-to-artifact-to-release-to-deployment delivery flow and evidence | -| Network | Addressing, topology, routing, policy, reachability, exposure, network state | -| Observability | Telemetry, logs, metrics, traces, alerts, SLOs, health, operational evidence | +This repository does not replace external standards, mandate one universal +enterprise model, operate consumer systems, enforce NetKingdom policy, or +provide production observability or authorization services. A complete +ontology and exhaustive external-standard mappings are not current deliverables. ---- - -## Current Specialized Standards - -The repository currently includes specialized standards for: - -```text -standards/ - tagging/ - caring/ -``` - -| Standard | Current Responsibility | -|---|---| -| Tagging | Tag identity, schemes, namespaces, assignments, mappings, validation | -| CARING | Orthogonal access-governance analysis using canonical roles, planes, exposure modes, derived and induced capabilities | - ---- - -## Current Structural Assumptions - -The current repository structure assumes the distinction: - -```text -Kernel - Defines how the canon works. - -Models - Define broad domain structures. - -Standards - Define cross-cutting conventions, mechanisms, or named analytical/design frameworks. - -Profiles - Constrain models and standards for concrete implementation contexts. - -Patterns - Describe recurring practical solutions. - -Mappings - Relate InfoTechCanon concepts to external bodies of knowledge. - -Assimilation - Analyzes external knowledge bodies and turns them into mappings, gaps, conflicts, and proposed changes. - -Views - Provide generated or curated navigation over canon artifacts. - -Agent - Provides compact, retrieval-optimized guidance for AI agents and tools. -``` - ---- - -## Current Non-Goals - -The current repository does not yet provide: - -- a complete ontology, -- complete YAML/JSON schemas for all artifact types, -- automated validation tooling, -- fully extracted concept pages, -- finalized mappings to external standards, -- complete application profiles, -- complete agent retrieval indexes, -- mature conformance tests, -- or a stable release of the InfoTechCanon. - -The current scope is seed-level structure and consolidation. - ---- - -## Current Known Duplication - -The current seed standards still repeat some generic sections that should eventually be centralized in `InfoTechCanonCore`, including: - -- mapping model, -- assimilation model, -- profile format, -- conformance levels, -- validation rule format, -- repository placement, -- agent brief requirements, -- Canon Interface Card usage, -- lifecycle statuses. - -This duplication is accepted for the seed phase but should be reduced during refactoring. - ---- - -## Current Refactoring Priorities - -Near-term work should focus on: - -1. moving repeated generic mechanisms into Core, -2. creating machine-readable schemas, -3. extracting concept pages from seed standards, -4. creating global indexes, -5. creating agent briefs, -6. creating first application profiles, -7. creating formal assimilation workspaces, -8. running CARING as the first full benchmark assimilation, -9. validating concept ownership across the kernel, -10. and creating Canon Interface Cards for initial tools and repositories. - ---- - -## First Validation Targets - -The first validation targets should be: - -```text -1. Concept ownership table -2. Cross-standard import matrix -3. Kernel dependency graph -4. CARING access descriptor schema -5. Mapping schema -6. Profile schema -7. Agent brief schema -8. Repository layout validation -9. Internal link validation -10. Duplicate concept detection -``` - ---- - -## Current Maturity - -The repository is currently at: - -```text -Maturity: Seed Kernel -Status: Pre-release consolidation -Primary use: Human/agent reference and refactoring foundation -``` - -The next maturity target is: - -```text -Maturity: Kernel RC1 -Condition: - Core mechanisms centralized, - standards indexed, - concept ownership explicit, - first profiles and mappings created, - CARING assimilation completed, - and basic validation scripts available. -``` +Further semantic coverage, stronger conformance, and consumer adoption are +consistent with intent but require follow-up work. Evidence, gaps, and +optimization options are recorded in the +[2026-09-05 scope assessment](history/2026-09-05_002437+0200-scope-against-intent.md). diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index 2b95f64..50c0ff9 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -9,6 +9,7 @@ | Kind | ID | Status | Lane | Source | | --- | --- | --- | --- | --- | | workplan | ITC-WP-ADHOC-2026-08-15 | finished | — | workplans/ADHOC-2026-08-15.md | +| workplan | INFO-WP-0019 | blocked | — | workplans/INFO-WP-0019-conformance-and-maintenance.md | | workplan | ITC-WP-0001 | finished | — | workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md | | workplan | ITC-WP-0002 | finished | — | workplans/ITC-WP-0002-service-surface-cli-json-api.md | | workplan | ITC-WP-0003 | finished | — | workplans/ITC-WP-0003-validation-indexes-and-generated-views.md | @@ -26,9 +27,16 @@ | workplan | ITC-WP-0015 | finished | — | workplans/ITC-WP-0015-evidence-basis.md | | workplan | ITC-WP-0016 | finished | — | workplans/ITC-WP-0016-practice-pattern-language.md | | workplan | ITC-WP-0017 | finished | — | workplans/ITC-WP-0017-agentic-drives-functional.md | +| workplan | ITC-WP-0018 | finished | — | workplans/ITC-WP-0018-emission-cadence-contract.md | | task | ITC-WP-ADHOC-2026-08-15-T01 | done | — | workplans/ADHOC-2026-08-15.md | | task | ITC-WP-ADHOC-2026-08-15-T02 | done | — | workplans/ADHOC-2026-08-15.md | | task | ITC-WP-ADHOC-2026-08-15-T03 | done | — | workplans/ADHOC-2026-08-15.md | +| task | INFO-WP-0019-T01 | done | — | workplans/INFO-WP-0019-conformance-and-maintenance.md | +| task | INFO-WP-0019-T02 | done | — | workplans/INFO-WP-0019-conformance-and-maintenance.md | +| task | INFO-WP-0019-T03 | done | — | workplans/INFO-WP-0019-conformance-and-maintenance.md | +| task | INFO-WP-0019-T04 | done | — | workplans/INFO-WP-0019-conformance-and-maintenance.md | +| task | INFO-WP-0019-T05 | done | — | workplans/INFO-WP-0019-conformance-and-maintenance.md | +| task | INFO-WP-0019-T06 | wait | — | workplans/INFO-WP-0019-conformance-and-maintenance.md | | task | ITC-WP-0001-T01 | done | — | workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md | | task | ITC-WP-0001-T02 | done | — | workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md | | task | ITC-WP-0001-T03 | done | — | workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md | @@ -87,7 +95,7 @@ | task | ITC-WP-0014-T01 | done | — | workplans/ITC-WP-0014-capability-model-consolidation.md | | task | ITC-WP-0014-T02 | done | — | workplans/ITC-WP-0014-capability-model-consolidation.md | | task | ITC-WP-0014-T03 | done | — | workplans/ITC-WP-0014-capability-model-consolidation.md | -| task | ITC-WP-0014-T04 | todo | — | workplans/ITC-WP-0014-capability-model-consolidation.md | +| task | ITC-WP-0014-T04 | done | — | workplans/ITC-WP-0014-capability-model-consolidation.md | | task | ITC-WP-0014-T05 | done | — | workplans/ITC-WP-0014-capability-model-consolidation.md | | task | ITC-WP-0014-T06 | done | — | workplans/ITC-WP-0014-capability-model-consolidation.md | | task | ITC-WP-0014-T07 | done | — | workplans/ITC-WP-0014-capability-model-consolidation.md | @@ -104,4 +112,7 @@ | task | ITC-WP-0016-T04 | done | — | workplans/ITC-WP-0016-practice-pattern-language.md | | task | ITC-WP-0017-T01 | done | — | workplans/ITC-WP-0017-agentic-drives-functional.md | | task | ITC-WP-0017-T02 | done | — | workplans/ITC-WP-0017-agentic-drives-functional.md | -| intake | ITC-IN-0001 | open | — | intakes/intakes.md | +| task | ITC-WP-0018-T01 | done | — | workplans/ITC-WP-0018-emission-cadence-contract.md | +| task | ITC-WP-0018-T02 | done | — | workplans/ITC-WP-0018-emission-cadence-contract.md | +| task | ITC-WP-0018-T03 | done | — | workplans/ITC-WP-0018-emission-cadence-contract.md | +| intake | ITC-IN-0001 | closed | — | intakes/intakes.md | diff --git a/canon.yaml b/canon.yaml index 281328c..f011d3a 100644 --- a/canon.yaml +++ b/canon.yaml @@ -1,7 +1,7 @@ repository: info-tech-canon title: InfoTechCanon status: service-baseline -version: 0.6.0 +version: 0.7.0 description: > An evolving, markdown-first canon for building interoperable, adaptable, and extensible information-processing systems. @@ -114,6 +114,17 @@ standards: title: InfoTechCanonRepositoryLayoutStandard path: infospace/standards/repository-layout/InfoTechCanonRepositoryLayoutStandard.md status: RC1-seed + - id: itc-emission-cadence + title: InfoTechCanonEmissionCadenceStandard + path: infospace/standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + status: draft + version: 0.1.0 + schema: infospace/schemas/emission-cadence.schema.yaml + provenance: + assimilation: assimilation/emission-cadence + source_body: King's Guard EmissionCadenceDeclaration handover + source_version: 0.1.0 + disposition: adapt planned_directories: - infospace/ @@ -150,6 +161,9 @@ workplans: - ITC-WP-0013 - ITC-WP-0014 - ITC-WP-0015 + - ITC-WP-0016 + - ITC-WP-0017 + - ITC-WP-0018 feedback: path: feedback/ @@ -166,6 +180,11 @@ assimilation: disposition: adapt status: closed produced: itc-cap + - id: assimilation/emission-cadence + source: King's Guard EmissionCadenceDeclaration draft 0.1.0 + disposition: adapt + status: closed + produced: itc-emission-cadence first_proofs: near_term: @@ -178,8 +197,6 @@ first_proofs: - caring-kubernetes-rbac next_actions: - - implement ITC-WP-0003 validation and generated views - - implement ITC-WP-0004 small-saas profile proof - - explore ITC-WP-0006 PURPOSES model extension - - sit on canon 0.6.0; do not change ITC-CAP shape without a new minor - - optional ITC-WP-0014 T04 small-saas illustration (not a promotion gate) + - keep ITC-CAP 0.4.0 frozen; do not change its shape without a new minor + - collect two independent EmissionCadenceDeclaration source implementations + before promoting ITC-EMISSION-CADENCE beyond draft diff --git a/docs/canon-consumption.md b/docs/canon-consumption.md new file mode 100644 index 0000000..b906ff7 --- /dev/null +++ b/docs/canon-consumption.md @@ -0,0 +1,86 @@ +# Reproducible canon consumption + +The Python service and canon corpus have independent versions. Install the +service into a virtual environment and supply a pinned corpus checkout with +`--root /path/to/corpus/infospace` or `INFO_TECH_CANON_ROOT`. Source-tree users +may use `make` targets; `BENCH_SOURCE` is an optional development override. +Installed use does not depend on adjacent source directories. + +## Installation boundary + +The service requires Python 3.12+, PyYAML, jsonschema, and the reference-data +modules of infospace-bench 0.1.0. Its distribution is discovered through Python's +installed module search path. A narrow adapter avoids executing the upstream +initializer, which imports unrelated database/engine integrations. + +The upstream bench distribution still declares workstation-specific dependencies +for its full application. Until its owner separates the reference-data package, +use reviewed local wheels and install the narrow service dependencies explicitly: + +```bash +python3 -m venv /path/to/venv +/path/to/venv/bin/pip install PyYAML jsonschema +/path/to/venv/bin/pip install --no-deps --no-index /path/to/infospace_bench-0.1.0-py3-none-any.whl /path/to/info_tech_canon-0.1.0-py3-none-any.whl +/path/to/venv/bin/info-tech-canon --root /path/to/canon/infospace inspect +``` + +Pin wheel hashes and the corpus revision in consumer deployment records. +This procedure supports canon reference operations, not the complete bench +application. A normal transitive dependency installation remains an upstream +packaging limitation. The corpus is supplied separately and includes its root +governance files and provenance inputs (including `seeds/` and `demand/`) when +whole-repository validation is required. + +## Declaration and bundle workflow + +```bash +info-tech-canon --root /path/to/canon/infospace emission-review /path/to/source-declaration.yaml +info-tech-canon --root /path/to/canon/infospace export-emission-contract /path/to/bundles +``` + +The export contains the standard, schema, illustrative example, and a manifest +of SHA-256 file hashes. Its tar filename contains the archive SHA-256. Identical +inputs produce identical bytes; a different contract produces a different name. +Existing different contents at the computed path cause failure. The export is +a local artifact, not evidence of remote publication or independent adoption. + +The shared validator accepts YAML or JSON, applies the schema, and additionally +checks unique `source_id` values. A schema-only consumer must implement that +uniqueness check too. Unsupported versions and malformed forms fail. Validation +does not assess operational truth or importing-profile policy. + +## Independent adoption gate + +File owner-authored results under `feedback/` using its existing intake process. +Each implementation's evidence must include: + +- source repository, accountable owner, implementation revision, declaration path; +- contract version, bundle SHA-256, and schema SHA-256; +- importing consumer/profile revision and its additional policy checks; +- positive result for the actual source-owned declaration; +- negative results for unsupported versions, duplicate IDs, missing windows, + and malformed heartbeat/reconciliation forms; +- distinction between locally tested behavior and observed deployed behavior, + with evidence references and dates for each claim. + +Two records must represent independently implemented sources; copying the +illustrative example twice does not count. A human/owner review must assess +independence and operational claims. Draft promotion remains pending in +INFO-WP-0019-T06 until this evidence exists. No new profile or pattern should +be created solely to fill an inventory: use recurring consumer demand and +recorded CARING gaps to select the next semantic work. + +## Maintenance and coverage + +`validation-coverage` lists artifact checks and unproven properties. +`scope-inventory` derives counts and model/standard IDs from the registry. +`make check-generated` renders in a temporary copy and reports missing/stale +assets without repairing the checkout. `make refresh` performs regeneration. +`make check` runs tests, freshness, canon validation, and profile validation. +Work-record projections remain owned by `statehub fix-consistency`. + +Validation reports written with `validate --write` include UTC time, Git +revision, dirty status, and a digest of all infospace files except validation +reports. The digest captures uncommitted corpus changes; Git revision alone +does not. `benchmark-reads` measures ten uncached inspections. Use measurements +and an explicit latency target before introducing a cache. diff --git a/history/2026-09-05_002437+0200-scope-against-intent.md b/history/2026-09-05_002437+0200-scope-against-intent.md new file mode 100644 index 0000000..81402c5 --- /dev/null +++ b/history/2026-09-05_002437+0200-scope-against-intent.md @@ -0,0 +1,193 @@ +# Scope against intent — repository review + +Review date: 2026-09-05, Europe/Berlin. +Evidence timestamp: 2026-09-04T22:24:37Z (2026-09-05T00:24:37+02:00). +Base commit: `78e917e366dfc26f9abdf92240006bbea7922751`. +Basis: current working tree, including pre-existing modified and untracked +files; the commit alone does not reproduce this assessment. + +## Assessment + +Implemented scope substantially advances the intent: there is a usable canon +service, connected artifact corpus, generated retrieval assets, executable +profile examples, and concrete assimilation results. The old `SCOPE.md` +materially understated this by describing validation, schemas, indexes, +profiles, and agent briefs as future work and showing obsolete root-level paths. + +The principal remaining gap is assurance that declared semantic contracts +support independent integration. Passing repository checks demonstrates local +consistency within their coverage; it does not establish exhaustive concept +ownership, compatibility across versions, or consumer adoption. The Taxonomy +boundary is coherent with the service: serving and checking artifacts supports +that role. No reviewed implementation establishes ownership of consumer runtime state. + +`SCOPE.md` was rewritten to describe the implemented baseline, current paths, +ownership boundaries, maturity, dependencies, and limits. Existing implementation +changes were preserved. Recommendations below were not implemented by this review. + +## Changes reviewed + +Recent commits include the NetKingdom layering note and source reference, +work-record identifiers, intake creation, and index maintenance. The working +tree incorporates the layering clarification into the body of `INTENT.md`. +The original interoperability commitments remain intact. + +The main uncommitted implementation adds Emission Cadence: a generic standard, +JSON Schema, adapted example, source-preserving assimilation workspace, artifact +registration, retrieval assets, validation, and negative tests. `canon.yaml` +and `CHANGELOG.md` advance the canon to `0.7.0` while retaining draft status. +The contract supports two cadence forms and namespaced profile extensions. +Its worked example explicitly disclaims being the source-owned live declaration. + +The other substantive addition completes the Small-SaaS capability illustration +and marks ITC-WP-0014-T04 done. Workplan/index, intake, and `.repo-manager/` +metadata changes are work-management surfaces, not additional semantic +capabilities. ITC-WP-0018 records local Emission Cadence work as finished. +Local workplans scanned are marked finished; this does not close promotion +questions retained in canon artifacts. + +## Verification and limits + +| Check run | Result | +| --- | --- | +| `make test` | 29 passed in 6.47 seconds. | +| `PYTHONPATH=src python3 -m info_tech_canon validate` | Pass; 76 artifacts, 315 relationships, zero errors/warnings. | +| `PYTHONPATH=src python3 -m info_tech_canon profile validate small-saas` | Pass; 15 artifacts and 15 payloads, zero errors/warnings. | +| `generation.concept_ownership(load_context())` | 129 entries, zero cross-owner conflicts; one same-owner duplicate for AgenticDrivesFunctional. | + +Validation ran without rewriting `infospace/validation/latest.json`. Ownership +entries include artifact titles and explicitly declared concepts, rather than +129 independently extracted semantic definitions. The duplicate is not an +ownership conflict. + +The State Hub returned no active domain workplans. Its inbox contained a +2026-09-04 NetKingdom request awaiting the published Emission Cadence contract +and stable locator (message `13f55e9c-5660-4a30-9bfe-4c546f5064f8`), which was +read and marked read. This shows a pending handoff at message time, not proof +that adoption remains blocked today. No consumer repositories, remote release +publication, or deployed integrations were verified. External standards were +not audited; this is a repository-local assessment. + +## Coverage against intent + +| Intent commitment | Repository evidence | Assessment and gap | +| --- | --- | --- | +| Clear owner for every canonical concept | Models, owned_concepts, generated ownership index | Partial. Titles and explicit frontmatter do not cover every concept in prose. | +| Import instead of redefine | Artifact relationships, import matrix, ownership boundaries, capability anchor mappings | Partial. Comprehensive concept-level import/redefinition enforcement is absent. | +| Explicit, versioned, scoped, justified external mappings | Mapping artifacts, assimilation comparisons, CARING RBAC benchmark | Partial. Mapping schema requires only id/title/source/target; versions, scope, and rationale are not mandatory. Candidate mappings are not a complete external-standard mapping corpus. | +| Assimilation produces gaps, conflicts, mappings, proposals | IT Capability Canon and Emission Cadence workspaces; CARING findings | Substantially present. Retained proposals and questions need follow-through. | +| Patterns explain practical combinations | PracticePattern scheme, two practice patterns, Intent–Scope–Purposes | Present but narrow; expand from recurring consumer evidence. | +| Profiles constrain concrete implementations | Executable Small-SaaS profile and capability illustration | Present for one local proof; independent behavior and compatibility remain unverified. | +| Useful to humans and agents | Markdown, CLI/API, graph/views, retrieval indexes, briefs, alignment kit | Strong local support; portability and freshness checks remain gaps. | +| Preserve provenance, compatibility, rationale | Frozen sources, changelog, versions, mapping rationale, draft gates | Partial. Policies exist; immutable distribution and cross-version consumer evidence were not demonstrated. | +| Initial kernel, models, formats, and subsystem interface examples | Kernel, models, schemas, profile proofs, interface-card template and expectation packs | Most structures exist; a template does not establish independently owned interface declarations. | +| Taxonomy ownership without runtime-state ownership | Updated intent, cadence ownership section, local read-only API | Aligned. Operational policy, scheduling, and observation stay with consumer owners. | + +## Gaps and closure criteria + +### G1 — Semantic validation coverage (high) + +Evidence: [validation.py](../src/info_tech_canon/validation.py), +[generation.py](../src/info_tech_canon/generation.py), and +[mapping schema](../infospace/schemas/mapping.schema.yaml). +Required schemas are generally checked for presence; selected families receive +specialized checks. No general pass proves every registered payload conforms +to its declared schema. Ownership generation reads titles and frontmatter; +general Markdown links are not comprehensively validated by the reviewed local +validator. + +Closure: publish a validation-coverage inventory, bind supported artifact kinds +to schemas, and enforce concept ownership/import references and mapping metadata +with representative negative cases. Explicitly label unsupported checks so +zero errors cannot be mistaken for full semantic conformance. + +### G2 — CARING conformance (high) + +The [benchmark findings](../infospace/standards/caring/benchmarks/kubernetes-rbac/findings-and-canon-pressure.yaml) +explicitly identify a missing CARINGAccessDescriptor schema, effective-access +derivation rules, tenant-boundary evidence profile, and DerivedCapability +ownership pressure. Structured examples do not prove deployed effective access. + +Closure: formalize descriptors and representative derivation rules, resolve +ownership, and exercise workload-mediated access, secrets, and tenant-boundary +cases. Keep operational evaluation with the relevant consumer. + +### G3 — Consumer adoption and contract distribution (high) + +The [Emission Cadence standard](../infospace/standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md) +distinguishes example validity from operational truth. `canon.yaml` requires +two independent source implementations before draft promotion. The validator +checks the bundled example; there is no general Emission Cadence CLI command +accepting arbitrary consumer declarations analogous to `capability-review`. + +Closure: provide an immutable, version-addressable contract bundle and reusable +validator covering both JSON Schema and unique source_id semantics. Capture +two source-owned declarations and importing-consumer results, including +unsupported-version rejection. Retain the evidence owner and tested canon +revision. Do not infer publication from a local changelog entry. + +### G4 — Portable service consumption (medium) + +[pyproject.toml](../pyproject.toml) declares an absolute local infospace-bench +dependency; [bench.py](../src/info_tech_canon/bench.py) loads modules from a +sibling source checkout. The service locates canon data relative to its code. +Local tests do not prove a wheel installed elsewhere can find its dependency +or corpus. + +Closure: use a reproducible dependency source, normal package imports, and an +explicit corpus location/package-data contract. Demonstrate installation and +inspection in a clean environment without the workstation directory layout. + +### G5 — Freshness and lifecycle visibility (medium) + +The old scope contradicted implemented features. +[WORK-RECORDS.md](../WORK-RECORDS.md) still lists ITC-WP-0014-T04 as todo, +while its working-tree workplan says done. Package and canon versions differ +without explanation in the previous scope. The generated validation report +has no source revision or execution timestamp. + +Closure: regenerate work-record projections from owner files, document version +surfaces, and add deterministic generated-asset freshness checks and validation +revision/timestamp evidence. The scope rewrite resolves the scope-description +part; projection maintenance remains a recommendation. + +### G6 — Remaining semantic pressure (medium, demand driven) + +[IT Capability Canon open questions](../infospace/assimilation/it-capability-canon/open-questions.md) +retain canon-wide state qualifiers, continuity/recovery ownership, and structural +models behind commerce/intelligence capabilities. +[Capability anchor mappings](../infospace/mappings/capability-anchors.yaml) +record low-confidence recovery/continuity alignment and unmapped domains. + +Closure: resolve owners where consumers need structural contracts, record +rationale and compatibility impact, and preserve explicit deferral where only +a capability identifier is needed. Intent does not require inventing every +possible domain model now. + +## Possible optimizations + +1. **Prioritize reusable conformance over corpus expansion.** Start with G1 and + the cadence validator/bundle in G3. This advances integration by declared + contract and makes draft promotion evidence tangible. +2. **Reduce metadata drift.** Define authoritative inputs and derive navigation, + work-record projections, and a small scope inventory from them. Check that + regeneration produces no unexpected diff; retain human-authored judgments. +3. **Organize validation by contract.** The roughly 2,040-line validator embeds + many pack-specific ID sets and checks. Factor reusable shape, reference, and + provenance checks into common code and keep specialized semantics alongside + contracts. Preserve meaningful negative tests during refactoring. +4. **Make consumption reproducible.** Fix the sibling-loader dependency and + prove clean installation before expanding the HTTP service. Immutable + artifacts let consumers pin inputs without a live canon runtime dependency. +5. **Use consumer evidence to select the next profile or pattern.** Complete + the two-source cadence proof and target CARING's recorded gaps before adding + speculative catalogs. Route needs through demand and utility results through + feedback, preserving ownership. +6. **Measure before caching.** service.load_context() reloads the infospace for + many operations. If repeated API reads become material, benchmark parsing + cost and consider revision-keyed snapshots with explicit invalidation. + No performance bottleneck was measured in this review. + +Suggested order: conformance coverage and adoption proof, freshness and +portability, then targeted semantic expansion. These are follow-up options, +not changes to the repository's runtime responsibilities. diff --git a/history/2026-09-05_optimization-implementation.md b/history/2026-09-05_optimization-implementation.md new file mode 100644 index 0000000..c170432 --- /dev/null +++ b/history/2026-09-05_optimization-implementation.md @@ -0,0 +1,87 @@ +# Optimization implementation — 2026-09-05 + +Workplan: [INFO-WP-0019](../workplans/INFO-WP-0019-conformance-and-maintenance.md). +Registered State Hub UUID: `b29261ba-c1e4-5533-8185-ab2d5b433685`. +Implements the local optimization recommendations from the timestamped scope +assessment. Existing uncommitted changes were retained. + +## Delivered + +- `contracts.py`: shared JSON Schema validation and Emission Cadence semantics; + arbitrary YAML/JSON declaration review; duplicate source-ID detection robust + to malformed field types; schema bindings for mapping artifacts. +- `service.py`: explicit ownership conflicts fail validation; reports describe + coverage limits; capability operations respect the selected corpus root. +- `maintenance.py`: non-mutating comparison of generated projections, + registry-derived scope inventory, deterministic content-addressed contract + export, validation timestamp/revision/dirty-state/corpus-digest evidence, + and repeated-read measurement. +- CLI commands: `emission-review`, `validation-coverage`, `scope-inventory`, + `check-generated`, `export-emission-contract`, and `benchmark-reads`. +- Installed bench discovery and independently selected corpus root replace + hardcoded workstation lookup. The narrow loader remains necessary because + upstream initialization imports unrelated database integrations. +- `make check`, `make check-generated`, and `make refresh` expose maintenance + workflows. State Hub refreshes work-record projections from source files. +- [Consumption documentation](../docs/canon-consumption.md) defines portable + installation, contract pinning, independent adoption evidence, and demand-led + selection of future profiles/patterns. README and SCOPE describe the changes. + +## Verification + +`make check` passed 36 tests in 22.42 seconds, verified 77 generated assets, +and passed canon validation (76 artifacts/315 relationships) and Small-SaaS +validation (15 payloads), both without errors or warnings. + +Seven new tests cover malformed declarations, unsupported versions and duplicate +IDs, stale/missing projections without source mutation, deterministic bundle +bytes and corruption refusal, mapping schema enforcement, explicit ownership +conflicts, report digest behavior, selected-root capability loading, and a +missing schema producing a validation finding. + +A fresh virtual environment under `/tmp/itc-install-SOoIlF/` installed PyYAML +6.0.3, jsonschema 4.26.0 and their dependencies, plus locally built canon and +bench wheels using `--no-deps`. With PYTHONPATH unset and an independent corpus +copy, installed CLI inspection, canon validation, and emission review passed. +The initial corpus copy omitted two demand provenance files; validation correctly +reported them missing. Including `demand/` completed the proof. Full transitive +bench installation remains outside this narrow proof because its upstream +metadata still names workstation paths. No sibling source files were changed. + +Contract export produced: + +`dist/contracts/emission-cadence-0.1-972c0b6701d1693f6bb297a2feef34bcdb5ef04f3c906882e6f5e0afa5261e01.tar` + +The filename is its SHA-256. The manifest records schema, standard, and example +hashes and the additional uniqueness check. The build output is gitignored; +recreate it with `export-emission-contract dist/contracts`. This is a local +distribution artifact, not remote release publication. + +Ten uncached inspections measured median **788.05 ms**, maximum **1241.92 ms** +on this workstation during concurrent verification. These measurements do not +establish a production SLA. No cache was added without a workload and latency +target. Ruff was unavailable; no lint result is claimed. + +## Remaining boundaries + +T01–T05 are done; T06 waits for two independent source owners' implementation +and consumer evidence. The workplan remains blocked rather than declaring +draft promotion complete. No external messages or consumer writes were made. +The original CARING calculus, complete concept extraction, comprehensive mapping +metadata, and cross-version interoperability gaps are not claimed closed by +this implementation; coverage output explicitly preserves these limits. + +State Hub registration succeeded. Its consistency helper also commits/pushes +its own generated consistency changes. Advisories include the documented +INFO-WP convention conflicting with the registry's ITC-WP prefix, existing +classification warnings, and intake-index lookup trouble. These do not prevent +the new workplan and six tasks from being registered. + +Final synchronization encountered two State Hub repository-query timeouts. +The five completed task statuses and blocked workplan status were then updated +and confirmed through their individual REST endpoints. WORK-RECORDS.md was +regenerated using State Hub's own offline `_generate_work_record_index` +renderer, preserving the file-authoritative projection. Progress receipt: +`deab32a8-7642-440c-896c-e37783084757`. A full consistency sweep still needs +re-running when the repository-query path recovers; registration and final +task statuses have already been confirmed. diff --git a/infospace/agent/briefs/example-emission-cadence-qonto-assistant.md b/infospace/agent/briefs/example-emission-cadence-qonto-assistant.md new file mode 100644 index 0000000..a0966fc --- /dev/null +++ b/infospace/agent/briefs/example-emission-cadence-qonto-assistant.md @@ -0,0 +1,30 @@ +--- +id: agent-brief/example-emission-cadence-qonto-assistant +artifact_id: example/emission-cadence/qonto-assistant +source_path: standards/emission-cadence/examples/qonto-assistant.yaml +source_kind: example +generated: true +--- + + + +# Agent Brief: Qonto Assistant Emission Cadence Worked Example + +- Artifact ID: `example/emission-cadence/qonto-assistant` +- Kind: `example` +- Canonical path: `standards/emission-cadence/examples/qonto-assistant.yaml` +- Full source: `standards/emission-cadence/examples/qonto-assistant.yaml` +- Summary: Canon-side example artifact: Qonto Assistant Emission Cadence Worked Example. + +## Retrieval Hints + +Imports and anchors: +- `standard/emission-cadence` + +## Owned Concepts + +- `Qonto Assistant Emission Cadence Worked Example` + +## Related Distinctions + +No common distinction is anchored directly on this artifact. diff --git a/infospace/agent/briefs/mapping-emission-cadence-handover.md b/infospace/agent/briefs/mapping-emission-cadence-handover.md new file mode 100644 index 0000000..302a9b3 --- /dev/null +++ b/infospace/agent/briefs/mapping-emission-cadence-handover.md @@ -0,0 +1,29 @@ +--- +id: agent-brief/mapping-emission-cadence-handover +artifact_id: mapping/emission-cadence-handover +source_path: assimilation/emission-cadence/mappings.yaml +source_kind: mapping +generated: true +--- + + + +# Agent Brief: Emission cadence handover mappings + +- Artifact ID: `mapping/emission-cadence-handover` +- Kind: `mapping` +- Canonical path: `assimilation/emission-cadence/mappings.yaml` +- Full source: `assimilation/emission-cadence/mappings.yaml` +- Summary: Mapping artifact connecting canon surfaces: Emission cadence handover mappings. + +## Retrieval Hints + +No imports or anchors recorded. + +## Owned Concepts + +- `Emission cadence handover mappings` + +## Related Distinctions + +No common distinction is anchored directly on this artifact. diff --git a/infospace/agent/briefs/standard-emission-cadence.md b/infospace/agent/briefs/standard-emission-cadence.md new file mode 100644 index 0000000..b49e8df --- /dev/null +++ b/infospace/agent/briefs/standard-emission-cadence.md @@ -0,0 +1,37 @@ +--- +id: agent-brief/standard-emission-cadence +artifact_id: standard/emission-cadence +source_path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md +source_kind: standard +generated: true +--- + + + +# Agent Brief: InfoTechCanon Emission Cadence Standard + +- Artifact ID: `standard/emission-cadence` +- Kind: `standard` +- Canonical path: `standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md` +- Full source: `standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md` +- Summary: Cross-cutting canon standard: InfoTechCanon Emission Cadence Standard. + +## Retrieval Hints + +Imports and anchors: +- `kernel/itc-core` +- `model/governance` +- `model/observability` + +## Owned Concepts + +- `EmissionCadenceDeclaration` +- `EmissionCadenceForm` +- `ExpectedRateCadence` +- `HeartbeatCadence` +- `InfoTechCanon Emission Cadence Standard` +- `ReconciliationCadence` + +## Related Distinctions + +No common distinction is anchored directly on this artifact. diff --git a/infospace/agent/global-agent-brief.md b/infospace/agent/global-agent-brief.md index 9a2eed6..cd11c55 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: 71 -- Retrieval index items: 71 +- Artifact count: 76 +- Retrieval index items: 76 - Primary confidence command: `make validate` - Refresh generated indexes and views with: `make index` - Refresh agent briefs and interface templates with: `make agent-briefs` diff --git a/infospace/agent/retrieval-index.json b/infospace/agent/retrieval-index.json index ec7ca63..ef22790 100644 --- a/infospace/agent/retrieval-index.json +++ b/infospace/agent/retrieval-index.json @@ -59,8 +59,29 @@ } ], "infospace": "canon", - "item_count": 71, + "item_count": 76, "items": [ + { + "canonical_path": "assimilation/emission-cadence/ASSIMILATION.md", + "id": "assimilation/emission-cadence", + "imports": [ + "kernel/itc-core" + ], + "kind": "assimilation", + "owned_concepts": [ + "Assimilation \u2014 EmissionCadenceDeclaration handover" + ], + "relationships": [ + { + "target": "kernel/itc-core", + "type": "conforms_to" + } + ], + "source_path": "infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md", + "summary": "Canon artifact: Assimilation \u2014 EmissionCadenceDeclaration handover.", + "title": "Assimilation \u2014 EmissionCadenceDeclaration handover", + "warnings": [] + }, { "canonical_path": "assimilation/it-capability-canon/ASSIMILATION.md", "id": "assimilation/it-capability-canon", @@ -983,6 +1004,27 @@ "title": "Canon-Side Consumer Purpose Portfolio", "warnings": [] }, + { + "canonical_path": "standards/emission-cadence/examples/qonto-assistant.yaml", + "id": "example/emission-cadence/qonto-assistant", + "imports": [ + "standard/emission-cadence" + ], + "kind": "example", + "owned_concepts": [ + "Qonto Assistant Emission Cadence Worked Example" + ], + "relationships": [ + { + "target": "standard/emission-cadence", + "type": "conforms_to" + } + ], + "source_path": "infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md", + "summary": "Canon-side example artifact: Qonto Assistant Emission Cadence Worked Example.", + "title": "Qonto Assistant Emission Cadence Worked Example", + "warnings": [] + }, { "canonical_path": "kernel/InfoTechCanonCore.md", "id": "kernel/itc-core", @@ -1086,6 +1128,33 @@ "title": "ITC-CAP concept mappings to anchoring canon models", "warnings": [] }, + { + "canonical_path": "assimilation/emission-cadence/mappings.yaml", + "id": "mapping/emission-cadence-handover", + "imports": [], + "kind": "mapping", + "owned_concepts": [ + "Emission cadence handover mappings" + ], + "relationships": [ + { + "target": "standard/emission-cadence", + "type": "maps" + }, + { + "target": "model/observability", + "type": "maps" + }, + { + "target": "model/governance", + "type": "maps" + } + ], + "source_path": "infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md", + "summary": "Mapping artifact connecting canon surfaces: Emission cadence handover mappings.", + "title": "Emission cadence handover mappings", + "warnings": [] + }, { "canonical_path": "mappings/purpose-demand-governance-candidates.yaml", "id": "mapping/purpose-demand-governance-candidates", @@ -2014,6 +2083,35 @@ "title": "PracticePattern Scheme", "warnings": [] }, + { + "canonical_path": "profiles/small-saas/artifacts/capability-requirements.yaml", + "id": "small-saas/capability-requirements/production", + "imports": [ + "model/capability" + ], + "kind": "profile-artifact", + "owned_concepts": [ + "Small SaaS Production Capability Requirements" + ], + "relationships": [ + { + "target": "profile/small-saas", + "type": "instantiates" + }, + { + "target": "model/capability", + "type": "uses" + }, + { + "target": "small-saas/service/billing-portal", + "type": "applies_to" + } + ], + "source_path": "profiles/small-saas/artifacts/capability-requirements.yaml", + "summary": "Example artifact for the small-saas profile: Small SaaS Production Capability Requirements.", + "title": "Small SaaS Production Capability Requirements", + "warnings": [] + }, { "canonical_path": "profiles/small-saas/artifacts/control.namespace-per-tenant.yaml", "id": "small-saas/control/namespace-per-tenant", @@ -2545,6 +2643,50 @@ "title": "InfoTechCanon CARING Access Governance Standard", "warnings": [] }, + { + "canonical_path": "standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md", + "id": "standard/emission-cadence", + "imports": [ + "kernel/itc-core", + "model/governance", + "model/observability" + ], + "kind": "standard", + "owned_concepts": [ + "EmissionCadenceDeclaration", + "EmissionCadenceForm", + "ExpectedRateCadence", + "HeartbeatCadence", + "InfoTechCanon Emission Cadence Standard", + "ReconciliationCadence" + ], + "relationships": [ + { + "target": "kernel/itc-core", + "type": "conforms_to" + }, + { + "target": "model/observability", + "type": "imports" + }, + { + "target": "model/governance", + "type": "imports" + }, + { + "target": "model/security", + "type": "related_to" + }, + { + "target": "assimilation/emission-cadence", + "type": "derived_from" + } + ], + "source_path": "infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md", + "summary": "Cross-cutting canon standard: InfoTechCanon Emission Cadence Standard.", + "title": "InfoTechCanon Emission Cadence Standard", + "warnings": [] + }, { "canonical_path": "standards/repository-layout/InfoTechCanonRepositoryLayoutStandard.md", "id": "standard/repository-layout", diff --git a/infospace/agent/retrieval-index.md b/infospace/agent/retrieval-index.md index 5f0ab9b..de40ea8 100644 --- a/infospace/agent/retrieval-index.md +++ b/infospace/agent/retrieval-index.md @@ -4,7 +4,7 @@ Schema: `info-tech-canon.retrieval-index.v1` Infospace: `canon` -Items: **71** +Items: **76** ## Common Distinctions @@ -17,6 +17,16 @@ Items: **71** ## Items +### Assimilation — EmissionCadenceDeclaration handover + +- ID: `assimilation/emission-cadence` +- Kind: `assimilation` +- Canonical path: `assimilation/emission-cadence/ASSIMILATION.md` +- Source path: `infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md` +- Summary: Canon artifact: Assimilation — EmissionCadenceDeclaration handover. +- Imports and anchors: `kernel/itc-core` +- Owned concepts: `Assimilation — EmissionCadenceDeclaration handover` + ### Assimilation — IT Capability Canon (ITCC) v0.1 - ID: `assimilation/it-capability-canon` @@ -277,6 +287,16 @@ Items: **71** - Imports and anchors: `profile/small-saas` - Owned concepts: `Canon-Side Consumer Purpose Portfolio` +### Qonto Assistant Emission Cadence Worked Example + +- ID: `example/emission-cadence/qonto-assistant` +- Kind: `example` +- Canonical path: `standards/emission-cadence/examples/qonto-assistant.yaml` +- Source path: `infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md` +- Summary: Canon-side example artifact: Qonto Assistant Emission Cadence Worked Example. +- Imports and anchors: `standard/emission-cadence` +- Owned concepts: `Qonto Assistant Emission Cadence Worked Example` + ### InfoTechCanon Core - ID: `kernel/itc-core` @@ -307,6 +327,16 @@ Items: **71** - Imports and anchors: none - Owned concepts: `ITC-CAP concept mappings to anchoring canon models` +### Emission cadence handover mappings + +- ID: `mapping/emission-cadence-handover` +- Kind: `mapping` +- Canonical path: `assimilation/emission-cadence/mappings.yaml` +- Source path: `infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md` +- Summary: Mapping artifact connecting canon surfaces: Emission cadence handover mappings. +- Imports and anchors: none +- Owned concepts: `Emission cadence handover mappings` + ### Purpose Demand Governance Extension Candidates - ID: `mapping/purpose-demand-governance-candidates` @@ -567,6 +597,16 @@ Items: **71** - Imports and anchors: `kernel/itc-core` - Owned concepts: `PatternLanguage`, `PracticePattern`, `PracticePattern Scheme` +### Small SaaS Production Capability Requirements + +- ID: `small-saas/capability-requirements/production` +- Kind: `profile-artifact` +- Canonical path: `profiles/small-saas/artifacts/capability-requirements.yaml` +- Source path: `profiles/small-saas/artifacts/capability-requirements.yaml` +- Summary: Example artifact for the small-saas profile: Small SaaS Production Capability Requirements. +- Imports and anchors: `model/capability` +- Owned concepts: `Small SaaS Production Capability Requirements` + ### Namespace Per Tenant Control - ID: `small-saas/control/namespace-per-tenant` @@ -707,6 +747,16 @@ Items: **71** - Imports and anchors: `kernel/itc-core`, `model/access-control`, `model/data`, `model/devsecops`, `model/governance`, `model/network`, `model/observability`, `model/organization`, `model/security`, `model/task`, `standard/tagging` - Owned concepts: `CARINGAccessDescriptor`, `CARINGAnalysisFitnessTest`, `CARINGAnalysisProcedure`, `CARINGCanonicalRole`, `CARINGCapabilityProfile`, `CARINGDeclaredAccessMap`, `CARINGDerivedCapability`, `CARINGEffectiveAccessMap`, `CARINGExposureEvent`, `CARINGExposureMode`, `CARINGInducedAccess`, `CARINGOrganizationRelation`, `CARINGPlane`, `CARINGRedesignProcedure`, `CARINGRestrictionPrecedence`, `InfoTechCanon CARING Access Governance Standard` +### InfoTechCanon Emission Cadence Standard + +- ID: `standard/emission-cadence` +- Kind: `standard` +- Canonical path: `standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md` +- Source path: `infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md` +- Summary: Cross-cutting canon standard: InfoTechCanon Emission Cadence Standard. +- Imports and anchors: `kernel/itc-core`, `model/governance`, `model/observability` +- Owned concepts: `EmissionCadenceDeclaration`, `EmissionCadenceForm`, `ExpectedRateCadence`, `HeartbeatCadence`, `InfoTechCanon Emission Cadence Standard`, `ReconciliationCadence` + ### InfoTechCanon Repository Layout Standard - ID: `standard/repository-layout` diff --git a/infospace/agent/retrieval-index.yaml b/infospace/agent/retrieval-index.yaml index 286ae57..ce1f537 100644 --- a/infospace/agent/retrieval-index.yaml +++ b/infospace/agent/retrieval-index.yaml @@ -1,7 +1,21 @@ schema: info-tech-canon.retrieval-index.v1 infospace: canon -item_count: 71 +item_count: 76 items: +- id: assimilation/emission-cadence + kind: assimilation + title: "Assimilation \u2014 EmissionCadenceDeclaration handover" + canonical_path: assimilation/emission-cadence/ASSIMILATION.md + source_path: infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + summary: "Canon artifact: Assimilation \u2014 EmissionCadenceDeclaration handover." + owned_concepts: + - "Assimilation \u2014 EmissionCadenceDeclaration handover" + imports: + - kernel/itc-core + relationships: + - type: conforms_to + target: kernel/itc-core + warnings: [] - id: assimilation/it-capability-canon kind: assimilation title: "Assimilation \u2014 IT Capability Canon (ITCC) v0.1" @@ -595,6 +609,20 @@ items: - type: uses target: profile/small-saas warnings: [] +- id: example/emission-cadence/qonto-assistant + kind: example + title: Qonto Assistant Emission Cadence Worked Example + canonical_path: standards/emission-cadence/examples/qonto-assistant.yaml + source_path: infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + summary: 'Canon-side example artifact: Qonto Assistant Emission Cadence Worked Example.' + owned_concepts: + - Qonto Assistant Emission Cadence Worked Example + imports: + - standard/emission-cadence + relationships: + - type: conforms_to + target: standard/emission-cadence + warnings: [] - id: kernel/itc-core kind: kernel title: InfoTechCanon Core @@ -661,6 +689,24 @@ items: imports: [] relationships: [] warnings: [] +- id: mapping/emission-cadence-handover + kind: mapping + title: Emission cadence handover mappings + canonical_path: assimilation/emission-cadence/mappings.yaml + source_path: infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + summary: 'Mapping artifact connecting canon surfaces: Emission cadence handover + mappings.' + owned_concepts: + - Emission cadence handover mappings + imports: [] + relationships: + - type: maps + target: standard/emission-cadence + - type: maps + target: model/observability + - type: maps + target: model/governance + warnings: [] - id: mapping/purpose-demand-governance-candidates kind: mapping title: Purpose Demand Governance Extension Candidates @@ -1280,6 +1326,25 @@ items: - type: conforms_to target: kernel/itc-core warnings: [] +- id: small-saas/capability-requirements/production + kind: profile-artifact + title: Small SaaS Production Capability Requirements + canonical_path: profiles/small-saas/artifacts/capability-requirements.yaml + source_path: profiles/small-saas/artifacts/capability-requirements.yaml + summary: 'Example artifact for the small-saas profile: Small SaaS Production Capability + Requirements.' + owned_concepts: + - Small SaaS Production Capability Requirements + imports: + - model/capability + relationships: + - type: instantiates + target: profile/small-saas + - type: uses + target: model/capability + - type: applies_to + target: small-saas/service/billing-portal + warnings: [] - id: small-saas/control/namespace-per-tenant kind: profile-artifact title: Namespace Per Tenant Control @@ -1609,6 +1674,35 @@ items: - type: imports target: standard/tagging warnings: [] +- id: standard/emission-cadence + kind: standard + title: InfoTechCanon Emission Cadence Standard + canonical_path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + source_path: infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + summary: 'Cross-cutting canon standard: InfoTechCanon Emission Cadence Standard.' + owned_concepts: + - EmissionCadenceDeclaration + - EmissionCadenceForm + - ExpectedRateCadence + - HeartbeatCadence + - InfoTechCanon Emission Cadence Standard + - ReconciliationCadence + imports: + - kernel/itc-core + - model/governance + - model/observability + relationships: + - type: conforms_to + target: kernel/itc-core + - type: imports + target: model/observability + - type: imports + target: model/governance + - type: related_to + target: model/security + - type: derived_from + target: assimilation/emission-cadence + warnings: [] - id: standard/repository-layout kind: standard title: InfoTechCanon Repository Layout Standard diff --git a/infospace/artifacts/index.yaml b/infospace/artifacts/index.yaml index f30d54d..1b902bf 100644 --- a/infospace/artifacts/index.yaml +++ b/infospace/artifacts/index.yaml @@ -1193,3 +1193,73 @@ artifacts: target: small-saas/control/namespace-per-tenant - type: evidenced_by target: small-saas/evidence/access-review-2026-05 + - id: standard/emission-cadence + path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + kind: standard + title: InfoTechCanon Emission Cadence Standard + provenance: + source_path: infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + placement: adapted + placement_workplan: ITC-WP-0018 + assimilation: assimilation/emission-cadence + relationships: + - type: conforms_to + target: kernel/itc-core + - type: imports + target: model/observability + - type: imports + target: model/governance + - type: related_to + target: model/security + - type: derived_from + target: assimilation/emission-cadence + - id: assimilation/emission-cadence + path: assimilation/emission-cadence/ASSIMILATION.md + kind: assimilation + title: Assimilation — EmissionCadenceDeclaration handover + provenance: + source_path: infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + disposition: adapt + placement_workplan: ITC-WP-0018 + relationships: + - type: conforms_to + target: kernel/itc-core + - id: mapping/emission-cadence-handover + path: assimilation/emission-cadence/mappings.yaml + kind: mapping + title: Emission cadence handover mappings + provenance: + source_path: infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + placement_workplan: ITC-WP-0018 + relationships: + - type: maps + target: standard/emission-cadence + - type: maps + target: model/observability + - type: maps + target: model/governance + - id: example/emission-cadence/qonto-assistant + path: standards/emission-cadence/examples/qonto-assistant.yaml + kind: example + title: Qonto Assistant Emission Cadence Worked Example + provenance: + source_path: infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + placement: adapted-example + placement_workplan: ITC-WP-0018 + relationships: + - type: conforms_to + target: standard/emission-cadence + - id: small-saas/capability-requirements/production + path: profiles/small-saas/artifacts/capability-requirements.yaml + kind: profile-artifact + title: Small SaaS Production Capability Requirements + provenance: + profile: small-saas + placement_workplan: ITC-WP-0014 + relationships: + - type: instantiates + target: profile/small-saas + - type: uses + target: model/capability + - type: applies_to + target: small-saas/service/billing-portal diff --git a/infospace/assimilation/emission-cadence/ASSIMILATION.md b/infospace/assimilation/emission-cadence/ASSIMILATION.md new file mode 100644 index 0000000..62ab555 --- /dev/null +++ b/infospace/assimilation/emission-cadence/ASSIMILATION.md @@ -0,0 +1,79 @@ +# Assimilation — EmissionCadenceDeclaration + +**Status:** Closed +**Disposition:** Adapt +**Source:** King's Guard Taxonomy draft 0.1.0 +**Authority:** `GH-DEC-2026-004` / State Hub decision +`89c73f45-d07b-40ea-b428-5a7375ce4b09` + +## Scope + +This assimilation covers the generic, ecosystem-wide shape by which a source +declares an expected emission cadence for an event class. It does not absorb +the NetKingdom security profile: evidence-class policy, MUST/SHOULD obligations, +and the rule requiring heartbeat plus reconciliation for rare load-bearing +classes remain owned by NetKingdom. + +## Findings + +- The Observability Model already owns `Signal`, `SignalSource`, `Event`, + `EventSource`, and the missing-signal pattern. It does not own a portable + source declaration for the expected arrival of an event class. +- The Governance Model already owns `Finding`. A cadence declaration names + detection conditions but does not redefine the finding record or lifecycle. +- The handover contains two useful generic forms: an expected count over a + window, and a positive heartbeat and/or count reconciliation for streams + whose meaningful events are intermittent. +- `evidence_class`, security modality, and required combinations are importing + profile concerns rather than generic cadence semantics. + +## DecisionRecord + +### Context + +King's Guard needs a stable contract to evaluate silence but is a Staff-layer +consumer, not the Taxonomy owner. Gate House assigned the generic contract to +InfoTechCanon and the NetKingdom security profile to `net-kingdom`. + +### Decision + +Adapt the draft into `standard/emission-cadence` and schema version `0.1`. +Preserve its two form names and field meanings. Make profile classifications +optional extension data, and let the heartbeat-or-reconciliation form contain +either mechanism or both. Publish strict validation for the generic core and a +namespaced `extensions` object for profile-owned additions. + +### Options Considered + +- Keep the schema in King's Guard — rejected because a consumer would own the + semantics it evaluates. +- Put the whole contract in NetKingdom — rejected because generic cadence is + reusable outside that security estate. +- Joint ownership — rejected because version authority would be ambiguous. +- Adapt the generic core here and import it from a NetKingdom profile — chosen. + +### Rationale + +The split follows the repository's Taxonomy role and Core's single-owner rule. +Allowing heartbeat, reconciliation, or both keeps the generic form useful while +leaving NetKingdom free to require the stronger combination. + +### Consequences + +- Sources own their declaration instances and emission behavior. +- Observers own evaluation and findings, not the declaration schema. +- Importing profiles may require fields or combinations but may not change the + generic fields' meanings. +- King's Guard's draft becomes provenance rather than a competing contract. + +### Review Trigger + +Review the draft after two independent source implementations, or when an +importing profile needs a third cadence form that cannot be expressed through +extensions without changing generic semantics. + +## Result + +The source was adapted, not copied into the canon. The resulting standard, +schema, and worked example are registered in canon 0.7.0 and validated by the +service surface. diff --git a/infospace/assimilation/emission-cadence/assimilation.yaml b/infospace/assimilation/emission-cadence/assimilation.yaml new file mode 100644 index 0000000..cd33790 --- /dev/null +++ b/infospace/assimilation/emission-cadence/assimilation.yaml @@ -0,0 +1,18 @@ +id: assimilation/emission-cadence +title: Assimilation — EmissionCadenceDeclaration handover +source: King's Guard Emission-cadence declaration Taxonomy draft +source_version: "0.1.0" +source_type: internal-draft +source_files: + - source/EmissionCadenceDeclaration.md +requested_by: gate-house +status: closed +disposition: adapt +impacts: + - model/observability + - model/governance + - standard/emission-cadence +decision: + authority: GH-DEC-2026-004 + decided_by: Bernd Worsch + decided_at: "2026-09-04T00:55:29Z" diff --git a/infospace/assimilation/emission-cadence/comparison-matrix.md b/infospace/assimilation/emission-cadence/comparison-matrix.md new file mode 100644 index 0000000..c812c27 --- /dev/null +++ b/infospace/assimilation/emission-cadence/comparison-matrix.md @@ -0,0 +1,12 @@ +# Comparison matrix — EmissionCadenceDeclaration + +| Source concept | Canon comparison | Disposition | +| --- | --- | --- | +| EmissionCadenceDeclaration | Missing portable declaration contract | Add standard-owned concept | +| expected-rate | Missing bounded-count declaration | Add generic form | +| heartbeat | ITC-OBS has missing-signal semantics, but no source declaration | Add form component; import observability terms | +| reconciliation | Missing source/observer count comparison declaration | Add form component | +| finding | ITC-GOV already owns the assessment outcome | Import; do not redefine | +| evidence_class | NetKingdom security viewpoint | Leave to importing profile via extensions | +| load-bearing MUST/SHOULD rules | NetKingdom doctrine | Exclude from generic standard | +| King's Guard evaluation behavior | Consumer implementation | Exclude from canon contract | diff --git a/infospace/assimilation/emission-cadence/extracted-concepts.yaml b/infospace/assimilation/emission-cadence/extracted-concepts.yaml new file mode 100644 index 0000000..b5248ef --- /dev/null +++ b/infospace/assimilation/emission-cadence/extracted-concepts.yaml @@ -0,0 +1,33 @@ +source: KG-DRAFT-EMISSION-CADENCE +concepts: + - id: emission-cadence-declaration + source_term: EmissionCadenceDeclaration + definition: A source-authored statement of expected event-class emission. + classification: missing_concept + proposed_owner: standard/emission-cadence + - id: expected-rate-cadence + source_term: expected-rate + definition: A minimum event count expected within a bounded window. + classification: missing_concept + proposed_owner: standard/emission-cadence + - id: heartbeat-cadence + source_term: heartbeat + definition: A positive liveness claim expected within an interval. + classification: broader_than_existing + existing_anchor: model/observability + proposed_owner: standard/emission-cadence + - id: reconciliation-cadence + source_term: reconciliation + definition: A comparison between source-side and observer-side event counts. + classification: missing_concept + proposed_owner: standard/emission-cadence + - id: evidence-class + source_term: evidence_class + definition: Security importance assigned to an emitted event class. + classification: viewpoint_difference + disposition: importing-profile-extension + - id: finding + source_term: finding + definition: The observer outcome produced by a cadence breach. + classification: already_covered + existing_anchor: model/governance diff --git a/infospace/assimilation/emission-cadence/mappings.yaml b/infospace/assimilation/emission-cadence/mappings.yaml new file mode 100644 index 0000000..fae1a93 --- /dev/null +++ b/infospace/assimilation/emission-cadence/mappings.yaml @@ -0,0 +1,25 @@ +id: mapping/emission-cadence-handover +title: Emission cadence handover mappings +source: KG-DRAFT-EMISSION-CADENCE +target: standard/emission-cadence +mappings: + - source_concept: EmissionCadenceDeclaration + target_concept: EmissionCadenceDeclaration + mapping_type: adapted + - source_concept: expected-rate + target_concept: ExpectedRateCadence + mapping_type: equivalent + - source_concept: heartbeat + target_concept: HeartbeatCadence + mapping_type: adapted + - source_concept: reconciliation + target_concept: ReconciliationCadence + mapping_type: adapted + - source_concept: finding + target: model/governance + target_concept: Finding + mapping_type: imports + - source_concept: event_class + target: model/observability + target_concept: EventType + mapping_type: imports diff --git a/infospace/assimilation/emission-cadence/open-questions.md b/infospace/assimilation/emission-cadence/open-questions.md new file mode 100644 index 0000000..9a18bef --- /dev/null +++ b/infospace/assimilation/emission-cadence/open-questions.md @@ -0,0 +1,14 @@ +# Open questions — EmissionCadenceDeclaration + +No question blocks adoption. + +The following promotion questions remain for the draft's future review: + +1. Do two independent source implementations need interval tolerance or grace + fields in the generic core, or can profiles carry them in `extensions`? +2. Should schema 1.0 retain the handed-over name `sources` for cadence entries, + or migrate to the clearer `cadences` with explicit compatibility tooling? +3. Does reconciliation eventually need a generic typed counter-selector + language, or are owner-defined field references sufficient? + +These are review triggers, not deferred implementation tasks. diff --git a/infospace/assimilation/emission-cadence/proposed-changes.md b/infospace/assimilation/emission-cadence/proposed-changes.md new file mode 100644 index 0000000..e771b11 --- /dev/null +++ b/infospace/assimilation/emission-cadence/proposed-changes.md @@ -0,0 +1,12 @@ +# Proposed changes — resolved + +1. Publish a draft Emission Cadence Standard under `infospace/standards/`. +2. Publish and register `emission-cadence.schema.yaml`. +3. Include one schema-valid worked example derived from the handed-over + `qonto-assistant` fixture without claiming it is the source-owned instance. +4. Add structural validation for the schema and example. +5. Register the standard and assimilation in all retrieval surfaces. +6. Bump the canon minor version and record compatibility rules. + +All proposals were accepted under `GH-DEC-2026-004` and implemented by +`ITC-WP-0018`. diff --git a/infospace/assimilation/emission-cadence/source-summary.md b/infospace/assimilation/emission-cadence/source-summary.md new file mode 100644 index 0000000..aaca3b5 --- /dev/null +++ b/infospace/assimilation/emission-cadence/source-summary.md @@ -0,0 +1,17 @@ +# Source summary — EmissionCadenceDeclaration draft + +The King's Guard draft proposes a source-authored declaration that makes stream +silence observable. It distinguishes two forms: + +- `expected-rate`: an event-class minimum over a time window; +- `heartbeat-or-reconciliation`: a positive liveness assertion, a comparison of + source and observed counts, or both. + +The draft was written against `qonto-assistant` and the Gate House approval +emission contract. It assigns evaluation to King's Guard and explicitly asks a +Taxonomy repository to own the schema. + +Security-specific content associates event classes with `attributive` or +`load-bearing` evidence and requires the stronger form for rare, load-bearing +events. That policy is part of the source context, not the generic core adopted +by InfoTechCanon. diff --git a/infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md b/infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md new file mode 100644 index 0000000..09a8a83 --- /dev/null +++ b/infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md @@ -0,0 +1,134 @@ +--- +title: Emission-cadence declaration (Taxonomy draft) +document_id: KG-DRAFT-EMISSION-CADENCE +version: 0.1.0 +status: Draft-for-handover +date: 2026-09-01 +drafter: kings-guard +owner: Taxonomy +worked_example: qonto-assistant +reference_instance: GH-WP-0002-T04 +reference_source_declaration: approval-engine/cadence.yaml +statute: net-kingdom/canon/standards/security-layer-model_v0.7.md +sections: ["9.6", "17"] +classification: Public +--- + +# Emission-cadence declaration — Taxonomy draft + +kings-guard drafts this artifact because it is the only consumer of +silence-as-signal and cannot implement §9.6 without a declared cadence. +**Ownership stays with Taxonomy.** This file is a handover, not an internal +schema. Inventing a local shape and keeping it here would be the drift +§17 exists to prevent. + +Proposed Taxonomy homes, neither of which has assented (§17): + +- `info-tech-canon` — ecosystem-wide semantic contracts +- `net-kingdom` — NetKingdom standards of record + +gate-house already named the heartbeat form as doctrine in +`docs/contracts/approval-emission-detection.md` (`GH-WP-0002-T04`). The +reference source declaration is `approval-engine/cadence.yaml`. This draft +covers **both** forms, because one does not substitute for the other. + +## 1. Why this belongs alongside the security genome + +A source already declares intended healthy operation as a `security_genome`: +purpose, permitted capabilities, egress, tolerances. Expected emission cadence +is a claim of the same kind — a statement of intent about the evidence the +source will publish, not a measurement kings-guard takes of it. + +Putting the declaration next to the genome keeps three properties: + +1. **The class is the source's declaration.** Load-bearing versus attributive + is not inferred by the observer from event contents. +2. **The form follows the class.** Volume classes declare an expected rate. + Low-volume load-bearing classes declare a heartbeat or reconciliation. + Rate monitoring is forbidden for the latter: a suppressed month of + revocations is indistinguishable from a quiet one. +3. **Silence becomes observable without Tooling contact.** The source + publishes the stream, including the positive claim that can itself go + missing. kings-guard compares what arrived against what was declared. + +## 2. Both forms + +### 2.1 Expected rate — volume classes + +Use when the class has a rate that can drop. + +```yaml +form: expected-rate +event_class: +evidence_class: attributive | load-bearing +window: 24h +expected_min: +drop_below: finding +``` + +A drop below `expected_min` in `window` is a finding about the **stream**, +not about any record's contents. + +Load-bearing volume classes MUST declare this form (or the heartbeat form +if they are in fact low-volume). Attributive sources SHOULD. + +### 2.2 Heartbeat or reconciliation — low-volume load-bearing classes + +Use when the valuable event is rare: revocations, denials, containment +actions. Rate monitoring cannot work. The required property is a **positive +claim that can itself go missing**. + +Reference instance: `GH-WP-0002-T04` / `approval-engine/cadence.yaml`. +Form is heartbeat **plus** reconciliation, not rate monitoring. + +```yaml +form: heartbeat-or-reconciliation +event_class: +evidence_class: load-bearing +rate_monitoring: forbidden +heartbeat: + event_class: .heartbeat # or a dedicated heartbeat class + interval: 24h + assertion: nothing-to-report + missing: finding +reconciliation: + compare_local: source transition counts per class + compare_observed: evidence-engine counts per class + divergence: finding + undrained_local: lag-not-divergence +``` + +A missing heartbeat, or a reconciliation divergence, is a finding about the +stream. None of these are informational logs. + +## 3. Worked example — `qonto-assistant` + +The one real source this draft is written against. + +| Event class | Evidence class | Form | Why | +| --- | --- | --- | --- | +| `audit.allow` | attributive | expected-rate (SHOULD) | Forensic reconstruction; no control branches on presence. Completeness is not claimed. The rate row is here so the volume form is specified, not because qonto traffic is currently a meaningful volume class. | +| `audit.deny` | load-bearing | heartbeat-or-reconciliation (MUST) | Deny-escalation and posture branch on deny presence/absence. Statute §9.6 names denials as load-bearing. Denials are infrequent, so rate monitoring is the wrong form. | +| `audit.heartbeat` | load-bearing | the positive claim | `nothing-to-report` plus per-class counts since the previous heartbeat. | + +Machine-readable worked example consumed by the local evaluator (draft-shaped, +not a competing schema): `src/kings_guard/fixtures/qonto_assistant_cadence.json`. + +Until `qonto-assistant` publishes the declaration and emits heartbeats, no +argument may assume this surface is live on that source. kings-guard can +still observe the audit events it does emit; stream completeness for the +deny class stays `unknown` or `degraded` until the positive claim exists. + +## 4. Consumer obligations (kings-guard) + +- Copy the declared evidence class onto each observation; do not infer it. +- Evaluate the stream against the declaration, not only each record. +- Carry completeness separately from record richness in posture output. +- Treat stream findings as distinct from content findings. +- Open no Tooling client to obtain the stream. The source publishes it. + +## 5. Handover + +Sent to `gate-house`, `net-kingdom`, and `info-tech-canon` for ownership. +kings-guard will consume whatever Taxonomy publishes; it will not fork this +draft into a private schema. diff --git a/infospace/indexes/artifact-tree.yaml b/infospace/indexes/artifact-tree.yaml index 8289d37..d4341ca 100644 --- a/infospace/indexes/artifact-tree.yaml +++ b/infospace/indexes/artifact-tree.yaml @@ -1,5 +1,5 @@ root: infospace -file_count: 191 +file_count: 208 files: - path: README.md directory: . @@ -79,6 +79,9 @@ files: - path: agent/briefs/example-consumer-purpose-portfolio.md directory: agent/briefs name: example-consumer-purpose-portfolio.md +- path: agent/briefs/example-emission-cadence-qonto-assistant.md + directory: agent/briefs + name: example-emission-cadence-qonto-assistant.md - path: agent/briefs/kernel-itc-core.md directory: agent/briefs name: kernel-itc-core.md @@ -88,6 +91,9 @@ files: - path: agent/briefs/mapping-capability-anchors.md directory: agent/briefs name: mapping-capability-anchors.md +- path: agent/briefs/mapping-emission-cadence-handover.md + directory: agent/briefs + name: mapping-emission-cadence-handover.md - path: agent/briefs/mapping-purpose-demand-governance-candidates.md directory: agent/briefs name: mapping-purpose-demand-governance-candidates.md @@ -133,6 +139,9 @@ files: - path: agent/briefs/pattern-intent-scope-purposes.md directory: agent/briefs name: pattern-intent-scope-purposes.md +- path: agent/briefs/practice-pattern-agentic-drives-functional.md + directory: agent/briefs + name: practice-pattern-agentic-drives-functional.md - path: agent/briefs/practice-pattern-interface-deprecation-strangler.md directory: agent/briefs name: practice-pattern-interface-deprecation-strangler.md @@ -163,6 +172,9 @@ files: - path: agent/briefs/standard-caring.md directory: agent/briefs name: standard-caring.md +- path: agent/briefs/standard-emission-cadence.md + directory: agent/briefs + name: standard-emission-cadence.md - path: agent/briefs/standard-repository-layout.md directory: agent/briefs name: standard-repository-layout.md @@ -217,6 +229,33 @@ files: - path: assimilation/README.md directory: assimilation name: README.md +- path: assimilation/emission-cadence/ASSIMILATION.md + directory: assimilation/emission-cadence + name: ASSIMILATION.md +- path: assimilation/emission-cadence/assimilation.yaml + directory: assimilation/emission-cadence + name: assimilation.yaml +- path: assimilation/emission-cadence/comparison-matrix.md + directory: assimilation/emission-cadence + name: comparison-matrix.md +- path: assimilation/emission-cadence/extracted-concepts.yaml + directory: assimilation/emission-cadence + name: extracted-concepts.yaml +- path: assimilation/emission-cadence/mappings.yaml + directory: assimilation/emission-cadence + name: mappings.yaml +- path: assimilation/emission-cadence/open-questions.md + directory: assimilation/emission-cadence + name: open-questions.md +- path: assimilation/emission-cadence/proposed-changes.md + directory: assimilation/emission-cadence + name: proposed-changes.md +- path: assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + directory: assimilation/emission-cadence/source + name: EmissionCadenceDeclaration.md +- path: assimilation/emission-cadence/source-summary.md + directory: assimilation/emission-cadence + name: source-summary.md - path: assimilation/intake-and-assimilation-practice.md directory: assimilation name: intake-and-assimilation-practice.md @@ -424,6 +463,9 @@ files: - path: profiles/README.md directory: profiles name: README.md +- path: profiles/small-saas/artifacts/capability-requirements.yaml + directory: profiles/small-saas/artifacts + name: capability-requirements.yaml - path: profiles/small-saas/artifacts/control.namespace-per-tenant.yaml directory: profiles/small-saas/artifacts name: control.namespace-per-tenant.yaml @@ -496,6 +538,9 @@ files: - path: schemas/concept.schema.yaml directory: schemas name: concept.schema.yaml +- path: schemas/emission-cadence.schema.yaml + directory: schemas + name: emission-cadence.schema.yaml - path: schemas/index.yaml directory: schemas name: index.yaml @@ -538,6 +583,12 @@ files: - path: standards/caring/benchmarks/kubernetes-rbac/native-concepts.yaml directory: standards/caring/benchmarks/kubernetes-rbac name: native-concepts.yaml +- path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + directory: standards/emission-cadence + name: InfoTechCanonEmissionCadenceStandard.md +- path: standards/emission-cadence/examples/qonto-assistant.yaml + directory: standards/emission-cadence/examples + name: qonto-assistant.yaml - path: standards/repository-layout/InfoTechCanonRepositoryLayoutStandard.md directory: standards/repository-layout name: InfoTechCanonRepositoryLayoutStandard.md diff --git a/infospace/indexes/concept-ownership.yaml b/infospace/indexes/concept-ownership.yaml index f24366a..6b4abc4 100644 --- a/infospace/indexes/concept-ownership.yaml +++ b/infospace/indexes/concept-ownership.yaml @@ -1,5 +1,9 @@ -concept_count: 119 +concept_count: 129 concepts: +- concept: "Assimilation \u2014 EmissionCadenceDeclaration handover" + owner: assimilation/emission-cadence + path: assimilation/emission-cadence/ASSIMILATION.md + source: artifact_title - concept: "Assimilation \u2014 IT Capability Canon (ITCC) v0.1" owner: assimilation/it-capability-canon path: assimilation/it-capability-canon/ASSIMILATION.md @@ -104,6 +108,10 @@ concepts: owner: example/consumer-purpose-portfolio path: examples/consumer-purpose-portfolio.yaml source: artifact_title +- concept: Qonto Assistant Emission Cadence Worked Example + owner: example/emission-cadence/qonto-assistant + path: standards/emission-cadence/examples/qonto-assistant.yaml + source: artifact_title - concept: InfoTechCanon Core owner: kernel/itc-core path: kernel/InfoTechCanonCore.md @@ -116,6 +124,10 @@ concepts: owner: mapping/capability-anchors path: mappings/capability-anchors.yaml source: artifact_title +- concept: Emission cadence handover mappings + owner: mapping/emission-cadence-handover + path: assimilation/emission-cadence/mappings.yaml + source: artifact_title - concept: Purpose Demand Governance Extension Candidates owner: mapping/purpose-demand-governance-candidates path: mappings/purpose-demand-governance-candidates.yaml @@ -338,6 +350,10 @@ concepts: owner: scheme/practice-pattern path: patterns/PracticePatternScheme.md source: frontmatter.owned_concepts +- concept: Small SaaS Production Capability Requirements + owner: small-saas/capability-requirements/production + path: profiles/small-saas/artifacts/capability-requirements.yaml + source: artifact_title - concept: Namespace Per Tenant Control owner: small-saas/control/namespace-per-tenant path: profiles/small-saas/artifacts/control.namespace-per-tenant.yaml @@ -454,6 +470,30 @@ concepts: owner: standard/caring path: standards/caring/InfoTechCanonCaringAccessGovernanceStandard.md source: frontmatter.owned_concepts +- concept: InfoTechCanon Emission Cadence Standard + owner: standard/emission-cadence + path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + source: artifact_title +- concept: EmissionCadenceDeclaration + owner: standard/emission-cadence + path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + source: frontmatter.owned_concepts +- concept: EmissionCadenceForm + owner: standard/emission-cadence + path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + source: frontmatter.owned_concepts +- concept: ExpectedRateCadence + owner: standard/emission-cadence + path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + source: frontmatter.owned_concepts +- concept: HeartbeatCadence + owner: standard/emission-cadence + path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + source: frontmatter.owned_concepts +- concept: ReconciliationCadence + owner: standard/emission-cadence + path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + source: frontmatter.owned_concepts - concept: InfoTechCanon Repository Layout Standard owner: standard/repository-layout path: standards/repository-layout/InfoTechCanonRepositoryLayoutStandard.md diff --git a/infospace/indexes/import-matrix.yaml b/infospace/indexes/import-matrix.yaml index 827dba6..03b88e2 100644 --- a/infospace/indexes/import-matrix.yaml +++ b/infospace/indexes/import-matrix.yaml @@ -1,4 +1,5 @@ artifacts: +- assimilation/emission-cadence - assimilation/it-capability-canon - benchmark/caring/kubernetes-rbac - benchmark/caring/kubernetes-rbac/access-descriptors @@ -25,9 +26,11 @@ artifacts: - evaluation/user-engine/questions - evaluation/user-engine/small-saas-alignment - example/consumer-purpose-portfolio +- example/emission-cadence/qonto-assistant - kernel/itc-core - kernel/itc-kernel-map - mapping/capability-anchors +- mapping/emission-cadence-handover - mapping/purpose-demand-governance-candidates - model/access-control - model/capability @@ -54,6 +57,7 @@ artifacts: - review-kit/alignment/workflow - review-kit/alignment/workplan-template - scheme/practice-pattern +- small-saas/capability-requirements/production - small-saas/control/namespace-per-tenant - small-saas/dataset/subscription-ledger - small-saas/deployment/production @@ -68,9 +72,14 @@ artifacts: - small-saas/tenant/globex - small-saas/user/ada-admin - standard/caring +- standard/emission-cadence - standard/repository-layout - standard/tagging rows: +- artifact: assimilation/emission-cadence + targets: + kernel/itc-core: + - conforms_to - artifact: assimilation/it-capability-canon targets: kernel/itc-core: @@ -353,6 +362,10 @@ rows: - illustrates profile/small-saas: - uses +- artifact: example/emission-cadence/qonto-assistant + targets: + standard/emission-cadence: + - conforms_to - artifact: kernel/itc-core targets: {} - artifact: kernel/itc-kernel-map @@ -389,6 +402,14 @@ rows: - maps - artifact: mapping/capability-anchors targets: {} +- artifact: mapping/emission-cadence-handover + targets: + model/governance: + - maps + model/observability: + - maps + standard/emission-cadence: + - maps - artifact: mapping/purpose-demand-governance-candidates targets: model/governance: @@ -641,6 +662,14 @@ rows: targets: kernel/itc-core: - conforms_to +- artifact: small-saas/capability-requirements/production + targets: + model/capability: + - uses + profile/small-saas: + - instantiates + small-saas/service/billing-portal: + - applies_to - artifact: small-saas/control/namespace-per-tenant targets: model/security: @@ -801,6 +830,18 @@ rows: - imports standard/tagging: - imports +- artifact: standard/emission-cadence + targets: + assimilation/emission-cadence: + - derived_from + kernel/itc-core: + - conforms_to + model/governance: + - imports + model/observability: + - imports + model/security: + - related_to - artifact: standard/repository-layout targets: kernel/itc-core: diff --git a/infospace/infospace.yaml b/infospace/infospace.yaml index 2f522a1..db91ead 100644 --- a/infospace/infospace.yaml +++ b/infospace/infospace.yaml @@ -39,6 +39,8 @@ disciplines: path: standards/caring/InfoTechCanonCaringAccessGovernanceStandard.md - name: Repository Layout Standard path: standards/repository-layout/InfoTechCanonRepositoryLayoutStandard.md + - name: Emission Cadence Standard + path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md schemas: standard: schemas/standard.schema.yaml practice-pattern: schemas/practice-pattern.schema.yaml @@ -52,6 +54,7 @@ schemas: capability: schemas/capability.schema.yaml capability-record: schemas/capability-record.schema.yaml attribute-value-type: schemas/attribute-value-type.schema.yaml + emission-cadence: schemas/emission-cadence.schema.yaml workflows: [] viability: redundancy_ratio: diff --git a/infospace/profiles/small-saas/artifacts/capability-requirements.yaml b/infospace/profiles/small-saas/artifacts/capability-requirements.yaml new file mode 100644 index 0000000..a05c55d --- /dev/null +++ b/infospace/profiles/small-saas/artifacts/capability-requirements.yaml @@ -0,0 +1,68 @@ +id: small-saas/capability-requirements/production +kind: capability-requirement-set +title: Small SaaS Production Capability Requirements +profile: small-saas +record_id: small-saas-production-capabilities +requires: + - capability: identity.authorization + profile: rbac + minimum_maturity: D4 + targets: + policy_coverage: + value: all-tenant-routes + - capability: data.transactional + profile: relational + minimum_maturity: D4 + targets: + durability: + value: production-approved + - capability: integration.api + profile: request-response + minimum_maturity: D4 + targets: + compatibility: + value: versioned-contract + - capability: operations.observability + profile: events + minimum_maturity: D3 + targets: + coverage: + value: tenant-access-and-service-health +provisions: + - provider: small-saas/control/namespace-per-tenant + capability: identity.authorization + profile: rbac + maturity: D4 + evidence: + - hook: policy_tests + basis: measured + source: small-saas/evidence/access-review-2026-05 + - provider: small-saas/dataset/subscription-ledger + capability: data.transactional + profile: relational + maturity: D4 + evidence: + - hook: durability_tests + basis: measured + source: small-saas/evidence/access-review-2026-05 + - provider: small-saas/service/billing-portal + capability: integration.api + profile: request-response + maturity: D4 + evidence: + - hook: contract_tests + basis: measured + source: small-saas/evidence/access-review-2026-05 + - provider: small-saas/deployment/production + capability: operations.observability + profile: events + maturity: D3 + evidence: + - hook: telemetry_coverage + basis: measured + source: small-saas/evidence/access-review-2026-05 +relationships: + - type: instantiates + target: profile/small-saas + - type: applies_to + target: small-saas/service/billing-portal diff --git a/infospace/profiles/small-saas/profile.yaml b/infospace/profiles/small-saas/profile.yaml index 3e053d8..5b5f514 100644 --- a/infospace/profiles/small-saas/profile.yaml +++ b/infospace/profiles/small-saas/profile.yaml @@ -22,6 +22,7 @@ required_standards: - model/devsecops - model/network - model/observability + - model/capability - standard/tagging - standard/caring required_concepts: @@ -87,6 +88,7 @@ artifact_ids: - small-saas/control/namespace-per-tenant - small-saas/evidence/access-review-2026-05 - small-saas/incident/cross-tenant-access-attempt + - small-saas/capability-requirements/production validation_rules: required_artifact_kinds: - service diff --git a/infospace/schemas/emission-cadence.schema.yaml b/infospace/schemas/emission-cadence.schema.yaml new file mode 100644 index 0000000..042f3a2 --- /dev/null +++ b/infospace/schemas/emission-cadence.schema.yaml @@ -0,0 +1,159 @@ +$schema: https://json-schema.org/draft/2020-12/schema +$id: https://info-tech-canon.local/schemas/emission-cadence.schema.yaml +title: InfoTechCanon EmissionCadenceDeclaration 0.1 +description: Generic source-authored event emission cadence declaration. +type: object +required: + - schema_version + - declaration_id + - source + - sources +properties: + schema_version: + const: "0.1" + declaration_id: + $ref: "#/$defs/non_empty_string" + source: + $ref: "#/$defs/non_empty_string" + stream_id: + $ref: "#/$defs/non_empty_string" + sources: + type: array + minItems: 1 + items: + $ref: "#/$defs/cadence_entry" + extensions: + $ref: "#/$defs/extensions" +additionalProperties: false +$defs: + non_empty_string: + type: string + minLength: 1 + duration: + type: string + pattern: "^(?:P(?=\\d|T\\d)(?:\\d+D)?(?:T(?:\\d+H)?(?:\\d+M)?(?:\\d+S)?)?|[1-9][0-9]*(?:s|m|h|d))$" + extensions: + type: object + minProperties: 1 + propertyNames: + pattern: "^[a-z][a-z0-9.-]*$" + additionalProperties: + type: object + heartbeat: + type: object + required: + - event_class + - assertion + - missing + properties: + event_class: + $ref: "#/$defs/non_empty_string" + interval: + $ref: "#/$defs/duration" + interval_seconds: + type: integer + minimum: 1 + assertion: + $ref: "#/$defs/non_empty_string" + missing: + $ref: "#/$defs/non_empty_string" + extensions: + $ref: "#/$defs/extensions" + oneOf: + - required: [interval] + not: + required: [interval_seconds] + - required: [interval_seconds] + not: + required: [interval] + additionalProperties: false + reconciliation: + type: object + required: + - compare_local + - compare_observed + - divergence + properties: + compare_local: + $ref: "#/$defs/non_empty_string" + compare_observed: + $ref: "#/$defs/non_empty_string" + divergence: + $ref: "#/$defs/non_empty_string" + undrained_local: + $ref: "#/$defs/non_empty_string" + extensions: + $ref: "#/$defs/extensions" + additionalProperties: false + cadence_entry: + type: object + required: + - source_id + - event_class + - form + properties: + source_id: + $ref: "#/$defs/non_empty_string" + source_system: + $ref: "#/$defs/non_empty_string" + event_class: + $ref: "#/$defs/non_empty_string" + form: + enum: + - expected-rate + - heartbeat-or-reconciliation + window: + $ref: "#/$defs/duration" + window_seconds: + type: integer + minimum: 1 + expected_min: + type: integer + minimum: 0 + drop_below: + $ref: "#/$defs/non_empty_string" + heartbeat: + $ref: "#/$defs/heartbeat" + reconciliation: + $ref: "#/$defs/reconciliation" + extensions: + $ref: "#/$defs/extensions" + allOf: + - if: + properties: + form: + const: expected-rate + required: [form] + then: + required: + - expected_min + - drop_below + oneOf: + - required: [window] + not: + anyOf: + - required: [window_seconds] + - required: [heartbeat] + - required: [reconciliation] + - required: [window_seconds] + not: + anyOf: + - required: [window] + - required: [heartbeat] + - required: [reconciliation] + - if: + properties: + form: + const: heartbeat-or-reconciliation + required: [form] + then: + anyOf: + - required: [heartbeat] + - required: [reconciliation] + not: + anyOf: + - required: [window] + - required: [window_seconds] + - required: [expected_min] + - required: [drop_below] + additionalProperties: false diff --git a/infospace/schemas/index.yaml b/infospace/schemas/index.yaml index f761e3a..cadc33e 100644 --- a/infospace/schemas/index.yaml +++ b/infospace/schemas/index.yaml @@ -25,3 +25,5 @@ schemas: path: capability-record.schema.yaml - id: attribute-value-type path: attribute-value-type.schema.yaml + - id: emission-cadence + path: emission-cadence.schema.yaml diff --git a/infospace/standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md b/infospace/standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md new file mode 100644 index 0000000..2a16582 --- /dev/null +++ b/infospace/standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md @@ -0,0 +1,214 @@ +--- +id: itc-emission-cadence:EmissionCadenceDeclaration +title: InfoTechCanon Emission Cadence Standard +short_name: ITC-EMISSION-CADENCE +type: standard +standard_family: InfoTechCanon +repository_context: info-tech-canon +recommended_path: standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md +status: draft +version: 0.1.0 +schema_version: "0.1" +canonical_owner: InfoTechCanonEmissionCadenceStandard +namespace: itc-emission-cadence +classification: standard +primary_cluster: observability-contract +imports: + - InfoTechCanonCore + - InfoTechCanonObservabilityModel + - InfoTechCanonGovernanceModel +related: + - InfoTechCanonSecurityModel +owned_concepts: + - EmissionCadenceDeclaration + - EmissionCadenceForm + - ExpectedRateCadence + - HeartbeatCadence + - ReconciliationCadence +provenance: + source_version: 0.1.0 + source_file: infospace/assimilation/emission-cadence/source/EmissionCadenceDeclaration.md + assimilation: assimilation/emission-cadence + decision: GH-DEC-2026-004 +created_at: "2026-09-04" +updated_at: "2026-09-04" +--- + +# InfoTechCanon Emission Cadence Standard + +**Short Name:** `ITC-EMISSION-CADENCE` +**Document Status:** Draft +**Version:** 0.1.0 +**Schema Version:** `0.1` + +## 1. Purpose + +This standard defines `EmissionCadenceDeclaration`: a machine-readable, +source-authored claim about when records of an event class are expected to be +emitted. It lets an observer evaluate a stream's silence separately from the +contents and richness of records that did arrive. + +The declaration describes intended emission. It is not a measurement, a health +result, or proof that every event was emitted. + +## 2. Ownership boundary + +InfoTechCanon owns the generic forms, fields, validation semantics, +compatibility rules, and evolution of this contract. + +Other owners retain their own responsibilities: + +- a source owns each declaration instance and the behavior it declares; +- an observer owns measurement, evaluation, and resulting findings; +- an importing profile owns domain policy: which classes must declare cadence, + which form is required, and any stronger combination or threshold rules; +- ITC-OBS owns `Event`, `EventType`, `EventSource`, and missing-signal semantics; +- ITC-GOV owns `Finding` and its lifecycle. + +In particular, this standard does not define `attributive` or `load-bearing` +evidence, does not require cadence for any security class, and does not require +heartbeat and reconciliation together. Those are NetKingdom security-profile +rules, not ecosystem-wide semantics. + +## 3. Declaration envelope + +A declaration contains: + +| Field | Requirement | Meaning | +| --- | --- | --- | +| `schema_version` | required | Contract version understood by the producer. This draft uses `0.1`. | +| `declaration_id` | required | Stable identifier for the declaration instance. | +| `source` | required | Source system that owns the emission claim. | +| `stream_id` | optional | Stable stream identifier when the source publishes more than one stream. | +| `sources` | required | One or more event-class cadence entries. The name is retained from the handed-over 0.1 draft. | +| `extensions` | optional | Namespaced, profile-owned data that does not change generic field meanings. | + +Every entry in `sources` has a stable `source_id`, an `event_class`, and exactly +one generic `form`. A declaration must not contain duplicate `source_id` values. + +## 4. Forms + +### 4.1 `expected-rate` + +`ExpectedRateCadence` says that at least `expected_min` records of an event class +are expected in each `window`. + +```yaml +source_id: example.audit +event_class: audit.recorded +form: expected-rate +window: PT24H +expected_min: 1 +drop_below: finding +``` + +The window may be an ISO 8601 duration (`PT24H`) or a positive compact duration +using `s`, `m`, `h`, or `d` (`24h`). A producer that cannot use duration strings +may provide `window_seconds` instead, but must not provide both. + +Evaluation is performed per complete window unless an importing profile defines +a grace rule. A count below `expected_min` satisfies the condition named by +`drop_below`. The string names an observer-owned outcome; it does not create or +change the ITC-GOV Finding concept. + +### 4.2 `heartbeat-or-reconciliation` + +This form describes one or both of the following mechanisms: + +- `heartbeat`: a positive assertion expected within an interval, so the + assertion can itself be missing; +- `reconciliation`: references to source-side and observer-side counts whose + divergence is evaluated. + +At least one mechanism is required by the generic contract. An importing +profile may require both. + +```yaml +source_id: example.denials +event_class: audit.denied +form: heartbeat-or-reconciliation +heartbeat: + event_class: audit.heartbeat + interval: PT24H + assertion: nothing-to-report + missing: finding +reconciliation: + compare_local: source_transition_counts.audit.denied + compare_observed: evidence_counts.audit.denied + divergence: finding + undrained_local: lag-not-divergence +``` + +`heartbeat.interval` follows the same duration rules as the expected-rate +window; `interval_seconds` is the alternative integer representation. +`compare_local` and `compare_observed` are owner-defined references. This draft +does not define a query language for them. + +## 5. Extensions and profiles + +Generic objects are closed: unknown fields fail schema validation. Additional +profile data belongs in an `extensions` mapping keyed by an owner-controlled +namespace. For example: + +```yaml +extensions: + netkingdom: + evidence_class: load-bearing + rate_monitoring: forbidden +``` + +An extension may narrow use of the generic contract. It must not redefine a +generic field, change the meaning of a form, or make an instance that fails the +generic schema valid. + +## 6. Validation semantics + +The normative machine contract is +`infospace/schemas/emission-cadence.schema.yaml`. + +A conforming generic declaration: + +1. validates against that schema; +2. has at least one cadence entry; +3. has unique `source_id` values; +4. uses one duration representation for each window or interval; +5. supplies only expected-rate fields for `expected-rate` entries; +6. supplies heartbeat, reconciliation, or both for + `heartbeat-or-reconciliation` entries; and +7. carries profile-owned data only under a namespaced `extensions` key. + +Schema validation establishes declaration shape, not operational truth. +Observers must not infer that a stream is complete merely because its +declaration is valid. + +## 7. Compatibility and evolution + +The document version and `schema_version` use semantic versioning with the +schema's major and minor represented on the wire. + +- Patch releases clarify prose or validation without changing accepted data. +- Minor releases add optional fields or forms. Producers may opt in; consumers + must not silently interpret an unknown form as a known one. +- Major releases may rename, remove, or change field semantics and require an + explicit migration note. + +During the `0.x` draft period, incompatible changes remain possible but must be +recorded in the repo changelog and accompanied by migration guidance. A +consumer must reject an unsupported `schema_version`; it must not guess. + +## 8. Worked example + +`examples/qonto-assistant.yaml` is a schema-valid transformation of the King's +Guard handover example. It demonstrates both forms and the profile-extension +boundary. It is not the source-owned `qonto-assistant` declaration and makes no +claim about live emission or observation. + +## 9. Conformance + +A producer conforms to this standard when its published declaration validates +against the named schema and accurately identifies the source and event class +it owns. A consumer conforms when it preserves the generic semantics, rejects +unsupported versions and forms, and keeps observation results separate from +the source's declaration. + +Profile conformance is additional and is assessed by the profile owner. diff --git a/infospace/standards/emission-cadence/examples/qonto-assistant.yaml b/infospace/standards/emission-cadence/examples/qonto-assistant.yaml new file mode 100644 index 0000000..47548a7 --- /dev/null +++ b/infospace/standards/emission-cadence/examples/qonto-assistant.yaml @@ -0,0 +1,36 @@ +# Worked example only. qonto-assistant owns its live declaration; this file +# makes no claim that this cadence is currently emitted or observed. +schema_version: "0.1" +declaration_id: qonto-assistant.audit.example +source: qonto-assistant +stream_id: qonto-assistant.audit +sources: + - source_id: qonto-assistant.audit.allow + event_class: audit.allow + form: expected-rate + window: PT24H + expected_min: 1 + drop_below: finding + extensions: + netkingdom: + evidence_class: attributive + completeness_claimed: false + example_only: true + - source_id: qonto-assistant.audit.deny + event_class: audit.deny + form: heartbeat-or-reconciliation + heartbeat: + event_class: audit.heartbeat + interval: PT24H + assertion: nothing-to-report + missing: finding + reconciliation: + compare_local: source_transition_counts.audit.deny + compare_observed: evidence_counts.audit.deny + divergence: finding + undrained_local: lag-not-divergence + extensions: + netkingdom: + evidence_class: load-bearing + rate_monitoring: forbidden + completeness_claimed: true diff --git a/infospace/validation/latest.json b/infospace/validation/latest.json index c75fb90..42d29fe 100644 --- a/infospace/validation/latest.json +++ b/infospace/validation/latest.json @@ -1,14 +1,496 @@ { + "coverage": { + "artifacts": [ + { + "checks": "structural-or-specialized", + "id": "assimilation/emission-cadence", + "kind": "assimilation", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "assimilation/it-capability-canon", + "kind": "assimilation", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "benchmark/caring/kubernetes-rbac", + "kind": "benchmark-workspace", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "benchmark/caring/kubernetes-rbac/access-descriptors", + "kind": "access-descriptor-set", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "benchmark/caring/kubernetes-rbac/caring-mapping", + "kind": "caring-mapping", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "benchmark/caring/kubernetes-rbac/findings", + "kind": "benchmark-findings", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "benchmark/caring/kubernetes-rbac/native-concepts", + "kind": "native-concept-map", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "capability-catalog/itc-cap", + "kind": "capability-catalog", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "catalog/attribute-value-types", + "kind": "concept-catalog", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "catalog/evidence-basis", + "kind": "concept-catalog", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "comparison/repo-scoping/canon-benefit-analysis", + "kind": "benefit-analysis", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "comparison/repo-scoping/consumer-workplan-brief", + "kind": "consumer-workplan-brief", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "comparison/repo-scoping/extension-candidates", + "kind": "extension-candidate-set", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "comparison/repo-scoping/frame", + "kind": "comparison-frame", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "comparison/repo-scoping/report", + "kind": "comparison-report", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "concept-catalog/purpose-demand", + "kind": "concept-catalog", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "conformance/railiance-fabric", + "kind": "conformance-pack", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "conformance/railiance-fabric/consumer-workplan-brief", + "kind": "consumer-workplan-brief", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "conformance/railiance-fabric/entity-edge-capture-criteria", + "kind": "capture-criteria", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "conformance/railiance-fabric/mapping-expectations", + "kind": "mapping-expectation", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "conformance/railiance-fabric/visualization-examples", + "kind": "visualization-example-set", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "evaluation/user-engine", + "kind": "evaluation-pack", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "evaluation/user-engine/consumer-workplan-brief", + "kind": "consumer-workplan-brief", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "evaluation/user-engine/interface-card-expectations", + "kind": "interface-card-expectation", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "evaluation/user-engine/questions", + "kind": "evaluation-question-set", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "evaluation/user-engine/small-saas-alignment", + "kind": "profile-alignment", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "example/consumer-purpose-portfolio", + "kind": "example", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "example/emission-cadence/qonto-assistant", + "kind": "example", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "kernel/itc-core", + "kind": "kernel", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "kernel/itc-kernel-map", + "kind": "kernel", + "schema": null + }, + { + "checks": "schema-and-references", + "id": "mapping/capability-anchors", + "kind": "mapping", + "schema": "mapping.schema.yaml" + }, + { + "checks": "schema-and-references", + "id": "mapping/emission-cadence-handover", + "kind": "mapping", + "schema": "mapping.schema.yaml" + }, + { + "checks": "schema-and-references", + "id": "mapping/purpose-demand-governance-candidates", + "kind": "mapping", + "schema": "mapping.schema.yaml" + }, + { + "checks": "structural-or-specialized", + "id": "model/access-control", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/capability", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/data", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/devsecops", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/governance", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/information-space", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/landscape", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/network", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/observability", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/organization", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/purpose-demand-extension", + "kind": "model-extension", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/security", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "model/task", + "kind": "model", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "pattern/intent-scope-purposes", + "kind": "pattern", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "practice-pattern/agentic-drives-functional", + "kind": "practice-pattern", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "practice-pattern/interface-deprecation-strangler", + "kind": "practice-pattern", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "practice/intake-and-assimilation", + "kind": "practice", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "profile/small-saas", + "kind": "profile", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "review-kit/alignment", + "kind": "alignment-review-kit", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "review-kit/alignment/model-selection-guide", + "kind": "model-selection-guide", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "review-kit/alignment/schema", + "kind": "alignment-review-schema", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "review-kit/alignment/scorecard", + "kind": "alignment-scorecard", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "review-kit/alignment/workflow", + "kind": "alignment-review-workflow", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "review-kit/alignment/workplan-template", + "kind": "consumer-workplan-template", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "scheme/practice-pattern", + "kind": "practice-pattern-scheme", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/capability-requirements/production", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/control/namespace-per-tenant", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/dataset/subscription-ledger", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/deployment/production", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/evidence/access-review-2026-05", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/incident/cross-tenant-access-attempt", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/policy/tenant-isolation", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/service/billing-portal", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/system/billing-system", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/task/onboard-tenant", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/team/platform", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/tenant/acme", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/tenant/globex", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "small-saas/user/ada-admin", + "kind": "profile-artifact", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "standard/caring", + "kind": "standard", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "standard/emission-cadence", + "kind": "standard", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "standard/repository-layout", + "kind": "standard", + "schema": null + }, + { + "checks": "structural-or-specialized", + "id": "standard/tagging", + "kind": "standard", + "schema": null + } + ], + "not_proven": [ + "ownership of concepts only in prose", + "all Markdown links", + "consumer adoption", + "cross-version interoperability", + "CARING effective access", + "mapping rationale completeness" + ], + "ok": true, + "specialized": [ + "capability catalog/record", + "practice pattern", + "emission cadence example", + "consumer packs" + ] + }, "details": { - "artifact_count": 71, - "relationship_count": 302 + "artifact_count": 76, + "relationship_count": 315 }, "errors": [], + "evidence": { + "corpus_sha256": "466d11ec8825482b370c3afc4cf22b44fe5f48aa14e4babef838a6aa91009148", + "digest_scope": "all infospace files except validation reports", + "dirty": true, + "generated_at": "2026-09-04T22:43:03.604707+00:00", + "revision": "a2e7f22d8deda813b6265f1e06fc75d0a2ccc5ce" + }, "metrics": { "coherence_components": 1.0, "consistency_cycles": 0.0, "coverage_ratio": 1.0, - "granularity_entropy": 4.580874882166957, + "granularity_entropy": 4.582306705233707, "redundancy_ratio": 0.0 }, "ok": true, diff --git a/infospace/views/by-concept.md b/infospace/views/by-concept.md index 8b73997..6ac1d02 100644 --- a/infospace/views/by-concept.md +++ b/infospace/views/by-concept.md @@ -2,10 +2,11 @@ # By Concept -Concept count: **119** +Concept count: **129** | Concept | Owner | Source | | --- | --- | --- | +| Assimilation — EmissionCadenceDeclaration handover | `assimilation/emission-cadence` | `artifact_title` | | Assimilation — IT Capability Canon (ITCC) v0.1 | `assimilation/it-capability-canon` | `artifact_title` | | CARING Kubernetes RBAC Benchmark | `benchmark/caring/kubernetes-rbac` | `artifact_title` | | Kubernetes RBAC CARING Access Descriptors | `benchmark/caring/kubernetes-rbac/access-descriptors` | `artifact_title` | @@ -32,9 +33,11 @@ Concept count: **119** | User Engine Canon Evaluation Questions | `evaluation/user-engine/questions` | `artifact_title` | | User Engine Small SaaS Alignment Lens | `evaluation/user-engine/small-saas-alignment` | `artifact_title` | | Canon-Side Consumer Purpose Portfolio | `example/consumer-purpose-portfolio` | `artifact_title` | +| Qonto Assistant Emission Cadence Worked Example | `example/emission-cadence/qonto-assistant` | `artifact_title` | | InfoTechCanon Core | `kernel/itc-core` | `artifact_title` | | InfoTechCanon Kernel Map | `kernel/itc-kernel-map` | `artifact_title` | | ITC-CAP concept mappings to anchoring canon models | `mapping/capability-anchors` | `artifact_title` | +| Emission cadence handover mappings | `mapping/emission-cadence-handover` | `artifact_title` | | Purpose Demand Governance Extension Candidates | `mapping/purpose-demand-governance-candidates` | `artifact_title` | | InfoTechCanon Access Control Model | `model/access-control` | `artifact_title` | | InfoTechCanon Capability Model | `model/capability` | `artifact_title` | @@ -90,6 +93,7 @@ Concept count: **119** | PracticePattern Scheme | `scheme/practice-pattern` | `artifact_title` | | PracticePattern | `scheme/practice-pattern` | `frontmatter.owned_concepts` | | PatternLanguage | `scheme/practice-pattern` | `frontmatter.owned_concepts` | +| Small SaaS Production Capability Requirements | `small-saas/capability-requirements/production` | `artifact_title` | | Namespace Per Tenant Control | `small-saas/control/namespace-per-tenant` | `artifact_title` | | Subscription Ledger Dataset | `small-saas/dataset/subscription-ledger` | `artifact_title` | | Production Deployment | `small-saas/deployment/production` | `artifact_title` | @@ -119,6 +123,12 @@ Concept count: **119** | CARINGAnalysisFitnessTest | `standard/caring` | `frontmatter.owned_concepts` | | CARINGAnalysisProcedure | `standard/caring` | `frontmatter.owned_concepts` | | CARINGRedesignProcedure | `standard/caring` | `frontmatter.owned_concepts` | +| InfoTechCanon Emission Cadence Standard | `standard/emission-cadence` | `artifact_title` | +| EmissionCadenceDeclaration | `standard/emission-cadence` | `frontmatter.owned_concepts` | +| EmissionCadenceForm | `standard/emission-cadence` | `frontmatter.owned_concepts` | +| ExpectedRateCadence | `standard/emission-cadence` | `frontmatter.owned_concepts` | +| HeartbeatCadence | `standard/emission-cadence` | `frontmatter.owned_concepts` | +| ReconciliationCadence | `standard/emission-cadence` | `frontmatter.owned_concepts` | | InfoTechCanon Repository Layout Standard | `standard/repository-layout` | `artifact_title` | | CanonicalRepositoryLayout | `standard/repository-layout` | `frontmatter.owned_concepts` | | RepositoryDocumentationDirectory | `standard/repository-layout` | `frontmatter.owned_concepts` | diff --git a/infospace/views/by-mapping-target.md b/infospace/views/by-mapping-target.md index 7fe2437..08fb9b9 100644 --- a/infospace/views/by-mapping-target.md +++ b/infospace/views/by-mapping-target.md @@ -2,6 +2,10 @@ # By Mapping Target +## `assimilation/emission-cadence` + +- `standard/emission-cadence` via `derived_from` + ## `assimilation/it-capability-canon` - `model/capability` via `derived_from` @@ -63,6 +67,7 @@ ## `kernel/itc-core` +- `assimilation/emission-cadence` via `conforms_to` - `assimilation/it-capability-canon` via `conforms_to` - `concept-catalog/purpose-demand` via `conforms_to` - `kernel/itc-kernel-map` via `maps` @@ -84,6 +89,7 @@ - `review-kit/alignment` via `conforms_to` - `scheme/practice-pattern` via `conforms_to` - `standard/caring` via `conforms_to` +- `standard/emission-cadence` via `conforms_to` - `standard/repository-layout` via `conforms_to` - `standard/tagging` via `conforms_to` @@ -111,6 +117,7 @@ - `kernel/itc-kernel-map` via `maps` - `practice-pattern/agentic-drives-functional` via `uses` +- `small-saas/capability-requirements/production` via `uses` ## `model/data` @@ -156,6 +163,7 @@ - `evaluation/user-engine/questions` via `uses` - `evaluation/user-engine/small-saas-alignment` via `uses` - `kernel/itc-kernel-map` via `maps` +- `mapping/emission-cadence-handover` via `maps` - `mapping/purpose-demand-governance-candidates` via `maps` - `model/access-control` via `uses` - `model/capability` via `uses` @@ -172,6 +180,7 @@ - `review-kit/alignment/workflow` via `uses` - `small-saas/policy/tenant-isolation` via `uses` - `standard/caring` via `imports` +- `standard/emission-cadence` via `imports` - `standard/repository-layout` via `imports` ## `model/information-space` @@ -215,6 +224,7 @@ - `conformance/railiance-fabric/entity-edge-capture-criteria` via `uses` - `conformance/railiance-fabric/mapping-expectations` via `maps` - `kernel/itc-kernel-map` via `maps` +- `mapping/emission-cadence-handover` via `maps` - `model/capability` via `uses` - `practice-pattern/agentic-drives-functional` via `uses` - `practice-pattern/interface-deprecation-strangler` via `uses` @@ -222,6 +232,7 @@ - `review-kit/alignment/model-selection-guide` via `uses` - `small-saas/evidence/access-review-2026-05` via `uses` - `standard/caring` via `imports` +- `standard/emission-cadence` via `imports` ## `model/organization` @@ -281,6 +292,7 @@ - `small-saas/control/namespace-per-tenant` via `uses` - `small-saas/incident/cross-tenant-access-attempt` via `uses` - `standard/caring` via `imports` +- `standard/emission-cadence` via `related_to` ## `model/task` @@ -325,6 +337,7 @@ - `evaluation/user-engine/small-saas-alignment` via `evaluates` - `example/consumer-purpose-portfolio` via `uses` - `review-kit/alignment/model-selection-guide` via `uses` +- `small-saas/capability-requirements/production` via `instantiates` - `small-saas/control/namespace-per-tenant` via `instantiates` - `small-saas/dataset/subscription-ledger` via `instantiates` - `small-saas/deployment/production` via `instantiates` @@ -375,6 +388,7 @@ ## `small-saas/service/billing-portal` +- `small-saas/capability-requirements/production` via `applies_to` - `small-saas/dataset/subscription-ledger` via `owned_by` - `small-saas/deployment/production` via `deploys` @@ -420,6 +434,11 @@ - `review-kit/alignment/model-selection-guide` via `uses` - `small-saas/control/namespace-per-tenant` via `uses` +## `standard/emission-cadence` + +- `example/emission-cadence/qonto-assistant` via `conforms_to` +- `mapping/emission-cadence-handover` via `maps` + ## `standard/tagging` - `benchmark/caring/kubernetes-rbac` via `uses` diff --git a/infospace/views/by-standard.md b/infospace/views/by-standard.md index fb95113..c5b9c33 100644 --- a/infospace/views/by-standard.md +++ b/infospace/views/by-standard.md @@ -23,6 +23,13 @@ - Path: `standards/caring/InfoTechCanonCaringAccessGovernanceStandard.md` - Relationships: 11 +## InfoTechCanon Emission Cadence Standard + +- ID: `standard/emission-cadence` +- Kind: `standard` +- Path: `standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md` +- Relationships: 5 + ## InfoTechCanon Repository Layout Standard - ID: `standard/repository-layout` diff --git a/infospace/views/import-matrix.md b/infospace/views/import-matrix.md index 7331aa9..66f3989 100644 --- a/infospace/views/import-matrix.md +++ b/infospace/views/import-matrix.md @@ -2,76 +2,81 @@ # Import Matrix -| Artifact | `assimilation/it-capability-canon` | `benchmark/caring/kubernetes-rbac` | `benchmark/caring/kubernetes-rbac/access-descriptors` | `benchmark/caring/kubernetes-rbac/caring-mapping` | `benchmark/caring/kubernetes-rbac/findings` | `benchmark/caring/kubernetes-rbac/native-concepts` | `capability-catalog/itc-cap` | `catalog/attribute-value-types` | `catalog/evidence-basis` | `comparison/repo-scoping/canon-benefit-analysis` | `comparison/repo-scoping/consumer-workplan-brief` | `comparison/repo-scoping/extension-candidates` | `comparison/repo-scoping/frame` | `comparison/repo-scoping/report` | `concept-catalog/purpose-demand` | `conformance/railiance-fabric` | `conformance/railiance-fabric/consumer-workplan-brief` | `conformance/railiance-fabric/entity-edge-capture-criteria` | `conformance/railiance-fabric/mapping-expectations` | `conformance/railiance-fabric/visualization-examples` | `evaluation/user-engine` | `evaluation/user-engine/consumer-workplan-brief` | `evaluation/user-engine/interface-card-expectations` | `evaluation/user-engine/questions` | `evaluation/user-engine/small-saas-alignment` | `example/consumer-purpose-portfolio` | `kernel/itc-core` | `kernel/itc-kernel-map` | `mapping/capability-anchors` | `mapping/purpose-demand-governance-candidates` | `model/access-control` | `model/capability` | `model/data` | `model/devsecops` | `model/governance` | `model/information-space` | `model/landscape` | `model/network` | `model/observability` | `model/organization` | `model/purpose-demand-extension` | `model/security` | `model/task` | `pattern/intent-scope-purposes` | `practice-pattern/agentic-drives-functional` | `practice-pattern/interface-deprecation-strangler` | `practice/intake-and-assimilation` | `profile/small-saas` | `review-kit/alignment` | `review-kit/alignment/model-selection-guide` | `review-kit/alignment/schema` | `review-kit/alignment/scorecard` | `review-kit/alignment/workflow` | `review-kit/alignment/workplan-template` | `scheme/practice-pattern` | `small-saas/control/namespace-per-tenant` | `small-saas/dataset/subscription-ledger` | `small-saas/deployment/production` | `small-saas/evidence/access-review-2026-05` | `small-saas/incident/cross-tenant-access-attempt` | `small-saas/policy/tenant-isolation` | `small-saas/service/billing-portal` | `small-saas/system/billing-system` | `small-saas/task/onboard-tenant` | `small-saas/team/platform` | `small-saas/tenant/acme` | `small-saas/tenant/globex` | `small-saas/user/ada-admin` | `standard/caring` | `standard/repository-layout` | `standard/tagging` | -| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| `assimilation/it-capability-canon` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `benchmark/caring/kubernetes-rbac` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | `uses` | -| `benchmark/caring/kubernetes-rbac/access-descriptors` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | -| `benchmark/caring/kubernetes-rbac/caring-mapping` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | -| `benchmark/caring/kubernetes-rbac/findings` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | | | | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | -| `benchmark/caring/kubernetes-rbac/native-concepts` | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | -| `capability-catalog/itc-cap` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `catalog/attribute-value-types` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `catalog/evidence-basis` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `comparison/repo-scoping/canon-benefit-analysis` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `maps` | `maps` | | | | | `maps` | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | -| `comparison/repo-scoping/consumer-workplan-brief` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `comparison/repo-scoping/extension-candidates` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `proposes` | `proposes` | | | | | `proposes` | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `comparison/repo-scoping/frame` | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `comparison/repo-scoping/report` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | | `compares` | | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `concept-catalog/purpose-demand` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `conformance/railiance-fabric` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | -| `conformance/railiance-fabric/consumer-workplan-brief` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `conformance/railiance-fabric/entity-edge-capture-criteria` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `conformance/railiance-fabric/mapping-expectations` | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | `maps` | `maps` | `maps` | | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `conformance/railiance-fabric/visualization-examples` | | | | | | | | | | | | | | | | `part_of` | | `illustrates` | `illustrates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `evaluation/user-engine` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | `uses` | | | -| `evaluation/user-engine/consumer-workplan-brief` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `evaluation/user-engine/interface-card-expectations` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | -| `evaluation/user-engine/questions` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `evaluation/user-engine/small-saas-alignment` | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | `uses` | | | | `uses` | | | | | `uses` | | | | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | | | | -| `example/consumer-purpose-portfolio` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `illustrates` | | | `illustrates` | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | -| `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `kernel/itc-kernel-map` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | `maps` | -| `mapping/capability-anchors` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `mapping/purpose-demand-governance-candidates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/access-control` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/capability` | `derived_from` | | | | | | `introduces` | | `uses` | | | | | | | | | | | | | | | | | | `conforms_to` | | `introduces` | | | | | | `uses` | | `uses` | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/data` | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/devsecops` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/governance` | | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/information-space` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/landscape` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/network` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/observability` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/organization` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/purpose-demand-extension` | | | | | | | | | | | | | | | `introduces` | | | | | | | | | | | | `conforms_to` | | | | | | | | `extends` | `uses` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/security` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `model/task` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `pattern/intent-scope-purposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `implements` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `practice-pattern/agentic-drives-functional` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | | | | `uses` | | | | `uses` | | | `related_to` | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | -| `practice-pattern/interface-deprecation-strangler` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | `uses` | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | -| `practice/intake-and-assimilation` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `profile/small-saas` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `requires` | | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | | | | | | | | | | | | | | | | | | | | | | | | | | `requires` | | `requires` | -| `review-kit/alignment` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | -| `review-kit/alignment/model-selection-guide` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | | | | | `uses` | `part_of` | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | -| `review-kit/alignment/schema` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | -| `review-kit/alignment/scorecard` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | -| `review-kit/alignment/workflow` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | -| `review-kit/alignment/workplan-template` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | -| `scheme/practice-pattern` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `small-saas/control/namespace-per-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | | | | `evidenced_by` | | | | | | | | | | `uses` | | | -| `small-saas/dataset/subscription-ledger` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | `instantiates` | | | | | | | | | | | | | `governed_by` | `owned_by` | | | | `partitioned_for` | `partitioned_for` | | | | | -| `small-saas/deployment/production` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | `uses` | | | | | | | | | | `instantiates` | | | | | | | | `implements` | | | | | | `deploys` | | | | `separates` | `separates` | | | | | -| `small-saas/evidence/access-review-2026-05` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | | | -| `small-saas/incident/cross-tenant-access-attempt` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `instantiates` | | | | | | | | `constrained_by` | | | `evidenced_by` | | | | | | | | | | | | | -| `small-saas/policy/tenant-isolation` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | `instantiates` | | | | | | | | `requires` | | | `evidenced_by` | | | | | | | | | | | | | -| `small-saas/service/billing-portal` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | `part_of` | | `owned_by` | | | | | | | -| `small-saas/system/billing-system` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | `serves` | `serves` | | | | | -| `small-saas/task/onboard-tenant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | `instantiates` | | | | | | | | | | | | | `governed_by` | | | | `owned_by` | `changes` | | | | | | -| `small-saas/team/platform` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `instantiates` | | | | | | | | | | | | | | | | | | | | | | | | -| `small-saas/tenant/acme` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `instantiates` | | | | | | | | `isolated_by` | | | | | | | | | | | | `represented_by` | | | | -| `small-saas/tenant/globex` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `instantiates` | | | | | | | | `isolated_by` | | | | | | | | | | | | | | | | -| `small-saas/user/ada-admin` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | `uses` | | | | | | | | `instantiates` | | | | | | | | | | | `access_evidenced_by` | | `has_access_under` | | | | `member_of` | | | | | | | -| `standard/caring` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | `imports` | | `imports` | `imports` | `imports` | | | `imports` | `imports` | `imports` | | `imports` | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `imports` | -| `standard/repository-layout` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | `imports` | `imports` | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -| `standard/tagging` | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| Artifact | `assimilation/emission-cadence` | `assimilation/it-capability-canon` | `benchmark/caring/kubernetes-rbac` | `benchmark/caring/kubernetes-rbac/access-descriptors` | `benchmark/caring/kubernetes-rbac/caring-mapping` | `benchmark/caring/kubernetes-rbac/findings` | `benchmark/caring/kubernetes-rbac/native-concepts` | `capability-catalog/itc-cap` | `catalog/attribute-value-types` | `catalog/evidence-basis` | `comparison/repo-scoping/canon-benefit-analysis` | `comparison/repo-scoping/consumer-workplan-brief` | `comparison/repo-scoping/extension-candidates` | `comparison/repo-scoping/frame` | `comparison/repo-scoping/report` | `concept-catalog/purpose-demand` | `conformance/railiance-fabric` | `conformance/railiance-fabric/consumer-workplan-brief` | `conformance/railiance-fabric/entity-edge-capture-criteria` | `conformance/railiance-fabric/mapping-expectations` | `conformance/railiance-fabric/visualization-examples` | `evaluation/user-engine` | `evaluation/user-engine/consumer-workplan-brief` | `evaluation/user-engine/interface-card-expectations` | `evaluation/user-engine/questions` | `evaluation/user-engine/small-saas-alignment` | `example/consumer-purpose-portfolio` | `example/emission-cadence/qonto-assistant` | `kernel/itc-core` | `kernel/itc-kernel-map` | `mapping/capability-anchors` | `mapping/emission-cadence-handover` | `mapping/purpose-demand-governance-candidates` | `model/access-control` | `model/capability` | `model/data` | `model/devsecops` | `model/governance` | `model/information-space` | `model/landscape` | `model/network` | `model/observability` | `model/organization` | `model/purpose-demand-extension` | `model/security` | `model/task` | `pattern/intent-scope-purposes` | `practice-pattern/agentic-drives-functional` | `practice-pattern/interface-deprecation-strangler` | `practice/intake-and-assimilation` | `profile/small-saas` | `review-kit/alignment` | `review-kit/alignment/model-selection-guide` | `review-kit/alignment/schema` | `review-kit/alignment/scorecard` | `review-kit/alignment/workflow` | `review-kit/alignment/workplan-template` | `scheme/practice-pattern` | `small-saas/capability-requirements/production` | `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/emission-cadence` | `standard/repository-layout` | `standard/tagging` | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| `assimilation/emission-cadence` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `assimilation/it-capability-canon` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `benchmark/caring/kubernetes-rbac` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | `stress_tests` | | | `stress_tests` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | `uses` | +| `benchmark/caring/kubernetes-rbac/access-descriptors` | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | +| `benchmark/caring/kubernetes-rbac/caring-mapping` | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | +| `benchmark/caring/kubernetes-rbac/findings` | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | | | | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `proposes` | | | | +| `benchmark/caring/kubernetes-rbac/native-concepts` | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | +| `capability-catalog/itc-cap` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `catalog/attribute-value-types` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `catalog/evidence-basis` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `comparison/repo-scoping/canon-benefit-analysis` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | `maps` | `maps` | | | | | `maps` | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | +| `comparison/repo-scoping/consumer-workplan-brief` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `comparison/repo-scoping/extension-candidates` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | `proposes` | `proposes` | | | | | `proposes` | | `proposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `comparison/repo-scoping/frame` | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `comparison/repo-scoping/report` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | | `compares` | | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `concept-catalog/purpose-demand` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `conformance/railiance-fabric` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | +| `conformance/railiance-fabric/consumer-workplan-brief` | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `conformance/railiance-fabric/entity-edge-capture-criteria` | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `conformance/railiance-fabric/mapping-expectations` | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | `maps` | `maps` | `maps` | | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `conformance/railiance-fabric/visualization-examples` | | | | | | | | | | | | | | | | | `part_of` | | `illustrates` | `illustrates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `evaluation/user-engine` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | +| `evaluation/user-engine/consumer-workplan-brief` | | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `evaluation/user-engine/interface-card-expectations` | | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | +| `evaluation/user-engine/questions` | | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | `uses` | | `uses` | | `uses` | | | | | `uses` | `uses` | `uses` | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `evaluation/user-engine/small-saas-alignment` | | | | | | | | | | | | | | | | | | | | | | `part_of` | | | | | | | | | | | | `uses` | | | | `uses` | | | | | `uses` | | | | | | | | `evaluates` | | | | | | | | | | | | | | | | | | | | | | | | | | +| `example/consumer-purpose-portfolio` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `illustrates` | | | `illustrates` | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | +| `example/emission-cadence/qonto-assistant` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | +| `kernel/itc-core` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `kernel/itc-kernel-map` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | `maps` | | `maps` | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | `maps` | +| `mapping/capability-anchors` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `mapping/emission-cadence-handover` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | `maps` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | +| `mapping/purpose-demand-governance-candidates` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `maps` | | | | | | `maps` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/access-control` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | `uses` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/capability` | | `derived_from` | | | | | | `introduces` | | `uses` | | | | | | | | | | | | | | | | | | | `conforms_to` | | `introduces` | | | | | | | `uses` | | `uses` | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/data` | | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/devsecops` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/governance` | | | | | | | | | | `introduces` | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/information-space` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/landscape` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/network` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/observability` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/organization` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/purpose-demand-extension` | | | | | | | | | | | | | | | | `introduces` | | | | | | | | | | | | | `conforms_to` | | | | | | | | | `extends` | `uses` | | | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/security` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `model/task` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `pattern/intent-scope-purposes` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `implements` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `practice-pattern/agentic-drives-functional` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | | | | `uses` | | | | `uses` | | | `related_to` | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | +| `practice-pattern/interface-deprecation-strangler` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | `uses` | | | | `uses` | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | +| `practice/intake-and-assimilation` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `profile/small-saas` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | `requires` | | `requires` | `requires` | `requires` | | `requires` | `requires` | `requires` | `requires` | | `requires` | `requires` | | | | | | | | | | | | | | | | | | | | | | | | | | | `requires` | | | `requires` | +| `review-kit/alignment` | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | +| `review-kit/alignment/model-selection-guide` | | | `uses` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | `uses` | `uses` | | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | `uses` | | | | | `uses` | `part_of` | | | | | | | | | | | | | | | | | | | | | `uses` | | | `uses` | +| `review-kit/alignment/schema` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | +| `review-kit/alignment/scorecard` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | `uses` | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | +| `review-kit/alignment/workflow` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | `uses` | | `uses` | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | +| `review-kit/alignment/workplan-template` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | `uses` | | | | | | `part_of` | | | | | | | | | | | | | | | | | | | | | | | | | +| `scheme/practice-pattern` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `small-saas/capability-requirements/production` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `uses` | | | | | | | | | | | | | | | | `instantiates` | | | | | | | | | | | | | | | `applies_to` | | | | | | | | | | | +| `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/emission-cadence` | `derived_from` | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | `imports` | | | | `imports` | | | `related_to` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `standard/repository-layout` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | `imports` | `imports` | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +| `standard/tagging` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `conforms_to` | | | | | | | | | | | | | | | | | `imports` | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | diff --git a/infospace/views/kernel-overview.md b/infospace/views/kernel-overview.md index 2ef04e6..6a9aed9 100644 --- a/infospace/views/kernel-overview.md +++ b/infospace/views/kernel-overview.md @@ -3,7 +3,7 @@ # Kernel Overview - Infospace: `canon` -- Artifacts: 71 +- Artifacts: 76 ## Artifact Kinds @@ -12,7 +12,7 @@ - `alignment-review-schema`: 1 - `alignment-review-workflow`: 1 - `alignment-scorecard`: 1 -- `assimilation`: 1 +- `assimilation`: 2 - `benchmark-findings`: 1 - `benchmark-workspace`: 1 - `benefit-analysis`: 1 @@ -27,11 +27,11 @@ - `consumer-workplan-template`: 1 - `evaluation-pack`: 1 - `evaluation-question-set`: 1 -- `example`: 1 +- `example`: 2 - `extension-candidate-set`: 1 - `interface-card-expectation`: 1 - `kernel`: 2 -- `mapping`: 2 +- `mapping`: 3 - `mapping-expectation`: 1 - `model`: 12 - `model-extension`: 1 @@ -43,19 +43,20 @@ - `practice-pattern-scheme`: 1 - `profile`: 1 - `profile-alignment`: 1 -- `profile-artifact`: 13 -- `standard`: 3 +- `profile-artifact`: 14 +- `standard`: 4 - `visualization-example-set`: 1 ## Relationship Types - `access_evidenced_by`: 1 +- `applies_to`: 1 - `changes`: 1 - `compares`: 1 -- `conforms_to`: 25 +- `conforms_to`: 28 - `constrained_by`: 1 - `deploys`: 1 -- `derived_from`: 1 +- `derived_from`: 2 - `evaluates`: 2 - `evidenced_by`: 3 - `extends`: 1 @@ -63,20 +64,20 @@ - `has_access_under`: 1 - `illustrates`: 4 - `implements`: 2 -- `imports`: 14 -- `instantiates`: 13 +- `imports`: 16 +- `instantiates`: 14 - `introduces`: 5 - `isolated_by`: 2 -- `maps`: 37 +- `maps`: 40 - `member_of`: 1 - `owned_by`: 3 - `part_of`: 22 - `partitioned_for`: 2 - `proposes`: 7 -- `related_to`: 1 +- `related_to`: 2 - `represented_by`: 1 - `requires`: 13 - `separates`: 2 - `serves`: 2 - `stress_tests`: 6 -- `uses`: 125 +- `uses`: 126 diff --git a/infospace/views/repository-tree.md b/infospace/views/repository-tree.md index 68110f9..f634a19 100644 --- a/infospace/views/repository-tree.md +++ b/infospace/views/repository-tree.md @@ -2,7 +2,7 @@ # Repository Tree -File count: **191** +File count: **208** - `README.md` - `agent/README.md` @@ -30,9 +30,11 @@ File count: **191** - `agent/briefs/evaluation-user-engine-small-saas-alignment.md` - `agent/briefs/evaluation-user-engine.md` - `agent/briefs/example-consumer-purpose-portfolio.md` +- `agent/briefs/example-emission-cadence-qonto-assistant.md` - `agent/briefs/kernel-itc-core.md` - `agent/briefs/kernel-itc-kernel-map.md` - `agent/briefs/mapping-capability-anchors.md` +- `agent/briefs/mapping-emission-cadence-handover.md` - `agent/briefs/mapping-purpose-demand-governance-candidates.md` - `agent/briefs/model-access-control.md` - `agent/briefs/model-capability.md` @@ -48,6 +50,7 @@ File count: **191** - `agent/briefs/model-security.md` - `agent/briefs/model-task.md` - `agent/briefs/pattern-intent-scope-purposes.md` +- `agent/briefs/practice-pattern-agentic-drives-functional.md` - `agent/briefs/practice-pattern-interface-deprecation-strangler.md` - `agent/briefs/profile-small-saas.md` - `agent/briefs/review-kit-alignment-model-selection-guide.md` @@ -58,6 +61,7 @@ File count: **191** - `agent/briefs/review-kit-alignment.md` - `agent/briefs/scheme-practice-pattern.md` - `agent/briefs/standard-caring.md` +- `agent/briefs/standard-emission-cadence.md` - `agent/briefs/standard-repository-layout.md` - `agent/briefs/standard-tagging.md` - `agent/consumer-briefs/railiance-fabric.md` @@ -76,6 +80,15 @@ File count: **191** - `agent/templates/consumer-brief.template.md` - `artifacts/index.yaml` - `assimilation/README.md` +- `assimilation/emission-cadence/ASSIMILATION.md` +- `assimilation/emission-cadence/assimilation.yaml` +- `assimilation/emission-cadence/comparison-matrix.md` +- `assimilation/emission-cadence/extracted-concepts.yaml` +- `assimilation/emission-cadence/mappings.yaml` +- `assimilation/emission-cadence/open-questions.md` +- `assimilation/emission-cadence/proposed-changes.md` +- `assimilation/emission-cadence/source/EmissionCadenceDeclaration.md` +- `assimilation/emission-cadence/source-summary.md` - `assimilation/intake-and-assimilation-practice.md` - `assimilation/it-capability-canon/ASSIMILATION.md` - `assimilation/it-capability-canon/assimilation.yaml` @@ -145,6 +158,7 @@ File count: **191** - `patterns/README.md` - `patterns/intent-scope-purposes.md` - `profiles/README.md` +- `profiles/small-saas/artifacts/capability-requirements.yaml` - `profiles/small-saas/artifacts/control.namespace-per-tenant.yaml` - `profiles/small-saas/artifacts/dataset.subscription-ledger.yaml` - `profiles/small-saas/artifacts/deployment.production.yaml` @@ -169,6 +183,7 @@ File count: **191** - `schemas/capability-record.schema.yaml` - `schemas/capability.schema.yaml` - `schemas/concept.schema.yaml` +- `schemas/emission-cadence.schema.yaml` - `schemas/index.yaml` - `schemas/interface-card.schema.yaml` - `schemas/mapping.schema.yaml` @@ -183,6 +198,8 @@ File count: **191** - `standards/caring/benchmarks/kubernetes-rbac/caring-mapping.yaml` - `standards/caring/benchmarks/kubernetes-rbac/findings-and-canon-pressure.yaml` - `standards/caring/benchmarks/kubernetes-rbac/native-concepts.yaml` +- `standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md` +- `standards/emission-cadence/examples/qonto-assistant.yaml` - `standards/repository-layout/InfoTechCanonRepositoryLayoutStandard.md` - `standards/tagging/InfoTechCanonTaggingStandard.md` - `validation/README.md` diff --git a/intakes/intakes.md b/intakes/intakes.md index 6ab44a9..88f62e2 100644 --- a/intakes/intakes.md +++ b/intakes/intakes.md @@ -7,7 +7,7 @@ id: ITC-IN-0001 kind: intake title: 'Declaration requested: state this repository''s layer in INTENT.md (security layer model §11)' -status: open +status: closed origin: cross-repo origin_ref: net-kingdom security-layer-model_v0.4 §11 priority: low @@ -31,5 +31,12 @@ description: 'A conformance sweep on 2026-08-28 found this repository has no lay If the proposed layer is wrong for what this repository actually does, that is more useful to us than a label added to close a checkbox. Standard: net-kingdom/canon/standards/security-layer-model_v0.4.md.' created: '2026-08-28T21:01:51.123381Z' -updated: '2026-08-28T21:01:51.123381Z' +updated: '2026-09-04T03:10:00+02:00' +disposition: accepted +resolution: >- + INTENT.md now declares info-tech-canon as Taxonomy in this repository's own + voice and states the ownership boundary with NetKingdom-specific security + architecture and importing profiles. +resolved_by: codex +resolved_at: '2026-09-04T03:10:00+02:00' ``` diff --git a/pyproject.toml b/pyproject.toml index 84c4d74..78f4a62 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,8 @@ description = "Practical service surface for the InfoTechCanon infospace." requires-python = ">=3.12" dependencies = [ "PyYAML>=6", - "infospace-bench @ file:///home/worsch/infospace-bench", + "jsonschema>=4.10", + "infospace-bench==0.1.0", ] [project.scripts] diff --git a/src/info_tech_canon/bench.py b/src/info_tech_canon/bench.py index dfd0dc9..134a34a 100644 --- a/src/info_tech_canon/bench.py +++ b/src/info_tech_canon/bench.py @@ -9,9 +9,13 @@ from typing import Any BENCH_PACKAGE = "_info_tech_canon_infospace_bench" -BENCH_SOURCE_ROOT = ( - Path(__file__).resolve().parents[3] / "infospace-bench" / "src" / "infospace_bench" -) +_spec = importlib.util.find_spec("infospace_bench") +if _spec is None or not _spec.submodule_search_locations: + raise RuntimeError("Install infospace-bench==0.1.0 before using the canon service") +# The upstream __init__ imports optional database/engine integrations. Resolve +# its installed location without executing that initializer; load only the +# reference-data modules needed here. No sibling checkout is assumed. +BENCH_SOURCE_ROOT = Path(next(iter(_spec.submodule_search_locations))) def _ensure_package() -> ModuleType: diff --git a/src/info_tech_canon/capability.py b/src/info_tech_canon/capability.py index 1b67738..9fdb4dc 100644 --- a/src/info_tech_canon/capability.py +++ b/src/info_tech_canon/capability.py @@ -6,6 +6,7 @@ from pathlib import Path from typing import Any import yaml +from .paths import infospace_root REPO_ROOT = Path(__file__).resolve().parents[2] CATALOG_PATH = REPO_ROOT / "infospace" / "models" / "capability" / "capabilities.yaml" @@ -33,7 +34,7 @@ MATURITY_ORDER = tuple(f"D{i}" for i in range(8)) def load_catalog(path: Path | None = None) -> dict[str, Any]: - catalog_path = path or CATALOG_PATH + catalog_path = path or infospace_root() / "models/capability/capabilities.yaml" if not catalog_path.is_file(): raise CapabilityReviewError( "capability_catalog_missing", diff --git a/src/info_tech_canon/cli.py b/src/info_tech_canon/cli.py index 5858fcf..8cbc305 100644 --- a/src/info_tech_canon/cli.py +++ b/src/info_tech_canon/cli.py @@ -113,6 +113,21 @@ def build_parser() -> argparse.ArgumentParser: capability_review.add_argument("record") capability_review.set_defaults(handler=_capability_review) + emission = sub.add_parser("emission-review", help="Validate a source-owned YAML/JSON cadence declaration") + emission.add_argument("record") + emission.set_defaults(handler=_emission_review) + coverage = sub.add_parser("validation-coverage", help="List implemented checks and explicit limits") + coverage.set_defaults(handler=_coverage) + freshness = sub.add_parser("check-generated", help="Check projections without changing source files") + freshness.set_defaults(handler=_check_generated) + inventory = sub.add_parser("scope-inventory", help="Derive scope counts from the artifact registry") + inventory.set_defaults(handler=_scope_inventory) + bundle = sub.add_parser("export-emission-contract", help="Export a content-addressed contract tar") + bundle.add_argument("destination") + bundle.set_defaults(handler=_export_emission) + benchmark = sub.add_parser("benchmark-reads", help="Measure ten uncached inspect calls") + benchmark.set_defaults(handler=_benchmark_reads) + api = sub.add_parser("api", help="Run the read-only local API") api.add_argument("--host", default="127.0.0.1") api.add_argument("--port", type=int, default=8765) @@ -207,6 +222,41 @@ def _capability_review(args: argparse.Namespace) -> dict[str, Any]: return review_capability_record(args.record, _root(args)) +def _emission_review(args): + from .contracts import review_emission + return review_emission(args.record, _root(args)) + + +def _coverage(args): + from .contracts import coverage + from .service import load_context + return coverage(load_context(_root(args))) + + +def _check_generated(args): + from .maintenance import check_generated + from .service import load_context + return check_generated(load_context(_root(args))) + + +def _scope_inventory(args): + from .maintenance import scope_inventory + from .service import load_context + return dict(scope_inventory(load_context(_root(args))), ok=True) + + +def _export_emission(args): + from .maintenance import export_emission_bundle + from .paths import infospace_root + return export_emission_bundle(infospace_root(_root(args)), Path(args.destination)) + + +def _benchmark_reads(args): + from .maintenance import benchmark_reads + from .paths import infospace_root + return benchmark_reads(infospace_root(_root(args))) + + def _profile_inspect(args: argparse.Namespace) -> dict[str, Any]: return profile_inspect(args.profile, _root(args)) diff --git a/src/info_tech_canon/contracts.py b/src/info_tech_canon/contracts.py new file mode 100644 index 0000000..96e08ec --- /dev/null +++ b/src/info_tech_canon/contracts.py @@ -0,0 +1,82 @@ +"""Reusable declaration checks. Shape validity never proves operational truth.""" + +from collections import Counter +from pathlib import Path +from typing import Any + +from jsonschema import Draft202012Validator +from jsonschema.exceptions import SchemaError +import yaml + +from .paths import infospace_root + + +def schema_errors(instance: Any, schema: dict) -> list[dict]: + try: + Draft202012Validator.check_schema(schema) + except SchemaError as exc: + return [{"code": "invalid_schema", "message": exc.message}] + return [ + {"code": "schema_violation", "instance_path": "/".join(map(str, e.path)), + "message": e.message} + for e in sorted(Draft202012Validator(schema).iter_errors(instance), + key=lambda e: tuple(map(str, e.path))) + ] + + +def emission_errors(instance: Any, schema: dict) -> list[dict]: + errors = schema_errors(instance, schema) + if isinstance(instance, dict) and isinstance(instance.get("sources"), list): + counts = Counter(entry.get("source_id") for entry in instance["sources"] + if isinstance(entry, dict) and isinstance(entry.get("source_id"), str)) + duplicates = sorted(key for key, count in counts.items() if count > 1) + if duplicates: + errors.append({"code": "duplicate_emission_cadence_source_id", + "source_ids": duplicates}) + return errors + + +def review_emission(path: str | Path, root: Path | str | None = None) -> dict: + from .service import CanonServiceError + + try: + schema = yaml.safe_load((infospace_root(root) / "schemas/emission-cadence.schema.yaml").read_text()) + instance = yaml.safe_load(Path(path).read_text()) + except (OSError, yaml.YAMLError) as exc: + raise CanonServiceError("declaration_unreadable", str(exc)) from exc + errors = emission_errors(instance, schema) + return {"ok": not errors, "contract": "emission-cadence/0.1", "errors": errors, + "operational_truth_assessed": False} + + +def coverage(context: Any) -> dict: + """Report actual checks and their limits rather than claiming full conformance.""" + bindings = {"mapping": "mapping.schema.yaml"} + rows = [] + for artifact in sorted(context.infospace.artifacts, key=lambda a: a.id): + schema = bindings.get(artifact.kind) + rows.append({"id": artifact.id, "kind": artifact.kind, "schema": schema, + "checks": "schema-and-references" if schema else "structural-or-specialized"}) + return {"ok": True, "artifacts": rows, + "specialized": ["capability catalog/record", "practice pattern", + "emission cadence example", "consumer packs"], + "not_proven": ["ownership of concepts only in prose", "all Markdown links", + "consumer adoption", "cross-version interoperability", + "CARING effective access", "mapping rationale completeness"]} + + +def bound_artifact_errors(context: Any) -> list[dict]: + errors = [] + try: + schema = yaml.safe_load((context.infospace_root / "schemas/mapping.schema.yaml").read_text()) + except (OSError, yaml.YAMLError) as exc: + return [{"code": "mapping_schema_unreadable", "message": str(exc)}] + for artifact in context.infospace.artifacts: + if artifact.kind != "mapping": + continue + try: + data = yaml.safe_load((context.infospace_root / artifact.path).read_text()) + errors.extend(dict(error, artifact_id=artifact.id) for error in schema_errors(data, schema)) + except (OSError, yaml.YAMLError) as exc: + errors.append({"code": "mapping_unreadable", "artifact_id": artifact.id, "message": str(exc)}) + return errors diff --git a/src/info_tech_canon/maintenance.py b/src/info_tech_canon/maintenance.py new file mode 100644 index 0000000..e89d12c --- /dev/null +++ b/src/info_tech_canon/maintenance.py @@ -0,0 +1,108 @@ +"""Reproducible projections, portable contract exports, and read measurements.""" + +from collections import Counter +from dataclasses import replace +from datetime import datetime, timezone +import hashlib +import io +import json +from pathlib import Path +import shutil +import statistics +import subprocess +import tarfile +import tempfile +import time + +from . import generation + + +def scope_inventory(context) -> dict: + return {"artifact_count": len(context.infospace.artifacts), + "kinds": dict(sorted(Counter(a.kind for a in context.infospace.artifacts).items())), + "standards": sorted(a.id for a in context.infospace.artifacts if a.kind == "standard"), + "models": sorted(a.id for a in context.infospace.artifacts if a.kind == "model")} + + +def check_generated(context) -> dict: + """Render only into a disposable copy; never repair the source as a check.""" + with tempfile.TemporaryDirectory(prefix="canon-freshness-") as temporary: + target = Path(temporary) / "infospace" + shutil.copytree(context.infospace_root, target) + copied = replace(context, infospace_root=target) + files = {} + for render in (generation.generate_indexes, generation.generate_tree, + generation.generate_agent_briefs): + for item in render(copied)["files"]: + path = Path(item["path"]) + files[str(path.relative_to(target))] = path.read_bytes() + stale = [] + for relative, expected in files.items(): + original = context.infospace_root / relative + if not original.is_file() or original.read_bytes() != expected: + stale.append(relative) + return {"ok": not stale, "checked": len(files), "stale": sorted(stale)} + + +def source_evidence(root: Path) -> dict: + digest = hashlib.sha256() + # Include source and generated corpus; exclude reports to avoid self-hashing. + for path in sorted(root.rglob("*")): + if path.is_file() and "validation" not in path.relative_to(root).parts: + digest.update(str(path.relative_to(root)).encode() + b"\0" + path.read_bytes() + b"\0") + def git(*args): + try: + result = subprocess.run(["git", "-C", str(root.parent), *args], + capture_output=True, text=True, check=False) + except FileNotFoundError: + return None + return result.stdout.strip() if result.returncode == 0 else None + status = git("status", "--porcelain") + return {"generated_at": datetime.now(timezone.utc).isoformat(), + "revision": git("rev-parse", "HEAD"), + "dirty": bool(status) if status is not None else None, + "corpus_sha256": digest.hexdigest(), + "digest_scope": "all infospace files except validation reports"} + + +def export_emission_bundle(root: Path, destination: Path) -> dict: + """Content-addressed deterministic tar; a changed contract gets a new name.""" + paths = ["schemas/emission-cadence.schema.yaml", + "standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md", + "standards/emission-cadence/examples/qonto-assistant.yaml"] + files = {path: (root / path).read_bytes() for path in paths} + manifest = {"contract": "emission-cadence/0.1", "status": "draft", + "files": {name: hashlib.sha256(data).hexdigest() for name, data in files.items()}, + "semantic_checks": ["unique source_id in sources"], + "adoption_evidence": "Two independent source-owned implementations required; example does not count."} + files["manifest.json"] = (json.dumps(manifest, sort_keys=True, indent=2) + "\n").encode() + output = io.BytesIO() + with tarfile.open(fileobj=output, mode="w", format=tarfile.USTAR_FORMAT) as archive: + for name, data in sorted(files.items()): + info = tarfile.TarInfo(name) + info.size = len(data) + info.mode = 0o644 + archive.addfile(info, io.BytesIO(data)) + data = output.getvalue() + digest = hashlib.sha256(data).hexdigest() + destination.mkdir(parents=True, exist_ok=True) + path = destination / f"emission-cadence-0.1-{digest}.tar" + try: + with path.open("xb") as stream: + stream.write(data) + except FileExistsError: + if path.read_bytes() != data: + raise ValueError(f"Refusing to overwrite different bundle contents: {path}") + return {"ok": True, "path": str(path), "sha256": digest, "manifest": manifest} + + +def benchmark_reads(root: Path, runs: int = 10) -> dict: + from .service import inspect_canon + samples = [] + for _ in range(runs): + started = time.perf_counter() + inspect_canon(root) + samples.append((time.perf_counter() - started) * 1000) + return {"ok": True, "operation": "inspect", "runs": runs, + "median_ms": statistics.median(samples), "max_ms": max(samples), + "cache": "none; benchmark does not establish a production latency requirement"} diff --git a/src/info_tech_canon/paths.py b/src/info_tech_canon/paths.py new file mode 100644 index 0000000..257975d --- /dev/null +++ b/src/info_tech_canon/paths.py @@ -0,0 +1,15 @@ +"""Corpus location is independent of the installed Python package.""" + +import os +from pathlib import Path + + +def infospace_root(root: Path | str | None = None) -> Path: + if root: + return Path(root).resolve() + if os.environ.get("INFO_TECH_CANON_ROOT"): + return Path(os.environ["INFO_TECH_CANON_ROOT"]).resolve() + local = Path.cwd() / "infospace" + if local.is_dir(): + return local.resolve() + return Path(__file__).resolve().parents[2] / "infospace" diff --git a/src/info_tech_canon/service.py b/src/info_tech_canon/service.py index afc44e7..7741be7 100644 --- a/src/info_tech_canon/service.py +++ b/src/info_tech_canon/service.py @@ -19,10 +19,11 @@ from .bench import ( run_collection_checks, ) from .validation import structural_checks +from .paths import infospace_root REPO_ROOT = Path(__file__).resolve().parents[2] -DEFAULT_INFOSPACE_ROOT = REPO_ROOT / "infospace" +DEFAULT_INFOSPACE_ROOT = infospace_root() REVIEW_KIT_COMPONENTS = { "manifest": "agent/review-kit/review-kit.yaml", @@ -65,18 +66,18 @@ class CanonContext: def load_context(root: Path | str | None = None) -> CanonContext: - infospace_root = Path(root) if root else DEFAULT_INFOSPACE_ROOT + resolved_root = infospace_root(root) try: - infospace = load_infospace(infospace_root) + infospace = load_infospace(resolved_root) except Exception as exc: raise CanonServiceError( "infospace_load_failed", - f"Unable to load infospace at {infospace_root}", - {"root": str(infospace_root), "reason": str(exc)}, + f"Unable to load infospace at {resolved_root}", + {"root": str(resolved_root), "reason": str(exc)}, ) from exc return CanonContext( - repo_root=REPO_ROOT, - infospace_root=infospace_root, + repo_root=resolved_root.parent, + infospace_root=resolved_root, infospace=infospace, ) @@ -217,6 +218,11 @@ def validate_canon(root: Path | str | None = None) -> dict[str, Any]: structural = structural_checks(context) errors.extend(structural["errors"]) warnings.extend(structural["warnings"]) + from .contracts import bound_artifact_errors, coverage + errors.extend(bound_artifact_errors(context)) + ownership = generation.concept_ownership(context) + errors.extend(dict(item, code="concept_ownership_conflict") + for item in ownership["ownership_conflicts"]) return { "ok": not errors, @@ -224,6 +230,7 @@ def validate_canon(root: Path | str | None = None) -> dict[str, Any]: "warnings": warnings, "metrics": checks.metrics, "details": checks.details, + "coverage": coverage(context), } @@ -232,6 +239,8 @@ def write_validation_report( root: Path | str | None = None, ) -> dict[str, Any]: payload = validate_canon(root) + from .maintenance import source_evidence + payload["evidence"] = source_evidence(infospace_root(root)) path = Path(destination) path.parent.mkdir(parents=True, exist_ok=True) path.write_text(json.dumps(payload, indent=2, sort_keys=True) + "\n", encoding="utf-8") @@ -335,7 +344,7 @@ def review_capability_record( from .capability import CapabilityReviewError, review_path try: - return review_path(path) + return review_path(path, infospace_root(root) / "models/capability/capabilities.yaml") except CapabilityReviewError as exc: raise CanonServiceError(exc.code, exc.message) from exc diff --git a/src/info_tech_canon/validation.py b/src/info_tech_canon/validation.py index 745eddb..32c7e68 100644 --- a/src/info_tech_canon/validation.py +++ b/src/info_tech_canon/validation.py @@ -56,6 +56,7 @@ REQUIRED_SCHEMAS = ( "capability-record.schema.yaml", "attribute-value-type.schema.yaml", "practice-pattern.schema.yaml", + "emission-cadence.schema.yaml", ) RETRIEVAL_BRIEF_KINDS = { @@ -397,7 +398,8 @@ def structural_checks(context: Any) -> dict[str, list[dict[str, Any]]]: _check_required_top_level_files(context.repo_root, errors) _check_required_infospace_dirs(context.infospace_root, errors) _check_required_schemas(context.infospace_root, errors) - _check_capability_catalog(errors) + _check_capability_catalog(context.infospace_root, errors) + _check_emission_cadence_contract(context.infospace_root, errors) _check_canon_paths(context.repo_root, context.infospace_root, errors) _check_artifact_index(context.repo_root, context.infospace_root, errors) _check_practice_pattern_assets( @@ -599,11 +601,11 @@ def _check_required_infospace_dirs( ) -def _check_capability_catalog(errors: list[dict[str, Any]]) -> None: - from .capability import check_catalog_contract +def _check_capability_catalog(infospace_root: Path, errors: list[dict[str, Any]]) -> None: + from .capability import check_catalog_contract, load_catalog try: - errors.extend(check_catalog_contract()) + errors.extend(check_catalog_contract(load_catalog(infospace_root / "models/capability/capabilities.yaml"))) except Exception as exc: # pragma: no cover - catalog missing is structural errors.append( { @@ -613,6 +615,20 @@ def _check_capability_catalog(errors: list[dict[str, Any]]) -> None: ) +def _check_emission_cadence_contract( + infospace_root: Path, + errors: list[dict[str, Any]], +) -> None: + from .contracts import emission_errors + + schema = _read_yaml(infospace_root / "schemas/emission-cadence.schema.yaml", errors) + example_path = "standards/emission-cadence/examples/qonto-assistant.yaml" + example = _read_yaml(infospace_root / example_path, errors) + if isinstance(schema, dict): + errors.extend(dict(error, path=example_path) + for error in emission_errors(example, schema)) + + def _check_required_schemas( infospace_root: Path, errors: list[dict[str, Any]], diff --git a/tests/test_api.py b/tests/test_api.py index 42bc372..a2b1a1b 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -62,4 +62,4 @@ def test_api_route_validates_small_saas_profile() -> None: assert status == HTTPStatus.OK assert payload["ok"] is True - assert payload["details"]["artifact_count"] == 14 + assert payload["details"]["artifact_count"] == 15 diff --git a/tests/test_cli.py b/tests/test_cli.py index 308d685..e2e0db1 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"] == 71 + assert payload["infospace"]["artifact_count"] == 76 def test_cli_missing_profile_uses_structured_error(capsys) -> None: diff --git a/tests/test_emission_cadence.py b/tests/test_emission_cadence.py new file mode 100644 index 0000000..c795ffe --- /dev/null +++ b/tests/test_emission_cadence.py @@ -0,0 +1,59 @@ +from copy import deepcopy + +from jsonschema import Draft202012Validator +import yaml + +from info_tech_canon.service import DEFAULT_INFOSPACE_ROOT + + +SCHEMA_PATH = DEFAULT_INFOSPACE_ROOT / "schemas" / "emission-cadence.schema.yaml" +EXAMPLE_PATH = ( + DEFAULT_INFOSPACE_ROOT + / "standards" + / "emission-cadence" + / "examples" + / "qonto-assistant.yaml" +) + + +def _load_yaml(path): + return yaml.safe_load(path.read_text(encoding="utf-8")) + + +def _validator() -> Draft202012Validator: + schema = _load_yaml(SCHEMA_PATH) + Draft202012Validator.check_schema(schema) + return Draft202012Validator(schema) + + +def test_worked_example_validates() -> None: + assert list(_validator().iter_errors(_load_yaml(EXAMPLE_PATH))) == [] + + +def test_expected_rate_requires_one_window_representation() -> None: + payload = deepcopy(_load_yaml(EXAMPLE_PATH)) + rate = payload["sources"][0] + rate.pop("window") + + assert list(_validator().iter_errors(payload)) + + rate["window"] = "PT24H" + rate["window_seconds"] = 86400 + assert list(_validator().iter_errors(payload)) + + +def test_heartbeat_form_accepts_either_mechanism_but_not_neither() -> None: + payload = deepcopy(_load_yaml(EXAMPLE_PATH)) + intermittent = payload["sources"][1] + intermittent.pop("heartbeat") + assert list(_validator().iter_errors(payload)) == [] + + intermittent.pop("reconciliation") + assert list(_validator().iter_errors(payload)) + + +def test_profile_fields_must_be_namespaced_extensions() -> None: + payload = deepcopy(_load_yaml(EXAMPLE_PATH)) + payload["sources"][1]["evidence_class"] = "load-bearing" + + assert list(_validator().iter_errors(payload)) diff --git a/tests/test_maintenance.py b/tests/test_maintenance.py new file mode 100644 index 0000000..3247abe --- /dev/null +++ b/tests/test_maintenance.py @@ -0,0 +1,116 @@ +from copy import deepcopy +import hashlib +import json +from pathlib import Path +import shutil +import tarfile + +import pytest +import yaml + +from info_tech_canon.cli import main +from info_tech_canon.maintenance import check_generated, export_emission_bundle, source_evidence +from info_tech_canon.service import DEFAULT_INFOSPACE_ROOT, load_context, validate_canon + + +@pytest.fixture +def corpus(tmp_path): + root = tmp_path / "infospace" + shutil.copytree(DEFAULT_INFOSPACE_ROOT, root) + return root + + +def test_emission_cli_checks_versions_duplicates_and_bad_types(tmp_path, capsys): + source = DEFAULT_INFOSPACE_ROOT / "standards/emission-cadence/examples/qonto-assistant.yaml" + valid = yaml.safe_load(source.read_text()) + path = tmp_path / "declaration.yaml" + path.write_text(yaml.safe_dump(valid)) + assert main(["emission-review", str(path)]) == 0 + assert json.loads(capsys.readouterr().out)["operational_truth_assessed"] is False + for change in ("version", "duplicate", "bad_type"): + data = deepcopy(valid) + if change == "version": + data["schema_version"] = "99.0" + elif change == "duplicate": + data["sources"].append(deepcopy(data["sources"][0])) + else: + data["sources"][0]["source_id"] = ["unhashable"] + path.write_text(yaml.safe_dump(data)) + assert main(["emission-review", str(path)]) == 1 + payload = json.loads(capsys.readouterr().out) + assert payload["errors"] + if change == "duplicate": + assert payload["errors"][0]["code"] == "duplicate_emission_cadence_source_id" + + +def test_freshness_detects_missing_and_stale_without_repair(corpus): + from info_tech_canon import generation + context = load_context(corpus) + for render in (generation.generate_indexes, generation.generate_tree, generation.generate_agent_briefs): + render(context) + assert check_generated(context)["ok"] + stale = corpus / "views/by-concept.md" + stale.write_text("stale\n") + missing = corpus / "agent/retrieval-index.json" + missing.unlink() + result = check_generated(context) + assert not result["ok"] + assert "views/by-concept.md" in result["stale"] + assert "agent/retrieval-index.json" in result["stale"] + assert stale.read_text() == "stale\n" + assert not missing.exists() + + +def test_bundle_is_reproducible_and_refuses_corruption(tmp_path): + first = export_emission_bundle(DEFAULT_INFOSPACE_ROOT, tmp_path) + second = export_emission_bundle(DEFAULT_INFOSPACE_ROOT, tmp_path) + assert first == second + path = Path(first["path"]) + assert hashlib.sha256(path.read_bytes()).hexdigest() == first["sha256"] + with tarfile.open(path) as archive: + for name, digest in first["manifest"]["files"].items(): + assert hashlib.sha256(archive.extractfile(name).read()).hexdigest() == digest + path.write_bytes(b"corrupted") + with pytest.raises(ValueError, match="Refusing"): + export_emission_bundle(DEFAULT_INFOSPACE_ROOT, tmp_path) + + +def test_mapping_schema_and_explicit_ownership_are_enforced(corpus): + from info_tech_canon.contracts import bound_artifact_errors + mapping = corpus / "mappings/capability-anchors.yaml" + data = yaml.safe_load(mapping.read_text()) + del data["target"] + mapping.write_text(yaml.safe_dump(data)) + assert bound_artifact_errors(load_context(corpus))[0]["code"] == "schema_violation" + pattern = corpus / "patterns/AgenticDrivesFunctional.md" + text = pattern.read_text() + # Reuse another artifact's title as an owned concept to create a real conflict. + owner = next(a.title for a in load_context(corpus).infospace.artifacts if a.kind == "kernel") + text = text.replace("owned_concepts:", f"owned_concepts:\n - {owner}") + pattern.write_text(text) + assert any(e["code"] == "concept_ownership_conflict" for e in validate_canon(corpus)["errors"]) + + +def test_evidence_digest_tracks_content_but_excludes_reports(corpus): + before = source_evidence(corpus) + (corpus / "validation/latest.json").write_text("{}") + assert source_evidence(corpus)["corpus_sha256"] == before["corpus_sha256"] + (corpus / "mappings/README.md").write_text("changed") + assert source_evidence(corpus)["corpus_sha256"] != before["corpus_sha256"] + assert before["generated_at"] + + +def test_explicit_root_controls_capability_catalog(corpus, tmp_path): + from info_tech_canon.service import review_capability_record, CanonServiceError + (corpus / "models/capability/capabilities.yaml").unlink() + record = tmp_path / "record.json" + record.write_text('{"record_id":"example", "requires":[], "provisions":[]}') + with pytest.raises(CanonServiceError, match="catalog"): + review_capability_record(record, corpus) + + +def test_missing_mapping_schema_is_a_validation_finding(corpus): + (corpus / "schemas/mapping.schema.yaml").unlink() + payload = validate_canon(corpus) + assert not payload["ok"] + assert any(e["code"] == "mapping_schema_unreadable" for e in payload["errors"]) diff --git a/tests/test_service.py b/tests/test_service.py index 11cbe66..17c6a99 100644 --- a/tests/test_service.py +++ b/tests/test_service.py @@ -25,11 +25,11 @@ def test_inspect_canon_counts_artifact_kinds() -> None: assert payload["ok"] is True assert payload["infospace"]["slug"] == "canon" - assert payload["infospace"]["artifact_count"] == 71 + assert payload["infospace"]["artifact_count"] == 76 assert payload["infospace"]["kinds"] == { "access-descriptor-set": 1, "alignment-review-kit": 1, - "assimilation": 1, + "assimilation": 2, "alignment-review-schema": 1, "alignment-review-workflow": 1, "alignment-scorecard": 1, @@ -47,11 +47,11 @@ def test_inspect_canon_counts_artifact_kinds() -> None: "consumer-workplan-template": 1, "evaluation-pack": 1, "evaluation-question-set": 1, - "example": 1, + "example": 2, "extension-candidate-set": 1, "interface-card-expectation": 1, "kernel": 2, - "mapping": 2, + "mapping": 3, "mapping-expectation": 1, "model": 12, "model-extension": 1, @@ -63,15 +63,15 @@ def test_inspect_canon_counts_artifact_kinds() -> None: "practice-pattern-scheme": 1, "profile-alignment": 1, "profile": 1, - "profile-artifact": 13, - "standard": 3, + "profile-artifact": 14, + "standard": 4, "visualization-example-set": 1, } def test_model_and_standard_lists_are_filtered() -> None: assert list_models()["count"] == 12 - assert list_standards()["count"] == 3 + assert list_standards()["count"] == 4 def test_review_kit_exports_workflow_and_template() -> None: @@ -99,14 +99,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"] == 71 + assert payload["details"]["artifact_count"] == 76 def test_graph_exports_relationship_summary() -> None: payload = artifact_graph() assert payload["ok"] is True - assert payload["graph"]["node_count"] == 71 + assert payload["graph"]["node_count"] == 76 assert payload["graph"]["edge_count"] > 15 @@ -180,6 +180,21 @@ def test_small_saas_profile_graph_exports_slice() -> None: assert "small-saas/service/billing-portal" in payload["graph"]["nodes"] +def test_small_saas_capability_requirements_meet_maturity_floors() -> None: + path = ( + DEFAULT_INFOSPACE_ROOT + / "profiles" + / "small-saas" + / "artifacts" + / "capability-requirements.yaml" + ) + payload = review_capability_record(path) + + assert payload["ok"] is True + assert {item["status"] for item in payload["requirements"]} == {"met"} + assert len(payload["provisions"]) == 4 + + def test_generators_write_expected_assets(tmp_path) -> None: root = tmp_path / "infospace" shutil.copytree(DEFAULT_INFOSPACE_ROOT, root) @@ -214,6 +229,7 @@ def test_generators_write_expected_assets(tmp_path) -> None: root / "agent" / "briefs" / "benchmark-caring-kubernetes-rbac.md" ).is_file() assert (root / "agent" / "briefs" / "review-kit-alignment.md").is_file() + assert (root / "agent" / "briefs" / "standard-emission-cadence.md").is_file() assert ( root / "agent" / "templates" / "consumer-alignment-workplan.template.md" ).is_file() diff --git a/workplans/INFO-WP-0019-conformance-and-maintenance.md b/workplans/INFO-WP-0019-conformance-and-maintenance.md new file mode 100644 index 0000000..68c7783 --- /dev/null +++ b/workplans/INFO-WP-0019-conformance-and-maintenance.md @@ -0,0 +1,132 @@ +--- +id: INFO-WP-0019 +type: workplan +title: "Conformance, reproducible consumption, and maintenance" +domain: infotech +repo: info-tech-canon +status: blocked +owner: codex +topic_slug: canon-optimization +created: "2026-09-05" +updated: "2026-09-05" +state_hub_workstream_id: "b29261ba-c1e4-5533-8185-ab2d5b433685" +--- + +# Conformance, reproducible consumption, and maintenance + +Implements the optimization recommendations in +`history/2026-09-05_002437+0200-scope-against-intent.md`. +Reviewed against the current working tree; authorized by the operator on +2026-09-05. Uses the AGENTS.md INFO-WP file convention. + +## Reusable conformance and coverage + +```task +id: INFO-WP-0019-T01 +status: done +priority: high +state_hub_task_id: "abc0ed79-009f-5254-a2bf-4dcedd1925e9" +``` + +Extract shared schema validation and emission-cadence semantics into contract +modules. Expose arbitrary declaration validation and explicit coverage through +the CLI. Reject unsupported versions, malformed declarations, and duplicate +source IDs. Enforce explicit ownership conflicts. Preserve all existing tests. + +## Reproducible contract bundle and adoption gate + +```task +id: INFO-WP-0019-T02 +status: done +priority: high +state_hub_task_id: "1ec85dc5-5775-50b6-8066-ac839fd252c9" +``` + +Provide deterministic, content-addressed export of the cadence contract, +schema, and example; refuse overwriting different contents. Define owner-authored +adoption evidence requirements and keep draft promotion contingent on two +independent implementations. Local examples must not count as adoption evidence. + +## Freshness and evidence + +```task +id: INFO-WP-0019-T03 +status: done +priority: high +state_hub_task_id: "e4171772-50bf-58f6-9c87-8eddbef1caa5" +``` + +Add non-mutating generated-asset checks, reproducible scope inventory, and +revision/time/source-digest evidence on validation reports. Refresh work-record +projections via State Hub. Check stale and missing generated assets with tests. + +## Portable consumption + +```task +id: INFO-WP-0019-T04 +status: done +priority: medium +state_hub_task_id: "e258d84d-d969-5032-baef-ae1060843319" +``` + +Remove hardcoded workstation dependency paths. Resolve an installed bench +distribution and an explicit external corpus root. Prove wheel installation +and commands from an unrelated directory. Document upstream packaging limits +without changing sibling repositories. + +## Measure performance and verify implementation + +```task +id: INFO-WP-0019-T05 +status: done +priority: medium +state_hub_task_id: "09a585e8-4c67-5143-bc3a-ae47623547ea" +``` + +Measure repeated reads before deciding whether caching is justified. Run all +tests, canon/profile validation, generated freshness checks, and the clean +installation proof. Update SCOPE/README and record evidence. Avoid speculative +models or runtime expansion. + +## Independent consumer adoption + +```task +id: INFO-WP-0019-T06 +status: wait +priority: high +state_hub_task_id: "b33aeb8c-ba7c-5094-9902-85565c1e721b" +``` + +Requires two source owners to provide independently implemented declarations +and consumer results pinned to the contract digest. This repo can validate +submitted evidence but cannot manufacture source ownership or deployed proof. +No external messages or consumer changes are authorized by this workplan. +Promotion remains blocked until that evidence arrives. + +## Implementation notes + +T01–T04 implemented in `contracts.py`, `maintenance.py`, `paths.py`, CLI, +service integration, and `docs/canon-consumption.md`. Explicit mapping schema +bindings and ownership checks improve coverage without claiming exhaustive +semantic validation. The normal bench initializer imports unrelated database +integrations; installed-module discovery retains the narrow adapter. Clean +wheel consumption uses the documented explicit-dependency installation until +the upstream owner separates reference-data packaging. + +Registration: State Hub workstream `b29261ba-c1e4-5533-8185-ab2d5b433685`. +The consistency tool reports an INFO-WP/ITC-WP prefix advisory: this plan follows +the explicit INFO-WP convention in AGENTS.md; existing plans and the registry +use ITC-WP. This naming inconsistency does not prevent registration. + +## Verification — 2026-09-05 + +`make check`: 36 tests passed (22.42 seconds); all 77 generated assets current; +canon validation passed (76 artifacts, 315 relationships); Small-SaaS passed +(15 payloads). Installed-wheel inspect, validation, and emission review passed +from an unrelated directory with PYTHONPATH unset and a copied corpus. +Ten uncached inspections measured median 788.05 ms, maximum 1241.92 ms; +caching remains deferred pending a workload/latency requirement. + +Local implementation T01–T05 is complete. Overall status is blocked only on +T06's independent owner evidence. See +`history/2026-09-05_optimization-implementation.md` for artifacts and limitations. diff --git a/workplans/ITC-WP-0014-capability-model-consolidation.md b/workplans/ITC-WP-0014-capability-model-consolidation.md index 813caab..91c6871 100644 --- a/workplans/ITC-WP-0014-capability-model-consolidation.md +++ b/workplans/ITC-WP-0014-capability-model-consolidation.md @@ -8,7 +8,7 @@ repo: info-tech-canon status: finished priority: medium created: "2026-08-14" -updated: "2026-08-15" +updated: "2026-09-04" depends_on_workplans: - ITC-WP-0003 - ITC-WP-0006 @@ -102,7 +102,7 @@ entry per source/target pair, registered as `mapping/capability-anchors`. ```task id: ITC-WP-0014-T04 -status: todo +status: done priority: medium depends_on: [T02] state_hub_task_id: "a4621991-fea8-5f74-b0fd-e5e606ea32a7" @@ -113,6 +113,12 @@ small-saas profile (coordinate with ITC-WP-0004). Useful in-repo illustration. **No longer the promotion gate** — §10.3 now accepts a consumer record that validates against the live catalog (T11). +**Done 2026-09-04:** Added +`profiles/small-saas/artifacts/capability-requirements.yaml`, covering +authorization, transactional persistence, API exposure, and observability. +All four requirements have profile-owned provisions and evidence and meet their +declared maturity floors through the live capability-review surface. + ### T05 — Landscape and kernel-map revision ```task diff --git a/workplans/ITC-WP-0018-emission-cadence-contract.md b/workplans/ITC-WP-0018-emission-cadence-contract.md new file mode 100644 index 0000000..f0d7ef9 --- /dev/null +++ b/workplans/ITC-WP-0018-emission-cadence-contract.md @@ -0,0 +1,80 @@ +--- +id: ITC-WP-0018 +type: workplan +title: "EmissionCadenceDeclaration semantic contract" +domain: infotech +repo: info-tech-canon +status: finished +owner: codex +topic_slug: emission-cadence +priority: high +created: "2026-09-04" +updated: "2026-09-04" +spec_refs: + - infospace/assimilation/emission-cadence/ASSIMILATION.md + - infospace/standards/emission-cadence/InfoTechCanonEmissionCadenceStandard.md + - infospace/schemas/emission-cadence.schema.yaml +state_hub_workstream_id: "78f879cf-f097-5ee5-8f6a-15e34209822d" +--- + +# ITC-WP-0018 — EmissionCadenceDeclaration Semantic Contract + +## Goal + +Adopt the King’s Guard handover as the ecosystem-wide, versioned semantic +contract for declaring expected stream emission, while leaving NetKingdom +security obligations in the importing NetKingdom profile. + +## T01 — Review ownership and assimilate the handover + +```task +id: ITC-WP-0018-T01 +status: done +priority: high +state_hub_task_id: "b6cba288-1edf-557c-b692-cd24058fb9d6" +``` + +Preserve the handed-over draft, compare its concepts with the existing +Observability and Governance models, and record the authorized `adapt` +disposition from `GH-DEC-2026-004`. + +## T02 — Publish the generic contract and validation schema + +```task +id: ITC-WP-0018-T02 +status: done +priority: high +state_hub_task_id: "cca8a6e6-03fe-50a1-9f0d-84cbc8b92cac" +``` + +Publish the generic forms, fields, validation semantics, compatibility rules, +and a non-authoritative worked example. Do not encode the NetKingdom rule that +rare load-bearing classes require heartbeat plus reconciliation. + +## T03 — Register, retrieve, validate, and announce + +```task +id: ITC-WP-0018-T03 +status: done +priority: high +state_hub_task_id: "9df9fd50-26e0-531e-a0a2-9f92eed5f2b3" +``` + +Register the artifact and schema, regenerate retrieval assets, run the full +validation and test suite, and notify the handing-over and deciding repositories. + +## Acceptance + +- InfoTechCanon is the sole owner of `EmissionCadenceDeclaration` semantics. +- The schema validates both generic forms and rejects incomplete form payloads. +- NetKingdom-specific evidence classes and MUST/SHOULD policy are not defined here. +- The artifact is discoverable through the CLI/JSON/API retrieval surfaces. +- Generated assets, validation, tests, work records, and State Hub agree. + +## Result + +Completed 2026-09-04 in canon 0.7.0. The handed-over draft was adapted into the +generic standard and schema, the security-profile boundary was preserved, the +worked example and structural validation were published, and all retrieval +assets were regenerated. `make validate` reports 0 errors and 0 warnings; +`make test` passes 29 tests. diff --git a/workplans/index.yaml b/workplans/index.yaml index d6fb052..cb15ff3 100644 --- a/workplans/index.yaml +++ b/workplans/index.yaml @@ -2,7 +2,7 @@ repository: info-tech-canon type: workplan-registry status: active created: "2026-05-23" -updated: "2026-06-08" +updated: "2026-09-05" implementation_decisions: infospace_root: infospace/ @@ -16,6 +16,17 @@ implementation_decisions: consumer_workplans_live_in_consumer_repos: true workplans: + - id: INFO-WP-0019 + title: Conformance, reproducible consumption, and maintenance + status: blocked + priority: high + path: workplans/INFO-WP-0019-conformance-and-maintenance.md + depends_on: [ITC-WP-0018] + produces: + - reusable declaration validation and coverage + - deterministic contract bundles + - freshness checks and portable consumption + - id: ITC-WP-0001 title: Infospace Scaffold And Seed Placement status: finished @@ -231,3 +242,35 @@ workplans: - models/governance/evidence-basis.yaml - EvidenceBasis section in ITC-GOV - CAP-R10 on CapabilityConsumption + + - id: ITC-WP-0016 + title: PracticePattern language and InterfaceDeprecationStrangler + status: finished + priority: high + path: workplans/ITC-WP-0016-practice-pattern-language.md + depends_on: [] + produces: + - PracticePattern scheme + - InterfaceDeprecationStrangler pattern + + - id: ITC-WP-0017 + title: AgenticDrivesFunctional PracticePattern + status: finished + priority: medium + path: workplans/ITC-WP-0017-agentic-drives-functional.md + depends_on: + - ITC-WP-0016 + produces: + - AgenticDrivesFunctional pattern + + - id: ITC-WP-0018 + title: EmissionCadenceDeclaration semantic contract + status: finished + priority: high + path: workplans/ITC-WP-0018-emission-cadence-contract.md + depends_on: [] + produces: + - Emission Cadence Standard + - EmissionCadenceDeclaration schema + - qonto-assistant worked example + - emission-cadence assimilation record