Post to Group — Guidelines
Guidelines for the /post-to-group Claude Code skill. This skill handles posting content to the BuddyBoss practice platform (practice.baseworks.com) via three distinct mechanisms.
The /post-to-group skill covers:
- Forum topic — creates a new topic in a bbPress forum (e.g., a session summary post in the study group forum)
- Forum reply — replies to an existing forum topic
- Group activity post — posts to the BuddyBoss group activity feed
Out of scope: Direct messages (BuddyBoss messages use a separate table and a separate skill when needed).
Voice Compliance
Section titled “Voice Compliance”All content posted through this skill is outward-facing and must pass a voice compliance check before the confirmation gate. The check runs in Phase 1d of the skill workflow and covers:
- Em dashes (—): zero allowed — replace with comma, period, colon, parentheses, or restructure
- Exclamation marks: not allowed in professional or community contexts
- Negative-framing openers: lead with what something IS, not what it isn’t
- Banned phrases: “land on” / “lands on” as attention metaphors; unapproved metaphors
- Result must be reported in the confirmation gate preview (clean or fixed with description)
This applies to forum topics, forum replies, and group activity posts equally.
Confirmation Gate
Section titled “Confirmation Gate”A mandatory preview is shown before any database write. The preview includes the full post body (with @mention HTML visible), the target forum or group, the author, and the tag list. The user must type YES before the post is created. No exceptions.
Technical Mechanisms
Section titled “Technical Mechanisms”The three mechanisms use different database tables and different WordPress APIs:
- Forum topics and replies — stored in
areb_posts(WordPress posts table) withpost_type=topicorpost_type=reply. Created viabbp_insert_topic()andbbp_insert_reply(). - Group activity posts — stored in
areb_bp_activity(BuddyBoss activity table). Created viabp_activity_add(). These are NOT WordPress posts and cannot be created withwp post create.
Critical Rules
Section titled “Critical Rules”These rules were learned from failures during the Spring 2026 study group. They are enforced by the skill and must not be bypassed.
Never use wp_update_post() or wp post update on bbPress content
Section titled “Never use wp_update_post() or wp post update on bbPress content”Both silently reset post_parent to 0, detaching the topic from its forum or the reply from its topic. The post appears to exist but is no longer accessible via the forum.
If a topic or reply needs to be edited after creation, use a direct UPDATE areb_posts SET post_content = '...' WHERE ID = N query — never wp_update_post().
@mentions must be in the content at creation time
Section titled “@mentions must be in the content at creation time”BuddyBoss @mention notifications fire when the post is first created. If the @mention HTML is patched in afterward, no notification is sent — even if the HTML looks correct visually. Build the full content including @mention HTML before calling bbp_insert_topic() or bp_activity_add().
Tags require —by=id
Section titled “Tags require —by=id”wp post term set without --by=id interprets numeric IDs as term names and creates new terms named after those numbers (e.g., a term literally named “702”). Always pass --by=id when setting topic-tag terms by their term_id.
No “Tags:” line in post body
Section titled “No “Tags:” line in post body”Tags belong in the topic-tag taxonomy only. Including a “Tags:” summary line in the post body means it appears as visible text in the forum post. The skill never adds this line to the content.
Never call bbp_update_forum_topic_count() from CLI
Section titled “Never call bbp_update_forum_topic_count() from CLI”The WPML icl_translations filter adds NOT IN clauses to WP_Query that cause this function to return 0 when called from the command line. The forum topic count corrects itself on the next user interaction. Calling this function from CLI leaves the count at 0 and makes the forum appear empty.
Never embed content captured from wp db query
Section titled “Never embed content captured from wp db query”wp db query output includes a column header row and may embed literal \n characters. Capturing this output and using it as post content results in malformed posts. Build post content independently.
Always fire do_action(‘bp_groups_posted_update’, …) after bp_activity_add()
Section titled “Always fire do_action(‘bp_groups_posted_update’, …) after bp_activity_add()”bp_activity_add() does NOT fire the bp_groups_posted_update action — only the UI posting path does. Without this action, group members subscribed to the group’s activity feed receive no in-app or email notification.
After bp_activity_add() succeeds and post_title is set, always fire:
do_action( 'bp_groups_posted_update', $content, $user_id, $group_id, $activity_id );Parameters: post content (string), author user_id, group_id, activity_id. The notification handler bb_subscription_send_subscribe_group_notifications() hooks here at priority 11.
This action is now included in the skill’s group activity template (added 2026-05-14).
bbPress kses strips all heading tags — use strong instead
Section titled “bbPress kses strips all heading tags — use strong instead”bbp_kses_allowed_tags() does not include h1 through h6. Any heading tags in topic or reply content are stripped at save time, leaving bare unstyled text. When converting markdown headings (##, ###) to HTML for a forum post, always use <strong> — never <h2> or <h3>.
This applies to both new posts and any direct DB update fixing existing content.
Always fire do_action(‘bbp_new_reply’, …) after bbp_insert_reply()
Section titled “Always fire do_action(‘bbp_new_reply’, …) after bbp_insert_reply()”bbp_insert_reply() does NOT fire the bbp_new_reply action hook — only the form handler bbp_new_reply_handler() does. Without this action:
- No activity record is created in
areb_bp_activity - Topic subscribers receive no
bb_forums_subscribed_replynotifications - The @mention notification pipeline does not fire
After bbp_insert_reply() succeeds and post_parent is fixed, always fire:
do_action( 'bbp_new_reply', $reply_id, $topic_id, $forum_id, array(), $author_id, false, 0 );Parameters: reply_id, topic_id, forum_id, anonymous_data (empty array), author_id, is_edit (false), reply_to (0).
Forum subscriptions vs topic subscriptions
Section titled “Forum subscriptions vs topic subscriptions”BuddyBoss has two subscription types:
- Forum subscription (
type=forum) — notifies when a new topic is created in the forum (bb_forums_subscribed_discussion) - Topic subscription (
type=topic) — notifies when a new reply is posted to a topic (bb_forums_subscribed_reply)
Patrick and Asia are subscribed to the Primer Community forum (item_id=20019), which means they receive new-topic notifications but NOT reply notifications. To receive reply notifications, a user must subscribe to each individual topic.
Patrick and Asia’s topic subscriptions are managed in areb_bb_notifications_subscriptions. When a new topic is created in the Primer Community forum, subscribe Patrick and Asia to it by inserting a row with type='topic', item_id=$topic_id, secondary_item_id=$forum_id.
@Mention HTML Format
Section titled “@Mention HTML Format”<span class="atwho-inserted"><a class='bp-suggestions-mention' data-bb-hp-profile='USER_ID' href='{{mention_user_id_USER_ID}}' rel='nofollow'>@login</a></span>The href uses a template placeholder format {{mention_user_id_USER_ID}} — this is resolved by BuddyBoss at render time. The data-bb-hp-profile attribute triggers the notification.
Known Program Contexts
Section titled “Known Program Contexts”| Program | forum_id | group_id |
|---|---|---|
| Spring 2026 Study Group Montreal | 21929 | 5 |
Spring 2026 Participant User IDs
Section titled “Spring 2026 Participant User IDs”| Name | user_id | login |
|---|---|---|
| Patrick | 8 | patrick |
| Asia | 2 | asia |
| Nathalie Doré | 432 | nathalie.dore |
| Noémie Normandin | 433 | noemie.normandin |
| Elinor Fueter | 435 | elinor.fueter |
| Marta Stothers | 436 | marta.stothers |
| James Murray | 438 | james.murray |
| Caitlin Bartlett | 439 | caitlin.bartlett |
When a session context is active (e.g., after /session-summary), the skill infers the correct forum and group IDs from the program. Otherwise, the user provides them.