51c3edf458
SSM path /acdl/{env}/{contractId}/{output} → /nova/... across
core/output_publisher + contract resolver + consumer docs. New
scripts/migrate_ssm_paths.py (copy/verify/delete, dry-run default).
AWS tag keys acdl:owner|environment|contract|cost-center|ref → nova:*
across terraform tagging + ABAC session policies (iam:ResourceTag/acdl:*
→ iam:ResourceTag/nova:*). nova_tagging.py hard mode (D-109 warn→hard).
tagging-standard.json tag-key values → nova:*. New
scripts/untag_acdl_keys.py (remove old acdl:* tags, dry-run default).
Test fixtures updated; pytest + run_ci.sh PASS.
---ci---
project: acdl
phase: 3
milestone: v1.15
status: execute
---/ci---
50 lines
2.0 KiB
JSON
50 lines
2.0 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://nova.dev/schemas/tagging-standard.json",
|
|
"title": "Nova Tagging Standard",
|
|
"description": "Required tags for all taggable AWS resources created by the platform. Enforced by a Checkov custom Python rule (adapters/terraform/policy/custom_rules/nova_tagging.py, D-109 hard mode in P3 — tag-key values are nova:*; legacy acdl:* tag keys are rejected by the hard-mode rule). The checkov adapter maps NOVA_TAG_NAMING as a real rule (D-054, D-043 closure; renamed from ACDL_TAG_NAMING in P2, REQ-158).",
|
|
"type": "object",
|
|
"properties": {
|
|
"required_tags": {
|
|
"type": "object",
|
|
"description": "The set of tags that must be present on every taggable AWS resource.",
|
|
"properties": {
|
|
"nova:owner": {
|
|
"type": "string",
|
|
"description": "The consumer repository name (e.g. 'consumer-repo'). Injected from the ABAC session."
|
|
},
|
|
"nova:contract": {
|
|
"type": "string",
|
|
"description": "The contract ID (UUID)."
|
|
},
|
|
"nova:environment": {
|
|
"type": "string",
|
|
"enum": ["dev", "qa", "prod", "dr"],
|
|
"description": "The environment name."
|
|
},
|
|
"nova:cost-center": {
|
|
"type": "string",
|
|
"description": "The cost center (consumer-provided or platform-default 'nova-default')."
|
|
},
|
|
"nova:ref": {
|
|
"type": "string",
|
|
"description": "Optional reference tag (e.g. a change-request ID or external tracker)."
|
|
}
|
|
},
|
|
"required": ["nova:owner", "nova:contract", "nova:environment", "nova:cost-center"],
|
|
"additionalProperties": false
|
|
},
|
|
"default_values": {
|
|
"type": "object",
|
|
"description": "Default values used when the consumer does not supply the tag.",
|
|
"properties": {
|
|
"nova:cost-center": {
|
|
"type": "string",
|
|
"default": "nova-default"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"required": ["required_tags"],
|
|
"additionalProperties": false
|
|
} |