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

115 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.