2443909362
---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).
164 lines
7.8 KiB
Markdown
164 lines
7.8 KiB
Markdown
---
|
|
personas:
|
|
- name: lead-developer
|
|
domain: coordination
|
|
active: true
|
|
frameworks:
|
|
- python
|
|
- bash
|
|
- terraform
|
|
- jsonschema
|
|
- pytest
|
|
- boto3
|
|
constraints:
|
|
- pragmatic
|
|
- battle-tested defaults
|
|
- engine-agnostic core
|
|
- acdl structural conventions preserved with 9 locked deviations (D-012, D-013, D-015, D-017, D-018, D-019, D-022, D-023, D-025, D-027)
|
|
- no security/identity/CI-workflow (out of scope)
|
|
- local shell reproducibility over CI
|
|
territory:
|
|
- ".ciagent/**"
|
|
- "README.md"
|
|
- "pyproject.toml"
|
|
- "requirements-test.txt"
|
|
- ".gitignore"
|
|
- "docs/architecture.md"
|
|
- "docs/consumer-guide.md"
|
|
- name: data-engineer
|
|
domain: data
|
|
active: true
|
|
frameworks:
|
|
- terraform
|
|
- hcl
|
|
- jsonschema
|
|
- json
|
|
constraints:
|
|
- schema-first
|
|
- type-safe
|
|
- migration-driven
|
|
- engine terms only in adapters/terraform/ + modules/*/terraform/ + terraform/
|
|
- module interface shape: {name, version, kind, type, description, inputs, outputs, resources[]}
|
|
- registry entry shape: {interface, terraform_dir, published_at, deprecated, kind}
|
|
- L2 is opaque (D-012): interface.json + terraform/main.tf composes L1 internally
|
|
- state key convention: spike/<stack_name>/<environment>/terraform.tfstate
|
|
- tag convention: nova:owner/nova:contract/nova:environment/nova:cost-center
|
|
territory:
|
|
- "modules/**"
|
|
- "terraform/**"
|
|
- "schemas/stack.schema.json"
|
|
- "schemas/environment.schema.json"
|
|
- "docs/modules/**"
|
|
- "docs/environments/**"
|
|
- "**/*.tf"
|
|
- "**/*.tf.json"
|
|
- name: backend-engineer
|
|
domain: backend
|
|
active: true
|
|
frameworks:
|
|
- python
|
|
- pyyaml
|
|
- jsonschema
|
|
- boto3
|
|
- pytest
|
|
- moto
|
|
- bash
|
|
constraints:
|
|
- api-first
|
|
- strict-typing
|
|
- dependency-injection
|
|
- engine-agnostic core (no aws_*/terraform/module "/provider "/resource " strings outside adapters/terraform/)
|
|
- resolve() is pure: no network/side-effects; local file reads for module metadata permitted (D-011)
|
|
- adapt() is a stateless assembler: no terraform invocation, no state files, no plan files
|
|
- named exceptions: ModuleNotFoundError, VersionNotFoundError, EnvironmentNotFoundError
|
|
- NOVA_* env var prefix (D-032): NOVA_AWS_* -> AWS_* copy in run_platform.sh
|
|
- no CLI package (D-027): scripts invoked via shell
|
|
territory:
|
|
- "core/**"
|
|
- "adapters/terraform/adapter.py"
|
|
- "adapters/terraform/__init__.py"
|
|
- "schemas/contract.schema.json"
|
|
- "contracts/**"
|
|
- "scripts/**"
|
|
- "tests/**"
|
|
- "**/*.py"
|
|
- name: frontend-engineer
|
|
domain: frontend
|
|
active: false
|
|
frameworks:
|
|
- react
|
|
- next.js
|
|
constraints:
|
|
- component-first
|
|
- server-components
|
|
- minimal-client-js
|
|
territory:
|
|
- "**/components/**"
|
|
- "**/pages/**"
|
|
- "**/hooks/**"
|
|
- "**/styles/**"
|
|
- "**/*.tsx"
|
|
- "**/*.css"
|
|
- "**/*.vue"
|
|
reason: Nova Platform has no frontend. Deactivated (D-006).
|
|
phase_personas: []
|
|
---
|
|
|
|
# Personas — Nova Platform v1.0
|
|
|
|
> Active personas for all execution phases. The 3 active personas cover
|
|
> the full v1.0 scope (contract surface + resolution + engine adapter +
|
|
> module catalog + Terraform bootstrap + shell reproducibility + tests +
|
|
> docs). No phase-specific personas are needed.
|
|
|
|
## Roster
|
|
|
|
| Persona | Domain | Active | Lead coverage |
|
|
|---------|--------|--------|---------------|
|
|
| lead-developer | coordination | yes | cross-cutting: `.ciagent/`, root config, architecture docs |
|
|
| data-engineer | data (terraform/modules) | yes | `modules/`, `terraform/`, stack/environment schemas, module docs |
|
|
| backend-engineer | backend (python) | yes | `core/`, `adapters/terraform/*.py`, contract schema, `contracts/`, `scripts/`, `tests/` |
|
|
| frontend-engineer | frontend | NO (D-006) | — |
|
|
|
|
## Framework alignment
|
|
|
|
The project has NO JavaScript/frontend runtime. Frameworks overridden
|
|
from config.json defaults to match actual project deps:
|
|
|
|
- **lead-developer:** python, bash, terraform, jsonschema, pytest, boto3.
|
|
- **data-engineer:** terraform, hcl, jsonschema, json (was `["terraform"]` — expanded; dropped nothing).
|
|
- **backend-engineer:** python, pyyaml, jsonschema, boto3, pytest, moto, bash (was `["python", "fastapi"]` — **dropped `fastapi`** (no HTTP API; shell-invoked); added actual deps).
|
|
- **frontend-engineer:** unchanged (deactivated).
|
|
|
|
## Territory alignment
|
|
|
|
Territory globs overridden to match actual file structure. The
|
|
reference's `nova/`, `pipelines/`, `metrics/`, `.github/workflows/`,
|
|
`mcp/`, `skills/`, `workflows-src/`, `platform/` dirs do NOT exist.
|
|
|
|
- **lead-developer:** `.ciagent/**`, `README.md`, `pyproject.toml`, `requirements-test.txt`, `.gitignore`, `docs/architecture.md`, `docs/consumer-guide.md`.
|
|
- **data-engineer:** `modules/**`, `terraform/**`, `schemas/stack.schema.json`, `schemas/environment.schema.json`, `docs/modules/**`, `docs/environments/**`, `**/*.tf`, `**/*.tf.json`. NOTE: `schemas/contract.schema.json` is backend-engineer territory.
|
|
- **backend-engineer:** `core/**`, `adapters/terraform/adapter.py`, `adapters/terraform/__init__.py`, `schemas/contract.schema.json`, `contracts/**`, `scripts/**`, `tests/**`, `**/*.py`. NOTE: `adapters/terraform/policy/` is OOS.
|
|
- **frontend-engineer:** unchanged (deactivated).
|
|
|
|
## Constraint alignment
|
|
|
|
### Shared constraints (all active personas)
|
|
- **engine-agnostic core:** no `aws_*` / `terraform` / `module "` / `provider "` / `resource "` strings outside `adapters/terraform/` (verified by `tests/test_engine_boundary.py`).
|
|
- **acdl structural conventions preserved with 9 locked deviations:** directory names, file roles, module interface shape, registry format, banner strings, state key convention, tag convention. Deviations locked in CLARIFY.md (D-012, D-013, D-015, D-017, D-018, D-019, D-022, D-023, D-025, D-027).
|
|
- **no security/identity/CI-workflow:** kyverno, Wiz, Checkov, PolicyEngine, confidence_signal, outbox_writer, ABAC, PAT, JWS, KMS signing, SoD, HITL, attestation, submission_readiness, env_transition, decommission, mode_resolver, onboarding flow beyond bootstrap, metrics, pipelines, `.github/workflows/` — ALL out of scope. Do NOT implement.
|
|
|
|
### Persona-specific constraints
|
|
- **lead-developer:** pragmatic, battle-tested defaults, engine-agnostic core, acdl structural conventions, no security/identity/CI-workflow, local shell reproducibility over CI.
|
|
- **data-engineer:** schema-first, type-safe, migration-driven, engine terms only in `adapters/terraform/` + `modules/*/terraform/` + `terraform/`, module interface shape, registry entry shape, L2 opaque per D-012, state key `spike/<stack_name>/<environment>/terraform.tfstate`, tag convention.
|
|
- **backend-engineer:** api-first (contract schema is the API), strict-typing, dependency-injection, `resolve()` pure (D-011), `adapt()` stateless assembler, named exceptions, `NOVA_*` env prefix (D-032), no CLI package (D-027).
|
|
|
|
## Phase-specific personas
|
|
|
|
None. The 3 active personas cover all 6 execution phases:
|
|
- Phase 1 (Contract Surface + Schemas + Resolver): backend-engineer.
|
|
- Phase 2 (Terraform Adapter + Engine Boundary): backend-engineer.
|
|
- Phase 3 (L1 Primitives + Registry): data-engineer (registry + interfaces + terraform), backend-engineer (registry-loading code).
|
|
- Phase 4 (L2 Patterns + Terraform Bootstrap + Platform): data-engineer (L2 terraform, bootstrap terraform, platform/ci-vpc/microservice/onboarding terraform), backend-engineer (bootstrap python scripts).
|
|
- Phase 5 (Shell Reproducibility + Test Suite + Docs): backend-engineer (scripts, tests), lead-developer (README, docs, pyproject), data-engineer (docs/modules, docs/environments).
|
|
- Phase 6 (Final Review + Ship): lead-developer. |