generated from coulomb/repo-seed
Complete workplan state model cleanup
This commit is contained in:
@@ -40,6 +40,16 @@ from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
_REPO_ROOT = Path(__file__).resolve().parent.parent
|
||||
if str(_REPO_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(_REPO_ROOT))
|
||||
|
||||
from api.workplan_status import ( # noqa: E402
|
||||
CANONICAL_WORKSTREAM_STATUSES,
|
||||
SUPPORTED_WORKSTREAM_STATUSES,
|
||||
normalize_workstream_status,
|
||||
)
|
||||
|
||||
try:
|
||||
import yaml as _yaml
|
||||
_HAS_YAML = True
|
||||
@@ -58,7 +68,8 @@ except ImportError:
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
REQUIRED_FRONTMATTER = {"id", "type", "title", "domain", "status", "owner", "created"}
|
||||
VALID_WP_STATUSES = {"active", "completed", "archived"}
|
||||
VALID_WP_STATUSES = set(CANONICAL_WORKSTREAM_STATUSES)
|
||||
SUPPORTED_WP_STATUSES = set(SUPPORTED_WORKSTREAM_STATUSES)
|
||||
VALID_TASK_STATUSES = {"todo", "in_progress", "blocked", "done", "cancelled"}
|
||||
VALID_TASK_PRIORITIES = {"low", "medium", "high", "critical"}
|
||||
|
||||
@@ -198,11 +209,14 @@ def _check_workplan_file(wp_file: Path, report: Report) -> dict | None:
|
||||
|
||||
# status
|
||||
status = str(meta.get("status", ""))
|
||||
if status not in VALID_WP_STATUSES:
|
||||
if status not in SUPPORTED_WP_STATUSES:
|
||||
report.add(Level.FAIL, "frontmatter-status",
|
||||
f"status must be one of {sorted(VALID_WP_STATUSES)}, got {status!r}", fname)
|
||||
f"status must be one of {sorted(VALID_WP_STATUSES)} "
|
||||
f"(legacy aliases accepted: {sorted(SUPPORTED_WP_STATUSES - VALID_WP_STATUSES)}), "
|
||||
f"got {status!r}", fname)
|
||||
else:
|
||||
report.add(Level.PASS, "frontmatter-status", f"status={status}", fname)
|
||||
report.add(Level.PASS, "frontmatter-status",
|
||||
f"status={normalize_workstream_status(status)}", fname)
|
||||
|
||||
# id format
|
||||
wp_id = str(meta.get("id", ""))
|
||||
@@ -363,7 +377,7 @@ def check_api(api_base: str, metas: list[dict], domain_slug: str | None,
|
||||
continue
|
||||
for ws in workstreams:
|
||||
ws_status = ws.get("status", "")
|
||||
if ws_status in ("completed", "archived"):
|
||||
if normalize_workstream_status(ws_status) in {"finished", "archived"}:
|
||||
continue
|
||||
ws_id = ws["id"]
|
||||
ws_slug = ws.get("slug", "")
|
||||
|
||||
Reference in New Issue
Block a user