Skip to content

feat(workflows): attach first-run email context to posthog ai - #112079

Closed
Silthus wants to merge 57 commits into
PostHog:masterfrom
Silthus:feat/workflows-first-run-ai-edit
Closed

Silthus wants to merge 57 commits into
PostHog:masterfrom
Silthus:feat/workflows-first-run-ai-edit

Conversation

@Silthus

@Silthus Silthus commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Problem

A new Workflows user cannot discuss the selected, unsaved first-run email with PostHog AI without explaining its contents.

Stacked on #112053. Tracks Silthus/posthog#261.

This draft covers opening AI and keeping the email context current. AI does not apply edits to the editor in this draft.
The ticket remains parked for the scope decision.

Note

🔵 Merge risk: low
The increment changes frontend panel state and context behind the first-run and sandbox flags. It adds no writes or sends.

Changes

Kind Files Lines
Production 4 +310 −1
Tests 1 +318 −0
Total 5 +628 −1
  • Make it yours opens PostHog AI with the selected email attached. It sends no prompt for the user.
  • An existing open panel keeps its selected tab until the user chooses AI.
  • Switching or editing emails updates the context, including the email's position and the sequence length.
  • Closing AI keeps it closed for the browser session. "Change with PostHog AI" reopens it.
  • The button restores a dismissed email chip.
  • Preflight must resolve before AI opens, and availability changes refresh the context.
  • Leaving Make it yours removes its context. The legacy runtime receives no context and disables the button.
  • Plain-text authoring attaches text without the stale visual design.
  • Oversized context falls back through rendered HTML and shortened text, with bounded metadata and an explicit indication.
  • Trusted instructions contain only static text.

The existing frontend-applied MaxTool still exists, but only in the frozen LangGraph runtime.
The sandbox tools update saved workflows or library templates; they cannot change this unsaved email.
Saving a record early would break the first-run contract. This draft therefore tells AI to suggest changes for the user to apply.

State Full width 520px scene
Before, from the parent PR
AI open, selected email attached
Before and after interaction

Before:

flowchart LR
    A[Make it yours] --> B[Edit email manually]
    classDef phYellow fill:#f9bd2b,stroke:#f9bd2b,color:#000;
    classDef phBlue fill:#1d4aff,stroke:#1d4aff,color:#fff;
    class A phYellow;
    class B phBlue;
Loading

After:

flowchart LR
    A[Make it yours] --> B{{AI with selected email}}
    B --> C[User types a request]
    C --> D[Suggested changes]
    D --> E[User edits email manually]
    classDef phYellow fill:#f9bd2b,stroke:#f9bd2b,color:#000;
    classDef phBlue fill:#1d4aff,stroke:#1d4aff,color:#fff;
    classDef phGray fill:#e5e7eb,stroke:#c7ccd1,color:#000;
    class A phYellow;
    class B,C,E phBlue;
    class D phGray;
Loading

How did you test this code?

Proof bundle contains red/green logs and the final local gate.

Test rationale: The kea integration seam observes panel state and attached context while driving real email-selection and edit actions.
The closest existing coverage is firstRunMakeItYoursLogic.test.ts and sceneAgentPanelLogic.test.ts.
Those tests do not cover first-run context, dismissal and restoration, cleanup, delayed preflight, body mode, or bounded context.
The HTTP layer supplies synthetic templates; no internal logic is mocked.

The final gate runs the touched test through hogli, frontend typecheck, lint, format checking, and strict preflight against the parent.
Preflight exits successfully with a branch freshness advisory and a complexity warning. Both pushes also pass the strict hook.
The existing first-run Jest suites also pass.

A headless browser renders the production scene and real AI panel in a scratch story using fake data.
The interaction log confirms switching, dismissal, and reopening.
Email 2 shows the updated context.
The scratch story and temporary configuration are removed from the final tree.

A message sent inside the canvas export debounce can attach the previous committed design. The global chat send path is unchanged.

Unchecked: live LLM behavior, backend sends, workflow creation, and AI applying editor changes.
No backend tool changes are included.

Release status

  • No feature flag controls this change
  • This change is behind a feature flag and is not available to users
  • This change makes a previously flagged feature available to everyone

Automatic notifications

  • Publish to changelog?

Docs update

None. No existing document covers the first-run AI interaction; the scope and limitations are recorded here.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Agent: T3 Code / Codex, GPT-6.1 Sol; Claude Code, Claude Opus 5.5 for the UI changes.

Session: ticket worker for Silthus/posthog#261, under map #253.
Tools: shell, Git, gh, hogli, kea typegen, headless Playwright. The public fixtures use repository templates and example.com.
No matching open PR surfaced in the duplicate search.

CodeRabbit CLI skipped because it is signed out. The PostHog asset uploader refused this account; proof lives on the fork assets branch.
One read-only Claude Opus 5.5 review ran after draft creation against 260cca54a035935295b4c434e87efaf65b34bcd0.
The report and all dispositions accompany the final gate.
The fixes ship at d1e0b0f99fd58241e93a0566b1f55df2195cf880.

Finding Disposition
M1, dismissed context Fixed: per-template groups and button restoration.
M2, stale visual body Fixed: plain-text mode excludes design and HTML.
M3, context budget Fixed: HTML fallback, bounded metadata, final length check.
M4, preflight availability Fixed: wait for resolution and refresh context.
L1, non-user close Fixed for already-closed panels. Moving AI to the main scene still counts as deliberately closing the panel.
L2, canvas debounce Send coordination rejected as outside this slice's write scope; the timing limit is documented above.
L3, replacing another panel Fixed: preserve an open tab until the explicit AI button.
L4, copy and analytics Copy fixed. Additional events rejected; the specified activation funnel and existing sidebar events cover the intended tracking scope.

GitHub denied assigning Silthus as the PR assignee. Silthus remains the ticket assignee and human DRI.

The parent stack has inherited conflicts against upstream master in messaging's email service, its tests, and broadcast test sending.
No file in this increment conflicts. The conductor owns the shared stack refresh.

Skills invoked

/tdd, /unslop, /writing-tests, /writing-ui-components, /writing-kea-logics, /placing-product-frontend-code, /adopting-generated-api-types, /writing-user-facing-copy, /writing-code-comments, /integrating-with-posthog-ai, /using-kea-disposables, /hogli, /run-posthog, /running-ci-preflight, /merge-risk, /writing-pr-descriptions, /reviewing-with-coderabbit, /principle-prove-it-works, /leaving-pr-comments, /writing-voice.
The existing designing-email-templates skill was read and left unchanged.

🤖 Generated with Codex and Claude Code

Silthus and others added 30 commits October 3, 2026 09:48
…lusions

Unfinished: the red/green proof runs and the OpenAPI regeneration were
interrupted by a devbox rebalance. Tests are written but not yet run green;
generated OpenAPI output is not regenerated. Continue test-first.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ender endpoint

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…equire write scope

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…quest_access comment

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…haracters

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Silthus and others added 16 commits October 5, 2026 08:53
…reated

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…d modal

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ws tab

Behind the workflows-first-run flag, a project with no workflows sees the
global email templates on the Workflows tab instead of the empty state.
Templates its events can start come first, led by one recommended starter,
and "Start playing" opens a blank workflow.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A planned event definition, such as one the Wizard creates before the
event arrives, no longer marks a template ready. The recommended reason
moves above the cover so the footer shows only what starts the template,
a not-ready card refers to the event chip above it, and the subtitle
stops promising an order when nothing is ready.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The error banner now covers a failed fit lookup as well as a failed
template load, and the subtitle waits for the gallery to load. The
template type before fit gets a name that does not clash with the email
template type, and the pick event is checked for every kind of card.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The subtitle now matches the picked and all views, and the first run tab
reads the setup status without mounting its logic twice.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Covers below the first screen no longer download up front, and a test
holds the error banner and its retry for both gallery lookups.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The test send modal passes the member list loading state to the recipient
select, so the popover shows skeleton rows instead of the empty state until
the suggestions arrive, and the server skip message wraps a long address
instead of clipping it. The email sender picker reads the sandbox sender id
and its selection from emailTemplaterLogic, which now derives them once with
the same rule the picker and chooseSenders already used.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The first run reuses the reader the broadcast test send has, so it moves
next to the hog flow test result type it reads.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A gallery card now opens Make it yours on the Workflows tab, addressed by
the template search param. The screen lists every email of the template
in flow order with its timing, keeps edits across switching, sends the
open email to the signed-in user from the first-run sender, and creates
the workflow with every edited email, the sender on every email step and
the matched trigger event, active or draft per the Enable workflow switch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… make it yours

The templater exports a canvas edit 500ms after the last change. Switching
emails, sending a test or creating the workflow inside that window acted on
the email without the edit, so all three now wait for the export. The editor
runs as a template editor, which hides the From and To fields the first run
overrides anyway, so the controls no longer promise a sender the payload
ignores.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@trunk-io

trunk-io Bot commented Oct 5, 2026

Copy link
Copy Markdown

Merging to master in this repository is managed by Trunk.

  • To merge this pull request, check the box to the left or comment /trunk merge below.

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

@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

📝 Walkthrough

Walkthrough

The pull request adds managed sandbox email senders across backend and frontend flows. It provisions senders, validates recipient membership, applies sandbox delivery rules, and updates sender selection interfaces. It also adds a feature-gated workflows first-run gallery and editor with template recommendations, email editing, test sends, workflow creation, and AI context. Workflow templates now expose structured start metadata.

Priority: ⬇️ Low

Merge Risk: 🔵 Low · up to 260cc

The new sandbox sender and first-run workflow experience are behind feature flags. Three small issues remain. One template tells users it starts on /onboarding but actually fires on a different URL. Turning on sandbox sending before its SES settings are configured causes generic send failures instead of a clean skip. One failed sender setup is not retried until the user switches projects. None of these blocks a flagged merge, but they are cheap to fix.

Security Architecture Review

Security architecture risk: 🟡 Moderate · up to 260cc

Recipient identity checks and fixed sender settings constrain sandbox delivery. However, safe enablement depends on independent abuse controls for the shared sending infrastructure. Unsaved email content also becomes AI conversation context, making its trust separation and cleanup important.

Retained concerns

  • Medium · security · inferred: The new sandbox branch bypasses project sending budgets while routing through shared SES infrastructure. Enabling it before the documented independent sandbox caps and pause gate are deployed would expand cross-project abuse and failure-containment scope. This is a conditional rollout concern, not evidence that production is currently enabled or unprotected.
Security review details

Security Blast Radius

  • inferred — The user-facing test path requires workflow write authority and pins execution to the authenticated project. Sandbox destinations are constrained to that project's organization members, but multiple projects using the configured shared SES route can share provider-level reputation and availability consequences.

Security Findings and Attack Paths

  • inferred — A project actor could generate sandbox volume without consuming the ordinary project sending budget. Membership restrictions limit destinations, and suspension and worker switches remain controls, but independent sandbox limits are necessary to contain volume across the shared route. Deployed replacement controls were not verified.

Trust Boundaries and Controls

  • observed — Sandbox enforcement is server-side: wrong-project integrations are rejected; To, Cc, and Bcc are checked against active, verified organization members; lookup exceptions block delivery; and recipients are checked again immediately before the SES call. Membership snapshots expire after at most sixty seconds, so revocation is bounded rather than instantaneous.
  • observed — The final sandbox projection fixes sender fields and clears Reply-To before SES dispatch. Server validation also rejects new sandbox sender overrides. This defeats the apparent bypass suggested by the earlier spread of user-controlled delivery parameters.

Resilience and Maintainability Implications

  • observed — AI context updates are idempotent provider replacements, and unmount cleanup removes the provider. Runtime changes clear unavailable context. Closing the panel records session dismissal without submitting a message; text context remains eligible for subsequent user sends so edits are not suppressed by task-level deduplication.

Hardening Proposals

  • proposed — Make sandbox enablement contingent on demonstrated independent volume limits and pause enforcement, rather than relying solely on rollout documentation. Validate both workflow and test-send paths, including control-service failure and switch-off during retries.
🚥 Pre-merge checks | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description follows the required sections and clearly explains the first-run AI context change. However, it does not describe many changes listed in the PR summary, including sandbox sender servic… Reconcile the description with the actual PR scope. If those summarized changes are part of this PR, add their user-visible effects, testing, and release status. If they belong to the parent stack, clarify that the description and change co…
Full details: Description check

Explanation

The description follows the required sections and clearly explains the first-run AI context change. However, it does not describe many changes listed in the PR summary, including sandbox sender services and validation, email integration updates, and workflow template metadata.

Resolution

Reconcile the description with the actual PR scope. If those summarized changes are part of this PR, add their user-visible effects, testing, and release status. If they belong to the parent stack, clarify that the description and change counts cover only this increment, and ensure the PR summary reflects that scope.

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
⚔️ Resolve merge conflicts 💡
  • Resolve merge conflict in branch feat/workflows-first-run-ai-edit
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Quiet mode is enabled, so only the most important comments were posted inline. Other review comments are grouped below.

🟡 Other comments (4)
products/workflows/backend/templates/onboarding_started_but_not_completed_template.json-4-8 (1)

4-8: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

The starts_on detail does not match the trigger filter.

starts_on.detail says "on /onboarding". The trigger filter at Lines 37-40 matches $current_url icontains messaging/campaigns. The gallery tells users that the workflow fires on /onboarding, but the created workflow fires on a different URL. Align the detail with the filter value, or change the filter to /onboarding.

products/workflows/frontend/firstRun/MakeItYoursEmailList.tsx-14-16 (1)

14-16: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Fix pluralization for single-email templates.

When a template has one email, the header reads "1 emails in this workflow". Use the singular noun when the count is 1.

Proposed fix
-                {templateEmails.length} emails in this workflow
+                {templateEmails.length} {templateEmails.length === 1 ? 'email' : 'emails'} in this workflow
nodejs/src/cdp/cdp-services.ts-464-472 (1)

464-472: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Fail closed when the sandbox route is only partly configured.

enabled comes only from WORKFLOWS_SANDBOX_SENDER_ENABLED. The tenant, configuration set, and From address all default to ''. Suppose the flag is turned on before SES_SANDBOX_TENANT_NAME, SES_SANDBOX_CONFIGURATION_SET, and SES_SANDBOX_FROM_ADDRESS are set. Then every sandbox send passes the membership checks and reaches SES with TenantName: '', ConfigurationSetName: '', and an empty From address. The result is a generic Failed to send email via SES error and an email_failed metric. Users do not get the "sandbox sender is unavailable" skip.

Derive enabled from all four settings. EmailService already handles a disabled sender cleanly.

