@next-friday/create-app 9.5.1 → 9.6.0
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.
- package/package.json +1 -1
- package/templates/base/SETUP.md +3 -1
- package/templates/base/plugins/sdlc/claude-code/hooks/check-reply-shape.sh +45 -1
- package/templates/base/plugins/sdlc/claude-code/hooks/hooks.json +11 -0
- package/templates/base/plugins/sdlc/claude-code/skills/sdlc-mode/SKILL.md +1 -1
- package/templates/base/plugins/sdlc/claude-code/skills/sdlc-mode/playbooks/maintain.md +1 -1
- package/templates/base/plugins/sdlc/claude-code/skills/sdlc-mode/playbooks/review.md +1 -1
- package/templates/base/plugins/sdlc/claude-code/skills/setup-sdlc/SKILL.md +2 -0
- package/templates/base/plugins/sdlc/cursor/hooks/check-reply-shape.sh +45 -1
- package/templates/base/plugins/sdlc/cursor/hooks/hooks.json +5 -0
- package/templates/base/plugins/sdlc/cursor/skills/sdlc-mode/SKILL.md +1 -1
- package/templates/base/plugins/sdlc/cursor/skills/sdlc-mode/playbooks/maintain.md +1 -1
- package/templates/base/plugins/sdlc/cursor/skills/sdlc-mode/playbooks/review.md +1 -1
- package/templates/base/plugins/sdlc/cursor/skills/setup-sdlc/SKILL.md +2 -0
package/package.json
CHANGED
package/templates/base/SETUP.md
CHANGED
|
@@ -43,6 +43,8 @@ In `.github/CODEOWNERS`, add these lines in this order. GitHub uses the last mat
|
|
|
43
43
|
|
|
44
44
|
Replace every owner above with a GitHub user or team that has write access to the repository. Also replace the owner placeholder in `.github/zizmor.yml`.
|
|
45
45
|
|
|
46
|
+
Code owners need: write access to the repository for each owner; for a team, a visible team that itself has write access; and, in a private repository, GitHub Pro, Team, or Enterprise ([code owners](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners)). Until the ruleset of step 3 requires their review, a code owner is asked for a review and a pull request merges without it.
|
|
47
|
+
|
|
46
48
|
Replace `security@example.com` in `SECURITY.md` with the contact the security policy owner names, such as the security email of the company or of the client.
|
|
47
49
|
|
|
48
50
|
**Check:** on GitHub, open `.github/CODEOWNERS`; GitHub shows no errors in the file. `grep example.com SECURITY.md` prints nothing.
|
|
@@ -73,7 +75,7 @@ Replace `security@example.com` in `SECURITY.md` with the contact the security po
|
|
|
73
75
|
|
|
74
76
|
- **Code Review:** in [**Admin settings → Claude Code**](https://claude.ai/admin-settings/claude-code#code-review), turn on **Allow code review**, install the Claude GitHub App, and add this repository ([set up Code Review](https://code.claude.com/docs/en/code-review-setup)). It needs a Team or Enterprise plan ([availability](https://code.claude.com/docs/en/code-review#availability)). Keep **Review runs** at **After every push**, the default, so every push to a pull request gets a review. Reviews run on Anthropic's infrastructure, so the repository has no review workflow. Anyone with write access can also comment `@claude review` on a pull request to start a review ([comment commands](https://code.claude.com/docs/en/code-review-pull-requests#comment-commands)).
|
|
75
77
|
- **Managed settings:** deploy the non-negotiable settings and hooks as [managed settings](https://code.claude.com/docs/en/settings), tailored from the example in `.claude/managed-settings.example.json`. Engineers cannot override them. When `strictKnownMarketplaces` is set, as in the example, add the marketplace `next-friday-plugins` of this project to it, or Claude Code does not register the project's plugin.
|
|
76
|
-
- **Monitoring:** turn on the [OpenTelemetry export](https://code.claude.com/docs/en/monitoring-usage).
|
|
78
|
+
- **Monitoring:** turn on the [OpenTelemetry export](https://code.claude.com/docs/en/monitoring-usage). It needs an OpenTelemetry collector or backend that the organization runs, and its endpoint. Set `CLAUDE_CODE_ENABLE_TELEMETRY`, the exporters, and `OTEL_EXPORTER_OTLP_ENDPOINT` in managed settings, or each engineer sets them in a shell or in `~/.claude/settings.json`: Claude Code ignores these variables in the repository's `.claude/settings.json`, so the project cannot turn the export on.
|
|
77
79
|
|
|
78
80
|
**Check:** the test pull request gets a **Claude Code Review** check run within a few minutes.
|
|
79
81
|
|
|
@@ -3,8 +3,44 @@ command -v jq > /dev/null || exit 0
|
|
|
3
3
|
mode=${1:-}
|
|
4
4
|
input=$(cat)
|
|
5
5
|
state_directory=${TMPDIR:-/tmp}/sdlc-reply-shape
|
|
6
|
-
conversation=$(printf '%s' "$input" | jq -r '.conversation_id // ""'
|
|
6
|
+
conversation=$(printf '%s' "$input" | jq -r '.conversation_id // .session_id // ""')
|
|
7
|
+
conversation=${conversation:+$(printf '%s' "$conversation" | cksum | tr ' ' '-')}
|
|
8
|
+
project=$(printf '%s' "$input" | jq -r '.cwd // .workspace_roots[0] // ""')
|
|
9
|
+
snapshot_file=$state_directory/$conversation.files
|
|
10
|
+
|
|
11
|
+
# A copy of the index and a scratch object store keep the project's own Git data unwritten.
|
|
12
|
+
snapshot() {
|
|
13
|
+
[ -n "$project" ] && [ -n "$conversation" ] || return 1
|
|
14
|
+
repository=$(git -C "$project" rev-parse --show-toplevel 2> /dev/null) || return 1
|
|
15
|
+
index=$(git -C "$repository" rev-parse --git-path index) || return 1
|
|
16
|
+
objects=$(git -C "$repository" rev-parse --git-path objects) || return 1
|
|
17
|
+
case $index in /*) ;; *) index=$repository/$index ;; esac
|
|
18
|
+
case $objects in /*) ;; *) objects=$repository/$objects ;; esac
|
|
19
|
+
scratch=$state_directory/$conversation.git
|
|
20
|
+
rm -rf "$scratch"
|
|
21
|
+
mkdir -p "$scratch/objects" || return 1
|
|
22
|
+
cp "$index" "$scratch/index" 2> /dev/null
|
|
23
|
+
content=$(
|
|
24
|
+
export GIT_INDEX_FILE="$scratch/index" GIT_OBJECT_DIRECTORY="$scratch/objects" GIT_ALTERNATE_OBJECT_DIRECTORIES="$objects"
|
|
25
|
+
git -C "$repository" add -A -- ':(top)' ':(top,exclude)intent' 2> /dev/null
|
|
26
|
+
git -C "$repository" ls-files -s -- ':(top)' ':(top,exclude)intent' | cksum
|
|
27
|
+
)
|
|
28
|
+
rm -rf "$scratch"
|
|
29
|
+
printf '%s|%s' "$repository" "$content"
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
changed_since_snapshot() {
|
|
33
|
+
current=$(snapshot) || return 1
|
|
34
|
+
previous=$(cat "$snapshot_file" 2> /dev/null)
|
|
35
|
+
printf '%s' "$current" > "$snapshot_file"
|
|
36
|
+
[ "${previous%|*}" = "${current%|*}" ] && [ "$previous" != "$current" ]
|
|
37
|
+
}
|
|
38
|
+
|
|
7
39
|
case $mode in
|
|
40
|
+
snapshot)
|
|
41
|
+
changed_since_snapshot
|
|
42
|
+
exit 0
|
|
43
|
+
;;
|
|
8
44
|
save)
|
|
9
45
|
text=$(printf '%s' "$input" | jq -r '.text // ""')
|
|
10
46
|
[ -n "$text" ] && [ -n "$conversation" ] || exit 0
|
|
@@ -12,12 +48,16 @@ case $mode in
|
|
|
12
48
|
exit 0
|
|
13
49
|
;;
|
|
14
50
|
followup)
|
|
51
|
+
changed=false
|
|
52
|
+
changed_since_snapshot && changed=true
|
|
15
53
|
[ -n "$conversation" ] && [ -f "$state_directory/$conversation" ] || exit 0
|
|
16
54
|
reply=$(cat "$state_directory/$conversation")
|
|
17
55
|
rm -f "$state_directory/$conversation"
|
|
18
56
|
[ "$(printf '%s' "$input" | jq -r '"\(.status // "") \(.loop_count // "")"')" = 'completed 0' ] || exit 0
|
|
19
57
|
;;
|
|
20
58
|
*)
|
|
59
|
+
changed=false
|
|
60
|
+
changed_since_snapshot && changed=true
|
|
21
61
|
[ "$(printf '%s' "$input" | jq -r '.stop_hook_active // false')" = true ] && exit 0
|
|
22
62
|
reply=$(printf '%s' "$input" | jq -r '.last_assistant_message // ""')
|
|
23
63
|
;;
|
|
@@ -48,6 +88,10 @@ case $last in
|
|
|
48
88
|
*) problems="${problems}End the reply with a line that starts with **Status:**; nothing may follow it. " ;;
|
|
49
89
|
esac
|
|
50
90
|
|
|
91
|
+
if [ "$changed" = true ] && ! printf '%s\n' "$outside_fences" | grep -q '^\*\*Checks:\*\*'; then
|
|
92
|
+
problems="${problems}A file outside intent/ changed in this turn and the reply has no **Checks:** section. Run the checks the project names and add **Checks:** with each command and the lines of its output that show the result, or with each check that could not run and why. "
|
|
93
|
+
fi
|
|
94
|
+
|
|
51
95
|
[ -z "$problems" ] && exit 0
|
|
52
96
|
jq -n --arg mode "$mode" --arg reason "${problems}Send the whole reply again." \
|
|
53
97
|
'if $mode == "followup" then {followup_message:$reason} else {decision:"block",reason:$reason} end'
|
|
@@ -49,7 +49,7 @@ For example, the person writes "who must approve pull request #7 of https://host
|
|
|
49
49
|
|
|
50
50
|
**Steps:** <only when the session has no task-list tool, and never for the `question` playbook. One line for each numbered step of the playbook: `1. <the step, copied word for word>: done | open | skip: <reason>`. When the turn ran more than one playbook, one list for each, under its file name on a line of its own, such as `playbooks/build.md`.>
|
|
51
51
|
|
|
52
|
-
**Checks:** <
|
|
52
|
+
**Checks:** <when a step ran checks, and always when the turn changed a file outside `intent/`, whichever playbook ran. Otherwise never for the `question` playbook. Each command, then the lines of its output that show the result, copied from the output. For a check that could not run, the check and why.>
|
|
53
53
|
|
|
54
54
|
<What the current step produces: the round of questions, or the whole draft. For a question or a request no row fits, the answer.>
|
|
55
55
|
|
|
@@ -13,6 +13,6 @@ This playbook starts from a finding such as an alert, a monitoring ticket, a fai
|
|
|
13
13
|
- Start a subagent that has not seen the diagnosis, give it only the finding, the logs and files you read, and `intent.md`, and have it try to disprove the **Problem** section from the evidence. When you cannot start a subagent, read the evidence again from the first line as if someone else wrote the intent.
|
|
14
14
|
- When a claim does not survive, move it under **Open questions**, and say in the pull request that the confidence check failed and on which claim.
|
|
15
15
|
5. Commit `intent.md` on a new branch, push it, and open a pull request ready for review, as the opening paragraph of `playbooks/open-pr.md` says for branches and pull requests. When you cannot open a pull request from this session, say so and give the pushed branch's name.
|
|
16
|
-
6. **Gate: the service owner triages the finding.** The service owner merges the pull request to fix the finding now,
|
|
16
|
+
6. **Gate: the service owner triages the finding.** The service owner merges the pull request to fix the finding now, comments on it with when the finding is scheduled and leaves it open, or closes it to dismiss it. An open pull request with no such comment is undecided: say so, and never report it as scheduled. A dismissal tunes the bands: the service owner adjusts `bands.yaml` so the same noise raises fewer findings. The service owner asks the product owner to decide a product-facing finding. You do none of these. Report the pull request's URL, keep it green as `playbooks/review.md` says, and wait.
|
|
17
17
|
|
|
18
18
|
**Next:** `playbooks/design.md`; an agent; when the service owner has merged the intent's pull request and a person or a job sends `/sdlc:sdlc-mode` with the intent's path.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Review phase: review the pull request and drive it to green
|
|
2
2
|
|
|
3
|
-
1. Find what to review: the pull request this session just opened, or the pull request or branch the request names. When there is no pull request, or this session cannot reach its host, review the branch's diff against the default branch and put the findings in your reply in place of a comment.
|
|
3
|
+
1. Find what to review: the pull request this session just opened, or the pull request or branch the request names. When there is no pull request, or this session cannot reach its host, review the branch's diff against the default branch and put the findings in your reply in place of a comment. When a pull request exists and this session cannot post on it, the findings are not in the pull request's history: the **Status** line says that the findings are not on the pull request and that a person posts them there, step 3 stays `open`, and you do not report the review as done.
|
|
4
4
|
2. Review with a fresh context. Start a subagent that has not seen the work. Give it only the diff, `REVIEW.md`, the change's `intent/<change>/spec.md` and `plan.md`, and the four policy files in force, found as `playbooks/design.md` step 2 says. When you cannot start a subagent, read the diff again from the first line as if someone else wrote it. The review runs each pass in `REVIEW.md` and reports each finding with its pass, **Important** or **Nit**, `path:line`, and the evidence. A change that is not a fix, an intent, or a spec, and has no `spec.md` or no `plan.md`, is itself a finding.
|
|
5
5
|
3. Post the findings as one comment on the pull request, most severe first. Write "No findings" when there are none. A finding does not decide the merge. When a finding flags a mistake that an earlier review of this project flagged too, its correction goes into the project's agent instructions as part of this review: in the push of step 4, or, on a pull request or a branch this session did not create, as the exact line in this comment.
|
|
6
6
|
4. On a pull request or a branch that this session did not create, change nothing and push nothing. Skip the rest of this step, and in step 5 only read and answer. Otherwise, fix every Important finding. Run the checks the project's agent instructions name, and push. Answer each finding you do not fix with the reason.
|
|
@@ -46,6 +46,8 @@ Do these steps in order. Run again with the same answers, the skill writes the s
|
|
|
46
46
|
- `2. Owners: not done. .github/CODEOWNERS still holds the placeholder.`
|
|
47
47
|
- `3. Repository settings: a person checks this. They live on the host, not in the repository.`
|
|
48
48
|
|
|
49
|
+
Report code owners, the ruleset of the default branch, and the OpenTelemetry export each on a line of its own, with what `SETUP.md` says the step needs, such as `Ruleset of main: a person checks this. It needs a repository admin, and in a private repository GitHub Pro, Team, or Enterprise.` A step that is not done fails no check.
|
|
50
|
+
|
|
49
51
|
7. **Do the `not done` steps an agent can do:** a step whose whole work is editing a file of the repository with values the repository or the request already gives. Do not redo a `done` step. Do not edit a file the project's rules or agent settings reserve for a person, such as rules, hooks, lint, format, and commit configuration, and the agent settings themselves; list it with the exact new text and the file it goes in. Commit nothing. After each step, run its **Check** again and report the result.
|
|
50
52
|
8. **List the steps a person does outside the repository,** each with who does it, from `SETUP.md`, and the full URL of the page where it is done when `SETUP.md` or the repository names one.
|
|
51
53
|
9. **Write the reply** by the reply rules in `../sdlc-mode/SKILL.md`. After them, in this order: the budget line and the four role lines as written; each step of `SETUP.md` with its state; what you did; what a person does.
|
|
@@ -3,8 +3,44 @@ command -v jq > /dev/null || exit 0
|
|
|
3
3
|
mode=${1:-}
|
|
4
4
|
input=$(cat)
|
|
5
5
|
state_directory=${TMPDIR:-/tmp}/sdlc-reply-shape
|
|
6
|
-
conversation=$(printf '%s' "$input" | jq -r '.conversation_id // ""'
|
|
6
|
+
conversation=$(printf '%s' "$input" | jq -r '.conversation_id // .session_id // ""')
|
|
7
|
+
conversation=${conversation:+$(printf '%s' "$conversation" | cksum | tr ' ' '-')}
|
|
8
|
+
project=$(printf '%s' "$input" | jq -r '.cwd // .workspace_roots[0] // ""')
|
|
9
|
+
snapshot_file=$state_directory/$conversation.files
|
|
10
|
+
|
|
11
|
+
# A copy of the index and a scratch object store keep the project's own Git data unwritten.
|
|
12
|
+
snapshot() {
|
|
13
|
+
[ -n "$project" ] && [ -n "$conversation" ] || return 1
|
|
14
|
+
repository=$(git -C "$project" rev-parse --show-toplevel 2> /dev/null) || return 1
|
|
15
|
+
index=$(git -C "$repository" rev-parse --git-path index) || return 1
|
|
16
|
+
objects=$(git -C "$repository" rev-parse --git-path objects) || return 1
|
|
17
|
+
case $index in /*) ;; *) index=$repository/$index ;; esac
|
|
18
|
+
case $objects in /*) ;; *) objects=$repository/$objects ;; esac
|
|
19
|
+
scratch=$state_directory/$conversation.git
|
|
20
|
+
rm -rf "$scratch"
|
|
21
|
+
mkdir -p "$scratch/objects" || return 1
|
|
22
|
+
cp "$index" "$scratch/index" 2> /dev/null
|
|
23
|
+
content=$(
|
|
24
|
+
export GIT_INDEX_FILE="$scratch/index" GIT_OBJECT_DIRECTORY="$scratch/objects" GIT_ALTERNATE_OBJECT_DIRECTORIES="$objects"
|
|
25
|
+
git -C "$repository" add -A -- ':(top)' ':(top,exclude)intent' 2> /dev/null
|
|
26
|
+
git -C "$repository" ls-files -s -- ':(top)' ':(top,exclude)intent' | cksum
|
|
27
|
+
)
|
|
28
|
+
rm -rf "$scratch"
|
|
29
|
+
printf '%s|%s' "$repository" "$content"
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
changed_since_snapshot() {
|
|
33
|
+
current=$(snapshot) || return 1
|
|
34
|
+
previous=$(cat "$snapshot_file" 2> /dev/null)
|
|
35
|
+
printf '%s' "$current" > "$snapshot_file"
|
|
36
|
+
[ "${previous%|*}" = "${current%|*}" ] && [ "$previous" != "$current" ]
|
|
37
|
+
}
|
|
38
|
+
|
|
7
39
|
case $mode in
|
|
40
|
+
snapshot)
|
|
41
|
+
changed_since_snapshot
|
|
42
|
+
exit 0
|
|
43
|
+
;;
|
|
8
44
|
save)
|
|
9
45
|
text=$(printf '%s' "$input" | jq -r '.text // ""')
|
|
10
46
|
[ -n "$text" ] && [ -n "$conversation" ] || exit 0
|
|
@@ -12,12 +48,16 @@ case $mode in
|
|
|
12
48
|
exit 0
|
|
13
49
|
;;
|
|
14
50
|
followup)
|
|
51
|
+
changed=false
|
|
52
|
+
changed_since_snapshot && changed=true
|
|
15
53
|
[ -n "$conversation" ] && [ -f "$state_directory/$conversation" ] || exit 0
|
|
16
54
|
reply=$(cat "$state_directory/$conversation")
|
|
17
55
|
rm -f "$state_directory/$conversation"
|
|
18
56
|
[ "$(printf '%s' "$input" | jq -r '"\(.status // "") \(.loop_count // "")"')" = 'completed 0' ] || exit 0
|
|
19
57
|
;;
|
|
20
58
|
*)
|
|
59
|
+
changed=false
|
|
60
|
+
changed_since_snapshot && changed=true
|
|
21
61
|
[ "$(printf '%s' "$input" | jq -r '.stop_hook_active // false')" = true ] && exit 0
|
|
22
62
|
reply=$(printf '%s' "$input" | jq -r '.last_assistant_message // ""')
|
|
23
63
|
;;
|
|
@@ -48,6 +88,10 @@ case $last in
|
|
|
48
88
|
*) problems="${problems}End the reply with a line that starts with **Status:**; nothing may follow it. " ;;
|
|
49
89
|
esac
|
|
50
90
|
|
|
91
|
+
if [ "$changed" = true ] && ! printf '%s\n' "$outside_fences" | grep -q '^\*\*Checks:\*\*'; then
|
|
92
|
+
problems="${problems}A file outside intent/ changed in this turn and the reply has no **Checks:** section. Run the checks the project names and add **Checks:** with each command and the lines of its output that show the result, or with each check that could not run and why. "
|
|
93
|
+
fi
|
|
94
|
+
|
|
51
95
|
[ -z "$problems" ] && exit 0
|
|
52
96
|
jq -n --arg mode "$mode" --arg reason "${problems}Send the whole reply again." \
|
|
53
97
|
'if $mode == "followup" then {followup_message:$reason} else {decision:"block",reason:$reason} end'
|
|
@@ -49,7 +49,7 @@ For example, the person writes "who must approve pull request #7 of https://host
|
|
|
49
49
|
|
|
50
50
|
**Steps:** <only when the session has no task-list tool, and never for the `question` playbook. One line for each numbered step of the playbook: `1. <the step, copied word for word>: done | open | skip: <reason>`. When the turn ran more than one playbook, one list for each, under its file name on a line of its own, such as `playbooks/build.md`.>
|
|
51
51
|
|
|
52
|
-
**Checks:** <
|
|
52
|
+
**Checks:** <when a step ran checks, and always when the turn changed a file outside `intent/`, whichever playbook ran. Otherwise never for the `question` playbook. Each command, then the lines of its output that show the result, copied from the output. For a check that could not run, the check and why.>
|
|
53
53
|
|
|
54
54
|
<What the current step produces: the round of questions, or the whole draft. For a question or a request no row fits, the answer.>
|
|
55
55
|
|
|
@@ -13,6 +13,6 @@ This playbook starts from a finding such as an alert, a monitoring ticket, a fai
|
|
|
13
13
|
- Start a subagent that has not seen the diagnosis, give it only the finding, the logs and files you read, and `intent.md`, and have it try to disprove the **Problem** section from the evidence. When you cannot start a subagent, read the evidence again from the first line as if someone else wrote the intent.
|
|
14
14
|
- When a claim does not survive, move it under **Open questions**, and say in the pull request that the confidence check failed and on which claim.
|
|
15
15
|
5. Commit `intent.md` on a new branch, push it, and open a pull request ready for review, as the opening paragraph of `playbooks/open-pr.md` says for branches and pull requests. When you cannot open a pull request from this session, say so and give the pushed branch's name.
|
|
16
|
-
6. **Gate: the service owner triages the finding.** The service owner merges the pull request to fix the finding now,
|
|
16
|
+
6. **Gate: the service owner triages the finding.** The service owner merges the pull request to fix the finding now, comments on it with when the finding is scheduled and leaves it open, or closes it to dismiss it. An open pull request with no such comment is undecided: say so, and never report it as scheduled. A dismissal tunes the bands: the service owner adjusts `bands.yaml` so the same noise raises fewer findings. The service owner asks the product owner to decide a product-facing finding. You do none of these. Report the pull request's URL, keep it green as `playbooks/review.md` says, and wait.
|
|
17
17
|
|
|
18
18
|
**Next:** `playbooks/design.md`; an agent; when the service owner has merged the intent's pull request and a person or a job sends `/sdlc:sdlc-mode` with the intent's path.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Review phase: review the pull request and drive it to green
|
|
2
2
|
|
|
3
|
-
1. Find what to review: the pull request this session just opened, or the pull request or branch the request names. When there is no pull request, or this session cannot reach its host, review the branch's diff against the default branch and put the findings in your reply in place of a comment.
|
|
3
|
+
1. Find what to review: the pull request this session just opened, or the pull request or branch the request names. When there is no pull request, or this session cannot reach its host, review the branch's diff against the default branch and put the findings in your reply in place of a comment. When a pull request exists and this session cannot post on it, the findings are not in the pull request's history: the **Status** line says that the findings are not on the pull request and that a person posts them there, step 3 stays `open`, and you do not report the review as done.
|
|
4
4
|
2. Review with a fresh context. Start a subagent that has not seen the work. Give it only the diff, `REVIEW.md`, the change's `intent/<change>/spec.md` and `plan.md`, and the four policy files in force, found as `playbooks/design.md` step 2 says. When you cannot start a subagent, read the diff again from the first line as if someone else wrote it. The review runs each pass in `REVIEW.md` and reports each finding with its pass, **Important** or **Nit**, `path:line`, and the evidence. A change that is not a fix, an intent, or a spec, and has no `spec.md` or no `plan.md`, is itself a finding.
|
|
5
5
|
3. Post the findings as one comment on the pull request, most severe first. Write "No findings" when there are none. A finding does not decide the merge. When a finding flags a mistake that an earlier review of this project flagged too, its correction goes into the project's agent instructions as part of this review: in the push of step 4, or, on a pull request or a branch this session did not create, as the exact line in this comment.
|
|
6
6
|
4. On a pull request or a branch that this session did not create, change nothing and push nothing. Skip the rest of this step, and in step 5 only read and answer. Otherwise, fix every Important finding. Run the checks the project's agent instructions name, and push. Answer each finding you do not fix with the reason.
|
|
@@ -46,6 +46,8 @@ Do these steps in order. Run again with the same answers, the skill writes the s
|
|
|
46
46
|
- `2. Owners: not done. .github/CODEOWNERS still holds the placeholder.`
|
|
47
47
|
- `3. Repository settings: a person checks this. They live on the host, not in the repository.`
|
|
48
48
|
|
|
49
|
+
Report code owners, the ruleset of the default branch, and the OpenTelemetry export each on a line of its own, with what `SETUP.md` says the step needs, such as `Ruleset of main: a person checks this. It needs a repository admin, and in a private repository GitHub Pro, Team, or Enterprise.` A step that is not done fails no check.
|
|
50
|
+
|
|
49
51
|
7. **Do the `not done` steps an agent can do:** a step whose whole work is editing a file of the repository with values the repository or the request already gives. Do not redo a `done` step. Do not edit a file the project's rules or agent settings reserve for a person, such as rules, hooks, lint, format, and commit configuration, and the agent settings themselves; list it with the exact new text and the file it goes in. Commit nothing. After each step, run its **Check** again and report the result.
|
|
50
52
|
8. **List the steps a person does outside the repository,** each with who does it, from `SETUP.md`, and the full URL of the page where it is done when `SETUP.md` or the repository names one.
|
|
51
53
|
9. **Write the reply** by the reply rules in `../sdlc-mode/SKILL.md`. After them, in this order: the budget line and the four role lines as written; each step of `SETUP.md` with its state; what you did; what a person does.
|