Merge milestone/v1.14-refinement — v1.14 complete (NFR Refinement: bug fixes, security, stubs, tests, docs; 20 phases + final; tag v1.13.24)
v1.14 NFR Refinement milestone complete. 20 execution phases (P1-P20) + 1 final (P21). All P1/P2 backlog from v1.11 review resolved. Security posture hardened (swallowed errors, account ID externalized, IAM scoped, schema validation, credential hygiene). Stubs resolved (kyverno --kube- version removed). 7 untested scripts gained coverage. Documentation synced (ARCHITECTURE v1.11-v1.14 addenda, stale @v1.6-1.9 -> @v1.13, GRILL G-005/G-008 resolved, COST.md window extended, D-083 deferral recorded). Platform VPC parameterized. 561 tests pass (was 528 at v1.13.2; +33). 22/22 capabilities Verified. 6 grill binding decisions (G-101..G-106) applied. 1 escalation (E-001) auto-resolved at full autonomy (D-101). ---ci--- project: acdl phase: 21 milestone: v1.14 status: complete ---/ci---
This commit is contained in:
@@ -96,4 +96,64 @@ def test_account_id_is_12_digits():
|
||||
for env_file in ENV_FILES:
|
||||
env = json.loads((ENV_DIR / env_file).read_text())
|
||||
assert len(env["account_id"]) == 12
|
||||
assert env["account_id"].isdigit()
|
||||
assert env["account_id"].isdigit()
|
||||
|
||||
|
||||
def test_v14_schema_rejects_undocumented_fields():
|
||||
"""v1.14 (REQ-145): additionalProperties: false rejects unknown fields."""
|
||||
schema = json.loads(SCHEMA.read_text())
|
||||
bad_env = {
|
||||
"name": "dev",
|
||||
"account_id": "123456789012",
|
||||
"region": "us-east-1",
|
||||
"state_backend": {"bucket": "test", "lock_table": "test"},
|
||||
"network": {"vpc_cidr": "10.0.0.0/16", "azs": ["us-east-1a"]},
|
||||
"runner_role_arn": "arn:aws:iam::123456789012:role/test",
|
||||
"autonomy": "full",
|
||||
"confidence_threshold": 0.5,
|
||||
"rogue_field": "should be rejected"
|
||||
}
|
||||
with pytest.raises(jsonschema.ValidationError, match="Additional properties are not allowed"):
|
||||
jsonschema.validate(bad_env, schema)
|
||||
|
||||
|
||||
def test_v14_schema_validates_bucket_name_format():
|
||||
"""v1.14 (REQ-145): state_backend.bucket must match S3 naming rules."""
|
||||
schema = json.loads(SCHEMA.read_text())
|
||||
bad_env = {
|
||||
"name": "dev", "account_id": "123456789012", "region": "us-east-1",
|
||||
"state_backend": {"bucket": "Invalid_Bucket!", "lock_table": "test"},
|
||||
"network": {"vpc_cidr": "10.0.0.0/16", "azs": ["us-east-1a"]},
|
||||
"runner_role_arn": "arn:aws:iam::123456789012:role/test",
|
||||
"autonomy": "full", "confidence_threshold": 0.5
|
||||
}
|
||||
with pytest.raises(jsonschema.ValidationError, match="does not match"):
|
||||
jsonschema.validate(bad_env, schema)
|
||||
|
||||
|
||||
def test_v14_schema_validates_arn_format():
|
||||
"""v1.14 (REQ-145): runner_role_arn must match ARN format."""
|
||||
schema = json.loads(SCHEMA.read_text())
|
||||
bad_env = {
|
||||
"name": "dev", "account_id": "123456789012", "region": "us-east-1",
|
||||
"state_backend": {"bucket": "test", "lock_table": "test"},
|
||||
"network": {"vpc_cidr": "10.0.0.0/16", "azs": ["us-east-1a"]},
|
||||
"runner_role_arn": "not-an-arn",
|
||||
"autonomy": "full", "confidence_threshold": 0.5
|
||||
}
|
||||
with pytest.raises(jsonschema.ValidationError, match="does not match"):
|
||||
jsonschema.validate(bad_env, schema)
|
||||
|
||||
|
||||
def test_v14_schema_validates_cidr_format():
|
||||
"""v1.14 (REQ-145): vpc_cidr must match CIDR format."""
|
||||
schema = json.loads(SCHEMA.read_text())
|
||||
bad_env = {
|
||||
"name": "dev", "account_id": "123456789012", "region": "us-east-1",
|
||||
"state_backend": {"bucket": "test", "lock_table": "test"},
|
||||
"network": {"vpc_cidr": "not-a-cidr", "azs": ["us-east-1a"]},
|
||||
"runner_role_arn": "arn:aws:iam::123456789012:role/test",
|
||||
"autonomy": "full", "confidence_threshold": 0.5
|
||||
}
|
||||
with pytest.raises(jsonschema.ValidationError, match="does not match"):
|
||||
jsonschema.validate(bad_env, schema)
|
||||
Reference in New Issue
Block a user