diff --git a/calm/draft/1083/README.md b/calm/draft/1083/README.md deleted file mode 100644 index 424cc966b..000000000 --- a/calm/draft/1083/README.md +++ /dev/null @@ -1,110 +0,0 @@ -# User Extensible Interfaces for CALM - -## Overview - -This draft proposal introduces a modular interface model to CALM, allowing interfaces to be defined external to the core schema. This enables domain-specific interfaces to be created without modifying the CALM meta-schema. - -## Motivation - -Interfaces in CALM were previously statically defined within the CALM meta-schema (`interface.json`), creating a tight coupling between the core schema and specific interface definitions. This design limited extensibility and required core schema changes to introduce new types of interfaces. - -By introducing a modular interface model, similar to `control-requirement`, we enable: - -1. Domain-specific interfaces (e.g., Kafka, MQTT, gRPC) to be defined without modifying the CALM core schema -2. Independent versioning of interface types -3. Validation of inline interface configurations against extensible schemas -4. Reduced maintenance burden on the CALM core schema - -## Schema Changes - -### interface.json - -Added a new `interface-definition` structure that includes: - -- `unique-id`: A unique identifier for the interface instance -- `interface-definition-url`: A URI pointing to the external JSON Schema that defines the interface-type -- `configuration`: An inline object that conforms to the external schema - -### core.json - -Modified the `interfaces` array in node properties to use `anyOf` allowing either: - -- Legacy `interface-type` definitions (backward compatibility) -- New `interface-definition` references to external schemas - -## Example Architecture - -The following C4 diagram represents the example architecture defined in `example-architecture.json`: - -```mermaid -C4Component - title Component diagram for Trading Platform - - Person(trader, "Trader", "Uses the trading platform") - - System_Boundary(trading_platform, "Trading Platform") { - Component(web_frontend, "Web Frontend", "Web Service", "Web interface for the trading platform", "$hostname=trading.example.com") - Component(trading_api, "Trading API Service", "gRPC Service", "Provides gRPC APIs for trading operations", "$service=TradeService, $host=api.internal.local, $port=8080") - Component(kafka_service, "Kafka Event Service", "Service", "Handles event streaming for the application", "$topic=trade-events, $host=kafka.internal.local, $port=9092") - } - - Rel(trader, web_frontend, "Uses") - Rel(web_frontend, trading_api, "Calls API", "HTTPS") - Rel(trading_api, kafka_service, "Publishes events", "TCP") -``` - -This diagram shows the three components defined in our example and their relationships, including interface details. - -## External Interface Schemas - -Introduced two example interface schemas in the prototype folder: - -1. **Kafka Topic Interface** - Defines properties for Kafka topic connections -2. **gRPC Service Interface** - Defines properties for gRPC service endpoints - -## Migration Guide - -### For Existing CALM Models - -Existing CALM models using the legacy `interface-type` references will continue to work without changes. The schema changes are backward compatible. - -### For New CALM Models - -New interfaces can be defined in one of two ways: - -1. **Legacy Method** - Continue using the predefined interface types - -```json -{ - "unique-id": "int-http-001", - "hostname": "trading.example.com" -} -``` - -2. **New Method** - Reference external interface schemas - -```json -{ - "unique-id": "int-kafka-001", - "interface-definition-url": "https://calm.finos.org/draft/1083/interfaces/kafka-topic", - "configuration": { - "topic": "trade-events", - "host": "kafka.internal.local", - "port": 9092 - } -} -``` - -## Tooling Considerations - -Tools that process CALM schemas need to be updated to: - -1. Resolve and fetch external interface schemas referenced by `interface-definition-url` -2. Validate the `configuration` object against the resolved schema -3. Support both legacy and new interface formats - -## Future Considerations - -- A registry of commonly used interface schemas could be established -- Tooling to generate interface schemas from other formats (e.g., OpenAPI, Protocol Buffers) -- Future CALM versions may deprecate the legacy `interface-type` in favor of `interface-definition` \ No newline at end of file diff --git a/calm/draft/1083/meta/calm.json b/calm/draft/1083/meta/calm.json deleted file mode 100644 index b6ddf2048..000000000 --- a/calm/draft/1083/meta/calm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1083/meta/calm.json", - - "$vocabulary": { - "https://json-schema.org/draft/2020-12/vocab/core": true, - "https://json-schema.org/draft/2020-12/vocab/applicator": true, - "https://json-schema.org/draft/2020-12/vocab/validation": true, - "https://json-schema.org/draft/2020-12/vocab/meta-data": true, - "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, - "https://json-schema.org/draft/2020-12/vocab/content": true, - "https://calm.finos.org/draft/1083/meta/core.json": true - }, - "$dynamicAnchor": "meta", - - "title": "Common Architecture Language Model (CALM) Schema", - "allOf": [ - {"$ref": "https://json-schema.org/draft/2020-12/schema"}, - {"$ref": "https://calm.finos.org/draft/1083/meta/core.json"} - ] -} \ No newline at end of file diff --git a/calm/draft/1083/meta/core.json b/calm/draft/1083/meta/core.json deleted file mode 100644 index 1a095118e..000000000 --- a/calm/draft/1083/meta/core.json +++ /dev/null @@ -1,329 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1083/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "flows": { - "type": "array", - "items": { - "$ref": "flow.json#/defs/flow" - } - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "details": { - "type": "object", - "properties": { - "detailed-architecture": { - "type": "string" - }, - "required-pattern": { - "type": "string" - } - }, - "additionalProperties": false - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "oneOf": [ - { "$ref": "interface.json#/defs/interface-definition" }, - { "$ref": "interface.json#/defs/interface-type" } - ] - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - }, - "options": { - "$ref": "#/defs/option-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - }, - { - "required": [ - "options" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "ecosystem", - "system", - "service", - "database", - "network", - "ldap", - "webclient", - "data-asset" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "option-type": { - "type": "array", - "items": { - "$ref": "#/defs/decision" - } - }, - "decision": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "nodes": { - "type": "array", - "items": { - "type": "string" - } - }, - "relationships": { - "type": "array", - "items": { - "type": "string" - } - }, - "controls": { - "type": "array", - "items": { - "type": "string" - } - }, - "metadata": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "description", - "nodes", - "relationships" - ] - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} \ No newline at end of file diff --git a/calm/draft/1083/meta/interface.json b/calm/draft/1083/meta/interface.json deleted file mode 100644 index 804a09c56..000000000 --- a/calm/draft/1083/meta/interface.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1083/meta/interface.json", - "title": "Common Architecture Language Model Interfaces", - "defs": { - "interface-definition": { - "type": "object", - "description": "A modular interface definition referencing an external schema", - "properties": { - "unique-id": { - "type": "string", - "description": "Unique identifier for this interface instance" - }, - "interface-definition-url": { - "type": "string", - "format": "uri", - "description": "URI of the external schema this interface configuration conforms to" - }, - "configuration": { - "type": "object", - "description": "Inline configuration conforming to the external interface schema" - } - }, - "required": ["unique-id", "interface-definition-url", "configuration"], - "additionalProperties": false - }, - "interface-type": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - } - }, - "required": [ - "unique-id" - ] - }, - "node-interface": { - "type": "object", - "properties": { - "node": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "node" - ] - } - } -} \ No newline at end of file diff --git a/calm/draft/1083/prototype/example-architecture.json b/calm/draft/1083/prototype/example-architecture.json deleted file mode 100644 index 2baa3a131..000000000 --- a/calm/draft/1083/prototype/example-architecture.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "$schema": "https://calm.finos.org/draft/1083/meta/calm.json", - "nodes": [ - { - "unique-id": "kafka-service", - "node-type": "service", - "name": "Kafka Event Service", - "description": "Handles event streaming for the application", - "interfaces": [ - { - "unique-id": "int-kafka-001", - "interface-definition-url": "https://calm.finos.org/draft/1083/interfaces/kafka-topic", - "configuration": { - "topic": "trade-events", - "host": "kafka.internal.local", - "port": 9092 - } - } - ] - }, - { - "unique-id": "grpc-service", - "node-type": "service", - "name": "Trading API Service", - "description": "Provides gRPC APIs for trading operations", - "interfaces": [ - { - "unique-id": "int-grpc-001", - "interface-definition-url": "https://calm.finos.org/draft/1083/interfaces/grpc-service", - "configuration": { - "service-name": "TradeService", - "host": "api.internal.local", - "port": 8080, - "proto-file": "trading.proto", - "methods": [ - { - "name": "SubmitTrade", - "input-type": "TradeRequest", - "output-type": "TradeResponse" - }, - { - "name": "GetTradeStatus", - "input-type": "TradeStatusRequest", - "output-type": "TradeStatusResponse" - } - ] - } - } - ] - }, - { - "unique-id": "web-service", - "node-type": "service", - "name": "Web Frontend", - "description": "Web interface for the trading platform", - "interfaces": [ - { - "unique-id": "int-http-001", - "hostname": "trading.example.com" - } - ] - } - ], - "relationships": [ - { - "unique-id": "web-to-grpc", - "description": "Web frontend calls trading API", - "relationship-type": { - "connects": { - "source": { - "node": "web-service" - }, - "destination": { - "node": "grpc-service" - } - } - }, - "protocol": "HTTPS" - }, - { - "unique-id": "grpc-to-kafka", - "description": "Trading API publishes events to Kafka", - "relationship-type": { - "connects": { - "source": { - "node": "grpc-service" - }, - "destination": { - "node": "kafka-service" - } - } - }, - "protocol": "TCP" - } - ] -} \ No newline at end of file diff --git a/calm/draft/1083/prototype/interfaces/grpc-service.json b/calm/draft/1083/prototype/interfaces/grpc-service.json deleted file mode 100644 index 7746b5441..000000000 --- a/calm/draft/1083/prototype/interfaces/grpc-service.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1083/interfaces/grpc-service", - "title": "gRPC Service Interface", - "type": "object", - "properties": { - "service-name": { - "type": "string", - "description": "The gRPC service name" - }, - "host": { - "type": "string", - "format": "hostname", - "description": "The hostname or IP of the gRPC server" - }, - "port": { - "type": "integer", - "description": "The port on which the gRPC service is exposed", - "minimum": 1, - "maximum": 65535 - }, - "proto-file": { - "type": "string", - "description": "Path or URI to the Protocol Buffer definition file" - }, - "methods": { - "type": "array", - "description": "List of exposed gRPC methods", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Method name" - }, - "input-type": { - "type": "string", - "description": "Input message type" - }, - "output-type": { - "type": "string", - "description": "Output message type" - }, - "streaming": { - "type": "boolean", - "description": "Whether the method is streaming", - "default": false - } - }, - "required": ["name"] - } - } - }, - "required": ["service-name", "host", "port"] -} \ No newline at end of file diff --git a/calm/draft/1083/prototype/interfaces/kafka-topic.json b/calm/draft/1083/prototype/interfaces/kafka-topic.json deleted file mode 100644 index d011c7499..000000000 --- a/calm/draft/1083/prototype/interfaces/kafka-topic.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1083/interfaces/kafka-topic", - "title": "Kafka Topic Interface", - "type": "object", - "properties": { - "topic": { - "type": "string", - "description": "The name of the Kafka topic" - }, - "host": { - "type": "string", - "format": "hostname", - "description": "The Kafka broker hostname or IP" - }, - "port": { - "type": "integer", - "description": "The port on which the Kafka broker is exposed", - "minimum": 1, - "maximum": 65535 - } - }, - "required": ["topic", "host", "port"] -} \ No newline at end of file diff --git a/calm/draft/1177/README.md b/calm/draft/1177/README.md deleted file mode 100644 index 2d536585c..000000000 --- a/calm/draft/1177/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# CALM Schema Change - Issue #1177 - -## Remove authentication property on relationship in favor of authentication being modelled as a control requirement - -This schema change implements [Issue #1177](https://github.com/finos/architecture-as-code/issues/1177). - -### Changes Made - -1. Removed the `authentication` property from the relationship schema in `core.json` -2. Removed the `authentication` enum definition from the schema as it's no longer referenced -3. Authentication should now be modeled as a control requirement, as demonstrated in the prototype example - -### Rationale - -As described in the issue, this change removes the authentication property from relationships in favor of authentication being defined as a control. This allows various properties related to authentication to be defined more flexibly and thoroughly than would be possible with a simple key-value pair. - -Defining authentication as a control also drives its use in compliance as authentication is a common area that is looked at when reviewing systems. - -### Backward Compatibility - -Considering CALM allows the inclusion of additional properties on both nodes and relationships, existing CALM documents with an authentication property on the relationship will still remain valid. Authentication still remains a property that can be added. - -- Existing CALM documents remain valid -- No breaking changes -- Migration path: Use control requirements to define authentication instead - -### Example - -The [prototype example](./prototype/authentication-as-control.json) demonstrates how to model authentication as a control requirement instead of using the deprecated `authentication` property on relationships. - -#### Before (using the authentication property): - -```json -{ - "relationships": [ - { - "unique-id": "system-a-to-system-b", - "description": "System A connects to System B", - "relationship-type": { - "connects": { - "source": { "node": "system-a" }, - "destination": { "node": "system-b" } - } - }, - "protocol": "HTTPS", - "authentication": "OAuth2" - } - ] -} -``` - -#### After (using controls): - -```json -{ - "relationships": [ - { - "unique-id": "system-a-to-system-b", - "description": "System A connects to System B", - "relationship-type": { - "connects": { - "source": { "node": "system-a" }, - "destination": { "node": "system-b" } - } - }, - "protocol": "HTTPS", - "controls": { - "authentication": { - "description": "Authentication between System A and System B", - "requirements": [ - { - "control-requirement-url": "https://calm.finos.org/draft/1177/prototype/authentication-control-requirement.json", - "control-config-url": "https://calm.finos.org/draft/1177/prototype/authentication-control-config.json" - } - ] - } - } - } - ] -} -``` - -This example includes: - -1. [authentication-control-requirement.json](./prototype/authentication-control-requirement.json) - A schema defining the structure and requirements for authentication controls -2. [authentication-control-config.json](./prototype/authentication-control-config.json) - An example configuration that implements the authentication control requirement - -By modeling authentication as a control rather than a simple property, users can define more detailed and flexible authentication configurations, which is particularly important for compliance and security reviews. diff --git a/calm/draft/1177/meta/core.json b/calm/draft/1177/meta/core.json deleted file mode 100644 index f161fe7b6..000000000 --- a/calm/draft/1177/meta/core.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1177/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "flows": { - "type": "array", - "items": { - "$ref": "flow.json#/defs/flow" - } - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "details": { - "type": "object", - "properties": { - "detailed-architecture": { - "type": "string" - }, - "required-pattern": { - "type": "string" - } - }, - "additionalProperties": false - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "interface.json#/defs/interface-type" - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - }, - "options": { - "$ref": "#/defs/option-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - }, - { - "required": [ - "options" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "ecosystem", - "system", - "service", - "database", - "network", - "ldap", - "webclient", - "data-asset" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "option-type": { - "type": "array", - "items": { - "$ref": "#/defs/decision" - } - }, - "decision": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "nodes": { - "type": "array", - "items": { - "type": "string" - } - }, - "relationships": { - "type": "array", - "items": { - "type": "string" - } - }, - "controls": { - "type": "array", - "items": { - "type": "string" - } - }, - "metadata": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "description", - "nodes", - "relationships" - ] - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} diff --git a/calm/draft/1177/prototype/authentication-as-control.json b/calm/draft/1177/prototype/authentication-as-control.json deleted file mode 100644 index a6c67d90d..000000000 --- a/calm/draft/1177/prototype/authentication-as-control.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "nodes": [ - { - "unique-id": "system-a", - "node-type": "system", - "name": "System A", - "description": "Example system A" - }, - { - "unique-id": "system-b", - "node-type": "system", - "name": "System B", - "description": "Example system B" - } - ], - "relationships": [ - { - "unique-id": "system-a-to-system-b", - "description": "System A connects to System B", - "relationship-type": { - "connects": { - "source": { - "node": "system-a" - }, - "destination": { - "node": "system-b" - } - } - }, - "protocol": "HTTPS", - "controls": { - "authentication": { - "description": "Authentication between System A and System B", - "requirements": [ - { - "control-requirement-url": "https://calm.finos.org/draft/1177/prototype/authentication-control-requirement.json", - "control-config-url": "https://calm.finos.org/draft/1177/prototype/authentication-control-config.json" - } - ] - } - } - } - ] -} diff --git a/calm/draft/1177/prototype/authentication-control-config.json b/calm/draft/1177/prototype/authentication-control-config.json deleted file mode 100644 index 68ea1d63d..000000000 --- a/calm/draft/1177/prototype/authentication-control-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$id": "https://calm.finos.org/draft/1177/prototype/authentication-control-config.json", - "auth-method": "OAuth2", - "token-expiry": { - "unit": "hours", - "value": 1 - }, - "mfa-required": false, - "token-revocation": true, - "additional-details": { - "grant-type": "client_credentials", - "token-endpoint": "https://auth.example.com/token" - } -} diff --git a/calm/draft/1177/prototype/authentication-control-requirement.json b/calm/draft/1177/prototype/authentication-control-requirement.json deleted file mode 100644 index b3f0d30a0..000000000 --- a/calm/draft/1177/prototype/authentication-control-requirement.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1177/prototype/authentication-control-requirement.json", - "title": "Authentication Control Requirement", - "type": "object", - "properties": { - "auth-method": { - "enum": [ - "OAuth2", - "Basic", - "Kerberos", - "SPNEGO", - "Certificate", - "JWT", - "API Key" - ], - "description": "Defines the authentication mechanism." - }, - "token-expiry": { - "type": "object", - "properties": { - "unit": { - "enum": ["seconds", "minutes", "hours", "days"] - }, - "value": { - "type": "number" - } - }, - "required": ["unit", "value"], - "description": "Defines the lifespan of authentication tokens." - }, - "mfa-required": { - "type": "boolean", - "description": "Indicates whether multi-factor authentication (MFA) is required." - }, - "token-revocation": { - "type": "boolean", - "description": "Indicates whether tokens can be manually revoked." - }, - "additional-details": { - "type": "object", - "description": "Additional authentication-specific details." - } - }, - "required": [ - "auth-method" - ], - "examples": [ - { - "auth-method": "OAuth2", - "token-expiry": { - "unit": "hours", - "value": 1 - }, - "mfa-required": false, - "token-revocation": true, - "additional-details": { - "grant-type": "client_credentials", - "token-endpoint": "https://auth.example.com/token" - } - } - ] -} diff --git a/calm/draft/1224/README.md b/calm/draft/1224/README.md deleted file mode 100644 index f4391e8e3..000000000 --- a/calm/draft/1224/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Architecture Decision Records (ADR) Support in CALM - -## Overview - -This proposal introduces support for Architecture Decision Records (ADRs) in the CALM meta-schema. -By allowing architectures and patterns to reference ADRs, we improve traceability between design decisions and architectural models. -ADRs can be hosted in CALM Hub or external documentation repositories. - -## Motivation - -CALM is designed to complement, not replace, existing tooling and documentation practices. -One such widely adopted practice is the use of Architecture Decision Records to capture key architectural decisions. - -While CALM already integrates well with tools like the C4 model, it lacks a formal way to link ADRs to architectural elements. -This proposal addresses that gap by introducing a lightweight mechanism for referencing ADRs directly within CALM models. - -This change enables: - -1. Documentation of ADRs associated with both architecture definitions and reusable patterns -1. Linking to existing ADRs stored in other repositories (e.g., GitHub, Confluence, Notion) -1. Compatibility with CALM Hub and other centralized architecture stores - -## Schema Changes - -### core.json - -Introduced a new optional adrs property at the document level: - -```json -"adrs": { - "type": "array", - "items": { - "type": "string" - } -} -``` - -## Example Architecture - -The following example shows how an architecture file could declare references to ADRs: - -```json -{ - "$schema": "https://calm.finos.org/draft/1224/meta/calm.json", - "name": "Trading Platform", - "adrs": [ - "https://github.com/org/project/docs/adr/0001-use-kafka.md", - "https://internal-docs.company.com/adr/0023-security-boundary.pdf" - ], - "nodes": [ ... ], - "relationships": [ ... ] -} -``` - -## Migration Guide - -### For Existing CALM Models - -Fully backwards compatible, no work to do. - -## Tooling Considerations - -May require the generator to be updated to support the new adrs property. - diff --git a/calm/draft/1224/meta/core.json b/calm/draft/1224/meta/core.json deleted file mode 100644 index 5d1846d24..000000000 --- a/calm/draft/1224/meta/core.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1224/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - }, - "description": "A list of nodes in the architecture. Each node represents a component or service within the architecture. Each node must have a unique ID, a type, a name, and a description." - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - }, - "description": "A list of relationships between nodes. Each relationship must have a unique ID and a type. The type can be one of the following: interacts, connects, deployed-in, composed-of, or options." - }, - "metadata": { - "$ref": "#/defs/metadata", - "description": "Metadata about the architecture. This can include information such as the author, date created, version, and any other relevant information. It is freeform and down to the architect" - }, - "controls": { - "$ref": "control.json#/defs/controls", - "description": "A list of controls that apply to the architecture. This can include security controls, compliance controls, and any other relevant non-functional requirement" - }, - "flows": { - "type": "array", - "items": { - "$ref": "flow.json#/defs/flow" - }, - "description": "A list of flows in the architecture. Each flow represents a sequence of interactions between nodes." - }, - "adrs": { - "type": "array", - "items": { - "type": "string" - }, - "description": "External links to ADRs (Architecture Decision Records) or similar documents that provide context or decisions related to the architecture. These can be URLs or references to internal documentation." - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "details": { - "type": "object", - "properties": { - "detailed-architecture": { - "type": "string" - }, - "required-pattern": { - "type": "string" - } - }, - "additionalProperties": false - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "interface.json#/defs/interface-type" - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - }, - "options": { - "$ref": "#/defs/option-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - }, - { - "required": [ - "options" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "ecosystem", - "system", - "service", - "database", - "network", - "ldap", - "webclient", - "data-asset" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "option-type": { - "type": "array", - "items": { - "$ref": "#/defs/decision" - } - }, - "decision": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "nodes": { - "type": "array", - "items": { - "type": "string" - } - }, - "relationships": { - "type": "array", - "items": { - "type": "string" - } - }, - "controls": { - "type": "array", - "items": { - "type": "string" - } - }, - "metadata": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "description", - "nodes", - "relationships" - ] - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} diff --git a/calm/draft/1224/prototype/api-gateway.json b/calm/draft/1224/prototype/api-gateway.json deleted file mode 100644 index b4b6c13d6..000000000 --- a/calm/draft/1224/prototype/api-gateway.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "$schema": "https://calm.finos.org/draft/1224/meta/calm.json", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/pattern/api-gateway-example.json", - "title": "API Gateway Example", - "adrs": [ - "https://github.com/org/project/docs/adr/0001-use-oauth2.md", - "https://internal-docs.company.com/adr/0001-rate-limiting.pdf" - ], - "nodes": [ - { - "name": "API Gateway", - "unique-id": "api-gateway", - "node-type": "system", - "description": "The API Gateway used to verify authorization and access to downstream system", - "well-known-endpoint": "https://api.example.com", - "interfaces": [ - { - "unique-id": "api-gateway-ingress", - "host": "api.example.com", - "port": 443 - } - ] - }, - { - "name": "API Consumer", - "unique-id": "api-consumer", - "node-type": "system", - "description": "The API Consumer making an authenticated and authorized request" - }, - { - "name": "API Producer", - "unique-id": "api-producer", - "node-type": "system", - "description": "The API Producer serving content", - "interfaces": [ - { - "unique-id": "producer-ingress", - "host": "producer.internal.local", - "port": 443 - } - ] - }, - { - "name": "Identity Provider", - "unique-id": "idp", - "node-type": "system", - "description": "The Identity Provider used to verify the bearer token" - } - ], - "relationships": [ - { - "unique-id": "api-consumer-api-gateway", - "description": "Issue calculation request", - "relationship-type": { - "connects": { - "source": { - "node": "api-consumer" - }, - "destination": { - "node": "api-gateway", - "interfaces": [ - "api-gateway-ingress" - ] - } - } - }, - "protocol": "HTTPS", - "authentication": "OAuth2" - }, - { - "unique-id": "api-gateway-idp", - "description": "Validate bearer token", - "relationship-type": { - "connects": { - "source": { - "node": "api-gateway" - }, - "destination": { - "node": "idp" - } - } - }, - "protocol": "HTTPS" - }, - { - "unique-id": "api-gateway-api-producer", - "description": "Forward request", - "relationship-type": { - "connects": { - "source": { - "node": "api-gateway" - }, - "destination": { - "node": "api-producer", - "interfaces": [ - "producer-ingress" - ] - } - } - }, - "protocol": "HTTPS" - }, - { - "unique-id": "api-consumer-idp", - "description": "Acquire a bearer token", - "relationship-type": { - "connects": { - "source": { - "node": "api-consumer" - }, - "destination": { - "node": "idp" - } - } - }, - "protocol": "HTTPS" - } - ] -} diff --git a/calm/draft/1232/meta/core.json b/calm/draft/1232/meta/core.json deleted file mode 100644 index 4489cec81..000000000 --- a/calm/draft/1232/meta/core.json +++ /dev/null @@ -1,333 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1232/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "flows": { - "type": "array", - "items": { - "$ref": "flow.json#/defs/flow" - } - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "details": { - "type": "object", - "properties": { - "detailed-architecture": { - "type": "string" - }, - "required-pattern": { - "type": "string" - } - }, - "additionalProperties": false - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "interface.json#/defs/interface-type" - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - }, - "options": { - "$ref": "#/defs/option-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - }, - { - "required": [ - "options" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "oneOf": [ - { - "enum": [ - "actor", - "ecosystem", - "system", - "service", - "database", - "network", - "storage", - "client", - "data-asset" - ] - }, - { - "type": "string" - } - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "option-type": { - "type": "array", - "items": { - "$ref": "#/defs/decision" - } - }, - "decision": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "nodes": { - "type": "array", - "items": { - "type": "string" - } - }, - "relationships": { - "type": "array", - "items": { - "type": "string" - } - }, - "controls": { - "type": "array", - "items": { - "type": "string" - } - }, - "metadata": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "description", - "nodes", - "relationships" - ] - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} diff --git a/calm/draft/1233/README.md b/calm/draft/1233/README.md deleted file mode 100644 index 0627d1241..000000000 --- a/calm/draft/1233/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Allow Inlining of Control Configuration - -This draft implements the schema changes proposed in [Issue #1233](https://github.com/finos/architecture-as-code/issues/1233). - -## Overview - -This change modifies the `control-detail` definition in the control.json schema to allow for inline control configurations as an alternative to the existing URL-based approach. - -## Current Limitations - -Currently, the schema only allows specifying a `control-config-url` property that points to an external configuration file. This requires users to create and maintain separate files for control configurations, even for simple cases, and makes CALM documents dependent on external resources. - -## Proposed Changes - -The schema now includes: - -1. A new `control-config` property of type "object" to allow inline configuration -2. A `oneOf` constraint to ensure either `control-config-url` OR `control-config` is provided (but not both) - -## Backward Compatibility - -This change is backward compatible: -- Existing CALM documents using `control-config-url` will continue to validate -- This is a non-breaking change as it extends the schema rather than restricting it -- No migration is required for existing documents - -## Examples - -The `prototype` directory contains examples demonstrating the use of: -- URL-based configuration only (`example-url-config.json`) -- Inline configuration only (`example-inline-config.json`) -- Mixed approach with both types in the same document (`example-mixed-config.json`) - -## Implementation Impact - -- Tools that process CALM documents must be updated to handle both URL references and inline configurations -- Validation tools need to be enhanced to validate the inline control configuration against the schema specified in the `control-requirement-url` -- Documentation should be updated to explain this new flexibility diff --git a/calm/draft/1233/meta/control.json b/calm/draft/1233/meta/control.json deleted file mode 100644 index 1fc1d9d37..000000000 --- a/calm/draft/1233/meta/control.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1233/meta/control.json", - "title": "Common Architecture Language Model Controls", - "description": "Controls model requirements for domains. For example, a security domain contains a series of control requirements", - "defs": { - "control-detail": { - "type": "object", - "properties": { - "control-requirement-url": { - "type": "string", - "description": "The requirement schema that specifies how a control should be defined" - }, - "control-config-url": { - "type": "string", - "description": "The configuration of how the control requirement schema is met" - }, - "control-config": { - "type": "object", - "description": "Inline configuration of how the control requirement schema is met" - } - }, - "required": [ - "control-requirement-url" - ], - "oneOf": [ - { - "required": ["control-config-url"] - }, - { - "required": ["control-config"] - } - ] - }, - "controls": { - "type": "object", - "patternProperties": { - "^[a-zA-Z0-9-]+$": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "A description of a control and how it applies to a given architecture" - }, - "requirements": { - "type": "array", - "items": { - "$ref": "#/defs/control-detail" - } - } - }, - "required": [ - "description", - "requirements" - ] - } - } - } - } -} diff --git a/calm/draft/1233/prototype/access-control-requirement.json b/calm/draft/1233/prototype/access-control-requirement.json deleted file mode 100644 index b10cae9b6..000000000 --- a/calm/draft/1233/prototype/access-control-requirement.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1233/prototype/access-control-requirement.json", - "title": "Access Control Requirement", - "description": "Requirements for access control implementation", - "type": "object", - "properties": { - "access-model": { - "type": "string", - "description": "The access control model to implement", - "enum": ["RBAC", "ABAC", "MAC", "DAC"] - }, - "multi-factor-authentication": { - "type": "boolean", - "description": "Whether multi-factor authentication is required" - }, - "session-timeout": { - "type": "integer", - "description": "Session timeout in minutes", - "minimum": 1, - "maximum": 1440 - }, - "password-policy": { - "type": "object", - "description": "Password policy requirements", - "properties": { - "minimum-length": { - "type": "integer", - "description": "Minimum password length", - "minimum": 8 - }, - "require-special-chars": { - "type": "boolean", - "description": "Whether special characters are required" - }, - "require-numbers": { - "type": "boolean", - "description": "Whether numbers are required" - }, - "require-mixed-case": { - "type": "boolean", - "description": "Whether mixed case is required" - } - }, - "required": [ - "minimum-length", - "require-special-chars", - "require-numbers", - "require-mixed-case" - ] - } - }, - "required": [ - "access-model", - "multi-factor-authentication", - "session-timeout", - "password-policy" - ] -} diff --git a/calm/draft/1233/prototype/data-encryption-requirement.json b/calm/draft/1233/prototype/data-encryption-requirement.json deleted file mode 100644 index 39ec619dd..000000000 --- a/calm/draft/1233/prototype/data-encryption-requirement.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/1233/prototype/data-encryption-requirement.json", - "title": "Data Encryption Control Requirement", - "description": "Requirements for data encryption controls", - "type": "object", - "properties": { - "encryption-algorithm": { - "type": "string", - "description": "The encryption algorithm to use", - "enum": ["AES-128", "AES-256", "ChaCha20-Poly1305"] - }, - "key-rotation-period": { - "type": "string", - "description": "How often encryption keys should be rotated", - "enum": ["30-days", "60-days", "90-days", "180-days", "365-days"] - }, - "data-at-rest": { - "type": "boolean", - "description": "Whether data at rest must be encrypted" - }, - "data-in-transit": { - "type": "boolean", - "description": "Whether data in transit must be encrypted" - } - }, - "required": [ - "encryption-algorithm", - "key-rotation-period", - "data-at-rest", - "data-in-transit" - ] -} diff --git a/calm/draft/1233/prototype/encryption-config.json b/calm/draft/1233/prototype/encryption-config.json deleted file mode 100644 index 669b60c76..000000000 --- a/calm/draft/1233/prototype/encryption-config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "encryption-algorithm": "AES-256", - "key-rotation-period": "90-days", - "data-at-rest": true, - "data-in-transit": true -} diff --git a/calm/draft/1233/prototype/example-inline-config.json b/calm/draft/1233/prototype/example-inline-config.json deleted file mode 100644 index 80e84b47a..000000000 --- a/calm/draft/1233/prototype/example-inline-config.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "controls": { - "data-security": { - "description": "Data security controls for the system", - "requirements": [ - { - "control-requirement-url": "https://calm.finos.org/draft/1233/prototype/data-encryption-requirement.json", - "control-config": { - "encryption-algorithm": "AES-256", - "key-rotation-period": "90-days", - "data-at-rest": true, - "data-in-transit": true - } - }, - { - "control-requirement-url": "https://calm.finos.org/draft/1233/prototype/access-control-requirement.json", - "control-config-url": "https://calm.finos.org/draft/1233/prototype/rbac-config.json" - } - ] - } - } -} diff --git a/calm/draft/1233/prototype/example-mixed-config.json b/calm/draft/1233/prototype/example-mixed-config.json deleted file mode 100644 index 5c9dee5ae..000000000 --- a/calm/draft/1233/prototype/example-mixed-config.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "controls": { - "data-security": { - "description": "Data security controls for the system", - "requirements": [ - { - "control-requirement-url": "https://calm.finos.org/draft/1233/prototype/data-encryption-requirement.json", - "control-config": { - "encryption-algorithm": "AES-256", - "key-rotation-period": "90-days", - "data-at-rest": true, - "data-in-transit": true - } - }, - { - "control-requirement-url": "https://calm.finos.org/draft/1233/prototype/access-control-requirement.json", - "control-config-url": "https://calm.finos.org/draft/1233/prototype/rbac-config.json" - } - ] - }, - "compliance": { - "description": "Regulatory compliance controls", - "requirements": [ - { - "control-requirement-url": "https://calm.finos.org/draft/1233/prototype/access-control-requirement.json", - "control-config": { - "access-model": "ABAC", - "multi-factor-authentication": true, - "session-timeout": 15, - "password-policy": { - "minimum-length": 14, - "require-special-chars": true, - "require-numbers": true, - "require-mixed-case": true - } - } - } - ] - } - } -} diff --git a/calm/draft/1233/prototype/example-url-config.json b/calm/draft/1233/prototype/example-url-config.json deleted file mode 100644 index 98040cb57..000000000 --- a/calm/draft/1233/prototype/example-url-config.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "controls": { - "data-security": { - "description": "Data security controls for the system", - "requirements": [ - { - "control-requirement-url": "https://calm.finos.org/draft/1233/prototype/data-encryption-requirement.json", - "control-config-url": "https://calm.finos.org/draft/1233/prototype/encryption-config.json" - }, - { - "control-requirement-url": "https://calm.finos.org/draft/1233/prototype/access-control-requirement.json", - "control-config-url": "https://calm.finos.org/draft/1233/prototype/rbac-config.json" - } - ] - } - } -} diff --git a/calm/draft/1233/prototype/rbac-config.json b/calm/draft/1233/prototype/rbac-config.json deleted file mode 100644 index 63872a1d1..000000000 --- a/calm/draft/1233/prototype/rbac-config.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "access-model": "RBAC", - "multi-factor-authentication": true, - "session-timeout": 30, - "password-policy": { - "minimum-length": 12, - "require-special-chars": true, - "require-numbers": true, - "require-mixed-case": true - } -} diff --git a/calm/draft/2024-02/meta/calm.json b/calm/draft/2024-02/meta/calm.json deleted file mode 100644 index 3c33a0eaa..000000000 --- a/calm/draft/2024-02/meta/calm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-02/meta/calm.json", - - "$vocabulary": { - "https://json-schema.org/draft/2020-12/vocab/core": true, - "https://json-schema.org/draft/2020-12/vocab/applicator": true, - "https://json-schema.org/draft/2020-12/vocab/validation": true, - "https://json-schema.org/draft/2020-12/vocab/meta-data": true, - "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, - "https://json-schema.org/draft/2020-12/vocab/content": true, - "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-02/meta/core.json": true - }, - "$dynamicAnchor": "meta", - - "title": "Common Architecture Language Model (CALM) Schema", - "allOf": [ - {"$ref": "https://json-schema.org/draft/2020-12/schema"}, - {"$ref": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-02/meta/core.json"} - ] -} diff --git a/calm/draft/2024-02/meta/core.json b/calm/draft/2024-02/meta/core.json deleted file mode 100644 index 8f0f54225..000000000 --- a/calm/draft/2024-02/meta/core.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-02/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "required": [ - "nodes", - "relationships" - ] - }, - "defs": { - "node": { - "type": "object", - "properties": { - "uniqueId": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "data-classification": { - "$ref": "#/defs/dataClassification" - }, - "run-as": { - "type": "string" - }, - "instance": { - "type": "string" - } - }, - "required": [ - "uniqueId", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "uniqueId": { - "type": "string" - }, - "relationship-type": { - "$ref": "#/defs/relationship-type-definition" - }, - "parties": { - "type": "object", - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "items": { - "type": "string" - } - }, - "source": { - "type": "string" - }, - "destination": { - "type": "string" - }, - "container": { - "type": "string" - } - }, - "required": [] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - } - }, - "required": [ - "uniqueId", - "relationship-type", - "parties" - ], - "additionalProperties": true - }, - "dataClassification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "system", - "service", - "database", - "internal-network", - "ldap", - "webclient" - ] - }, - "relationship-type-definition": { - "enum": [ - "interacts", - "connects", - "deployed-in", - "composed-of" - ] - } - } -} diff --git a/calm/draft/2024-03/meta/calm.json b/calm/draft/2024-03/meta/calm.json deleted file mode 100644 index 90ded9ad2..000000000 --- a/calm/draft/2024-03/meta/calm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-03/meta/calm.json", - - "$vocabulary": { - "https://json-schema.org/draft/2020-12/vocab/core": true, - "https://json-schema.org/draft/2020-12/vocab/applicator": true, - "https://json-schema.org/draft/2020-12/vocab/validation": true, - "https://json-schema.org/draft/2020-12/vocab/meta-data": true, - "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, - "https://json-schema.org/draft/2020-12/vocab/content": true, - "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-03/meta/core.json": true - }, - "$dynamicAnchor": "meta", - - "title": "Common Architecture Language Model (CALM) Schema", - "allOf": [ - {"$ref": "https://json-schema.org/draft/2020-12/schema"}, - {"$ref": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-03/meta/core.json"} - ] -} diff --git a/calm/draft/2024-03/meta/core.json b/calm/draft/2024-03/meta/core.json deleted file mode 100644 index 0043554e1..000000000 --- a/calm/draft/2024-03/meta/core.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-03/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "instance": { - "type": "string" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "system", - "service", - "database", - "internal-network", - "ldap", - "webclient" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "required": [ - "source", - "destination" - ], - "properties": { - "source": { - "type": "string" - }, - "destination": { - "type": "string" - } - } - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - } - } -} diff --git a/calm/draft/2024-04/meta/calm.json b/calm/draft/2024-04/meta/calm.json deleted file mode 100644 index 46af5b175..000000000 --- a/calm/draft/2024-04/meta/calm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-04/meta/calm.json", - - "$vocabulary": { - "https://json-schema.org/draft/2020-12/vocab/core": true, - "https://json-schema.org/draft/2020-12/vocab/applicator": true, - "https://json-schema.org/draft/2020-12/vocab/validation": true, - "https://json-schema.org/draft/2020-12/vocab/meta-data": true, - "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, - "https://json-schema.org/draft/2020-12/vocab/content": true, - "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-04/meta/core.json": true - }, - "$dynamicAnchor": "meta", - - "title": "Common Architecture Language Model (CALM) Schema", - "allOf": [ - {"$ref": "https://json-schema.org/draft/2020-12/schema"}, - {"$ref": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-04/meta/core.json"} - ] -} diff --git a/calm/draft/2024-04/meta/core.json b/calm/draft/2024-04/meta/core.json deleted file mode 100644 index b42614757..000000000 --- a/calm/draft/2024-04/meta/core.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-04/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "detailed-architecture": { - "type": "string" - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "instance": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "interface.json#/defs/interface-type" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "system", - "service", - "database", - "network", - "ldap", - "webclient" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} diff --git a/calm/draft/2024-04/meta/interface.json b/calm/draft/2024-04/meta/interface.json deleted file mode 100644 index 30fefcf91..000000000 --- a/calm/draft/2024-04/meta/interface.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-04/meta/interface.json", - "title": "Common Architecture Language Model Interfaces", - "defs": { - "interface-type": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - } - }, - "required": [ - "unique-id" - ] - }, - "node-interface": { - "type": "object", - "properties": { - "node": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "node" - ] - }, - "host-port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer" - } - }, - "required": [ - "host", - "port" - ] - }, - "hostname-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "hostname": { - "type": "string" - } - }, - "required": [ - "hostname" - ] - }, - "path-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "path": { - "type": "string" - } - }, - "required": [ - "path" - ] - }, - "oauth2-audience-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "audiences": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - }, - "required": [ - "audiences" - ] - }, - "url-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "required": [ - "url" - ] - }, - "rate-limit-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "key": { - "$ref": "#/defs/rate-limit-key" - }, - "time": { - "type": "integer" - }, - "time-unit": { - "$ref": "#/defs/rate-limit-time-unit" - }, - "calls": { - "type": "integer" - } - }, - "required": [ - "key", - "time", - "time-unit", - "calls" - ] - }, - "rate-limit-key": { - "type": "object", - "properties": { - "key-type": { - "$ref": "#/defs/rate-limit-key-type" - }, - "static-value": { - "type": "string" - } - }, - "required": [ - "key-type" - ] - }, - "rate-limit-key-type": { - "enum": [ - "User", - "IP", - "Global", - "Header", - "OAuth2Client" - ] - }, - "rate-limit-time-unit": { - "enum": [ - "Seconds", - "Minutes", - "Hours" - ] - } - } -} \ No newline at end of file diff --git a/calm/draft/2024-08/meta/calm.json b/calm/draft/2024-08/meta/calm.json deleted file mode 100644 index fce2b3d7b..000000000 --- a/calm/draft/2024-08/meta/calm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-08/meta/calm.json", - - "$vocabulary": { - "https://json-schema.org/draft/2020-12/vocab/core": true, - "https://json-schema.org/draft/2020-12/vocab/applicator": true, - "https://json-schema.org/draft/2020-12/vocab/validation": true, - "https://json-schema.org/draft/2020-12/vocab/meta-data": true, - "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, - "https://json-schema.org/draft/2020-12/vocab/content": true, - "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-08/meta/core.json": true - }, - "$dynamicAnchor": "meta", - - "title": "Common Architecture Language Model (CALM) Schema", - "allOf": [ - {"$ref": "https://json-schema.org/draft/2020-12/schema"}, - {"$ref": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-08/meta/core.json"} - ] -} diff --git a/calm/draft/2024-08/meta/control-requirement.json b/calm/draft/2024-08/meta/control-requirement.json deleted file mode 100644 index 9cb0b6944..000000000 --- a/calm/draft/2024-08/meta/control-requirement.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-08/meta/control-requirement.json", - "title": "Common Architecture Language Model Control Requirement", - "description": "Schema for defining control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "control-id": { - "type": "string", - "description": "The unique identifier of this control, which has the potential to be used for linking evidence" - }, - "name": { - "type": "string", - "description": "The name of the control requirement that provides contextual meaning within a given domain" - }, - "description": { - "type": "string", - "description": "A more detailed description of the control and information on what a developer needs to consider" - } - }, - "required": [ - "control-id", - "name", - "description" - ], - "examples": [ - { - "control-id": "CR-001", - "name": "Access Control", - "description": "Ensure that access to sensitive information is restricted." - } - ] -} \ No newline at end of file diff --git a/calm/draft/2024-08/meta/control.json b/calm/draft/2024-08/meta/control.json deleted file mode 100644 index 444bb73e4..000000000 --- a/calm/draft/2024-08/meta/control.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-08/meta/control.json", - "title": "Common Architecture Language Model Controls", - "description": "Controls model requirements for domains. For example, a security domain contains a series of control requirements", - "defs": { - "control-detail": { - "type": "object", - "properties": { - "control-requirement-url": { - "type": "string", - "description": "The requirement schema that specifies how a control should be defined" - }, - "control-config-url": { - "type": "string", - "description": "The configuration of how the control requirement schema is met" - } - }, - "required": [ - "control-requirement-url" - ] - }, - "controls": { - "type": "object", - "patternProperties": { - "^[a-zA-Z0-9-]+$": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "A description of a control and how it applies to a given architecture" - }, - "requirements": { - "type": "array", - "items": { - "$ref": "#/defs/control-detail" - } - } - }, - "required": [ - "description", - "requirements" - ] - } - } - } - } -} diff --git a/calm/draft/2024-08/meta/core.json b/calm/draft/2024-08/meta/core.json deleted file mode 100644 index 1128d0102..000000000 --- a/calm/draft/2024-08/meta/core.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-08/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "detailed-architecture": { - "type": "string" - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "instance": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "interface.json#/defs/interface-type" - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "system", - "service", - "database", - "network", - "ldap", - "webclient" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} diff --git a/calm/draft/2024-08/meta/evidence.json b/calm/draft/2024-08/meta/evidence.json deleted file mode 100644 index 8943d7914..000000000 --- a/calm/draft/2024-08/meta/evidence.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-08/meta/evidence.json", - "title": "Common Architecture Language Model Evidence", - "description": "Schema for defining evidence for control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "evidence": { - "type": "object", - "properties": { - "unique-id": { - "type": "string", - "description": "CALM unique-id for future linking and uniquely defining this evidence" - }, - "evidence-paths": { - "type": "array", - "description": "Paths to the evidence relating to a specific control", - "items": { - "type": "string" - } - }, - "control-configuration-url": { - "type": "string", - "description": "URI for the control configuration this evidence relates to" - } - }, - "required":[ - "unique-id", - "evidence-paths", - "control-configuration-url" - ] - } - }, - "required": [ - "evidence" - ] -} \ No newline at end of file diff --git a/calm/draft/2024-08/meta/interface.json b/calm/draft/2024-08/meta/interface.json deleted file mode 100644 index 2449c98d4..000000000 --- a/calm/draft/2024-08/meta/interface.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/finos/architecture-as-code/main/calm/draft/2024-08/meta/interface.json", - "title": "Common Architecture Language Model Interfaces", - "defs": { - "interface-type": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - } - }, - "required": [ - "unique-id" - ] - }, - "node-interface": { - "type": "object", - "properties": { - "node": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "node" - ] - }, - "host-port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer" - } - }, - "required": [ - "host", - "port" - ] - }, - "hostname-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "hostname": { - "type": "string" - } - }, - "required": [ - "hostname" - ] - }, - "path-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "path": { - "type": "string" - } - }, - "required": [ - "path" - ] - }, - "oauth2-audience-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "audiences": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - }, - "required": [ - "audiences" - ] - }, - "url-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "required": [ - "url" - ] - }, - "rate-limit-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "key": { - "$ref": "#/defs/rate-limit-key" - }, - "time": { - "type": "integer" - }, - "time-unit": { - "$ref": "#/defs/rate-limit-time-unit" - }, - "calls": { - "type": "integer" - } - }, - "required": [ - "key", - "time", - "time-unit", - "calls" - ] - }, - "rate-limit-key": { - "type": "object", - "properties": { - "key-type": { - "$ref": "#/defs/rate-limit-key-type" - }, - "static-value": { - "type": "string" - } - }, - "required": [ - "key-type" - ] - }, - "rate-limit-key-type": { - "enum": [ - "User", - "IP", - "Global", - "Header", - "OAuth2Client" - ] - }, - "rate-limit-time-unit": { - "enum": [ - "Seconds", - "Minutes", - "Hours" - ] - }, - "container-image-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "image": { - "type": "string" - } - }, - "required": [ - "image" - ] - }, - "port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "port": { - "type": "integer" - } - }, - "required": [ - "port" - ] - } - } -} \ No newline at end of file diff --git a/calm/draft/2024-09/meta/calm.json b/calm/draft/2024-09/meta/calm.json deleted file mode 100644 index c26352bcc..000000000 --- a/calm/draft/2024-09/meta/calm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-09/meta/calm.json", - - "$vocabulary": { - "https://json-schema.org/draft/2020-12/vocab/core": true, - "https://json-schema.org/draft/2020-12/vocab/applicator": true, - "https://json-schema.org/draft/2020-12/vocab/validation": true, - "https://json-schema.org/draft/2020-12/vocab/meta-data": true, - "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, - "https://json-schema.org/draft/2020-12/vocab/content": true, - "https://calm.finos.org/draft/2024-09/meta/core.json": true - }, - "$dynamicAnchor": "meta", - - "title": "Common Architecture Language Model (CALM) Schema", - "allOf": [ - {"$ref": "https://json-schema.org/draft/2020-12/schema"}, - {"$ref": "https://calm.finos.org/draft/2024-09/meta/core.json"} - ] -} diff --git a/calm/draft/2024-09/meta/control-requirement.json b/calm/draft/2024-09/meta/control-requirement.json deleted file mode 100644 index a2f7ce003..000000000 --- a/calm/draft/2024-09/meta/control-requirement.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-09/meta/control-requirement.json", - "title": "Common Architecture Language Model Control Requirement", - "description": "Schema for defining control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "control-id": { - "type": "string", - "description": "The unique identifier of this control, which has the potential to be used for linking evidence" - }, - "name": { - "type": "string", - "description": "The name of the control requirement that provides contextual meaning within a given domain" - }, - "description": { - "type": "string", - "description": "A more detailed description of the control and information on what a developer needs to consider" - } - }, - "required": [ - "control-id", - "name", - "description" - ], - "examples": [ - { - "control-id": "CR-001", - "name": "Access Control", - "description": "Ensure that access to sensitive information is restricted." - } - ] -} \ No newline at end of file diff --git a/calm/draft/2024-09/meta/control.json b/calm/draft/2024-09/meta/control.json deleted file mode 100644 index 812b91dbb..000000000 --- a/calm/draft/2024-09/meta/control.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-09/meta/control.json", - "title": "Common Architecture Language Model Controls", - "description": "Controls model requirements for domains. For example, a security domain contains a series of control requirements", - "defs": { - "control-detail": { - "type": "object", - "properties": { - "control-requirement-url": { - "type": "string", - "description": "The requirement schema that specifies how a control should be defined" - }, - "control-config-url": { - "type": "string", - "description": "The configuration of how the control requirement schema is met" - } - }, - "required": [ - "control-requirement-url" - ] - }, - "controls": { - "type": "object", - "patternProperties": { - "^[a-zA-Z0-9-]+$": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "A description of a control and how it applies to a given architecture" - }, - "requirements": { - "type": "array", - "items": { - "$ref": "#/defs/control-detail" - } - } - }, - "required": [ - "description", - "requirements" - ] - } - } - } - } -} diff --git a/calm/draft/2024-09/meta/core.json b/calm/draft/2024-09/meta/core.json deleted file mode 100644 index a865a0163..000000000 --- a/calm/draft/2024-09/meta/core.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-09/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "detailed-architecture": { - "type": "string" - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "instance": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "interface.json#/defs/interface-type" - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "system", - "service", - "database", - "network", - "ldap", - "webclient" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} diff --git a/calm/draft/2024-09/meta/evidence.json b/calm/draft/2024-09/meta/evidence.json deleted file mode 100644 index 7e9aa889b..000000000 --- a/calm/draft/2024-09/meta/evidence.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-09/meta/evidence.json", - "title": "Common Architecture Language Model Evidence", - "description": "Schema for defining evidence for control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "evidence": { - "type": "object", - "properties": { - "unique-id": { - "type": "string", - "description": "CALM unique-id for future linking and uniquely defining this evidence" - }, - "evidence-paths": { - "type": "array", - "description": "Paths to the evidence relating to a specific control", - "items": { - "type": "string" - } - }, - "control-configuration-url": { - "type": "string", - "description": "URI for the control configuration this evidence relates to" - } - }, - "required":[ - "unique-id", - "evidence-paths", - "control-configuration-url" - ] - } - }, - "required": [ - "evidence" - ] -} \ No newline at end of file diff --git a/calm/draft/2024-09/meta/interface.json b/calm/draft/2024-09/meta/interface.json deleted file mode 100644 index aa8e773c1..000000000 --- a/calm/draft/2024-09/meta/interface.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-09/meta/interface.json", - "title": "Common Architecture Language Model Interfaces", - "defs": { - "interface-type": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - } - }, - "required": [ - "unique-id" - ] - }, - "node-interface": { - "type": "object", - "properties": { - "node": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "node" - ] - }, - "host-port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer" - } - }, - "required": [ - "host", - "port" - ] - }, - "hostname-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "hostname": { - "type": "string" - } - }, - "required": [ - "hostname" - ] - }, - "path-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "path": { - "type": "string" - } - }, - "required": [ - "path" - ] - }, - "oauth2-audience-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "audiences": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - }, - "required": [ - "audiences" - ] - }, - "url-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "required": [ - "url" - ] - }, - "rate-limit-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "key": { - "$ref": "#/defs/rate-limit-key" - }, - "time": { - "type": "integer" - }, - "time-unit": { - "$ref": "#/defs/rate-limit-time-unit" - }, - "calls": { - "type": "integer" - } - }, - "required": [ - "key", - "time", - "time-unit", - "calls" - ] - }, - "rate-limit-key": { - "type": "object", - "properties": { - "key-type": { - "$ref": "#/defs/rate-limit-key-type" - }, - "static-value": { - "type": "string" - } - }, - "required": [ - "key-type" - ] - }, - "rate-limit-key-type": { - "enum": [ - "User", - "IP", - "Global", - "Header", - "OAuth2Client" - ] - }, - "rate-limit-time-unit": { - "enum": [ - "Seconds", - "Minutes", - "Hours" - ] - }, - "container-image-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "image": { - "type": "string" - } - }, - "required": [ - "image" - ] - }, - "port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "port": { - "type": "integer" - } - }, - "required": [ - "port" - ] - } - } -} \ No newline at end of file diff --git a/calm/draft/2024-10/meta/calm.json b/calm/draft/2024-10/meta/calm.json deleted file mode 100644 index 88d2000e9..000000000 --- a/calm/draft/2024-10/meta/calm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-10/meta/calm.json", - - "$vocabulary": { - "https://json-schema.org/draft/2020-12/vocab/core": true, - "https://json-schema.org/draft/2020-12/vocab/applicator": true, - "https://json-schema.org/draft/2020-12/vocab/validation": true, - "https://json-schema.org/draft/2020-12/vocab/meta-data": true, - "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, - "https://json-schema.org/draft/2020-12/vocab/content": true, - "https://calm.finos.org/draft/2024-10/meta/core.json": true - }, - "$dynamicAnchor": "meta", - - "title": "Common Architecture Language Model (CALM) Schema", - "allOf": [ - {"$ref": "https://json-schema.org/draft/2020-12/schema"}, - {"$ref": "https://calm.finos.org/draft/2024-10/meta/core.json"} - ] -} diff --git a/calm/draft/2024-10/meta/control-requirement.json b/calm/draft/2024-10/meta/control-requirement.json deleted file mode 100644 index 5747f0df5..000000000 --- a/calm/draft/2024-10/meta/control-requirement.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-10/meta/control-requirement.json", - "title": "Common Architecture Language Model Control Requirement", - "description": "Schema for defining control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "control-id": { - "type": "string", - "description": "The unique identifier of this control, which has the potential to be used for linking evidence" - }, - "name": { - "type": "string", - "description": "The name of the control requirement that provides contextual meaning within a given domain" - }, - "description": { - "type": "string", - "description": "A more detailed description of the control and information on what a developer needs to consider" - } - }, - "required": [ - "control-id", - "name", - "description" - ], - "examples": [ - { - "control-id": "CR-001", - "name": "Access Control", - "description": "Ensure that access to sensitive information is restricted." - } - ] -} \ No newline at end of file diff --git a/calm/draft/2024-10/meta/control.json b/calm/draft/2024-10/meta/control.json deleted file mode 100644 index 0a0868b88..000000000 --- a/calm/draft/2024-10/meta/control.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-10/meta/control.json", - "title": "Common Architecture Language Model Controls", - "description": "Controls model requirements for domains. For example, a security domain contains a series of control requirements", - "defs": { - "control-detail": { - "type": "object", - "properties": { - "control-requirement-url": { - "type": "string", - "description": "The requirement schema that specifies how a control should be defined" - }, - "control-config-url": { - "type": "string", - "description": "The configuration of how the control requirement schema is met" - } - }, - "required": [ - "control-requirement-url" - ] - }, - "controls": { - "type": "object", - "patternProperties": { - "^[a-zA-Z0-9-]+$": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "A description of a control and how it applies to a given architecture" - }, - "requirements": { - "type": "array", - "items": { - "$ref": "#/defs/control-detail" - } - } - }, - "required": [ - "description", - "requirements" - ] - } - } - } - } -} diff --git a/calm/draft/2024-10/meta/core.json b/calm/draft/2024-10/meta/core.json deleted file mode 100644 index 1684d4183..000000000 --- a/calm/draft/2024-10/meta/core.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-10/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "detailed-architecture": { - "type": "string" - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "instance": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "interface.json#/defs/interface-type" - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "system", - "service", - "database", - "network", - "ldap", - "webclient", - "data-assset" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} diff --git a/calm/draft/2024-10/meta/evidence.json b/calm/draft/2024-10/meta/evidence.json deleted file mode 100644 index e4f093b41..000000000 --- a/calm/draft/2024-10/meta/evidence.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-10/meta/evidence.json", - "title": "Common Architecture Language Model Evidence", - "description": "Schema for defining evidence for control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "evidence": { - "type": "object", - "properties": { - "unique-id": { - "type": "string", - "description": "CALM unique-id for future linking and uniquely defining this evidence" - }, - "evidence-paths": { - "type": "array", - "description": "Paths to the evidence relating to a specific control", - "items": { - "type": "string" - } - }, - "control-configuration-url": { - "type": "string", - "description": "URI for the control configuration this evidence relates to" - } - }, - "required":[ - "unique-id", - "evidence-paths", - "control-configuration-url" - ] - } - }, - "required": [ - "evidence" - ] -} \ No newline at end of file diff --git a/calm/draft/2024-10/meta/flow.json b/calm/draft/2024-10/meta/flow.json deleted file mode 100644 index cbe11b5b0..000000000 --- a/calm/draft/2024-10/meta/flow.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-10/meta/flow.json", - "title": "Business Flow Model", - "description": "Defines business flows that relate to technical architectures, allowing mapping of flows to technical components and attaching control requirements.", - "type": "object", - "properties": { - "unique-id": { - "type": "string", - "description": "Unique identifier for the flow" - }, - "name": { - "type": "string", - "description": "Descriptive name for the business flow" - }, - "description": { - "type": "string", - "description": "Detailed description of the flow's purpose" - }, - "requirement-url": { - "type": "string", - "description": "Link to a detailed requirement document" - }, - "transitions": { - "type": "array", - "items": { - "$ref": "#/defs/transition" - } - }, - "controls": { - "$ref": "https://calm.finos.org/draft/2024-10/meta/control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "name", - "description", - "transitions" - ], - "defs": { - "transition": { - "type": "object", - "properties": { - "relationship-unique-id": { - "type": "string", - "description": "Unique identifier for the relationship in the architecture" - }, - "sequence-number": { - "type": "integer", - "description": "Indicates the sequence of the relationship in the flow" - }, - "summary": { - "type": "string", - "description": "Functional summary of what is happening in the transition" - }, - "direction": { - "enum": [ - "source-to-destination", - "destination-to-source" - ], - "default": "source-to-destination" - }, - "required": [ - "relationship-unique-id", - "sequence-number", - "summary" - ] - }, - "minItems": 1 - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} - diff --git a/calm/draft/2024-10/meta/interface.json b/calm/draft/2024-10/meta/interface.json deleted file mode 100644 index 8f8dad1f7..000000000 --- a/calm/draft/2024-10/meta/interface.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-10/meta/interface.json", - "title": "Common Architecture Language Model Interfaces", - "defs": { - "interface-type": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - } - }, - "required": [ - "unique-id" - ] - }, - "node-interface": { - "type": "object", - "properties": { - "node": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "node" - ] - }, - "host-port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer" - } - }, - "required": [ - "host", - "port" - ] - }, - "hostname-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "hostname": { - "type": "string" - } - }, - "required": [ - "hostname" - ] - }, - "path-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "path": { - "type": "string" - } - }, - "required": [ - "path" - ] - }, - "oauth2-audience-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "audiences": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - }, - "required": [ - "audiences" - ] - }, - "url-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "required": [ - "url" - ] - }, - "rate-limit-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "key": { - "$ref": "#/defs/rate-limit-key" - }, - "time": { - "type": "integer" - }, - "time-unit": { - "$ref": "#/defs/rate-limit-time-unit" - }, - "calls": { - "type": "integer" - } - }, - "required": [ - "key", - "time", - "time-unit", - "calls" - ] - }, - "rate-limit-key": { - "type": "object", - "properties": { - "key-type": { - "$ref": "#/defs/rate-limit-key-type" - }, - "static-value": { - "type": "string" - } - }, - "required": [ - "key-type" - ] - }, - "rate-limit-key-type": { - "enum": [ - "User", - "IP", - "Global", - "Header", - "OAuth2Client" - ] - }, - "rate-limit-time-unit": { - "enum": [ - "Seconds", - "Minutes", - "Hours" - ] - }, - "container-image-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "image": { - "type": "string" - } - }, - "required": [ - "image" - ] - }, - "port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "port": { - "type": "integer" - } - }, - "required": [ - "port" - ] - } - } -} \ No newline at end of file diff --git a/calm/draft/2024-10/meta/units.json b/calm/draft/2024-10/meta/units.json deleted file mode 100644 index abb4ada87..000000000 --- a/calm/draft/2024-10/meta/units.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-10/meta/units.json", - "title": "Common Architecture Language Model Units", - "defs": { - "time-unit": { - "type": "object", - "description": "A unit of time with a value and a unit type.", - "properties": { - "unit": { - "enum": [ - "nanoseconds", - "milliseconds", - "seconds", - "minutes", - "hours", - "days", - "weeks", - "months", - "years" - ], - "description": "The unit of time (e.g., seconds, minutes, hours)." - }, - "value": { - "type": "number", - "minimum": 0, - "description": "The numeric value representing the amount of time." - } - }, - "required": ["unit", "value"], - "additionalProperties": false, - "examples": [ - { - "unit": "seconds", - "value": 30 - }, - { - "unit": "minutes", - "value": 15 - }, - { - "unit": "hours", - "value": 1 - }, - { - "unit": "days", - "value": 7 - } - ] - }, - "cron-expression": { - "type": "string", - "title": "Cron Expression", - "description": "A valid Unix-style cron expression.", - "pattern": "^([0-5]?\\d)\\s([01]?\\d|2[0-3])\\s(3[01]|[12]\\d|0?[1-9])\\s(1[0-2]|0?[1-9])\\s([0-6])$", - "examples": [ - "0 0 * * 0", - "30 14 1 * 5", - "15 10 * * *" - ] - } - }, - "additionalProperties": false -} \ No newline at end of file diff --git a/calm/draft/2024-12/meta/calm.json b/calm/draft/2024-12/meta/calm.json deleted file mode 100644 index 30188bc14..000000000 --- a/calm/draft/2024-12/meta/calm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-12/meta/calm.json", - - "$vocabulary": { - "https://json-schema.org/draft/2020-12/vocab/core": true, - "https://json-schema.org/draft/2020-12/vocab/applicator": true, - "https://json-schema.org/draft/2020-12/vocab/validation": true, - "https://json-schema.org/draft/2020-12/vocab/meta-data": true, - "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, - "https://json-schema.org/draft/2020-12/vocab/content": true, - "https://calm.finos.org/draft/2024-12/meta/core.json": true - }, - "$dynamicAnchor": "meta", - - "title": "Common Architecture Language Model (CALM) Schema", - "allOf": [ - {"$ref": "https://json-schema.org/draft/2020-12/schema"}, - {"$ref": "https://calm.finos.org/draft/2024-12/meta/core.json"} - ] -} diff --git a/calm/draft/2024-12/meta/control-requirement.json b/calm/draft/2024-12/meta/control-requirement.json deleted file mode 100644 index d383c6b9e..000000000 --- a/calm/draft/2024-12/meta/control-requirement.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-12/meta/control-requirement.json", - "title": "Common Architecture Language Model Control Requirement", - "description": "Schema for defining control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "control-id": { - "type": "string", - "description": "The unique identifier of this control, which has the potential to be used for linking evidence" - }, - "name": { - "type": "string", - "description": "The name of the control requirement that provides contextual meaning within a given domain" - }, - "description": { - "type": "string", - "description": "A more detailed description of the control and information on what a developer needs to consider" - } - }, - "required": [ - "control-id", - "name", - "description" - ], - "examples": [ - { - "control-id": "CR-001", - "name": "Access Control", - "description": "Ensure that access to sensitive information is restricted." - } - ] -} \ No newline at end of file diff --git a/calm/draft/2024-12/meta/control.json b/calm/draft/2024-12/meta/control.json deleted file mode 100644 index 1a61ebe0c..000000000 --- a/calm/draft/2024-12/meta/control.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-12/meta/control.json", - "title": "Common Architecture Language Model Controls", - "description": "Controls model requirements for domains. For example, a security domain contains a series of control requirements", - "defs": { - "control-detail": { - "type": "object", - "properties": { - "control-requirement-url": { - "type": "string", - "description": "The requirement schema that specifies how a control should be defined" - }, - "control-config-url": { - "type": "string", - "description": "The configuration of how the control requirement schema is met" - } - }, - "required": [ - "control-requirement-url" - ] - }, - "controls": { - "type": "object", - "patternProperties": { - "^[a-zA-Z0-9-]+$": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "A description of a control and how it applies to a given architecture" - }, - "requirements": { - "type": "array", - "items": { - "$ref": "#/defs/control-detail" - } - } - }, - "required": [ - "description", - "requirements" - ] - } - } - } - } -} diff --git a/calm/draft/2024-12/meta/core.json b/calm/draft/2024-12/meta/core.json deleted file mode 100644 index f8490ace2..000000000 --- a/calm/draft/2024-12/meta/core.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-12/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "flows": { - "type": "array", - "items": { - "$ref": "flow.json#/defs/flow" - } - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "detailed-architecture": { - "type": "string" - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "instance": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "interface.json#/defs/interface-type" - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "ecosystem", - "system", - "service", - "database", - "network", - "ldap", - "webclient", - "data-assset" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} diff --git a/calm/draft/2024-12/meta/evidence.json b/calm/draft/2024-12/meta/evidence.json deleted file mode 100644 index d33417ccf..000000000 --- a/calm/draft/2024-12/meta/evidence.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-12/meta/evidence.json", - "title": "Common Architecture Language Model Evidence", - "description": "Schema for defining evidence for control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "evidence": { - "type": "object", - "properties": { - "unique-id": { - "type": "string", - "description": "CALM unique-id for future linking and uniquely defining this evidence" - }, - "evidence-paths": { - "type": "array", - "description": "Paths to the evidence relating to a specific control", - "items": { - "type": "string" - } - }, - "control-configuration-url": { - "type": "string", - "description": "URI for the control configuration this evidence relates to" - } - }, - "required":[ - "unique-id", - "evidence-paths", - "control-configuration-url" - ] - } - }, - "required": [ - "evidence" - ] -} \ No newline at end of file diff --git a/calm/draft/2024-12/meta/flow.json b/calm/draft/2024-12/meta/flow.json deleted file mode 100644 index a7d29d8b7..000000000 --- a/calm/draft/2024-12/meta/flow.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-12/meta/flow.json", - "title": "Business Flow Model", - "description": "Defines business flows that relate to technical architectures, allowing mapping of flows to technical components and attaching control requirements.", - "defs": { - "transition": { - "type": "object", - "properties": { - "relationship-unique-id": { - "type": "string", - "description": "Unique identifier for the relationship in the architecture" - }, - "sequence-number": { - "type": "integer", - "description": "Indicates the sequence of the relationship in the flow" - }, - "summary": { - "type": "string", - "description": "Functional summary of what is happening in the transition" - }, - "direction": { - "enum": [ - "source-to-destination", - "destination-to-source" - ], - "default": "source-to-destination" - }, - "required": [ - "relationship-unique-id", - "sequence-number", - "summary" - ] - }, - "minItems": 1 - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - }, - "flow": { - "type": "object", - "properties": { - "unique-id": { - "type": "string", - "description": "Unique identifier for the flow" - }, - "name": { - "type": "string", - "description": "Descriptive name for the business flow" - }, - "description": { - "type": "string", - "description": "Detailed description of the flow's purpose" - }, - "requirement-url": { - "type": "string", - "description": "Link to a detailed requirement document" - }, - "transitions": { - "type": "array", - "items": { - "$ref": "#/defs/transition" - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "name", - "description", - "transitions" - ] - } - } -} - diff --git a/calm/draft/2024-12/meta/interface.json b/calm/draft/2024-12/meta/interface.json deleted file mode 100644 index bebdfdf7a..000000000 --- a/calm/draft/2024-12/meta/interface.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-12/meta/interface.json", - "title": "Common Architecture Language Model Interfaces", - "defs": { - "interface-type": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - } - }, - "required": [ - "unique-id" - ] - }, - "node-interface": { - "type": "object", - "properties": { - "node": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "node" - ] - }, - "host-port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer" - } - }, - "required": [ - "host", - "port" - ] - }, - "hostname-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "hostname": { - "type": "string" - } - }, - "required": [ - "hostname" - ] - }, - "path-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "path": { - "type": "string" - } - }, - "required": [ - "path" - ] - }, - "oauth2-audience-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "audiences": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - }, - "required": [ - "audiences" - ] - }, - "url-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "required": [ - "url" - ] - }, - "rate-limit-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "key": { - "$ref": "#/defs/rate-limit-key" - }, - "time": { - "type": "integer" - }, - "time-unit": { - "$ref": "#/defs/rate-limit-time-unit" - }, - "calls": { - "type": "integer" - } - }, - "required": [ - "key", - "time", - "time-unit", - "calls" - ] - }, - "rate-limit-key": { - "type": "object", - "properties": { - "key-type": { - "$ref": "#/defs/rate-limit-key-type" - }, - "static-value": { - "type": "string" - } - }, - "required": [ - "key-type" - ] - }, - "rate-limit-key-type": { - "enum": [ - "User", - "IP", - "Global", - "Header", - "OAuth2Client" - ] - }, - "rate-limit-time-unit": { - "enum": [ - "Seconds", - "Minutes", - "Hours" - ] - }, - "container-image-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "image": { - "type": "string" - } - }, - "required": [ - "image" - ] - }, - "port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "port": { - "type": "integer" - } - }, - "required": [ - "port" - ] - } - } -} \ No newline at end of file diff --git a/calm/draft/2024-12/meta/units.json b/calm/draft/2024-12/meta/units.json deleted file mode 100644 index 74c1c1b4b..000000000 --- a/calm/draft/2024-12/meta/units.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2024-12/meta/units.json", - "title": "Common Architecture Language Model Units", - "defs": { - "time-unit": { - "type": "object", - "description": "A unit of time with a value and a unit type.", - "properties": { - "unit": { - "enum": [ - "nanoseconds", - "milliseconds", - "seconds", - "minutes", - "hours", - "days", - "weeks", - "months", - "years" - ], - "description": "The unit of time (e.g., seconds, minutes, hours)." - }, - "value": { - "type": "number", - "minimum": 0, - "description": "The numeric value representing the amount of time." - } - }, - "required": ["unit", "value"], - "additionalProperties": false, - "examples": [ - { - "unit": "seconds", - "value": 30 - }, - { - "unit": "minutes", - "value": 15 - }, - { - "unit": "hours", - "value": 1 - }, - { - "unit": "days", - "value": 7 - } - ] - }, - "cron-expression": { - "type": "string", - "title": "Cron Expression", - "description": "A valid Unix-style cron expression.", - "pattern": "^([0-5]?\\d)\\s([01]?\\d|2[0-3])\\s(3[01]|[12]\\d|0?[1-9])\\s(1[0-2]|0?[1-9])\\s([0-6])$", - "examples": [ - "0 0 * * 0", - "30 14 1 * 5", - "15 10 * * *" - ] - } - }, - "additionalProperties": false -} \ No newline at end of file diff --git a/calm/draft/2025-01/meta/calm.json b/calm/draft/2025-01/meta/calm.json deleted file mode 100644 index c21473e7a..000000000 --- a/calm/draft/2025-01/meta/calm.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2025-01/meta/calm.json", - - "$vocabulary": { - "https://json-schema.org/draft/2020-12/vocab/core": true, - "https://json-schema.org/draft/2020-12/vocab/applicator": true, - "https://json-schema.org/draft/2020-12/vocab/validation": true, - "https://json-schema.org/draft/2020-12/vocab/meta-data": true, - "https://json-schema.org/draft/2020-12/vocab/format-annotation": true, - "https://json-schema.org/draft/2020-12/vocab/content": true, - "https://calm.finos.org/draft/2025-01/meta/core.json": true - }, - "$dynamicAnchor": "meta", - - "title": "Common Architecture Language Model (CALM) Schema", - "allOf": [ - {"$ref": "https://json-schema.org/draft/2020-12/schema"}, - {"$ref": "https://calm.finos.org/draft/2025-01/meta/core.json"} - ] -} diff --git a/calm/draft/2025-01/meta/control-requirement.json b/calm/draft/2025-01/meta/control-requirement.json deleted file mode 100644 index 53481854a..000000000 --- a/calm/draft/2025-01/meta/control-requirement.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2025-01/meta/control-requirement.json", - "title": "Common Architecture Language Model Control Requirement", - "description": "Schema for defining control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "control-id": { - "type": "string", - "description": "The unique identifier of this control, which has the potential to be used for linking evidence" - }, - "name": { - "type": "string", - "description": "The name of the control requirement that provides contextual meaning within a given domain" - }, - "description": { - "type": "string", - "description": "A more detailed description of the control and information on what a developer needs to consider" - } - }, - "required": [ - "control-id", - "name", - "description" - ], - "examples": [ - { - "control-id": "CR-001", - "name": "Access Control", - "description": "Ensure that access to sensitive information is restricted." - } - ] -} \ No newline at end of file diff --git a/calm/draft/2025-01/meta/control.json b/calm/draft/2025-01/meta/control.json deleted file mode 100644 index 83e623bc4..000000000 --- a/calm/draft/2025-01/meta/control.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2025-01/meta/control.json", - "title": "Common Architecture Language Model Controls", - "description": "Controls model requirements for domains. For example, a security domain contains a series of control requirements", - "defs": { - "control-detail": { - "type": "object", - "properties": { - "control-requirement-url": { - "type": "string", - "description": "The requirement schema that specifies how a control should be defined" - }, - "control-config-url": { - "type": "string", - "description": "The configuration of how the control requirement schema is met" - } - }, - "required": [ - "control-requirement-url" - ] - }, - "controls": { - "type": "object", - "patternProperties": { - "^[a-zA-Z0-9-]+$": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "A description of a control and how it applies to a given architecture" - }, - "requirements": { - "type": "array", - "items": { - "$ref": "#/defs/control-detail" - } - } - }, - "required": [ - "description", - "requirements" - ] - } - } - } - } -} diff --git a/calm/draft/2025-01/meta/core.json b/calm/draft/2025-01/meta/core.json deleted file mode 100644 index 32704fcfa..000000000 --- a/calm/draft/2025-01/meta/core.json +++ /dev/null @@ -1,278 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2025-01/meta/core.json", - "title": "Common Architecture Language Model (CALM) Vocab", - "properties": { - "nodes": { - "type": "array", - "items": { - "$ref": "#/defs/node" - } - }, - "relationships": { - "type": "array", - "items": { - "$ref": "#/defs/relationship" - } - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "flows": { - "type": "array", - "items": { - "$ref": "flow.json#/defs/flow" - } - } - }, - "defs": { - "node": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "node-type": { - "$ref": "#/defs/node-type-definition" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "details": { - "type": "object", - "properties": { - "detailed-architecture": { - "type": "string" - }, - "required-pattern": { - "type": "string" - } - }, - "additionalProperties": false - }, - "data-classification": { - "$ref": "#/defs/data-classification" - }, - "run-as": { - "type": "string" - }, - "instance": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "$ref": "interface.json#/defs/interface-type" - } - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "node-type", - "name", - "description" - ], - "additionalProperties": true - }, - "relationship": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "relationship-type": { - "type": "object", - "properties": { - "interacts": { - "$ref": "#/defs/interacts-type" - }, - "connects": { - "$ref": "#/defs/connects-type" - }, - "deployed-in": { - "$ref": "#/defs/deployed-in-type" - }, - "composed-of": { - "$ref": "#/defs/composed-of-type" - } - }, - "oneOf": [ - { - "required": [ - "deployed-in" - ] - }, - { - "required": [ - "composed-of" - ] - }, - { - "required": [ - "interacts" - ] - }, - { - "required": [ - "connects" - ] - } - ] - }, - "protocol": { - "$ref": "#/defs/protocol" - }, - "authentication": { - "$ref": "#/defs/authentication" - }, - "metadata": { - "$ref": "#/defs/metadata" - }, - "controls": { - "$ref": "control.json#/defs/controls" - } - }, - "required": [ - "unique-id", - "relationship-type" - ], - "additionalProperties": true - }, - "data-classification": { - "enum": [ - "Public", - "Confidential", - "Highly Restricted", - "MNPI", - "PII" - ] - }, - "protocol": { - "enum": [ - "HTTP", - "HTTPS", - "FTP", - "SFTP", - "JDBC", - "WebSocket", - "SocketIO", - "LDAP", - "AMQP", - "TLS", - "mTLS", - "TCP" - ] - }, - "authentication": { - "enum": [ - "Basic", - "OAuth2", - "Kerberos", - "SPNEGO", - "Certificate" - ] - }, - "node-type-definition": { - "enum": [ - "actor", - "ecosystem", - "system", - "service", - "database", - "network", - "ldap", - "webclient", - "data-asset" - ] - }, - "interacts-type": { - "type": "object", - "required": [ - "actor", - "nodes" - ], - "properties": { - "actor": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "connects-type": { - "type": "object", - "properties": { - "source": { - "$ref": "interface.json#/defs/node-interface" - }, - "destination": { - "$ref": "interface.json#/defs/node-interface" - } - }, - "required": [ - "source", - "destination" - ] - }, - "deployed-in-type": { - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "composed-of-type": { - "required": [ - "container", - "nodes" - ], - "type": "object", - "properties": { - "container": { - "type": "string" - }, - "nodes": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - } - } -} \ No newline at end of file diff --git a/calm/draft/2025-01/meta/evidence.json b/calm/draft/2025-01/meta/evidence.json deleted file mode 100644 index 900201a78..000000000 --- a/calm/draft/2025-01/meta/evidence.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2025-01/meta/evidence.json", - "title": "Common Architecture Language Model Evidence", - "description": "Schema for defining evidence for control requirements within the Common Architecture Language Model.", - "type": "object", - "properties": { - "evidence": { - "type": "object", - "properties": { - "unique-id": { - "type": "string", - "description": "CALM unique-id for future linking and uniquely defining this evidence" - }, - "evidence-paths": { - "type": "array", - "description": "Paths to the evidence relating to a specific control", - "items": { - "type": "string" - } - }, - "control-configuration-url": { - "type": "string", - "description": "URI for the control configuration this evidence relates to" - } - }, - "required":[ - "unique-id", - "evidence-paths", - "control-configuration-url" - ] - } - }, - "required": [ - "evidence" - ] -} \ No newline at end of file diff --git a/calm/draft/2025-01/meta/flow.json b/calm/draft/2025-01/meta/flow.json deleted file mode 100644 index 97f0e650d..000000000 --- a/calm/draft/2025-01/meta/flow.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2025-01/meta/flow.json", - "title": "Business Flow Model", - "description": "Defines business flows that relate to technical architectures, allowing mapping of flows to technical components and attaching control requirements.", - "defs": { - "transition": { - "type": "object", - "properties": { - "relationship-unique-id": { - "type": "string", - "description": "Unique identifier for the relationship in the architecture" - }, - "sequence-number": { - "type": "integer", - "description": "Indicates the sequence of the relationship in the flow" - }, - "summary": { - "type": "string", - "description": "Functional summary of what is happening in the transition" - }, - "direction": { - "enum": [ - "source-to-destination", - "destination-to-source" - ], - "default": "source-to-destination" - }, - "required": [ - "relationship-unique-id", - "sequence-number", - "summary" - ] - } - }, - "metadata": { - "type": "array", - "items": { - "type": "object" - } - }, - "flow": { - "type": "object", - "properties": { - "unique-id": { - "type": "string", - "description": "Unique identifier for the flow" - }, - "name": { - "type": "string", - "description": "Descriptive name for the business flow" - }, - "description": { - "type": "string", - "description": "Detailed description of the flow's purpose" - }, - "requirement-url": { - "type": "string", - "description": "Link to a detailed requirement document" - }, - "transitions": { - "type": "array", - "items": { - "$ref": "#/defs/transition" - }, - "minItems": 1 - }, - "controls": { - "$ref": "control.json#/defs/controls" - }, - "metadata": { - "$ref": "#/defs/metadata" - } - }, - "required": [ - "unique-id", - "name", - "description", - "transitions" - ] - } - } -} - diff --git a/calm/draft/2025-01/meta/interface.json b/calm/draft/2025-01/meta/interface.json deleted file mode 100644 index 3862a0e03..000000000 --- a/calm/draft/2025-01/meta/interface.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2025-01/meta/interface.json", - "title": "Common Architecture Language Model Interfaces", - "defs": { - "interface-type": { - "type": "object", - "properties": { - "unique-id": { - "type": "string" - } - }, - "required": [ - "unique-id" - ] - }, - "node-interface": { - "type": "object", - "properties": { - "node": { - "type": "string" - }, - "interfaces": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "node" - ] - }, - "host-port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer" - } - }, - "required": [ - "host", - "port" - ] - }, - "hostname-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "hostname": { - "type": "string" - } - }, - "required": [ - "hostname" - ] - }, - "path-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "path": { - "type": "string" - } - }, - "required": [ - "path" - ] - }, - "oauth2-audience-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "audiences": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - }, - "required": [ - "audiences" - ] - }, - "url-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "required": [ - "url" - ] - }, - "rate-limit-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "key": { - "$ref": "#/defs/rate-limit-key" - }, - "time": { - "type": "integer" - }, - "time-unit": { - "$ref": "#/defs/rate-limit-time-unit" - }, - "calls": { - "type": "integer" - } - }, - "required": [ - "key", - "time", - "time-unit", - "calls" - ] - }, - "rate-limit-key": { - "type": "object", - "properties": { - "key-type": { - "$ref": "#/defs/rate-limit-key-type" - }, - "static-value": { - "type": "string" - } - }, - "required": [ - "key-type" - ] - }, - "rate-limit-key-type": { - "enum": [ - "User", - "IP", - "Global", - "Header", - "OAuth2Client" - ] - }, - "rate-limit-time-unit": { - "enum": [ - "Seconds", - "Minutes", - "Hours" - ] - }, - "container-image-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "image": { - "type": "string" - } - }, - "required": [ - "image" - ] - }, - "port-interface": { - "$ref": "#/defs/interface-type", - "type": "object", - "properties": { - "port": { - "type": "integer" - } - }, - "required": [ - "port" - ] - } - } -} \ No newline at end of file diff --git a/calm/draft/2025-01/meta/units.json b/calm/draft/2025-01/meta/units.json deleted file mode 100644 index e1a0855b4..000000000 --- a/calm/draft/2025-01/meta/units.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://calm.finos.org/draft/2025-01/meta/units.json", - "title": "Common Architecture Language Model Units", - "defs": { - "time-unit": { - "type": "object", - "description": "A unit of time with a value and a unit type.", - "properties": { - "unit": { - "enum": [ - "nanoseconds", - "milliseconds", - "seconds", - "minutes", - "hours", - "days", - "weeks", - "months", - "years" - ], - "description": "The unit of time (e.g., seconds, minutes, hours)." - }, - "value": { - "type": "number", - "minimum": 0, - "description": "The numeric value representing the amount of time." - } - }, - "required": ["unit", "value"], - "additionalProperties": false, - "examples": [ - { - "unit": "seconds", - "value": 30 - }, - { - "unit": "minutes", - "value": 15 - }, - { - "unit": "hours", - "value": 1 - }, - { - "unit": "days", - "value": 7 - } - ] - }, - "cron-expression": { - "type": "string", - "title": "Cron Expression", - "description": "A valid Unix-style cron expression.", - "pattern": "^([0-5]?\\d)\\s([01]?\\d|2[0-3])\\s(3[01]|[12]\\d|0?[1-9])\\s(1[0-2]|0?[1-9])\\s([0-6])$", - "examples": [ - "0 0 * * 0", - "30 14 1 * 5", - "15 10 * * *" - ] - } - }, - "additionalProperties": false -} \ No newline at end of file