# l2-static-asset — thin-composition (S3 static asset) The v1.1 spike's L2. A thin-composition that references `l1-s3` only (depth 1). The contract's inputs (`bucket_name`, `region`) map 1:1 through the wires to the L1's inputs. ## Composition (the IR-typed thin-composition tree) See `composition.json`: `kind=l2`, `depth=1`, one child `l1-s3@1.0.0`, wires `{bucket_name → s3.inputs.bucket_name, region → s3.inputs.region}` (passthrough). ## IR → Terraform mapping (D-P10-1) The Terraform adapter consumes the *resolved IR instance* (which has `kind=l2` + the L1 resource `s3` in its `resources` array). For a depth-1 thin-composition, the L2 root module **IS** the L1's resource — no separate `module "l1_s3" { source = "..." }` block. The existing adapter `TYPE_MAP` + resource emission handle both l1 and l2 instances (the resources array is the same shape). The `relationships` array is ignored at the Terraform level for the spike (composition ordering is implicit in the single resource). v1.2 may emit a real `module "l1_s3" { source = "..." }` block when L1s become published Terraform modules rather than inline resources. ## 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.