Skip to content

Cloud-Agnostic Boundary

The component model is agnostic in structure and orchestration, and spec-true in the leaves. This is chant’s spec-true, not cloud-abstract stance applied to release: no invented cross-cloud resource model, each cloud’s real surface, typed and linted.

A component composes over capability families. Those family interfaces are cloud-agnostic. The concrete verb behind each family is the cloud-specific leaf, contributed by that cloud’s lexicon — the same seam that already provides synthesis, describeResources, ownership markers, and the ApplyOp target. The release layer invents no new per-cloud plugin system.

This is literal, not aspirational: core ships only the agnostic verbs (docker-build, sign, wait-endpoint, …). The AWS leaves — cfn-deploy, ecs-update-service, emr-*, code-deploy, the SSM host verbs, the CloudFormation/ECS/EMR waits — live in @intentius/chant-lexicon-aws and register through the CapabilityPlugin contract when a project’s chant.config.ts lists lexicons: ["aws"]. A component’s cfn-deploy step resolves only when that lexicon is active; core has no AWS in it.

FamilyWhere it sitsAWS leafAzureGCPk8s / generic
buildfully agnosticdocker / zip / jvmsamesamesame
publish-imageagnostic (endpoint + auth is env config)ECRACRArtifact Registryany OCI
apply infracloud-shapedcfn-deployarm-deployConfig Connector / gcloudkubectl (leveler) / Terraform
job submissioncloud-shapedEMR / Glue / BatchSynapse / Batch / ADFDataproc / DataflowJob / Argo / Spark operator
host / code deliverysplitSSM + CodeDeployRun Command / Arc (no CodeDeploy peer)OS Config / MIG rollingSSH (agnostic)
wait / verifysplitwait-for-stackARM waitDM / CC waitrollout status; health-gate agnostic
safety / rollbackcoupled to applyCFN rollback / CodeDeploy autoARMrollout undo; saga mechanism agnostic
observe / driftlexicon seamtagstagslabelslabels

build, publish-image, remote-exec over SSH, and health-gate / wait-endpoint port almost unchanged. apply is the most cloud-shaped. Managed code-deploy is nearly AWS-only — there is no clean Azure or GCP peer, so the portable fallback is copy-to-host + remote-exec.

  • Structural agnosticism (always). Every component and every cloud shares the contract, the grammar, and one orchestrator. A GCP component and an AWS component are both build → publish → apply → verify, differing only in leaf verbs. Uniform orchestration, one driver, one lint envelope, no per-cloud special-casing. This is most of the value.
  • Portable component (write once, any cloud). Only for the subset composed entirely of agnostic capabilities. The clean path is Kubernetes: a kubectl-apply component runs on EKS, AKS, and GKE because k8s levels the apply family to a single verb. Off-cluster a component is structurally uniform but cloud-bound, because cfn-deploy is AWS by definition. This is why standardizing pipelines was easier inside k8s and harder outside it.