Repository navigation
Conversation
Build the sending-transactional-emails skill from PostHog/posthog's SKILL.md and its reference, fetched at build time, with the transactional emails docs and a section for running it inside the Wizard. A docs_urls entry can now name its file, so the fetched SKILL.md lands as references/sending-transactional-emails.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🧙 Wizard CIRun the Wizard CI and test your changes against wizard-workbench example apps by replying with a GitHub comment using one of the following commands: Test all apps:
Test all apps in a directory:
Test an individual app:
Show more apps
Test against a wizard branch:
Add Results will be posted here when complete. |
…, and check doc filenames From the review panel: - Check for server code before any question or PostHog step, so a frontend-only project aborts before the person sets anything up. - Name the PostHog skill's steps by their bold titles, not by number or heading, so an upstream reorder can't move them. - Say what to do when wizard_ask fails: skip the steps that need answers, list them in the report, and send nothing. - Send the test through the app's own send code, never reading the key. - Keep Protect sensitive data, the no-marketing-category rule and engagement events on the manual path. - A doc entry's filename must be a plain .md name no other reference uses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The filename check covered only entries that name a filename, so a later doc whose name comes from its URL could still overwrite one. Now no doc may take a filename an entry chose. Docs that both take their names from their URLs keep today's behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
Decisions on this PR, for the record:
|
Silthus
marked this pull request as ready for review
November 3, 2026 17:41
Silthus
marked this pull request as draft
November 4, 2026 07:09
The Wizard section now asks once, with wizard_ask, "Keep the email in your code (recommended) or design it in PostHog?", with code first. The template steps a missing tool hands to the person apply only when the person picks a template. When the test of a code send answers 404 not_found, the project can't send from code yet: the agent says so in one line, moves the email into a PostHog template, and tests again, rather than aborting. The skill description says code is the default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…te section - The Wizard section names the upstream skill's Design it in PostHog steps, which replace the Template: steps. - The rule for projects without code sends goes. This skill publishes only after workflows-email-from-code reaches every project. - The test send's one-off script takes the address as an argument and is deleted after the test. - A doc filename needs a name before .md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… eight SDKs PostHog/posthog#128870 adds references/sdks.md, which covers each SDK's client setup, sends and status read. The build fetches it with the skill's other files, and the description names all eight SDKs. The build answers 404 for it until #128870 merges into master. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Silthus
marked this pull request as ready for review
November 5, 2026 08:42
…ery send PostHog records engagement events for code sends only when the project's setting is on, as for template sends. The Wizard section asked about the setting only for a template. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dmarchuk
approved these changes
Nov 5, 2026
Silthus
marked this pull request as draft
November 14, 2026 17:46
…transactional-emails
The menu's new title field comes from the variant's display_name, which read 'all supported platforms'. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ot its source text Build the skill with fetch stubbed and assert what the package holds: the PostHog skill as a reference, no dangling reference, and exactly the [ABORT] reasons the Wizard program matches. Drop the tests that pinned the wording and order of the Wizard section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The test that checks every named reference file now covers both docs. Its [ABORT] pattern no longer needs a closing backtick, and the header comment goes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Problem
The Wizard's
transactional-emailcommand (PostHog/wizard#1507) runs a skill from the context-mill menu. The skill it should run,sending-transactional-emails, lives in PostHog/posthog, and no menu publishes it.With this PR, every release publishes
sending-transactional-emails. The build fetches the skill from PostHog/posthog, so PostHog's copy stays the only one to edit, and adds what the Wizard needs to run it. The skill keeps the email in the app's code by default (PostHog/posthog#128870). In the Wizard, the person is asked once: "Keep the email in your code (recommended) or design it in PostHog?"Merge order
workflows-email-from-codeis at 100%.buildcheck now fetches its files frommaster.Merge Danger
Warning
🟡 Merge risk: medium · two-way door
SKILL.mdis on PostHog/posthogmaster. A later change there reaches the next release without a review here. The test in this PR pins the two[ABORT]reasons the Wizard matches, but only against this repo's own section.transactional-emailcommand ships, exceptwizard skill sending-transactional-emails.master. If PostHog moves or renames them, the fetch answers404and the build fails, as it does for any doc that disappears.Tier: non-critical
Impact
Feeds the Wizard's first-send command, which moves weekly orgs outside PostHog's own org that send email from code, on the Code-sending orgs by client insight. It rolls up to Workflows revenue through billed
workflows_emails.Changes
context/skills/sending-transactional-emails/, oneallvariant, so the skill ID issending-transactional-emails. It has nocli:block, so it is arole: skillentry, likedata-warehouse-source.config.yamlfetches PostHog/posthog'sSKILL.mdasreferences/sending-transactional-emails.md, and itsreferences/moving-from-other-providers.md. The shared docs are the transactional emails page and its HTTP API page.description.mdtells the agent to read the PostHog skill first and follow it. Its "Inside the PostHog Wizard" section covers what the Wizard changes. It names the PostHog skill's steps by their bold titles, so an upstream reorder can't move them:[ABORT] no server code foundbefore anything is asked.wizard_askcall asks which email to send and "Keep the email in your code (recommended) or design it in PostHog?", with code as the first choice, once. Whenwizard_askfails, the email stays in code, nothing is sent, and the report lists the skipped steps.workflows-*andintegrations-*scopes. A missing tool means the person does that step in PostHog: the sender, engagement events for every send, and for a template only, the skill's No marketing category. and Make it transactional. steps.sensitive: trueand written byset_env_valuesasPOSTHOG_PROJECT_SECRET_API_KEY, so it never shows in the run.[ABORT] transactional email api not enabledwhen Transactional isn't in the project, or a template send answers404for a checked template ID.scripts/lib/skill-generator.js: a doc entry{ url, title, filename }writes the fetched file underfilename, so PostHog'sSKILL.mddoesn't land next to this skill's ownSKILL.md. The build fails when afilenameisn't a plain<name>.md, or clashes with another doc's name.config.yamldisplay_name: "Transactional Emails", so the skill menu titles the entry (97c703d7).Evidence
scripts/lib/tests/):skill-generator-doc-filename.test.jsrunsgenerateSkillwithfetchstubbed. A doc entry withfilename: 'upstream-skill.md'writesreferences/upstream-skill.mdand noreferences/SKILL.md. A nested path,../, a name without.md,.mdalone,COMMANDMENTS.mdand a duplicate name each fail the build.sending-transactional-emails-skill.test.js(6e675d18) builds the real skill config withfetchstubbed and reads the package it writes: PostHog's skill lands asreferences/sending-transactional-emails.mdand not asreferences/SKILL.md, everyreferences/…file the builtSKILL.mdnames is in the package (the two shared docs included, sinceb58090a2), and the builtSKILL.mdemits only the two[ABORT]reasons PostHog/wizard#1507 matches.buildcheck fetches PostHog/posthogmaster, which holds #128870's files since 2026-11-13.This revision (2026-11-14,
b58090a2):bdecf5bamergesmain(the skill menu now takes a title, description and tags),97c703d7titles the skill in that menu,6e675d18replaces the test that read the source text with one that reads the built package, andb58090a2names the two shared docs by theirreferences/path so that test covers them.Decisions
transactional-emailcommand runssending-transactional-emailsfrom PostHog/posthog, published to the menu by a context-mill PRworkflows-email-from-codereaches 100%; the skill has no fallback for projects without code sendsdescription.md, around the fetched skill, not in PostHog/posthog, whose skill serves every agentreferences/SKILL.mdSKILL.mdin the package reads as a second skill to tools that scan for it. Rejected: the moveInvolvement: no grilling rounds, no prototypes. Two Opus 5.5 review panels on the fork, GPT-6.1 Sol and Opus 5.5 final reads. On
bdecf5ba: ReviewHog and a fleet proof panel (GPT-6.1 Sol and Opus 5.5); its findings on the menu title and tests that read source text are fixed in97c703d7and6e675d18. Round 2 on the fixes (GPT-6.1 Sol correctness, Opus 5.5 fresh eyes): one minor and two nits, fixed inb58090a2. GPT-6.1 Sol final read: no findings.🤖 Agent context
Agent: Claude Code, Claude Opus 5.5 (
claude-opus-5-5), as the docs, skills and wizard slice of Silthus/posthog#461.🤖 Generated with Claude Code