Files
CIAgent 2443909362 docs(milestone): complete v1.0-nova-platform (release v0.1.6)
---ci---
project: nova-platform
milestone: v1.0
status: complete
requirements:
  covered: [REQ-01,REQ-02,REQ-03,REQ-04,REQ-05,REQ-06,REQ-07,REQ-08,REQ-09,REQ-10,REQ-11,REQ-12,REQ-13,REQ-14,REQ-15,REQ-16,REQ-17,REQ-18,REQ-19,REQ-20,REQ-21,REQ-22,REQ-23,REQ-24,REQ-25,REQ-26,REQ-27,REQ-28,REQ-29,REQ-30,REQ-31,REQ-32,REQ-33,REQ-34,REQ-35,REQ-36,REQ-37,REQ-38]
  partial: []
---/ci---

v1.0 milestone complete: simplified infrastructure-delivery platform
derived from Nova (acdl). 6 phases (P0-P5 + P6 final). 38 REQ-IDs.
38 decisions (D-001..D-038). 76 tests pass. Engine boundary holds.
Happy paths green (check-only + CI). 13 L1 + 2 L2 modules. 5 terraform
roots. Shell reproducibility. Zero OOS files.

Tags: v0.1.0 (P0) → v0.1.1..v0.1.5 (P1..P5) → v0.1.6 (P6 = milestone
release on v0.1 patch line).
2026-08-25 02:18:35 +00:00

5.2 KiB
Raw Permalink Blame History

GRILL — Nova Platform v1.0 (Phase 0)

Adversarial red-team of the v1.0 plan. 9 axes reviewed against the reference at /home/opencode/acdl/ + locked decisions.

Verdict: PROCEED-WITH-CONDITIONS — Confidence 0.82 → PROCEED (all conditions resolved)

One blocking architectural contradiction (C-1) + 5 non-binding conditions. All resolved under supervised autonomy:

  • C-1 (BLOCKING): D-037 locked — adapter loads registry, no source in stack. REQ-04 + REQ-07 updated.
  • C-2 (High): D-038 locked — L2 compositions = ARCHITECTURE.md's.
  • C-3 (Medium): AC-8 now mechanically checkable (docs OOS grep).
  • C-4 (Medium): Wave graph reordered — P3-W1 before P2-W1.
  • C-5 (Low): Concurrency note added to PLAN.md.
  • C-6 (Low): "without deviation" → "with 9 locked deviations" in PROJECT.md + PERSONAS.md.

Binding conditions

C-1 (BLOCKING) — resolver-source / engine-boundary / adapter-signature contradiction

The kill shot. Three locked decisions are mutually unsatisfiable:

Decision Requires Location
REQ-04 + D-012 Stack resource carries source field (Terraform path) core/contract_resolver.py populates it
REQ-09 + D-034 No .py in core/ may contain terraform tests/test_engine_boundary.py greps
REQ-07 adapt(stack, modules_dir) -> str — no registry param adapter can't resolve source

Verified against reference: acdl/schemas/stack.schema.json has NO source field. acdl/adapters/terraform/adapter.py:19 loads registry.json itself (_load_registry). The reference resolver never writes a terraform_dir path into the stack. nova-platform's design inverts this — putting source in the stack (resolver's job) while keeping the adapter signature registry-less. The resolver must write "modules/l1/s3/terraform" (contains forbidden terraform) → **AC-5

  • AC-10 will fail.**

Fix (recommended — matches reference):

  • Drop source from stack.schema.json (REQ-04).
  • Change adapt(stack, modules_dir)adapt(stack, repo_root) (REQ-07).
  • Adapter loads registry.json internally (inside the boundary — it's the engine-specific code, permitted to read terraform_dir).
  • L2 terraform_dir in registry (D-013) consumed by adapter, not resolver.

Side effect (C-4): if adopted, P2 (adapter) gains a dependency on P3-W1 (registry.json). Reorder: P3-W1 before P2-W1, or split P3.

C-2 (High) — L2 child set underspecified

ARCHITECTURE.md:114-115 describes L2 compositions:

  • microservice = vpc + ecs-cluster + ecs-service + iam-role + ecr + alb
  • static-assets = s3 + cloudfront + kms-key

But the reference microservice children = cluster, ecr, roles, alb, service, kms (no vpc); static-assets = s3, cloudfront, waf, kms. Nova drops waf from static-assets (consistent — waf L1 kept but not in the L2). These are fresh-authored under D-012 (opaque L2), so not a reference-mirror violation, but the composition is underspecified — no decision locks the L2 child set.

Fix: Lock D-036 before P4-W2 specifying exactly which L1 modules each L2 composes. Reconcile ARCHITECTURE.md.

C-3 (Medium) — AC-8 not mechanically checkable

AC-8 ("docs... no OOS sections") is subjective. P6-W3 greps for OOS file names but not OOS content inside allowed docs. A doc could contain a "Security" section and pass.

Fix: Add grep check for OOS section headings ("Security", "Compliance", "OIDC", "Attestation", "ABAC") inside docs/*.md + modules/*/README.md. Make AC-8 mechanically checkable.

C-4 (Medium) — missing dep if C-1(a) adopted

If C-1's recommended fix is adopted (adapter loads registry), P2 gains a dependency on P3-W1 (registry.json). Current graph runs P2 + P3 in parallel after P1.

Fix: Reorder P3-W1 before P2-W1, or split P3 into "registry first"

  • "L1 terraform second". Update the wave dependency graph.

C-5 (Low) — concurrency cap violation

PLAN claims "No wave has >5 parallel tasks" but P3-W1 has 13, P3-W2 has 13, P4-W1 has 8. max_concurrent_agents=5 → these batch-serialize into 3-5 rounds, inflating P3 wall-clock ~2-3×.

Fix: Either raise the cap for these waves or restate the schedule estimate to reflect batching. Non-blocking.

C-6 (Low) — "without deviation" claim is false

PROJECT.md:11 + PERSONAS.md:17,148 claim "structural conventions preserved without deviation." RESEARCH.md itself lists 9 locked deviations (D-012, D-013, D-015, D-017, D-018, D-019, D-022, D-023, D-025, D-027). An implementer may reject the needed C-1 fix as "violating conventions."

Fix: Rewrite the claim to "structural conventions preserved except the 9 locked deviations in CLARIFY.md."

Additional notes (non-binding)

  • ARCHITECTURE.md:32 example bug: id: my-static-site (14 chars) fails the locked pattern ^[a-z][a-z0-9-]{2,5}$ (max 6). Fix to id: stsi or id: assets.
  • D-014 (0.72), D-017 (0.70), D-030 (0.68): marked below threshold in CLARIFY.md but D-017/D-030 show no human-lock record (unlike D-025). These WERE escalated + answered in the clarify stage question round — confirmed locked. No action needed.
  • moto pinned but unused (D-030): harmless. Keep or drop; not blocking.