feat(skill): extract review-merge-pr workflow from monolithic SKILL.md

Closes #334

- Add workflows/review-merge-pr.md with reviewer-only gates and steps
- Add schemas/review-merge-final-report.md with mutation ledger fields
- Turn SKILL.md into task-mode router; replace inlined §F/§G with links
- Point review/merge templates at extracted workflow
- Add doc-contract tests for split structure

Part of #333.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
2026-07-07 03:32:59 -04:00
co-authored by Claude Opus 4.8
parent e4d78a5013
commit 3976f886e4
6 changed files with 447 additions and 104 deletions
+47
View File
@@ -0,0 +1,47 @@
"""Doc-contract checks for task-specific LLM workflow split (#333, #334)."""
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parent.parent
SKILL_DIR = REPO_ROOT / "skills" / "llm-project-workflow"
def test_review_merge_workflow_file_exists():
path = SKILL_DIR / "workflows" / "review-merge-pr.md"
text = path.read_text(encoding="utf-8")
assert "Task mode:" in text
assert "review-merge-pr" in text
assert "gitea-reviewer" in text
assert "scripts/worktree-review" in text
def test_review_merge_final_report_schema_exists():
path = SKILL_DIR / "schemas" / "review-merge-final-report.md"
text = path.read_text(encoding="utf-8")
assert "Controller Handoff" in text
assert "Worktree/index mutations" in text
assert "Workspace mutations" in text # documented as rejected
def test_skill_router_points_to_review_merge_workflow():
skill = (SKILL_DIR / "SKILL.md").read_text(encoding="utf-8")
assert "## Task mode router" in skill
assert "workflows/review-merge-pr.md" in skill
assert "schemas/review-merge-final-report.md" in skill
assert "Identify task mode before any mutation" in skill
def test_skill_still_declares_controller_handoff_contract():
skill = (SKILL_DIR / "SKILL.md").read_text(encoding="utf-8")
assert "## Controller Handoff" in skill
assert "assess_controller_handoff" in skill
assert "## Global LLM Worktree Rule" in skill
def test_review_pr_template_references_extracted_workflow():
text = (SKILL_DIR / "templates" / "review-pr.md").read_text(encoding="utf-8")
assert "workflows/review-merge-pr.md" in text
def test_merge_pr_template_references_extracted_workflow():
text = (SKILL_DIR / "templates" / "merge-pr.md").read_text(encoding="utf-8")
assert "workflows/review-merge-pr.md" in text