# Ruflo Queen Trigger + расширенная делегация — Implementation Plan

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development
> (recommended) or superpowers:executing-plans to implement this plan task-by-task.
> Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** Жёсткое правило — триггер-слова `queen`/`королева` в промпте безусловно
маршрутизируют задачу через ruflo Queen; плюс проактивное предложение ruflo-spawn для
нетривиальных задач.

**Architecture:** UserPromptSubmit-хук `ruflo-queen-hook.mjs` детектит триггер и инжектит
жёсткую директиву; новый Pravila §14 (explicit hard-rule) делает пропуск нарушением;
CLAUDE.md/PSR_v1/Tooling — синхронный cross-ref.

**Tech Stack:** Node 24 ESM (`.mjs`), `node --test`, Claude Code hooks (`.claude/settings.json`),
нормативный markdown. Windows Server 2022, PowerShell 5.1 / Git Bash, ruflo глобально.

**Спека:** `docs/superpowers/specs/2026-05-15-ruflo-queen-trigger-and-delegation-design.md`
(commit `cce3bae`).

**Канал правки CLAUDE.md (§1.4 — user-authorized exception):** заказчик одобрил спеку,
которая явно перечисляет правки CLAUDE.md §1/§3.5. CLAUDE.md §5 п.10 (v2.0) допускает
прямой Edit при явном ruflo routing-decision. Это ruflo-нормативное изменение → Task 4
правит CLAUDE.md **прямым Edit** (не через `claude-md-management`), как в ruflo big-bang
Phase 3. Это и есть авторизованное исключение.

---

## File Structure

| Файл | Ответственность | Действие |
|---|---|---|
| `tools/ruflo-queen-hook.mjs` | Детект триггера + инжекция директивы | Создать (Task 1) |
| `tools/ruflo-queen-hook.test.mjs` | `node --test` покрытие хука | Создать (Task 1) |
| `.claude/settings.json` | Регистрация хука в `UserPromptSubmit` | Изменить (Task 2) |
| `docs/Pravila_raboty_Claude_v1_1.md` | Новый §14 + §13.6 + §0 + header + §10 | Изменить (Task 3) |
| `CLAUDE.md` | §1 priority chain + §3.5 + §0 cross-ref + header | Изменить (Task 4) |
| `docs/Plugin_stack_rules_v1.md` | Cross-ref §14 + version bump | Изменить (Task 5) |
| `docs/Tooling_v8_3.md` | §4.10 +queen-триггер + version bump | Изменить (Task 5) |
| `cspell-words.txt` | Незнакомые слова из правок (при flagging) | Изменить по необходимости |
| `memory/project_ruflo_integration.md` | Фиксация правила queen-trigger | Изменить (Task 6) |
| `memory/project_state.md`, `memory/MEMORY.md` | HEAD + указатель | Изменить (Task 6) |

---

## Task 1: Хук `ruflo-queen-hook.mjs` (TDD)

**Files:**

- Create: `tools/ruflo-queen-hook.mjs`
- Test: `tools/ruflo-queen-hook.test.mjs`

- [ ] **Step 1: Написать failing-тесты**

Создать `tools/ruflo-queen-hook.test.mjs` со следующим содержимым:

