# Margot Routing

> Linear routing checklist for Margot — place broad ideas in the parent project first, then copy to vertical projects only where scope belongs. Use when Margot creates tickets, triages founder ideas, or spans portfolio repos.

- Skill: `cleanexpo/margot-routing` (Agent Skill)
- Install (CLI): `npx skillmds@latest add cleanexpo/margot-routing`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cleanexpo/margot-routing/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: cleanexpo (https://skillmd.com/u/cleanexpo)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cleanexpo/margot-routing

---


# margot-routing

Cross-project routing hygiene for Margot (RA-6814). Prevents duplicate or orphan tickets across the Unite portfolio.

## Golden rule

**One canonical parent ticket first.** Copy or link into vertical projects only when work is truly in scope for that repo.

## Routing checklist (run before every Linear create)

1. **Classify scope**
   - Single repo / single deploy surface → create in that repo's Linear project (see `config/harness/projects.json`).
   - Cross-cutting product idea → create in **parent** project (Margot, Pi-Dev-Ops epic, or RestoreAssist umbrella) first.

2. **Pick project from SSOT**
   - Read `config/harness/projects.json` and match on **`id`, never `repo`** → `linear_team_id` +
     `linear_project_id`. `id` is unique across all entries; `repo` is not. `CleanExpo/Pi-Dev-Ops`
     carries both `pi-dev-ops` and `margot`, on different `linear_project_id` values, so a
     repo-keyed match is ambiguous for exactly the repo Margot lives in — it silently picks one and
     lands Margot tickets in the harness project. Re-derive the id→project map with the command in
     CLAUDE.md § Linear routing.
   - Choose the `id` from intent, then read that entry:
     - Pi-Dev-Ops harness work → id `pi-dev-ops` (team RestoreAssist, project **Pi - Dev - Ops**).
     - Margot persona / voice / Telegram → id `margot` (project **Margot**).
   - **Margot ElevenLabs voice ID (Margot only):** `p43fx6U8afP2xoq1Ai9f` — `MARGOT_ELEVENLABS_VOICE_ID` / `resolve_margot_voice_id()`. **Never** `ELEVENLABS_VOICE_ID` (that is another agent's voice).
   - RestoreAssist product → project **RestoreAssist** (not Pi-Dev-Ops unless the change is in `CleanExpo/Pi-Dev-Ops`).

3. **Labels**
   | Intent | Label |
   |--------|--------|
   | Pi-CEO should build autonomously | `pi-dev:autonomous` |
   | Machine spec pipeline ship | `pi-dev:machine-ship` |
   | Needs human review before build | `pi-dev:needs-review` |
   | Blocked on session loss | `pi-dev:blocked-reason:session-lost` |

4. **Status**
   - Autonomous pickup requires status **Ready for Pi-Dev** or **Todo** (poller config) + correct label.
   - Never file harness/engineering work only in **Backlog** if autonomy should pick it up.

5. **Vertical copy (optional)**
   - After parent ticket exists, create **linked** child issues in vertical projects only for repo-specific slices.
   - Child description must reference parent ID (`RA-xxxx`).
   - Do not duplicate the full brief in every vertical — link + scoped delta only.

6. **Forbidden**
   - Same brief opened in 3+ projects without parent link.
   - Pi-Dev-Ops project for Synthex frontend work (use Synthex project).
   - Secrets, credentials, or rotation tasks assigned to autonomous build without `Manual Task` label.

## Quick reference (common targets)

| Repo / area | Linear project |
|-------------|----------------|
| CleanExpo/Pi-Dev-Ops | Pi - Dev - Ops |
| Margot / Hermes / voice | Margot |
| RestoreAssist app | RestoreAssist |
| Synthex | Synthex (team SYN) |
| Unite-Group site | Unite-Group |

## Validation before close

- [ ] Parent ticket exists (if multi-repo)
- [ ] Project matches the `config/harness/projects.json` entry whose **`id`** the work belongs to
      (not merely the repo — `CleanExpo/Pi-Dev-Ops` has two entries)
- [ ] Labels match intended pickup path (autonomous vs manual)
- [ ] Description names acceptance criteria + repo path

