diff --git a/.agents/skills/ship/SKILL.md b/.agents/skills/ship/SKILL.md
index 8cd82c8..d91120f 100644
--- a/.agents/skills/ship/SKILL.md
+++ b/.agents/skills/ship/SKILL.md
@@ -56,7 +56,25 @@ If a linked issue number is identifiable, note it for the PR body. If not identi
---
-## Step 4 — Commit
+## Step 4 — Sync with base branch
+
+Bring the feature branch up to date before committing:
+
+```
+git fetch origin dev && git merge origin/dev
+```
+
+If the merge completes cleanly (including fast-forward), proceed to Step 5.
+
+If there are merge conflicts, **stop** and say:
+
+> "Merge conflicts with ``. Resolve them before shipping."
+
+List the conflicting files. Help the user resolve them if asked, then continue.
+
+---
+
+## Step 5 — Commit
Stage all changes and commit:
```
@@ -71,7 +89,7 @@ Commit message rules:
---
-## Step 5 — Push and open PR
+## Step 6 — Push and open PR
First, push the branch:
```
@@ -109,9 +127,9 @@ Omit the issue line entirely if no linked issue was identified in Step 3.
---
-## Step 6 — Review (conditional)
+## Step 7 — Review (conditional)
-If `ai` is `"off"`, skip directly to Step 7 (merge without review).
+If `ai` is `"off"`, skip directly to Step 8 (merge without review).
Otherwise, load `.claude/review-agent-prompt.md` and perform the review for this PR.
@@ -128,7 +146,7 @@ Wait for the review to complete and report its verdict.
---
-## Step 7 — Act on verdict
+## Step 8 — Act on verdict
Merge command (used by all paths below): `make merge`
@@ -185,4 +203,4 @@ Report success based on mode:
- When `ai` is `"off"`, skip the review agent entirely — merge immediately after checks pass.
- `/ship` merges only to `dev` — never directly to `main`.
- If `make merge` fails for any reason, report it and stop — do not attempt workarounds.
-
+
diff --git a/.agents/skills/start/SKILL.md b/.agents/skills/start/SKILL.md
index b4047c5..3a96868 100644
--- a/.agents/skills/start/SKILL.md
+++ b/.agents/skills/start/SKILL.md
@@ -130,8 +130,6 @@ Ensure the base branch is up-to-date before branching:
git checkout dev && git pull origin dev
```
-(In trunk mode where `dev` is empty, use `main` instead.)
-
Now create the feature branch:
```bash
@@ -190,8 +188,6 @@ Ensure the base branch is up-to-date before branching:
git checkout dev && git pull origin dev
```
-(In trunk mode where `dev` is empty, use `main` instead.)
-
Find and check out the existing branch, or create a new one linked to the issue:
```bash
@@ -228,4 +224,4 @@ When done, say: **"The code is ready for review. Please run `make dev` and test
- The issue is assigned to `@me` at creation. If you are creating a ticket on someone else's behalf, remove the assignee after creation with `gh issue edit --remove-assignee @me`.
- Apply resolved labels and milestone to every new issue. Label resolution order: per-invocation flag → pool selection from `bug, documentation, enhancement, chore` → omit (or create if `false` is `true`). Never apply a label not in `bug, documentation, enhancement, chore` unless `false` is `true`.
- Milestone resolution order: per-invocation flag → auto-detected from GitHub open milestones. Never prompt for a milestone more than once per invocation.
-
+
diff --git a/.claude/commands/ship.md b/.claude/commands/ship.md
index e3f4993..8e4de3a 100644
--- a/.claude/commands/ship.md
+++ b/.claude/commands/ship.md
@@ -51,7 +51,25 @@ If a linked issue number is identifiable, note it for the PR body. If not identi
---
-## Step 4 — Commit
+## Step 4 — Sync with base branch
+
+Bring the feature branch up to date before committing:
+
+```
+git fetch origin dev && git merge origin/dev
+```
+
+If the merge completes cleanly (including fast-forward), proceed to Step 5.
+
+If there are merge conflicts, **stop** and say:
+
+> "Merge conflicts with ``. Resolve them before shipping."
+
+List the conflicting files. Help the user resolve them if asked, then continue.
+
+---
+
+## Step 5 — Commit
Stage all changes and commit:
```
@@ -66,7 +84,7 @@ Commit message rules:
---
-## Step 5 — Push and open PR
+## Step 6 — Push and open PR
First, push the branch:
```
@@ -104,9 +122,9 @@ Omit the issue line entirely if no linked issue was identified in Step 3.
---
-## Step 6 — Review (conditional)
+## Step 7 — Review (conditional)
-If `ai` is `"off"`, skip directly to Step 7 (merge without review).
+If `ai` is `"off"`, skip directly to Step 8 (merge without review).
Otherwise, load `.claude/review-agent-prompt.md` and perform the review for this PR.
@@ -123,7 +141,7 @@ Wait for the review to complete and report its verdict.
---
-## Step 7 — Act on verdict
+## Step 8 — Act on verdict
Merge command (used by all paths below): `make merge`
@@ -180,4 +198,4 @@ Report success based on mode:
- When `ai` is `"off"`, skip the review agent entirely — merge immediately after checks pass.
- `/ship` merges only to `dev` — never directly to `main`.
- If `make merge` fails for any reason, report it and stop — do not attempt workarounds.
-
+
diff --git a/.claude/commands/start.md b/.claude/commands/start.md
index 6345104..f9bf938 100644
--- a/.claude/commands/start.md
+++ b/.claude/commands/start.md
@@ -125,8 +125,6 @@ Ensure the base branch is up-to-date before branching:
git checkout dev && git pull origin dev
```
-(In trunk mode where `dev` is empty, use `main` instead.)
-
Now create the feature branch:
```bash
@@ -185,8 +183,6 @@ Ensure the base branch is up-to-date before branching:
git checkout dev && git pull origin dev
```
-(In trunk mode where `dev` is empty, use `main` instead.)
-
Find and check out the existing branch, or create a new one linked to the issue:
```bash
@@ -223,4 +219,4 @@ When done, say: **"The code is ready for review. Please run `make dev` and test
- The issue is assigned to `@me` at creation. If you are creating a ticket on someone else's behalf, remove the assignee after creation with `gh issue edit --remove-assignee @me`.
- Apply resolved labels and milestone to every new issue. Label resolution order: per-invocation flag → pool selection from `bug, documentation, enhancement, chore` → omit (or create if `false` is `true`). Never apply a label not in `bug, documentation, enhancement, chore` unless `false` is `true`.
- Milestone resolution order: per-invocation flag → auto-detected from GitHub open milestones. Never prompt for a milestone more than once per invocation.
-
+
diff --git a/.cursor/rules/ship.mdc b/.cursor/rules/ship.mdc
index e00f4c3..c8264fd 100644
--- a/.cursor/rules/ship.mdc
+++ b/.cursor/rules/ship.mdc
@@ -57,7 +57,25 @@ If a linked issue number is identifiable, note it for the PR body. If not identi
---
-## Step 4 — Commit
+## Step 4 — Sync with base branch
+
+Bring the feature branch up to date before committing:
+
+```
+git fetch origin dev && git merge origin/dev
+```
+
+If the merge completes cleanly (including fast-forward), proceed to Step 5.
+
+If there are merge conflicts, **stop** and say:
+
+> "Merge conflicts with ``. Resolve them before shipping."
+
+List the conflicting files. Help the user resolve them if asked, then continue.
+
+---
+
+## Step 5 — Commit
Stage all changes and commit:
```
@@ -72,7 +90,7 @@ Commit message rules:
---
-## Step 5 — Push and open PR
+## Step 6 — Push and open PR
First, push the branch:
```
@@ -110,9 +128,9 @@ Omit the issue line entirely if no linked issue was identified in Step 3.
---
-## Step 6 — Review (conditional)
+## Step 7 — Review (conditional)
-If `ai` is `"off"`, skip directly to Step 7 (merge without review).
+If `ai` is `"off"`, skip directly to Step 8 (merge without review).
Otherwise, load `.claude/review-agent-prompt.md` and perform the review for this PR.
@@ -129,7 +147,7 @@ Wait for the review to complete and report its verdict.
---
-## Step 7 — Act on verdict
+## Step 8 — Act on verdict
Merge command (used by all paths below): `make merge`
@@ -186,4 +204,4 @@ Report success based on mode:
- When `ai` is `"off"`, skip the review agent entirely — merge immediately after checks pass.
- `/ship` merges only to `dev` — never directly to `main`.
- If `make merge` fails for any reason, report it and stop — do not attempt workarounds.
-
+
diff --git a/.cursor/rules/start.mdc b/.cursor/rules/start.mdc
index fad6da7..8ae7b78 100644
--- a/.cursor/rules/start.mdc
+++ b/.cursor/rules/start.mdc
@@ -131,8 +131,6 @@ Ensure the base branch is up-to-date before branching:
git checkout dev && git pull origin dev
```
-(In trunk mode where `dev` is empty, use `main` instead.)
-
Now create the feature branch:
```bash
@@ -191,8 +189,6 @@ Ensure the base branch is up-to-date before branching:
git checkout dev && git pull origin dev
```
-(In trunk mode where `dev` is empty, use `main` instead.)
-
Find and check out the existing branch, or create a new one linked to the issue:
```bash
@@ -229,4 +225,4 @@ When done, say: **"The code is ready for review. Please run `make dev` and test
- The issue is assigned to `@me` at creation. If you are creating a ticket on someone else's behalf, remove the assignee after creation with `gh issue edit --remove-assignee @me`.
- Apply resolved labels and milestone to every new issue. Label resolution order: per-invocation flag → pool selection from `bug, documentation, enhancement, chore` → omit (or create if `false` is `true`). Never apply a label not in `bug, documentation, enhancement, chore` unless `false` is `true`.
- Milestone resolution order: per-invocation flag → auto-detected from GitHub open milestones. Never prompt for a milestone more than once per invocation.
-
+
diff --git a/.gemini/skills/ship/SKILL.md b/.gemini/skills/ship/SKILL.md
index 4f923bf..8a257e2 100644
--- a/.gemini/skills/ship/SKILL.md
+++ b/.gemini/skills/ship/SKILL.md
@@ -56,7 +56,25 @@ If a linked issue number is identifiable, note it for the PR body. If not identi
---
-## Step 4 — Commit
+## Step 4 — Sync with base branch
+
+Bring the feature branch up to date before committing:
+
+```
+git fetch origin dev && git merge origin/dev
+```
+
+If the merge completes cleanly (including fast-forward), proceed to Step 5.
+
+If there are merge conflicts, **stop** and say:
+
+> "Merge conflicts with ``. Resolve them before shipping."
+
+List the conflicting files. Help the user resolve them if asked, then continue.
+
+---
+
+## Step 5 — Commit
Stage all changes and commit:
```
@@ -71,7 +89,7 @@ Commit message rules:
---
-## Step 5 — Push and open PR
+## Step 6 — Push and open PR
First, push the branch:
```
@@ -109,9 +127,9 @@ Omit the issue line entirely if no linked issue was identified in Step 3.
---
-## Step 6 — Review (conditional)
+## Step 7 — Review (conditional)
-If `ai` is `"off"`, skip directly to Step 7 (merge without review).
+If `ai` is `"off"`, skip directly to Step 8 (merge without review).
Otherwise, load `.claude/review-agent-prompt.md` and perform the review for this PR.
@@ -128,7 +146,7 @@ Wait for the review to complete and report its verdict.
---
-## Step 7 — Act on verdict
+## Step 8 — Act on verdict
Merge command (used by all paths below): `make merge`
@@ -185,4 +203,4 @@ Report success based on mode:
- When `ai` is `"off"`, skip the review agent entirely — merge immediately after checks pass.
- `/ship` merges only to `dev` — never directly to `main`.
- If `make merge` fails for any reason, report it and stop — do not attempt workarounds.
-
+
diff --git a/.gemini/skills/start/SKILL.md b/.gemini/skills/start/SKILL.md
index 84fa2b7..0b45ced 100644
--- a/.gemini/skills/start/SKILL.md
+++ b/.gemini/skills/start/SKILL.md
@@ -130,8 +130,6 @@ Ensure the base branch is up-to-date before branching:
git checkout dev && git pull origin dev
```
-(In trunk mode where `dev` is empty, use `main` instead.)
-
Now create the feature branch:
```bash
@@ -190,8 +188,6 @@ Ensure the base branch is up-to-date before branching:
git checkout dev && git pull origin dev
```
-(In trunk mode where `dev` is empty, use `main` instead.)
-
Find and check out the existing branch, or create a new one linked to the issue:
```bash
@@ -228,4 +224,4 @@ When done, say: **"The code is ready for review. Please run `make dev` and test
- The issue is assigned to `@me` at creation. If you are creating a ticket on someone else's behalf, remove the assignee after creation with `gh issue edit --remove-assignee @me`.
- Apply resolved labels and milestone to every new issue. Label resolution order: per-invocation flag → pool selection from `bug, documentation, enhancement, chore` → omit (or create if `false` is `true`). Never apply a label not in `bug, documentation, enhancement, chore` unless `false` is `true`.
- Milestone resolution order: per-invocation flag → auto-detected from GitHub open milestones. Never prompt for a milestone more than once per invocation.
-
+
diff --git a/.github/workflows/sync-check.yml b/.github/workflows/sync-check.yml
index 392d70d..171ea5a 100644
--- a/.github/workflows/sync-check.yml
+++ b/.github/workflows/sync-check.yml
@@ -4,7 +4,7 @@ jobs:
sync-check:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v5
- name: Check for sync drift
run: |
./sync.sh --dry-run