CLI referenceReconciliation and lifecycle

workspace

Register sibling projects in a schema-versioned catalog file, outside any one manifest, so a shared provider account's complete claim set no longer depends on remembering every --claims path. Offline throughout.

pixelkiln workspace add ../other-game/pixelkiln.manifest.json
pixelkiln workspace add ../another-game/pixelkiln.manifest.json --name another
pixelkiln workspace list
pixelkiln workspace status --json
pixelkiln workspace claims
pixelkiln workspace remove another

Subcommands:

SubcommandEffect
add <manifest>Registers a project. Id defaults to the manifest's name; --name overrides it. Lock defaults to pixelkiln.lock.json beside the manifest; --lock overrides it. --provider overrides the manifest's provider id; --account sets a free-form account label. Refuses a duplicate id or a lockfile already registered under another id. Warns, but does not refuse, when the lock does not exist yet.
remove <id-or-manifest>Drops a registration by project id or by manifest path. Touches no art, no lock, no provider account.
listLists registered projects and catalog diagnostics. Refuses if the catalog file does not exist.
statusAggregate provider, spend-by-unit, plan state, and claim count, offline. Provider cost units are never summed across each other. Refuses if the catalog file does not exist.
claimsValidates the catalog and emits the exact union of provider-qualified objectId/reviewObjectId/jobId claims across every registered lock. Refuses to omit a project when any registered lock is missing or unreadable, or when the catalog has a duplicate id or lock path.

--workspace <path> selects the catalog file; it defaults to pixelkiln.workspace.json in the current directory. Stored paths are relative to the catalog file's own directory, so a catalog survives a clone or move. list/status support --json and --check (nonzero exit on any error-level diagnostic); both treat a nonexistent catalog file as a hard error rather than an empty, vacuously-safe one. This is the same hazard class as an incomplete claim set. In --json output, the workspace key always names the catalog file; status also reports dir, the catalog's own directory that registered paths resolve against.

Passing --workspace <path> to salvage derives its claim set and its sibling-manifest style signal from every project the catalog registers. --claims still works and joins both the lockfile claim set and sibling manifest list. A missing or unreadable registered lock is a hard error there too. PixelKiln never skips one because the catalog exists to guarantee a complete account-wide claim set. See Recovery and account safety.