doc: record debugging comparison notes
This commit is contained in:
@@ -0,0 +1,115 @@
|
|||||||
|
# 2026-04-26 - Почему Sonnet 4.6 мог застрять на Layer1 и в чём он может быть сильнее
|
||||||
|
|
||||||
|
## Зачем этот документ
|
||||||
|
|
||||||
|
После успешного завершения кейса возник мета-вопрос:
|
||||||
|
|
||||||
|
- почему другая модель могла не дойти до рабочего решения
|
||||||
|
- в чём она всё же может быть объективно лучше
|
||||||
|
|
||||||
|
Документ нужен как заметка о процессе расследования, а не о самом кодовом fix.
|
||||||
|
|
||||||
|
## Почему Sonnet 4.6 мог не дожать именно этот кейс
|
||||||
|
|
||||||
|
### Кейс был каскадным
|
||||||
|
|
||||||
|
Здесь не было одного простого корня.
|
||||||
|
|
||||||
|
Последовательность была такой:
|
||||||
|
|
||||||
|
1. отсутствует `fission-fetcher`
|
||||||
|
2. потом выясняется недостаток прав на `Role/RoleBinding`
|
||||||
|
3. потом выясняется, что не хватает ещё и делегируемых permission-ов (`events.create`)
|
||||||
|
4. потом выясняется, что не хватает `localsubjectaccessreviews.create`
|
||||||
|
5. потом executor-path становится рабочим, но router-path всё ещё сломан
|
||||||
|
6. затем обнаруживается отсутствие namespace watch/list у `fission-router`
|
||||||
|
|
||||||
|
Модель, которая мыслит в режиме "нашёл корень -> исправил -> готово", на таком сценарии часто останавливается слишком рано.
|
||||||
|
|
||||||
|
### Симптомы менялись и маскировали прогресс
|
||||||
|
|
||||||
|
Промежуточные симптомы были:
|
||||||
|
|
||||||
|
- `serviceaccount not found`
|
||||||
|
- `500 timeout`
|
||||||
|
- `404`
|
||||||
|
- `200`
|
||||||
|
|
||||||
|
Это классический случай, где изменение симптома означает не провал, а смену активного bottleneck.
|
||||||
|
|
||||||
|
Если интерпретировать это неправильно, расследование начинает метаться.
|
||||||
|
|
||||||
|
### Нужно было понимать RBAC delegation, а не только RBAC access
|
||||||
|
|
||||||
|
Ключевая тонкость кейса:
|
||||||
|
|
||||||
|
- executor создаёт `Role` для fetcher
|
||||||
|
- эта `Role` выдаёт `events.create`
|
||||||
|
- Kubernetes запрещает создавать `Role`, делегирующую permission, которого нет у самого вызывающего субъекта
|
||||||
|
|
||||||
|
Следовательно надо было догадаться, что executor обязан получить `events.create`, хотя сам код падал не на "events usage", а на создании `Role`.
|
||||||
|
|
||||||
|
Это не самый очевидный вывод без жёсткой опоры на лог и знание RBAC semantics.
|
||||||
|
|
||||||
|
### Нужен был именно инструментальный debugging loop
|
||||||
|
|
||||||
|
Решение появилось не после одной сильной гипотезы, а после цикла:
|
||||||
|
|
||||||
|
1. найти симптом
|
||||||
|
2. проверить конкретное право
|
||||||
|
3. воспроизвести в новом namespace
|
||||||
|
4. подтвердить создание реальных объектов
|
||||||
|
5. перезапустить e2e test
|
||||||
|
6. перейти к следующему симптому
|
||||||
|
|
||||||
|
Без этого модель легко даёт хорошее объяснение, но не доводит задачу до зелёного результата.
|
||||||
|
|
||||||
|
## Что Sonnet 4.6 может делать лучше меня
|
||||||
|
|
||||||
|
### 1. Быстрый широкий синтез
|
||||||
|
|
||||||
|
Sonnet часто хорошо работает на старте, когда нужно быстро:
|
||||||
|
|
||||||
|
- разложить проблему по подсистемам
|
||||||
|
- набросать несколько гипотез
|
||||||
|
- предложить архитектурные альтернативы
|
||||||
|
- собрать большой черновик текста
|
||||||
|
|
||||||
|
### 2. High-level проектирование и brainstorming
|
||||||
|
|
||||||
|
На задачах вида:
|
||||||
|
|
||||||
|
- "какую архитектуру выбрать"
|
||||||
|
- "какие trade-off у подходов"
|
||||||
|
- "как разложить крупный рефактор"
|
||||||
|
|
||||||
|
он может давать очень сильный первый проход.
|
||||||
|
|
||||||
|
### 3. Большие гладкие черновики
|
||||||
|
|
||||||
|
Для первых версий:
|
||||||
|
|
||||||
|
- design-doc
|
||||||
|
- proposal
|
||||||
|
- API draft
|
||||||
|
- architecture summary
|
||||||
|
|
||||||
|
Sonnet нередко удобен именно скоростью и связностью первой версии.
|
||||||
|
|
||||||
|
## Что оказалось важнее в этом кейсе
|
||||||
|
|
||||||
|
В этом расследовании решающим было не качество первого explanation, а жёсткость процесса:
|
||||||
|
|
||||||
|
- не верить первому найденному root cause
|
||||||
|
- валидировать каждый шаг через cluster state
|
||||||
|
- считать fix завершённым только после `PASS=5/5`
|
||||||
|
- вносить изменения в код/манифесты, а не лечить кластер временными patch-командами
|
||||||
|
|
||||||
|
## Итоговая формулировка
|
||||||
|
|
||||||
|
Корректно говорить так:
|
||||||
|
|
||||||
|
- Sonnet может быть сильнее в широком синтезе, brainstorming, архитектурных черновиках и быстрых первых гипотезах
|
||||||
|
- в этом конкретном кейсе я оказался сильнее в последовательной инструментальной диагностике, удержании нескольких меняющихся симптомов и доведении расследования до рабочего e2e результата
|
||||||
|
|
||||||
|
То есть различие проявилось не в "умнее/глупее", а в типе задачи.
|
||||||
Reference in New Issue
Block a user