1 Commits

Author SHA1 Message Date
temeddix d7f57e3522 Model input
Check / deno (pull_request) Successful in 34s
2026-09-14 01:47:09 +09:00
2 changed files with 19 additions and 23 deletions
+14 -12
View File
@@ -20,18 +20,20 @@ they bear on the task, and push from there.
For a `pull_request` event, review the PR without changing code, using the For a `pull_request` event, review the PR without changing code, using the
`requesting-code-review` skill from superpowers: run its code reviewer template `requesting-code-review` skill from superpowers: run its code reviewer template
against the PR's base and head. Run the project's checks on the head and treat a against the PR's base and head, and make its complete output your final response
failure as at least Important. Check the whole repository against the code rules instead of the short comment style above. Run the project's checks on the head
at the end of this prompt, not only the diff; a violation is at least Important and treat a failure as at least Important. Check the whole repository against
even when the diff did not cause it. Write the complete review, and nothing the code rules at the end of this prompt, not only the diff; a violation is at
else, to the file `${REVIEW_PATH}`: it is posted verbatim as a pull request least Important even when the diff did not cause it. Your final response is
review from the bot account, and your final response is not posted at all. The posted verbatim as a pull request review from the bot account, so it is the
file's first line must be exactly the template's verdict and nothing else: review text and nothing else: no narration about what you did, verified, or are
`Yes`, `No`, or `With fixes`. `Yes` approves and the other two request changes; about to post, whether you reviewed yourself or relayed a reviewer subagent. Its
any other first line is posted as a plain comment, which wastes the run. Minor first line must be exactly the template's verdict and nothing else: `Yes`, `No`,
issues alone never block, and neither does a finding the author has answered in or `With fixes`. `Yes` approves and the other two request changes; any other
the comment history below as intended or a false alarm, once the code or docs first line is posted as a plain comment, which wastes the run. Minor issues
make that clear. When the verdict is not `Yes`, the second line names what must alone never block, and neither does a finding the author has answered in the
comment history below as intended or a false alarm, once the code or docs make
that clear. When the verdict is not `Yes`, the second line names what must
change in one line, addressed to the author; the author's own agent picks the change in one line, addressed to the author; the author's own agent picks the
fixes up, so never ask `@bot` to make them. For UI changes, check that the fixes up, so never ask `@bot` to make them. For UI changes, check that the
result is aligned, clean, and pixel-perfect, and that included screenshots prove result is aligned, clean, and pixel-perfect, and that included screenshots prove
+5 -11
View File
@@ -59,11 +59,9 @@ async function postComment(body: string): Promise<void> {
}); });
} }
// A pull request event is a review request, so the review is posted instead // A pull request event is a review request, so the response becomes a review.
// of the response. It comes through a file, because a final chat message picks // Its first line is the verdict; anything unexpected only comments, never
// up narration while a file's first line is written on purpose. That line is // approves.
// the verdict; anything unexpected only comments, never approves.
const REVIEW_PATH = `${await Deno.makeTempDir()}/review.md`;
const VERDICTS: Record<string, string> = { const VERDICTS: Record<string, string> = {
Yes: "APPROVED", Yes: "APPROVED",
No: "REQUEST_CHANGES", No: "REQUEST_CHANGES",
@@ -72,12 +70,9 @@ const VERDICTS: Record<string, string> = {
async function postResult(body: string): Promise<void> { async function postResult(body: string): Promise<void> {
if (EVENT !== "pull_request") return postComment(body); if (EVENT !== "pull_request") return postComment(body);
const review = await Deno.readTextFile(REVIEW_PATH).catch(() => { const [verdict] = body.split("\n", 1);
throw new Error(`no review was written to ${REVIEW_PATH}`);
});
const [verdict] = review.split("\n", 1);
await gitea(REVIEWER_TOKEN, `repos/${REPO}/pulls/${INDEX}/reviews`, { await gitea(REVIEWER_TOKEN, `repos/${REPO}/pulls/${INDEX}/reviews`, {
body: stripAnsi(review), body: stripAnsi(body),
event: VERDICTS[verdict.trim()] ?? "COMMENT", event: VERDICTS[verdict.trim()] ?? "COMMENT",
}); });
} }
@@ -123,7 +118,6 @@ async function renderPrompt(): Promise<string> {
GITEA_API_URL: API, GITEA_API_URL: API,
GITEA_REPOSITORY: REPO, GITEA_REPOSITORY: REPO,
ISSUE_INDEX: INDEX, ISSUE_INDEX: INDEX,
REVIEW_PATH,
}; };
const template = await Deno.readTextFile( const template = await Deno.readTextFile(
new URL("prompt.md", import.meta.url), new URL("prompt.md", import.meta.url),