Factorial Code — Release
Promotes an app's code from its dev-… workspace to its prod-… workspace
using CLI remotes. Input: the two workspace slugs. This updates prod's
current (unversioned) code only — publishing a workspace version and moving
the stable alias is the separate platform release (model in
fcode-core-concepts, journey in fcode-ama): don't run settings:versions:* or
move stable in this flow unless explicitly asked.
Gate every release with fcode-code-validation — see the procedure.
Gotchas
- Prod write access is required. Only operators and the app's Factorial
team admins can push to a
prod-…workspace; the admin's grant lands when a release is requested and rides in the access token — if prod access is refused right after requesting, runfcode loginand retry. Who promotes and why:fcode-ama. - A ✅ validation is required before pushing. Run
fcode-code-validationon the dev workspace first; while the report has Blockers, refuse to push. Only an explicit user override ("push anyway despite the Blockers") proceeds — record that the gate was overridden. - Always confirm before the final
fcode push. Summarize what will change in the prod workspace and wait for an explicit yes — prod code serves live installations. - Never
--force. Iffcode pullorfcode pushreports a divergence between local and prod, stop, show what diverged, and ask the user how to proceed (fcode-cli). - The
fcode pullafterremote:addis mandatory — it picks up the prod workspace's current metadata. Skipping it pushes stale settings over prod's. - Both slugs are encoded tokens (
dev-…/prod-…), not the app's UUID (seefcode-cli). Verify the prefixes: cloning target and push target must not be swapped. - A failing
fcode cloneusually means a mistyped token or missing access (seefcode-ama) — don't retry blindly. - If
dev-xxx/already exists locally, don't reuse it silently — ask whether to release from a fresh clone (recommended) or the existing copy, andfcode pullit first.
Procedure
Collect the two slugs. One
dev-…(source) and oneprod-…(target). Wrong prefix or any ambiguity about which app they belong to: stop and ask.Validation gate. Ensure a current ✅
APP_VALIDATION_REPORT.mdexists for the dev workspace — runfcode-code-validationwhen it is missing or stale. On ❌, list the Blockers and refuse; proceed only on an explicit user override.Clone and wire the prod remote:
fcode clone --skipSkillsSetup dev-xxx cd dev-xxx fcode remote:add prod-xxx fcode pull # mandatory: picks up prod's current metadata fcode add # registers resources prod doesn't have yetOn a divergence reported by
fcode pull: stop and ask (see Gotchas).Confirm. Run
fcode status, summarize for the user what the push will change inprod-xxx(processes, modules, variables, settings), and wait for explicit confirmation.Push:
fcode pushOn a divergence: stop and ask — never
--forceon your own.Report the outcome, reminding the user that the platform release (publish a version, move
stable) is a separate step (fcode-ama).