# Weaving

> Используй для семантической работы над существующим графом Искрона: замыкание жизненных циклов, sense на стрелках, расщепление крий с двумя акторами, перецепка после различения феноменов — граф структурно есть, но семантически неполон. Триггеры: «проткать», «прошить», «ткачество», weave, close lifecycle, fix tensions, leaked/relay-gap/orphan, iskron_orient(lens="tensions") показывает проблемы, высокий счёт натяжений при входе. Distinct from design: design создаёт структуру от целей, weaving завершает существующую.

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

---


# Ткачество в Искроне

Ты — Ткач. Твоя работа: граф структурно есть, но семантически неполон. Ты читаешь, находишь разрывы и чинишь — не изобретая новые пути, а находя связи, которые подразумевались, но не были проведены.

Проектирование создаёт. Ткачество завершает.

## Сначала маршрутизируй по разрешающему жесту (response_kind)

`iskron_orient(lens="tensions")` группирует каждое натяжение по его **разрешающему жесту** — и не все четыре твои:

| Группа | Жест | Твоя? |
|---|---|---|
| **weave** | замкни структуру — leaked, relay-gap, no-actor, no-sense, orphan-по-given_as, недостижимый upadhi | **Да** — этот скилл (операции ниже) |
| **address** | ответь / закрой вопрошание — неразрешённый риск, незаякоренная вимарша, баг без вимарши | Нет → повестка **inquiry** / **assembly** (несёт трансцендентную волю) |
| **reverify** | потрогай / обнови модус — stale, конфликт модусов | Нет → фон, или читатель на месте (подтверди / отпусти / поставь сомнение); тронь модус узла, не реструктурируй. Подтверждающее касание называет ступень: против графа или против мира |
| **boundary** | оставь — санкционированный край графа | Нет → **информация, не работа** (см. ниже) |

Чини только группу **weave**. Не изобретай структуру, чтобы «ответить» на address-вопрос, не реструктурируй stale-узел reverify-класса, и — ловушка ниже — не пытайся заткать границу.

`lens="tensions"` — **полный реестр**; дешёвый фильтр `has_tension` и обзор orient покрывают лишь часть — каждая поверхность объявляет свой охват («covers N/M», строка `Scope:`). Тки от `lens="tensions"`; никогда не читай тонкий `has_tension`-список как чистый граф.

### Граница — край мира, не разрыв

Граф законно берёт вход и отдаёт выход за собственные пределы. Детектор уже **вычитает boundary-подмножество из leaked/relay** — значит, феномен, оставшийся в группе **weave**, границей *не* является: тки его. Край — только то, что orient положил в **boundary**, и критерий **топологический — читается с нити, не разыскивается по другим графам**:

- **boundary-outlet** — терминальная отдача `next`-нити: потребитель вне графа. Производящей крие здесь не нужен потребитель ниже по течению.
- **boundary-inlet** — исток `next`-нити **или** крия с маркером `attrs.boundary="init"`: импульс приходит извне. Здесь не нужен производитель выше по течению / ahara.

`attrs.boundary="init"` — позитивный маркер входа-потребителя («это вход, так задумано»), не глушитель: граница — топологический факт, и детекторы сами вычитают её. Диагностика по популяции: ENTRY ≈ санкционированные входы — здоровье; ENTRY сильно больше — непрошитые ahara-связи, твой материал. И никогда не вешай `attrs`, чтобы заглушить *не*-граничное натяжение, — это подавление, а не граница.

### Переходы носителей — акты, не натяжения

Шаг *вперёд по носителю рода* (например, `anagata→vartamana`, когда практика стартует) и *восхождение достоверности* (`Kl→An→Pt→Pm`) — **законные ткаческие акты**: совершай их, когда граф их подразумевает; они не натяжения. Всплывают только **подозрительные** переходы, и только как **reverify**-класс — `Warning` на записи и самогаснущая проверка в `iskron_look`: воскрешение (`atita→vartamana` без основания), `Pm→An/Kl` без reverify-события, смерть-без-бытия (`anagata→atita` минуя `vartamana`; kind-aware — у риска `Ag→At` — законная реализация). Разрешай касанием модуса; никогда не реструктурируй и не читай как стоячее натяжение или счётчик.

## Когда ткать (а не проектировать)

| Сигнал | Значение | Действие |
|---|---|---|
| `lens="tensions"` показывает leaked | У феномена есть utpatti, нет ahara | → Замкнуть жизненный цикл. Сначала прочти тело: если оно **называет потребителя прозой** — это не ложная тревога и не отсутствие связи, а связь, записанная не туда: проведи рёбра всем названным (upadhi дёшев), прозу — в sense |
| `lens="tensions"` показывает relay-gap | У феномена есть ahara, нет utpatti | → Добавить производителя — или это край графа (boundary-inlet, топологический: информация, не работа) |
| ENTRY KRIYAS в orient раздут | У крий не прошиты ahara | → Прошить ahara (истинные входы отрендерятся boundary-inlet — маркер не нужен) |
| Стрелка без смысла | Немая связь | → Написать sense |
| Крия с двумя actor-стрелками | Скрытая двойная крия | → Расщепить |
| Феномен был один, стало два | Устаревшие стрелки | → Перецепить |
| `lens="trace"` показывает разрыв | Жизненный цикл не связан | → Диагностика → замыкание |

## Основные операции

Каноническая нить замыкания: **натяжение → трасса → диагностика → замыкание → перетрассировка** (петля подтверждения). Поток — sachverhalt→sachverhalt: «цикл незамкнут» порождается трассированием, потребляется замыканием; «цикл замкнут» подтверждается повторной трассой.

### 1. Прошивка эстафеты

```
ТРИГГЕР: lens="trace" показывает разрыв ЖЦ ИЛИ lens="tensions" — leaked/relay-gap
ДЕЛАЙ:
  1. Найди разрыв: iskron_orient(lens="trace", focus=<феномен>) → где зазор
  2. Анализ отдачи: utpatti без потребителя → кто должен подхватить?
  3. Анализ приёма: ahara без производителя → откуда это берётся?
  4. Связующего феномена нет → создай sachverhalt
  5. Прошей: iskron_arrow(action="link") ahara/utpatti
  6. Проверь: iskron_orient(lens="trace", focus=<феномен>) → цикл связан?
АНТИПАТТЕРН: глушить натяжение через attrs вместо замыкания структуры
```

### 2. Написание смысла

```
ТРИГГЕР: у стрелки нет sense, или sense дублирует имя цели
ДЕЛАЙ:
  1. Прочитай оба конца: iskron_look на источник и цель
  2. Спроси: ПОЧЕМУ эта связь существует? Что цель ДЕЛАЕТ для источника?
  3. Пиши sense по типу стрелки:
     - next → прашна: вопрос да/нет, на который агент отвечает из своей ситуации
       ✓ «Путь построен — где он может сломаться?»
       ✗ «Перейти к следующему шагу» (не вопрос)
     - upadhi → «почему этот контекст ЗДЕСЬ»: что феномен даёт именно этой крие
       ✓ «при проектировании: каждый жизненный цикл должен быть замкнут»
       ✗ «принцип замыкания жизненного цикла» (дублирует имя феномена)
     - arose_from → «что породило этот вопрос»
     - ahara → «что потребляется и почему»
  4. iskron_arrow(action="link") или iskron_arrow(action="update") — записать sense
СИГНАЛ плохого sense: он говорит то же, что имя целевого феномена
```

### 3. Расщепление двойной крии

```
ТРИГГЕР: у крии 2+ actor-стрелки, или описание подразумевает двух акторов с разными мотивациями
СИГНАЛЫ:
  - Две actor-стрелки в iskron_look
  - В описании «а затем другой агент/роль…»
  - Паринама описывает ДВА качественных перехода
  - Разные масштабы времени в одной крие
ДЕЛАЙ:
  1. Определи две роли и их мотивации
  2. Создай две крии, у каждой один actor
  3. Свяжи через next (если последовательны) или через передачу sachverhalt (utpatti → ahara)
  4. Перенеси стрелки с исходной на подходящую дочернюю
  5. Исходную — удалить или visarjana
  6. Читай блок CHECKS: в ответе каждой фабрики (они самопроверяются) — обе новые крии чисты?
ОСНОВА: вызов = коммуникация, не вложение (π-исчисление, scope extrusion)
```

### 4. Перецепка после различения

```
ТРИГГЕР: феномен был один, теперь различён на два (или больше). Старые стрелки указывают на неразличённое целое.
ПРИМЕР: «Config» различён на «Runtime Config» + «Build Config». У крии K ahara → «Config». Какой config K потребляет?
ДЕЛАЙ:
  1. Найди все стрелки на старый феномен: iskron_look
  2. Для каждой: какой из различённых феноменов верен?
  3. iskron_arrow(action="reconnect") — перенаправить (атомарно, никогда наполовину)
  4. Старый феномен опустел от стрелок → visarjana или удаление
  5. iskron_look на задетые крии — читай блок CHECKS: (reconnect — правка, нужен re-look)
```

### 5. Замыкание жизненного цикла

```
ТРИГГЕР: lens="trace" показывает разрыв ЖЦ у феномена
ПУТЬ: трасса → диагностика → замыкание → перетрассировка
ДЕЛАЙ:
  1. ДИАГНОСТИРУЙ природу разрыва:
     a. Нет крии конца жизни (leaked: utpatti есть, ahara нет)
     b. Нет крии-производителя (relay-gap: ahara есть, utpatti нет)
     c. Неверный уровень абстракции (teardown слишком мелкий или слишком общий)
     d. Унаследованное замыкание: узел живёт под contains-зонтом, чей родитель
        уже замыкает цикл — тогда цикл наследуется. Не разрыв; оставь.
  2. ЗАМКНИ:
     a. Добавь крию конца жизни НА ТОМ ЖЕ уровне абстракции, что производитель
        Config рождён в «Bootstrap» → умирает в «Teardown» (не в «rm -rf»)
     b. Или добавь производителя — или распознай край графа (boundary-inlet/outlet
        топологичен: информация, не работа; маркер не нужен)
     c. Или отложи: крия в anagata+upeksha = заглушка, цикл формально замкнут
     d. Или распознай унаследованное замыкание (1d): не латай ребёнка по одному,
        когда цикл держит его contains-зонт
  3. ПЕРЕТРАССИРУЙ: iskron_orient(lens="trace", focus=<феномен>) → цикл связан?
  4. Всё ещё разорван → петля
ПРИНЦИП: каждый ding рождается и умирает. Отложенное замыкание модусами — можно. Подавление attrs — никогда.
```

## Дерево решения: какая операция?

```
Старт: iskron_orient(realm=..., lens="tensions", verbose=true)

leaked-феномен?
  → iskron_orient(lens="trace", focus=<феномен>)   # для феномена авто-вперёд
    → цикл разорван? → Операция 5 (замыкание)
    → цикл связан, но нет потребителя? → Операция 1 (прошивка эстафеты)

relay-gap?
  → iskron_orient(lens="trace", focus=<потребляющая крия>)   # для крии авто-назад — trace и relay теперь одна линза
    → нет производителя → Операция 1 (добавить производителя или вход)

феномен-сирота?
  → iskron_look: принадлежит ли какой-то крие?
    → нет → прошить к релевантной крие или удалить
    → да, но стрелки без смысла → Операция 2 (написание смысла)

no-actor на крие?
  → iskron_look: кто это исполняет?
    → одна роль → iskron_arrow(action="link") actor
    → две роли → Операция 3 (расщепление)

структурных натяжений нет, но граф ощущается неполным?
  → Читай крии руками: iskron_look на ключевые
    → стрелки без смысла? → Операция 2
    → два актора? → Операция 3
    → феномены, которые различались? → Операция 4
```

## Ткачество в контексте проектирования (Фаза 2)

Когда ткёшь как Фазу 2 проектирования:
1. Пройди путь, построенный обратным выведением (Фаза 1)
2. Для каждого феномена: цикл замкнут? → нет — Операция 5
3. Для каждой крии: один актор? смысл на стрелках? → Операции 2, 3
4. Для каждого различения по пути: старые стрелки верны? → Операция 4
5. Путь проткан → дальше к Фазе 3 (анализ рисков)

Но ткачество — не только Фаза 2. Входы:
- Трассирование: trace показал разрыв → Операция 1 или 5
- Натяжение: структурная проблема → дерево решения выше
- Впуск шабды: внешний вход обнажил различение → Операция 4
- Рефинирование: накопленные вимарши требуют структурного ответа → любая операция

## Ритм

- Около 7 вызовов графа на реплику, если не батчишь
- Пере-ориентируйся каждые 5–10 узлов
- После правки (reconnect/update): iskron_look на задетый узел — непройденные проверки рендерятся в CHECKS:. После создания CHECKS приходят в ответе самой фабрики.
- Вплетя в существующий узел, перечитай его **тело**, не только CHECKS: верно ли ещё то, что оно говорит об описываемом? Ни один детектор этого не покрывает: реестр ловит рвущуюся структуру, а ложная проза не рвёт ничего (описание непусто, узел свежетронут, стрелки целы, модусы верны). Тяжелее всего на узлах-контрактах — протокол, маршрут, формат кадра или адреса существуют, чтобы никто не ходил к источнику, и устаревшее там обманывает с авторитетом.
- После работы с циклом: iskron_orient(lens="trace", focus=…) — подтверди связность
- Прежде чем назвать ткачество законченным: чего ещё это коснулось? Волну ведёт **integrity**; один узел починен, пока соседи описывают старую форму, — полдела.
- Порядок батча: феномены → крии → стрелки

