From growthub-governed-console
Documents the two canonical mutation calls for governed Growthub workspaces: PATCH /api/workspace (allowlisted config fields) and POST /api/workspace/sandbox-run (sandbox execution). Enforces runtime rules on patchable keys, credential fields, and live workflow state.
How this skill is triggered — by the user, by Claude, or both
Slash command
/growthub-governed-console:governed-workspace-mutationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A governed Growthub workspace has exactly **two** canonical mutation calls.
A governed Growthub workspace has exactly two canonical mutation calls. Every agent harness routes through them; there is no third path:
| Intent | The one true call |
|---|---|
| Change workspace configuration | PATCH /api/workspace |
Execute a sandbox-environment row (incl. agent-swarm graphs) | POST /api/workspace/sandbox-run |
Everything else is a read (GET /api/workspace) or a specialised governed
lane: refresh-sources, test-source, helper/query|apply,
patch/preflight, workflow/publish.
Authoritative card: every exported workspace ships its own runtime-verified
contract card at skills/governed-workspace-mutation/SKILL.md (workspace
root), with the exact request/response shapes, error envelopes, violation
codes, and row-shape traps for that workspace version. Read it first when
it exists — it wins over this summary on exact shapes. This plugin card is
the portable fallback and boundary statement.
dashboards, widgetTypes,
canvas, dataModel are patchable. Unknown top-level keys (including
full-config bodies and workspaceSourceRecords) are rejected 400 with
allowed[].token, apiKey, accessToken,
refreshToken, bearer, password, secret, sessionKey), and direct
live-workflow mutations are rejected 422 with structured
violations[] = { code, path, message }. The credential check is scoped
to sandbox rows by design — rule 4 below is agent discipline everywhere
else, not something the runtime will catch for you.POST /api/workspace/workflow/publish
is the only draft → live transition; it verifies the draft's successful
test against server-owned run history (draftSha256 lineage). Never PATCH
lifecycleStatus: "live", orchestrationGraph, or version bumps directly.x-growthub-app-scope; violations return a structured
AppScopeViolation with a repairPlan[] — follow it instead of retrying
blind.read → preflight → prove → publish → confirm
GET /api/workspace → workspaceConfig +
workspaceConfigPersistence (canSave, guidance).POST /api/workspace/patch/preflight with the exact PATCH
body (or the preflight_patch MCP tool, which proxies it in live mode).
It uses the write path's exact merge step, so it cannot disagree with the
real PATCH.test-source for sources,
sandbox-run with useDraft: true for draft workflow graphs.workflow/publish for draft → live.workspace:agent-outcomes stream; GET /api/workspace/agent-outcomes
returns it plus the governance summary. New sessions read receipts before
acting and continue from nextActions / rollbackRef.A 400/422 is the control plane telling you the correct lane. Policy
rejections carry repairPlan[] — apply it and re-preflight. Do not fall back
to editing growthub.config.json on disk while the app is running, inventing
routes, or writing "temporary" direct state: blocked attempts are receipted,
and a bypass breaks the trust chain every other surface depends on.
npx claudepluginhub growthub-ai/growthub-local --plugin growthub-governed-consoleDrafts dashboards, widgets, API registry rows, custom objects, and swarm graphs for a governed Growthub workspace via a propose-only planning engine with explicit apply step.
Manages state-changing Preset CLI workflows: push charts/dashboards/datasets, manage users, handle destructive flags, and sync across workspaces.
Upgrades existing workflow scaffolding files (README, mods) to match the current Spacedock version. Handles version stamps, mod diffs, and legacy cleanup.