graphban-cli 0.8.5__tar.gz → 0.8.6__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.
Files changed (37) hide show
  1. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/PKG-INFO +1 -1
  2. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/pyproject.toml +1 -1
  3. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-work/SKILL.md +7 -1
  4. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_setup.py +19 -0
  5. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/uv.lock +1 -1
  6. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/.gitignore +0 -0
  7. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/LICENSE +0 -0
  8. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/README.md +0 -0
  9. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/__init__.py +0 -0
  10. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/cli.py +0 -0
  11. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/client.py +0 -0
  12. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/config.py +0 -0
  13. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/data/stack_sdks.toml +0 -0
  14. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/doctor.py +0 -0
  15. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/gitignore.py +0 -0
  16. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/machine.py +0 -0
  17. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/setup.py +0 -0
  18. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-answer/SKILL.md +0 -0
  19. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-delegation/SKILL.md +0 -0
  20. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-grill/SKILL.md +0 -0
  21. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-orient/SKILL.md +0 -0
  22. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-prd/SKILL.md +0 -0
  23. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-review/SKILL.md +0 -0
  24. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-scan/SKILL.md +0 -0
  25. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-wave/SKILL.md +0 -0
  26. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/watch-wave/SKILL.md +0 -0
  27. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/stackmap.py +0 -0
  28. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/swamp.py +0 -0
  29. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_acts.py +0 -0
  30. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_doctor.py +0 -0
  31. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_login_pair.py +0 -0
  32. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_login_projects.py +0 -0
  33. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_machine_report.py +0 -0
  34. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_packaging.py +0 -0
  35. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_session.py +0 -0
  36. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_stackmap.py +0 -0
  37. {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_swamp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: graphban-cli
3
- Version: 0.8.5
3
+ Version: 0.8.6
4
4
  Summary: gban — a Graphban client for the human at a terminal
5
5
  Project-URL: Homepage, https://github.com/asc-me/graphban
6
6
  Project-URL: Repository, https://github.com/asc-me/graphban
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "graphban-cli"
3
- version = "0.8.5"
3
+ version = "0.8.6"
4
4
  description = "gban — a Graphban client for the human at a terminal"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -15,6 +15,10 @@ Take one item, leave a receipt, hand it to review. Reading the repo is `graphban
15
15
  2. Fleet: `claim_cluster`. Solo: `claim_next`. `claimed: false` names who holds the area and when it frees. That is the answer. Take different work.
16
16
  3. `get_item_details` once. The `brief` suggests `lane` and `tier` with a basis. You still choose both if you hand it to a child.
17
17
  4. `heartbeat(id, status=<one line>, files=[the paths you are in])` on the lease interval. A heartbeat is not a `fleet_status` poll.
18
+ Heartbeat before any command that can run longer than the lease: a Postgres suite or `pnpm test` prints nothing, and a silent command drops the claim around 150 seconds.
19
+ After you change paths, `describe_code` those paths so the next child does not grep for them.
20
+ A review-ready receipt is a test line: an `update_item` evidence entry of kind `test` with passed and failed counts.
21
+ Finishing the item is `graphban-prove`.
18
22
  5. `update_item` as you go. Evidence appends. Touchpoints union: send the files you actually touched. An empty touchpoint list writes nothing. Status goes to `review`.
19
23
  6. Stopping unfinished: `release_item`. A blocker that is still true tomorrow is status `blocked` with `blocker` set. `backlog` is claimable and will be handed out again. A build claim released without `to_status` goes back to `next`.
20
24
 
@@ -22,7 +26,9 @@ Test scope follows the project's mode, which your delegation brief states. `agen
22
26
 
23
27
  A product decision the item and its PRD framing do not already state: file a wait and stop. `create_item` with tag `wait:decision`, `status=blocked`, this item's `prd_id`, and a description that is the question plus what each answer would make you do. `link_items` with `a` this item, `b` the wait, `type` `dependency`, `reason` `wait:decision`. Leave this item `blocked`. Leave the wait blocked. Answering it is `graphban-answer`.
24
28
 
25
- A broken build stays a free-text `blocker` on this item. That is not a wait.
29
+ A broken build is either still this item (move it back to `next` with the failure named), or a
30
+ new ticket this item depends on — `create_item`, `link_items` with `type=dependency`, and
31
+ `blocker` set to that item's id. A free-text `blocker` alone is not a wait and is not claimable.
26
32
 
27
33
  Signing off is `graphban-review`. The builder does not set `done`.
28
34
 
@@ -1361,3 +1361,22 @@ def test_the_old_subcommand_flag_order_is_still_rejected():
1361
1361
  for argv in (["login", "--server", "https://x"], ["setup", "--project", "core"]):
1362
1362
  with pytest.raises(SystemExit):
1363
1363
  _parser().parse_args(argv)
1364
+
1365
+
1366
+ def test_graphban_work_names_the_lease_the_graph_and_prove():
1367
+ """The work skill must warn that a silent long command drops the lease, send
1368
+ changed paths to describe_code, call a receipt a test line, and hand
1369
+ finishing to graphban-prove."""
1370
+ body = " ".join(setup_mod.skill_source("graphban-work").read_text(encoding="utf-8").split())
1371
+ assert "Heartbeat before any command that can run longer than the lease" in body
1372
+ assert "`describe_code` those paths" in body
1373
+ assert "A review-ready receipt is a test line" in body
1374
+ assert "Finishing the item is `graphban-prove`" in body
1375
+
1376
+
1377
+ def test_the_image_manifest_lists_the_shipped_skills():
1378
+ """backend/scripts/gban_skills.json is a checked-in copy (the image has no cli/)."""
1379
+ root = Path(__file__).resolve().parents[2]
1380
+ manifest = json.loads((root / "backend/scripts/gban_skills.json").read_text())
1381
+ shipped = {p.name for p in (root / "cli/src/gban/skills").iterdir() if p.is_dir()}
1382
+ assert set(manifest["skills"]) == shipped
@@ -124,7 +124,7 @@ wheels = [
124
124
 
125
125
  [[package]]
126
126
  name = "graphban-cli"
127
- version = "0.8.5"
127
+ version = "0.8.6"
128
128
  source = { editable = "." }
129
129
 
130
130
  [package.optional-dependencies]
File without changes
File without changes
File without changes