applied-quality — Ветки A+ и B: шардинг и частичный анализ

Часть skill'а applied-quality. Условия запуска, развилка по LOC, модель нити, формула и формат вывода — в SKILL.md; оси/ступенчатость/спутанность/рекурсия — в references/axes.md. Этот файл читается целиком при ветках A+ и B.

Ветка A+ — двухфазный шардинг с реконструкцией графа

Наивно резать граф по LOC нельзя — потеряются cross-shard пересечения и циклы. Пер-нитевые оси шардим и усредняем; граф (спутанность + рекурсия) собираем на швах.

Предложение разбиения

Вывести структуру шардов с LOC и обоснованием границ (естественные швы), проверкой max/min≤3. Дождаться подтверждения (или запустить, оставив возможность сдвинуть швы, если пользователь уже дал «анализируй»).

Фаза 1 — по шардам, параллельно

Agent model=sonnet, run_in_background:true, по одному на шард. Каждый агент читает ТОЛЬКО свою зону и возвращает:

  1. Внутренние нити с осями (1/2/3/5) и S.

  2. Внутреннюю спутанность и циклы (с вердиктом контролируемо/катастрофа).

  3. Манифест границы (критично для сшивки) — все полуребра за пределы зоны:

    • экспонированные входы: public API / поднимаемые события / реактив наружу — с идентити;
    • выходы наружу: подписки на чужие события, вызовы чужого API/контроллера/хаба, Set в общий реактив, static/GetService в другие зоны — с идентити и каналом. Формат: {идентити, направление, канал, файл:метод}.

    Что есть «идентити» (по нему матчатся полуребра на шве):

    • событие — ОбъявляющийТип.ИмяСобытия;
    • API/метод — Тип.Метод(сигнатура);
    • реактив — конкретный тип ReactiveValue<T> + владелец/поле (напр. PointerModel.ScreenPosition);
    • static/глобал — полное Namespace.Тип.член.

    Матч ребра — совпадение идентити с обеих сторон шва. Если идентити не резолвится однозначно (перегрузки, дженерики, доступ через рефлексию/строковый ключ, событие через обёртку) → ребро помечается unresolved и трактуется как ветка B для ЭТОГО ребра: в вывод идёт дисклеймер «cross-shard связь по <идентити> не подтверждена», а НЕ молчаливый пропуск. Скрытая cross-shard рекурсия/спутанность не должна теряться тихо.

Промпт агента должен содержать полную модель анализа: модель нити из SKILL.md (раздел 3) + references/axes.md целиком, т.к. у агента нет этого контекста.

Фаза 2 — сборка (основной контекст, не делегируется)

  1. Сшить полуребра по идентити → cross-shard рёбра и cross-shard нити.
  2. На пересобранном графе: Ось 4 (включая межшардовые пересечения) + рекурсия (циклы через швы).
  3. Оси 1/2/3/5 и S — среднее по шардам, с дедупом маркеров по типу (один тип = 1 единица, но перечислить все проявления).

Сведение

Величина Как сводим
Оси 1/2/3/5, S среднее по шардам + обязательно разброс min–max (усреднение маскирует «где болит»: ядро может быть 3, вью 1)
Ось 4 спутанность на пересобранном графе (не усреднять)
Рекурсия/катастрофа на пересобранном графе (цикл может замкнуться через шов)

Ветка B — частичный (>10000 LOC / деление неестественно)

Вывести предупреждение:

⚠️ Объём превышает порог реконструкции графа. Пер-шардовые оси применимы, но cross-shard спутанность и рекурсия могут быть пропущены. Оценка частичная.

Далее: по-шардовый анализ осей + швы выборочно (только явные пивоты), в выводе маркировать «оценка частичная».