| name | add-breakout |
| description | Onboard a brand-new breakout call series across ethereum/pm (trusted list, call series config, issue template, labeler) and Forkcast (via the add-series skill). Use when a new facilitator wants to start running a breakout. Pairs with add-series, which covers the Forkcast-only side. |
Add a new breakout series
A breakout series requires changes in two repos: ethereum/pm (where the bot lives and the issue template lives) and forkcast (where calls render). This skill covers the pm side and the cross-repo handoff. Invoke the add-series skill for the Forkcast-side file edits.
Reference commit for the pm-side pattern: 6e572f83 ("acdbot: introduce native aa breakout"). Reference commit for adding to the trusted list: 14a86086 ("acdbot: add to trusted list for pqi").
Step 1: Gather info from the user
You need:
- Display name (e.g., "P2P Networking", "Native Account Abstraction")
- Facilitator's GitHub username (e.g.,
kamilsa)
- First meeting date/time UTC — informational; the facilitator will open the issue themselves
- Duration in minutes (typically 60 or 90)
- Cadence — one of:
weekly, bi-weekly, monthly, other
- Series config key — lowercased, no-spaces version of the display name used as the pm config key (e.g.,
p2pnetworking, nativeaa, encryptthemempool). Derive and confirm with the user.
- Forkcast type abbreviation — short slug used in Forkcast URLs/folders (e.g.,
p2p, aa, pqi). Existing values are in src/data/calls.ts CallType. Confirm with the user — this is the add-series "Short type key" input.
- Tailwind color for the badge/border (used by
add-series). Pick an unused color from the existing palettes in src/components/calls-index/CallsIndexTimeline.tsx.
- YouTube playlist ID (recommended upfront) — ask the user to create an empty playlist named after the series and share the playlist ID. If they can't create it now, leave as
null and they can land a follow-up PR later.
Step 2: Locate the pm checkout
The user typically has ethereum/pm checked out at ../pm relative to forkcast. Verify by running ls ../pm/.github/ACDbot/call_series_config.yml. If not present, ask the user for the path.
Step 3: Make the four pm-repo edits
All four files live under ../pm/.github/:
-
workflows/protocol-call-workflow.yml — append the facilitator's GitHub username (lowercase) to the trustedContributors array. This authorizes them to trigger the bot. Verify the exact GitHub account with the user before adding — this list grants bot permissions, so a typo or impersonated handle is a security concern, not just a correctness one.
-
ACDbot/call_series_config.yml — add a new entry under call_series: just before the one-off: block. Shape:
<series-key>:
display_name: "<Display Name>"
youtube_playlist_id: "<PLJqWcTqh_zK...>"
discord_webhook_env: null
autopilot_defaults:
duration: <60|90>
occurrence_rate: "<weekly|bi-weekly|monthly|other>"
need_youtube_streams: false
display_zoom_link_in_invite: true
external_meeting_link: false
Use the YouTube playlist ID gathered in Step 1 if available. If left null, land a follow-up PR (acdbot: wire up <series> youtube playlist) once the playlist exists — see PR pattern at commit a125cd3f.
-
ISSUE_TEMPLATE/protocol-call-form.yml — add the display name to the Call Series dropdown options:. The list is mostly alphabetical — insert accordingly.
-
labeler.yml — append a new label entry at the end. Shape:
<LabelName>:
- "^(.*<regex pattern>.*)"
Match the existing file's indent style: one space before the (unusual but consistent with the rest of the file). The regex should match plausible issue title phrasings — usually the display name and one short alias. Note the file does not end with a trailing newline; preserve that.
Step 4: Make the Forkcast-side edits via add-series
Run the add-series skill with the Forkcast type abbreviation, display name, pm series key (so it knows whether to add a SERIES_TO_TYPE mapping), and Tailwind color. It will:
- Update
src/data/calls.ts (CallType union + callTypeNames)
- Update color maps in
CallsIndexTimeline.tsx and HomePage.tsx
- Update
scripts/sync-call-assets.mjs (KNOWN_TYPES and SERIES_TO_TYPE mapping)
- Run typecheck/build
Skip add-series Step 5 ("Verify artifacts exist") and Step 6 ("Update protocol-calls.generated.json") — for a brand-new breakout there are no calls yet. Forkcast renders nothing until the first call is synced via the normal sync call assets from eth/pm pipeline.
Step 5: Open both PRs
- pm PR: branch
acdbot/<series>-breakout, title acdbot: introduce <series> breakout, against ethereum/pm:master.
- Forkcast PR: branch
add-<series>-breakout, title add <series> breakout series, against ethereum/forkcast:main.
Use whichever remote the user pushes their fork branches to (check git remote -v if unsure).
The Forkcast PR is safe to merge before any call exists — all new entries are latent until a record with the new type lands in protocol-calls.generated.json. The pm PR is the gating dependency: the facilitator can't open their first issue until the dropdown option exists.
Step 6: Hand off the manual checklist to the user
Print this verbatim:
Step 7: Done
Confirm both PR URLs to the user. Summarize: "pm side configures the bot and dropdown; Forkcast side renders the calls once sync call assets from eth/pm picks them up after the first meeting."