paperclipai/paperclip · error
status is required
Error message
status is required
What it means
Thrown by the llm-wiki plugin's `update-managed-routine-status` action (worker.ts:813) when `params.status` is absent or empty after `stringField` coercion. The action reads the status string, and only forwards it to `ctx.routines.managed.update` if it is truthy, so a missing/blank status is treated as a caller error rather than a silent no-op.
Source
Thrown at packages/plugins/plugin-llm-wiki/src/worker.ts:813
routineOverridesFromParams(params),
);
});
ctx.actions.register("reconcile-managed-routine", async (params) => {
return ctx.routines.managed.reconcile(
routineKeyField(params.routineKey),
readCompanyIdFromParams(params),
routineOverridesFromParams(params),
);
});
ctx.actions.register("reconcile-managed-routines", async (params) => {
return reconcileWikiRoutineResources(ctx, readCompanyIdFromParams(params));
});
ctx.actions.register("update-managed-routine-status", async (params) => {
const status = stringField(params.status);
if (!status) throw new Error("status is required");
return ctx.routines.managed.update(routineKeyField(params.routineKey), readCompanyIdFromParams(params), {
status,
});
});
ctx.actions.register("run-managed-routine", async (params) => {
return ctx.routines.managed.run(
routineKeyField(params.routineKey),
readCompanyIdFromParams(params),
routineOverridesFromParams(params),
);
});
ctx.data.register("pages", async (params) => {
const companyId = readCompanyIdFromParams(params);
return listPages(ctx, {
companyId,
wikiId: stringField(params.wikiId),View on GitHub (pinned to 67001ec6eb)
Solutions
- Include a non-empty `status` string in the action params (e.g. `"active"`, `"paused"`) alongside `routineKey` and `companyId`.
- Verify the exact param key name is `status` and that it is a trimmed non-empty string before dispatching the action.
- If driving the action from a UI, disable the submit control until a status value is selected.
Example fix
// before
ctx.actions.run("update-managed-routine-status", { routineKey, companyId });
// after
ctx.actions.run("update-managed-routine-status", { routineKey, companyId, status: "active" }); Defensive patterns
Strategy: validation
Validate before calling
function buildRoutineStatusParams(input) {
const status = typeof input.status === "string" ? input.status.trim() : "";
if (!status) throw new TypeError("status is required (non-empty string)");
return { routineKey: input.routineKey, companyId: input.companyId, status };
}
// run buildRoutineStatusParams(params) BEFORE ctx.actions.run(...) Type guard
function isValidRoutineStatusParams(p): p is { routineKey: string; companyId: string; status: string } {
return typeof p?.status === "string" && p.status.trim().length > 0
&& typeof p?.routineKey === "string" && p.routineKey.trim().length > 0
&& typeof p?.companyId === "string" && p.companyId.trim().length > 0;
} Prevention
- Centralize action-param construction in a builder that asserts required string fields.
- Disable UI submit controls until status is selected.
- Add a unit test that the action throws on missing status.
When it happens
Trigger: Calling the registered plugin action `update-managed-routine-status` without `status` in params, with `status: ""`, or with `status` set to a non-string value that `stringField` coerces to empty (e.g. null/number/object).
Common situations: An orchestrator or board UI issues a managed-routine status transition (e.g. pausing/resuming a wiki maintenance routine) and forgets the status field, or sends the wrong key name (e.g. `routineStatus` instead of `status`). Also occurs when a test fixture constructs the action params incompletely.
Related errors
- path is required
- workspaceId and companyId are required
- projectId is required for project workspace diffs
- Ingest operation did not return an issue id; the dropped fil
- ${name} is required
AI-assisted analysis of paperclipai/paperclip@67001ec6eb (2026-08-12).
Data as JSON: /api/errors/24600cc115f8a2ab.
Report an issue: GitHub.