@@ -624,7 +624,47 @@ storage, state, file-history) и умирает БЕЗ dispose (process.exit); r
624624
625625### Новые тесты (6), сьют вырос до 271/271 — test/spec/finalguard.test.mjs
626626
627- ## Найденные и исправленные баги (27 итого)
627+ ## 28-й заход: глубокая перепроверка навигации (+7 тестов, +2 бага)
628+
629+ ### Баг №28: changeToPrevAgent вёл на самого себя (off-by-one стека) + ложное покрытие
630+ Файлы: ` src/client/ClientSwarm.ts ` , ` src/functions/navigate/changeToPrevAgent.ts ` ,
631+ ` test/spec/navigation.test.mjs `
632+ - setAgentName пушит НОВОГО агента → вершина стека всегда текущий агент;
633+ navigationPop возвращал текущего: после A→B→C «prev» пытался перейти на C
634+ (сам в себя) и падал recursion-guard'ом; реальный возврат получался только
635+ со второго вызова, с исключением на первом.
636+ - Оригинальный тест «Will navigate back to prev agent» был ЛОЖНО-зелёным: его
637+ мок навигирует только с triage-агента, второй запрос (sales→refund) ничего
638+ не делал, prev «переходил» в самого себя и ассерт case-ом совпадал.
639+ - Исправление: navigationPop отбрасывает вершину, если она равна активному
640+ агенту, и возвращает следующий элемент (или default); changeToPrevAgent
641+ больше не проверяет recursion-route (возврат назад легитимен и ограничен
642+ глубиной стека), но no-op'ится при возврате в текущего агента. Мок
643+ оригинального теста дополнен веткой sales→refund — теперь проверяет
644+ задуманный флоу.
645+
646+ ### Баг №29: server-side changeToAgent посреди выполнения вешал сессию навсегда
647+ Файл: ` src/client/ClientAgent.ts ` (найден пробой N4)
648+ - changeToAgent диспоузит старый инстанс агента; если его выполнение ещё шло
649+ (медленный getCompletion), будущий вывод терялся: ожидатель complete() и
650+ busy-lock висли навсегда, все последующие сообщения — тоже.
651+ - Исправление: счётчик _ activeExecutions (обёртка queued execute); dispose при
652+ живом выполнении инкрементит _ outputEpoch (поздний результат умирающего
653+ инстанса дропается) и резолвит ожидателя пустым выводом — complete()
654+ возвращает "", busy освобождается, следующее сообщение идёт новому агенту.
655+
656+ ### Новые тесты (7), сьют вырос до 278/278 — test/spec/navprev.test.mjs
657+ - полный обход стека: A→B→C, prev→B, prev→A(default), prev→no-op;
658+ - легитимная ре-навигация A↔B между отдельными сообщениями НЕ гасится;
659+ - параллельные changeToAgent сериализуются (queued per client);
660+ - смена агента посреди медленного выполнения: "" + следующий ответ от нового
661+ агента (регрессия бага №29);
662+ - changeToDefaultAgent после цепочки + prev по стеку;
663+ - навигация без dependsOn работает (warning-контракт);
664+ - navigation stack восстанавливается из persist-адаптера, prev после
665+ пересоздания сессии ведёт назад корректно.
666+
667+ ## Найденные и исправленные баги (29 итого)
628668
629669### 1. Дедлок waitForOutput при functools-kit v4 (причина 39 упавших тестов)
630670Файл: ` src/client/ClientSwarm.ts `
0 commit comments