Files
Ben Navetta f3b58c81d1 Add write-pr-description skill (#79)
* Add write-pr-description skill

Adds a shared skill for writing the body of a pull request: following the
repository's template, the prose baseline, and reviewer guidance.

The skill covers three things `create-pr` did not:

- Per-repo templates, including the case where the template's own
  instructions conflict with the skill, and machine-read markers that are
  silently dropped when a parser strips the comment they sit in.
- ASD-STE100 as a prose baseline, with explicit exemptions so the rules do
  not get applied to identifiers, command lines, or repository jargon.
- Reviewer guidance when the size, complexity, or blast radius of the change
  warrants it: a dependency-ordered reading order, and focus areas covering
  author uncertainty, security surfaces, decisions with a real alternative,
  and one-way doors.

Tuned over two eval iterations against nine real PRs spanning +2/-2 to
+7350/-51 across warp, warp-server, and warp-terraform. Assertion pass rate
went from 20/26 with no skill to 50/54 with this version. The changes that
mattered most between iterations: correcting a blast-radius definition that
conflated user visibility with risk, subordinating the skill to template
instructions, protecting rejected alternatives from the compression pass,
and naming concrete verification methods rather than just demanding
verification.

`create-pr`'s description section now points here. The eval set is committed
under `evals/` so the cases are reproducible.

Co-Authored-By: Warp <agent@warp.dev>

* Make write-pr-description concise on small changes

The first version produced 455 words for a three-line IAM change and 497
for a two-line test fix. Evaluating nine PRs showed the excess was not in
the analysis but in four specific places, only one of which the skill
named:

- paraphrases of comments the diff itself adds
- inventories of the test functions the branch adds, with no result
  attached
- the second and third statement of a fact already made
- template scaffolding, including reproducing the template's own question
  text and links in order to answer "no"

The Cut step now names all four, and gives rough size anchors so the
target is set before drafting rather than only trimmed afterward. Also
adds the rule that a small PR gets a sentence of reviewer guidance rather
than a section with a heading over it.

Re-running the same seven PRs cut every description by 31 to 67 percent:
the IAM change from 455 words to 150, the test fix from 497 to 305, and
the largest case from 1276 to 872 while keeping its reading order and
focus areas.

Two regressions that surfaced in that run are fixed here. Compression ate
a rejected alternative on one case, so the self-check now asks directly
whether the cut took a decision with it. And "no linked issue" was being
stated in repositories that never use issue links, so it is now reported
only where the repository asks for one.

Co-Authored-By: Warp <agent@warp.dev>

* Resolve two contradictions found in the final eval run

The no-template fallback shape listed four sections, while the reviewer-
guidance step says a small PR should fold guidance into the opening rather
than raise a heading over it. On a five-line change those pull in opposite
directions, and the fallback never said it was subject to the same rule.
It does now.

The validation cases were introduced with "say which of these applies",
which reads as a menu of mutually exclusive options. In practice they
combine: verifying a role's permission set locally while CI produces the
plan is two cases at once. The intent was no repetition of a single fact,
not one case per PR.

Co-Authored-By: Warp <agent@warp.dev>

* Treat unintended-looking discrepancies as a focus area

The Cut step told authors to delete anything the diff shows at a glance,
and that rule was eating the most author-specific observation there is: a
name, value, or comment that does not match its surroundings.

Three of these turned up across the eval set. A resource renamed to an
`fte_` prefix while still bound to `group:eng@warp.dev`, where every other
`fte_` resource in the repository binds `fte@warp.dev`. A new comment
claiming a staging throttle matches production, where production is ten
times lower. A commit message citing a precedent that lives in a different
file.

Visibility is the wrong test. All three are in the diff, and that is
precisely why a reviewer reads past them: nothing marks them as wrong. The
author is usually the only person who knows whether it was deliberate.

Co-Authored-By: Warp <agent@warp.dev>

---------

Co-authored-by: Warp <agent@warp.dev>
2026-08-24 18:26:43 +01:00

8 lines
114 B
Plaintext

__pycache__/
*.py[cod]
*.pyo
.DS_Store
# Skill eval workspaces produced by the create-skill harness
*-workspace/