Commit c8501c46a0715938dcf923efa71412e5df10f70c
1 parent
dcac03bd
graphlemon: auto-commit uncommitted changes for 88612ded-ac9f-499c-9872-dcd05cad9495
Showing
2 changed files
with
13 additions
and
1 deletions
src/e2e_pipeline.py
| @@ -412,7 +412,13 @@ def _test_script_verify_fn(node_artifact_types, script_artifact_type="test_scrip | @@ -412,7 +412,13 @@ def _test_script_verify_fn(node_artifact_types, script_artifact_type="test_scrip | ||
| 412 | def verify_fn(node, output): | 412 | def verify_fn(node, output): |
| 413 | if node_artifact_types.get(node["node_id"]) != script_artifact_type: | 413 | if node_artifact_types.get(node["node_id"]) != script_artifact_type: |
| 414 | return True, None | 414 | return True, None |
| 415 | - return check_script_compiles(output["content"]) | 415 | + ok, detail = check_script_compiles(output["content"]) |
| 416 | + # work_graph_orchestrate._verify_and_maybe_regenerate does | ||
| 417 | + # "; ".join(feedback or []), i.e. it expects a list of messages (the | ||
| 418 | + # PRD-consistency verify_fn's `issues` shape) -- check_script_compiles | ||
| 419 | + # returns a single string, which `join` would otherwise iterate | ||
| 420 | + # character-by-character into a garbled reflect-prompt. | ||
| 421 | + return ok, ([detail] if detail else None) | ||
| 416 | return verify_fn | 422 | return verify_fn |
| 417 | 423 | ||
| 418 | 424 |
src/test_e2e_pipeline.py
| @@ -272,6 +272,12 @@ class TestScriptVerifyFnTest(unittest.TestCase): | @@ -272,6 +272,12 @@ class TestScriptVerifyFnTest(unittest.TestCase): | ||
| 272 | verify_fn = e2e_pipeline._test_script_verify_fn(node_artifact_types) | 272 | verify_fn = e2e_pipeline._test_script_verify_fn(node_artifact_types) |
| 273 | ok, detail = verify_fn({"node_id": "script"}, {"content": "this is narrative, not code, no way"}) | 273 | ok, detail = verify_fn({"node_id": "script"}, {"content": "this is narrative, not code, no way"}) |
| 274 | self.assertFalse(ok) | 274 | self.assertFalse(ok) |
| 275 | + # regression: work_graph_orchestrate does "; ".join(feedback or []) on | ||
| 276 | + # this return value -- a bare string would get joined character-by- | ||
| 277 | + # character into a garbled reflect prompt (2026-08-06 self-hosting | ||
| 278 | + # incident). Must be a list containing the message, not the message. | ||
| 279 | + self.assertIsInstance(detail, list) | ||
| 280 | + self.assertIn("py_compile", detail[0]) | ||
| 275 | 281 | ||
| 276 | def test_test_script_node_with_real_code_passes(self): | 282 | def test_test_script_node_with_real_code_passes(self): |
| 277 | node_artifact_types = {"script": "test_script"} | 283 | node_artifact_types = {"script": "test_script"} |