<img width="1048" height="482" alt="스크린샷 2026-03-12 오전 9 11 56" src="https://github.com/user-attachments/assets/68009980-097c-4736-b7c4-eb8f9a6f05be" /> ## Summary - Extract inline value control button from `WidgetWithControl` into reusable `SeedControlButton` component - Support `badge` (pill) and `button` (square) variants per Figma design system spec - Use native `<button>` element for proper a11y (works with Reka UI's `PopoverTrigger as-child`) ## Test plan - [x] Verify seed control button renders correctly on KSampler node's seed widget - [x] Verify popover opens on click and mode selection works - [x] Verify all 4 modes display correct icon/text (shuffle, pencil-off, +1, -1) 🤖 Generated with [Claude Code](https://claude.com/claude-code) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9744-feat-extract-SeedControlButton-component-3206d73d365081a3823cc19e48d205c1) by [Unito](https://www.unito.io) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: github-actions <github-actions@github.com>
5.8 KiB
Notion Provider - Ticket Intake
Provider-specific logic for ingesting tickets from Notion.
URL Pattern
https://www.notion.so/workspace/Page-Title-abc123def456...
https://notion.so/Page-Title-abc123def456...
https://www.notion.so/abc123def456...
Page ID is the 32-character hex string (with or without hyphens).
Prerequisites
- Notion MCP connected and authenticated
- If not setup:
claude mcp add --transport http notion https://mcp.notion.com/mcp - Authenticate via
/mcpcommand if prompted
Fetch Ticket Content
Use Notion:notion-fetch with the page URL or ID:
Fetch the full page content including all properties
Extract Ticket Data
Extract these properties (names may vary):
| Property | Expected Name | Type |
|---|---|---|
| Title | Name / Title | Title |
| Status | Status | Select |
| Assignee | Assignee / Assigned To | Person |
| Description | - | Page content |
| Slack Link | Slack Link / Slack Thread | URL |
| GitHub PR | GitHub PR / PR Link | URL |
| Priority | Priority | Select |
| Area | Area / Category | Select |
| Related Tasks | Related Tasks | Relation |
If properties are missing: Note what's unavailable and continue with available data.
Update Source (REQUIRED)
⚠️ DO NOT SKIP THIS STEP. This is a required action, not optional.
⚠️ Notion Write Safety rules apply (see $PIPELINE_DIR/docs/notion-write-safety.md for full reference):
- Whitelist: Only
Status,GitHub PR, andAssigneefields may be written - Valid transitions: Not Started → In Progress, In Progress → In Review, In Review → Done
- Logging: Every write attempt MUST be logged with timestamp, field, value, previous value, skill name, and success status
Use Notion:notion-update-page to update the ticket:
- Status: Set to "In Progress" (only valid from "Not Started")
- Assignee: Assign to pipeline owner (Notion ID:
175d872b-594c-81d4-ba5a-0002911c5966)
{
"page_id": "{page_id_from_ticket}",
"command": "update_properties",
"properties": {
"Status": "In Progress",
"Assignee": "175d872b-594c-81d4-ba5a-0002911c5966"
}
}
After the update succeeds, log the write via the Pipeline API:
await client.updateTicket(ticketId, {
metadata: {
...ticket.metadata,
notionWrites: [
...(ticket.metadata?.notionWrites || []),
{
field: 'Status',
value: 'In Progress',
previousValue: 'Not Started',
at: new Date().toISOString(),
skill: 'ticket-intake',
success: true
}
]
}
})
If update fails, log with success: false and continue.
Notion-Specific Ticket Fields
Store via API using client.createTicket():
{
"source": "notion",
"notionPageId": "abc123def456...",
"slackLink": "https://slack.com/...",
"relatedTasks": ["page-id-1", "page-id-2"]
}
Slack Thread Handling
If a Slack link exists, use the slackdump skill to fetch the thread content programmatically.
Slack URL Conversion
Notion stores Slack links in slackMessage:// format:
slackMessage://comfy-organization.slack.com/CHANNEL_ID/THREAD_TS/MESSAGE_TS
Convert to browser-clickable format:
https://comfy-organization.slack.com/archives/CHANNEL_ID/pMESSAGE_TS_NO_DOT
Example:
- Input:
slackMessage://comfy-organization.slack.com/C075ANWQ8KS/1766022478.450909/1764772881.854829 - Output:
https://comfy-organization.slack.com/archives/C075ANWQ8KS/p1764772881854829
(Remove the dot from the last timestamp and prefix with p)
Fetching Thread Content
Load the slackdump skill and use the export-thread workflow:
# Export thread by URL
slackdump dump "https://comfy-organization.slack.com/archives/CHANNEL_ID/pMESSAGE_TS"
# Or by colon notation (channel_id:thread_ts)
slackdump dump CHANNEL_ID:THREAD_TS
Save the thread content to $RUN_DIR/slack-context.md and include it in the ticket metadata.
No manual action required. The slackdump CLI handles authentication via stored credentials at
~/.cache/slackdump/comfy-organization.bin.
Database Reference: Comfy Tasks
The "Comfy Tasks" database has these properties (verify via notion-search):
- Status values: Not Started, In Progress, In Review, Done
- Team assignment: "Frontend Team" for unassigned tickets
- Filtering note: Team filtering in Notion may have quirks - handle gracefully
Pipeline Owner Details
When assigning tickets, use these identifiers:
| Platform | Identifier |
|---|---|
| Notion User ID | 175d872b-594c-81d4-ba5a-0002911c5966 |
| Notion Name | Christian Byrne |
| Notion Email | cbyrne@comfy.org |
| Slack User ID | U087MJCDHHC |
| GitHub Username | christian-byrne |
To update Assignee, use the Notion User ID (not name):
properties: {"Assignee": "175d872b-594c-81d4-ba5a-0002911c5966"}
Finding Active Tickets
To list your active tickets:
Use Notion:notion-search for "Comfy Tasks"
Filter by Assignee = current user OR Team = "Frontend Team"
Error Handling
Authentication Error
⚠️ Notion authentication required.
Run: claude mcp add --transport http notion https://mcp.notion.com/mcp
Then authenticate via /mcp command.
Page Not Found
❌ Notion page not found or inaccessible.
- Check the URL is correct
- Ensure you have access to this page
- Try re-authenticating via /mcp