feat: harden community production foundation through story 1.5
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://crank.local/schemas/capability-baseline.schema.json",
|
||||
"title": "Crank Community Capability Baseline Manifest",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"schema_version",
|
||||
"baseline_version",
|
||||
"artifacts"
|
||||
],
|
||||
"properties": {
|
||||
"schema_version": {
|
||||
"const": 1
|
||||
},
|
||||
"baseline_version": {
|
||||
"type": "string",
|
||||
"pattern": "^[0-9]{4}\\.[0-9]{2}\\.[0-9]{2}\\.[1-9][0-9]*$"
|
||||
},
|
||||
"artifacts": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"maxItems": 5,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"$ref": "#/$defs/artifact"
|
||||
}
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"artifact": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"kind",
|
||||
"path",
|
||||
"sha256"
|
||||
],
|
||||
"properties": {
|
||||
"kind": {
|
||||
"enum": [
|
||||
"inventory",
|
||||
"required_surfaces",
|
||||
"taxonomy",
|
||||
"checklist",
|
||||
"results"
|
||||
]
|
||||
},
|
||||
"path": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 1024,
|
||||
"pattern": "^(?!/)(?!.*//)(?!.*(?:^|/)\\.\\.?($|/))(?!.*\\\\).+$"
|
||||
},
|
||||
"sha256": {
|
||||
"type": "string",
|
||||
"pattern": "^[0-9a-f]{64}$"
|
||||
}
|
||||
}
|
||||
},
|
||||
"taxonomy": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["baseline_version", "implementation_statuses", "execution_verdicts", "evidence_modes", "full_pass"],
|
||||
"properties": {
|
||||
"baseline_version": {"type": "string", "pattern": "^[0-9]{4}\\.[0-9]{2}\\.[0-9]{2}\\.[1-9][0-9]*$"},
|
||||
"implementation_statuses": {"type": "array", "minItems": 4, "maxItems": 4, "uniqueItems": true, "items": {"enum": ["implemented", "planned", "gap", "blocked"]}},
|
||||
"execution_verdicts": {"type": "array", "minItems": 6, "maxItems": 6, "uniqueItems": true, "items": {"enum": ["pass", "fail", "blocked", "skipped", "flaky", "not_run"]}},
|
||||
"evidence_modes": {"type": "array", "minItems": 2, "maxItems": 2, "uniqueItems": true, "items": {"enum": ["automated", "manual_only"]}},
|
||||
"manual_only_rule": {"type": "string", "minLength": 1, "maxLength": 2048},
|
||||
"non_pass_rule": {"type": "string", "minLength": 1, "maxLength": 2048},
|
||||
"full_pass": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["implementation_status", "execution_verdict", "evidence_mode"],
|
||||
"properties": {
|
||||
"implementation_status": {"const": "implemented"},
|
||||
"execution_verdict": {"const": "pass"},
|
||||
"evidence_mode": {"const": "automated"}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"run": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["id", "command_id", "flow_ids", "execution_verdict", "evidence_mode", "accepted", "source_report_sha256", "source_revision", "environment_class", "collector"],
|
||||
"properties": {
|
||||
"id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"command_id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"flow_ids": {"type": "array", "minItems": 1, "maxItems": 1000, "uniqueItems": true, "items": {"type": "string", "minLength": 1, "maxLength": 128}},
|
||||
"execution_verdict": {"enum": ["pass", "fail", "blocked", "skipped", "flaky", "not_run"]},
|
||||
"evidence_mode": {"enum": ["automated", "manual_only"]},
|
||||
"accepted": {"type": "boolean"},
|
||||
"source_report_sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
|
||||
"source_revision": {"type": "string", "pattern": "^[0-9a-f]{40}$"},
|
||||
"environment_class": {"type": "string", "minLength": 1, "maxLength": 64},
|
||||
"collector": {"const": "capability-baseline-collector-v1"},
|
||||
"summary": {"type": "object", "maxProperties": 16},
|
||||
"safe_outcome": {"type": "object", "maxProperties": 16}
|
||||
}
|
||||
},
|
||||
"defect": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["id", "severity", "steps", "contract", "owner", "flow_ids", "next_action"],
|
||||
"properties": {
|
||||
"id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"severity": {"enum": ["Critical", "High", "Medium", "Low"]},
|
||||
"steps": {"type": "array", "minItems": 1, "maxItems": 20, "items": {"type": "string", "minLength": 1, "maxLength": 1024}},
|
||||
"contract": {"type": "string", "minLength": 1, "maxLength": 2048},
|
||||
"owner": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"flow_ids": {"type": "array", "minItems": 1, "maxItems": 1000, "uniqueItems": true, "items": {"type": "string", "minLength": 1, "maxLength": 128}},
|
||||
"next_action": {"type": "string", "minLength": 1, "maxLength": 2048}
|
||||
}
|
||||
},
|
||||
"manual_result": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["check_id", "evidence_mode", "execution_verdict", "flow_ids", "next_evidence"],
|
||||
"properties": {
|
||||
"check_id": {"type": "string", "pattern": "^UI-[0-9]{2}$"},
|
||||
"evidence_mode": {"const": "manual_only"},
|
||||
"execution_verdict": {"enum": ["pass", "fail", "blocked", "skipped", "flaky", "not_run"]},
|
||||
"flow_ids": {"type": "array", "minItems": 1, "maxItems": 1000, "uniqueItems": true, "items": {"type": "string", "minLength": 1, "maxLength": 128}},
|
||||
"next_evidence": {"type": "string", "minLength": 1, "maxLength": 2048}
|
||||
}
|
||||
},
|
||||
"results": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["baseline_version", "source_revision", "environment_class", "runs", "manual_results", "defects"],
|
||||
"properties": {
|
||||
"baseline_version": {"type": "string", "maxLength": 32},
|
||||
"source_revision": {"type": "string", "pattern": "^[0-9a-f]{40}$"},
|
||||
"environment_class": {"type": "string", "minLength": 1, "maxLength": 64},
|
||||
"runs": {"type": "array", "maxItems": 1000, "items": {"$ref": "#/$defs/run"}},
|
||||
"manual_results": {"type": "array", "maxItems": 1000, "items": {"$ref": "#/$defs/manual_result"}},
|
||||
"defects": {"type": "array", "maxItems": 1000, "items": {"$ref": "#/$defs/defect"}}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://crank.local/schemas/capability-inventory.schema.json",
|
||||
"title": "Crank Community Capability Inventory",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"schema_version",
|
||||
"product",
|
||||
"flows"
|
||||
],
|
||||
"properties": {
|
||||
"schema_version": {
|
||||
"const": 1
|
||||
},
|
||||
"product": {
|
||||
"const": "crank-community"
|
||||
},
|
||||
"flows": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"maxItems": 10000,
|
||||
"items": {
|
||||
"$ref": "#/$defs/flow"
|
||||
}
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"flow": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"type",
|
||||
"requirements",
|
||||
"user_outcome",
|
||||
"owner",
|
||||
"status",
|
||||
"capabilities",
|
||||
"evidence"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 128,
|
||||
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"ui",
|
||||
"api",
|
||||
"mcp"
|
||||
]
|
||||
},
|
||||
"requirements": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"maxItems": 64,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 128,
|
||||
"pattern": "^FR-[1-9][0-9]*$"
|
||||
}
|
||||
},
|
||||
"user_outcome": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 4096,
|
||||
"pattern": "[\\s\\S]*\\S[\\s\\S]*"
|
||||
},
|
||||
"owner": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 256,
|
||||
"pattern": "[\\s\\S]*\\S[\\s\\S]*"
|
||||
},
|
||||
"status": {
|
||||
"enum": [
|
||||
"implemented",
|
||||
"planned",
|
||||
"gap",
|
||||
"blocked"
|
||||
]
|
||||
},
|
||||
"capabilities": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"maxItems": 16,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"enum": [
|
||||
"tools",
|
||||
"resources",
|
||||
"prompts",
|
||||
"tasks",
|
||||
"load_runs"
|
||||
]
|
||||
}
|
||||
},
|
||||
"evidence": {
|
||||
"$ref": "#/$defs/evidence"
|
||||
},
|
||||
"notes": {
|
||||
"type": "string",
|
||||
"maxLength": 4096
|
||||
}
|
||||
}
|
||||
},
|
||||
"evidence": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"automated",
|
||||
"manual"
|
||||
],
|
||||
"properties": {
|
||||
"automated": {
|
||||
"$ref": "#/$defs/evidencePaths"
|
||||
},
|
||||
"manual": {
|
||||
"$ref": "#/$defs/evidencePaths"
|
||||
}
|
||||
}
|
||||
},
|
||||
"evidencePaths": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"maxItems": 64,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 1024,
|
||||
"pattern": "^(?!/)(?!.*//)(?!.*(?:^|/)\\.\\.?($|/))(?!.*\\\\).+$"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"schema_version":1,"sequence":[{"backfill":{"kind":"none"},"checksum":"crank-community-baseline-v1","compatibility":"legacy-baseline","contract_evidence":null,"name":"community-baseline-v1","owner":"crank-registry","phase":"expand","readable_schema_max":1,"readable_schema_min":1,"source_digest":"eb1656fc5b4b5be9ee390d237d1d58e4b2274ae5ba9b7ba06a2f3f860dfda675","transactional":true,"version":1},{"backfill":{"kind":"none"},"checksum":"1908b97ca7fe8a85d146b0eebf007d5018a9ff406cb099614270f3428ec1db48","compatibility":"n-minus-one-readable","contract_evidence":null,"name":"legacy-consolidation-v2","owner":"crank-registry","phase":"expand","readable_schema_max":2,"readable_schema_min":1,"source_digest":"1908b97ca7fe8a85d146b0eebf007d5018a9ff406cb099614270f3428ec1db48","transactional":true,"version":2},{"backfill":{"kind":"none"},"checksum":"36487625503a8d4d8f18d5771c3c9b6705f845e267acbfcb7244c330f640cd94","compatibility":"n-minus-one-readable","contract_evidence":null,"name":"request-trace-identity-v3","owner":"crank-registry","phase":"expand","readable_schema_max":3,"readable_schema_min":2,"source_digest":"36487625503a8d4d8f18d5771c3c9b6705f845e267acbfcb7244c330f640cd94","transactional":true,"version":3}]}
|
||||
@@ -0,0 +1,898 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"generated_by": "crank-config",
|
||||
"fields": [
|
||||
{
|
||||
"semantic_path": "database.url",
|
||||
"env_name": "CRANK_DATABASE_URL",
|
||||
"process": "shared",
|
||||
"value_type": "url",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": "legacy URL form",
|
||||
"rules": [
|
||||
"takes precedence over generated default-valued POSTGRES_HOST/PORT/DB/USER/PASSWORD",
|
||||
"conflicts with any non-default decomposed database value"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.host",
|
||||
"env_name": "POSTGRES_HOST",
|
||||
"process": "shared",
|
||||
"value_type": "string",
|
||||
"unit": null,
|
||||
"default": "postgres",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.port",
|
||||
"env_name": "POSTGRES_PORT",
|
||||
"process": "shared",
|
||||
"value_type": "u16",
|
||||
"unit": "port",
|
||||
"default": "5432",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 65535,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.name",
|
||||
"env_name": "POSTGRES_DB",
|
||||
"process": "shared",
|
||||
"value_type": "string",
|
||||
"unit": null,
|
||||
"default": "crank",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.user",
|
||||
"env_name": "POSTGRES_USER",
|
||||
"process": "shared",
|
||||
"value_type": "string",
|
||||
"unit": null,
|
||||
"default": "crank",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.password",
|
||||
"env_name": "POSTGRES_PASSWORD",
|
||||
"process": "shared",
|
||||
"value_type": "secret",
|
||||
"unit": null,
|
||||
"default": "configured",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.pool.max_connections",
|
||||
"env_name": "POSTGRES_MAX_CONNECTIONS",
|
||||
"process": "shared",
|
||||
"value_type": "u32",
|
||||
"unit": "connections",
|
||||
"default": "20",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 1024,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": [
|
||||
"must be >= min_connections"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.pool.min_connections",
|
||||
"env_name": "POSTGRES_MIN_CONNECTIONS",
|
||||
"process": "shared",
|
||||
"value_type": "u32",
|
||||
"unit": "connections",
|
||||
"default": "2",
|
||||
"required": false,
|
||||
"minimum": 0,
|
||||
"maximum": 1024,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": [
|
||||
"must be <= max_connections"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.pool.acquire_timeout_ms",
|
||||
"env_name": "POSTGRES_ACQUIRE_TIMEOUT_MS",
|
||||
"process": "shared",
|
||||
"value_type": "u64",
|
||||
"unit": "milliseconds",
|
||||
"default": "5000",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 300000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.pool.idle_timeout_ms",
|
||||
"env_name": "POSTGRES_IDLE_TIMEOUT_MS",
|
||||
"process": "shared",
|
||||
"value_type": "u64",
|
||||
"unit": "milliseconds",
|
||||
"default": "600000",
|
||||
"required": false,
|
||||
"minimum": 1000,
|
||||
"maximum": 86400000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "database.pool.max_lifetime_ms",
|
||||
"env_name": "POSTGRES_MAX_LIFETIME_MS",
|
||||
"process": "shared",
|
||||
"value_type": "u64",
|
||||
"unit": "milliseconds",
|
||||
"default": "1800000",
|
||||
"required": false,
|
||||
"minimum": 1000,
|
||||
"maximum": 86400000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "runtime.master_key",
|
||||
"env_name": "CRANK_MASTER_KEY",
|
||||
"process": "shared",
|
||||
"value_type": "secret",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": true,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "runtime.base_url",
|
||||
"env_name": "CRANK_BASE_URL",
|
||||
"process": "shared",
|
||||
"value_type": "url",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "runtime.max_concurrent_unary",
|
||||
"env_name": "CRANK_RUNTIME_MAX_CONCURRENT_UNARY",
|
||||
"process": "shared",
|
||||
"value_type": "u32",
|
||||
"unit": "requests",
|
||||
"default": "64",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 65535,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "cache.backend",
|
||||
"env_name": "CRANK_CACHE_BACKEND",
|
||||
"process": "shared",
|
||||
"value_type": "enum",
|
||||
"unit": null,
|
||||
"default": "memory",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": "redis value is deprecated in favor of valkey",
|
||||
"rules": [
|
||||
"external backend requires cache.url"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "cache.url",
|
||||
"env_name": "CRANK_CACHE_URL",
|
||||
"process": "shared",
|
||||
"value_type": "url",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": [
|
||||
"forbidden with memory backend"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "cache.default_ttl_ms",
|
||||
"env_name": "CRANK_CACHE_DEFAULT_TTL_MS",
|
||||
"process": "shared",
|
||||
"value_type": "u64",
|
||||
"unit": "milliseconds",
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 86400000,
|
||||
"sensitivity": "public",
|
||||
"mode": "deprecated_no_effect",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "outbound.allowed_hosts",
|
||||
"env_name": "CRANK_OUTBOUND_ALLOWED_HOSTS",
|
||||
"process": "shared",
|
||||
"value_type": "host_list",
|
||||
"unit": null,
|
||||
"default": "",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "outbound.denied_hosts",
|
||||
"env_name": "CRANK_OUTBOUND_DENIED_HOSTS",
|
||||
"process": "shared",
|
||||
"value_type": "host_list",
|
||||
"unit": null,
|
||||
"default": "",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": [
|
||||
"deny entries override allow entries"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "outbound.max_response_bytes",
|
||||
"env_name": "CRANK_OUTBOUND_MAX_RESPONSE_BYTES",
|
||||
"process": "shared",
|
||||
"value_type": "u64",
|
||||
"unit": "bytes",
|
||||
"default": "4194304",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 67108864,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.environment",
|
||||
"env_name": "CRANK_ENVIRONMENT",
|
||||
"process": "shared",
|
||||
"value_type": "label",
|
||||
"unit": null,
|
||||
"default": "development",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.log_filter",
|
||||
"env_name": "CRANK_LOG_LEVEL",
|
||||
"process": "shared",
|
||||
"value_type": "string",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.sentry_dsn",
|
||||
"env_name": "CRANK_SENTRY_DSN",
|
||||
"process": "shared",
|
||||
"value_type": "url",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.metrics.enabled",
|
||||
"env_name": "CRANK_METRICS_ENABLED",
|
||||
"process": "shared",
|
||||
"value_type": "bool",
|
||||
"unit": null,
|
||||
"default": "true",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": "yes/no/on/off spellings are deprecated",
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.metrics.bearer_token",
|
||||
"env_name": "CRANK_METRICS_BEARER_TOKEN",
|
||||
"process": "shared",
|
||||
"value_type": "secret",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": [
|
||||
"required when an enabled metrics bind is non-loopback"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.endpoint",
|
||||
"env_name": "OTEL_EXPORTER_OTLP_ENDPOINT",
|
||||
"process": "shared",
|
||||
"value_type": "url",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.traces_endpoint",
|
||||
"env_name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
|
||||
"process": "shared",
|
||||
"value_type": "url",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": [
|
||||
"overrides generic OTLP endpoint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.protocol",
|
||||
"env_name": "OTEL_EXPORTER_OTLP_PROTOCOL",
|
||||
"process": "shared",
|
||||
"value_type": "enum",
|
||||
"unit": null,
|
||||
"default": "http/protobuf",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.traces_protocol",
|
||||
"env_name": "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL",
|
||||
"process": "shared",
|
||||
"value_type": "enum",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.timeout",
|
||||
"env_name": "OTEL_EXPORTER_OTLP_TIMEOUT",
|
||||
"process": "shared",
|
||||
"value_type": "duration",
|
||||
"unit": "milliseconds",
|
||||
"default": "10000",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 300000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.traces_timeout",
|
||||
"env_name": "OTEL_EXPORTER_OTLP_TRACES_TIMEOUT",
|
||||
"process": "shared",
|
||||
"value_type": "duration",
|
||||
"unit": "milliseconds",
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 300000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.headers",
|
||||
"env_name": "OTEL_EXPORTER_OTLP_HEADERS",
|
||||
"process": "shared",
|
||||
"value_type": "headers",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.traces_headers",
|
||||
"env_name": "OTEL_EXPORTER_OTLP_TRACES_HEADERS",
|
||||
"process": "shared",
|
||||
"value_type": "headers",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.max_queue_size",
|
||||
"env_name": "OTEL_BSP_MAX_QUEUE_SIZE",
|
||||
"process": "shared",
|
||||
"value_type": "u32",
|
||||
"unit": "spans",
|
||||
"default": "2048",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 65536,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.max_export_batch_size",
|
||||
"env_name": "OTEL_BSP_MAX_EXPORT_BATCH_SIZE",
|
||||
"process": "shared",
|
||||
"value_type": "u32",
|
||||
"unit": "spans",
|
||||
"default": "512",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 65536,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": [
|
||||
"must be <= max_queue_size"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.schedule_delay",
|
||||
"env_name": "OTEL_BSP_SCHEDULE_DELAY",
|
||||
"process": "shared",
|
||||
"value_type": "duration",
|
||||
"unit": "milliseconds",
|
||||
"default": "5000",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 300000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "observability.otlp.export_timeout",
|
||||
"env_name": "OTEL_BSP_EXPORT_TIMEOUT",
|
||||
"process": "shared",
|
||||
"value_type": "duration",
|
||||
"unit": "milliseconds",
|
||||
"default": "30000",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 300000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.bind",
|
||||
"env_name": "CRANK_ADMIN_BIND",
|
||||
"process": "admin_api",
|
||||
"value_type": "socket",
|
||||
"unit": null,
|
||||
"default": "0.0.0.0:3001",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.metrics_bind",
|
||||
"env_name": "CRANK_ADMIN_METRICS_BIND",
|
||||
"process": "admin_api",
|
||||
"value_type": "socket",
|
||||
"unit": null,
|
||||
"default": "127.0.0.1:9464",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.storage_root",
|
||||
"env_name": "CRANK_STORAGE_ROOT",
|
||||
"process": "admin_api",
|
||||
"value_type": "absolute_path",
|
||||
"unit": null,
|
||||
"default": "/var/lib/crank/storage",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.rate_limit.rps",
|
||||
"env_name": "CRANK_ADMIN_RATE_LIMIT_RPS",
|
||||
"process": "admin_api",
|
||||
"value_type": "u32",
|
||||
"unit": "requests_per_second",
|
||||
"default": "30",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 100000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.rate_limit.burst",
|
||||
"env_name": "CRANK_ADMIN_RATE_LIMIT_BURST",
|
||||
"process": "admin_api",
|
||||
"value_type": "u32",
|
||||
"unit": "requests",
|
||||
"default": "60",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 1000000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": [
|
||||
"must be >= admin rate RPS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.invocation_log_retention_days",
|
||||
"env_name": "CRANK_INVOCATION_LOG_RETENTION_DAYS",
|
||||
"process": "admin_api",
|
||||
"value_type": "u32",
|
||||
"unit": "days",
|
||||
"default": "30",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 36500,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.session.secret",
|
||||
"env_name": "CRANK_SESSION_SECRET",
|
||||
"process": "admin_api",
|
||||
"value_type": "secret",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": true,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.password_pepper",
|
||||
"env_name": "CRANK_PASSWORD_PEPPER",
|
||||
"process": "admin_api",
|
||||
"value_type": "secret",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": true,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.session.ttl_hours",
|
||||
"env_name": "CRANK_SESSION_TTL_HOURS",
|
||||
"process": "admin_api",
|
||||
"value_type": "u32",
|
||||
"unit": "hours",
|
||||
"default": "24",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 8760,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.trust_forwarded_headers",
|
||||
"env_name": "CRANK_TRUST_FORWARDED_HEADERS",
|
||||
"process": "admin_api",
|
||||
"value_type": "bool",
|
||||
"unit": null,
|
||||
"default": "false",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": "yes/no/on/off spellings are deprecated",
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.bootstrap.email",
|
||||
"env_name": "CRANK_BOOTSTRAP_ADMIN_EMAIL",
|
||||
"process": "admin_api",
|
||||
"value_type": "string",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": true,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.bootstrap.password",
|
||||
"env_name": "CRANK_BOOTSTRAP_ADMIN_PASSWORD",
|
||||
"process": "admin_api",
|
||||
"value_type": "secret",
|
||||
"unit": null,
|
||||
"default": null,
|
||||
"required": true,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "secret",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.bootstrap.display_name",
|
||||
"env_name": "CRANK_BOOTSTRAP_ADMIN_DISPLAY_NAME",
|
||||
"process": "admin_api",
|
||||
"value_type": "string",
|
||||
"unit": null,
|
||||
"default": "Crank Owner",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "admin.demo_seed",
|
||||
"env_name": "CRANK_DEMO_SEED",
|
||||
"process": "admin_api",
|
||||
"value_type": "bool",
|
||||
"unit": null,
|
||||
"default": "false",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": "yes/no/on/off spellings are deprecated",
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "mcp.bind",
|
||||
"env_name": "CRANK_MCP_BIND",
|
||||
"process": "mcp_server",
|
||||
"value_type": "socket",
|
||||
"unit": null,
|
||||
"default": "0.0.0.0:3002",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "mcp.metrics_bind",
|
||||
"env_name": "CRANK_MCP_METRICS_BIND",
|
||||
"process": "mcp_server",
|
||||
"value_type": "socket",
|
||||
"unit": null,
|
||||
"default": "127.0.0.1:9465",
|
||||
"required": false,
|
||||
"minimum": null,
|
||||
"maximum": null,
|
||||
"sensitivity": "internal",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "mcp.refresh_ms",
|
||||
"env_name": "CRANK_MCP_REFRESH_MS",
|
||||
"process": "mcp_server",
|
||||
"value_type": "u64",
|
||||
"unit": "milliseconds",
|
||||
"default": "5000",
|
||||
"required": false,
|
||||
"minimum": 100,
|
||||
"maximum": 3600000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "mcp.rate_limit.rps",
|
||||
"env_name": "CRANK_MCP_RATE_LIMIT_RPS",
|
||||
"process": "mcp_server",
|
||||
"value_type": "u32",
|
||||
"unit": "requests_per_second",
|
||||
"default": "60",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 100000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
},
|
||||
{
|
||||
"semantic_path": "mcp.rate_limit.burst",
|
||||
"env_name": "CRANK_MCP_RATE_LIMIT_BURST",
|
||||
"process": "mcp_server",
|
||||
"value_type": "u32",
|
||||
"unit": "requests",
|
||||
"default": "120",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 1000000,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": [
|
||||
"must be >= MCP rate RPS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"semantic_path": "runtime.max_concurrent_sessions",
|
||||
"env_name": "CRANK_RUNTIME_MAX_CONCURRENT_SESSIONS",
|
||||
"process": "mcp_server",
|
||||
"value_type": "u32",
|
||||
"unit": "sessions",
|
||||
"default": "16",
|
||||
"required": false,
|
||||
"minimum": 1,
|
||||
"maximum": 65535,
|
||||
"sensitivity": "public",
|
||||
"mode": "effective",
|
||||
"compatibility": null,
|
||||
"rules": []
|
||||
}
|
||||
],
|
||||
"deployment_only_fields": [
|
||||
"COMPOSE_PROJECT_NAME",
|
||||
"POSTGRES_PUBLISH_BIND",
|
||||
"POSTGRES_PUBLISH_PORT",
|
||||
"CRANK_ADMIN_API_IMAGE",
|
||||
"CRANK_MCP_SERVER_IMAGE",
|
||||
"CRANK_UI_IMAGE",
|
||||
"CRANK_PUBLISH_BIND",
|
||||
"CRANK_ADMIN_PUBLISH_PORT",
|
||||
"CRANK_MCP_PUBLISH_PORT",
|
||||
"CRANK_UI_PUBLISH_PORT",
|
||||
"VALKEY_PUBLISH_BIND",
|
||||
"VALKEY_PUBLISH_PORT"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user