You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Carry the configured tenant when materializing remote daemon artifacts.
Forward that scope through the local proxy and reconstruct it for the daemon artifact endpoint.
Preserve auth-hook-derived tenant identities and cover both successful and cross-tenant downloads.
Bump the daemon RPC protocol so mixed peers reject the new artifact authorization contract during health negotiation, before command RPC.
Root cause
Screenshot RPC requests registered artifacts under meta.tenantId, but the later GET /artifacts/:id request only carried the proxy token. Local proxies use a shared proxy token, so the daemon correctly treated that download as unscoped and rejected the tenant-owned artifact.
Blocked on RPC compatibility: this makes x-agent-device-tenant required to materialize tenant-scoped /artifacts/* through the proxy, but /health still advertises the old DAEMON_RPC_PROTOCOL_VERSION. A new client with an old proxy/server, or an old client with the new server, passes the health compatibility check and only fails after command RPC during artifact download. ADR 0006 explicitly classifies changes to artifact-route authentication requirements as protocol-breaking. Please bump the RPC protocol version and add skew coverage proving incompatible peers fail before command RPC.
The tenant header flow and auth-hook precedence otherwise look correct.
Addressed the RPC compatibility blocker in 68c2be3. The daemon RPC protocol is now v2, and the remote-client regression covers both older and newer peers, asserting that only /health is requested and command RPC is never sent. The packaged CLI health fixture now uses the shared protocol constant. Validation: pnpm check:affected --base origin/main --run (79 Vitest files / 619 tests plus 15 Node integration tests), followed by the chained format, typecheck, lint, and focused 50-test gate.
Code review is clean at 68c2be30d. The RPC protocol bump correctly makes the new artifact tenant-auth requirement fail fast across version skew, both older/newer peer regressions prove /rpc is never sent, and the #1316 tenant flow plus auth-hook precedence remain correct. All 23 checks are green; no remaining blocker found.
Preview removed because the pull request was closed.
2026-07-17 09:37 UTC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ready-for-humanValid work that needs human implementation, judgment, or maintainer merge
1 participant
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Root cause
Screenshot RPC requests registered artifacts under
meta.tenantId, but the laterGET /artifacts/:idrequest only carried the proxy token. Local proxies use a shared proxy token, so the daemon correctly treated that download as unscoped and rejected the tenant-owned artifact.Validation
pnpm check:affected --base origin/main --runpnpm check:unitpnpm test:integration:provider(37 files, 140 tests)/healthand before/rpcCloses #1316