секции PLAN.md: «линия» и «кусты» стали «порядком» и «темами»
Метафора требовала расшифровки при каждом употреблении, и в текстах она и расшифровывалась: «звено упорядоченной линии продукта», «тематический куст — цель, в последовательность не встающая». Если название приходится объяснять рядом с каждым употреблением, объясняет не название. Новые имена называют ровно то свойство, которым секции различаются: в первой очередь значима и обоснована прозой, во второй порядка нет вовсе. Заголовки строчные, как ядро/инфра в беклоге: имя секции одновременно значение для --section, и проза приведена к тому же виду, чтобы «--section Порядок» не выглядело правильным написанием. Версия канона не меняется: canon.md называет файл PLAN.md и о его секциях не говорит — их дом заголовки ## индекса, умолчание живёт в tasks.py. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,7 @@ av-dev, и подгоняется под него проект. Имена вн
|
||||
|
||||
docs/tasks/
|
||||
items/ задачи и цели файлами, <slug>.md
|
||||
PLAN.md оглавление целей: линия (упорядоченная) и кусты
|
||||
PLAN.md оглавление целей: порядок (значим) и темы (без порядка)
|
||||
BACKLOG.md что можно взять — только задачи, целей здесь нет
|
||||
SPRINT.md текущий спринт: цель, набор, дата, слаг
|
||||
REJECTED.md ушедшее БЕЗ реализации, с причиной и датой
|
||||
@@ -110,7 +110,7 @@ DEFAULTS = {
|
||||
PATH_KEYS = ("items", "backlog", "plan", "sprint", "rejected")
|
||||
|
||||
DEFAULT_SECTIONS = "ядро,инфра"
|
||||
DEFAULT_PLAN_SECTIONS = "линия,кусты"
|
||||
DEFAULT_PLAN_SECTIONS = "порядок,темы"
|
||||
|
||||
META_FIELD = re.compile(r"^\*\*(.+?):\*\*\s*(.*)$")
|
||||
INDEX_ENTRY = re.compile(r"^- \[(.+?)\]\((.+?\.md)\)\s*(?:—\s*(.*))?$")
|
||||
@@ -1838,8 +1838,8 @@ def init_files(lay: Layout, sections: list[str], plan_sections: list[str],
|
||||
"# План\n\n"
|
||||
f"Оглавление целей. Цель — файл `[goal]` в `{lay.cfg['items']}/`; её задачи\n"
|
||||
"здесь **не перечисляются** — перечень даёт `tasks.py list --goal <слаг>`.\n"
|
||||
f"Первая секция («{plan_sections[0]}») упорядочена, и порядок обосновывается\n"
|
||||
"прозой; остальные — тематические кусты без порядка.\n\n"
|
||||
f"В первой секции («{plan_sections[0]}») очередь значима и обосновывается\n"
|
||||
"прозой; в остальных порядка нет — это тематические цели.\n\n"
|
||||
+ "".join(f"## {s}\n\n" for s in plan_sections))
|
||||
out[lay.index("sprint")] = empty_sprint(lay)
|
||||
out[lay.index("rejected")] = (
|
||||
@@ -1976,8 +1976,8 @@ STEP = re.compile(r"^\**\s*(\d+)[.)]\s*\**\s*(.+?)\**\s*$")
|
||||
def scan_list_file(path: Path) -> dict:
|
||||
"""TODO.md, «планы» в README, список шагов в плане проекта.
|
||||
|
||||
**Нумерованный шаг плана → кандидат в цель линии** (готовая цель: у него уже
|
||||
есть порядок и обоснование), прочий пункт списка → кандидат в задачу. Ничего
|
||||
**Нумерованный шаг плана → кандидат в цель из «порядка»** (готовая цель: у
|
||||
него уже есть очередь и обоснование), прочий пункт → кандидат в задачу. Ничего
|
||||
не решает: и то и другое едет в карту предложением, назначает человек.
|
||||
"""
|
||||
found: dict = {"kind": "list-file", "source": str(path), "items": [],
|
||||
@@ -2043,7 +2043,7 @@ def cmd_adopt_scan(a: argparse.Namespace) -> int:
|
||||
rejected += sc.get("rejected", [])
|
||||
unclassified += sc.get("unclassified", [])
|
||||
goals += [{"slug": "", "title": g["title"],
|
||||
"section": (a.plan_sections.split(",")[0].strip() or "линия"),
|
||||
"section": (a.plan_sections.split(",")[0].strip() or "порядок"),
|
||||
"from": g["from"], "step": g.get("step"), "done": g.get("done"),
|
||||
"body": f"Выведена из шага «{g['title']}» ({g['from']})."
|
||||
+ ("\n\nШаг помечен закрытым — цель, скорее всего,"
|
||||
|
||||
Reference in New Issue
Block a user