sase-github 0.2.7__tar.gz → 0.2.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.
Files changed (44) hide show
  1. sase_github-0.2.8/.release-please-manifest.json +3 -0
  2. {sase_github-0.2.7 → sase_github-0.2.8}/CHANGELOG.md +7 -0
  3. {sase_github-0.2.7 → sase_github-0.2.8}/PKG-INFO +1 -1
  4. {sase_github-0.2.7 → sase_github-0.2.8}/pyproject.toml +1 -1
  5. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/scripts/gh_setup.py +7 -1
  6. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/xprompts/gh.yml +1 -0
  7. {sase_github-0.2.7 → sase_github-0.2.8}/tests/test_gh_workspace_claims.py +6 -2
  8. sase_github-0.2.7/.release-please-manifest.json +0 -3
  9. {sase_github-0.2.7 → sase_github-0.2.8}/.github/workflows/ci.yml +0 -0
  10. {sase_github-0.2.7 → sase_github-0.2.8}/.github/workflows/pr-title.yml +0 -0
  11. {sase_github-0.2.7 → sase_github-0.2.8}/.github/workflows/publish.yml +0 -0
  12. {sase_github-0.2.7 → sase_github-0.2.8}/.sase_beads/beads.db +0 -0
  13. {sase_github-0.2.7 → sase_github-0.2.8}/.sase_beads/config.json +0 -0
  14. {sase_github-0.2.7 → sase_github-0.2.8}/.sase_beads/issues.jsonl +0 -0
  15. {sase_github-0.2.7 → sase_github-0.2.8}/CLAUDE.md +0 -0
  16. {sase_github-0.2.7 → sase_github-0.2.8}/Justfile +0 -0
  17. {sase_github-0.2.7 → sase_github-0.2.8}/LICENSE +0 -0
  18. {sase_github-0.2.7 → sase_github-0.2.8}/README.md +0 -0
  19. {sase_github-0.2.7 → sase_github-0.2.8}/docs/architecture.md +0 -0
  20. {sase_github-0.2.7 → sase_github-0.2.8}/docs/configuration.md +0 -0
  21. {sase_github-0.2.7 → sase_github-0.2.8}/docs/xprompts.md +0 -0
  22. {sase_github-0.2.7 → sase_github-0.2.8}/release-please-config.json +0 -0
  23. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/__init__.py +0 -0
  24. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/config.py +0 -0
  25. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/default_config.yml +0 -0
  26. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/errors.py +0 -0
  27. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/plugin.py +0 -0
  28. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/scripts/__init__.py +0 -0
  29. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/scripts/new_pr_desc_get_context.py +0 -0
  30. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/task_types.py +0 -0
  31. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/workspace_plugin.py +0 -0
  32. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/xprompts/new_pr_desc.yml +0 -0
  33. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/xprompts/pr_diff.yml +0 -0
  34. {sase_github-0.2.7 → sase_github-0.2.8}/src/sase_github/xprompts/prdd.yml +0 -0
  35. {sase_github-0.2.7 → sase_github-0.2.8}/tests/__init__.py +0 -0
  36. {sase_github-0.2.7 → sase_github-0.2.8}/tests/test_ci_install_contract.py +0 -0
  37. {sase_github-0.2.7 → sase_github-0.2.8}/tests/test_config.py +0 -0
  38. {sase_github-0.2.7 → sase_github-0.2.8}/tests/test_github_issues.py +0 -0
  39. {sase_github-0.2.7 → sase_github-0.2.8}/tests/test_github_plugin.py +0 -0
  40. {sase_github-0.2.7 → sase_github-0.2.8}/tests/test_github_pull_requests.py +0 -0
  41. {sase_github-0.2.7 → sase_github-0.2.8}/tests/test_submit_with_recorded_pr.py +0 -0
  42. {sase_github-0.2.7 → sase_github-0.2.8}/tests/test_task_types.py +0 -0
  43. {sase_github-0.2.7 → sase_github-0.2.8}/tests/test_workspace_plugin.py +0 -0
  44. {sase_github-0.2.7 → sase_github-0.2.8}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.2.8"
3
+ }
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.8](https://github.com/sase-org/sase-github/compare/v0.2.7...v0.2.8) (2026-08-29)
4
+
5
+
6
+ ### Features
7
+
8
+ * **gh:** mark runner-bound workspace allocations ([f4663ae](https://github.com/sase-org/sase-github/commit/f4663ae526929b23378372005662c20b495bd0f7))
9
+
3
10
  ## [0.2.7](https://github.com/sase-org/sase-github/compare/v0.2.6...v0.2.7) (2026-08-28)
4
11
 
5
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sase-github
3
- Version: 0.2.7
3
+ Version: 0.2.8
4
4
  Summary: GitHub VCS plugin for sase
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sase-github"
7
- version = "0.2.7"
7
+ version = "0.2.8"
8
8
  description = "GitHub VCS plugin for sase"
9
9
  requires-python = ">=3.12"
10
10
  license = "MIT"
@@ -11,6 +11,7 @@ from sase.running_field import (
11
11
  find_runner_numbered_workspace,
12
12
  get_claimed_workspaces,
13
13
  release_workspace,
14
+ runner_has_placeholder_workspace,
14
15
  )
15
16
  from sase.sdd.store import materialize_sdd_store
16
17
  from sase.workspace_provider import resolve_ref
@@ -44,6 +45,7 @@ def main(
44
45
  # then incorrectly remove the RUNNING entry while the real workflow
45
46
  # (the parent process) is still alive.
46
47
  pid = os.getppid()
48
+ runner_bound_workspace = False
47
49
 
48
50
  # Skip claiming when pre-allocated — the launcher already claimed the workspace
49
51
  pre_allocated = os.environ.get("SASE_GH_PRE_ALLOCATED") == "1"
@@ -70,6 +72,9 @@ def main(
70
72
  workspace_num, workspace_dir = adopted
71
73
  pre_allocated = True
72
74
  else:
75
+ runner_bound_workspace = runner_has_placeholder_workspace(
76
+ project_file, pid=pid
77
+ )
73
78
  workspace_num, workspace_dir = _claim_next_workspace(
74
79
  project_file=project_file,
75
80
  primary_workspace_dir=resolved.primary_workspace_dir,
@@ -131,8 +136,9 @@ def main(
131
136
  print(f"checkout_target={resolved.checkout_target}")
132
137
  print(f"primary_workspace_dir={resolved.primary_workspace_dir}")
133
138
  # Don't release pre-allocated workspaces — the launcher handles that
134
- should_release = release and not pre_allocated
139
+ should_release = release and not pre_allocated and not runner_bound_workspace
135
140
  print(f"should_release={'true' if should_release else 'false'}")
141
+ print(f"runner_bound_workspace={'true' if runner_bound_workspace else 'false'}")
136
142
  print(f"_chdir={workspace_dir}")
137
143
  print(f"meta_workspace={workspace_num}")
138
144
  print(f"workflow_name={workflow_name}")
@@ -37,6 +37,7 @@ steps:
37
37
  checkout_target: word
38
38
  primary_workspace_dir: path
39
39
  should_release: bool
40
+ runner_bound_workspace: bool
40
41
  workflow_name: word
41
42
 
42
43
  - name: prepare
@@ -608,7 +608,7 @@ class TestGhSetupAdoptsRunnerWorkspace:
608
608
  assert claims[0].pid == os.getppid()
609
609
  assert read_occupant_record(str(workspace_dir)) is None
610
610
 
611
- def test_does_not_adopt_when_parent_only_holds_placeholder(
611
+ def test_parent_placeholder_allocation_is_runner_bound(
612
612
  self, tmp_path: Path, capsys: pytest.CaptureFixture[str]
613
613
  ) -> None:
614
614
  placeholder = WorkspaceClaim(
@@ -635,9 +635,13 @@ class TestGhSetupAdoptsRunnerWorkspace:
635
635
  claim.workspace_num for claim in get_claimed_workspaces(project_file)
636
636
  }
637
637
  assert claimed_nums == {0, 10}
638
+ claims = get_claimed_workspaces(project_file)
639
+ allocated = next(claim for claim in claims if claim.workspace_num == 10)
640
+ assert allocated.pid == os.getppid()
638
641
  out = capsys.readouterr().out
639
642
  assert "workspace_num=10" in out
640
- assert "should_release=true" in out
643
+ assert "should_release=false" in out
644
+ assert "runner_bound_workspace=true" in out
641
645
 
642
646
  def test_pinned_n_does_not_adopt_parent_claim(
643
647
  self, tmp_path: Path, capsys: pytest.CaptureFixture[str]
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.2.7"
3
- }
File without changes
File without changes
File without changes
File without changes
File without changes