diff --git a/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md b/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md index fea7d73..89de6be 100644 --- a/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md +++ b/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md @@ -375,6 +375,9 @@ Set `$SELECTED_PROPOSAL_DIR` to the selected run-local skill directory and `$SKILL_PATH` to its repository-relative destination before the checkout validation steps. +For every `create` action, pass `draft: false` explicitly so newly created +Forge PRs open ready for review. Never omit the field or rely on the platform +default. For a create action, stage only the selected proposal. Before copying, reject symlinks in its source tree, every existing destination path component, and every existing destination entry mapped from a selected source entry. Compare diff --git a/plugins/repo-dreamer/skills/repository-skill-forge/tests/test_stateless_forge.py b/plugins/repo-dreamer/skills/repository-skill-forge/tests/test_stateless_forge.py index 1c5254a..111a1d5 100644 --- a/plugins/repo-dreamer/skills/repository-skill-forge/tests/test_stateless_forge.py +++ b/plugins/repo-dreamer/skills/repository-skill-forge/tests/test_stateless_forge.py @@ -278,5 +278,13 @@ def test_selection_rejects_invalid_rank(self) -> None: ledger.select([invalid], []) +class PublicationContractTests(unittest.TestCase): + def test_forge_opens_new_pull_requests_ready_for_review(self) -> None: + contract = (SKILL_DIR / "SKILL.md").read_text(encoding="utf-8") + + self.assertIn("pass `draft: false` explicitly", contract) + self.assertIn("open ready for review", contract) + + if __name__ == "__main__": unittest.main()