e054a95fd5
---ci--- project: acdl phase: 9 milestone: v1.1 status: plan-as-execute persona: platform-engineer task: [T-9.1, T-9.2, T-9.3, T-9.4] requirements.covered: [REQ-24] ---/ci--- Wave 1: the IR-typed L1 module l1-s3. - T-9.1: modules-ir/l1/l1-s3/interface.json - the L1 interface contract (typed inputs bucket_name/region, outputs bucket_arn/bucket_name, NFR versioning; type aws:s3:bucket). Per D-P09-2 this is a contract (typed declarations), NOT an IR-schema instance. - T-9.2: modules-ir/l1/l1-s3/spike_instance.json - a concrete stack instance with values (bucket_name=acdl-spike-bucket, region=us-east-1) that validates against schemas/ir.schema.json (verified). - T-9.3: modules-ir/registry.json - the L1 registry, one entry l1-s3@1.0.0 -> interface.json (D-P09-3, co-located with modules-ir/). - T-9.4: modules-ir/l1/l1-s3/README.md - the L1 doc + the IR->Terraform mapping table the adapter performs. Spike instance validates against ir.schema.json; interface + registry valid JSON.
40 lines
1.5 KiB
Markdown
40 lines
1.5 KiB
Markdown
# l1-s3 — S3 bucket primitive
|
|
|
|
The first real L1 module for the v1.1 spike. Single-purpose,
|
|
substrate-agnostic (the IR type is `aws:s3:bucket`, not a Terraform
|
|
resource type).
|
|
|
|
## Interface (the IR-typed contract)
|
|
|
|
See `interface.json`: inputs `bucket_name` + `region` (strings), outputs
|
|
`bucket_arn` (arn) + `bucket_name` (string), NFR `versioning` (bool,
|
|
default true).
|
|
|
|
## IR → Terraform mapping (performed by the adapter)
|
|
|
|
The Terraform adapter (`adapters/terraform/adapter.py`) translates this
|
|
L1's IR shape to Terraform:
|
|
|
|
| IR | Terraform |
|
|
|----|-----------|
|
|
| `resource.type = aws:s3:bucket` | `resource "aws_s3_bucket" "<id>" { ... }` |
|
|
| `resource.inputs.bucket_name` | `bucket = <value>` arg |
|
|
| `resource.inputs.region` | `provider "aws" { region = <value> }` |
|
|
| `resource.outputs.bucket_arn` | `output "bucket_arn" { value = aws_s3_bucket.<id>.arn }` |
|
|
| `resource.outputs.bucket_name` | `output "bucket_name" { value = aws_s3_bucket.<id>.id }` |
|
|
|
|
The adapter is a thin layer (ARCHITECTURE.md §12.2); it does not own L1
|
|
content — it only translates.
|
|
|
|
## Spike instance
|
|
|
|
`spike_instance.json` is a concrete stack instance (with values
|
|
`bucket_name=acdl-spike-bucket`, `region=us-east-1`) that validates
|
|
against `schemas/ir.schema.json`. The adapter consumes this instance
|
|
(not the interface contract) to emit Terraform.
|
|
|
|
## Versioning (W3.D)
|
|
|
|
`1.0.0` — interface MAJOR, behavior MINOR, lifecycle PATCH. MAJOR bumps
|
|
require a new registry entry (immutable publication); old entries enter
|
|
a 12-month deprecation window. |