Remote-safe: pipe/card/field/member/webhook/portal read tools#447
Merged
Conversation
This was referenced Jul 20, 2026
adriannoes
previously approved these changes
Jul 20, 2026
adriannoes
left a comment
Collaborator
There was a problem hiding this comment.
Summary
LGTM for #441. The 14 read tools lockstep meta=REMOTE with REMOTE_SEED, local drift-guard is green, and mutations in the touched modules stay unmarked. No local-profile behavior change. Approving the allowlist slice.
What worked well
- Exact 14↔14 marker/seed match with the same drift-guard pattern as the rest of the #443→#447 stack.
- Write paths in the same files (
create_webhook, portal CRUD, relation mutations, membership mutators) correctly left unmarked.
Also noted
- Please reword the new
#441REMOTE_SEEDcomment before merge: it says relation reads may hit Pipefy's Internal API, butget_pipe_relations,get_table_relations, andget_card_relationsuse public GraphQL only. Internal is for mutations such asdelete_card_relation, which stay withheld. Prefer public GraphQL for those getters (and Interfaces for portal reads if you mention endpoints). Comment-only; allowlist membership is fine. - Stack tip: merge after #443→#446 (or retarget the base). GitHub checks empty on this stacked head is process noise given local green.
- PR body "76 exposed" matches this tip's seed; withheld "106" is full-stack measurement (including #434 writes), not a tip defect.
Review path
adriannoes
self-requested a review
July 20, 2026 15:14
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Closes #441. Part of migrating the default-deny remote profile to expose the read tools that meet the remote-safe criteria (milestone: Hosted-safe tool surface). Stacked on
rc-dev/feat/remote-safe-report-reads.Motivation
Under
--profile remotethe server exposes only tools carryingmeta=REMOTE(tracked byREMOTE_SEED); many pure read tools that reach the API with the request-scoped bearer and are fully governed by API permissions were still withheld. This exposes the remaining core relation/config/membership/portal reads.Outcome
Marks 14 read tools remote-safe:
get_card_relations,get_card_inbox_emails,get_field_condition,get_field_conditions,get_labels,get_pipe_members,get_pipe_relations,get_phase_allowed_move_targets,get_phase_cards_count,get_table_relations,get_webhooks,get_email_templates,get_portal,list_portals. Each tool carriesmeta=REMOTEand a matchingREMOTE_SEEDentry; the drift-guard test keeps the two in lockstep. No new tools, no behavior change under the local profile.Remote-profile validation
The remote-safe read migration (this PR is part of the stack #437→#441) was verified end-to-end by running the code in
--profile remote --transport httplocally — behaving as a deployed instance — and connecting an MCP HTTP client with a valid RS256 Keycloak bearer. Measured on an integration branch that also carried the in-flight provider-write work (#434), so the withheld count includes those write tools:--profile remote --transport httpexposed 76, withheld 106(default-deny)401(bearer required)tools/listwith a valid RS256 bearerget_organization,get_pipe,get_llm_providers,get_ai_agentscreate_card,create_llm_provider,delete_card,upload_attachment_to_card,execute_graphqlabsent — 0 leakedget_organizationexecuted (isError=false)The 76 remote-safe tools are the 23 pre-existing plus the 53 read tools this migration set (#437–#441) adds. Registration-time filtering is also covered by the
test_remote_profile.pydrift-guard andtest_on_exposes_seed_and_withholds_the_rest.