pack-creator · v1.0.0 · 2026-07-10 · sha256 54bedea77267dd6f

pack-creator v1.0.0A

Immutable. This exact content is served forever at /api/v1/blob/54bedea77267dd6f.

---
name: pack-creator
description: Guide a PACK-X author through the SPF fill cycle 01-11. Calls R28 Diagnostician to select mode (assembly/hybrid/full SPF) and leads through phases. Protects the read-only upstream invariant via PreToolUse hook.
trigger_phrases:
  - "Создатель паков, "
  - "Pack Creator, "
realized_by:
  - DP.SC.048
  - DP.ROLE.062
related_methods:
  - SPF/process (01-11)
  - MIM.M.029 Pack Rework
version: 1.0.0
layer: L3
status: active
triggers:
  slash: [/pack-creator]
  phrases:
    - "Создатель паков, "
    - "Pack Creator, "
routing:
  executor: sonnet
  deterministic: false
---

# /pack-creator — сопровождение автора PACK-X по SPF-циклу

> ⚡ **Скилл-проводник, не автор.** Знание оригинирует автор Pack. Скилл удерживает
> процесс (SPF/process 01-11), защищает инвариант **read-only upstream FPF/SPF**
> и подстраивает глубину под cp.iwe автора.

## Контракт скилла

- **Вход:** автор намерен создать или продолжить наполнение PACK-X (после `/pack-new`).
- **Выход:** PACK-X с заполненными разделами 01-11 + state-файл `.iwe-runtime/state/spf/{pack_id_slug}.yaml` (локальный, вне Pack — WP-474 Ф3).
- **Время:** N сессий по 30-90 мин, чекпоинты после каждой фазы.
- **Не делает:** не пишет в `SPF/` и `FPF/` (блокируется hook'ом), не выполняет cross-pack consistency аудит (это R24 Аудитор), не декомпозирует деятельность (это R29 Артефактор).

## Когда вызывается

**Триггер-фразы:** «Создатель паков, …», «Pack Creator, …», slash `/pack-creator`.

**Сценарии (DP.SC.048 §5):**

- Автор сделал `/pack-new`, скаффолд готов, нужно наполнить 02-11.
- Автор продолжает работу над PACK-X через несколько сессий — скилл подхватывает
  с `spf_checkpoint` из state-файла.
- Автор не уверен, какой режим оригинальности выбрать — скилл вызывает R28 Диагност.

## Шаг 0 — диагностика автора (R28)

Перед началом работы — определить **cp.iwe** автора (компетенция «работа с
формализациями»). Это задаёт режим:

| cp.iwe | Режим      | Что делает автор                                                   | Что делает скилл                       |
|--------|------------|--------------------------------------------------------------------|----------------------------------------|
| ≤ 2    | assembly   | Выбирает distinction'ы из чек-листа шаблонов соседних паков        | Подаёт шаблоны, объясняет суть         |
| = 3    | hybrid     | Модифицирует шаблоны под свой домен                                | Подаёт шаблоны + вопросы на адаптацию  |
| ≥ 4    | full SPF   | Оригинирует distinction'ы, методы, формализации                    | Консультирует по форме (frontmatter, naming) |

**Если cp.iwe недоступен** (новый пилот, нет данных в Neon) → default **assembly**.
Не запускать `/diagnose` принудительно — спросить автора напрямую: «Какой у тебя
опыт с формализациями: впервые / есть / уверенно работаю?» и смапить ответ.

## Шаг 1 — scaffold через `/pack-new`

Если каталог `PACK-X/` не существует:

```
Вызвать Skill: /pack-new
```

Передать имя домена (существительное, не тема и не инструмент — см. CLAUDE.md §1).
`/pack-new` создаст структуру по `SPF/pack-template/` (разделы 01-11 пустыми
скелетами) и склонирует FPF/SPF при необходимости. После — продолжать с Шага 2.

## Шаг 2 — фазы SPF/process 02-11

Последовательность процесса — `SPF/process/01-domain-selection.md` … `11-review-and-evolution-cycle.md`.
Скилл ведёт автора по фазам **с записью прогресса в state-файл** (Шаг 7).

### Глубина оригинальности по режиму

- **assembly (cp.iwe ≤ 2):** для каждого раздела (distinction'ы, entities, methods)
  скилл загружает 3-5 шаблонов из соседних паков (других `PACK-*` репо в `${IWE:-$HOME/IWE}/`),
  показывает автору как чек-лист, автор выбирает применимые. Скилл копирует
  выбранные в `PACK-X/pack/X/03-distinctions/` etc. с минимальной адаптацией имён.

- **hybrid (cp.iwe = 3):** шаблоны соседних паков + вопросы: «Что в твоём домене
  отличается?», «Какой termin замени, какой оставь?» Автор модифицирует.

- **full SPF (cp.iwe ≥ 4):** скилл не даёт шаблоны, только напоминает требования
  формы (id-схема `<PACK>.D.NNN`, обязательные поля frontmatter, проверка тестом
  «можно ли проверить?»). Автор оригинирует distinction'ы с нуля.

### Чекпоинт после каждой фазы

После завершения раздела (например, 03-distinctions заполнен):

1. Обновить `.iwe-runtime/state/spf/{pack_id_slug}.yaml`: `spf_checkpoint: 03`.
2. Предложить автору паузу или переход к следующей фазе.
3. Запомнить решение, не настаивать.

## Шаг 3 — защита инварианта (PreToolUse hook)

Скилл устанавливает переменную окружения `PACK_CREATOR_ACTIVE=1` на время сессии.
Hook `pack-creator-spf-guard.sh` блокирует Write/Edit/NotebookEdit в путях
`~/IWE/SPF/*` и `~/IWE/FPF/*`. При срабатывании hook возвращает exit 2 с
объяснением.

**Что делать при срабатывании:**

- НЕ пытаться обойти (это hook bypass, CLAUDE.md §2.6).
- Если изменение **точечно для PACK-X** (новое distinction, метод, formalisation)
  → переписать путь на `PACK-X/pack/X/<раздел>/`. См. extension-механизм в
  `SPF/process/00-process-overview.md#extension-mechanism`.
- Если изменение **системное** (касается всех Pack, правка процесса/спецификации
  SPF) → это **отдельный РП на правку SPF** (governance-работа), не работа
  `/pack-creator`. Завершить текущую фазу, открыть `/wp-new` с владельцем
  upstream.

## Шаг 4 — verify через R23

После прохождения 02-11 (или промежуточного checkpoint):

1. **Структурная проверка (SPF.SPEC.001):**

```
Вызвать Skill: /verify
```

Артефакт — `PACK-X/pack/X/`. Эталон — `SPF.SPEC.001` (структура и обязательные
секции Pack). VR.R.001 работает context-isolated, проверяет результат, не процесс.

2. **Package-адекватность по E.4.DPF.DA (WP-474 Ф4, для seed-пакета):**

```
Вызвать Skill: /verify
Аргумент: pack <путь-к-PACK-X>
```

Проверяет 11 координат Domain Adequacy (D1-D11) по артефактам фаз Ф1-Ф3 (SoTA-лист, decision-record, seed-маркер). Вердикт: PASS/CONDITIONAL/FAIL. Проверка честная для seed-статуса: отсутствие педагогики, практик, трансфера и т.д. отмечается как `missing(seed-expected)`, не блокирует PASS, если критичные координаты (D1, D7, D11) в порядке.

При расхождении эталону (любой проверке): скилл получает отчёт, возвращается на нарушенную фазу, повторяет.

## Шаг 5 — state management

> **Вынесено из дерева Pack (WP-474 Ф3, пир-сессия 2026-07-09-14-seed-mature-spf-state).**
> `.spf-state.yaml` — машинное состояние процесса заполнения (кто, когда, до какого чекпоинта), не содержание Pack. Оставление его внутри Pack означало бы, что при переносе/копировании Pack (командный форк, публикация) чужой автор получает вместе с содержанием чужой, бессмысленный для него прогресс-трекер. Contrast: `.pfad-decision.md` (Ф2) остался ВНУТРИ Pack — это человекочитаемая история происхождения, которая обязана путешествовать с Pack.

Файл: `.iwe-runtime/state/spf/{pack_id_slug}.yaml` — локально, вне git (`.iwe-runtime/` уже в `.gitignore` корня IWE).

`pack_id_slug` — имя директории Pack без префикса `PACK-` (например `PACK-product-management/` → `pack_id_slug: product-management`), НЕ поле `pack_id` манифеста — то содержит короткий мнемо-код (`DP`, `MIM`), а не slug (расхождение найдено и исправлено при WP-474 Ф3: изначальная версия этого правила ошибочно предполагала, что `pack_id` манифеста и есть slug с префиксом).

Источник имени директории — по приоритету: (1) если `/pack-creator` вызван с явным путём/именем Pack в аргументе («Создатель паков, продолжи PACK-X») — взять `{slug}` оттуда; (2) иначе, если текущая рабочая директория — сам Pack (содержит `00-pack-manifest.md`) — взять slug из её имени; (3) иначе — спросить пользователя, какой Pack продолжаем, не гадать.

Минимальная схема:

```yaml
pack_id: DP   # короткий код из манифеста, для справки — не используется в пути state-файла
mode: assembly | hybrid | full
cp_iwe_at_start: 2
spf_checkpoint: 03   # последний завершённый раздел SPF/process
last_session: 2026-05-31
notes: |
  свободный текст автора между сессиями
```

При повторном запуске `/pack-creator`: определить `pack_id_slug` из пути/имени директории Pack (`PACK-{slug}` → `{slug}`) → прочитать `.iwe-runtime/state/spf/{pack_id_slug}.yaml`, если существует → восстановить режим и точку входа, не повторять Шаг 0 (если `cp_iwe_at_start` свежее 30 дней). Не читать `.pfad-decision.md` для этого поиска — `wp:` там остаётся гуманитарной ссылкой для аудита, не механической точкой входа скилла.

Если `.iwe-runtime/state/spf/{pack_id_slug}.yaml` не найден (первый запуск, или машина сменилась и state не перенесли вручную) — считать это первым запуском, начать с Шага 0. Историю прогресса это не портит: сам Pack (заполненные разделы) — источник истины о том, что реально сделано; `.spf-state.yaml` — только удобный ярлык, не обязательная зависимость.

## Шаг 6 — соседи (Pack-различения)

| Скилл/роль                | Когда                                              | Граница                       |
|---------------------------|----------------------------------------------------|-------------------------------|
| `/pack-new`               | Скаффолд каталогов PACK-X (разово)                 | Скилл, не роль                |
| `/pack-creator` (эта)     | Наполнение 02-11, сопровождение N сессий           | R30, длинный процесс          |
| `/ke`                     | Захват одного факта в Pack/CLAUDE.md/memory        | Точечно, не процесс           |
| R29 Артефактор-Декомпозитор | Разбить деятельность на этапы (≥3h РП)           | Деятельность, не онтология    |
| R24 Аудитор               | Cross-pack consistency, аудит инсталляции          | За границей R30               |

**Тест границы R30:** «Это про наполнение онтологии одного Pack?» Да → R30.
«Это про разбиение работы на этапы?» → R29. «Это про сверку соответствия N
паков общему стандарту?» → R24.

## Шаг 7 — закрытие сессии

В конце каждой сессии скилла:

1. Записать прогресс в `.iwe-runtime/state/spf/{pack_id_slug}.yaml` (`spf_checkpoint`, `last_session`, `notes`).
2. Снять `PACK_CREATOR_ACTIVE` (через `unset` в обёртке или закрытие сессии Claude).
3. Если фаза 11 пройдена и `/verify` OK → предложить commit + push PACK-X.
4. Если ещё не end-of-process → отметить «продолжим с фазы N» в чате.

## Анти-паттерны

- ❌ Скилл оригинирует distinction'ы за автора (особенно в режиме full SPF).
- ❌ Скилл правит SPF/FPF «потому что так логичнее» — hook должен сработать; если
  обходишь — нарушаешь CLAUDE.md §2.6.
- ❌ Прыжок через фазы (03 → 07 без 04-06) — Pack получит дырки, R23 завалит verify.
- ❌ Запуск без state-файла, повторное прохождение Шага 0 каждую сессию.

## Источники

- **DP.SC.048** — service clause «Pack Creation»
- **DP.ROLE.062** — роль «Создатель паков» (R30)
- **SPF/process/00-process-overview.md** — общая карта процесса + extension-механизм
- **CLAUDE.md §1** — Pack Creation Gate, fallback chain
- **WP-369** — закрыт 31 мая, контекст создания роли
- **WP-377 Ф2.4** — реализация скилла + hook (текущая)