Four of the five are done and on a branch: region-host-vpc-and-shape.
1. vpc_id/subnet_id — taken as inputs. Both default to null, so a deployment with a default VPC sees no change at all. When there is no default VPC the module now fails at PLAN time with a message naming the two variables, instead of mid-apply with VPCIdNotSpecified after the buckets and IAM already exist. Asked with aws_vpcs (a list) rather than aws_vpc (a lookup), because the lookup errors when nothing matches and an error inside a data source cannot be turned into a useful message. A second precondition refuses one of the pair without the other.
2. The SSM grant — closed rather than only documented. You were right about the mechanism and I verified the shape in the module: the Allow names ssm_parameter_arn, and AmazonSSMManagedInstanceCore alongside it grants ssm:GetParameter* on Resource: "*", so the scoped Allow bounded nothing. scope_ssm_parameter_reads, default true, adds an explicit Deny with NotResource on the four parameter-read actions. Explicit deny beats the managed policy's allow, and it touches no other action, so Session Manager is unaffected — which matters, since it is the only admin path to these boxes and rewriting the managed policy by hand risks locking a fleet out of its own recovery path.
This is the one item I have not merged and would like you to look at: it is a live IAM change on every box at the next apply. Defaulted on, because defaulting it off just moves the silence somewhere else, but say the word and it ships off for a release first.
3. The tooling now ships with the module. New modules/region-host/README.md: binary, host.env, carlos bootstrap, start the edge — with the two things that cost real time elsewhere written down. AWS_REGION must name the DEPLOYMENT bucket's region because the Go SDK does not follow S3 cross-region redirects. And there is no per-region secret at all: a host verifies with the public CARLOS_RELEASE_PUBKEY, so nothing is created or copied per region — stated plainly, since the opposite claim was the one that got copy-pasted into three more files.
4. Examples pinned. The README now says to pin ?ref= to a commit, with the reason (one region host is a small risk; six instantiating the same module is a fleet-wide change nobody decided to make). Two stale pointers to infra/flagship/ and infra/tito/ — directories that do not exist in this repo — are gone, which is the smaller version of the same problem you hit: knowledge recorded against a layout that moved.
5. Regions as data — documented, not built. modules/README.md now carries the for_each pattern with the mesh computed:
siblingstagingarns = [ for code, in local.regions : awss3_bucket.data[code].arn if code != each.key ]
which is the part that matters: self-staging becomes structurally impossible rather than asserted afterwards with a throwaway script. I stopped short of a regions MODULE, and the reason is in the doc as two caveats — provider aliases cannot be interpolated (aws = aws.${each.key} is not valid HCL), and deployment-buckets makes a deployment+data PAIR while a deployment has exactly one deployment bucket, so per-region data buckets have to be plain resources. A module that cannot own the provider or the buckets would absorb about a third of the duplication and add an indirection. If you want it anyway, say so — it is a real option, just not obviously the better one.
tofu validate clean. Leaving this open until the SSM deny has your eye.