Phase 5 for Non-Deployable Projects
Phase 5 is the deployment phase of the GAIA lifecycle. Before the multi-shape model,
Phase 5 always meant /gaia-deploy + /gaia-post-deploy.
That assumption breaks for plugins, libraries, CLIs, mobile apps, container images, and
static sites -- none of which have a deployable URL to push to. This tutorial covers the
routing extension that lets /gaia-help recommend the right command
based on YOUR project's shape, not the historical default.
What Phase 5 used to mean
The original Phase 5 contract: you have a staging URL and a production URL, you run
/gaia-deploy --env staging, then /gaia-post-deploy --env staging
to verify, then promote to production via the promotion chain. That's still the correct
flow when you HAVE deployable environments. The problem is GAIA assumed everyone did.
Under the multi-shape model, Phase 5 reads two config-side signals:
environments[*].kind-- per-env, the closed enumdeployable | branch-only | distribution-only.distribution:-- presence vs absence of the top-level publish block.
The detector at scripts/lib/config-shape-detect.sh reads both and emits one of
four tokens; /gaia-help routes Phase 5 from the token.
The 5-case decision table
| Case | environments[*].kind | distribution: | Detector token | /gaia-help Phase 5 suggestion |
|---|---|---|---|---|
| (i) | all deployable |
absent | deploy-only |
/gaia-deploy (baseline) |
| (ii) | all deployable |
present | deploy-and-publish |
BOTH /gaia-deploy AND /gaia-publish (rare hybrid) |
| (iii) | all branch-only |
present | publish-primary |
/gaia-publish only |
| (iv) | all distribution-only |
present | publish-primary |
/gaia-publish only |
| (v) | mixed (>=1 deployable + >=1 non-deployable) | present | deploy-and-publish |
BOTH (with per-env clarification) |
Case (i) is the historical baseline -- byte-identical to the pre-multi-shape behavior.
Cases (iii) and (iv) are publish-primary; /gaia-deploy is intentionally absent
from the suggestions (the command would HALT on the kind gate). Cases (ii) and (v)
are mixed-shape; both commands are surfaced and the body distinguishes which envs are
reachable via which.
Walkthrough
For a Claude plugin (case iii):
$ /gaia-help
[Phase 5: Deployment]
This project is publish-primary -- no environment is marked deployable.
Recommended command:
/gaia-publish # ships to claude-marketplace via your release_workflow
Not recommended:
/gaia-deploy # HALTs on kind: branch-only
For a microservice with staging + production deployable envs AND a library exported on the side (case v -- mixed shape):
$ /gaia-help
[Phase 5: Deployment]
Mixed shape -- one or more deployable envs AND a distribution: block.
Recommended commands:
/gaia-deploy --env staging # service-side rollout
/gaia-deploy --env production # service-side rollout
/gaia-publish # publishes the library export per distribution.channel
Publish-readiness mode
/gaia-deploy-checklist also reads the detector token. For publish-primary
projects, the checklist swaps to publish-readiness mode: the gate
items are publish-oriented (manifest version matches, release workflow exists, credentials
env vars set, adapter sub-fields satisfy per-channel schema) instead of the deploy-oriented
gate items (rollback plan, smoke endpoints, etc.). The switch is automatic -- you do NOT
need to pass a flag.
You'll know it worked when
/gaia-helpon a plugin / library / CLI / mobile-app / container-image / static-site project recommends/gaia-publishand does NOT recommend/gaia-deploy./gaia-helpon a historical all-deployable project recommends/gaia-deployunchanged -- byte-identical to the pre-cascade baseline./gaia-deploy-checkliston a publish-primary project renders publish-oriented gate items instead of deploy-oriented ones./gaia-deploy --env <branch-only-or-distribution-only>HALTs withuse /gaia-publish instead.