Skip to content

chore: rolling promotion dev -> main - #625

Merged
namastex888 merged 5 commits into
mainfrom
dev
Mar 17, 2026
Merged

namastex888 merged 5 commits into
mainfrom
dev

Conversation

@namastex888

@namastex888 namastex888 commented Mar 17, 2026 •

Copy link
Copy Markdown
Contributor

Rolling Promotion PR

Auto-maintained rolling promotion PR from dev to main.

Process:

  • This PR is automatically created and kept open
  • Human reviews and merges when ready
  • Label ready-to-merge added when all checks pass

IMPORTANT: Merge with "Create a merge commit" — NEVER squash.
Squash merging breaks history sync between dev and main,
causing the next rolling PR to show all commits again.

Human approval required for merge to production.

Summary by CodeRabbit

  • New Features

    • Support alphanumeric group identifiers in work definitions.
    • Worker termination scoped to a specific team (disband/kill operations affect only that team).
  • Documentation

    • Clarified that genie work auto-initializes on first dispatch.
    • Updated guidance to check status after the initial dispatch.
  • Chores

    • Bumped version to 3.260317.3 across manifests and packages.

github-actions Bot and others added 3 commits March 17, 2026 04:09
genie work auto-initializes state, so checking genie status before
the first dispatch is a wasted step that errors. Added explicit
instruction: "do NOT run genie status before your first dispatch."
…1, 2)

parseWishGroups() regex was \d+ (digits only), so wishes with
Group A / Group B were parsed as 0 groups. Changed to [A-Za-z0-9]+
to accept both styles. Also fixed the error message group listing.
@coderabbitai

coderabbitai Bot commented Mar 17, 2026 •

Copy link
Copy Markdown

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4f343ea1-7a57-4747-ace2-e3f676a05ead

📥 Commits

Reviewing files that changed from the base of the PR and between f142f0c and 421e0c9.

📒 Files selected for processing (1)
  • src/lib/team-manager.ts

📝 Walkthrough

Walkthrough

Patch version bump to 3.260317.3 across manifests and packages; docs update to clarify genie auto-initialization and status timing; dispatch parsing extended to accept alphanumeric group IDs; team-manager worker termination scoped by team name.

Changes

Cohort / File(s) Summary
Version Bumps
/.claude-plugin/marketplace.json, openclaw.plugin.json, package.json, plugins/genie/.claude-plugin/plugin.json, plugins/genie/package.json
Bumped plugin/package manifest versions from 3.260317.2 to 3.260317.3. Metadata-only changes.
Documentation Updates
plugins/genie/agents/team-lead.md, plugins/genie/agents/team-lead/AGENTS.md
Clarified Phase 1 parsing scope and gate wording; added that genie auto-initializes state on first dispatch and that genie status should be used only after first dispatch; updated CLI examples and gate language.
Dispatch Parsing
src/term-commands/dispatch.ts
Extended group heading parsing from numeric-only ([0-9]+) to alphanumeric ([A-Za-z0-9]+); updated related comments and error messages.
Team Manager Scoping
src/lib/team-manager.ts
Added optional teamName filtering to worker-killing functions and updated call sites so worker termination is scoped to the specified team.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'chore: rolling promotion dev -> main' accurately describes the PR's purpose as a version bump and automated branch promotion from dev to main.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request represents a routine rolling promotion from the dev branch to main. Its primary purpose is to synchronize the main branch with the latest developments, specifically updating the genie plugin to version 3.260317.3 and incorporating related documentation and code improvements. This ensures that the production-ready branch reflects the most current stable state of the project.

Highlights

  • Version Update: The genie plugin and related packages have been updated to version 3.260317.3 across all relevant configuration and package files.
  • Agent Documentation Refinement: The team-lead agent documentation (team-lead.md and AGENTS.md) has been revised to clarify the WISH.md parsing process and the auto-initialization behavior of the genie work command.
  • Enhanced WISH.md Group Parsing: The parseWishGroups function in src/term-commands/dispatch.ts has been updated to support alphanumeric group identifiers (e.g., 'Group A', 'Group 1') within WISH.md files, providing greater flexibility for defining task groups.
Changelog
  • .claude-plugin/marketplace.json
    • Updated the genie plugin version to 3.260317.3.
  • openclaw.plugin.json
    • Updated the genie plugin version to 3.260317.3.
  • package.json
    • Updated the @automagik/genie package version to 3.260317.3.
  • plugins/genie/.claude-plugin/plugin.json
    • Updated the genie plugin version to 3.260317.3.
  • plugins/genie/agents/team-lead.md
    • Modified the description of Phase 1 and Phase 2 in the agent lifecycle, removing acceptance criteria extraction from Phase 1 gate and clarifying genie work command auto-initialization in Phase 2.
  • plugins/genie/agents/team-lead/AGENTS.md
    • Modified the description of Phase 1 and Phase 2 in the agent lifecycle, removing acceptance criteria extraction from Phase 1 gate and clarifying genie work command auto-initialization in Phase 2.
  • src/term-commands/dispatch.ts
    • Updated the parseWishGroups function to accept alphanumeric group IDs (e.g., 'Group A', 'Group 1') in WISH.md content by modifying the regular expression pattern.
Activity
  • This PR was automatically created as part of the rolling promotion process from dev to main.
  • It is currently awaiting human review and merge.
  • The ready-to-merge label will be added once all checks pass.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request is a rolling promotion from dev to main. The main functional change appears to be an update to allow alphanumeric group identifiers in WISH.md files, alongside several version bumps and documentation updates. While the intent to support more flexible group IDs is good, the implementation in src/term-commands/dispatch.ts has a couple of issues related to case-sensitivity in regular expressions. I've added comments with suggestions to fix these bugs, which could otherwise lead to incorrect parsing and confusing error messages.

// Find the next group heading or end of content
const rest = content.slice(start + match[0].length);
const nextGroupIdx = rest.search(/^### Group \d+:/m);
const nextGroupIdx = rest.search(/^### Group [A-Za-z0-9]+:/m);

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.

high

The regex used to find the next group heading is missing the case-insensitive (i) flag. The main groupPattern at line 148 is case-insensitive, so this can lead to incorrect parsing of group sections if group headings in WISH.md have mixed casing (e.g., ### Group 1 followed by ### group 2). This will cause the parser to treat the content of all subsequent groups as part of the first group's section.

Suggested change
const nextGroupIdx = rest.search(/^### Group [A-Za-z0-9]+:/m);
const nextGroupIdx = rest.search(/^### Group [A-Za-z0-9]+:/im);

console.error(`❌ Group "${group}" not found in ${wishPath}`);
console.error(' Available groups:');
const groups = content.match(/^### Group \d+:.*$/gm);
const groups = content.match(/^### Group [A-Za-z0-9]+:.*$/gm);

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.

high

The regex used to find available groups for the error message is missing the case-insensitive (i) flag. This means if a WISH.md file uses lowercase group headings (e.g., ### group 1: ...), they won't be listed as available groups in the error message when a group is not found, which could be confusing for the user.

Suggested change
const groups = content.match(/^### Group [A-Za-z0-9]+:.*$/gm);
const groups = content.match(/^### Group [A-Za-z0-9]+:.*$/gim);

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f142f0c956

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

export function parseWishGroups(content: string): GroupDefinition[] {
const groups: GroupDefinition[] = [];
const groupPattern = /^### Group (\d+):/gim;
const groupPattern = /^### Group ([A-Za-z0-9]+):/gim;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep group extraction compatible with lettered IDs

By broadening parseWishGroups to accept alphanumeric group IDs, this commit makes lettered groups (Group A, Group B, etc.) look supported, but extractGroup still searches for the next heading with ^### Group \d and therefore cannot stop at the next lettered heading. In WISH files that omit --- separators between groups, dispatching #A will include Group B and later sections in the assigned context, which can misroute implementation/review work for that group.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@plugins/genie/agents/team-lead.md`:
- Line 52: Update the contradictory guidance in team-lead.md so the heartbeat
wording matches the status-timing fix: change the unconditional instruction
about running `genie status` in the heartbeat section to state that `genie work`
auto-initializes state on first call and you should NOT run `genie status`
before the first dispatch; ensure both occurrences referencing heartbeat/status
timing (the paragraph that starts "Dispatch groups whose dependencies are
satisfied..." and the other similar line) are edited to mirror this behavior and
remove any implication of an unconditional status check before the first
dispatch.

In `@plugins/genie/agents/team-lead/AGENTS.md`:
- Line 52: Update the heartbeat checklist so it no longer instructs running
`genie status` on every loop before `genie work` has auto-initialized state;
instead, make the heartbeat description conditional or explicit: skip the `genie
status` step until after the first dispatch/initialization, or change wording to
run `genie status` only after `genie work` has been invoked at least once.
Locate the “heartbeat checklist” section and the lines referencing `genie work`
/ `genie status` (the dispatch guidance) and edit them to remove the
contradictory pre-dispatch `genie status` instruction so it matches the “do NOT
run `genie status` before your first dispatch” guidance.

In `@src/term-commands/dispatch.ts`:
- Line 148: parseWishGroups was updated to accept alphanumeric IDs but
extractGroup still looks for the next numeric-only heading, causing sections to
bleed; update the heading-matching regex used in extractGroup (and any other
place using /^### Group \d/) to the same alphanumeric pattern used above (e.g.,
/^### Group ([A-Za-z0-9]+):/i) and ensure the extraction boundary logic stops at
that next alphanumeric group heading or EOF so group slices align with
parseWishGroups; reference functions: parseWishGroups and extractGroup and the
group heading regex variable/groupPattern.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: b0c7761c-8eff-4ea6-a563-5f58dcbc9b48

📥 Commits

Reviewing files that changed from the base of the PR and between e286169 and f142f0c.

📒 Files selected for processing (8)
  • .claude-plugin/marketplace.json
  • openclaw.plugin.json
  • package.json
  • plugins/genie/.claude-plugin/plugin.json
  • plugins/genie/agents/team-lead.md
  • plugins/genie/agents/team-lead/AGENTS.md
  • plugins/genie/package.json
  • src/term-commands/dispatch.ts


## Phase 2 — Execute Groups
Dispatch groups whose dependencies are satisfied. Run independent groups in parallel. Never start a group before its dependencies complete.
Dispatch groups whose dependencies are satisfied. `genie work` auto-initializes state on first call — do NOT run `genie status` before your first dispatch. Just dispatch immediately.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Mirror the same status-timing fix here to avoid first-loop failures.

This file has the same contradiction: “do not run status before first dispatch” vs heartbeat’s unconditional status check. Update heartbeat wording here as well.

Also applies to: 58-58

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugins/genie/agents/team-lead.md` at line 52, Update the contradictory
guidance in team-lead.md so the heartbeat wording matches the status-timing fix:
change the unconditional instruction about running `genie status` in the
heartbeat section to state that `genie work` auto-initializes state on first
call and you should NOT run `genie status` before the first dispatch; ensure
both occurrences referencing heartbeat/status timing (the paragraph that starts
"Dispatch groups whose dependencies are satisfied..." and the other similar
line) are edited to mirror this behavior and remove any implication of an
unconditional status check before the first dispatch.


## Phase 2 — Execute Groups
Dispatch groups whose dependencies are satisfied. Run independent groups in parallel. Never start a group before its dependencies complete.
Dispatch groups whose dependencies are satisfied. `genie work` auto-initializes state on first call — do NOT run `genie status` before your first dispatch. Just dispatch immediately.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Status timing guidance conflicts with the heartbeat checklist.

These lines correctly say not to run genie status before first dispatch, but the heartbeat still instructs status every loop. That contradiction can cause immediate pre-dispatch failure.

Suggested fix
-2. **Wish status** — `genie status <slug>` — which groups are done, in-progress, or blocked?
+2. **Wish status** — after first dispatch, run `genie status <slug>` — which groups are done, in-progress, or blocked?

Also applies to: 58-58

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@plugins/genie/agents/team-lead/AGENTS.md` at line 52, Update the heartbeat
checklist so it no longer instructs running `genie status` on every loop before
`genie work` has auto-initialized state; instead, make the heartbeat description
conditional or explicit: skip the `genie status` step until after the first
dispatch/initialization, or change wording to run `genie status` only after
`genie work` has been invoked at least once. Locate the “heartbeat checklist”
section and the lines referencing `genie work` / `genie status` (the dispatch
guidance) and edit them to remove the contradictory pre-dispatch `genie status`
instruction so it matches the “do NOT run `genie status` before your first
dispatch” guidance.

export function parseWishGroups(content: string): GroupDefinition[] {
const groups: GroupDefinition[] = [];
const groupPattern = /^### Group (\d+):/gim;
const groupPattern = /^### Group ([A-Za-z0-9]+):/gim;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Alphanumeric group support is incomplete without updating extraction boundaries.

parseWishGroups now accepts alphanumeric IDs, but extractGroup still finds the next heading with numeric-only matching (^### Group \d). For lettered groups, this can cause section extraction to bleed into later groups and dispatch incorrect scope.

Suggested fix
-  const nextBoundary = afterHeading.slice(1).search(/^### Group \d|^---$/m);
+  const nextBoundary = afterHeading.slice(1).search(/^### Group [A-Za-z0-9]+:|^---$/m);

Also applies to: 157-157

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/term-commands/dispatch.ts` at line 148, parseWishGroups was updated to
accept alphanumeric IDs but extractGroup still looks for the next numeric-only
heading, causing sections to bleed; update the heading-matching regex used in
extractGroup (and any other place using /^### Group \d/) to the same
alphanumeric pattern used above (e.g., /^### Group ([A-Za-z0-9]+):/i) and ensure
the extraction boundary logic stops at that next alphanumeric group heading or
EOF so group slices align with parseWishGroups; reference functions:
parseWishGroups and extractGroup and the group heading regex
variable/groupPattern.

Test User and others added 2 commits March 17, 2026 02:42
…workers

killWorkersByName filtered by role name only (e.g., "engineer"),
which is shared across all teams. When one team called genie team done,
it killed engineers from ALL teams. Now accepts a teamName parameter
and filters by both role AND team.

Closes #626
fix: scope killWorkersByName by team — prevents killing other teams' workers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant