swarm-controller: the review classifier reads a diff with 200 lines of context
The classifier read the forge's PR `.diff`, whose context is fixed at 3 lines. A block moved into a glue module lost its enclosing gate (a `config = lib.mkIf …` 13 to 191 lines up in the misfired moves #5199, #5200, #5201), so the glue restating that gate read as a new condition. The controller now builds the diff itself: it lists the PR's changed files, reads each at the merge base and at the head through the git tree and blob API with the token it already holds, and diffs them with 200 lines of context. It sends the forge's `.diff` instead when the PR changes more than 100 files, the forge names no merge base, or the wide diff is over 256 KiB, and the posted review then says so with the reason. Fixes #5227
This commit is contained in:
parent
2ab8be61a2
commit
2b6d480d9c
8 changed files with 517 additions and 18 deletions
|
|
@ -287,6 +287,15 @@ Only the last part differs per classification: that classification's
|
|||
description and the task to classify the PR against it. The identical prefix
|
||||
lets the runtime's prompt cache reuse it across questions.
|
||||
|
||||
The controller builds the diff itself, from each changed file at the PR's
|
||||
merge base and at its head, with 200 lines of context around each change
|
||||
rather than the 3 of the forge's `.diff`. That keeps a moved block's
|
||||
enclosing gate in view, such as a `config = lib.mkIf …` or an option's
|
||||
`default`, so a move that restates the gate doesn't read as adding one. The
|
||||
controller sends the forge's `.diff` instead when the PR changes more than
|
||||
100 files, when the forge names no merge base, or when the wide diff is over
|
||||
256 KiB. The review then says so, with the reason.
|
||||
|
||||
On the API key runtime the commits and diff are one content block of the user
|
||||
message and the question another, with a cache breakpoint at the end of the
|
||||
first. The cache writes an entry only where a breakpoint is, and `claude` sets
|
||||
|
|
@ -619,8 +628,9 @@ These get settled, and filled in here, as the work reaches them:
|
|||
- **Cache strategy.** Fully independent sessions per classification, or one
|
||||
warm session and then the rest in parallel. To measure through the cache
|
||||
token counts before choosing.
|
||||
- **Oversized diffs.** What happens when the diff doesn't fit the model's
|
||||
context. Lockfiles already collapse to one line each, as in `hive-forge diff`.
|
||||
- **Oversized diffs.** What happens when even the forge's 3-line diff doesn't fit
|
||||
the model's context. Lockfiles already collapse to one line each, as in
|
||||
`hive-forge diff`.
|
||||
- **Budget.** Any per-run or per-day spend limit on top of the concurrency
|
||||
cap.
|
||||
- **Diff-leaves-swarm policy.** On the API key and ACP runtimes the diff
|
||||
|
|
|
|||
Loading…
Reference in a new issue