Repository navigation
Closed
Labels
Description
Map: Map: build the Workflows first run, from template gallery to first send
Question
What exactly do we build for the Workflows first run, and in which PRs?
Take the accepted direction as given: the #212 handoff, including the round 9 additions, and the prototype README at products/workflows/frontend/prototype/first-run/README.md on prototype/workflows-first-run (head 837fd06e55).
The prototype is throwaway. Read it to see the behavior, then specify fresh code against upstream/master.
Write the spec with /to-spec and publish implementation tickets with /to-tickets as children of the map, each with its blocking edges, its test seams, its write scope and its cast.
The spec covers at least, all behind one new feature flag:
- Tailored gallery. The real global template gallery, filtered to what the project's events can drive. Each card shows only its trigger: the event, an absence of events, or a schedule. One recommended starter, highlighted and first, with a one-line reason. "Start playing" last, opening a blank workflow.
- Make it yours. The one screen before the editor: the email editor, "Change with PostHog AI" in the side panel, "Send me a test", and "Enable and open workflow" with the "Enable workflow" and "Capture engagement events" switches, both on by default.
- Draft and sending states. A draft workflow says it is not sending yet and points at Enable. A sending one leads to the Metrics tab, and offers "Enable engagement events" when they are off.
- Missing data handed to an agent. "Copy prompt for your coding agent" and "Let the Wizard do it".
- Who sees Quick start. Decide it (the prototype used organizations younger than three months) and record the reasoning.
Constraints:
- Sender. The first sends use the sandbox sender from #225 (Spec: sandbox sender). Whether they may reach real users or only organization members is open in Shared sender or members-only: who may the first run's first sends reach?. Keep the sender behind one seam. Block on Shared sender or members-only: who may the first run's first sends reach? #254 only the slices whose behavior depends on the answer; everything else proceeds now.
- Neighbours. Build on, do not change: the sandbox sender tickets still open under Map: let teams send a first email before verifying their domain #225 (picker, test send modal, Channels page, switch banner), the Email brand work (Map: detect an Email brand from GitHub and create a branded starter template #198), the email domain wizard, and Audience. Name any write-scope overlap with them on the slice.
- Brand detection is out of this build. The first run ships without it.
- Casting per slice. UI: Claude Fable 5.1 for ambiguous design work, Claude Opus 5.5 for routine UI. Backend: GPT-6.1 Sol.
- Every slice is one draft PR a reviewer can read on its own. Prefer thin end-to-end slices to layers.
Activity
Silthus commentedon Oct 5, 2026
Runtime: Claude Code background agent (conductor thread on devbox-michaelr-3)
Worker:
spec-255Cap: 90 minutes
Cast: Claude Opus 5.5
Silthus commentedon Oct 5, 2026
Claimed by conductor worker
spec-255(Claude Code background agent, Opus 5.5).Silthus commentedon Oct 5, 2026
Worker transcript:
/tmp/claude-1001/-home-coder--t3-worktrees-posthog-t3code-1d6de0ea/6f4018e1-a32c-4b89-bae8-f0ca1d7056a8/tasks/ab21743bbc15f30ef.output. Deadline wake set for 09:43 UTC.Silthus commentedon Oct 5, 2026
Resolution
Spec: #256 Spec: Workflows first run (closed as the reference document, linked under the map).
/to-specand/to-ticketscannot be invoked by an agent in this runtime (both are restricted to user invocation). The spec and tickets follow the shape of Spec: sandbox sender and its tickets instead.Implementation tickets (all
wayfinder:implement, children of #253):Frontier: #257. Next, #259 as soon as #237 closes; it stacks on #237's PR (PostHog#111695) until that merges.
After #257: #258, then #265 beside the #260 chain. #261, #262 and #266 run side by side after #260.
Waiting on #254: only #264. It holds the copy that names who the first sends reach and how loud the own-domain line is. Every other slice behaves the same under all three options on #254, because the sender sits behind the #259 seam. A later shared sender changes that seam only.
Test seams and why
All four exist today with prior art; no new seam.
Decisions made here, with reasons
workflowsSetupLogic. A paying team that never used Workflows is exactly who the first run is for.productSetupLogic; forking it for one product adds a special case for little gain. Under the flag the Workflows task list follows the first run (Workflows first run: quick start follows the first run #266), because today it starts with "Set up your first workflows channel", which sends a new team to DNS first.workflows-first-run, one flag for every slice.starts_on), not in a frontend table. Several global templates have an empty event trigger and "a stretch without an event" is not a trigger type, so the trigger alone cannot say what starts a template.createEmptyWorkflow, so the AI-first experiment still governs the blank path.emailperson property definition, not a person scan. Person data in bulk is off limits, and a yes or no answer is enough here.workflows_config.No other load-bearing one-way decision came up, so nothing new is parked. #254 stays with Michael.