WEB-365 · Дефект · — · web
P2 [роли]: C2 boundary-заметки (then-365/now-090) не ретривятся — cites=0 expected_note_retrieved
Закрыт
P2
ведёт: —
Суть
Оба временных boundary-кейса C2 падают на retrieval (заметка с retention-границей не находится). Возможен дрейф фикстур после C2 reseed или временная логика границ. Прогон: M4 /Volumes/M4Ext/ops/paidlegs/web293-full-20260825T151110Z (battery.log, battery-all.json, traces/). Контекст: WEB-293 корень (stale bundle) закрыт, скор 42/50.
Доказательства
📎 Трейл: тот же прогон, C2-boundary-then-365/now-090 cites=0 !expected_note_retrieved (retrieval временных boundary-заметок). Возможен дрейф фикстур после C2 reseed.
[25.08 ~16:48Z] → in_progress: волна web365 на A1 (worktree wt-web365 от a453b16=посадка 55, codex luna xhigh, бриф /home/ubuntu/waves/WEB365-BRIEF.md → отчёт WEB365-REPORT.md, маркер WEB365_DONE). Проверки без платных вызовов (моки), полная батарея — отдельным прогоном на M4.
[25.08 ~17:05Z] → review: волна web365 сдала. Коммит 4e7658b (wt-web365 от a453b16). Три корня: (1) оба якоря timeline = 365дн, а контракт recent = 90дн; (2) buildTemporalFilters считал от текущего МОМЕНТА — заметка now-090T00:00Z выпадала позже в тот же день; (3) merge Then-перед-Now съедал finalK до Now-кандидатов. Фикс: presentStartDaysAgo=90, UTC-календарные границы (истор. включ. до 23:59:59.999Z, recent от 00:00Z), mergeTemporalRetrievalWindows round-robin+dedup. Тесты 43/43 (вкл. 4 новых boundary, no-provider). Отчёт WEB365-REPORT.md. ОГРАНИЧЕНИЯ: tsc не прошёл (нет node_modules в worktree), полная батарея C2 — на M4 после web180. Приёмка: независимая волна accept365 (не автор).
[25.08 ~17:35Z] ПРИЁМКА NOGO (accept365, sol, не автор) → назад в in_progress. Три опровержения: NOGO-1 фикс МЁРТВ для Timeline — оба route зовут enforcement с pilotOnly:true, timeline не pilot-роль → roleTemporal=null, новые buildTemporalFilters/merge не вызываются в runtime; NOGO-2 негативная граница then-366 ПРОХОДИТ (для Then только верхний cutoff <=, нижней границы нет); NOGO-3 латентно: после снятия gate Now-окно наследует исторический endDate=oneYearAgo из vectorFilter → заведомо пусто. Независимый suite /tmp/accept365-independent-tests. Отчёт ACCEPT365-REPORT.md. Ремонт: волна web365b (автор) по фактам приёмщика, затем re-accept.
[25.08 ~17:40Z] → review (второй заход): web365b сдал, коммит 9de4fa8 поверх 4e7658b. NOGO-1: ROLE_POLICY_ENFORCEMENT_TEMPORAL_IDS=[timeline] — timeline входит в pilotOnly-область ТОЛЬКО для temporal-плана (pilot=null, остальные non-pilot роли за старым гейтом); NOGO-2: Then теперь с ОБЕИМИ границами (UTC-день then-365) — then-366 исключается; NOGO-3: temporalSourceFilter строится отдельно, Now не наследует legacy endDate. Три репро-теста PASS. Re-accept: волна reaccept365 (sol) — прогон независимого suite приёмщика + новые классы (утечка pilot-override, чужие роли в temporal-области).
[25.08 ~17:55Z] RE-ПРИЁМКА NOGO (reaccept365) → in_progress. Три ремонта web365b ПОДТВЕРЖДЕНЫ (8/8 у приёмщика), но остались: (1) finalK=1 межоконная relevance из первого NOGO не адресована; (2) chat-global: whole-book summary обходит temporal-фильтр; (3) actions.ts: FULL CONTEXT и document-overview (до RAG) обходят фильтр → активный Timeline не гарантирует dual-window-no-leakage на всех путях. Ремонт: web365c.
[25.08 ~18:20Z] → review (3й заход): web365c, коммит 9e1fb4b. Все 3 остатка reaccept закрыты: (1) mergeTemporalRetrievalWindows читает numeric scores, держит min distinct-source quota, при finalK=1 берёт highest-scoring ИЗ ОБОИХ окон (Then больше не выигрывает «первым»); (2) chat-global входит в Timeline dual-window ДО whole-book summary, undated fresh-fallback отключён при активном Timeline (иначе тихое расширение); (3) actions.ts — fail-closed roleScopedDocs перед Council/overview/FULL CONTEXT, unknown-даты исключены из whole-doc. Нет summary-исключения: все пути уважают Timeline. Re-accept.
[25.08 ~18:40Z] ✅ ПРИЁМКА GO (reaccept36x, sol, не автор): REACCEPT36X_365_GO. Каждый прошлый NOGO-факт закрыт с трассировкой до production route + независимый негатив (не только авторский тест). Готов к посадке 56.
Починено в
web365@9e1fb4b
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-365","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T18:39:53.499Z