---
name: investpilot-recalibration-overext
description: КодИнвест рекалибровка 2026-07-23 — анти-перерастяжение шорта; аудит пакета Р1-Р5 полностью закрыт
metadata: 
  node_type: memory
  type: project
  originSessionId: 6f344612-b945-4107-b457-8ad2163cd988
  modified: 2026-07-23T05:30:16.671Z
---

Большое дообучение КодИнвест (2026-07-23, [[investpilot_overview]]) по жалобе
владельца «не даёт дельных рекомендаций» (live PF 1.06, 4 пуша/90д).

**Внедрено** (все с воркфлоу-аналитикой + адверсариальной верификацией):
- **Гейт анти-перерастяжения SHORT** `short_overext_pct=5.0`: не открывать новый
  шорт при close IMOEX ниже max(high за 7 сессий) >5% (шорт вдогонку в
  капитуляцию). Бэктест 2020-26 ALL PF 1.58→1.80, SHORT 2.25→4.02. Окно —
  `macro.DD_WINDOW_DAYS`; провязано в plan/analyzer/replay И в калибровочный
  `scripts/backtest_detail.py` (иначе обвязка мерила НЕ прод-стратегию — это
  был баг, чинил в аудите вместе с забытым там же `short_52w_floor`).
- 3-й скан 14:15 (`scan_hours=10,14,19`); дайджест «💡 Идеи дня»; ежевечерний
  авто-deep_review портфеля 19:45; исторический KB-бэкфилл (3.5к→27к док,
  `scripts/kb_backfill.py`, старые доки → methods_only).
- Дата-фиксы: payload-флаги final_stance/vetoed/no_votes (срезы по confidence
  НЕ делать без сегментации — «инверсия уверенности» оказалась артефактом);
  `outcomes.mae_pct` (MAE для будущих стоп-свипов).
- `gigachat-max` УБРАН из `kb_distill_fallback`: бэкфилл (~20к очередь) при
  нестабильном grok-build каскадил бы на Freemium-квоту боевых voter/challenger.

**НЕ трогали** (аналитика опровергла): пуш-пороги/вето челленджера (вето верно
5/6), стоп-кламп 12% (оверфит на 1 неделю), интрадей (уже off, D33). Анти-отскок
гейт ОТКЛОНЁН навсегда (отскок в медвежьем = лучшая точка входа в шорт).

**Аудит закрыт (доигран тем же днём после сброса лимита).** 3 недостающих
измерения (correctness, safety-boundaries, llm-cost-quota) прогнаны — 5
находок, все исправлены и покрыты regression-тестами (304 pytest):
MAE не обрезался по дню выхода сделки (тянул мусорный хвост после рестарта),
`no_votes_reason` путал «невалидный JSON» с «квота исчерпана», финальный
`edit_text` после deep_review не был защищён от потери сообщения, гонка
`_portfolio_deep_review`/`OutcomeLoop` без барьера синхронизации, и
`gigachat-ultra` (не только `gigachat-max`) убран из `kb_distill_fallback` —
одна анонимная веб-сессия giga.chat не держит конкурентную нагрузку бэкфилла
+ живых голосов. Safety-boundaries: «Claude в цепочках» (`research/notion-opus`)
не нарушение — владелец подтвердил правило «запрещён только СВОЙ Claude/
прямой Anthropic, сторонний провайдер можно», см. [[cebers-pulse-llm-rules]].
См. Obsidian Changelog «доигранный аудит».
