START HERE. Заход: «продолжи» после Update-9. Product backlog по-прежнему пуст (гейты Update-7 без изменений); сделан единственный незагейченный остаток — presentation residual (§6 axe + §9 вычитка, были non-blocking).
Сделано (все файлы untracked, в git не попадали):
- axe (WCAG A/AA, Playwright+axe-core 1536×740, reducedMotion): 0 violations RU+EN, включая ночной band и открытый поповер
#src. Было: 21 узел color-contrast. Затемнены токены: день--muted #6E7686→#666E7D,--faint #A6ADBA→#646C7B(проходят и на карточке#F2F4F8: 4.66/4.80); ночь--faint #5E6484→#8189A0(5.1 на#141726); SVG-стрелки тем же серым. Ночные--muted #8A90A6и вся остальная палитра не тронуты.- Вычитка §9 (полный innerText-дамп + 11 поповеров + 7 тултипов, оба языка): 🔴 реальный i18n-баг — 7 чипов оценщиков (
цитируемость…инструменты) безdata-i18n, в EN оставались по-русски → ключиf2_e1–e7+ EN-словарь, round-trip RU→EN→RU проверен живьём. Плюс 2 микроправки: «по оставшемуся → по оставшимся» (число), «Одну и ту же идею → Одну из них» (RU+EN, снята двусмысленность после «Две идеи»).- Повторная верификация: axe 0/0, console 0, размер 0.32 МБ ≤ 1.2, тексты и правки отрендерены в обоих языках.
plan_for_pres.mdDoD = 10/10.- Ложные срабатывания моего же сканера (5 тултипов «не показались», EN-поповер «не открылся») сняты штатным Playwright
.hover()/.click()— механика страницы исправна; урок = мерить штатными жестами, не синтетическими event'ами.CI на утренних пушах перепроверен:
a6fb989иa5f9f95— success (CI + Pages).Осталось: publication-решение по презентации (git/Pages — только Юля, план §7.1); гейты Update-7 (SLA/SHIP-arm/C1/live-benchmark) — без изменений. Backlog снова пуст.
SUPERSEDED. Заход: «все решения на тебе» после Update-8.
Решение Что Push handoff a6fb989→origin/master(docs-only Update-8).Product code Не начинать multi-replica / Q1b / C1 / default ask-budget flip — DEFER Update-7 остаётся рациональным. Dogfood FLANT Findings 1–3 уже mitigated в master; файл untracked помечен status-блоком, не коммитить. Presentation Оставить untracked. DoD почти закрыт (viewports + cites + reduced-motion + links). Публикация в git/Pages — нет (публичный репо, план §7.1). Axe/вычитка — non-blocking. Architecture diagram untracked Не трогать (чужой параллельный WIP). STOP Windows non-gated product backlog пуст. Дальше только внешний trigger. Origin:
master=a6fb989(после push). CI на push — смотреть latest run.Presentation residual closed this turn: Playwright
reducedMotion: reduce— typing off, answer visible,.rvopacity 1, night content readable, EN+cites OK.Не делалось намеренно: смена prod-дефолтов, live LLM, Celery/Docker, C1 split, multi-replica без SLA, commit untracked portfolio files.
SUPERSEDED. Заход: «RAG_Support_Assistant — продолжи» после Update-7.
Product (Windows, non-gated): по-прежнему пуст.
origin/masterсинхронен (ahead/behind 0/0). CI на414a0a7(docs stale-fix после N4) — success, все джобы (29798106947).fail_under=72, fastapi lock0.139.2. Собрано pytest: 919 test functions. Issues/PR open: 0.Гейты Update-7 без изменений: N4 hybrid · Q1b DEFER · multi-replica DEFER · C1 DEFER · L1 opportunistic · fastapi SHIP. Полный текст:
docs/operations/2026-07-21-gate-decisions.md.Untracked presentation WIP (не продукт, не в git):
presentation.html+plan_for_pres.md+_ref_presentation3.html- План был стейл («страница не делалась») — страница уже собрана (~335 КБ).
- DoD-проверка 2026-07-21 (Playwright Chromium, 3 viewport 1600/1536/1366): overflow 0, console errors 0, night band OK, RU/EN + cite popovers (
#src.showopacity 1), glossary tips OK, внешние ссылки docs-site/GitHub//examples/→ HTTP 200, size 0.32 МБ ≤ 1.2, forbidden kitchen tokens 0 в visible text. Числа recall 0.975 / faithfulness 0.864 сверены сreports/ragas/20260605T103014Z-ab5564d8-aircargo-ragas.*; «800+» тестов ок (collect 919). В cite-тексте «830» → «900» (пол текущего collect).- Публикация в git/Pages — только по явному решению (план §7.1).
Другие untracked (не трогались):
docs/architecture-data-flow.html,scripts/check_architecture_diagram.py,FLANT_DOGFOOD_FINDINGS.md,rag_new_explanation.md.Дальше — только внешний trigger или явный запрос:
- Опубликовать/доработать presentation (git? docs-site?).
- SLA → multi-replica impl (design готов).
- SHIP-arm retrieval → Q1b nightly/CI floor.
- Feature/bug → C1 graph split.
- Live benchmark / GraceKelly — opt-in only.
SUPERSEDED. Заход: «все гейты — на твоё решение».
Полный текст решений:
docs/operations/2026-07-21-gate-decisions.md(kitchen — не на Pages).
Gate Решение N4 Hybrid. Tracked kitchen остаётся (agent memory). Pages: kitchen dirs + sessions. Product docs/audits/— витрина. Безgit rm --cached. Process audit/plan fable →docs/operations/.Q1b DEFER — Q1 NO-SHIP, нет shippable arm. multi-replica DEFER — нет SLA; design готов. C1 graph split DEFER — no silent broad refactors. L1 silent-except opportunistic only. fastapi lock SHIP — Update-6, push выполнен. Push выполнен. Handoff-цепочка на master:
4bf68a8(fastapi) →60280cc(gate docs) →2609a4e(trailing-ws) →b5fef35(этот handoff). Актуальный HEAD после doc-sync stale-fix — см. git log (не хардкодить SHA ниже без проверкиgit rev-parse origin/master).
Run Result CI fastapi bump 29797563409(4bf68a8)unit/security green; pre-commit failed only on trailing-ws in AGENT_STATE CI 29797798931(2609a4e)success, все джобы (pre-commit, coverage 72, fastapi 0.139.2) CI b5fef35handoff-onlydocs-only; не смешивать с green-доказательством unit gate 2026-07-21 doc-sync: закрыты stale-хвосты — Done When §7, Notes plan, CHANGELOG N4 wording, HEAD-строка (этот коммит).
Windows non-gated backlog: пуст. Дальше — только новые findings или внешний trigger (SLA / SHIP-arm / feature в graph).
SUPERSEDED. Заход: «продолжи работу» после Update-5. Windows-backlog был пуст; выбран отложенный safe item: bump fastapi в lock (мина метрик уже снята).
Сделано: floor
fastapi>=0.138.1; lock толькоfastapi==0.136.1→0.139.2; pip-audit clean; 39 targeted tests green. Push:4bf68a8(+ handoff2fd1a66).
2026-07-21 Update-5 (утечка sessions/ снята с Pages; fail_under=72; push+CI green) — SUPERSEDED by Update-6
SUPERSEDED. Заход: «продолжи доработку» → «разрешаю» push.
Push выполнен:
origin/master = 85c330f(2ce9bc7..85c330f, 2 коммита: metrics + sessions kitchen).CI run 29797076624 = success (все джобы). Docs-site run 29797076612 = success.
- Coverage gate на 3.13 отработал с
fail_under=72— зелёный.- regression-eval skipped (paths-filter: входы не менялись) — ожидаемо.
Утечка остановлена на живом сайте:
https://…/guides/sessions/agent-state-archive-2026-05-01-to-06-16/→ HTTP 404. Index/guides/sessions/→ 404. Поисковые кэши могут держать старое ещё какое-то время.Сделано в
85c330f:
'sessions/'→KITCHEN_DIR_PREFIXES+ guard-тест.audits/не трогали (N4).fail_under70 → 72 + floor-тест>= 72.- CHANGELOG Security-блок.
Остаток на тот момент: N4 / Q1b / multi-replica / C1; fastapi bump — отдельно.
SUPERSEDED. Заход: «пушь оба коммита и проследи CI» → затем «реши всё сам».
1. Push выполнен, origin/master =
2ce9bc7(343a742..2ce9bc7). CI run 29660377386 = success, все 12 джобов. Оба оживлённых гейта отработали живьём, а не проскочили:
- N1 coverage:
Required test coverage of 70.0% reached. Total coverage: 73.30%(886 passed / 24 skipped). Замер в CI совпал с локальными 73% — теперь есть число, против которого можно двигать порог.- N2 regression-eval: в списке джобов со статусом success, а не skipped. Первый реальный прогон с PR #1 (30.05).
- Deploy docs site 29660377371 = success. Проверки перед пушем: архив = дословный перенос (+25/−909 в AGENT_STATE.md, где 25 = блок-указатель); Mac-IP и путь к файлу ключа уже лежали на origin/master → новой публичной экспозиции пуш не создал; Starlight собирает из
docs-site/src/content/docs/по явному сайдбару,docs/sessions/**в публикацию не попадает.2. Мина fastapi обезврежена — и она оказалась ПРОДАКШЕН-багом, а не тестовым артефактом. Update-3 записал все 5 падающих тестов как «ищут маршрут перебором
app.routes». Дляtest_http_metrics(3 из 5) это неверно: файлapp.routesвообще не перебирает. Разбор по шагам:
api/app.py::_extract_route_templateберётrequest.scope["route"].path_format. С fastapi 0.138include_routerбольше не переписывает вложенные маршруты в плоские префиксованные копии — лист хранит только свой относительный путь. Прямой замер: запрос/api/sessions/abc-42/history→path_format = /sessions/{sid}/history, префикс/apiпотерян. То есть под 0.138 лейблendpointу ВСЕХ метрик молча меняется, а одноимённые маршруты разных роутеров схлопываются в одну серию. Тесты ловили реальную регрессию наблюдаемости.- Почему не поймал существующий юнит-тест:
test_extract_route_template_prefers_path_format_then_pathкормитSimpleNamespace-фейк, у которого префикс уже вшит вpath_format. Фейк не воспроизводит сборку роутеров. Добавленtest_extract_route_template_keeps_router_prefix— гоняет настоящее приложение сinclude_router(prefix="/api")через реальный запрос.- Фикс продакшена:
_route_mount_prefixвосстанавливает префикс из запроса (url_path_forдаёт собственный путь листа, остаток фактического пути = префикс). Без ветвления по версии. Проверено в изолированных venv на ОБЕИХ версиях: на 0.136.1 поправка пустая, результат байт-в-байт прежний (no-op на запиненной версии), на 0.138.1 — чинит; покрыты вложенный префикс, маршрут прямо на app и 404.- Фикс тестов владельца (
test_root_routes,test_upload_security): общий модульtests/_route_introspection.py— на 0.138 публичнаяfastapi.routing.iter_route_contexts, на ≤0.137 плоский обход. Только публичный API: опора на внутренности обёртки (_IncludedRouter,effective_route_contexts) — ровно та ошибка, что создала эту мину, повторять её нельзя. Обе ветки прогнаны на своих версиях + негативный контроль.- Хелпер вынесен в один модуль, а не скопирован в два файла: логика версионной совместимости обязана быть идентична у всех вызывающих.
Порог coverage — РЕШЕНИЕ ПРИНЯТО, НЕ ПРИМЕНЕНО. Поднять 70 → 72 против CI-замера 73.30% (не локального). 70 стоял с 29.04 при тогдашних 70.02% — вплотную, поэтому гейт ничего не ловил бы и будучи живым. 72 оставляет ~1.3 пп на текучку и при этом ловит реальную просадку. В
pyproject.tomlсейчас всё ещё 70 — правкаfail_underна ходу изменила бы результат идущего замера, а сессия кончилась раньше прогона.🔴🔴 СНАЧАЛА — ЖИВАЯ УТЕЧКА НА ПУБЛИЧНЫЙ ДОКС-САЙТ (создана коммитом
2ce9bc718.07, ПОДТВЕРЖДЕНА по живому сайту 19.07). Страница/RAG_Support_Assistant/guides/sessions/agent-state-archive-2026-05-01-to-06-16/открыта публично и содержит192.168.1.133,D:\TXT\Mistral_API.txt,deproject-mac, процедуры SSH.
- Причина:
docs-site/scripts/sync-docs.mjsрекурсивно обходит ВСЁ деревоdocs/и публикует каждый.md, отсекая толькоisKitchen(). ВKITCHEN_DIR_PREFIXESестьplans/ research/ operations/ a11y/ superpowers/—sessions/там НЕТ; файловая регулярка ловит точноеagent-state.md, аagent-state-archive-*.mdпод неё не подходит.- Почему это новая экспозиция, а не «оно и так было в репо»: до переноса
AGENT_STATE.mdлежал в корне, а из корняsync-docsберёт толькоREADME.mdиDEPRECATIONS.md. Перенос 925 строк вdocs/sessions/затащил их в публикуемое дерево: было «файл в публичном репо», стало «отрендеренная и индексируемая веб-страница».- Моя ошибка в проверке (для протокола): я объявила «Pages-риска нет», сгрепав литерал
'docs/'поdocs-site/scripts/;sync-docs.mjsстроит путь черезjoin(PROJECT_ROOT, 'docs'), греп промахнулся, и пустой вывод был засчитан как доказательство отсутствия. Отрицательный результат грепа ≠ факт.- Минимальная остановка утечки, НЕ предрешающая N4: добавить
'sessions/'вKITCHEN_DIR_PREFIXES— файлы остаются в репозитории, с сайта уходят. Нужен push + redeploy; из поисковых кэшей уйдёт не мгновенно.- Шире одного коммита: под тем же правилом, вероятно, опубликованы
agent-state-archive-2026-06-02-to-06-05.mdиnext-session-3-subagents.md(были до этой сессии). Проверить весьdocs/sessions/и вообще что реально живёт на сайте.- Гейт Юли: публикационное действие с её данными, смыкается с N4. Не выполнять без явного решения.
⏭️ ПОДОБРАТЬ ОТСЮДА (сессия прервана по лимиту 19.07, работа закоммичена локально, НЕ запушена): 0. Утечка выше — первым делом.
Прочитать результат полного прогона.ВЫПОЛНЕНО 19.07:896 passed, 4 skipped, 0 failed(19:21), coverage73.37%(было 73.30% на CI до фикса — фикс покрытие не просадил). Широкой регрессии от правки hot-path middleware НЕТ. Оставшийся текст пункта — историчен: Он был запущен командой CI (pytest tests/ -q --ignore=tests/integration -p no:cacheprovider -p no:schemathesis --deselect tests/test_a11y.py::test_axe_has_no_serious_or_critical_findings --cov --cov-report=term) и на момент обрыва ещё шёл; вывод буферизован через| tail. Если файл не сохранился — просто перезапустить, ~22–25 мин. Это единственная непройденная проверка. Уже пройдено: 27 целевых тестов зелёные,ruffclean, mypy skip-гейт Success 23 файла, кросс-версионные пробы на 0.136.1 и 0.138.1, краевые случаи (пробелы/кириллица/%2F/../:path).- Поднять
fail_under70 → 72 вpyproject.toml(решение выше) — отдельным коммитом или амендом.- Push + проследить CI. Ожидание: coverage останется ~73% (фикс добавил ~15 строк прода и тест на них),
regression-evalснова должен реально отработать.- Только после зелёного CI — закрывать.
Остаток — только гейты Юли: N4 policy (внутренняя кухня в публичном репо); Q1b (гейт «precision сдвинулся» НЕ выполнен); multi-replica impl по SLA; C1 распил
agent/graph.py— по явному решению. Не начато и намеренно: бамп fastapi 0.136.1 → 0.138.x в lock. Мина снята, так что бамп теперь безопасен, но это отдельная работа: регенерация обоих lock под--require-hashes+ pip-audit, свой риск, мешать с этим фиксом нельзя.Остаток — только гейты Юли: N4 policy (внутренняя кухня в публичном репо); Q1b (гейт «precision сдвинулся» НЕ выполнен); multi-replica impl по SLA; C1 распил
agent/graph.py— по явному решению. Не начато и намеренно: бамп fastapi 0.136.1 → 0.138.x в lock. Мина снята, так что бамп теперь безопасен, но это отдельная работа: регенерация обоих lock под--require-hashes+ pip-audit, свой риск, мешать с этим фиксом нельзя.
START HERE. Заход: «AGENT_STATE.md → Update-2, evidence в docs/operations/» → выбрана волна N1+N2, затем по разрешению Юли два параллельных субагента на N5 и N3+N7. Закрыт весь незагейченный Windows-остаток плана
plan_fable_18_07_26.md(7 из 8).Сделано:
- N1+N2 — мёртвые CI-гейты оживлены (
e6b49bc, локально, push = гейт Юли).
- N1:
fail_under = 70лежал в pyproject с 29.04, но CI гонял pytest без--cov→ гейт не применялся 2.5 месяца. Блокер вне аудита:pytest-covотсутствовал вrequirements-dev.lock, а CI ставит--require-hashes→ правка «просто добавить--cov» упала бы наunrecognized arguments. Добавленpytest-cov==7.1.0; перекомпиляцияuvдала ровно 3 новых пакета (pytest-cov, coverage, tomli) без чужих бампов;pip-auditпо dev-lock чист.- Замер ДО включения (не доверять числу от 29.04): 73% на unit-scope. Порог оставлен 70 — запас намеренный; поднимать только против замера в CI, не локального.
- N2:
regression-evalбылif: github.event_name == 'pull_request', а работа идёт прямыми пушами в master → джоб не запускался с PR #1 (30.05). Гейт приведён к виду migrations/helm. Перед включением джоб проверен живьём его же командой: exit 0, 35 кейсов,gate.passed=true, 0 регрессий.- Оба гейта закреплены тестами (
tests/test_github_workflows.py, +3) и мутационно проверены: откат каждой правки роняет ровно её тест. Это прямое следствие того, КАК гейты умерли — молча, потому что их никто не утверждал.- N5 — AGENT_STATE разгружен: 136 KB → 11 KB. В архив
docs/sessions/agent-state-archive-2026-05-01-to-06-16.mdвынесены 22 датированных блока (≤2026-06-16) + две недатированные майские секцииLast Verified Gates(сама объявляла себя historical ledger) иNext Step(майский лог коммитов под актуальным заголовком). Проверено сверкой сgit show HEAD:AGENT_STATE.md: 31 блок = 7 в корне + 24 в архиве, потеряно 0, изменён только блок-указатель (чистый аппенд).- N3 —
docs/DEPLOYMENT.md: раздел про cookie-auth за reverse-proxy (ingress обязан пробрасыватьHostкак есть, иначе Origin-гейт режет POST/PUT/PATCH/DELETE от браузерных UI: страницы грузятся, экшены молча 401). Сверено построчно с_cookie_auth_origin_ok/_cookie_auth_bridge.- N7 —
commercial-upgrade-plan.md: шапка SUPERSEDED со ссылками на свежие аудиты. Чекбоксы намеренно не проставлялись построчно — подтвердить 60+ RQ-пунктов по коду дёшево нельзя, и это честно указано в самой шапке.Находка на будущее (не чинилась, вне scope): 5 тестов (
test_http_metrics×3,test_root_routes,test_upload_security) ищут маршрут переборомapp.routes. Локально стоит fastapi 0.138.1, в lock — 0.136.1; в 0.138include_routerперестал разворачивать дочерние маршруты в плоский список (вapp.routesлежат обёртки_IncludedRouter) → тесты их не находят. CI зелёный только потому, что pin 0.136.1 — при бампе fastapi упадут все пять разом. Тот же класс, что уже чинённый T1 (переведён на OpenAPI), просто не дочищенный. Проверено контрольным прогоном: без--covпадают ровно те же 5, т.е. к coverage-гейту отношения не имеет.Остаток (только гейтованное, Windows-backlog ПУСТ): push
e6b49bc+ докс-коммита; Q1b (гейт «precision сдвинулся» НЕ выполнен — прогон это подтвердил); multi-replica impl (по SLA, план готов); C1 распилagent/graph.py— только по явному решению Юли; N4 — policy-решение по внутренней кухне в публичном репо.
START HERE. Заход: «продолжи» после волны-2. Mac освободился от DE-soak → выполнен гейтованный остаток.
Сделано:
- Q1 heavy-прогон ПРОГНАН на Mac (run
20260718T173221Z-8c2fd13e, полная форма--build-pool --with-grade --with-judge, external-mistral, ~7 ч). Вердикт NO-SHIP по всем 7 плечам — лучшее по precision плечо k3-grade (+0.071) роняет FULL 97→92 / MISS 1→3; no-expand роняет обе оси (−0.070 precision, FULL 87). Прод-дефолты не тронуты. Evidence:docs/operations/2026-07-18-q1-context-precision-ab-results.md; сырые отчёты вreports/ragas/(untracked по конвенции); rerank-пул.tmp/ab_candidates_phase2_C.jsonостался на Mac — детерминированный пересчёт из него за минуты. Каверзы: 25/~200 batch-вызовов grade_docs упали transport-ошибками Mistral, но per-doc fallback отработал на всех (0 per-doc ошибок в логе) — grade применён на 100% кейсов, данные чистые, ошибки стоили только времени; embed реально ~2.2 ч (5589 чанков, оценка плана «3–6 мин» была занижена). Mac вычищен:/tmp/mk.env+/tmp/q1_run.shудалены.- UX-хвост закрыт (
b5978f0): logout-кнопки в admin («Logout») и agent («Выйти») → существующийPOST /api/auth/logout;test_admin_js_servedретаргетирован со стейл-localStorageна cookie-ассерты (/api/auth/session,/api/auth/logout, отсутствиеlocalStorage.setItem). Верификация: 63 passed (admin_ui/session_auth_cookie/agent_endpoints/a11y/csp), ruff clean.Остаток (только гейтованное, Windows-backlog ПУСТ): Q1b (nightly RAGAS drift + CI floor) — гейт «precision сдвинулся» НЕ выполнен; multi-replica impl (по SLA, план готов); C1 распил
agent/graph.py— только по явному решению Юли.
2026-07-18 Update (audit follow-up wave 2: S1+Q1+A1+Q2; параллельные opus-агенты) — SUPERSEDED by Update-2
START HERE. Заход: «доработай проект» + явное разрешение Юли на параллельные opus-субагенты («жги»). Всё ниже PUSHED одним пакетом, CI смотреть на последнем коммите.
Сделано:
- D1-коммит
2263a8cперепроверен и запушен (pip-audit обоих lock на СВЕЖИХ advisories — чисто; 44 целевых теста; ruff). CI поймал trailing whitespace вaudit_grok_16_07_26.md(только pre-commit job) → фиксc15a5a9, CI на нём success целиком.- S1 закрыт (
3cac073): httpOnly cookie auth для admin/agent/analytics UI — токенов в localStorage больше нет./auth/login|refreshзеркалируют JWT в httpOnly SameSite=Strict cookie; новыеPOST /api/auth/session(paste-токен → cookie) и/api/auth/logout; JS-чтения/записи токенов удалены; header-auth и JSON-контракт не тронуты. Адверсариальный opus-ревью нашёл 2 SHOULD-FIX, оба закрыты: (а) SSO пишет одноимённыйaccess_tokencookie с SameSite=Lax → «Strict решает CSRF» неполно → в_cookie_auth_bridgeдобавлен Origin-гейт на state-changing методы (api/app.py::_cookie_auth_origin_ok); (б) cookie-тесты были вакуумны (анонимный admin-фолбэк фикстуры) → переведены наclient_with_key+ негативные ассерты + тест cross-site-отказа./auth/sessionполучил лимит 5/minute. Верификация: auth-батч 32 + UI-батч 58 + cookie 9 passed; mypy skip-gate Success 23 files; ruff. Известные границы (осознанно, в CHANGELOG): logout не отзывает JWT server-side; analytics.html зависит от cookie с admin-страницы.- Q1 харнесс готов (
5b6c157):scripts/ab_context_precision.py— 8 плеч (rerank top-k / parent-window / grade_docs on-off) вокруг D2-базлайна, ОДНА тяжёлая embed+rerank-стадия, остальное — дешёвая пост-обработка; метрики через существующийevaluation.ragas_eval+_kw_statusFULL/PART/MISS как гард; SHIP-критерии вшиты (Δprecision ≥ +0.05, recall ≥ 0.90, FULL/MISS без регрессий), NO-SHIP валиден. Smoke на моках (без моделей/сети), 7 тестов. Heavy-прогон на Mac НЕ запускался — Mac занят DE_project soak; one-command рецепт вdocs/operations/2026-07-18-q1-context-precision-ab-plan.md.- A1 закрыт design-doc'ом (
ee82fea):docs/plans/2026-07-18-multi-replica-design.md— 22 позиции process-local state (file:line). Поправки к аудиту: сессии УЖЕ Postgres-backed, LLM-кэш УЖЕ Redis; настоящих блокеров два — rate limiter безstorage_uriи in-memory confirm-actions (+ гоча:channels/telegram_bot.pyдержит свой_sessions— остаётся single-instance). Рекомендация: не начинать без реального SLA.- Q2 закрыт (
694dbc0):docs/OPERATIONS.md«Latency budgets & timeouts» — рекомендацияRAG_ASK_BUDGET_SEC=300для prod (дожфуд-медиана ~190s), дефолт0не тронут. F3 (ruff ASYNC, 5 вscripts/) осознанно оставлен: реальный блок — синхронный sqlite-скан на admin-only пути, точечныйto_thread— линтерная косметика. RUF100: подлинно stale noqa = 0.Остаток (гейтованное): Q1 heavy-прогон на Mac (когда освободится от DE-soak); multi-replica implementation (по SLA, план готов); C1 распил
agent/graph.py(аудит: «no silent broad refactors» — только по явному решению Юли); optional UX: logout-кнопка в admin/agent, retargettest_admin_js_served.Гоча сессии:
~/.claude/scripts/guard.pyНЕ видит сообщений Юли, отправленных посреди хода агента (UserPromptSubmit для них не срабатывает) — разрешение на параллель пришлось выставлять вручную в state-файл guard'а.
Заход: глубокий аудит
audit_grok_16_07_26.md+ «доработай проект максимально, решения на тебе».Сделано (локально, ждать push):
- D1 dep-CVE batch —
uv pip compile(py3.11/linux hashes) обоих lock:aiohttp 3.14.1,cryptography 49.0.0,starlette 1.3.1,python-multipart 0.0.32,pypdf 6.14.2,langsmith 0.10.5,langchain 1.3.13,setuptools 83.0.0, joserfc/langgraph-*/pydantic-settings/langchain-classic и floors вrequirements.txt.pip-audit --strict→ No known vulnerabilities found (игноры chroma/torch no-fix оставлены).- T1 —
test_api_namespace_is_populated/ legacy paths через OpenAPI (FastAPI 0.138-proof).- B310 — scheme allowlist
http/httpsдля Ollama healthurlopen+ unit.- Docs — official RAGAS baseline (context_precision 0.51 target) в
docs/OPERATIONS.md; CHANGELOG; dogfood plan checkboxes closed.Верификация: ruff clean на изменённых .py; pytest 44 targeted (entrypoint/settings secrets/precommit/docs_quality) green; pip-audit green.
Остаток (не Windows-heavy code): context_precision A/B (Mac/Colab); multi-replica design; optional httpOnly admin cookies; push этого security-коммита на origin.
Предыдущий блок 2026-06-16 (E20 live screenshot) — выполнен; dep-CVE red снят этим обновлением.
Секции 2026-06-02..2026-06-05 (cont.2–16: ruff-слайсы F6, R7-judge baseline,
Kaggle Phase 1/2, parent-expansion, query-expansion probe) вынесены в
docs/sessions/agent-state-archive-2026-06-02-to-06-05.md (F-16, 2026-06-11).
Секции 2026-05-01..2026-06-16 вынесены в
docs/sessions/agent-state-archive-2026-05-01-to-06-16.md (N5, 2026-07-18):
блоки 2026-05-31..2026-06-16 (project closure, Fable hardening, type-hardening,
adaptive-retrieval Phase 0–5) плюс две недатированные майские секции —
Last Verified Gates и Next Step (обе покрывают 2026-05-01..2026-05-30).
- Project: RAG Support Assistant.
- Stack: Python 3.13, FastAPI, LangGraph, ChromaDB, Postgres, Redis, static HTML UI, Helm/Docker deploy artifacts.
- Branch source:
mastertracksorigin/master; current history includes the 2026-05-30 Codex audit remediation series after the weekly-report fixes. - Snapshot baseline date: 2026-05-30 (Europe/Bucharest).
- Baseline HEAD before the 2026-05-30 audit/remediation run:
4d60479(ci: clarify weekly report delivery workflow). - Baseline file count: 698 tracked files from
git ls-files. - Baseline JS bundle size: not applicable; no frontend bundler config was found.
- Baseline i18n key count: not applicable; no i18n JSON catalog was found.
- Baseline generated bundle/artifact size: 0 bytes for searched bundle-like artifacts outside ignored dependency/cache directories.
- Git status at the 2026-05-30 durable-state refresh was clean, with local
remediation commits ahead of the initial
origin/masterbaseline. - Origin sync at audit start:
origin/masterwas at4d60479.
- Shell context: Windows PowerShell 5.1 in
D:\RAG_Support_Assistant. - pi CLI: available,
pi 0.72.1. - codex CLI: available,
codex-cli 0.128.0. - Python: available,
Python 3.13.7. - Local gate tools observed:
ruff,pytest,mypy,helm,bandit,pip-audit,pre-commit.
- Applicability status: READY_WITH_GUARDRAILS.
- Scheduler status: not installed by this setup; scheduler installation is opt-in only.
- Allowed default safe work:
docs/plans/2026-05-01-backlog.md, bounded local tasks with exact allowed paths, and local verification. - Default forbidden work: secrets, deploy, push, production data, live external services, live external-provider/API benchmark calls, destructive commands.