Skip to content

Commit af788aa

Browse files
committed
fix: remove hardcoded feat: prefix from PR titles, let callers control format
Plan name is used directly as the PR title. Tool descriptions and README updated to guide agents toward Conventional Commits format. Also fixes integration branch format in README docs (mc/integration/ → mc/integration-).
1 parent 7fe05ca commit af788aa

5 files changed

Lines changed: 13 additions & 13 deletions

File tree

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ AI: → mc_sync(name: "feature-checkout", strategy: "rebase")
163163

164164
```
165165
AI: → mc_plan(
166-
name: "search-upgrade",
166+
name: "feat: search upgrade",
167167
mode: "autopilot",
168168
jobs: [
169169
{ name: "schema", prompt: "Add search index tables" },
@@ -212,7 +212,7 @@ mc_merge("add-pricing") → into main
212212

213213
**Typical plan workflow:**
214214
```
215-
mc_plan("search-upgrade", mode: "autopilot", jobs: [
215+
mc_plan("feat: search upgrade", mode: "autopilot", jobs: [
216216
{ name: "schema", prompt: "Add search tables..." },
217217
{ name: "api", prompt: "Build search endpoints...", dependsOn: ["schema"] },
218218
{ name: "ui", prompt: "Build search UI...", dependsOn: ["api"] }
@@ -407,8 +407,8 @@ Push the job's branch and create a GitHub Pull Request. Requires the `gh` CLI to
407407
| Parameter | Type | Required | Default | Description |
408408
|-----------|------|----------|---------|-------------|
409409
| `name` | `string` | Yes || Job name |
410-
| `title` | `string` | No | Job prompt | PR title |
411-
| `body` | `string` | No | | PR description |
410+
| `title` | `string` | No | Job name | PR title — use [Conventional Commits](https://www.conventionalcommits.org/) format (e.g. `feat: add login`, `fix: resolve timeout`) |
411+
| `body` | `string` | No | PR template or auto-generated | PR body. If omitted, uses `.github/pull_request_template.md` if found, otherwise generates a summary. |
412412
| `draft` | `boolean` | No | `false` | Create as draft PR |
413413

414414
#### `mc_sync`
@@ -443,7 +443,7 @@ Create and start a multi-job orchestrated plan.
443443

444444
| Parameter | Type | Required | Default | Description |
445445
|-----------|------|----------|---------|-------------|
446-
| `name` | `string` | Yes || Plan name |
446+
| `name` | `string` | Yes || Plan name — used as the PR title, so use [Conventional Commits](https://www.conventionalcommits.org/) format (e.g. `feat: add search`, `fix: resolve auth bugs`) |
447447
| `jobs` | `JobSpec[]` | Yes || Array of job definitions (see below) |
448448
| `mode` | `"autopilot"` \| `"copilot"` \| `"supervisor"` | No | `"autopilot"` | Execution mode |
449449
| `placement` | `"session"` \| `"window"` | No | Config default | tmux placement for all jobs in this plan |
@@ -474,7 +474,7 @@ Create and start a multi-job orchestrated plan.
474474
mc_plan
475475
476476
├─ Validate (unique names, valid deps, no circular deps)
477-
├─ Create integration branch: mc/integration/{plan-id}
477+
├─ Create integration branch: mc/integration-{plan-id}
478478
479479
├─ [copilot] ──→ Pause (pending) ──→ mc_plan_approve ──→ Continue
480480
@@ -534,7 +534,7 @@ This example uses `mc_plan` instead of four separate `mc_launch` calls because:
534534
AI: I'll create a plan for the dashboard feature with proper dependencies.
535535
536536
→ mc_plan(
537-
name: "dashboard-feature",
537+
name: "feat: analytics dashboard",
538538
mode: "autopilot",
539539
jobs: [
540540
{
@@ -571,7 +571,7 @@ Result:
571571
572572
### Merge Train
573573

574-
The Merge Train is the engine behind plan integration. Each completed job's branch is merged into a dedicated **integration branch** (`mc/integration/{plan-id}`):
574+
The Merge Train is the engine behind plan integration. Each completed job's branch is merged into a dedicated **integration branch** (`mc/integration-{plan-id}`):
575575

576576
1. **Merge**`git merge --no-ff {job-branch}` into the integration worktree
577577
2. **Test** — If a `testCommand` is configured (or detected from `package.json`), it runs after each merge

src/lib/orchestrator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ If your work needs human review before it can proceed: mc_report(status: "needs_
907907
}
908908

909909
const defaultBranch = await getDefaultBranch();
910-
const title = `feat: ${plan.name}`;
910+
const title = plan.name;
911911
const jobLines = plan.jobs.map((j) => {
912912
const status = j.status === 'merged' ? '✅' : j.status === 'failed' ? '❌' : '⏳';
913913
const mergedAt = j.mergedAt ? new Date(j.mergedAt).toISOString().slice(0, 19).replace('T', ' ') : '—';

src/tools/plan.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const mc_plan: ToolDefinition = tool({
1212
description:
1313
'Create and start a multi-job orchestrated plan with dependency management',
1414
args: {
15-
name: tool.schema.string().describe('Plan name'),
15+
name: tool.schema.string().describe('Plan name — used as the PR title. Use Conventional Commits format (e.g. "feat: add search", "fix: resolve auth bugs").'),
1616
jobs: tool.schema
1717
.array(
1818
tool.schema.object({

src/tools/pr.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export const mc_pr: ToolDefinition = tool({
6767
title: tool.schema
6868
.string()
6969
.optional()
70-
.describe('PR title (defaults to conventional commit format using job name)'),
70+
.describe('PR title — use Conventional Commits format (e.g. "feat: add login", "fix: resolve timeout"). Defaults to job name.'),
7171
body: tool.schema
7272
.string()
7373
.optional()
@@ -97,7 +97,7 @@ export const mc_pr: ToolDefinition = tool({
9797
}
9898

9999
// 3. Determine PR title (conventional commit format)
100-
const prTitle = args.title || `feat: ${job.name}`;
100+
const prTitle = args.title || job.name;
101101

102102
// 4. Build gh pr create arguments
103103
const defaultBranch = await getDefaultBranch(job.worktreePath);

tests/tools/pr.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ describe('mc_pr', () => {
8585
});
8686

8787
describe('argument handling', () => {
88-
it('should use conventional commit format as default title', async () => {
88+
it('should use job name as default title', async () => {
8989
const job: Job = {
9090
id: 'job-1',
9191
name: 'feature-auth',

0 commit comments

Comments
 (0)