Skip to content

[Bug]: openclaw workboard dispatch fails with missing scope: operator.admin though the method is registered operator.write #92044

Description

@RDavies8

Summary

openclaw workboard dispatch always fails with missing scope: operator.admin, even though the workboard.cards.dispatch gateway method is registered as operator.write and the docs state dispatch requires operator.write. This makes headless / CLI dispatch impossible — only the dashboard "Run" works, because paired operator devices carry operator.admin.

Version

OpenClaw 2026.6.5. Gateway: local, token auth.

Steps to reproduce

  1. Enable the workboard plugin.
  2. Create a card and set it to ready.
  3. Run openclaw workboard dispatch.

Result: missing scope: operator.admin
Expected: the dispatch runs and starts a worker (docs say the method requires operator.write, which the CLI's shared-secret token carries).

Root cause (traced in the 2026.6.5 dist)

  • workboard.cards.dispatch is registered with { scope: operator.write } and is not in the reserved-admin namespaces (exec.approvals. / config. / wizard. / update.).
  • But resolveScopedMethod() looks the method up in getPluginRegistryState().activeRegistry.gatewayMethodDescriptors and finds no descriptor for it, so it returns undefined.
  • authorizeOperatorScopesForMethod() then does resolveRequiredOperatorScopeForMethod(method) ?? "operator.admin" — the unclassified-method fallback defaults the required scope to operator.admin.
  • The openclaw workboard dispatch CLI connects requesting only ["operator.write","operator.read"], so the (incorrect) admin requirement rejects it. The dashboard only works because operator devices hold operator.admin, which short-circuits the check.

Net: plugin gateway methods registered at runtime appear to be missing from the active-registry snapshot used for scope classification, so they silently require operator.admin instead of their declared scope.

Workaround

Call the method through the generic gateway caller, which requests the full default operator scope set (including admin) for an unclassified method:

openclaw gateway call workboard.cards.dispatch --params '{}'

Related (same family — internal/plugin gateway calls vs. scope resolution)

Suggested fix

Either (a) ensure plugin-registered gateway-method descriptors (with their declared scope) populate the active-registry snapshot consulted by resolveScopedMethod, or (b) have the workboard dispatch CLI request the method's declared scope. A general fix to (a) would also prevent this class from recurring for other plugin methods (cf. the memory-core history above).

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High-priority user-facing bug, regression, or broken workflow.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.impact:auth-providerAuth, provider routing, model choice, or SecretRef resolution may break.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions