Skip to content

Configuration migration ​

bakers config upgrade moves supported old configuration into the files that own it today, and bakers config check tells you whether the result is valid.

The everyday update steps are on Update bakers.build; this page is the detail behind them: scopes, how preview and apply behave, and how to read each finding as a repair instruction.

Scopes ​

Every bakers config command takes --scope:

ScopeFilesCurrent schema
machinemachine.config.js in the bakers.build home: host identity, capacity, agents3
connectionThe selected connection file: server and sign-in4
projectThe checkout's .bakers/ files: conductor configs and the local selector1 (conductor configs)
allAll of them-

A move between owners, for example max_parallel from a conductor config to the machine file, needs --scope all, because one scope may not write another. --path <directory> selects the project root; it does not replace the home directory. --machine-path and --config override the machine and connection files, and --connection <id> picks a named connection. A legacy machine file at ~/.config/conductor/conductor.config.machine.js is read as migration input.

Preview, apply, check ​

sh
bakers config upgrade --scope all --connection team --dry-run
bakers config upgrade --scope all --connection team
bakers config check --scope all --connection team --online
bakers config upgrade --scope all --connection team --dry-run

Replace team with your connection name. Run these from the checkout, inspect the first report before applying, and expect the last preview to show no change: a second successful upgrade is a no-op.

  • Preview (--dry-run) parses the source without executing it and makes no writes, backups, imports or network calls. The report lists file states, fingerprints, redacted diffs, the schema step of each file (schema 2 -> 3) and findings.
  • Apply rechecks each file's fingerprint and stops with changed_since_planning if a file moved since the plan. It writes a private non-overwriting backup <file>.bakers.bak (mode 0600), then replaces the file atomically. If a write fails it restores the files already changed and names any it could not restore.
  • Check validates offline by default. --online authenticates and verifies each selected workspace (not applicable to the machine scope), and resolves each machine and project addons entry to report one listed in a file its addon does not allow; offline, that step is skipped with an addon_scope_skipped info finding. An offline ok says the local shape is valid, and a report that says online was skipped is not a successful online check.

--format json prints the report as JSON and disables prompts, --yes disables prompts and automatic selections, and --project, --workspace and --base-url supply values the planner would otherwise ask for. Migration never invents an identity or workspace.

A generated file or current schema marker does not prove a working conductor. After migrating, confirm the agent catalog with bakers agents and start a worker only when it lists what you expect. Schema versions belong to the configuration format, not the npm release, so never fix a failure by editing only schema_version; the actual shape must match.

What the planner moves ​

Old shapeBecomes
Top-level project and bb_workspace in a conductor configbakers: { project, workspace }
Conductor machine_idconductor_id
max_parallel and tunnel in a conductor config or local fileThe machine file; a differing value in both files is a conflicting_values finding
Connection keys (base_url, client_id, client_secret, workspace_id) in a machine fileThe connection file
agent, agents, default_agent, agent_routes in a conductor configDropped from the conductor config; agent policy lives in machine agents, so confirm it afterwards
site and plugins in a conductor configLeft in place, ignored at runtime with a warning; delete them by hand
Machine agents.addonsAppended to the machine's top-level addons (an entry already there with the same package and alias is kept once); agents keeps its policy keys
Machine top-level portsThe with of the @bakers-build/addon-ports entry in the machine's addons, added or filled in. A computed value, or an entry that already has a with, is left for you to move by hand

Read a finding as a repair instruction ​

Each finding has a code, the file and key, what was expected and a recheck command. Find the code below.

CodeMeaningRepair
scope_required, invalid_scopeinit needs an explicit scope; scope is one of machine, connection, project, all.Pass --scope.
project_requiredNo project root resolved, or init for a project lacks a name.Run inside the checkout or pass --path and --project <name>.
missing_required_fileA required file does not exist.Run the bakers config init command the finding prints.
unreadable_fileThe file is not a readable regular file.Restore read access, then recheck.
syntax_errorThe file does not parse.Fix the syntax at the reported line; nothing in that file is migrated until then.
unsupported_source_shapeThe file exports something the planner cannot read statically, for example a computed export or a spread in bakers.Expose a plain export default { ... } object, or for a project file run bakers config upgrade --scope project.
unknown_valueA required value is computed, so its value cannot be known.Write the value as a literal; the planner does not guess.
missing_required_key, invalid_valueA required key is absent or has the wrong type. Online, invalid_value means the connection or its plugins failed to load.Set the named key; a missing site.base_url belongs in the connection file, not the machine file. Online, inspect the connection file and recheck.
version_marker_disagreementThe header marker and the schema_version field differ.Reconcile both with the file's real shape.
future_schema_versionThe file is newer than this CLI.Install a newer bakers.build release; do not downgrade the marker.
misplaced_keyA key sits in a file that does not own it.Run bakers config upgrade --scope all.
conflicting_valuesSource and destination hold different values.Decide which is intended, edit the other to match, and retry.
out_of_scope_write_requiredThe repair must write outside the selected scope.Re-run with --scope all.
dead_keyA key in conductor.config.local.js is no longer read, such as base_url or oauth.Remove it after confirming the connection holds the intended value.
retired_keyMachine agents.addons or top-level ports; loading fails until it moves. The remediation shows the exact addons: [...] fragment.Run bakers config upgrade --scope machine, or paste the fragment.
addon_scope_not_allowedAn addons entry sits in a file its addon does not allow (--online only); it is not loaded there.Move the entry to the file the finding names.
addon_scope_skippedInfo: an offline check did not resolve addons entries, so their scopes were not checked.Run bakers config check --online to check them.
superseded_fileA legacy project connection override is still supported.Create a named connection and select it in .bakers/connection.config.local.js.
changed_since_planningA file changed between plan and apply.Re-run the upgrade.
write_failureA write failed and changes were restored, or some files remain changed.Restore any named file from its .bakers.bak backup, fix permissions and retry.
authentication_failure--online could not sign in with the selected identity.Check the credentials in the connection file, sign in again with bakers dropsh auth login, then recheck.
cancelled_selectionInteractive setup input was cancelled.Re-run bakers config init with an explicit --scope and the required input flags.

An ambiguous project name (the same name in several workspaces) stops with an error that lists the candidates; commit the intended bakers.workspace. Keep the command, the failing key and the source path when you ask for help, and leave out secret values.