Tencent/WeKnora · error
sandbox: resolve config %q: missing workspace context
Error message
sandbox: resolve config %q: missing workspace context
What it means
resolveTenantSandboxForConfig rejects a named config resolution when tenantID is 0, meaning no workspace/tenant context was provided. Named sandbox configs are tenant-scoped, so without a tenant the resolver must refuse rather than silently pick a backend.
Source
Thrown at internal/application/service/tenant_sandbox_resolve.go:98
disabled, err := policy.WorkspaceScriptsDisabled(ctx, tenantID)
if err != nil {
logger.Warnf(ctx,
"[sandbox] failed to read workspace sandbox policy for %d: %v",
tenantID, err)
} else if disabled {
return sandbox.NewDisabledManager(), nil
}
}
// ② No named workspace config means sandbox execution is disabled. There is
// no deployment-level provider fallback anymore.
if configID == "" || configID == types.SandboxConfigIDGlobalDefault {
return sandbox.NewDisabledManager(), nil
}
// ③ Named config: must not silently fall back to another backend.
if tenantID == 0 {
return nil, fmt.Errorf(
"sandbox: resolve config %q: missing workspace context", configID)
}
if resolver == nil {
return nil, fmt.Errorf(
"sandbox: resolve config %q: per-tenant resolver unavailable", configID)
}
mgr, err := resolver.Resolve(ctx, tenantID, configID)
if err != nil {
logger.Warnf(ctx,
"[sandbox] failed to resolve config %q for workspace %d: %v",
configID, tenantID, err)
return nil, err
}
return mgr, nil
}
View on GitHub (pinned to 988cbb0330)
Solutions
- Ensure the caller passes a valid tenantID (workspace context) when resolving
- Check that middleware/context propagation sets the tenant ID
- For unscoped paths, resolve without a named config so a disabled manager is returned
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at internal/application/service/tenant_sandbox_resolve.go:98 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/5ba0110e5a1ac075.
Report an issue: GitHub.