feat(ack): add project delivery workflow
This commit is contained in:
+27
-4
@@ -1311,9 +1311,10 @@ def cmd_init(args: argparse.Namespace) -> None:
|
||||
project_file = destination / "project.md"
|
||||
tasks_file = destination / "tasks.yaml"
|
||||
knowledge_file = destination / "knowledge.yaml"
|
||||
delivery_file = destination / "delivery.yaml"
|
||||
managed_targets = [project_file, tasks_file]
|
||||
if args.name == "ack":
|
||||
managed_targets.append(knowledge_file)
|
||||
managed_targets.extend((knowledge_file, delivery_file))
|
||||
existing = [path for path in managed_targets if path.exists() or path.is_symlink()]
|
||||
if existing:
|
||||
paths = ", ".join(str(path.relative_to(project)) for path in existing)
|
||||
@@ -1326,8 +1327,11 @@ def cmd_init(args: argparse.Namespace) -> None:
|
||||
(tasks_template, tasks_file),
|
||||
]
|
||||
if args.name == "ack":
|
||||
template_targets.append(
|
||||
(skill_source / "templates" / "knowledge.template.yaml", knowledge_file)
|
||||
template_targets.extend(
|
||||
(
|
||||
(skill_source / "templates" / "knowledge.template.yaml", knowledge_file),
|
||||
(skill_source / "templates" / "delivery.template.yaml", delivery_file),
|
||||
)
|
||||
)
|
||||
missing = [path for path, _ in template_targets if not path.is_file()]
|
||||
if missing:
|
||||
@@ -1335,10 +1339,11 @@ def cmd_init(args: argparse.Namespace) -> None:
|
||||
raise SystemExit(f"skill 缺少初始化模板: {paths}")
|
||||
validator = skill_source / "scripts" / "validate_tasks.py"
|
||||
knowledge_validator = skill_source / "scripts" / "validate_knowledge.py"
|
||||
delivery_validator = skill_source / "scripts" / "validate_delivery.py"
|
||||
if args.name == "ack":
|
||||
missing_validators = [
|
||||
path
|
||||
for path in (validator, knowledge_validator)
|
||||
for path in (validator, knowledge_validator, delivery_validator)
|
||||
if not path.is_file()
|
||||
]
|
||||
if missing_validators:
|
||||
@@ -1394,6 +1399,23 @@ def cmd_init(args: argparse.Namespace) -> None:
|
||||
raise SystemExit(
|
||||
f"初始化知识库校验失败(exit {completed.returncode})"
|
||||
)
|
||||
if args.name == "ack" and delivery_validator.is_file():
|
||||
completed = subprocess.run(
|
||||
[
|
||||
sys.executable,
|
||||
str(delivery_validator),
|
||||
str(staged_files[delivery_file]),
|
||||
"--tasks",
|
||||
str(staged_files[tasks_file]),
|
||||
"--project-root",
|
||||
str(staging),
|
||||
],
|
||||
check=False,
|
||||
)
|
||||
if completed.returncode != 0:
|
||||
raise SystemExit(
|
||||
f"初始化交付契约校验失败(exit {completed.returncode})"
|
||||
)
|
||||
|
||||
for target, staged in staged_files.items():
|
||||
if staged.read_text(encoding="utf-8") != rendered_files[target]:
|
||||
@@ -1621,6 +1643,7 @@ def cmd_init(args: argparse.Namespace) -> None:
|
||||
_print(f" 任务板: {tasks_file}")
|
||||
if args.name == "ack":
|
||||
_print(f" 知识库: {knowledge_file}")
|
||||
_print(f" 交付契约: {delivery_file}(默认关闭)")
|
||||
_print("下一步: 填写 project.md 中的项目命令、路径权限和 Base URL")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user