refactor(P57): contract surface redesign + rename + .yml repo-wide
Contract surface redesign: - New top-level fields: id (3-6 char acronym → stack.name), name (full → stack.title), infrastructure (map keyed by module name, replaces module:) - Drop uses: field (dead reference; version pin lives in CI workflow uses: line) - Drop top-level module/inputs (now nested under infrastructure map) - Per-module optional version (defaults to latest published from registry) - Multi-module contracts: one file deploys N modules in one pipeline run, resource IDs namespaced with module name to avoid collisions - stack.schema.json: add optional title field for display name Rename: - pipelines/deploy.yaml → pipelines/contract.yml (declarative spec, not a pipeline) - pipelines/ci.yaml → pipelines/ci.yml - All 44 .yaml files → .yml repo-wide (contracts, module examples, kyverno policies) - .acdl/contract.yaml → .acdl/contract.yml Resolver (core/contract_resolver.py): - Rewrite resolve() to loop infrastructure map, default version to latest, merge module fragments into one stack with namespaced resource IDs - _latest_version() picks highest non-deprecated from registry - _namespace_resources() prefixes IDs + rewrites ref: expressions for multi-module - Single-module path: unprefixed IDs (backward compatible) Verification: - 494 tests pass (0 contract-shape failures) - Local E2E passes (contract → resolver → adapter → local ECS HTTP 200 → outbox) ---ci--- project: acdl phase: 57 milestone: v1.10.2 status: execute ---/ci---
This commit is contained in:
@@ -120,7 +120,7 @@ def _check_contract_schema_validation() -> Tuple[Status, str]:
|
||||
"import json, yaml, jsonschema; "
|
||||
"s=json.load(open('schemas/contract.schema.json')); "
|
||||
"[jsonschema.validate(yaml.safe_load(open(f)), s) "
|
||||
" for f in ['contracts/static-assets.yaml','contracts/microservice.yaml']]; "
|
||||
" for f in ['contracts/static-assets.yml','contracts/microservice.yml']]; "
|
||||
"print('2 sample contracts validate')",
|
||||
])
|
||||
|
||||
@@ -144,7 +144,7 @@ def _check_resolver_static_assets() -> Tuple[Status, str]:
|
||||
try:
|
||||
return _check_subprocess([
|
||||
"python3", "core/contract_resolver.py",
|
||||
"contracts/static-assets.yaml", out,
|
||||
"contracts/static-assets.yml", out,
|
||||
])
|
||||
finally:
|
||||
try:
|
||||
@@ -160,7 +160,7 @@ def _check_resolver_microservice() -> Tuple[Status, str]:
|
||||
try:
|
||||
return _check_subprocess([
|
||||
"python3", "core/contract_resolver.py",
|
||||
"contracts/microservice.yaml", out,
|
||||
"contracts/microservice.yml", out,
|
||||
])
|
||||
finally:
|
||||
try:
|
||||
@@ -177,7 +177,7 @@ def _check_adapter_emits_terraform() -> Tuple[Status, str]:
|
||||
os.makedirs(tf_dir, exist_ok=True)
|
||||
rc, out, err = _run_subprocess([
|
||||
"python3", "core/contract_resolver.py",
|
||||
"contracts/static-assets.yaml", stack_path,
|
||||
"contracts/static-assets.yml", stack_path,
|
||||
])
|
||||
if rc != 0:
|
||||
return "Broken", f"resolver failed: {err.strip()[-200:]}"
|
||||
@@ -276,7 +276,7 @@ def _check_local_e2e_microservice() -> Tuple[Status, str]:
|
||||
This is the local-tier half of the headline E2E; the live-AWS half
|
||||
lands in Phase 54 (D-093)."""
|
||||
return _check_subprocess(
|
||||
["python3", "core/local_emulators.py", "contracts/microservice.yaml"],
|
||||
["python3", "core/local_emulators.py", "contracts/microservice.yml"],
|
||||
timeout=60,
|
||||
)
|
||||
|
||||
@@ -284,7 +284,7 @@ def _check_local_e2e_microservice() -> Tuple[Status, str]:
|
||||
def _check_local_e2e_static_assets() -> Tuple[Status, str]:
|
||||
"""CAP-012: local E2E on the static-assets stack (no ECS service)."""
|
||||
return _check_subprocess(
|
||||
["python3", "core/local_emulators.py", "contracts/static-assets.yaml"],
|
||||
["python3", "core/local_emulators.py", "contracts/static-assets.yml"],
|
||||
timeout=60,
|
||||
)
|
||||
|
||||
@@ -324,7 +324,7 @@ def _check_live_terraform_plan_microservice() -> Tuple[Status, str]:
|
||||
os.makedirs(tf_dir, exist_ok=True)
|
||||
rc, out, err = _run_subprocess([
|
||||
"python3", "core/contract_resolver.py",
|
||||
"contracts/microservice.yaml", stack_path,
|
||||
"contracts/microservice.yml", stack_path,
|
||||
])
|
||||
if rc != 0:
|
||||
return "Broken", f"resolver failed: {err.strip()[-200:]}"
|
||||
@@ -364,7 +364,7 @@ def _check_live_terraform_plan_static_assets() -> Tuple[Status, str]:
|
||||
os.makedirs(tf_dir, exist_ok=True)
|
||||
rc, out, err = _run_subprocess([
|
||||
"python3", "core/contract_resolver.py",
|
||||
"contracts/static-assets.yaml", stack_path,
|
||||
"contracts/static-assets.yml", stack_path,
|
||||
])
|
||||
if rc != 0:
|
||||
return "Broken", f"resolver failed: {err.strip()[-200:]}"
|
||||
|
||||
Reference in New Issue
Block a user