fix(pipeline): decouple Runner from extension permissions (LANG-54) (#2723)

* fix(pipeline): decouple runner from extension allowlist

Co-authored-by: multica-agent <[email protected]>

* fix(pipeline): complete runner diagnostics and real runtime coverage

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: multica-agent <[email protected]>
This commit is contained in:
RockChinQ
2026-10-19 23:07:11 +08:00
committed by GitHub
co-authored by multica-agent
parent 5a6ddbff6f
commit d9e4e7d9df
24 changed files with 1012 additions and 35 deletions
+5 -8
View File
@@ -14,7 +14,7 @@ from ...api.http.context import ExecutionContext
from ...api.http.service.tenant import TenantContext
from .descriptor import RunnerDescriptor
from .id import parse_runner_id, format_runner_id
from .errors import RunnerNotFoundError, RunnerNotAuthorizedError
from .errors import RunnerNotFoundError
class RunnerRegistry:
@@ -229,14 +229,13 @@ class RunnerRegistry:
Args:
runner_id: Runner ID to lookup
bound_plugins: Optional bound plugins filter
bound_plugins: Legacy pipeline extension filter; does not authorize Runners.
Returns:
RunnerDescriptor
Raises:
RunnerNotFoundError: If runner not found
RunnerNotAuthorizedError: If runner not in bound plugins
"""
# Parse and validate runner ID format
try:
@@ -259,11 +258,9 @@ class RunnerRegistry:
if descriptor is None:
raise RunnerNotFoundError(runner_id)
# Check authorization
if bound_plugins is not None:
plugin_id = descriptor.get_plugin_id()
if plugin_id not in bound_plugins:
raise RunnerNotAuthorizedError(runner_id, bound_plugins)
# A selected Runner is independent of the pipeline extension allowlist.
# Installation enablement and Workspace scope are enforced by the connector
# again at invocation; never widen the extension permissions on the query.
return descriptor