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