Conversation
Generated-By: PostHog Desktop Task-Id: 2005db76-9172-4edb-83b9-1f99828992f0
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
Generated-By: PostHog Desktop Task-Id: 2005db76-9172-4edb-83b9-1f99828992f0
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: PostHog/posthog/.coderabbit.yaml Review profile: QUIET Plan: Enterprise Run ID: 📒 Files selected for processing (3)
Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 10 remain after this review. 📝 WalkthroughWalkthroughThe Slack development catalog now describes canvas access and appends the Priority: ⬇️ Low Merge Risk: ⚪ Minimal · up to The development authorization retains canvas access through Slack’s advertised-scope filter, and the setup guide explains when to reconnect. No actionable merge-blocking risk remains beyond normal checks. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to Canvas reading increases the data available to authorized development connections. Production permissions remain unchanged, and project restrictions are enforced during installation and connection use. No introduced authorization bypass was established, but deployed restrictions and provider-side token behavior were not verified. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
Hardening Proposals
🚥 Pre-merge checks | ❌ 1❌ Failed checks (1 warning)
Full details: Description checkExplanation The description covers the problem, user-visible changes, testing, test rationale, release status, documentation, and agent context. However, it marks the change as behind a feature flag, while the provided change summary shows a restricted development-app scope and no feature-flag change. The agent context also omits the required session link and explicit local CodeRabbit CLI result or skip reason. Resolution Verify the changed code for feature-flag checks and select the correct release-status option. Add the agent-session link, and record the local CodeRabbit CLI findings and dispositions or the reason the local pass was skipped. Include any required duplicate, patch-coverage, new-events-schema, and public-artifact gate results if applicable.
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
🤖 CI report
|
|
Risk: Medium · 1 medium This increment is the fix for the earlier Slack canvas-scope finding: Sentinel reviewed |
|
[Medium risk] Adds a new permission scope to the Slack integration. The development-app setup needs a canvas-scope configuration step before the new authorization flow can be relied on. Reviews (2) · Last reviewed commit: "docs(mcp): clarify Slack scope reauthori..." |
| disabled=True, | ||
| # Private-channel, DM, email, and write scopes require separate security approval. | ||
| oauth_scope_allowlist=( | ||
| "canvases:read", |
There was a problem hiding this comment.
Slack MCP scope add exposes private-channel and DM canvas content, crossing the entry's own security boundary
Adding canvases:read grants the Slack MCP connection read access to canvases attached to private channels and DMs — the exact content class the allowlist's own comment (catalog.py:325: "Private-channel, DM, email, and write scopes require separate security approval") reserves for separate approval. Every other scope in the list is public-only or profile-only, including the deliberate search:read.public; Slack has no public-only canvas scope, so this one is broad by necessity. The list is the only public/private control: it flows via catalog_sync.py:105 into template.oauth_scope_allowlist and then into the authorize URL (views.py:1559, requested_oauth_scopes at oauth.py:115), and nothing downstream filters by publicness.
How:
- A member in an allowed project connects Slack via PostHog; the OAuth request now includes
canvases:read. - Slack's MCP server enables canvas read tools for that user token.
- Canvas content attached to private channels or DMs — content the allowlist otherwise excludes (no
groups:history/dms:history) — becomes readable through PostHog MCP tools and the AI canvas path (call_member_server_tool, facade/api.py). - For a team-scope shared installation,
member_installation_for_host(facade/api.py:590) lets any team member ride that token, exposing the connecting user's private/DM canvases to others.
Fix: Hold canvases:read until the separate private-channel/DM security approval the comment requires is documented in the PR, or drop it if Slack later offers a public-only canvas scope — and update the comment either way.
React with 👍 if useful or 👎 if not
There was a problem hiding this comment.
Not approved — escalated to a human reviewer.
Re-add the stamphog label to request another review once you have addressed this.
This adds an OAuth scope that reaches private-channel and DM canvases, which the entry's own comment reserves for separate security approval. Two reviewers raised this as unresolved security concerns, and the diff doesn't address them.
- Author wrote 100% of the modified lines and has 2 merged PRs in these paths (familiarity STRONG).
- 👍 on the PR from greptile-apps[bot].
- Unresolved security concern from @greptile-apps and @parameterai on products/mcp_store/backend/catalog.py: canvases:read has no public-only variant, so it exposes private-channel and DM canvas content. The catalog comment says that kind of access needs separate security approval.
- The Slack catalog description still says only public channels, messages, and user profiles. Users authorizing the connection are not told that canvas access is requested.
- Unresolved @greptile-apps comment on docs/internal/slack-local-setup-guide.md: the dev Slack app must be granted canvases:read before the new canvas check can succeed, and the guide doesn't say so.
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✓ | no deny categories matched |
| size | ✓ | 1L, 1F substantive, 5L/2F incl. docs/generated/snapshots — within ceiling |
| tier | ✓ | T1-agent / T1b-small (5L, 2F, two-areas, feat) |
| stamphog 2.3.1 | .stamphog/policy.yml @ fc9382a · reviewed head fc9382a |
|
The escalation is valid. This should remain unapproved until security explicitly approves the broader access, or Slack provides a public-only canvas scope. Once approved, update the Slack catalog description and dev-app setup guide/manifest to document and grant |
Generated-By: PostHog Desktop Task-Id: 2005db76-9172-4edb-83b9-1f99828992f0
Problem
Internal Slack MCP testers cannot read canvases through the restricted development app.
Why: Canvas reads let internal testers validate Slack MCP without widening the production connector.
Changes
canvases:read; the production catalog keeps its existing scope list.How did you test this code?
The catalog sync suite covers the dev-only scope transformation, template disclosure, and production exclusion.
Test rationale: The existing dev Slack sync test now fails if canvas access leaks into production or disappears from the dev template.
👉 Stay up-to-date with PostHog coding conventions for a smoother review.
Release status
Automatic notifications
Docs update
Updated the internal Slack setup guide with the user scope, canvas verification, and reconnection requirement.
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Agent: PostHog Desktop Codex, GPT-5
Skills: /writing-user-facing-copy, /writing-tests, and /writing-pr-descriptions. Greptile feedback moved canvas access to the restricted dev override. The diff contains no customer data or private operational details.
Created with PostHog Desktop