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.
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/PKG-INFO +1 -1
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/pyproject.toml +1 -1
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-work/SKILL.md +7 -1
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_setup.py +19 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/uv.lock +1 -1
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/.gitignore +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/LICENSE +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/README.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/__init__.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/cli.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/client.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/config.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/data/stack_sdks.toml +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/doctor.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/gitignore.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/machine.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/setup.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-answer/SKILL.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-delegation/SKILL.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-grill/SKILL.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-orient/SKILL.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-prd/SKILL.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-review/SKILL.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-scan/SKILL.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/graphban-wave/SKILL.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/skills/watch-wave/SKILL.md +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/stackmap.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/src/gban/swamp.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_acts.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_doctor.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_login_pair.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_login_projects.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_machine_report.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_packaging.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_session.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_stackmap.py +0 -0
- {graphban_cli-0.8.5 → graphban_cli-0.8.6}/tests/test_swamp.py +0 -0
|
@@ -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
|
|
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
|
|
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
|