From 8fa3fc68b57b2e3c67245771bcd7c4beddfa5319 Mon Sep 17 00:00:00 2001 From: Simbiot Harness Date: Sun, 4 Oct 2026 14:03:13 +0000 Subject: [PATCH] =?UTF-8?q?fix(e-261004134613):=20cli.py=20task=20=20=E2=80=94=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=BE=20id=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=BE=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit title, совпадающий с формой t-NNNNNNNNNNNN-XXXX, теперь показывает задачу (или ERROR exit 2, если не найдена), а не создаёт само-клон. Корень эскалации: мин-агент звал 'cli.py task t-...' для чтения задачи. --- cli.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cli.py b/cli.py index d1026bf..3229f8d 100644 --- a/cli.py +++ b/cli.py @@ -1,6 +1,7 @@ """Simbiot Harness — CLI: таски, статус, ручные тики.""" import argparse import json +import re import sys import os @@ -199,6 +200,21 @@ def main(): print(f"{t['id']} [{t['size']:2}] {t['status']:7} {t['title'][:70]}") elif not args.title: p_task.print_help() + elif re.fullmatch(r"t-\d{6,14}-\w+", (args.title or "").strip()): + # e-261004134613-dda90f: title=ID существующей задачи → показать её, + # а не плодить клон (агент звал 'cli.py task t-...' для чтения) + es.init_db() + model = es.run_projections() + tid = args.title.strip() + t = (model.get("tasks") or {}).get(tid) + if t is None: + print(f"ERROR: задача {tid} не найдена — чтение по id, создание клона запрещено", + file=sys.stderr) + sys.exit(2) + print(f"{t['id']} [{t['size']:2}] {t['status']:7} {t.get('title','')}") + print(f" est: {t.get('est_minutes','?')}м создана: {t.get('ts','?')}") + if t.get("details"): + print(f" детали: {t['details']}") else: tid, size = commands.submit_task(args.title, args.details, args.minutes) if args.await_delivery: