reviewloop 0.3.2__tar.gz → 0.3.4__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 (46) hide show
  1. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/skills/reviewloop/SKILL.md +21 -6
  2. {reviewloop-0.3.2/src/reviewloop_cli/templates → reviewloop-0.3.4/.claude/skills/reviewloop}/scripts/review-comments.sh +5 -5
  3. {reviewloop-0.3.2/src/reviewloop_cli/templates → reviewloop-0.3.4/.claude/skills/reviewloop}/scripts/review-wait.sh +1 -1
  4. {reviewloop-0.3.2 → reviewloop-0.3.4}/.github/workflows/release.yml +4 -4
  5. {reviewloop-0.3.2 → reviewloop-0.3.4}/PKG-INFO +1 -1
  6. {reviewloop-0.3.2 → reviewloop-0.3.4}/pyproject.toml +1 -1
  7. {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/templates/SKILL.md +21 -6
  8. {reviewloop-0.3.2/.claude/skills/reviewloop → reviewloop-0.3.4/src/reviewloop_cli/templates}/scripts/review-comments.sh +5 -5
  9. {reviewloop-0.3.2/.claude/skills/reviewloop → reviewloop-0.3.4/src/reviewloop_cli/templates}/scripts/review-wait.sh +1 -1
  10. {reviewloop-0.3.2 → reviewloop-0.3.4}/uv.lock +1 -1
  11. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.analyze.md +0 -0
  12. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.checklist.md +0 -0
  13. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.clarify.md +0 -0
  14. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.constitution.md +0 -0
  15. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.implement.md +0 -0
  16. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.plan.md +0 -0
  17. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.specify.md +0 -0
  18. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.tasks.md +0 -0
  19. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/commands/speckit.taskstoissues.md +0 -0
  20. {reviewloop-0.3.2 → reviewloop-0.3.4}/.claude/settings.json +0 -0
  21. {reviewloop-0.3.2 → reviewloop-0.3.4}/.coderabbit.yaml +0 -0
  22. {reviewloop-0.3.2 → reviewloop-0.3.4}/.github/workflows/ci.yml +0 -0
  23. {reviewloop-0.3.2 → reviewloop-0.3.4}/.gitignore +0 -0
  24. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/memory/constitution.md +0 -0
  25. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  26. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/common.sh +0 -0
  27. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/create-new-feature.sh +0 -0
  28. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/setup-plan.sh +0 -0
  29. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/scripts/bash/update-agent-context.sh +0 -0
  30. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/agent-file-template.md +0 -0
  31. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/checklist-template.md +0 -0
  32. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/plan-template.md +0 -0
  33. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/spec-template.md +0 -0
  34. {reviewloop-0.3.2 → reviewloop-0.3.4}/.specify/templates/tasks-template.md +0 -0
  35. {reviewloop-0.3.2 → reviewloop-0.3.4}/.vscode/extensions.json +0 -0
  36. {reviewloop-0.3.2 → reviewloop-0.3.4}/CLAUDE.md +0 -0
  37. {reviewloop-0.3.2 → reviewloop-0.3.4}/LICENSE +0 -0
  38. {reviewloop-0.3.2 → reviewloop-0.3.4}/README.md +0 -0
  39. {reviewloop-0.3.2 → reviewloop-0.3.4}/README_PYPI.md +0 -0
  40. {reviewloop-0.3.2 → reviewloop-0.3.4}/assets/review_loop.webp +0 -0
  41. {reviewloop-0.3.2 → reviewloop-0.3.4}/renovate.json +0 -0
  42. {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/__init__.py +0 -0
  43. {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/cli.py +0 -0
  44. {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/init.py +0 -0
  45. {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/py.typed +0 -0
  46. {reviewloop-0.3.2 → reviewloop-0.3.4}/src/reviewloop_cli/templates/__init__.py +0 -0
@@ -10,9 +10,20 @@ allowed-tools:
10
10
 
11
11
  ## Autonomous Review Loop
12
12
 
13
+ **CRITICAL: Never merge a PR unless the user explicitly asks you to.**
14
+
13
15
  This is an automated review loop. Follow these steps:
14
16
 
15
- ### 1. Wait for CI to complete
17
+ ### 1. Prepare branch and PR
18
+
19
+ Before starting the review cycle, ensure all changes are committed, pushed, and a PR exists.
20
+
21
+ 1. Verify you are NOT on the default branch. If on the default branch, inform the user and stop.
22
+ 2. If there are uncommitted changes (staged or unstaged), commit them with a descriptive message. Skip if the working directory is clean.
23
+ 3. Push commits to the remote. If no upstream tracking branch exists, push with the `-u` flag. Skip if already up-to-date.
24
+ 4. Check if a PR exists for the current branch (`gh pr view`). If none exists, create one with `gh pr create --fill`.
25
+
26
+ ### 2. Wait for CI to complete
16
27
 
17
28
  Run `.claude/skills/reviewloop/scripts/review-wait.sh` to poll for CI completion.
18
29
 
@@ -21,7 +32,7 @@ Run `.claude/skills/reviewloop/scripts/review-wait.sh` to poll for CI completion
21
32
  - Times out after 10 minutes (configurable with `--timeout=SECONDS`)
22
33
  - Exits immediately if no CI is in progress
23
34
 
24
- ### 2. Fetch and address comments
35
+ ### 3. Fetch and address comments
25
36
 
26
37
  Once CI completes:
27
38
 
@@ -32,14 +43,18 @@ Once CI completes:
32
43
  5. For inline threads: resolve via the `gh api graphql` mutation shown in the file (whether addressed or rejected)
33
44
  6. For general review comments: react with thumbs-up via the mutation shown in the file to mark as processed (even if no action was needed)
34
45
 
35
- ### 3. Verify and commit
46
+ ### 4. Verify and commit
36
47
 
37
48
  1. Run `.claude/skills/reviewloop/scripts/review-comments.sh` again to verify no unresolved comments remain
38
49
  2. Run your project's linting and type-checking commands to ensure code quality
39
50
  3. Commit and push changes
40
51
 
41
- ### 4. Loop
52
+ ### 5. Loop
53
+
54
+ Go back to step 2 - wait for the next review triggered by the push.
42
55
 
43
- Go back to step 1 - wait for the next review triggered by the push.
56
+ **Exit condition**: When `.claude/skills/reviewloop/scripts/review-comments.sh` shows no comments, provide a summary with:
44
57
 
45
- **Exit condition**: When `.claude/skills/reviewloop/scripts/review-comments.sh` shows no comments. Give a brief high-level summary of what was addressed.
58
+ 1. **PR link**: The full clickable URL of the PR (from step 1 or via `gh pr view --json url -q '.url'`)
59
+ 2. **Overall PR summary**: A brief high-level summary of what the PR accomplishes overall
60
+ 3. **Review loop changes**: A summary of what was specifically changed during the review loop to address reviewer comments. If no changes were made during the review loop, state that no changes were needed.
@@ -26,7 +26,7 @@ get_repo_info() {
26
26
  }
27
27
 
28
28
  get_current_user() {
29
- gh api user -q '.login' 2>&1 || die "Failed to get current user"
29
+ gh api user -q '.login' 2>&1 | tr -d '\r' || die "Failed to get current user"
30
30
  }
31
31
 
32
32
  run_graphql() {
@@ -63,8 +63,8 @@ main() {
63
63
 
64
64
  local repo_info owner repo pr_number current_user
65
65
  repo_info=$(get_repo_info)
66
- owner=$(echo "$repo_info" | jq -r '.owner.login')
67
- repo=$(echo "$repo_info" | jq -r '.name')
66
+ owner=$(echo "$repo_info" | jq -r '.owner.login' | tr -d '\r')
67
+ repo=$(echo "$repo_info" | jq -r '.name' | tr -d '\r')
68
68
  pr_number=$(get_pr_number)
69
69
  current_user=$(get_current_user)
70
70
 
@@ -135,7 +135,7 @@ EOF
135
135
  while IFS= read -r thread; do
136
136
  print_thread "$thread" "$is_first"
137
137
  is_first=false
138
- done < <(echo "$unresolved_threads" | jq -c '.[]')
138
+ done < <(echo "$unresolved_threads" | jq -c '.[]' | tr -d '\r')
139
139
  fi
140
140
 
141
141
  if [[ "$review_count" -gt 0 ]]; then
@@ -149,7 +149,7 @@ EOF
149
149
  while IFS= read -r review; do
150
150
  print_review "$review" "$is_first"
151
151
  is_first=false
152
- done < <(echo "$review_bodies" | jq -c '.[]')
152
+ done < <(echo "$review_bodies" | jq -c '.[]' | tr -d '\r')
153
153
  fi
154
154
  } > .reviews/prComments.md
155
155
 
@@ -32,7 +32,7 @@ get_ci_state() {
32
32
  checks_json=$(gh pr checks "$pr_number" --json name,state 2>&1) || die "Failed to fetch PR checks: $checks_json"
33
33
 
34
34
  # Get all check states
35
- states=$(echo "$checks_json" | jq -r '[.[] | .state] | if length == 0 then "" else .[] end' 2>/dev/null)
35
+ states=$(echo "$checks_json" | jq -r '[.[] | .state] | if length == 0 then "" else .[] end' 2>/dev/null | tr -d '\r')
36
36
 
37
37
  [[ -z "$states" ]] && return
38
38
 
@@ -38,7 +38,7 @@ jobs:
38
38
  python -c "from importlib.metadata import version; print(version('reviewloop'))"
39
39
 
40
40
  - name: Store distributions
41
- uses: actions/upload-artifact@v4
41
+ uses: actions/upload-artifact@v6
42
42
  with:
43
43
  name: python-package-distributions
44
44
  path: dist/
@@ -55,7 +55,7 @@ jobs:
55
55
  actions: read
56
56
  steps:
57
57
  - name: Download distributions
58
- uses: actions/download-artifact@v4
58
+ uses: actions/download-artifact@v7
59
59
  with:
60
60
  name: python-package-distributions
61
61
  path: dist/
@@ -78,7 +78,7 @@ jobs:
78
78
  actions: read
79
79
  steps:
80
80
  - name: Download distributions
81
- uses: actions/download-artifact@v4
81
+ uses: actions/download-artifact@v7
82
82
  with:
83
83
  name: python-package-distributions
84
84
  path: dist/
@@ -100,7 +100,7 @@ jobs:
100
100
  - uses: actions/checkout@v6
101
101
 
102
102
  - name: Download distributions
103
- uses: actions/download-artifact@v4
103
+ uses: actions/download-artifact@v7
104
104
  with:
105
105
  name: python-package-distributions
106
106
  path: dist/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reviewloop
3
- Version: 0.3.2
3
+ Version: 0.3.4
4
4
  Summary: Autonomous review loop - automates the review-fix-push cycle
5
5
  Project-URL: Homepage, https://github.com/fabianboth/autonomous-review-loop
6
6
  Project-URL: Repository, https://github.com/fabianboth/autonomous-review-loop.git
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "reviewloop"
7
- version = "0.3.2"
7
+ version = "0.3.4"
8
8
  description = "Autonomous review loop - automates the review-fix-push cycle"
9
9
  readme = "README_PYPI.md"
10
10
  license = "MIT"
@@ -10,9 +10,20 @@ allowed-tools:
10
10
 
11
11
  ## Autonomous Review Loop
12
12
 
13
+ **CRITICAL: Never merge a PR unless the user explicitly asks you to.**
14
+
13
15
  This is an automated review loop. Follow these steps:
14
16
 
15
- ### 1. Wait for CI to complete
17
+ ### 1. Prepare branch and PR
18
+
19
+ Before starting the review cycle, ensure all changes are committed, pushed, and a PR exists.
20
+
21
+ 1. Verify you are NOT on the default branch. If on the default branch, inform the user and stop.
22
+ 2. If there are uncommitted changes (staged or unstaged), commit them with a descriptive message. Skip if the working directory is clean.
23
+ 3. Push commits to the remote. If no upstream tracking branch exists, push with the `-u` flag. Skip if already up-to-date.
24
+ 4. Check if a PR exists for the current branch (`gh pr view`). If none exists, create one with `gh pr create --fill`.
25
+
26
+ ### 2. Wait for CI to complete
16
27
 
17
28
  Run `.claude/skills/reviewloop/scripts/review-wait.sh` to poll for CI completion.
18
29
 
@@ -21,7 +32,7 @@ Run `.claude/skills/reviewloop/scripts/review-wait.sh` to poll for CI completion
21
32
  - Times out after 10 minutes (configurable with `--timeout=SECONDS`)
22
33
  - Exits immediately if no CI is in progress
23
34
 
24
- ### 2. Fetch and address comments
35
+ ### 3. Fetch and address comments
25
36
 
26
37
  Once CI completes:
27
38
 
@@ -32,14 +43,18 @@ Once CI completes:
32
43
  5. For inline threads: resolve via the `gh api graphql` mutation shown in the file (whether addressed or rejected)
33
44
  6. For general review comments: react with thumbs-up via the mutation shown in the file to mark as processed (even if no action was needed)
34
45
 
35
- ### 3. Verify and commit
46
+ ### 4. Verify and commit
36
47
 
37
48
  1. Run `.claude/skills/reviewloop/scripts/review-comments.sh` again to verify no unresolved comments remain
38
49
  2. Run your project's linting and type-checking commands to ensure code quality
39
50
  3. Commit and push changes
40
51
 
41
- ### 4. Loop
52
+ ### 5. Loop
53
+
54
+ Go back to step 2 - wait for the next review triggered by the push.
42
55
 
43
- Go back to step 1 - wait for the next review triggered by the push.
56
+ **Exit condition**: When `.claude/skills/reviewloop/scripts/review-comments.sh` shows no comments, provide a summary with:
44
57
 
45
- **Exit condition**: When `.claude/skills/reviewloop/scripts/review-comments.sh` shows no comments. Give a brief high-level summary of what was addressed.
58
+ 1. **PR link**: The full clickable URL of the PR (from step 1 or via `gh pr view --json url -q '.url'`)
59
+ 2. **Overall PR summary**: A brief high-level summary of what the PR accomplishes overall
60
+ 3. **Review loop changes**: A summary of what was specifically changed during the review loop to address reviewer comments. If no changes were made during the review loop, state that no changes were needed.
@@ -26,7 +26,7 @@ get_repo_info() {
26
26
  }
27
27
 
28
28
  get_current_user() {
29
- gh api user -q '.login' 2>&1 || die "Failed to get current user"
29
+ gh api user -q '.login' 2>&1 | tr -d '\r' || die "Failed to get current user"
30
30
  }
31
31
 
32
32
  run_graphql() {
@@ -63,8 +63,8 @@ main() {
63
63
 
64
64
  local repo_info owner repo pr_number current_user
65
65
  repo_info=$(get_repo_info)
66
- owner=$(echo "$repo_info" | jq -r '.owner.login')
67
- repo=$(echo "$repo_info" | jq -r '.name')
66
+ owner=$(echo "$repo_info" | jq -r '.owner.login' | tr -d '\r')
67
+ repo=$(echo "$repo_info" | jq -r '.name' | tr -d '\r')
68
68
  pr_number=$(get_pr_number)
69
69
  current_user=$(get_current_user)
70
70
 
@@ -135,7 +135,7 @@ EOF
135
135
  while IFS= read -r thread; do
136
136
  print_thread "$thread" "$is_first"
137
137
  is_first=false
138
- done < <(echo "$unresolved_threads" | jq -c '.[]')
138
+ done < <(echo "$unresolved_threads" | jq -c '.[]' | tr -d '\r')
139
139
  fi
140
140
 
141
141
  if [[ "$review_count" -gt 0 ]]; then
@@ -149,7 +149,7 @@ EOF
149
149
  while IFS= read -r review; do
150
150
  print_review "$review" "$is_first"
151
151
  is_first=false
152
- done < <(echo "$review_bodies" | jq -c '.[]')
152
+ done < <(echo "$review_bodies" | jq -c '.[]' | tr -d '\r')
153
153
  fi
154
154
  } > .reviews/prComments.md
155
155
 
@@ -32,7 +32,7 @@ get_ci_state() {
32
32
  checks_json=$(gh pr checks "$pr_number" --json name,state 2>&1) || die "Failed to fetch PR checks: $checks_json"
33
33
 
34
34
  # Get all check states
35
- states=$(echo "$checks_json" | jq -r '[.[] | .state] | if length == 0 then "" else .[] end' 2>/dev/null)
35
+ states=$(echo "$checks_json" | jq -r '[.[] | .state] | if length == 0 then "" else .[] end' 2>/dev/null | tr -d '\r')
36
36
 
37
37
  [[ -z "$states" ]] && return
38
38
 
@@ -86,7 +86,7 @@ wheels = [
86
86
 
87
87
  [[package]]
88
88
  name = "reviewloop"
89
- version = "0.3.1"
89
+ version = "0.3.4"
90
90
  source = { editable = "." }
91
91
  dependencies = [
92
92
  { name = "readchar" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes