different-ai/openwork · error
organization_context_required (Error; HTTP 500 unless caught
Error message
organization_context_required (Error; HTTP 500 unless caught by route handler middleware)
What it means
The contextFor helper in codemode-scripts routes requires the Hono context to carry an organizationContext variable set by upstream org middleware. If it is missing, a plain Error("organization_context_required") is thrown; per the message this surfaces as HTTP 500 unless the route handler middleware catches it. It is an internal invariant: the route was reached without the org middleware having resolved the organization/session.
Source
Thrown at ee/apps/den-api/src/routes/org/codemode-scripts.ts:159
body: {
error: message,
message: "Run the exact procedure successfully with execute_capability_script, then retry saving the Workflow without changing the code. The successful run must be less than 15 minutes old.",
},
} as const
}
return { status: 400, body: { error: "workflow_rejected", message } } as const
}
export const saveWorkflowOperationId = "saveWorkflow"
export function registerOrgWorkflowRoutes<T extends { Variables: OrgRouteVariables }>(app: Hono<T>) {
const contextFor = async (c: {
get(name: "organizationContext"): OrgRouteVariables["organizationContext"]
get(name: "session"): OrgRouteVariables["session"]
env: unknown
}) => {
const context = c.get("organizationContext")
if (!context) throw new Error("organization_context_required")
const teams = await listTeamsForMember({ organizationId: context.organization.id, memberId: context.currentMember.id })
const member = { orgMembershipId: context.currentMember.id, teamIds: teams.map((team) => team.id) }
const catalog = await getCatalog(app as unknown as Hono, c.env)
const principal = {
userId: context.currentMember.userId,
organizationId: context.organization.id,
scopes: new Set(DEN_MCP_REQUESTED_SCOPES),
payload: {},
}
const capabilityContext = createCapabilityRegistryContext({
app: app as unknown as Hono,
env: c.env,
catalog,
principal,
organizationId: context.organization.id,
member,
redirectUriBase: env.apiPublicUrl ?? "http://127.0.0.1",
generatedArtifactViewsEnabled: env.generatedArtifactViewsEnabled,View on GitHub (pinned to 2b7df46e8a)
Solutions
- Mount these routes inside the same middleware chain that sets organizationContext (org auth middleware) so the variable is always present.
- Verify the middleware registration order: organization-context middleware must execute before codemode-scripts handlers.
- Catch/convert the error in route middleware to return 401/403 instead of a 500 for unauthenticated access.
- In tests, run requests through the full app with middleware rather than calling handlers directly.
Example fix
// before
app.route("/org/codemode-scripts", codemodeScriptRoutes) // no org middleware
// after
app.use("/org/*", organizationContextMiddleware)
app.route("/org/codemode-scripts", codemodeScriptRoutes) Defensive patterns
Strategy: try-catch
Validate before calling
// before calling routes or inside the handler
const organizationContext = c.get("organizationContext")
if (!organizationContext) {
return c.json({ error: "organization_context_required" }, 401)
} Type guard
function hasOrganizationContext(c: { get(name: "organizationContext"): unknown }): boolean {
return c.get("organizationContext") !== undefined && c.get("organizationContext") !== null
} Try / catch
try {
return await contextFor(c)
} catch (e) {
if (e instanceof Error && e.message === "organization_context_required") {
return c.json({ error: "organization_context_required" }, 401)
}
throw e
} Prevention
- Always mount org-scoped routes behind the middleware that sets organizationContext
- Check middleware registration order — context middleware must precede route handlers
- Return 401/403 (not 500) when the context is missing, via a top-level error handler
- In tests, exercise the full app stack so middleware runs, instead of calling handlers directly
When it happens
Trigger: Any codemode script route handler calling contextFor when c.get("organizationContext") is undefined — i.e. the organization-context middleware did not run, did not match the route, or failed silently before this handler.
Common situations: Registering the codemode-scripts routes outside the middleware chain that sets organizationContext; middleware short-circuiting on auth failure without halting; a route path added before the middleware's route matcher; tests invoking handlers directly without the middleware.
Understand the failure class
- HTTP status errors: handling 4xx and 5xx responses — how to handle 4xx and 5xx responses properly.
Related errors
- ${allowedEmailDomains.length === 1 ? `This workspace only al
- saved_workflow_plugin_context_required
- saved_workflow_manager_context_required
- MCP endpoint returned HTTP ${methodResponse.status} to GET
- PROVIDER_AUTHORIZATION
AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01).
Data as JSON: /api/errors/873857f8625cabb0.
Report an issue: GitHub.