#!/usr/bin/env python3 """ get-task Retrieves detailed information and metadata for a specific task in docs/tasks.md. Usage: ./scripts/get-task EX-018 ./scripts/get-task 18 --json ./scripts/get-task EX-099 --description-only """ import argparse import importlib.machinery import importlib.util import json import re import sys from pathlib import Path def load_update_tasks_module(): script_dir = Path(__file__).resolve().parent update_script = script_dir / "update-tasks" if not update_script.exists(): raise FileNotFoundError(f"Could not find update-tasks at {update_script}") loader = importlib.machinery.SourceFileLoader("update_tasks", str(update_script)) spec = importlib.util.spec_from_loader("update_tasks", loader) if spec is None: raise ImportError(f"Could not load spec for {update_script}") mod = importlib.util.module_from_spec(spec) loader.exec_module(mod) return mod def parse_task_id(id_str): return load_update_tasks_module().parse_task_id(id_str) def get_task(task_id_input, tasks_file=None): update_mod = load_update_tasks_module() tasks_path = update_mod.find_tasks_file(tasks_file) with open(tasks_path, "r", encoding="utf-8") as f: text = f.read() fm_data = update_mod.read_frontmatter(text) prefix = update_mod.get_task_id_prefix(fm_data) target_num = update_mod.parse_task_id(task_id_input) detail_header_marker = "## Detailed Tasks\n" detail_start = text.find(detail_header_marker) if detail_start == -1: raise ValueError("## Detailed Tasks heading not found") notes_marker = "\n---\n\n## Notes\n" notes_start = text.find(notes_marker) if notes_start == -1: notes_start = len(text) detail_body = text[detail_start + len(detail_header_marker) : notes_start] task_chunks = re.split(r"(?=]*\bid=|