Files
acdl/tests/test_design_docs_current.py
T
Jon Chery e1be05287b feat(P39): refresh design docs + parameterize adapter (P1-1)
---ci---
project: acdl
phase: 39
milestone: v1.9
status: execute
---/ci---

Phase 39 — design-doc-refresh-and-p1-1-parameterization:

Design docs (REQ-100, REQ-101):
- hitl_matrix_design.md: 'dev-only spike'/'v1.2 wires the gates' framing
  replaced with v1.9 wired-gates reality; 8-concern matrix marked
  implemented (offline-testable subset + signed evidence artifacts,
  D-084); v1.9 wiring section cross-references hitl_gates.py +
  attestation_matrix.py; approver_dr noted.
- audit_ledger_design.md: outbox marked shipped+production since v1.8;
  S3 Object Lock + JWS + async worker + DLQ + daily checkpoints clearly
  labeled 'Deferred to a future milestone (D-083)'; RPO/RTO table updated;
  approver fields note v1.9 hitl_gates.attest.

P1-1 adapter parameterization (REQ-102, D-085):
- ecs-service interface.json: desired_count (default 1), launch_type
  (FARGATE), family (app) inputs added.
- alb interface.json: load_balancer_type (application), target_type (ip).
- adapter.py: hardcoded defaults replaced with inputs.get(<name>, <default>);
  hardcoded 'acdl-microservice-rt'/'acdl-microservice-igw' Name tags
  derive from the VPC name input.
- contract_resolver.py: child_input_map routes wires to the sub-resource
  that declares the input (desired_count → aws:ecs:service, family →
  aws:ecs:task_definition, target_type → targetgroup, etc.).
- microservice composition.json: wires added for the new inputs.

Tests: +21 (test_p1_1_adapter_parameterization.py, test_design_docs_current.py).
371 passed; run_ci.sh green; run_platform.sh --check-only green; v1.1 S3
regression preserved.
2026-07-23 04:24:25 +00:00

73 lines
2.7 KiB
Python

"""REQ-100/101: design docs are up to date with the shipped platform.
Asserts no stale 'dev-only spike' / 'v1.2 wires the gates' / 'Phases 08-10
implement' framing, and that the audit ledger deferral is clearly labeled.
"""
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
HITL = ROOT / "core" / "hitl_matrix_design.md"
AUDIT = ROOT / "core" / "audit_ledger_design.md"
def _read(path):
return Path(path).read_text()
def test_hitl_matrix_design_no_stale_dev_only_spike_framing():
text = _read(HITL)
low = text.lower()
assert "the spike is dev-only" not in low, "stale 'spike is dev-only' framing"
assert "hitl is not exercised" not in low, "stale 'HITL is not exercised' framing"
def test_hitl_matrix_design_no_stale_v1_2_wires_language():
text = _read(HITL)
assert "v1.2 wires the gates" not in text.lower(), "stale 'v1.2 wires the gates' framing"
def test_hitl_matrix_design_references_v1_9_implementation():
text = _read(HITL)
assert "attestation_matrix.py" in text, "must reference the v1.9 attestation_matrix.py"
assert "hitl_gates.py" in text, "must reference the v1.9 hitl_gates.py"
assert "v1.9" in text, "must reference v1.9 wiring"
def test_hitl_matrix_design_marks_offline_testable_subset_implemented():
text = _read(HITL)
low = text.lower()
assert "offline-testable" in low, "must distinguish offline-testable concerns"
assert "operator-supplied" in low, "must distinguish operator-supplied concerns"
def test_audit_ledger_design_no_stale_phases_08_10_implement():
text = _read(AUDIT)
low = text.lower()
assert "phases 08-10 implement" not in low, "stale 'Phases 08-10 implement' framing"
def test_audit_ledger_design_marks_outbox_shipped():
text = _read(AUDIT)
low = text.lower()
assert "shipped + production since v1.8" in low, "must mark the outbox as shipped + production"
def test_audit_ledger_design_deferred_section_exists():
text = _read(AUDIT)
assert "Deferred to a future milestone" in text, "must have a clearly-labeled deferred section"
assert "D-083" in text, "deferred section must reference decision D-083"
def test_audit_ledger_design_approver_fields_note_v1_9():
text = _read(AUDIT)
assert "approver_dr" in text, "must note approver_dr (v1.9 hitl_gates.attest)"
assert "hitl_gates.attest" in text, "must reference v1.9 hitl_gates.attest"
def test_hitl_matrix_decision_trail_includes_d084():
text = _read(HITL)
assert "D-084" in text, "decision trail must include D-084 (attestation matrix)"
def test_audit_ledger_decision_trail_includes_d083():
text = _read(AUDIT)
assert "D-083" in text, "decision trail must include D-083 (deferral)"