```javascript
import test from 'node:test';
import assert from 'node:assert/strict';
import { execFileSync } from 'node:child_process';
import { fileURLToPath } from 'node:url';
import {
  parsePrompt, detectQueen, isDiscussion, buildDirective, buildHookOutput,
} from './ruflo-queen-hook.mjs';

const HOOK = fileURLToPath(new URL('./ruflo-queen-hook.mjs', import.meta.url));

/** Run the hook as a subprocess with the given stdin; return stdout. */
function runHook(stdinJson) {
  return execFileSync(process.execPath, [HOOK], { input: stdinJson, encoding: 'utf8' });
}

test('detectQueen: matches English "queen" as a whole word', () => {
  assert.equal(detectQueen('queen, fix the bug'), true);
});
test('detectQueen: matches Russian "королеву" (case form)', () => {
  assert.equal(detectQueen('сделай это через королеву'), true);
});
test('detectQueen: case-insensitive (КОРОЛЕВА)', () => {
  assert.equal(detectQueen('КОРОЛЕВА, подними рой'), true);
});
test('detectQueen: word-boundary — "queens" is NOT a match', () => {
  assert.equal(detectQueen('several queens'), false);
});
test('detectQueen: no trigger — "очередь" is not "королева"', () => {
  assert.equal(detectQueen('почини очередь задач'), false);
});
test('detectQueen: non-string input -> false', () => {
  assert.equal(detectQueen(123), false);
});

test('isDiscussion: "что такое queen?" is meta-discussion', () => {
  assert.equal(isDiscussion('что такое queen?'), true);
});
test('isDiscussion: "как работает триггер queen" is meta-discussion', () => {
  assert.equal(isDiscussion('как работает триггер queen'), true);
});
test('isDiscussion: "не используй queen сейчас" is meta-discussion', () => {
  assert.equal(isDiscussion('не используй queen сейчас'), true);
});
test('isDiscussion: a real queen task is NOT discussion (even a question)', () => {
  assert.equal(detectQueen('queen, почему падает тест?'), true);
  assert.equal(isDiscussion('queen, почему падает тест?'), false);
});
test('isDiscussion: no trigger -> false', () => {
  assert.equal(isDiscussion('обычная задача без триггера'), false);
});

test('buildDirective: contains §14 reference and the spawn command', () => {
  const d = buildDirective();
  assert.ok(d.includes('Pravila §14'));
  assert.ok(d.includes('hive-mind spawn --claude'));
});

test('buildHookOutput: correct UserPromptSubmit payload shape', () => {
  const o = buildHookOutput('some context');
  assert.equal(o.hookSpecificOutput.hookEventName, 'UserPromptSubmit');
  assert.equal(o.hookSpecificOutput.additionalContext, 'some context');
});

test('parsePrompt: extracts the prompt field', () => {
  assert.equal(parsePrompt('{"prompt":"hello"}'), 'hello');
});
test('parsePrompt: empty string on invalid JSON (fail-open)', () => {
  assert.equal(parsePrompt('{битый json'), '');
});

test('main: queen prompt -> stdout carries the directive', () => {
  const out = runHook(JSON.stringify({ prompt: 'queen, do the thing' }));
  assert.ok(out.includes('RUFLO QUEEN TRIGGER'));
});
test('main: non-queen prompt -> empty stdout', () => {
  assert.equal(runHook(JSON.stringify({ prompt: 'just a normal task' })).trim(), '');
});
test('main: broken stdin -> empty stdout, exit 0 (fail-open)', () => {
  assert.equal(runHook('{not json').trim(), '');
});
```

- [ ] **Step 2: Запустить тесты — убедиться, что падают**

Run: `node --test tools/ruflo-queen-hook.test.mjs`
Expected: FAIL — `Cannot find module './ruflo-queen-hook.mjs'` (файл ещё не создан).

- [ ] **Step 3: Реализовать хук**

Создать `tools/ruflo-queen-hook.mjs` со следующим содержимым:

```javascript
#!/usr/bin/env node
/**
 * UserPromptSubmit hook — ruflo Queen trigger detector.
 *
 * On each prompt: detects the trigger words `queen` / `королева`. On a real
 * (non-discussion) match it injects a hard directive (Pravila §14) telling
 * Claude to route the task through ruflo Queen (`hive-mind spawn --claude`).
 *
 * FAIL-OPEN: any error -> empty injection, exit 0. The hook NEVER blocks a prompt.
 *
 * See docs/superpowers/specs/2026-05-15-ruflo-queen-trigger-and-delegation-design.md
 */
import { pathToFileURL } from 'node:url';

/** English trigger: whole word `queen`, case-insensitive. */
const EN_TRIGGER = /\bqueen\b/i;
/** Russian trigger: `королева` in 6 case forms, Unicode word-boundary. */
const RU_TRIGGER = /(?<!\p{L})королев(?:ой|ою|а|у|е|ы)(?!\p{L})/iu;

/**
 * Disqualifying prefixes — if one appears in the ~30 chars before a trigger
 * match, the match is meta-discussion, not activation.
 */
const DISCUSSION_PREFIXES = [
  'что такое', 'что значит', 'как работает', 'как работают',
  'не используй', 'не активируй', 'не запускай', 'не пиши',
  'пример', 'вместо', 'забудь про',
];

/** Extract the `prompt` string from UserPromptSubmit stdin JSON. Fail-open -> ''. */
export function parsePrompt(stdinRaw) {
  try {
    const obj = JSON.parse(stdinRaw);
    return typeof obj.prompt === 'string' ? obj.prompt : '';
  } catch {
    return '';
  }
}

/** Index of the first trigger match in `prompt`, or -1 if none. */
function triggerIndex(prompt) {
  const idxs = [];
  const en = prompt.match(EN_TRIGGER);
  if (en) idxs.push(en.index);
  const ru = prompt.match(RU_TRIGGER);
  if (ru) idxs.push(ru.index);
  return idxs.length ? Math.min(...idxs) : -1;
}

/** True if the prompt contains a trigger word (queen / королева), any position. */
export function detectQueen(prompt) {
  if (typeof prompt !== 'string') return false;
  return triggerIndex(prompt) !== -1;
}

/**
 * True if the trigger in `prompt` is meta-discussion (a disqualifying prefix
 * appears within ~30 chars before it). No trigger / non-string -> false.
 */
export function isDiscussion(prompt) {
  if (typeof prompt !== 'string') return false;
  const idx = triggerIndex(prompt);
  if (idx < 0) return false;
  const prefix = prompt.slice(Math.max(0, idx - 30), idx).toLowerCase();
  return DISCUSSION_PREFIXES.some((kw) => prefix.includes(kw));
}

/** The hard directive injected on an active trigger. */
export function buildDirective() {
  return [
    '=== RUFLO QUEEN TRIGGER (Pravila §14 — hard rule) ===',
    '',
    'Промпт содержит триггер «queen»/«королева». §14 — explicit hard-rule.',
    '',
    'ПЕРВОЙ строкой ответа написать:',
    '  `ruflo Queen — задача маршрутизируется через рой (Pravila §14)`',
    '',
    'ОБЯЗАТЕЛЬНО на этот промпт:',
    '1. Задача БЕЗУСЛОВНО идёт через ruflo Queen (`hive-mind spawn --claude`).',
    '   Не оспаривать, не предлагать прямой путь, не ссылаться на тривиальность.',
    '2. Перед платным спавном показать ПРЕВЬЮ: роли и число агентов, декомпозиция',
    '   задачи, оценка объёма. Спавнить ТОЛЬКО после явного «да» заказчика.',
    '3. При сбое `hive-mind spawn --claude` (ruflo alpha) — явно сообщить о сбое,',
    '   затем выполнить задачу напрямую (фоллбэк).',
    '',
    '§9 «Отступления» к §14 не применяется. Economy-режим §14 не override-ит.',
    'Действует только на этот промпт.',
  ].join('\n');
}

/** Build the UserPromptSubmit hook stdout payload. */
export function buildHookOutput(additionalContext) {
  return {
    hookSpecificOutput: {
      hookEventName: 'UserPromptSubmit',
      additionalContext,
    },
  };
}

function readStdin() {
  return new Promise((resolve) => {
    let data = '';
    process.stdin.setEncoding('utf8');
    process.stdin.on('data', (c) => { data += c; });
    process.stdin.on('end', () => resolve(data));
    process.stdin.on('error', () => resolve(data));
  });
}

async function main() {
  try {
    const prompt = parsePrompt(await readStdin());
    if (detectQueen(prompt) && !isDiscussion(prompt)) {
      process.stdout.write(JSON.stringify(buildHookOutput(buildDirective())));
    }
  } catch {
    // fail-open: no injection
  }
  process.exit(0);
}

if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
  main();
}
```

- [ ] **Step 4: Запустить тесты — убедиться, что проходят**

Run: `node --test tools/ruflo-queen-hook.test.mjs`
Expected: PASS — все тесты зелёные (`# pass 17`, `# fail 0`).

- [ ] **Step 5: Коммит**

```bash
git add tools/ruflo-queen-hook.mjs tools/ruflo-queen-hook.test.mjs
git commit -m "feat(ruflo): queen-trigger UserPromptSubmit hook (TDD)"
```

Если pre-commit cspell заблокирует — добавить помеченные валидные слова в
`cspell-words.txt` (новой секцией с комментарием), `git add cspell-words.txt`, повторить
коммит. Hooks не пропускать (`--no-verify` запрещён).

---

## Task 2: Регистрация хука в `.claude/settings.json`

**Files:**

- Modify: `.claude/settings.json` (блок `hooks.UserPromptSubmit`)

- [ ] **Step 1: Добавить второй элемент в массив `UserPromptSubmit`**

Найти в `.claude/settings.json` блок:

```json
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "node \"C:/моя/проекты/портал crm/Документация/tools/ruflo-recall-hook.mjs\""
          }
        ]
      }
    ],
```

Заменить на:

```json
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "node \"C:/моя/проекты/портал crm/Документация/tools/ruflo-recall-hook.mjs\""
          }
        ]
      },
      {
        "hooks": [
          {
            "type": "command",
            "command": "node \"C:/моя/проекты/портал crm/Документация/tools/ruflo-queen-hook.mjs\""
          }
        ]
      }
    ],
```

- [ ] **Step 2: Проверить валидность JSON**

Run: `node -e "JSON.parse(require('fs').readFileSync('.claude/settings.json','utf8')); console.log('settings.json OK')"`
Expected: `settings.json OK`

- [ ] **Step 3: Smoke-проверка хука — триггер срабатывает**

Run (Git Bash): `echo '{"prompt":"queen, do X"}' | node tools/ruflo-queen-hook.mjs`
Expected: JSON-вывод, содержащий `RUFLO QUEEN TRIGGER` и `hive-mind spawn --claude`.

- [ ] **Step 4: Smoke-проверка хука — без триггера пусто**

Run (Git Bash): `echo '{"prompt":"обычная задача"}' | node tools/ruflo-queen-hook.mjs`
Expected: пустой вывод (хук не инжектит).

- [ ] **Step 5: Smoke-проверка guard'а — meta-обсуждение не триггерит**

Run (Git Bash): `echo '{"prompt":"что такое queen?"}' | node tools/ruflo-queen-hook.mjs`
Expected: пустой вывод (discussion-guard сработал).

- [ ] **Step 6: Коммит**

```bash
git add .claude/settings.json
git commit -m "feat(ruflo): register queen-trigger hook in .claude/settings.json"
```

---

## Task 3: Pravila §14 + §13.6 + §0 + header (v1.15)

**Files:**

- Modify: `docs/Pravila_raboty_Claude_v1_1.md`

- [ ] **Step 1: Добавить новый §14**

В `docs/Pravila_raboty_Claude_v1_1.md` найти границу между §13.10 и финальным разделом —
строку `## Что сделано после утверждения`, перед которой стоит горизонтальная линия `---`.
Вставить **перед** этим `---` (то есть между концом §13.10 и `---`) новый раздел:

```markdown

## 14. Ruflo Queen routing — hard rule (триггер queen/королева)

Введено 15.05.2026 на явное требование заказчика: «зафиксируй жёсткое правило, что когда
я пишу queen или королева ты запускаешь через ruflo, и так же подправь правила чтобы чаще
отправлял задачи через руфло». Дизайн — через `superpowers:brainstorming` (spec
`docs/superpowers/specs/2026-05-15-ruflo-queen-trigger-and-delegation-design.md`).

### 14.1. Принцип

Если промпт заказчика содержит триггер-слово `queen` (англ.) или `королева` (рус., в
любой падежной форме) — задача **безусловно** маршрутизируется через ruflo Queen. Это
explicit hard-rule (§14.5). Claude не оспаривает маршрут, не предлагает прямой путь, не
ссылается на тривиальность задачи.

### 14.2. Механизм и cost-gate

Маршрут = `hive-mind spawn --claude` — реальные платные параллельные Claude-агенты под
координацией Queen. Перед фактическим платным спавном Claude показывает **превью**: роли
и число агентов, декомпозиция задачи, оценка объёма. Спавн — только после явного «да»
заказчика. Превью+подтверждение — контроль расхода (cost-gate), **не** veto маршрута:
факт «через ruflo» принят безусловно §14.1; подтверждается лишь объём/стоимость.

### 14.3. Расширенная делегация (без триггера)

Даже без слова queen Claude **проактивно предлагает** маршрут через ruflo Queen для
нетривиальных задач — multi-file, ≥3 логических шага, фича/эпик. Предложение — то же
превью §14.2; спавн после «да».

### 14.4. Исключения

Тривиальные задачи (список §12.3: чтение/поиск файла, опечатки, синхронизация ссылок,
обновление версионных меток, справочные ответы) **без** триггера — выполняются напрямую,
без ruflo. **С** триггером queen/королева §14.1 превыше: маршрут к ruflo сохраняется,
превью покажет минимальный рой.

### 14.5. Hard-rule статус

§14 — explicit hard-rule, наравне с §12. §9 «Отступления» к §14 не применяется.
Economy-режим (любой уровень) не override-ит §14. Игнорирование §14 (выполнение
queen-задачи напрямую в обход ruflo) — нарушение того же уровня, что игнорирование §12 /
§5. Запрос заказчика «не используй ruflo сейчас» / «без queen» — единственная разрешённая
отмена, и только для текущего действия.

### 14.6. Соотношение с §12

§14 и §12 не конфликтуют — они на разных слоях:

- §14 — слой **маршрутизации**: кто получает задачу (ruflo Queen).
- §12 — слой **дисциплины исполнения**: какими Superpowers-skills работать.

При срабатывании §14 задача уходит в ruflo Queen; декомпозиция Queen и работа
spawned-агентов внутри по-прежнему следуют §12. Порядок — по CLAUDE.md §1 priority chain
(ruflo — уровень −1, §12 — уровень 0).

### 14.7. Enforcement

§14 поддержан хуком `tools/ruflo-queen-hook.mjs` (UserPromptSubmit): детектит триггер,
инжектит жёсткую директиву в каждый соответствующий промпт. Хук физически не запускает
spawn — он гарантирует, что директива всегда видна. «Жёсткость» = принудительная инжекция
директивы + нормативный hard-rule вес, не механический block.

### 14.8. Ревизия

Откат §14 — только явным запросом заказчика «откати §14». При сбое `hive-mind spawn`
(ruflo — alpha-софт) Claude сообщает о сбое и выполняет задачу напрямую как фоллбэк — это
не нарушение §14 (правило требует попытки маршрута, а не работающей alpha-инфраструктуры).
```

- [ ] **Step 2: Добавить строку §14 в §13.6 hard-rule tier-таблицу**

Найти в §13.6 строку таблицы:

```markdown
| **Explicit hard-rule** | §12 (Superpowers first) | §12.4 | ❌ нет (явно §12.4) |
```

Заменить на (добавить строку §14 сразу после):

```markdown
| **Explicit hard-rule** | §12 (Superpowers first) | §12.4 | ❌ нет (явно §12.4) |
| **Explicit hard-rule** | §14 (Ruflo Queen trigger queen/королева) | §14.5 | ❌ нет (явно §14.5) |
```

- [ ] **Step 3: Обновить §0 — priority chain + note**

Найти в §0 строку priority chain (начинается «Приоритет правил при конфликте»). В ней
есть фрагмент `**§12 (Superpowers — sub-policy, routing preference для interactive turns)** → §1 (роль)`.
Заменить на:

```text
**§12 (Superpowers — sub-policy, routing preference для interactive turns)** → **§14 (Ruflo Queen routing — explicit hard-rule, триггер queen/королева)** → §1 (роль)
```

Затем найти строку-note `**Особый статус §12 (с v1.14):**` и в конце этого абзаца, перед
закрывающей точкой последнего предложения, добавить отдельным предложением:

```text
**§14 (с v1.15)** — второе explicit hard-rule документа: триггер queen/королева → безусловный route через ruflo Queen; §9 к §14 не применяется (§14.5).
```

- [ ] **Step 4: Обновить header — версия v1.15**

Заменить строку 3:

```text
**Версия:** v1.14 (утверждена заказчиком 15.05.2026 afternoon)
```

на:

```text
**Версия:** v1.15 (утверждена заказчиком 15.05.2026)
```

Заменить строку 8 (краткое резюме):

```text
**Краткое резюме v1.14:** §12 hard rule → sub-policy + §5 ПДн execution-layer note + cross-refs к v3.0/v2.0/v2.0 (PSR_v1 / CLAUDE.md / Tooling).
```

на:

```text
**Краткое резюме v1.15:** новый §14 «Ruflo Queen routing — hard rule» (триггер queen/королева → безусловный route через ruflo Queen) + §13.6 tier-таблица +строка §14 + §0 priority note.

**Краткое резюме v1.14:** §12 hard rule → sub-policy + §5 ПДн execution-layer note + cross-refs к v3.0/v2.0/v2.0 (PSR_v1 / CLAUDE.md / Tooling).
```

Затем найти строку `**Что изменилось в v1.14 относительно v1.13:**` и вставить **перед**
ней блок:

```markdown
**Что изменилось в v1.15 относительно v1.14:**

- **§14 (новый раздел)** — «Ruflo Queen routing — hard rule (триггер queen/королева)»:
  триггер-слова queen/королева → задача безусловно маршрутизируется через ruflo Queen
  (`hive-mind spawn --claude`); explicit hard-rule наравне с §12; §9 не применяется;
  enforcement-хук `tools/ruflo-queen-hook.mjs`. §14.3 — проактивное предложение
  ruflo-spawn для нетривиальных задач без триггера.
- **§13.6 tier-таблица** — +строка §14 (explicit hard-rule).
- **§0** — §14 добавлен в priority chain рядом с §12; +note про §14 как второе explicit
  hard-rule.
- **Связано:** spec/plan `docs/superpowers/{specs,plans}/2026-05-15-ruflo-queen-trigger-and-delegation*`;
  CLAUDE.md v2.0 → v2.1, PSR_v1 v3.0 → v3.1, Tooling v2.0 → v2.1.
- Без других содержательных изменений в §§1–13.

```

- [ ] **Step 5: Добавить запись v1.15 в §10 «История версий»**

Найти в таблице §10 строку, начинающуюся `| **v1.14** | **15.05.2026** |`. Вставить
**сразу после неё** новую строку:

```markdown
| **v1.15** | **15.05.2026** | Новый §14 «Ruflo Queen routing — hard rule»: триггер queen/королева → безусловный route через ruflo Queen (`hive-mind spawn --claude`), enforcement-хук `tools/ruflo-queen-hook.mjs`. §13.6 tier-таблица +строка §14 (explicit hard-rule). §0 priority chain +§14 +note. §14.3 — проактивное предложение ruflo-spawn на нетривиальных задачах. Связано: spec/plan 2026-05-15-ruflo-queen-trigger-and-delegation, CLAUDE.md v2.1, PSR_v1 v3.1, Tooling v2.1. Через `superpowers:brainstorming` → `writing-plans` → `subagent-driven-development`. |
```

- [ ] **Step 6: Коммит**

```bash
git add docs/Pravila_raboty_Claude_v1_1.md
git commit -m "docs(pravila): +§14 Ruflo Queen routing hard-rule (v1.15)"
```

Если pre-commit cspell заблокирует — добавить помеченные валидные слова в
`cspell-words.txt`, `git add`, повторить коммит.

---

## Task 4: CLAUDE.md §1 + §3.5 + §0 cross-ref (v2.1)

**Files:**

- Modify: `CLAUDE.md` (правится прямым Edit — см. §1.4 user-authorized exception в шапке плана)

- [ ] **Step 1: §1 — добавить §14-триггер в строку уровня −1 priority chain**

Найти в §1 строку priority chain уровня −1:

```text
−1.  ruflo Queen-led routing (entry-point для ВСЕХ задач; SONA neural pattern classifier + swarm topology + HNSW memory + ~210 MCP tools; v3.7.0-alpha.38+, формализован в Tooling §4.10)  ← с v2.0 (2026-05-15)
```

Заменить на:

```text
−1.  ruflo Queen-led routing (entry-point для ВСЕХ задач; SONA neural pattern classifier + swarm topology + HNSW memory + ~210 MCP tools; v3.7.0-alpha.38+, формализован в Tooling §4.10; триггер queen/королева → безусловный route, Pravila §14)  ← с v2.0 (2026-05-15)
```

- [ ] **Step 2: §3.5 — добавить абзац «Queen trigger»**

В §3.5 «Off-phase orchestration: ruflo» найти абзац, начинающийся `**Подробности:**`
(последний абзац секции). Вставить **перед** ним новый абзац:

```markdown
**Queen trigger (2026-05-15, v2.1):** триггер-слова `queen`/`королева` в промпте →
безусловный route задачи через ruflo Queen (`hive-mind spawn --claude`), explicit
hard-rule **Pravila §14**. Enforcement — хук `tools/ruflo-queen-hook.mjs`
(UserPromptSubmit, инжектит жёсткую директиву). Перед платным спавном — превью
(агенты/декомпозиция/оценка) → спавн после явного «да». Без триггера нетривиальные
задачи (multi-file / ≥3 шага / эпик) — проактивное предложение ruflo-spawn (§14.3).

```

- [ ] **Step 3: §0 — bump cross-ref версии Pravila**

В §0 «Источник истины» найти в строке таблицы про Pravila фрагмент `**v1.14 от 15.05.2026**`
и заменить на `**v1.15 от 15.05.2026**`. В той же ячейке, в начало описания (после
открывающей скобки `(`), добавить: `§14 (new) Ruflo Queen routing hard-rule — триггер
queen/королева;` — так, чтобы описание начиналось с упоминания §14, затем шёл прежний
текст «v1.14 наследие …».

- [ ] **Step 4: Header — bump версии до 2.1**

Найти в шапке CLAUDE.md строку `**Версия:** 2.0 от 15.05.2026 — Ruflo big-bang integration:`
и заменить начало на:

```text
**Версия:** 2.1 от 15.05.2026 — §14 queen-trigger: §1 priority chain уровень −1 +триггер queen/королева → Pravila §14; §3.5 +абзац «Queen trigger»; §0 cross-ref Pravila v1.15. **v2.0 наследие:** Ruflo big-bang integration:
```

(остаток строки v2.0 — без изменений).

- [ ] **Step 5: Верифицировать markdown**

Run: `npm run lint:md`
Expected: 0 ошибок по `CLAUDE.md` (корневой CLAUDE.md исключён из авто-fix хука, но
markdownlint в pre-commit его проверяет — структура должна остаться валидной).

- [ ] **Step 6: Коммит**

```bash
git add CLAUDE.md
git commit -m "docs(claude_md): §14 queen-trigger refs — §1/§3.5/§0 (v2.1)"
```

---

## Task 5: PSR_v1 + Tooling cross-ref sync

**Files:**

- Modify: `docs/Plugin_stack_rules_v1.md`
- Modify: `docs/Tooling_v8_3.md`

- [ ] **Step 1: PSR_v1 — добавить §14 в cross-ref на Pravila**

В `docs/Plugin_stack_rules_v1.md` найти строку списка «Связанные документы» про Pravila:

```text
- [docs/Pravila_raboty_Claude_v1_1.md](Pravila_raboty_Claude_v1_1.md) **v1.14+** — §12 → sub-policy под ruflo Queen-led routing (v1.14, commit 9c3057b); §12.3 SoT для exclusions, §13 «paired stack + расширенный пул UI-инструментов» + claude-md-management как off-pool, §13.6 hard-rule tier-таблица, §13.9/§13.10 hard-link на R10/R14
```

Заменить на:

```text
- [docs/Pravila_raboty_Claude_v1_1.md](Pravila_raboty_Claude_v1_1.md) **v1.15+** — §12 → sub-policy под ruflo Queen-led routing (v1.14, commit 9c3057b); §14 (new, v1.15) Ruflo Queen routing hard-rule — триггер queen/королева; §12.3 SoT для exclusions, §13 «paired stack + расширенный пул UI-инструментов» + claude-md-management как off-pool, §13.6 hard-rule tier-таблица (§12 + §14 explicit), §13.9/§13.10 hard-link на R10/R14
```

- [ ] **Step 2: PSR_v1 — bump версии в заголовке + changelog-строке**

Заменить строку 1 заголовка:

```text
# Plugin Stack Rules — Superpowers + Frontend Design (v3.0)
```

на:

```text
# Plugin Stack Rules — Superpowers + Frontend Design (v3.1)
```

Найти строку, начинающуюся `**v3.0** — major:` и вставить **перед** ней:

```text
**v3.1** — sync: cross-ref на Pravila v1.15 (новый §14 Ruflo Queen routing hard-rule — триггер queen/королева → безусловный route через ruflo Queen). Содержательных изменений R0–R14: 0.

```

- [ ] **Step 3: Tooling §4.10 — добавить абзац про Queen trigger**

В `docs/Tooling_v8_3.md` в §4.10 «Orchestration layer (ruflo)» найти абзац, начинающийся
`**Plugin discovery риск:**`. Вставить **перед** ним новый абзац:

```markdown
**Queen trigger (2026-05-15):** триггер-слова `queen`/`королева` в промпте → безусловный
route задачи через ruflo Queen (`hive-mind spawn --claude`) — explicit hard-rule
**Pravila §14**. Enforcement — UserPromptSubmit-хук `tools/ruflo-queen-hook.mjs`. Перед
платным спавном — превью + подтверждение (cost-gate). Без триггера нетривиальные задачи —
проактивное предложение ruflo-spawn (§14.3). Связано: spec/plan
`docs/superpowers/{specs,plans}/2026-05-15-ruflo-queen-trigger-and-delegation*`.

```

- [ ] **Step 4: Tooling — bump версии Прил. Н**

Найти в `docs/Tooling_v8_3.md` строку-колонтитул, начинающуюся `*Прил. Н v2.0 от 15.05.2026`
и заменить `v2.0` на `v2.1`, добавив в конец предложения (перед закрывающим `*`):
`v2.1 — §4.10 +абзац «Queen trigger» (Pravila §14, хук ruflo-queen-hook.mjs).`

- [ ] **Step 5: Коммит**

```bash
git add docs/Plugin_stack_rules_v1.md docs/Tooling_v8_3.md
git commit -m "docs(sync): PSR_v1 v3.1 + Tooling v2.1 — §14 queen-trigger cross-ref"
```

Если pre-commit cspell заблокирует — добавить помеченные валидные слова в
`cspell-words.txt`, `git add`, повторить коммит.

---

## Task 6: Memory + финальная верификация + push

**Files:**

- Modify: `memory/project_ruflo_integration.md`
- Modify: `memory/project_state.md`
- Modify: `memory/MEMORY.md`

- [ ] **Step 1: Полный прогон тестов tooling**

Run: `node --test tools/`
Expected: все тесты во всех `tools/*.test.mjs` зелёные (включая 17 новых из Task 1 +
существующие `ruflo-h7-patch.test.mjs` + `ruflo-recall-hook.test.mjs`). `# fail 0`.

- [ ] **Step 2: Финальная smoke-проверка хука**

Run (Git Bash): `echo '{"prompt":"королева, проверь"}' | node tools/ruflo-queen-hook.mjs`
Expected: JSON-вывод с `RUFLO QUEEN TRIGGER` (русский триггер «королева» детектится).

- [ ] **Step 3: Обновить `memory/project_ruflo_integration.md`**

Добавить в конец файла секцию:

```markdown

## Queen trigger rule (2026-05-15, S5)

Жёсткое правило: триггер-слова `queen`/`королева` в промпте → задача безусловно
маршрутизируется через ruflo Queen (`hive-mind spawn --claude`). Закреплено как **Pravila
§14** (explicit hard-rule наравне с §12; §9 не применяется). Enforcement — UserPromptSubmit
хук `tools/ruflo-queen-hook.mjs` (детект queen/королева с морфологией + discussion-guard'ы,
fail-open). Cost-gate: перед платным спавном — превью (агенты/декомпозиция/оценка) → спавн
после явного «да». §14.3 — без триггера нетривиальные задачи (multi-file/≥3 шага/эпик)
получают проактивное предложение ruflo-spawn. Семантику выбрал заказчик (5 решений
brainstorming): «сразу платные агенты» + «чаще платный spawn» + «queen = закон». Спека/план:
`docs/superpowers/{specs,plans}/2026-05-15-ruflo-queen-trigger-and-delegation*`. Honest
limitation: хук не исполняет spawn — только инжектит директиву; «жёсткость» = принудительная
инжекция + нормативный вес.
```

- [ ] **Step 4: Обновить `memory/project_state.md`**

В начале файла обновить строку про HEAD origin/main на актуальный (после push в Step 6).
Добавить краткий пункт про §14 queen-trigger в раздел текущего состояния (одна строка:
«§14 Pravila — queen/королева триггер → ruflo Queen route, хук `tools/ruflo-queen-hook.mjs`»).

- [ ] **Step 5: Обновить `memory/MEMORY.md`**

В пункт-указатель про ruflo integration (`[Ruflo big-bang integration ...]`) дописать в
конце: `**S5: §14 queen-trigger hard-rule — queen/королева → ruflo Queen route, хук ruflo-queen-hook.mjs (Pravila v1.15 / CLAUDE.md v2.1 / PSR_v1 v3.1 / Tooling v2.1).**`

- [ ] **Step 6: Коммит memory + push**

```bash
git add memory/project_ruflo_integration.md memory/project_state.md memory/MEMORY.md
git commit -m "chore(memory): ruflo §14 queen-trigger rule"
git push origin main
```

Pre-push gauntlet (gitleaks-full-history + lychee) должен пройти зелёным. Hooks не
пропускать. После push — обновить `memory/project_state.md` HEAD на фактический хеш, если
требуется (отдельным мелким коммитом не обязательно — допустимо в следующей сессии).

- [ ] **Step 7: Финальная верификация (`superpowers:verification-before-completion`)**

Перед заявлением «готово» — invoke `superpowers:verification-before-completion`. Проверить:
все 6 коммитов в `git log`; `node --test tools/` зелёный; `git status` чист; push прошёл.

---

## Self-Review (выполнено автором плана)

**1. Spec coverage:** спека §5 (хук) → Task 1+2; §6 (поведенческая модель) → закреплена в
§14 Pravila (Task 3) + директиве хука (Task 1); §7.1 §14 → Task 3 Step 1; §7.2 §13.6/§0 →
Task 3 Steps 2-3; §7.3 CLAUDE.md → Task 4; §7.4 PSR_v1/Tooling → Task 5; §8 ограничения →
отражены в §14.7/§14.8 + memory (Task 6 Step 3); §9 тесты (13 кейсов) → Task 1 Step 1 (17
кейсов, надмножество); §11 файлы → File Structure. Пробелов нет.

**2. Placeholder scan:** TBD/TODO отсутствуют; весь код приведён полностью; все нормативные
правки — с точными anchor-строками и заменами.

**3. Type consistency:** экспорты хука (`parsePrompt`/`detectQueen`/`isDiscussion`/
`buildDirective`/`buildHookOutput`) совпадают между Task 1 Step 1 (тесты) и Step 3
(реализация). `isDiscussion` — одноаргументный (prompt) во всех использованиях, согласовано
с тест-кейсами спеки §9.
