graphban-cli 0.8.7__tar.gz → 0.8.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/PKG-INFO +1 -1
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/pyproject.toml +1 -1
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_playbooks.py +33 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/uv.lock +1 -1
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/.gitignore +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/LICENSE +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/README.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/__init__.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/cli.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/client.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/config.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/data/stack_sdks.toml +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/doctor.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/gitignore.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/machine.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/playbooks.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/setup.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-answer/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-delegation/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-grill/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-orient/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-prd/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-prove/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-review/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-scan/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-ship/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-unstick/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-wave/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/graphban-work/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/skills/watch-wave/SKILL.md +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/stackmap.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/src/gban/swamp.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_acts.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_doctor.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_login_pair.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_login_projects.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_machine_report.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_packaging.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_session.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_setup.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_stackmap.py +0 -0
- {graphban_cli-0.8.7 → graphban_cli-0.8.8}/tests/test_swamp.py +0 -0
|
@@ -290,3 +290,36 @@ def test_gban_doctor_prints_the_playbooks_line(tmp_path, monkeypatch, capsys):
|
|
|
290
290
|
out = capsys.readouterr()
|
|
291
291
|
assert "playbooks" in out.out and "at abc" in out.out and "just now" not in out.out
|
|
292
292
|
assert "last poll" not in out.err
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
# --- GRPH-1506: hook files ride the pack, each to its own path -------------------------------
|
|
296
|
+
|
|
297
|
+
HOOK = ".cursor/hooks/gb_stop.py"
|
|
298
|
+
HOOKS_JSON = ".cursor/hooks.json"
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
def _hook_pack(sha_, *extra):
|
|
302
|
+
files = [{"path": SKILL, "kind": "skill", "body": "S1"},
|
|
303
|
+
{"path": HOOK, "kind": "hook", "body": "H1"}, *extra]
|
|
304
|
+
return {"git_sha": sha_, "files": files}
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def test_a_hook_is_written_once_at_its_own_path_and_a_skill_still_fans_out(tmp_path):
|
|
308
|
+
poll(URL, tmp_path, client=Fake({"git_sha": "1"}, _hook_pack("1")), now=0)
|
|
309
|
+
assert (tmp_path / HOOK).read_text() == "H1"
|
|
310
|
+
assert playbooks.targets({"path": HOOK, "kind": "hook"}) == [HOOK]
|
|
311
|
+
assert sorted(receipt(tmp_path)["files"]) == sorted([*COPIES, HOOK])
|
|
312
|
+
for rel in COPIES:
|
|
313
|
+
assert (tmp_path / rel).read_text() == "S1"
|
|
314
|
+
assert not (tmp_path / ".claude/hooks").exists()
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def test_a_foreign_hooks_json_is_left_and_named_while_the_scripts_are_written(tmp_path):
|
|
318
|
+
(tmp_path / ".cursor").mkdir()
|
|
319
|
+
(tmp_path / HOOKS_JSON).write_text("theirs")
|
|
320
|
+
pack = _hook_pack("1", {"path": HOOKS_JSON, "kind": "hook", "body": "{}"})
|
|
321
|
+
r = poll(URL, tmp_path, client=Fake({"git_sha": "1"}, pack), now=0)
|
|
322
|
+
assert (tmp_path / HOOKS_JSON).read_text() == "theirs"
|
|
323
|
+
assert HOOKS_JSON in r["kept"] and HOOKS_JSON in r["note"]
|
|
324
|
+
assert HOOKS_JSON not in receipt(tmp_path)["files"]
|
|
325
|
+
assert (tmp_path / HOOK).read_text() == "H1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|