@@ -72,10 +72,19 @@ def test_e2e_init_all_creates_complete_structure(tmp_path, monkeypatch, runner):
7272 ).exists ()
7373
7474 # Gemini files
75- assert (tmp_path / ".gemini" / "commands" / "pb-init.toml" ).exists ()
76- assert (tmp_path / ".gemini" / "commands" / "pb-plan.toml" ).exists ()
77- assert (tmp_path / ".gemini" / "commands" / "pb-refine.toml" ).exists ()
78- assert (tmp_path / ".gemini" / "commands" / "pb-build.toml" ).exists ()
75+ assert (tmp_path / ".gemini" / "skills" / "pb-init" / "SKILL.md" ).exists ()
76+ assert (tmp_path / ".gemini" / "skills" / "pb-plan" / "SKILL.md" ).exists ()
77+ assert (tmp_path / ".gemini" / "skills" / "pb-refine" / "SKILL.md" ).exists ()
78+ assert (tmp_path / ".gemini" / "skills" / "pb-build" / "SKILL.md" ).exists ()
79+ assert (
80+ tmp_path / ".gemini" / "skills" / "pb-plan" / "references" / "design_template.md"
81+ ).exists ()
82+ assert (
83+ tmp_path / ".gemini" / "skills" / "pb-plan" / "references" / "tasks_template.md"
84+ ).exists ()
85+ assert (
86+ tmp_path / ".gemini" / "skills" / "pb-build" / "references" / "implementer_prompt.md"
87+ ).exists ()
7988
8089 # Codex files
8190 assert (tmp_path / ".codex" / "prompts" / "pb-init.md" ).exists ()
@@ -118,15 +127,16 @@ def test_e2e_copilot_no_frontmatter(tmp_path, monkeypatch, runner):
118127 assert not content .startswith ("---" ), f"Copilot { prompt } should not have frontmatter"
119128
120129
121- def test_e2e_gemini_toml_format (tmp_path , monkeypatch , runner ):
122- """Verify Gemini command files are TOML with description and prompt fields ."""
130+ def test_e2e_gemini_frontmatter (tmp_path , monkeypatch , runner ):
131+ """Verify Gemini SKILL.md files have YAML frontmatter ."""
123132 monkeypatch .chdir (tmp_path )
124133 runner .invoke (main , ["init" , "--ai" , "gemini" ])
125134
126- for command in ["pb-init" , "pb-plan" , "pb-refine" , "pb-build" ]:
127- content = (tmp_path / ".gemini" / "commands" / f"{ command } .toml" ).read_text ()
128- assert content .startswith ('description = "' ), f"Gemini { command } missing description field"
129- assert '\n prompt = """\n ' in content , f"Gemini { command } missing prompt field"
135+ for skill in ["pb-init" , "pb-plan" , "pb-refine" , "pb-build" ]:
136+ content = (tmp_path / ".gemini" / "skills" / skill / "SKILL.md" ).read_text ()
137+ assert content .startswith ("---\n " ), f"Gemini { skill } missing frontmatter"
138+ assert "name:" in content , f"Gemini { skill } missing name: in frontmatter"
139+ assert "description:" in content , f"Gemini { skill } missing description: in frontmatter"
130140
131141
132142def test_e2e_codex_frontmatter (tmp_path , monkeypatch , runner ):
@@ -152,6 +162,9 @@ def test_e2e_references_exist(tmp_path, monkeypatch, runner):
152162 ".opencode/skills/pb-plan/references/design_template.md" ,
153163 ".opencode/skills/pb-plan/references/tasks_template.md" ,
154164 ".opencode/skills/pb-build/references/implementer_prompt.md" ,
165+ ".gemini/skills/pb-plan/references/design_template.md" ,
166+ ".gemini/skills/pb-plan/references/tasks_template.md" ,
167+ ".gemini/skills/pb-build/references/implementer_prompt.md" ,
155168 }
156169 for ref in expected_refs :
157170 ref_path = tmp_path / ref
@@ -215,18 +228,15 @@ def test_e2e_copilot_no_references_dir(tmp_path, monkeypatch, runner):
215228 assert child .is_file (), f"Unexpected directory in Copilot prompts: { child } "
216229
217230
218- def test_e2e_gemini_and_codex_no_references_dir (tmp_path , monkeypatch , runner ):
219- """Verify Gemini/ Codex platforms do not create references directories."""
231+ def test_e2e_codex_no_references_dir (tmp_path , monkeypatch , runner ):
232+ """Verify Codex platform does not create references directories."""
220233 monkeypatch .chdir (tmp_path )
221- runner .invoke (main , ["init" , "--ai" , "all " ])
234+ runner .invoke (main , ["init" , "--ai" , "codex " ])
222235
223- for directory in [
224- tmp_path / ".gemini" / "commands" ,
225- tmp_path / ".codex" / "prompts" ,
226- ]:
227- assert directory .exists ()
228- for child in directory .iterdir ():
229- assert child .is_file (), f"Unexpected directory in prompt folder: { child } "
236+ prompts_dir = tmp_path / ".codex" / "prompts"
237+ assert prompts_dir .exists ()
238+ for child in prompts_dir .iterdir ():
239+ assert child .is_file (), f"Unexpected directory in Codex prompts: { child } "
230240
231241
232242def test_e2e_rendered_platforms_preserve_workflow_contract_language (tmp_path , monkeypatch , runner ):
@@ -252,11 +262,6 @@ def test_e2e_rendered_platforms_preserve_workflow_contract_language(tmp_path, mo
252262 "pb-build" : tmp_path / ".github" / "prompts" / "pb-build.prompt.md" ,
253263 "pb-refine" : tmp_path / ".github" / "prompts" / "pb-refine.prompt.md" ,
254264 },
255- "gemini" : {
256- "pb-plan" : tmp_path / ".gemini" / "commands" / "pb-plan.toml" ,
257- "pb-build" : tmp_path / ".gemini" / "commands" / "pb-build.toml" ,
258- "pb-refine" : tmp_path / ".gemini" / "commands" / "pb-refine.toml" ,
259- },
260265 "codex" : {
261266 "pb-plan" : tmp_path / ".codex" / "prompts" / "pb-plan.md" ,
262267 "pb-build" : tmp_path / ".codex" / "prompts" / "pb-build.md" ,
0 commit comments