Skip to content

Commit 7870213

Browse files
committed
fix(codex): harden sharing scripts and tests
1 parent 6e509cd commit 7870213

7 files changed

Lines changed: 56 additions & 13 deletions

File tree

platform-integrations/codex/plugins/evolve-lite/skills/learn/scripts/save_entities.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,8 @@ def main():
9292
log(f"Skipping duplicate: {content[:60]}")
9393
continue
9494

95-
if args.user and not entity.get("owner"):
96-
entity["owner"] = args.user
97-
if not entity.get("visibility"):
98-
entity["visibility"] = "private"
95+
entity["owner"] = args.user or "unknown"
96+
entity["visibility"] = "private"
9997

10098
path = write_entity_file(entities_dir, entity)
10199
existing_contents.add(normalize(content))

platform-integrations/codex/plugins/evolve-lite/skills/sync/scripts/sync.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,14 @@ def main():
152152

153153
pull_result = git_pull(repo_path, branch)
154154
if pull_result is None or pull_result.returncode != 0:
155-
error_lines = (pull_result.stderr or pull_result.stdout or "").strip().splitlines()
156-
short_error = error_lines[-1] if error_lines else "unknown error"
155+
if pull_result is None:
156+
short_error = "timeout"
157+
else:
158+
error_lines = (pull_result.stderr or pull_result.stdout or "").strip().splitlines()
159+
short_error = error_lines[-1] if error_lines else f"git exited with {pull_result.returncode}"
157160
summaries.append(f"{name} (git pull failed: {short_error})")
158161
total_delta[name] = {"added": 0, "updated": 0, "removed": 0}
162+
any_changes = True
159163
continue
160164

161165
if "Already up to date" in (pull_result.stdout or ""):

tests/platform_integrations/test_codex.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def _iter_group_hooks(group):
4747

4848

4949
@pytest.mark.platform_integrations
50+
@pytest.mark.e2e
5051
class TestCodexInstall:
5152
"""Test the Codex install flow."""
5253

tests/platform_integrations/test_codex_sharing.py

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
HOOK_INPUT = json.dumps({"prompt": "How do I write clean code?"})
2121

2222

23-
def run_script(script, project_dir=None, args=None, evolve_dir=None, stdin=None, expect_success=True):
23+
def run_script(script, project_dir, args=None, evolve_dir=None, stdin=None, expect_success=True):
2424
env = {**os.environ}
2525
if evolve_dir:
2626
env["EVOLVE_DIR"] = str(evolve_dir)
@@ -29,7 +29,7 @@ def run_script(script, project_dir=None, args=None, evolve_dir=None, stdin=None,
2929
input=stdin,
3030
capture_output=True,
3131
text=True,
32-
cwd=str(project_dir) if project_dir else None,
32+
cwd=str(project_dir),
3333
env=env,
3434
check=expect_success,
3535
)
@@ -51,6 +51,34 @@ def test_save_stamps_owner_and_private_visibility(self, temp_project_dir):
5151
assert "owner: alice" in content
5252
assert "visibility: private" in content
5353

54+
def test_save_ignores_incoming_owner_and_visibility(self, temp_project_dir):
55+
evolve_dir = temp_project_dir / ".evolve"
56+
run_script(
57+
SAVE_SCRIPT,
58+
project_dir=temp_project_dir,
59+
args=["--user", "alice"],
60+
evolve_dir=evolve_dir,
61+
stdin=json.dumps(
62+
{
63+
"entities": [
64+
{
65+
"type": "guideline",
66+
"content": "Prefer small, reversible changes.",
67+
"owner": "mallory",
68+
"visibility": "public",
69+
}
70+
]
71+
}
72+
),
73+
)
74+
files = list((evolve_dir / "entities" / "guideline").glob("*.md"))
75+
assert len(files) == 1
76+
content = files[0].read_text()
77+
assert "owner: alice" in content
78+
assert "owner: mallory" not in content
79+
assert "visibility: private" in content
80+
assert "visibility: public" not in content
81+
5482
def test_retrieve_annotates_subscribed_entities(self, temp_project_dir):
5583
evolve_dir = temp_project_dir / ".evolve"
5684
own_dir = evolve_dir / "entities" / "guideline"
@@ -60,7 +88,13 @@ def test_retrieve_annotates_subscribed_entities(self, temp_project_dir):
6088
sub_dir.mkdir(parents=True)
6189
(sub_dir / "alice-tip.md").write_text("---\ntype: guideline\nowner: alice\nvisibility: public\n---\n\nAlways write tests.\n")
6290

63-
result = run_script(RETRIEVE_SCRIPT, evolve_dir=evolve_dir, stdin=HOOK_INPUT, expect_success=False)
91+
result = run_script(
92+
RETRIEVE_SCRIPT,
93+
project_dir=temp_project_dir,
94+
evolve_dir=evolve_dir,
95+
stdin=HOOK_INPUT,
96+
expect_success=False,
97+
)
6498
assert result.returncode == 0
6599
assert "Keep functions small." in result.stdout
66100
assert "[from: alice]" in result.stdout
@@ -77,7 +111,13 @@ def test_retrieve_includes_published_guidelines(self, temp_project_dir):
77111
"---\ntype: guideline\nvisibility: public\nsource: alice/evolve-guidelines\n---\n\nDocument edge cases.\n"
78112
)
79113

80-
result = run_script(RETRIEVE_SCRIPT, evolve_dir=evolve_dir, stdin=HOOK_INPUT, expect_success=False)
114+
result = run_script(
115+
RETRIEVE_SCRIPT,
116+
project_dir=temp_project_dir,
117+
evolve_dir=evolve_dir,
118+
stdin=HOOK_INPUT,
119+
expect_success=False,
120+
)
81121
assert result.returncode == 0
82122
assert "Keep functions small." in result.stdout
83123
assert "Document edge cases." in result.stdout

tests/platform_integrations/test_entity_io_core.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
)
1616
import entity_io
1717

18-
pytestmark = pytest.mark.platform_integrations
18+
pytestmark = [pytest.mark.platform_integrations, pytest.mark.unit]
1919

2020

2121
class TestSlugify:

tests/platform_integrations/test_subscribe.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
)
1515
import config as cfg_module
1616

17-
pytestmark = pytest.mark.platform_integrations
17+
pytestmark = [pytest.mark.platform_integrations, pytest.mark.e2e]
1818

1919
_PLUGIN_ROOT = Path(__file__).parent.parent.parent / "platform-integrations/claude/plugins/evolve-lite"
2020
SUBSCRIBE_SCRIPT = _PLUGIN_ROOT / "skills/subscribe/scripts/subscribe.py"

tests/platform_integrations/test_sync.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def test_skips_invalid_subscription_name(self, temp_project_dir):
142142
result = run_script(SYNC_SCRIPT, temp_project_dir, evolve_dir=evolve_dir)
143143
assert result.returncode == 0
144144
assert "invalid subscription name" in result.stdout
145-
assert not (evolve_dir / "subscribed" / ".." / "evil").exists()
145+
assert not (evolve_dir / "entities" / "evil").exists()
146146

147147
def test_manual_run_ignores_on_session_start_false(self, subscribed_project):
148148
p = subscribed_project

0 commit comments

Comments
 (0)