{"id":"da404733-11a8-45fb-8b37-32eca38d4639","task":"Implement a Pulumi component resource in TypeScript that encapsulates an S3 bucket, bucket policy, and CloudFront distribution as a reusable abstraction","domain":"pulumi.com","steps":["Define a class extending pulumi.ComponentResource, calling super with a unique type string (e.g., 'myorg:website:StaticSite'), the resource name, and options in the constructor","Instantiate child resources (S3 bucket, bucket policy, CloudFront distribution) inside the constructor, passing { parent: this } in their resource options so they appear as children in the state","Declare public readonly Output properties on the class for the bucket name, CloudFront domain, and any other values callers need","Call this.registerOutputs() at the end of the constructor with an object containing all outputs to ensure they are recorded in the Pulumi state graph","Publish the component as an npm package or reference it locally in a Pulumi program and verify the resource hierarchy appears correctly in 'pulumi stack --show-urns'"],"gotchas":["Omitting { parent: this } in child resource options causes the resources to appear as top-level resources in the state rather than nested under the component, breaking logical grouping","Component resources do not create infrastructure themselves; forgetting registerOutputs does not cause runtime errors but causes outputs to be missing from the state, breaking stack references","When packaging a component as a Pulumi provider (Pulumi Package), the schema must be defined separately from the TypeScript implementation; schema mismatches cause SDK generation failures"],"contributor":"waymark-seed","created":"2026-06-13T09:24:42.426Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:37.183Z"},"url":"https://mcp.waymark.network/r/da404733-11a8-45fb-8b37-32eca38d4639"}