From e435289e55b9a60dfb4c3fc905547f4e9776ad56 Mon Sep 17 00:00:00 2001 From: Simbiot Harness Date: Fri, 2 Oct 2026 16:06:02 +0000 Subject: [PATCH] =?UTF-8?q?hour=20=D0=B1=D0=B5=D1=80=D1=91=D1=82=20L-?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20(t-261002170836):=20clas?= =?UTF-8?q?ses=20S,M,L=20+=20=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0=D1=82;=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D1=81=D0=B8=D0=BD=D1=85=D1=80?= =?UTF-8?q?=D0=BE=D0=BD=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- harness/levels.py | 4 ++-- tests/test_task_batch.py | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/harness/levels.py b/harness/levels.py index 1d27874..44de99b 100644 --- a/harness/levels.py +++ b/harness/levels.py @@ -85,9 +85,9 @@ LEVELS = { ), "hour": CycleLevel( name="hour", label="Час · поток", every=HOUR, uses_llm=True, - model="auto", effort="medium", ctx_tokens=512_000, task_classes=("S", "M"), + model="auto", effort="medium", ctx_tokens=512_000, task_classes=("S", "M", "L"), mandate=("Ты — часовой поток харнеса Simbiot. Дайджест часа: что произошло, " - "статусы фоновых задач, батч мелочей (S/M). Консолидируй минутные " + "статусы фоновых задач, батч задач (S/M/L). Консолидируй минутные " "события в выжимку — сырое наверх не поднимай. " "Эскалации от нижних уровней (секция ЭСКАЛАЦИИ в контексте) — твоя " "зона: разберись и закрой cli.py escalation-ack -n \"что сделал\"; " diff --git a/tests/test_task_batch.py b/tests/test_task_batch.py index 69eb585..3a1bba3 100644 --- a/tests/test_task_batch.py +++ b/tests/test_task_batch.py @@ -66,7 +66,7 @@ check("2: порядок — старейшая ПЕРВАЯ", batch[0] == "t-b" mixed = {"t-s": _task("t-s", size="S"), "t-m": _task("t-m", size="M"), "t-l": _task("t-l", size="L")} batch = scheduler.select_task_batch(LEVELS["hour"], _model(mixed)) -check("3: hour берёт S+M, L не его класс", sorted(batch) == ["t-m", "t-s"], str(batch)) +check("3: hour берёт S+M+L (t-261002170836: часовой подъём L)", sorted(batch) == ["t-l", "t-m", "t-s"], str(batch)) check("3: min берёт только S", scheduler.select_task_batch(LEVELS["min"], _model(mixed)) == ["t-s"]) @@ -130,16 +130,16 @@ three_det = {"t-a": _task("t-a", created="2026-09-30T08:00:00"), details="шаги: 1) разбор 2) фикс"), "t-c": _task("t-c", created="2026-09-30T09:00:00")} fake = _model({**three_det, - "t-d": _task("t-d", size="L", created="2026-09-30T10:00:00", - details="L-постановка")}) # t-d — L, не часовой + "t-e": _task("t-e", size="XL", created="2026-09-30T10:00:00", + details="XL-постановка")}) # t-e — XL, не часовой ctx = scheduler.build_context(LEVELS["hour"], fake) -check("8: секция батча есть (3, без L)", "ТЕКУЩАЯ РАБОТА — БАТЧ из 3" in ctx, +check("8: секция батча есть (3, без XL)", "ТЕКУЩАЯ РАБОТА — БАТЧ из 3" in ctx, ctx.split("ДОСКА ЗАДАЧ")[0][-300:]) check("8: все три id в секции", all(t in ctx for t in ("t-a", "t-b", "t-c"))) check("8: постановка (details) в секции", "разбор" in ctx) -check("8: L-постановка НЕ в батче (в доске — можно)", - "L-постановка" not in ctx.split("ДОСКА ЗАДАЧ")[0].split("ТЕКУЩАЯ РАБОТА")[1] - if "ТЕКУЩАЯ РАБОТА" in ctx else True, "t-d в батче") +check("8: XL-постановка НЕ в батче (только day, в доске — можно)", + "XL-постановка" not in ctx.split("ДОСКА ЗАДАЧ")[0].split("ТЕКУЩАЯ РАБОТА")[1] + if "ТЕКУЩАЯ РАБОТА" in ctx else True, "t-e в батче") check("8: инструкция закрывать отдельно", 'cli.py complete -a' in ctx) check("8: legacy-вызов с одной задачей работает",