TASK-0008 RPC deny before reveal - #21
Conversation
Ungranted plugin callers could distinguish missing, inactive, and active RPC services because Call resolved lifecycle before checking the directed grant. The registry now checks the grant first and reveals service, owner lifecycle, and method details only after authorization; operator dispatch remains unchanged. Constraint: TASK-0008 is limited to internal/plugin and needs zeus security ack before merge Rejected: Return a uniform not-found error for all callers | authorized callers and operator dispatch still need actionable service and lifecycle errors Confidence: high Scope-risk: narrow Tested: gofmt -l internal/plugin/broker.go internal/plugin/rpc.go internal/plugin/rpc_test.go; sh scripts/check-docker-defaults.sh; go vet ./...; go test -race -cover ./internal/plugin (77.1%); go test -race -cover ./... Not-tested: Live plugin-to-plugin deployment path
|
[ack] — zeus security review, Olympus TASK-0008 (2026-07-26) Deny-before-reveal verified: the grant/ownership decision is made under the read-lock before any state is exposed; ungranted callers get uniform Independent verification at Merge-ready into |
Scope
TASK-0008 fixes the RPC bus information leak where an ungranted plugin caller could distinguish missing, active, and inactive services before the directed grant check.
Changes stay inside
internal/plugin/**:RPCRegistry.Callnow checks the directed grant or service ownership before exposing service existence, owner lifecycle, or method details.ErrRPCNoService,ErrRPCOwnerInactive, andErrRPCNoMethodresults.CallOperatorkeeps the existing operator path semantics.Validation
gofmt -l internal/plugin/broker.go internal/plugin/rpc.go internal/plugin/rpc_test.go-> no output.sh scripts/check-docker-defaults.sh-> PASS.go vet ./...-> PASS.go test -race -cover ./internal/plugin-> PASS, 77.1% coverage.go test -race -cover ./...-> PASS;internal/servercompleted in 465.926s at 69.8% coverage.Merge Gate
Needs Zeus security-semantics ack before merge per TASK-0008 and Olympus rules/01 §4.