f07ff7a9d6
Задача 7 куска 5. 🔴 Зачем это нужно, хотя ждущий никому не мешает: ожидание ответа предел часов НЕ ест (решение владельца 56) — и ровно поэтому вечное ожидание опасно. Спросивший и не дождавшийся не гаснет ни по пределу часов, ни по молчанию (признаки жизни у него идут, он исправно отчитывается о себе). Он висел бы, занимая место в потолке работников, пока кто-нибудь не заметит его рукой. · срок считается НЕЗАВИСИМО от того, ждёт работник или идёт дальше «в расчёте на ответ» (решение 53): вопрос без ответа сутки означает, что он всё это время работает вслепую; · из нескольких просроченных берётся САМЫЙ РАННИЙ — он дольше держит работника, и с него началось ожидание. Возьми мы последний, причина в утренней бумаге назвала бы не тот вопрос; · 🟢 ночной вопрос начинает отсчёт с ближайшего утра — это уже умело правило `deadlineHit`: спрашивать среди ночи и через сутки гасить за то, что владелец спал, значит наказывать его за сон; · 🔴 СТАРШИНСТВО ДВУХ ПРИЧИН НАЗВАНО ВСЛУХ: приговор пределов старше просрочки — пределы про место, деньги и часы, а просрочка про то, что ответа всё нет. Совпади они в одну минуту, владелец прочитает ту причину, которая дороже; · 🪤 своей ветки гашения НЕ заводится: приговор дописывается в тот же `verdict`, дальше одна дорога. Второй гаситель на то же дело разъехался бы с первым молча. 🔴 СВОЯ ОШИБКА, ПОЙМАННАЯ СВОЕЙ ЖЕ ПРОВЕРКОЙ НА СВЕЖЕМ ВОПРОСЕ: `deadlineHit` отдаёт ОБЪЕКТ `{hit, from, reason}`, а не «да/нет». Я проверял его на истинность — а объект истинен ВСЕГДА, и правило гасило бы каждого, кто задал хоть один вопрос, через мгновение после вопроса. Красное поймало сразу; проверка «свежий вопрос срока не переступил» стоила ровно трёх строк и окупилась в первый же прогон. 🟢 И чужой сторож потребовал своё: настройка `owner_answer_deadline_hours` добавлена в образец `night.config.example.json` — правило «в образце есть каждая настройка, которую код берёт из cfg». Умолчание 24 ч; о том, что срок взят умолчанием, владелец узнаёт СТРОКОЙ в сводке (один раз за прогон), а не молчанием. Прогон: 3015 проверок в 114 файлах, код 0 — ровно предсказанное (было 3009, +6 моих). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
43 lines
1.2 KiB
JSON
43 lines
1.2 KiB
JSON
{
|
|
"worker_hours_limit": 24,
|
|
"service_wait_hours": 2,
|
|
"supervisor_tick_seconds": 30,
|
|
"stall_minutes": 30,
|
|
"minut_bez_dela": 240,
|
|
"odinakovyh_otchyotov_podryad": 5,
|
|
"pause_wait_minutes": 20,
|
|
"owner_answer_deadline_hours": 24,
|
|
"max_tasks_at_once": 1,
|
|
"max_workers_per_task": 7,
|
|
"workspace_max_age_days": 7,
|
|
"base_branch": "feat/noch-proba-1",
|
|
"worker_model": "opus",
|
|
"rate_limit_type": "seven_day",
|
|
"bez_doli_ne_zapuskat": false,
|
|
"run_share": 0.14285714285714285,
|
|
"start_floor_share": 0.99,
|
|
"probe_model": "haiku",
|
|
"probe_budget_per_shift": 30,
|
|
"probe_budget_window_hours": 24,
|
|
"spawn_budget_per_shift": 20,
|
|
"item_tests_timeout_minutes": 10,
|
|
"disk_free_min_gb": 5,
|
|
"disk_bad_probes": 2,
|
|
"reviewer_urls": [
|
|
"http://localhost:8000/deals",
|
|
"http://localhost:8000/clients"
|
|
],
|
|
"reviewer_limit_minutes": 60,
|
|
"reviewer_shot_run_timeout_ms": 120000,
|
|
"reviewer_shot_width": 1280,
|
|
"reviewer_shot_height": 900,
|
|
"mail": {
|
|
"host": "SMTP-хост",
|
|
"port": 587,
|
|
"user": "логин",
|
|
"pass": "пароль — сюда, файл вне хранилища кода",
|
|
"from": "robot@liderra.ru",
|
|
"to": "почта владельца"
|
|
}
|
|
}
|