---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.
1.5 KiB
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.