@erclx/aitk 0.86.0 → 0.86.1
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.
|
@@ -17,7 +17,7 @@ Without this skill, a pull request is reviewed only by the session that wrote it
|
|
|
17
17
|
- Scope a later pass to the commits added since the prior one, once that commit is confirmed to still reach the head
|
|
18
18
|
- Apply the integration, contract, and consumer lenses a self-review structurally cannot
|
|
19
19
|
- Post the closing pass even with nothing to report, since a review left unanswered reads as one nobody closed
|
|
20
|
-
- Key the body file on
|
|
20
|
+
- Key the body file on the pull request number and the head commit, and on the response it answers once the head repeats, so no two passes overwrite each other
|
|
21
21
|
- Scan the comment for banned characters and internal phase labels before posting, since a finding phrased against a phase label reaches a reader with no task board
|
|
22
22
|
|
|
23
23
|
## Must not
|
|
@@ -32,6 +32,7 @@ Without this skill, a pull request is reviewed only by the session that wrote it
|
|
|
32
32
|
|
|
33
33
|
- No open pull request for the target branch: stop and route to the local review skill
|
|
34
34
|
- The fetch of the pull request head fails: stop rather than falling through to a full pass
|
|
35
|
+
- The head repeats with no response since the prior pass: stop rather than posting a body restating one the folder holds
|
|
35
36
|
|
|
36
37
|
## Out of scope
|
|
37
38
|
|
|
@@ -95,6 +95,20 @@ Write the comment to `.claude/.tmp/pr-review/body-<number>-<short-sha>.md`. The
|
|
|
95
95
|
|
|
96
96
|
Derive both segments from Step 1. Never pick a suffix by hand, and never reuse a name the folder already holds.
|
|
97
97
|
|
|
98
|
+
When `<prior-oid>` from Step 2 equals `headRefOid`, the head repeats and the folder already holds `body-<number>-<short-sha>.md`. Add a third segment taking the id of the `## Review response` comment this pass answers, giving `body-<number>-<short-sha>-r<comment-id>.md`. That satisfies both prohibitions above rather than carving an exception into either.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
gh pr view <number> --json reviews,comments --jq '([.reviews[] | select(.body // "" | split("\n")[0] | rtrimstr("\r") | . == "## Review" or . == "## Review closed")] | last | .submittedAt) as $prior | [.comments[] | select(.body // "" | split("\n")[0] | rtrimstr("\r") | . == "## Review response") | select(.createdAt > $prior)] | last | .url // empty | split("-") | last'
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Scope the responses to those newer than the prior pass, never to every response the thread carries. A pass answering the newest response and a pass answering an older one derive the same third segment, so an unscoped read hands a re-run after a close-out the name its own prior pass already wrote. That is the collision this case exists to prevent, reached without a rebase or an error.
|
|
105
|
+
|
|
106
|
+
Read the number off `.url`. The `id` field carries a GraphQL node id, which the thread never displays. Keep the `// empty` guard, since `split` aborts jq on the null an empty selection returns, and an aborted command reaches the session as an error rather than as the empty result the stop below reads.
|
|
107
|
+
|
|
108
|
+
An empty result means no response arrived since the prior pass, so this pass would restate a body the folder already holds. Stop: `❌ No response since the prior pass on <short-sha>. Nothing new to review.`
|
|
109
|
+
|
|
110
|
+
The response is also the whole read on a repeated head. Step 2 resolves an empty range, because a commit is its own ancestor and `<prior-oid>..<headRefOid>` spans nothing, so the delta cannot answer whether a prior finding landed. Read that comment for what the worker changed or accepted, and treat an accepted finding as closed rather than restating it.
|
|
111
|
+
|
|
98
112
|
The comment is a rendered-for-human GitHub surface, so follow `.claude/standards/prose.md` for voice, or `${CLAUDE_SKILL_DIR}/../../standards/prose.md` when the project does not have it: cut editorializing, and keep every sentence load-bearing. Match this shape on a first pass:
|
|
99
113
|
|
|
100
114
|
```markdown
|
package/docs/operating-model.md
CHANGED
|
@@ -41,7 +41,7 @@ One feature travels this path end to end.
|
|
|
41
41
|
3. The human opens a worker worktree with `claude-worktree` and runs `claude-autoship` against the plan. The worker builds, self-checks, opens a PR, and stops at the PR boundary.
|
|
42
42
|
4. Orchestrator reviews the PR with `claude-pr-review` and posts findings to it.
|
|
43
43
|
5. Worker addresses the findings with `claude-address-review`, rebases onto `origin/main` when a sibling landed first and left the branch unable to merge, then pushes a follow-up.
|
|
44
|
-
6. Orchestrator closes the review out with `claude-pr-review` again. The second pass reads only the commits the follow-up added, and posts under `## Review closed` when it finds nothing open or under `## Review` when it does, so a reader learns the state from the heading. Repeat from step 5 until the review closes.
|
|
44
|
+
6. Orchestrator closes the review out with `claude-pr-review` again. The second pass reads only the commits the follow-up added, or the worker's response alone when the follow-up added none, and posts under `## Review closed` when it finds nothing open or under `## Review` when it does, so a reader learns the state from the heading. Repeat from step 5 until the review closes.
|
|
45
45
|
7. The human reads the result and merges. The orchestrator tells any trailing worker whose branch shares a seam with the merged one to run `claude-address-review`, which rebases whether or not the review left anything open.
|
|
46
46
|
|
|
47
47
|
There is no loop construct here. Each worker is a single build that halts at the
|
|
@@ -68,6 +68,13 @@ the PR. `claude-address-review` reads them back, fixes each, replies or resolves
|
|
|
68
68
|
the threads, and pushes a follow-up. `claude-pr-review` then runs again, reading
|
|
69
69
|
only what the follow-up added.
|
|
70
70
|
|
|
71
|
+
A finding answered without a commit leaves the head where the first pass read it,
|
|
72
|
+
which a gitignored record and a finding accepted as recorded both produce. The
|
|
73
|
+
close-out is still owed there, since the newest heading is what tells an operator
|
|
74
|
+
whether the branch is blocked, so the pass reads the worker's response rather than
|
|
75
|
+
a delta and names its body from that response instead of from a tree that did not
|
|
76
|
+
change.
|
|
77
|
+
|
|
71
78
|
A branch that stopped merging while the review was open is the worker's problem
|
|
72
79
|
to close. `claude-address-review` rebases onto `origin/main` between the fixes
|
|
73
80
|
and the push, so one force-push carries both and the reviewer reads one delta.
|