---
description: Branch names and commit messages must lead with the Linear issue id (team NEO)
alwaysApply: true
---

# Linear issue ids in branches and commits (Neon Sprawl)

The Neon Sprawl team in Linear uses issue ids **`NEO-*`** (see the **Neon Sprawl** team). Match the **issue you are implementing**—do not invent ids.

## Issue hierarchy

Tracked work is **Project → Issue** in Linear (epic/module **projects**, **stories** / **tasks** / **bugs** as issues). **Do not** recreate a Jira-style **Feature** middle tier: module- or slice-level grouping is **labels on the issue** only (prefer decomposition module ids such as **E1.M1** when they fit). Canonical wording: [decomposition README — Linear alignment](../../docs/decomposition/README.md#linear-alignment).

## Branch names

- Put the **Linear issue id** first (`NEO-123`), then a short **kebab-case** slug (and optional type). The id must be the **first path segment** of the branch name.
- **Good:** `NEO-5-click-to-move`, `NEO-13-fix-health-desync`, `NEO-5/feature/terrain-spike` (id still first segment if using slashes).
- **Avoid:** `feature/click-to-move` with no id, or `fix/neo-5-foo` with the id not at the start.

When suggesting or creating a branch for **NEO-5**, use something like **`NEO-5-<slug>`**, not `feature/neo-5-…` with the id buried after a prefix.

## Commit messages

- For **any commit done as part of a Linear issue** (work tracked under an issue), the **first token** of the subject line must be the **issue id** (`NEO-…`), then **`:`** and the summary.
- **Good:** `NEO-5: add direct click-to-move steering`, `NEO-13: fix duplicate spawn on reconnect`
- **Avoid:** `fix(client): …` or `feat: …` **without** the issue id at the front. If you use Conventional Commits, place them **after** the id: `NEO-5: feat(client): click-to-move prototype`

**Multi-issue commits:** Prefer one issue per commit; if unavoidable, list ids: `NEO-5, NEO-9: shared nav refactor`.

**No Linear issue (rare):** Maintenance or repo-only changes with no ticket — use **`chore:`** as the prefix (e.g. `chore: update .gitignore`). Do not invent fake ids.

## Agent behavior

- When creating a **branch** or **commit** for tracked work, **infer the id** from the current story (e.g. user says NEO-5), the branch already in use, or the Linear issue fetched via MCP (`plugin-linear-linear`, e.g. `get_issue` / `list_issues`).
- When the user asks the agent to **open a PR**, the PR **title** must start with that same **`NEO-*:`** form (set **`title`** on the GitHub MCP **`create_pull_request`** call per [commit-and-review](commit-and-review.md)); do not ship a default web-only title that lowercases the key to **`Neo`**.
