Files
acdl/.ciagent/CLARIFY.md
T
Jon Chery 956cf91ce0 docs(P00): clarify — 6 ambiguities auto-resolved (full autonomy)
---ci---
project: acdl
phase: 0
milestone: v1.24
status: clarify
---/ci---
2026-08-12 14:21:32 +00:00

5.6 KiB

CLARIFY — v1.24 Consumer Guide Accuracy & Env-Promotion Lifecycle Enforcement

Autonomy: full. Ambiguities are auto-resolved with assumption logging per config.json autonomy.level: "full". No human escalation.

Ambiguities Identified

A1 — Step 8 "change environment" vs Per-env section "no field editing"

Ambiguity: The consumer guide contains two mutually-exclusive promotion models. Step 8 (line 290) says "Change environment in your contract." The "Per-environment deployment" section (line 398) says "you do not edit the environment: field… Promotion = running the matching job." The test test_consumer_guide_states_no_field_editing asserts the no-editing model.

User directive (binding): Both shapes are supported. Shape A (edit environment in-place) is valid AND must trigger a destroy of the prior env. Shape B (per-env caller workflows) is the alternative. The test must be updated to assert both shapes.

Resolution (auto, confidence 0.95): Adopt the user's directive. Step 8 is rewritten to document Shape A with destroy-then-rebuild semantics. The per-env section is preserved as Shape B with a lead sentence distinguishing it. The test is renamed and a new test asserts the destroy semantics. This is already captured in REQ-279, REQ-280, REQ-290.

A2 — Prior-env source of truth: DynamoDB vs state-bucket scan vs SSM

Ambiguity: Three options for detecting the prior environment: (a) query the nova-contracts DynamoDB table, (b) scan the state bucket for other env prefixes, (c) record last-applied env in an SSM parameter.

Resolution (auto, confidence 0.85): DynamoDB nova-contracts table (user-selected). It already exists, is written by the contract ingestor Lambda (core/lambda/contract_ingestor.py:160-170), and has the right shape (PK consumerRepo, SK contractId#submittedAt, environment attribute). A new #LAST_APPLIED SK suffix is added for the record-applied-env step (REQ-283). This avoids coupling the platform to a specific state-bucket layout (which differs across envs/accounts) and avoids a new SSM dependency.

Assumption: The nova-contracts table is accessible from the deploy role via the same ABAC scoping that the contract ingestor uses. If the table is not accessible (e.g., local/CI mode without DynamoDB), the detect step logs a warning and returns None (conservative — no prior env assumed). This is documented in REQ-282.

A3 — Cross-account destroy

Ambiguity: If the prior env (e.g., dev) and new env (e.g., qa) are in different AWS accounts, the destroy step needs the prior env's role credentials. The current scaffold uses one account.

Resolution (auto, confidence 0.80): v1.24 targets the same-account case. Cross-account destroy is explicitly out of scope (documented in the Out of Scope section). The run_platform.sh Step 0b notes this limitation. A future milestone handles cross-account destroy via a pre-step that assumes the prior env's role. This is the pragmatic path — the scaffold (core/environments/dev.json) is single-account today.

A4 — Version tag in docs: @v1.19 vs ref: v1.9

Ambiguity: The consumer guide says uses: nova/.github/workflows/deploy.yml@v1.19 but the actual .github/workflows/deploy.yml checks out the platform repo at ref: v1.9. The reference table says sample contracts "use @v1.19" but the sample contracts don't carry uses: (they're contracts, not workflows).

Resolution (auto, confidence 0.90): REQ-281 corrects the reference table wording to "used with caller workflow @v1.19" (the version pin lives in the caller workflow, not the contract). The @v1.19 tag in the consumer-facing docs is the documented current version; the ref: v1.9 in deploy.yml is the platform-internal checkout ref. These are two different references (consumer → platform workflow tag; platform workflow → platform repo ref). The guide's @v1.19 stays as the consumer-facing version. No change to deploy.yml's ref: v1.9 (that's an internal platform concern, out of scope for this milestone).

A5 — Should Shape A destroy go through the HITL decommission pipeline?

Ambiguity: The decommission pipeline (2-step, HITL SRE gates) exists for stack teardown. Should env-transition destroy use it?

Resolution (auto, confidence 0.85): No. Env-transition is an automated lifecycle step, not an explicit decommission. The destroy runs as a direct terraform destroy -auto-approve against the prior env's state (REQ-284). The decommission pipeline remains for explicit stack teardown with SRE gates. This is documented in the Out of Scope section. Rationale: the consumer already has HITL attestation on the new env (qa/prod/dr gates); requiring a second SRE gate for the prior env's destroy would block autonomous dev→qa promotion, contradicting the "lower environments are autonomous" tenet.

A6 — Phase count and ordering

Ambiguity: The requirements traceability table shows 3 phases (P1: docs, P2: feat, P3: test) but the roadmap entry says "4 phases."

Resolution (auto, confidence 0.90): 4 phases = P0 (pre-execution) + P1 (docs fixes) + P2 (env-transition feat) + P3 (tests) + P4 (final review/ship). The "4 phases" in the roadmap counts execution phases (P1-P3)

  • final (P4). This matches the run.md phase model (P0 pre-execution, P1..PN execution, P N+1 final). The traceability table lists P1-P3 (execution); P4 is the final phase (review + audit + ship, no new requirements).

Clarification Commit

No changes to REQUIREMENTS.md or PROJECT.md from clarify — the ambiguities are resolved and already captured in the requirements (REQ-276..290) and the Out of Scope section. The resolutions above are logged for traceability.