Proposed fix
         new SandboxEmailSender(
             {
-                enabled: config.WORKFLOWS_SANDBOX_SENDER_ENABLED,
+                enabled:
+                    config.WORKFLOWS_SANDBOX_SENDER_ENABLED &&
+                    !!config.SES_SANDBOX_TENANT_NAME &&
+                    !!config.SES_SANDBOX_CONFIGURATION_SET &&
+                    !!config.SES_SANDBOX_FROM_ADDRESS,
                 tenantName: config.SES_SANDBOX_TENANT_NAME,
frontend/src/lib/integrations/integrationsLogic.ts-1139-1149 (1)

1139-1149: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

A failed result blocks every later provisioning attempt until the project changes.

provisionMissingSandboxEmailSender returns early when sandboxEmailSenderProvisionResult is truthy. A transient error or a 15 s timeout stores 'failed'. After that, the sandbox sender is never requested again for the session, and only clearIntegrations on a project switch resets it. Users with no own sender then stay on the empty state. Retry on 'failed' and keep only 'unavailable' sticky.

Proposed fix
-                values.sandboxEmailSenderProvisionResult ||
+                values.sandboxEmailSenderProvisionResult === 'provisioned' ||
+                values.sandboxEmailSenderProvisionResult === 'unavailable' ||

This change can make a hard-failing endpoint retry on every integrations poll. Add a backoff or a retry cap if that is a concern.

🧹 Nitpick comments (1)
products/workflows/frontend/firstRun/WorkflowsFirstRunMakeItYours.stories.tsx (1)

83-88: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Restore the mutated app context after the ViewerAccess story.

The render function writes 'viewer' straight into the global window.POSTHOG_APP_CONTEXT.resource_access_control.hog_flow. Nothing resets it. Stories that render after this one in the same runtime can then inherit viewer access, and their snapshots become wrong. Set the value in a decorator, and restore the previous value when the decorator unmounts.


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository: PostHog/posthog/.coderabbit.yaml
  • Review profile: QUIET
  • Plan: Enterprise
  • Run ID: fb7f6cb5-9ab4-4fe4-9d89-db4a23c1eb2f
📥 Commits

Reviewing files that changed from the base of the PR and between bde3392 and 260cca5.

⛔ Files ignored due to path filters (3)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • products/integrations/frontend/generated/api.ts is excluded by !**/generated/**
  • products/workflows/frontend/generated/api.schemas.ts is excluded by !**/generated/**
📒 Files selected for processing (102)
  • docs/internal/workflows-email-sending-tiers.md
  • frontend/src/lib/components/CyclotronJob/CyclotronJobInputs.tsx
  • frontend/src/lib/constants.tsx
  • frontend/src/lib/integrations/IntegrationsList.tsx
  • frontend/src/lib/integrations/integrationsLogic.test.ts
  • frontend/src/lib/integrations/integrationsLogic.ts
  • frontend/src/lib/integrations/utils.ts
  • frontend/src/scenes/hog-functions/email-templater/EmailTemplater.test.tsx
  • frontend/src/scenes/hog-functions/email-templater/EmailTemplater.tsx
  • frontend/src/scenes/hog-functions/email-templater/NativeEmailIntegrationChoice.stories.tsx
  • frontend/src/scenes/hog-functions/email-templater/emailTemplaterLogic.test.ts
  • frontend/src/scenes/hog-functions/email-templater/emailTemplaterLogic.tsx
  • frontend/src/scenes/hog-functions/email-templater/selectSenders.test.ts
  • frontend/src/scenes/hog-functions/email-templater/selectSenders.ts
  • nodejs/package.json
  • nodejs/src/cdp/cdp-services.ts
  • nodejs/src/cdp/config.ts
  • nodejs/src/cdp/services/managers/organization-members.service.ts
  • nodejs/src/cdp/services/messaging/email.service.test.ts
  • nodejs/src/cdp/services/messaging/email.service.ts
  • nodejs/src/cdp/services/messaging/sandbox-email-sender.ts
  • nodejs/src/cdp/types.ts
  • nodejs/src/cdp/utils.ts
  • posthog/api/integration.py
  • posthog/cdp/test/test_validation.py
  • posthog/cdp/validation.py
  • posthog/models/integration/__init__.py
  • posthog/models/integration/email.py
  • posthog/settings/ses.py
  • products/integrations/mcp/tools.yaml
  • products/workflows/backend/facade/api.py
  • products/workflows/backend/facade/contracts.py
  • products/workflows/backend/presentation/views/hog_flow.py
  • products/workflows/backend/presentation/views/hog_flow_template.py
  • products/workflows/backend/services/sandbox_sender.py
  • products/workflows/backend/templates/announce_a_new_feature_template.json
  • products/workflows/backend/templates/celebrate-milestone.json
  • products/workflows/backend/templates/feature-adoption-tips.json
  • products/workflows/backend/templates/heavy-usage-detected.json
  • products/workflows/backend/templates/high-intent-notification.json
  • products/workflows/backend/templates/negative-survey-response.json
  • products/workflows/backend/templates/onboarding_started_but_not_completed_template.json
  • products/workflows/backend/templates/re-engagement-workflow.json
  • products/workflows/backend/templates/repeated-failure-alert.json
  • products/workflows/backend/templates/support-ticket-notification.json
  • products/workflows/backend/templates/ticket-unresolved-alert.json
  • products/workflows/backend/templates/trial-ending-reminder.json
  • products/workflows/backend/templates/trial_started_upgrade_nudge_template.json
  • products/workflows/backend/templates/unlocking_advanced_features.json
  • products/workflows/backend/templates/unused-features-education.json
  • products/workflows/backend/templates/user-stuck-onboarding.json
  • products/workflows/backend/templates/user-upgrade-webhook.json
  • products/workflows/backend/templates/welcome_email_sequence_template.json
  • products/workflows/backend/test/test_sandbox_sender_lifecycle.py
  • products/workflows/backend/tests/api/test_email_reputation.py
  • products/workflows/backend/tests/api/test_hog_flow_template.py
  • products/workflows/backend/tests/api/test_sandbox_sender.py
  • products/workflows/backend/tests/api/test_sandbox_sender_validation.py
  • products/workflows/frontend/Broadcasts/broadcastTestSendLogic.ts
  • products/workflows/frontend/Broadcasts/steps/BroadcastContentStep.tsx
  • products/workflows/frontend/Channels/MessageChannels.stories.tsx
  • products/workflows/frontend/Channels/MessageChannels.tsx
  • products/workflows/frontend/Channels/SandboxEmailSenderRow.tsx
  • products/workflows/frontend/TemplateLibrary/SendTestEmailModal.stories.tsx
  • products/workflows/frontend/TemplateLibrary/SendTestEmailModal.test.tsx
  • products/workflows/frontend/TemplateLibrary/SendTestEmailModal.tsx
  • products/workflows/frontend/TemplateLibrary/messageTemplateTestSendLogic.test.ts
  • products/workflows/frontend/TemplateLibrary/messageTemplateTestSendLogic.ts
  • products/workflows/frontend/Workflows/hogflows/findTestSendSkipReason.test.ts
  • products/workflows/frontend/Workflows/hogflows/findTestSendSkipReason.ts
  • products/workflows/frontend/Workflows/hogflows/steps/components/HogFlowFunctionConfiguration.tsx
  • products/workflows/frontend/Workflows/templates/WorkflowTemplateCard.tsx
  • products/workflows/frontend/WorkflowsScene.tsx
  • products/workflows/frontend/emptyState/workflowsEmptyState.tsx
  • products/workflows/frontend/firstRun/GalleryTemplateCard.tsx
  • products/workflows/frontend/firstRun/MakeItYoursActions.tsx
  • products/workflows/frontend/firstRun/MakeItYoursEmailList.tsx
  • products/workflows/frontend/firstRun/TemplateStartsOnLine.tsx
  • products/workflows/frontend/firstRun/WorkflowsFirstRun.stories.tsx
  • products/workflows/frontend/firstRun/WorkflowsFirstRunGallery.tsx
  • products/workflows/frontend/firstRun/WorkflowsFirstRunMakeItYours.stories.tsx
  • products/workflows/frontend/firstRun/WorkflowsFirstRunMakeItYours.tsx
  • products/workflows/frontend/firstRun/WorkflowsFirstRunTab.test.tsx
  • products/workflows/frontend/firstRun/WorkflowsFirstRunTab.tsx
  • products/workflows/frontend/firstRun/buildFirstRunTestSend.ts
  • products/workflows/frontend/firstRun/buildFirstRunWorkflow.ts
  • products/workflows/frontend/firstRun/firstRunEmailAgentContext.ts
  • products/workflows/frontend/firstRun/firstRunEmailAgentLogic.test.ts
  • products/workflows/frontend/firstRun/firstRunEmailAgentLogic.ts
  • products/workflows/frontend/firstRun/firstRunGalleryLogic.test.ts
  • products/workflows/frontend/firstRun/firstRunGalleryLogic.ts
  • products/workflows/frontend/firstRun/firstRunMakeItYoursLogic.test.ts
  • products/workflows/frontend/firstRun/firstRunMakeItYoursLogic.ts
  • products/workflows/frontend/firstRun/firstRunSenderLogic.test.ts
  • products/workflows/frontend/firstRun/firstRunSenderLogic.ts
  • products/workflows/frontend/firstRun/firstRunStoryFixtures.ts
  • products/workflows/frontend/firstRun/firstRunWorkflowStorage.ts
  • products/workflows/frontend/firstRun/templateEmails.ts
  • products/workflows/frontend/firstRun/withFirstRunSender.test.ts
  • products/workflows/frontend/firstRun/withFirstRunSender.ts
  • products/workflows/package.json
  • services/mcp/src/api/generated.ts

Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 5 remain after this review.

@scheduled-actions-posthog

Copy link
Copy Markdown
Contributor

This PR hasn't seen activity in a week! Should it be merged, closed, or further worked on? If you want to keep it open, please remove the stale label – otherwise this will be closed in another week. If you want to permanently keep it open, use the waiting label.

@scheduled-actions-posthog

Copy link
Copy Markdown
Contributor

This PR was closed due to lack of activity. Feel free to reopen if it's still relevant.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant