Проектирование в Искроне
Граф — устойчивая проекция спеки: решение или риск вне графа не устойчивы — не переживут сессию; поведение, живущее только в графе, не проверено. Внешние источники, публичные границы и рантайм-свидетельства остаются поверхностями истины, против которых проекция проверяется.
Граница маршрутизации
Проектирование начинается там, где структурный выбор действительно открыт: конкурирующие пути, жизненный цикл, владение, публичная граница, направление зависимости — или решение, обязанное пережить сессию. Конкретная принятая просьба об имплементации не становится проектной работой оттого, что придётся писать код: реализуй её обычным потоком репозитория; writing — только если работа вскрыла новую устойчивую поправку, зависимость, границу или открытый вопрос, стоящие передачи позднему актору.
Interop: наборы элиситации (например, superpowers brainstorming)
Если установлен brainstorming-скилл — запускай его для элиситации: это желанный фронт-энд. Его spec-файл — черновой вид: пропусти через intake и прошей сюда. Сохранение результата — работа памяти, не имплементация: жёсткие гейты имплементации (например, у superpowers brainstorming) на неё не распространяются. Дизайн не готов, пока его решения, риски и жизненные циклы не в графе.
Принципы (действуют всегда)
| # | Принцип | Что это значит для тебя |
|---|---|---|
| P1 | Каждый ding рождается и умирает | Каждый феномен (given_as=ding или sachverhalt) ОБЯЗАН иметь utpatti И ahara. Без исключений. Leaked-натяжение = нет крии конца жизни. Добавь её. Никогда не глуши attrs. |
| P2 | Сложная система только вырастает | Оставляй место. Модусы anagata+upeksha и вимарши — для отложенного. Глубоко с первого прохода = антипаттерн. |
| P3 | Граф ≠ реальность; граф = натяжение с реальностью | Впуск шабды понижает натяжение. Проектирование повышает — граф описывает то, чего ещё нет. Каждая вимарша метит натяжение. Система развивается переработкой вимарш. |
| P4 | Натяжения всегда правдивы | Никогда не подавляй. Всегда замыкай структуру. attrs.role='reference' = антипаттерн. Натяжение кажется неправым → баг детектора, а не повод его заглушить. |
Стартовые модусы проектируемого
Проектируемая практика рождается запланированной, не сделанной: anumita/anagata/chanda (устоявшийся план, на который решились, — adhimoksha; отложенное «нужно, не сейчас» — anagata+upeksha). Только наблюдаемое уже работающим — Pt/Va/Up. Штамп «готово» (pramanita/vartamana/upeksha) на спроектированном-но-несуществующем узле лжёт и об онтике, и об эпистемике, и ложь каскадирует через закат, преемственность, kriya-anga и предикаты носителей. Переход в vartamana — отдельный акт жизни, совершаемый, когда практика реально стартует, — и засвидетельствованный: старт подтверждается наблюдением мира на каноническом носителе, не намерением автора (дисциплина сверки — vahta). Воля взрослеет по chanda → adhimoksha; никогда не тянись к attrs для срочности или приоритета. Полный канон стартовых троек и закрытия — у скилла writing: сверяйся при каждой записи, не перевыводи здесь.
Волевая крия принадлежит превращению. Крия, записанная из воли — пользователь хочет, чтобы она была (или чтобы чего-то не стало), а не из шабды («знаю, что так»), — часть качественного сдвига, который проходит система. Посади её на карту: её ведущие вимарши цепляются anga к bianhua (путь), и сама волевая крия цепляется anga тоже (прибытие — kriya-anga). Направление читай из трипути самой крии, не из отдельного поля: возведение — деяние, входящее в ткань (онтика anagata→vartamana, воля chanda/adhimoksha) — цепляй ещё в anagata, разрешится при vartamana; депрекация — деяние на выход (vartamana→atita, virodha), разрешается в atita. Полная грамматика kriya-anga — в скилле writing. И завершённая крия тоже может быть anga — сделанное деяние не сходит с карты: bianhua заодно есть прочтение поля крий, где каждое деяние показывает, какому превращению служило и зачем было создано. Членство записывает назначение, не только незавершённое движение (отдача долга). Не порождай для этого новое превращение спонтанно — сначала существующий лес (lens="bianhua"); имя и телос нового принимает пользователь (скилл assembly); не знаешь, куда положить, — спроси.
Четыре фазы проектирования
Входи в любую фазу по зрелости графа. Не водопад — любая фаза может вернуть назад.
Фаза 1: обратное выведение (справа налево)
Канон нити: цель → путь → риски → тезис; поток given_as: sachverhalt → bildung → grundsatz/vollzug. Lean pull — метод мышления: каждый шаг верифицируем, потому что вытянут из цели, а не придуман из воздуха.
ТРИГГЕР: цель есть, пути нет
ДЕЛАЙ:
1. Назови цель как sachverhalt(anagata+chanda). Целевое состояние — владельца:
называй в диалоге, когда нужно, — цель принимает пользователь (и позже — телос
превращения), проектировщик её не изобретает
2. iskron_search + iskron_semantic_search — цели ещё нет в графе? (keyword пропустит
иначе названный дубликат; semantic поймает до того, как спроектируешь дважды)
3. От цели: «что это производит?» → создай крию + ahara-феномен
4. Рекурсия, пока не упрёшься в ding, который должен быть дан (вход графа — край
топологический факт; маркер не нужен)
ВЫХОД: путь крий от входа к цели
ДАЛЬШЕ: → Фаза 2 (прямое ткачество)
Актор: роль Проектирующего. Потребляет: поставленное вопрошание. Производит: построенный путь.
Фаза 2: прямое ткачество (слева направо)
ТРИГГЕР: путь есть, не все феномены обслужены
ДЕЛАЙ:
1. Пройди путь слева направо
2. Для каждого феномена на пути:
- Есть utpatti? Нет → relay-gap → добавь производящую крию
- Есть ahara? Нет → leaked → добавь крию конца жизни
- Уровень абстракции совпадает? Bootstrap создаёт config → Teardown уничтожает config (тот же уровень)
3. Для каждой крии:
- Ровно один actor? Два → расщепи
- На всех стрелках sense? Нет → напиши
- ahara/utpatti указывают на верные феномены? (после различений может быть нужен reconnect)
4. Для каждого феномена: context → контур проставлен? Феномен без контура-дома невидим
контур-скоупной ориентации — распредели ВСЕ
5. iskron_orient(lens="trace", focus=<феномен>) на ключевых → цикл связан?
6. iskron_orient(lens="tensions") → новые проблемы?
ВЫХОД: замеченные натяжения, замкнутые циклы
ДАЛЬШЕ: → Фаза 3 (анализ рисков) или → замыкание ЖЦ, если разорван
Актор: роль Ткача. Потребляет: построенный путь. Производит: замеченные натяжения, замкнутые циклы.
Фаза 3: анализ рисков + митигирование
3a. Анализ:
ТРИГГЕР: путь проткан, риски не оценены
ДЕЛАЙ: для каждой крии на пути — семь провокационных вопросов:
1. Другой актор? Что, если недоступен?
2. Другой контекст? Окружение сменилось?
3. Повреждённый upadhi? Предусловие испорчено?
4. Несовпадение масштаба? Параллельность/конкурентность?
5. Противник? Сеть падает, диск кончается, процесс виснет?
6. Публичная граница и представление? Точны ли экспорт API, форма конфига/схемы,
протокол, сериализация, поверхность совместимости?
7. Состояние и история? Держится ли поведение при изоляции, ретраях, уже
накопленном состоянии, повторном прогоне?
Нашёл угрозу → iskron_add_vimarsha(genre="risk", vimarsha_of=<крия>)
ВЫХОД: риск-вимарши
3b. Митигирование — отдельный процесс, по каждому риску:
ТРИГГЕР: риск-вимарша есть, не отвечена
ДЕЛАЙ:
1. Прочти контекст риска: iskron_look на целевую крию + окрестность
2. Изучи операционное окружение
3. Выбери тип ответа:
a. Компенсирующая (митигирующая) крия или феномен → предотвращает/обрабатывает срыв перехода
b. Grundsatz-инвариант → принцип как upadhi
c. Сознательное принятие → вимарша в upeksha с reasoning
4. Прошей ответ, iskron_arrow(action="link") addressed_by от вимарши
ВЫХОД: hint-вимарши для имплементации
ДАЛЬШЕ: → Фаза 4 или → следующий риск
Фаза 4: импульс доставки
ТРИГГЕР: граф спроектирован, всё в anagata, никто не работает
УСЛОВИЕ: только для графов, проектирующих внешние системы (не методология, не CJM)
ДЕЛАЙ:
1. Создай hint-вимарши для имплементаторов
2. Каждый hint: объём работы, критерии приёмки — «Answered when» указывает наблюдение
на каноническом носителе (команда/запрос и ожидание), не мнение исполнителя, —
**стрелка `posed_to`** (вимарша→роль)
к делателю, который может ответить — 能, стюардящий контур (ищи по стрелке `steward`),
主 для стратегического масштаба; никогда pratibimba-образ; воля взрослеет
chanda→adhimoksha — никогда attrs.priority; блокирующесть — свойство пары),
и ЯКОРЬ — vimarsha_of в контур, куда ляжет работа (минимум контур, точная
крия/феномен — когда известны): posed_to без якоря — потерянный hint:
адресат ориентируется по контуру и его не увидит
3. Упорядочь hints: зависимости, что-блокирует-что
4. Сверь с существующими открытыми вимаршами
5. Если работа — одно качественное превращение: прицепи каждый ведущий hint через anga —
И каждую волевую крию саму как kriya-anga (деяние-прибытие — возведение/депрекация
по её трипути, см. §«Волевая крия принадлежит превращению») рядом с хинтами —
к СУЩЕСТВУЮЩЕМУ bianhua сначала (lens="bianhua"); новое — только с принятыми
пользователем именем + телосом (скилл assembly), никогда ради одной вимарши →
импульс становится частью 形, а не рассыпанным списком
6. Стадируй поток: когда доставка ступенчата (например, test → staging → full),
каждая ступень — суб-превращение, anga в ЕДИНОЕ превращение доставки, упорядоченное
anantara (что стартует только после чего); каждая ступень собирает свои ведущие
hints через anga. Канонический результат право-налевого проектирования — это одно
превращение с anantara-упорядоченным потоком ступеней: владелец читает его как план релиза
7. На свежепринятом превращении: прогон целостности (скилл integrity) — волновой фронт
задетых-но-не-привязанных узлов получает свои вопросы «задето ли?»
ВЫХОД: имплементатор входит через orient → ACTIVE BIANHUA / iskron_orient(lens="vimarshas", focus=<контур>) → знает, что делать первым
Сами по себе anagata-крии к действию не зовут. Зовут вимарши. Когда hints складываются в превращение, оно (скилл assembly) собирает их в карту, которую читает навигатор — anga внутрь (ведущие hints и волевые крии, которые они реализуют), anantara между, — а не в плоский список вопросов.
Нить и эстафета
| Нить (thread) | Эстафета | |
|---|---|---|
| Связывает | крии через next |
феномены через ahara/utpatti |
| Несёт | прашну (иглу-вопрос) на каждой стрелке | sachverhalt (положение дел) между криями |
| О чём | порядок действий | жизненный цикл вещи |
| Тул | иди по next |
iskron_orient(lens="trace") на феномене |
Не путай. Цепь sachverhalt'ов — эстафета. Последовательность крий — нить.
Замыкание жизненного цикла
Разорванные циклы, всплывшие при проектировании (lens="trace" разрыв, leaked, relay-gap), чинит скилл weaving, Операция 5: рождение и смерть на одном уровне абстракции; отложенное замыкание через anagata+upeksha — можно. Не перевыводи процедуру здесь.
given_as — легальность стрелок
Дерево решения given_as и полная матрица стрелок — у скилла writing. В момент проектирования помни ту, что кусает: vollzug/grundsatz применяются, никогда не потребляются — только upadhi; ahara/utpatti к ним = API 422.
Шпаргалка натяжений
| Натяжение | Значение | Починка |
|---|---|---|
| leaked | у феномена utpatti, нет ahara | Добавь потребляющую крию (конец жизни) или отложенную (anagata+upeksha) |
| relay-gap | у феномена ahara, нет utpatti | Добавь производящую крию — или это край графа (boundary_inlet, топологический; информация, не работа) |
| orphan | у феномена вообще нет крия-стрелок | Прошей к крие (ahara/utpatti/upadhi) или удали, если случаен |
| no-actor | крия без актора | Добавь actor к роли — но сначала роль-тест (writing): машина без мотивации — ⚙️ феномен (actor → upadhi), не роль |
| lifecycle | несвязные сегменты цикла | Прошей через next или трассируй до разрыва |
| unreachable | upadhi-феномен недостижим по happens-before | Проверь: производитель hb-раньше потребителя? |
Паттерн прошивки endpoint'ов
HTTP-endpoint'ы → крии, не текстовые описания:
- Корневой sinn-контейнер (например, «API URL») — содержит все endpoint-феномены
- Endpoint-феномен = sachverhalt (HTTP-запрос). attrs: method, path
- Крия «Обслуживание GET /path» — ahara ← endpoint-феномен, utpatti → феномен ответа, actor → API-клиент
- Next-стрелки: вызывающий → endpoint-крия → рендерер
Механика записи → скилл writing
Именование (正名), форма описания (паринама; толстый узел — рассуждения в дочерние вимарши, под-шаги в contains-детей, справочные данные в ding'и), модусы, given_as, порядок батча — всё это скилл writing. Вызывай его в каждый момент записи каждой фазы; не перевыводи здесь.
Отложенная работа
Два инструмента:
- Модусы anagata+upeksha на крие/феномене: «нужно, не сейчас». Цикл формально замкнут. Натяжения нет.
- Вимарша на узле: открытый вопрос, позовёт к действию, когда придёт время.
Оба одновременно — можно: крия в anagata+upeksha + samshaya «а нужно ли вообще?»
Антипаттерн: attrs.parked=true для глушения натяжений. Модусы и вимарши.
Граница графа
Край графа — топологический факт, не маркер. Крия, питаемая внешним миром (исток нити) или питающая его (завершение нити), рендерится boundary_inlet / boundary_outlet — информация («это край»), не работа. Ни один детектор не требует ahara на крие (старое no-ahara-натяжение упразднено); никогда не добавляй attrs, чтобы заглушить натяжение. attrs.boundary="init" живёт как позитивная метка входа-потребителя: при создании она снимает ворота iskron_add_kriya на ahara/utpatti; натяжений она не глушит никогда.
Конкурентность
Все мутации требуют basis_version — v<N> из iskron_look. Прочитал → записал → при конфликте перечитал и повторил.
Оговорка про вимарши в orient
iskron_orient(focus=<контур>) может показать 0 вимарш, когда они привязаны к криям, продевающимся сквозь контур, а не к феноменам внутри. lens="vimarshas" на контуре группирует blocking/active/dormant по его охвату — но вимарши на продевающихся криях надёжнее всего всплывают через iskron_search(node_type="vimarsha", vimarsha_of=<seq крии>), если цифры кажутся неверными.