diff --git a/prompt.md b/prompt.md index 5b360a7..5398e75 100644 --- a/prompt.md +++ b/prompt.md @@ -26,16 +26,17 @@ at the end of this prompt, not only the diff; a violation is at least Important even when the diff did not cause it. Write the complete review, and nothing else, to the file `${REVIEW_PATH}`: it is posted verbatim as a pull request review from the bot account, and your final response is not posted at all. The -file's first line must be exactly the template's verdict and nothing else: -`Yes`, `No`, or `With fixes`. `Yes` approves and the other two request changes; -any other first line is posted as a plain comment, which wastes the run. Minor -issues 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 -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 -the intended result was achieved. +file's first line must be exactly the verdict and nothing else: `Approved` when +the template's answer is yes, `Changes requested` otherwise. The mark in front +of it is added when posting, so write the words alone; any other first line is +posted as a plain comment, which wastes the run. Minor issues 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 `Changes requested`, the second line names what must 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 result is aligned, +clean, and pixel-perfect, and that included screenshots prove the intended +result was achieved. The review must read at a glance: everything outside `
` blocks totals under 512 bytes. Only core information stays visible: the verdict, the summary diff --git a/run.ts b/run.ts index b812b21..aa8f948 100644 --- a/run.ts +++ b/run.ts @@ -62,12 +62,12 @@ async function postComment(body: string): Promise { // A pull request event is a review request, so the review is posted instead // of the response. It comes through a file, because a final chat message picks // up narration while a file's first line is written on purpose. That line is -// the verdict; anything unexpected only comments, never approves. +// the verdict, matched whole; anything unexpected only comments, never +// approves. The mark in front is added here, so it is never part of the match. const REVIEW_PATH = `${await Deno.makeTempDir()}/review.md`; -const VERDICTS: Record = { - Yes: "APPROVED", - No: "REQUEST_CHANGES", - "With fixes": "REQUEST_CHANGES", +const VERDICTS: Record = { + Approved: ["APPROVED", "✅"], + "Changes requested": ["REQUEST_CHANGES", "🛑"], }; async function postResult(body: string): Promise { @@ -75,10 +75,11 @@ async function postResult(body: string): Promise { const review = await Deno.readTextFile(REVIEW_PATH).catch(() => { throw new Error(`no review was written to ${REVIEW_PATH}`); }); - const [verdict] = review.split("\n", 1); + const [verdict, ...rest] = review.split("\n"); + const [event, mark] = VERDICTS[verdict.trim()] ?? ["COMMENT", "💬"]; await gitea(REVIEWER_TOKEN, `repos/${REPO}/pulls/${INDEX}/reviews`, { - body: stripAnsi(review), - event: VERDICTS[verdict.trim()] ?? "COMMENT", + body: stripAnsi([`${mark} ${verdict.trim()}`, ...rest].join("\n")), + event, }); }