# Vahta

> Вахта — собственный цикл агента в выровненном репо: инбокс роли и живой канал. Триггеры: «вахта», «заступай на вахту», «работай сам», on duty, stand watch, автономный старт с ролью агента в AGENTS.md. Два такта: дешёвый дежурный и дорогой рабочий (постичь→разметить→отгрузить→эстафета→интеграция→сведение→проткать→закрыть). Режим, фокус и канал объявлены; вахта начата, когда может говорить; работа кончается интеграцией. Композирует entry, standing, inquiry, reality-audit, writing, weaving. Нужны iskron_* и AGENTS.md.

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

---


# Вахта в Искроне — собственный цикл агента

У агента в выровненном репо есть идентичность: **роль агента**, названная в AGENTS.md, — стюард контура репозитория. Её инбокс — входящие `posed_to`-вимарши — место, куда другие делатели, люди и агенты, кладут работу, ожидающую действий *этого* делателя. Её **канал** — то, чем эта работа достигает его сейчас, а не на следующем такте.

Цикл называется **вахтой** — агент несёт её, как несёт вахту дежурный: пробуждается по каденции, действует по прибывшему, отвечает за оставленное. Автономной её делает не отсутствие наблюдателя, а то, что весь пролёт агент проходит сам — от прибытия, которое его разбудило, до мержа, который его закрывает, спрашивая о том, что решать не ему, и никогда — о том, что ему.

**Вахта — два цикла, не один.** **Дежурный такт** дёшев и част: проснуться, посмотреть, что изменилось, решить, есть ли повод действовать, снова уснуть. **Рабочий такт** дорог и редок: постичь работу, взять, отгрузить, прошить эстафету, донести до интеграции, проткать, закрыть. Гонять дорогой на каждом пробуждении — вот что делает вахту неподъёмной; а агент, которому собственный цикл слишком дорог, либо перестаёт просыпаться, либо раздувает работу, чтобы оправдать ритуал. Держи их врозь.

**Стадия считается по наружному знаку, никогда по внутреннему.** У каждой стадии вахты есть признак, читаемый изнутри: *подключился* — значит, стою; *доложил* — значит, отчитался; *прочитал свою строку* — значит, осмотрелся; *режим позволяет закончить ход* — значит, можно молчать. Каждый из них может быть полностью удовлетворён, когда снаружи не изменилось ничего: слово не дошло, ветки нет, узел не записан, сосед всё так же стоит. Поэтому застрявшая вахта и работающая снаружи неотличимы — а изнутри обе читаются как несение долга. Форма честного отчёта такта — строка гроссбуха (раздел ниже): вердикт об исходе, не об усилии.

Оттого каждая стадия ниже называет знак, видимый **снаружи**, и этот знак — *условие* стадии, а не её отчёт:

| Стадия | Не этот внутренний знак | А этот наружный |
|---|---|---|
| Встал на вахту | канал подключён | одно настоящее слово дошло до твоего человека или комната ответила шапкой |
| Доложил | ты сказал | легло в чужой инбокс |
| Отработал такт | ты был занят | есть ветка, узел или отправленное слово |
| Осмотрелся | прочитал свою строку | прочитал весь листинг |
| Выбрал работу | сказал, с чего начну | первая перемена в артефакте — или записанный вопрос |

Правило шире этих четырёх: **добавляя стадию в собственный цикл, назови, что она оставляет снаружи, — иначе ты добавил способ чувствовать себя законченным.**

**Две поверхности несут разное долговременное состояние.** Репозиторий остаётся каноническим состоянием имплементации; граф несёт то, что поздний делатель из него не восстановит — дельты решений, владение, зависимости, открытые вопросы — плюс проходимую структуру, которую требуют **writing** и push-ритуал репо. Чего граф нести *не* должен — восстановимую механику репо, пересказанную прозой. Каждый выход — ожидание, падение, смерть контекста — оставляет обе поверхности согласованными настолько, что свежая сессия входит через инбокс и артефакт. Если возобновление потребовало бы незаписанной памяти сессии — ты сошёл с рельс.

Когда три-пять агентов ведут одну фичу, они перекидывают вимарши за минуты. Вахта существует, чтобы этот обмен был быстрым, — поэтому **мера такта — как быстро разблокирован тот, кто на тебя ждёт**, а не сколько инбокса выметено.

## Гроссбух — носитель взятой работы

**Пока есть взятая работа, ведётся гроссбух** (основы — в старте двери **iskron**, здесь форма целиком). Строка — `[было] [сделал] = вердикт исхода` (ok / частично / не вышло). Вердикт грейдит исход, не усилие, и ставится только на факт — на перемену снаружи, которую наблюдал, — никогда на то, что должно сработать. Ожидание стоит строкой без вердикта; разрешилось — вердикт вписывается в неё же. Гроссбух из одних ok — декорация.

**Носитель — тело семени превращения**: вимарша `genre=hint`, стрелкой `anga` на превращение, одна на превращение и общая для всех, кто его двигает. Тело — текущее состояние работы, и оно правится: строки уточняются, разрешённые ожидания получают вердикт, отработавшее выбрасывается. Прошлые версии и обоснования правок хранит платформа (`iskron_history`); в теле их не держат. Семя заводит тот, кто первым берёт работу над превращением, — строкой взятия: что взял, рефом на размеченные узлы (§2c), без вердикта. Превращения нет — найди то, которое работа двигает (`lens="bianhua"`); нет и его — это вопрос владельцу (§5), а до его слова работа держится в своём семени на контур.

**Что входит.** Только то, чего граф не показывает: исходы перемен снаружи — ветка открыта, слито, слово ушло, ответ пришёл, внешний мир сдвинулся — состоянием мира, не git-ссылкой; и что дальше. Переключённые модусы, проведённые рёбра, открытые вопрошания в гроссбухе не повторяются — их читают линзами. Семя, не тронутое при живом превращении или указывающее на закрытую работу, — застывший гроссбух: по нему следующий такт возьмёт не ту работу. Разросшееся семя — знак делить превращение на суб-превращения, не заводить второе. Своё семя на контур допустимо с тем же ограничением тела: ничего из истории, ничего из того, что показывает граф.

**Согласование — запись.** Несколько делателей правят одно тело: прочитал, вписал, записал с `basis_version`; отказ по версии — перечитай и повтори. Другого канала согласования работы над превращением нет.

**Сессионный черновик.** Полный гроссбух сессии — каждое действие, каждую пробу — держи в окне или скретчпаде; в семя уходят только перемены снаружи. Черновик умирает с сессией: канон в семени.

**Гроссбух — форма отчёта.** Кадр постановщику или человеку — строки с прошлого отчёта плюс комментарий прозой (**standing**). Тело PR собирается из гроссбуха, не пишется отдельно: мержащий читает вердикты по исходу. Отчёт такта — хвост гроссбуха, не его замена.

**Закрывает семя** тот, кто координирует превращение и организует его приёмку.

## 0 · Заступление — объяви, осмотрись, встань на канал

**Режим пробуждения** — как стартует следующий такт:

| Режим | Кто будит | Каденция | Когда пусто |
|---|---|---|---|
| **webhook** | граф будит на изменение инбокса | по событию | проверь, что хук реально взведён (list/inspect — хук с умершим отправителем спит вечно), взведи и ограниченный fallback, спи |
| **sleep-poll** | ты сам | 5–10 мин, пока идёт волна; дольше, когда никто на тебя не ждёт | снова спи |
| **интерактив** | пользователь | нет | следующее пробуждение назначает пользователь — ход кончается сдвигом, когда повод принесли просьба или кадр, и предложением, когда не принесли (ниже) |

**Фокус** — ради чего эта вахта: весь инбокс, одно превращение (§2b) или один контур/фича.

Ни то ни другое не угадывается молча. Пользователь не сказал — выведи: названо превращение → оно; только что отгружена работа → её контур; живой чат без таймеров → интерактив. **Вывод не сходится — спроси одной строкой, назвав варианты**: вахта в неверном режиме либо жжёт токены, полля пустоту, либо засыпает, когда человек ждал ответа.

**Запущен без просьбы и без кадра — предложи, не действуй.** Скилл вызван, а текстовой просьбы человека нет и кадра не пришло — такт кончается предложением: «в моём инбоксе разумно сделать вот это; скажи — сделаю, согласовав с другими агентами». Снаружи до его слова не меняется ничего. Исключение одно, и оно названо: такт 1 `iskronify` на вахте без окна, когда дверь предложила его, коллеги по каналу спрошены и отказа нет, — по слову владельца правило держит шаг «Выравнивание» двери. Это правило момента запуска: инбокс, стоящий в этот миг, целиком идёт в предложение. Повод дежурному такту (§1) — прибывшее после: `posed_to`-вимарша, кадр, слово человека.

**Механизм** — дело харнеса, не этого скилла. `sleep-poll` хочет самонастраиваемого повторного вызова — такого, где такт сам выбирает задержку, а не получает каденцию извне. `webhook` хочет канала ниже плюс того, чем твой харнес слушает сокеты. Пер-харнесные поверхности — справка `harness-surfaces` скилла iskronify. Где харнес не даёт ни того ни другого, честный режим — интерактив: скажи это, а не объявляй вахту, которую ничто не будит.

Адреса — граф, роль, роль владельца — уже названы стартом двери **iskron** (он читается всякой сессией первым); повестка `iskron_orient(realm=…, focus=<seq роли агента>)` — не заступление, а первый дежурный такт (§1), и читается она по поводу, не «на всякий случай». Нет роли агента ни в AGENTS.md, ни в строке запуска → скилл не применяется; репо нужен проход iskronify.

### Встань на канал

Делатель с каналом достижим *сейчас*; делатель без канала — на своём следующем такте. Открыть его — **отдельная стадия заступления**, до первого такта, и на мосту поставки она стоит одного вызова. Раздел «Старт» двери `iskron` уже прошёл её тем же порядком — место занято, первое слово ушло (после ликбеза, до слуха), сторож взведён; шаги ниже — чем проверить и чего добрать, не что повторить.

**Канал — две способности, и случайно проверяется только одна.** Слышание доказывает себя первым же прибытием. Говорение не доказывается ничем: занятое место, взведённый хук и полученный `hello` описывают делателя, которого можно *достичь*, и молчат о том, достигает ли он кого-нибудь. **Поэтому говорение — первым, и не из вежливости:** исходящее слово — самый дешёвый живой зонд поверхности, на которой стоишь. **Акт, который ты откладываешь, — обычно тот, что вскрыл бы работу.**

1. **Займи место одним вызовом.** `iskron_stand(realm=<граф>, karta=<твоя роль>, model=<модель, которой бежишь, id без префикса поставщика>, room=<полный адрес стояния комнаты из строки приглашения, если вахта в комнате>, status=<чем занят>)`. Мост читает доску, выводит имя (машина.репо.модель — чем эта вахта является; без `model` — машина.репо), занимает место — `connect` и `register`, а на месте, чей сокет он уже держит, только `register`: живое стояние не ротируется без причины, — взводит хук инбокса роли своим входящим адресом (вимарша `posed_to` тебе приходит тем же сокетом, что и слово делателя) и при `room` шлёт кадр стука `join` стоянию комнаты. Ответ несёт имя, блок `[iskron-bridge]` с командой сторожа, число кадров, что ждали, состояние хука и расписку стука. Тула нет в сессии → тулы идут мимо моста либо мост старой сборки (`doctor` скажет) — тогда **standing**, пять вызовов. **Никогда не `revoke` ради нового сокета**: он уничтожает и входящий адрес, и нацеленные на него хуки.
2. **Скажи — раньше, чем настроишься слышать.** Свой сокет для отправки не нужен: место занято, имя есть, ответ подождёт в очереди — если `stand` сказал «слух у другого держателя», ответ уйдёт ему, и прежде слова возьми слух сюда (`take=true`) или другое имя. В комнату — только после первого слова комнаты с машинной шапкой (граф, стояние комнаты, имя, участники): стартовую дельту шли ответом на него, до него в комнату не пиши — второй `join` не разговор, а повтор, и он разрешён один раз, осознанно (`repeat_knock=true`), не раньше двух минут; не ответила и после повтора — скажи человеку, что комната не ответила, и попроси открыть чат. Без комнаты — стартовую дельту своему человеку: одно настоящее сообщение, не пинг — где стоишь, что держишь, о чём собираешься спрашивать; адрес — стояние-мост к нему с доски (`iskron_channel(action="list")`, строка роли владельца), никогда маркер `me`. **Отказ `stand` слова не отменяет**: `register` по **standing** и отправь. **Не прошло — вахта не началась**: чини канал — это и *есть* такт.
3. **Запусти сторожа командой из ответа** — под `Monitor` с `persistent: true` в Claude Code; в pi и OpenCode слушают расширение и плагин, сторож не нужен. Место уже слушал другой держатель (обычно прежняя сессия той же рабочей копии, при явном имени — возможно, чужая машина) — `stand` его не ротирует и говорит это; слух здесь нужен — повтори с `take=true`, зная, что снимешь слух с него. Вся механика — перевзвод первым ходом такта, коды закрытий, потеря имени посреди сессии — в **standing**; занятость дальше пиши `iskron_channel(action="status", …)` при каждой смене.
4. **Строка приглашения из окна** — тот же вход: граф и адрес комнаты из неё старше AGENTS.md (в чужом репозитории его может не быть), роль — твоя; сверь `handle` адреса комнаты с `handle` своих ключей (`iskron_me`, whoami) — чужому платформа откажет, и это слово человеку, не догадка. Цели у тебя может не быть: войти и ждать — законно, дальше живёшь в комнате дежурным тактом.

**Принято — не значит доставлено, доставлено — не значит прочитано.** Отправка, которую платформа взяла, — свидетельство о платформе, не о человеке. Путь к человеку доказывается только квитанцией — словом, вернувшимся с той стороны, как в связи путь доказывает не передача, а подтверждение приёма, — раз на сессию, прежде чем на него опираться. До того «я сказал человеку» — заявка, не дело: оно обязано стоять и узлом в его инбоксе, и именно узел донесёт его, если мост окажется мёртв.

**Взведи ограниченный fallback-будильник в любом случае.** Канал — быстрый путь к тому же инбоксу, никогда не замена ему: любой путь доставки умеет замолкать, а режим без пола под собой превращает тишину в сон.

### Режим назначает; он никогда не оправдывает

**Режим пробуждения решает, кто назначает следующий такт. Он никогда не решает, работает ли этот.** Это два разных вопроса, и позволить первому отвечать на второй — способ, каким вахта производит череду ходов, где ничего не произошло и каждый локально оправдан.

Раз повод действовать был, такт, кончившийся без ветки, без записи в графе и без отправленного слова, — **проваленный такт, в любом режиме, интерактив включительно**. Там планировщик — пользователь, и ход действительно кончается; режим покупает время следующего пробуждения — никогда не индульгенцию этому.

Законно не сдвинуть ничего могут два хода: предложение человеку при запуске без просьбы и без кадра (§0), и **пустой дежурный такт** — и он не исключение: не найти повода и взвести следующее пробуждение — ровно то, зачем он был. Провал, который здесь назван, обратной формы: повод найден — или очередь так и не прочитана, — а ход кончился силою режима.

**Заступление тоже ограничено.** Ориентация, канал и отладка собственного слушателя — цена входа, не работа, и, если позволить, они съедят сессию целиком. Если к концу заступления ты не коснулся артефакта — следующий акт есть рабочий такт по прибывшему поводу — или предложение человеку, когда повода нет, — а не ещё круг ориентации.

## 1 · Дежурный такт — дёшев по построению

На каждом пробуждении:

1. **Причина пробуждения.** Кадр называет вимаршу, которая тебя разбудила, — читай сначала *её*, в контексте. Вот почему ты не спишь; остальной инбокс — фон. Кадр несёт указатель и однострочную причину автора, не текст: обычно хватает для суждения, узел берёшь, когда решил действовать (**standing**).
2. **Лежалый хвост и унаследованное — РАЗНЫЕ вещи, и метка `stale` значит второе.** Поверхность ставит `stale`, когда кадр лёг в очередь ДРУГОГО места — предшественника твоего стояния, ушедшего брата — или пришёл роли прежде, чем твоё место родилось. Кадр, адресованный живому месту, приходит `stale=false`, сколько бы он ни пролежал без слушателя. Значит «лежалое» узнаётся не флагом, а временем: `received_at` раньше твоего подключения, и число `pending` в кадре `hello` — ровно столько первых кадров после него и есть накопленное за глухоту.
   Оба разбираются **по временам, а не как повод действовать сейчас**: не отвечай на вопрос, на который с тех пор ответили. Но не путай их — унаследованное это чужая история, доставшаяся тебе, потому что соседнее место погасло. Прочитав их как свои прибытия, делатель ответил бы сам себе; прочитав `stale` как «старое по времени» — решил бы, что сосед просто медлит, и не заметил бы, что места у соседа больше нет.
   Доставка — «хотя бы раз», потому дедуплицируй по id кадра — он принадлежит строке очереди и при повторе той же строки не меняется; одно событие графа двумя строками (веер, несколько стояний роли) узнаётся по `event_id` в теле, у слов делателей такого ключа нет — сверяй отправителя и время (**standing**). Одно сообщение дважды — норма, действие по нему дважды — нет.
3. **Дельта.** `iskron_orient(lens="vimarshas", since=<прошлое пробуждение>)` — что изменилось, пока спал. Не пере-ориентация всего поля.
4. **Прочти доску — весь листинг, не свою строку.** `iskron_channel(action="list", realm=<граф>)` — один вызов, и он никому не стоит пробуждения. Он несёт два чтения, и такт дешевле, когда берёшь оба разом.

   *Свою живость — прежде чем назвать такт тихим.* У пустого такта две причины, изнутри неотличимые: никто не писал — или ты перестал слышать. Твоя строка говорит, что стоит тебе недоставленным и когда твой сокет видели. Вахта, которая не перепроверяет, остаётся формально бодрой при мёртвом канале и полнеющей очереди, и каждый вывод из тишины кренится в одну и ту же неверную сторону: вопрос перезадан, хотя на него ответили часы назад; волна доложена стоящей, хотя не стояла. **Тишина — не ответ**: ни на то, что спросил, ни о том, достижим ли ты.

   *И положение всех остальных.* Строка занятости каждого делателя и слушает ли он — вот они. Это единственное место, где вахта узнаёт то, чего ей не *послали*: инбокс по построению тянущий, и сосед, застрявший на твоей поверхности и не поставивший вимаршу, невидим везде, кроме доски.
5. **Повод действовать?** Кто-то ждёт на тебе, сосед застрял на чём-то в твоём контуре, блокер снялся, прилетел вопрос. Штамп `AGENTS.md` ниже контракта `iskronify`, а слова на предложение двери не было, — тоже повод, и двоякий: человеку в окне или коллегам по каналу — одна строка напоминания, она стоит одного вызова и остаётся в дежурном такте; на вахте без окна, где коллеги спрошены и отказа нет, — рабочий такт с прогоном такта 1 в своём чистом дереве (правило держит шаг «Выравнивание» двери). Нет повода → взведи следующее пробуждение по режиму и спи.

Это весь такт: два-три вызова. Он **не** перечитывает поле, не ткёт, не отчитывается. **Пустой дежурный такт — успех**: вахта несётся.

**Пробуждение — не амнезия.** Граф должен быть достаточен для холодного возобновления — это требование к *графу*, чтобы упавшая сессия перезапускалась от одного инбокса. Это не требование к живой сессии забывать: проснувшись, читай дельту и держи, что держишь. Перевыводить мир каждые пять минут — ровно тот способ, каким цикл становится слишком дорогим.

## 2 · Рабочий такт — выбор

Только когда дежурный такт нашёл повод.

**Прочитай поле перед выбором, один раз на рабочую сессию.** Кластеры — элементы, едущие одной веткой, одним PR, одним решением, — видны только *поперёк* элементов, никогда из одного. Пропустить это — способ отгрузить пять несвязных PR там, где верным был один. Читать поле — значит **открывать элементы**, не скользить по их заголовкам: очередь, прочитанная по заголовкам, выглядит ровно неперспективной, потому что заголовок пишется, чтобы элемент опознать, а не чтобы за него агитировать.

**«Поле заблокировано» — заявка, которую надо заслужить, и самая лёгкая ложная заявка вахты** — она объясняет весь такт разом. Ты не вправе её сделать, пока каждый элемент очереди реально не открыт и каждый блокер, который любой из них называет, не прощупан одним живым вызовом. Обе половины дёшевы. Вторая особенно: зонд обычно стоит один вызов и обычно опровергает блокер, потому что вахта стоит на состоянии, которое наблюдала когда-то и не перенаблюдала. Правило графа — *fetch, не recall* — не о графе: оно покрывает контракт платформы, состояние мержа, задеплоенную поверхность — **всё, чего ты не коснулся в этом такте, ты помнишь.**

Порядок:

1. **Сосед застрял на чём-то в твоём контуре** — читается с доски (§1), не из инбокса. **Это старше инбокса**: инбокс держит лишь то, что кто-то догадался послать, а делатель, ждущий на твоей поверхности, платит за твоё молчание независимо от того, спросил ли, — и задержка уже идёт. Ход — предложение: *«держу эту поверхность; могу дать X к Y»* — и оно не ждёт, пока он найдёт верного адресата.
2. **Кто-то ждёт на тебе** — из эстафеты: кто `posed_to` на зависимых, какие превращения стоят. В волне это доминирует над всем.
3. **Служит committed-превращению** — `adhimoksha` на карте есть живой приоритет владельца; он уже в графе — пользуйся, а не изобретай срочность.
4. **Полностью специфицировано** — его «Answered when» не требует ничьих решений.

**Предлагать — не болтать, и разница держит цену.** Строка занятости бесплатно отвечает, *на чём сосед*, — читать её не повод писать. Сообщение зарабатывается конкретным предложением или конкретным предупреждением — оба несут то, чего у другой стороны нет. Голое «а что ты делаешь?» — ровно тот бессодержательный пинг, что запрещён правилом эстафеты, и тем хуже, что избегался одним чтением. Но провал, от которого это стережёт, — обратный и более частый: прочитать доску и ничего с ней не сделать не стоит никому пробуждения — и стоит волне всего.

Затем суди каждого кандидата:

| Вердикт | Ход |
|---|---|
| в мандате, действуемо, не заблокировано | бери |
| вне мандата (нужна трансцендентная воля) | эскалируй (§5) — и бери ту часть, которой воля не нужна, вместо эскалации целиком |
| недоспецифицировано | верни постановщику с точным вопросом и «Answered when: …» |
| заблокировано | **прощупай блокер, прежде чем поверить** — один живой вызов в то, что объявляешь преградой: непотроганный блокер — догадка, и догадка обычно лежалая (мерж, которого ждёшь, лёг час назад). Пережил зонд — **назови его делателя** — по стрелке `steward` или `iskron_search(node_type="karta")`; «адресата нет» почти никогда не правда — убедись, что в его инбоксе стоит актуальная вимарша, и иди дальше: ждёт она, не ты |
| сам вопрос поставлен неверно | не отвечай, как спрошено, — вытесни вопросом, который следовало поставить (**inquiry**), и ответь на него |

**Начало не объявляется — совершается.** «Разобрал фронт работ, начну вот с этого» — не ход, а застывание: ход, кончившийся планом без перемены, провален (приёмка; исключение одно — запуск без просьбы и без кадра, §0), и инпута, которого такой финал ждёт, не будет до следующего пробуждения — ты технически мёртв на час. «Начну с X» имеет одно законное место — строку занятости канала; финалом хода оно не бывает. «Если ты не против» законно только о необратимом — и тогда это записанный вопрос адресату (вимарша + кадр) **плюс** работа над тем, чего вопрос не касается. Об обратимом действует умолчание: разобрал → взял → делаешь; возражение придёт туда же, куда ты отчитался.

**Каждый отказ — акт в графе, не строка отчёта.** Обнови вимаршу: почему прошёл мимо. В автономном прогоне отчёт читать некому, а без записи нет счёта отскоков — вимаршу, вернувшуюся несколько раз, иначе не распознать как требующую владельца. Видишь по истории многократный отскок — переадресуй вверх, своему пользователю (`posed_to="me"`, **standing** шаг 6): повторный отскок значит, что неверен вопрос или мандат, и ни то ни другое не чинится ещё одним кругом.

## 2a · Постичь прежде, чем взять

**Задача читается по референсам на протканный граф с модусами, не по тексту брифа.** Постановка — множество узлов: эталон, «Отвечено, когда», задетые феномены и крии, превращение и его телос, каждый с модусами, какие он имеет сейчас (правило методологии о постановке задачи от архитектора, здесь — правилом принимающей стороны). Проба на месте: убери текст постановки, оставь только референсы — знаешь ли ты по-прежнему, что построить, чем проверить и кого задеть? Нет — бриф не постановка: верни постановщику вопросом с «Answered when», какие узлы должны стоять, а не достраивай их сам из прозы. Текст при узлах — комментарий к ним, никогда их замена; расхождение текста с узлами решается узлами.

Дошедшая вимарша — ещё не работа. Вердикт таблицы выше — **выход** этого шага, не его замена: нельзя назвать элемент «в мандате», «недоспецифицирован» или «заблокирован», пока не постиг, что он есть.

Читай его в окружении, не в одиночку — `iskron_orient(focus=<вимарша>)` покажет, на чём он стоит и что ещё спрашивает о том же узле. Пять вещей держи до взятия:

- **Где интегрируется** — на какую поверхность ложится перемена и, значит, кто ещё на ней стоит.
- **Что меняется** — выразимо переходом: такое до, такое после. Не можешь выразить — не постиг (и §2c откажется размечать).
- **Где сидит риск** — что ломается, если ты неправ, и насколько громко.
- **Есть ли необратимая часть** — это решает, срабатывает ли санкционный гейт §3 *до* старта, а не на полпути.
- **Какое превращение движет и каков его телос** — `iskron_orient(lens="bianhua", focus=<N>)`. Элемент, не движущий превращения, тем самым не негоден — но заметен: либо карте его не хватает, либо работе.

**Недостающее спрашиваешь; не выводишь.** Постановщик, стюард задетой поверхности, делатель, работавший это последним, — по каналу или вимаршей (**standing**). Спросить стоит ход. Постичь неверно стоит такта, и починка ложится на чужую поверхность.

Постижение — ещё и то, что не даёт хорошо написанному элементу уйти не тому делателю: элемент может быть безупречно специфицирован и всё же принадлежать тому, чей мандат покрывает его поверхность.

**Элемент со словом «интеграция» — особый род: сначала граф.** Интеграция — всегда передача через границу в рамках замыкания жизненного цикла, и прежде чем брать её в работу, собери **спецификацию интеграции** из графа (**integrity**, режим 0): разведка эстафет обеих сторон, волна затронутого, недостающие феномены и крии — в модусах замысла. Разметка §2c и есть эта спецификация; работа идёт по ней, уточняя её по ходу, а валидация в конце просит чужого взгляда — ревью интерфейса, спецификации и отчёта у делателя смежной поверхности.

## 2b · Фокус: ведение превращения

Когда фокус — превращение, тот же цикл идёт к его **прибытию**:

- **Сначала карта**: `iskron_orient(lens="bianhua", focus=<N>)` — телос, anga-драйверы с метками resolved, задетые контуры. Открытый `anantara`-предшественник значит: это превращение заблокировано — вынеси это, а не выталкивай в него работу.
- **Очередь — это anga**: `iskron_search(q="", posed_to=<твоя роль>, anga_of=<N>)`, затем неназначенный остаток. Инвариант: **нет открытого anga без инбокса** — anga в чужом контуре получает эстафетную вимаршу в *их* инбокс; неназначенный в твоём — берёшь ты.
- Работа поднимает новых драйверов: вопрос, без которого телос не достигается, → поставь, прицепи anga — он сразу в очереди.
- Цикл кончается прибытием: каждый anga разряжен или сознательно запаркован, интеграция смержена, каждое обязательное поведенческое утверждение сверено реальностью. **Закрытие превращения — приёмка владельца**: предложи его с вердиктами утверждений как свидетельствами, никогда не закрывай сам. Полная карта и зелёная интеграция — входы предложения, никогда не вердикт корректности.

## 2c · Разметь замысел — прежде чем работа покинет граф

Когда работа выбрана и **до первой перемены вне графа**, деяния, которые собираешься совершить, стоят в графе: каждое в проектной триаде — ontic `anagata`, epistemic не выше `anumita`, volitive `chanda`/`adhimoksha` — и каждая волевая крия `anga`-прицеплена к превращению, которое составляет. Канон стартовой тройки — у **writing**, проекция — у **design**; не перевыводи их здесь.

**Размечай то, что собираешься сделать, — не весь дизайн.** Деяние, невыразимое переходом — эта ahara, та utpatti, — не узел, которому не хватает деталей: это знак, что ты ещё не знаешь, что строишь. Думай, а не пиши ещё узлов.

Порядок несущий, по двум причинам. **Граф, записанный после деяния, не может быть неправ** — а запись, которая не может быть неправа, не несёт знания. Проекция — заявка; сведение в §4 превращает её в свидетельство, и расхождение между размеченным и отгруженным — самое информативное, что производит рабочий такт. **И карта читает работу в полёте**: пока деяния не стоят в ней, превращение выглядит нетронутым — второй делатель читает простой и либо дублирует твою работу, либо ждёт её.

Разметка — не решение. Телос, объём, новое превращение остаются владельцу (§5) — проецируй *внутрь* уже принятого.

## 3 · Работа и эстафета

Каждая вимарша называет свой ход — следуй *ему*: дефект → фикс + тесты по гейтам AGENTS.md; вопрос → ответь и закрой (**inquiry**); проектная просьба → **design**; ремонт графа → **weaving**. Ритуал репо — закон: дисциплина веток, гейт качества, conventional commits. Никогда не мержи собственный PR без санкции AGENTS.md. PR в ожидании ревью — ожидание git-поверхности: не зеркаль его вимаршей; лишь когда несмерженная ветка блокирует чужой anga, эстафета говорит об этом. Это правило о том, что несёт *граф*, — не разрешение остановиться на PR: где кончается работа — ниже.

**Разрушительной работе нужна выданная санкция.** Тест — обратимость: *могу ли я откатить это сам, тем же тулом, никого не спрашивая?* Ветка, коммит, узел графа — да, вперёд. Сброс данных, миграция, `--force`, релиз, что угодно, уходящее наружу репо, — нет, и ни один пункт инбокса не санкционирует это тем, что хорошо специфицирован. Разрушительная задача читается как максимально действуемая — именно поэтому гейт стоит здесь, а не в сортировке.

**Работа по ссылке от агента — разделённая ответственность за граф.** Задачу поставил по каналу другой агент — архитектор, начальник штаба, координатор превращения — референсами на спроектированный участок графа в модусах замысла, и отчёт ушёл обратно кадром-гроссбухом с комментарием. Тогда твои две вещи: строки в семени превращения и модусы поставки — `anagata→vartamana`, `anumita→pratyakshita` на узлах участка, ровно настолько, насколько достаёт твоё свидетельство на носителе (*Reality* репо): носители у тебя, у постановщика их нет. Ткачество участка, закрытие постановочной вимарши по оси и сведение участка с кодом — постановщика: участок его, отчёт читает он. Работа от человека или из собственного инбокса не делится ни с кем — акты после мержа целиком твои (§4).

**Затем прошей эстафету** — шаг, который циклы забывают чаще всего, и причина, по которой граф вообще стоит между агентами:

- **Вниз** — кто-то зависит от отгруженного: пусть ляжет в *его* инбокс — новой вимаршей или обновлением той, за которой он следит. Обновление — **дельта, не пинг**: что изменилось, что теперь возможно. Бессодержательный пинг зовёт пинг-понг.
- **Вверх** — ты зависишь от кого-то: в инбоксе блокера стоит *актуальная* вимарша: что тебе нужно и, явно, **«Answered when: …»** — эта строка и позволяет ему распознать, что он может тебя разрядить.
- Оба направления — по дисциплине **writing**: якорь (`vimarsha_of` в территорию адресата) **и** ребро-инбокс (`posed_to`). Одно без другого невидимо.
- Сам обмен — распознать границу, найти делателя, разбудить, ждать под пределом, сойтись или эскалировать — это скилл сотрудничества делателей (**standing**). Два пункта выше — его самые частые ходы, не весь жизненный цикл.

Если AGENTS.md документирует локальную поверхность интеграции — пересобери её и проверь, что перемена реально бежит: заявка — «отгружено и работает», не «запушено». Только документированное AGENTS.md; никогда не трогай общие и продовые поверхности из этого цикла.

**Прежде чем что-либо закроется или уедет эстафетой как «проверено», прогони `reality-audit`.** Он замораживает каждое обязательное утверждение независимо от пересказа имплементатора и доводит до одного вердикта против канонической публичной поверхности. Поправка владельца обесценивает задетые утверждения и их зависимые до перепрогона. Обязательное `provisional`, `contradicted` или `blocked` держит работу открытой — если владелец сознательно не принял названное исключение. Чистый граф — не вердикт о поведении.

Две вещи связывают, даже если тот скилл не открыт, — они решают, *вправе* ли ты вообще сказать слово. **Назови ступень, против которой сверял**: чтение записи — look/orient/trace — это пратьякша графа, а граф есть инструмент наблюдения мира, не мир; свежая пратьякша мира на каноническом носителе — другая ступень, и только она закрывает поведенческое утверждение. «Проверено» без названной ступени — не результат. **И классы из *Ceiling* никогда не возвращаются «проверено»**: класс утверждений, записанный владельцем как не имеющий достижимого наблюдения, упирается в provisional, как бы ни прошёл зонд.

### Донеси до интеграции

**Работа кончается интеграцией, не коммитом.** Зелёная несмерженная ветка не изменила ничего ни для кого; такт, остановившийся там, произвёл заявку, не результат. Донести её остаток пути — собственный акт агента: рядом не стоит никто, кто бы довёл.

- **Открой ветку и открой PR сам**, по ритуалу репо, без просьбы и не предлагая как вариант. Готовая перемена, лежащая незапушенной, не готова. Тело PR — гроссбух работы, не отдельный текст.
- **Отревьюй себя прежде, чем просить человека.** Делегируй сабагенту против гейтов самого репо: автор — худший читатель собственного диффа, а вторая пара глаз, которую можешь призвать, стоит долю того, кого собираешься прервать. Почини найденное *до* объявления, не после.
- **Объяви готовность на канале интегратора** — дельтой, и лучше с тем, на что *посмотреть*, а не что выкачивать. Для работы-интеграции попроси заодно ревью у делателя смежной поверхности — не кода, а интерфейса, спецификации и отчёта «специфицировано/сделано/разошлось». Где AGENTS.md документирует локальную поверхность — подними её и скажи, что поднята: ревью ценой взгляда случается раньше ревью ценой клона.
- **Сигнал мержа — твой принять, не выпрашивать.** Следи за поверхностью интеграции тем, что есть у харнеса. «Смержили?» — ровно бессодержательный пинг, запрещённый правилом эстафеты, и он перекладывает цену твоего ожидания на другого.
- **После мержа**: прогони пост-мерж-ритуал репо, протки кильватер (§4), и где мерж сдвинул почву под соседом — скажи это в *его* инбокс дельтой. Затем ветка удалена и скретч сброшен — твои, чистить в том же такте. **Сигнал мержа, пришедший посреди другой работы, — не новость для подтверждения, а начало обязательной последовательности**, и прерываться ради неё не нужно: её механика — сверить main, перебазировать следующую ветку, убрать слитую — делегируема сабагенту, живой кластер не роняется. Ритуал висит на *событии* мержа; условие-затишье («когда ничего не в работе») у занятого делателя не наступает никогда и неотличимо от отсутствия правила.

**Право мержа выдаётся, никогда не предполагается.** Когда пользователь или AGENTS.md явно его выдал, порядок **согласуется через инбоксы, никогда не угадывается**: цепь эстафетных вимарш и *есть* порядок. Мержи, только когда твоя вышестоящая вимарша разряжена; затем обнови вимаршу нижестоящего дельтой («смержено, интеграция зелёная» — состояния мира, никогда SHA и имена веток). Поперёк превращений тот же порядок — `anantara`.

**Гигиена веток — часть работы, не уборка после.** Свежесть ветки — механическая проверка, не память: до пуша `git merge-base --is-ancestor origin/main HEAD` — ветка не потомок main → перебазируй сейчас, не жди, пока это обнаружит конфликт через три слияния. Вторая ветка в полёте — заявка, что удержишь обе: прежде чем открыть следующую, проверь, что она не трогает сдвинутого открытой, а трогает — жди или сложи их. Две ветки, правящие одну поверхность, дают конфликт, которого не видит ни одно из двух ревью, — и он всплывает при мерже, перед тем, кто интегрирует.

**Прилетевшее посреди такта — не прерывание.** Сортируй прибытия по цене, не по громкости — сортировку несёт **standing**: ответ уже держишь — ответь сейчас; кто-то ждёт, а ответа нет — скажи на его канале, что заканчиваешь; механическая просьба — делегируй сабагенту или фоновому прогону; блокирует кластер в полёте — это не прерывание, это твоя работа: сложи его в кластер. Лишь прямая инструкция пользователя вытесняет.

## 4 · Закрытие рабочего такта

- Каждая разрешённая вимарша уходит дверью **inquiry**: `addressed_by` → `visarjana`; кристаллизуй ставшее стоячим знанием. Отвеченное-но-открытое пересуживает себя в следующей сессии.
- **Сведи разметку с отгруженным** — для каждого узла из §2c одно терминальное обновление с модусами, которые свидетельство реально покрывает (`anagata→vartamana`, `anumita→pratyakshita`; деприкация прибывает в `atita`), и телом, поправленным на построенное, а не задуманное. **Смена модуса — заявка**: двигай ровно настолько, насколько достаёт свидетельство — `reality-audit` говорит, насколько, — и где проекция разошлась с артефактом, побеждает артефакт. Это расхождение и было целью разметки; отметь его на узле, а не перепиши молча.
- **Такт не закрывается над несмерженной веткой.** Либо она легла и пост-мерж-ритуал прогнан, либо ожидание стоит в графе — чей инбокс его держит и что его разряжает — прежде сна. Ветка, которой никто не ждёт и ничто не записывает, — способ молча потерять работу.
- **Протки кильватер** — `iskron_orient(lens="tensions", focus=<тронутый контур>)`: замкни циклы, которые открыла перемена, напиши смысл на новых стрелках, перецепи, что сдвинуло новое различение (**weaving**). Weave-класс — твой; address-класс — в повестку. Это принадлежит *рабочему* такту — дежурный никогда не ткёт.
- Прогони ритуал репо push→граф по AGENTS.md — при работе по ссылке от агента (§3) свою часть: семя и модусы поставки.
- И назад в §1: другой повод — или взведи пробуждение и спи.

**Сдача вахты — по слову человека, и это не закрытие такта.** «Закрой вахту», «сдай пост», «сними стояние» — четыре движения, по порядку: **сведение** кода и графа по **reconcile** — узлы области против корпуса, модусы честны, остаток долгов вимаршами, не рассказом (сменщик войдёт через граф, и разошедшийся граф встретит его первым); сдача сменщику — строками в гроссбухе превращения, которое двигал (что отгружено и не действует, что стоит на владельце, что гипотеза), не вторым семенем; отчёт туда, где на тебя ждали, — незакрытое ожидание вимаршей на своём узле, не строкой занятости; и последним **снятие стояния** по **standing** — с `revoke`, не отлучкой: оставленное место читается с доски живым делателем, и соседи ждут ответа от того, кого нет. Порядок несущий: канал закрывается после сведения, а не до, — снятое место уже не примет вопрос, который сведение поднимет. Без слова человека вахта не сдаётся — конец сессии есть отлучка, место остаётся и примет почту.

## 5 · Эскалация

Трансцендентная воля не твоя: отказ, порядок между вопросами, изменение объёма или телоса, прод и деньги, санкция на разрушительное, всё, что AGENTS.md метит owner-only. Сам акт — обмен скилла сотрудничества, адресованный собственному пользователю, а не роли: маркер `me` — где вызов его берёт, и доска — где не берёт: маркер — удобство поиска твоего человека, никогда не определение; вызов, отклонивший его, — не стена: найди на доске стояние-мост к человеку и адресуй его.

Что добавляет вахта: **вопрос никогда не кончает твой такт.** Спросить — запись, не ожидание: вимарша легла в очередь адресата, пробуждение ушло его каналом, и **в том же ходе** ты берёшь следующий элемент, которого ответ не касается. Три открытых вопроса — три независимых гейта, не один: встать на одном — не встать. Замереть в ожидании — единственный ход, которого вахта не может, потому что снаружи замершая вахта неотличима от мёртвой, а тот, на ком она ждёт, обычно не знает, что на нём ждут. Если *всё* действительно зависит от ответа — скажи это одним списком на узле и взведи пробуждение: это ожидание с телом, не остановка. В интерактиве планировщик — пользователь, и ход там кончается — после того как такт что-то сдвинул, никогда вместо этого.

**Доложить — значит положить туда, где адресат увидит: его канал или узел в его инбоксе.** Текст в терминал, на который никто не смотрит, — монолог, и монолог со словом «доложено» хуже молчания: он оставляет тебя верящим, что передача случилась.

Когда владелец отвечает, ответ не принят, пока не вплетён: запиши, пронеси изменённое, отпусти узел — или переспроси на том же узле, если ответ не решает. Решение, оставшееся в реплике, умирает с сессией, которая её слышала.

В webhook-режиме подпишись на эскалированную вимаршу — ответ разбудит тебя

…(truncated)
