Make compile_feedback work-item aware: blast-radius scope + immutable-base baseline + lint budget #294

Merged
toasterson merged 5 commits from claude/wi-019fa83d-compile-feedback-lints-the-whole-workspa into main 2026-08-08 13:46:16 +00:00
Owner

Anima work item 019fa83d-523b-7303-b962-13d10c9ae483.

Measured 2026-07-28

WI-230 (Wave R1 — Config spine) ran four rounds on tecton and produced zero
config-spine work. Every round opened the same way: run compile_feedback, get
workspace-wide clippy warnings in crates/grug-data and benchmarks/harness-core,
start fixing them, hit the turn watchdog, end. Rounds 1–4 pushed 48 lines of that
cleanup under the title "Wave R1 — Config spine", and the reviewer rejected PR #246
for containing "work from MANY work items".

The warnings are real but trivial and unrelated: collapsible if let → let-chains,
write! with a trailing newline → writeln!.

Why the akh sees what nobody else does

.forgejo/workflows/ci.yml runs cargo check -p seshat — one crate. Its own
comment explains why: broader test/clippy/release-build OOM-kills rustc on the
Solstice runner. So workspace-wide clippy has been rotting unchecked while main
stays green, and compile_feedback is the only thing that looks at it.

The akh then reasonably concludes the tree is dirty and cleans it — on its own
budget, in someone else's crates, every single session.

Ask

  1. Scope compile_feedback to the work item's blast radius. Default it to the
    crates the session actually touches (worktree diff, or the package(s) owning the
    edited paths); --workspace becomes opt-in via the tool's parameters.
  2. Separate "my change broke this" from "this was already broken". Capture a
    baseline at session start; report pre-existing diagnostics as context ("the tree
    arrived with N warnings in crates you are not touching") rather than as work.
    The akh must not be able to mistake ambient rot for its assignment.
  3. Consider a lint budget: if pre-existing warnings outside the blast radius exceed
    a threshold, say so once and move on.
  • akh-medu PR #274 — the cleanup itself, extracted so it lands once on main.
  • Anima 019fa7c6-ec4b-73e1-8b43-dc4deeca8373 — the runner must not commit / push /
    PR a turn that only repaired the base repo.
  • The turn watchdog half of this (300s < glm-5.2's ~5-minute responses) was mitigated
    the same day by setting AKH_TURN_IDLE_TIMEOUT_SECS=900 on the akhomed container.
Anima work item `019fa83d-523b-7303-b962-13d10c9ae483`. ## Measured 2026-07-28 WI-230 (Wave R1 — Config spine) ran four rounds on tecton and produced **zero** config-spine work. Every round opened the same way: run `compile_feedback`, get workspace-wide clippy warnings in `crates/grug-data` and `benchmarks/harness-core`, start fixing them, hit the turn watchdog, end. Rounds 1–4 pushed 48 lines of that cleanup under the title "Wave R1 — Config spine", and the reviewer rejected PR #246 for containing "work from MANY work items". The warnings are real but trivial and unrelated: collapsible `if let` → let-chains, `write!` with a trailing newline → `writeln!`. ## Why the akh sees what nobody else does `.forgejo/workflows/ci.yml` runs **`cargo check -p seshat`** — one crate. Its own comment explains why: broader test/clippy/release-build OOM-kills rustc on the Solstice runner. So workspace-wide clippy has been rotting unchecked while main stays green, and `compile_feedback` is the only thing that looks at it. The akh then reasonably concludes the tree is dirty and cleans it — on its own budget, in someone else's crates, every single session. ## Ask 1. **Scope `compile_feedback` to the work item's blast radius.** Default it to the crates the session actually touches (worktree diff, or the package(s) owning the edited paths); `--workspace` becomes opt-in via the tool's parameters. 2. **Separate "my change broke this" from "this was already broken".** Capture a baseline at session start; report pre-existing diagnostics as context ("the tree arrived with N warnings in crates you are not touching") rather than as work. The akh must not be able to mistake ambient rot for its assignment. 3. Consider a lint budget: if pre-existing warnings outside the blast radius exceed a threshold, say so once and move on. ## Related - akh-medu PR #274 — the cleanup itself, extracted so it lands once on main. - Anima `019fa7c6-ec4b-73e1-8b43-dc4deeca8373` — the runner must not commit / push / PR a turn that only repaired the base repo. - The turn watchdog half of this (300s < glm-5.2's ~5-minute responses) was mitigated the same day by setting `AKH_TURN_IDLE_TIMEOUT_SECS=900` on the akhomed container.
compile_feedback lints the whole workspace, so every session burns its turns cleaning crates the work item never touches
Some checks failed
CI / check-seshat (pull_request) Successful in 20m1s
CI / publish-chart (pull_request) Successful in 26m25s
CI / check-seshat (push) Has been cancelled
CI / docker-seshd (push) Has been cancelled
CI / docker-seshd (pull_request) Has been cancelled
CI / publish-chart (push) Has been cancelled
da5ec5a55c
Anima implementation session.
compile_feedback lints the whole workspace, so every session burns its turns cleaning crates the work item never touches
Some checks failed
CI / publish-chart (pull_request) Successful in 32m25s
CI / check-seshat (push) Failing after 31m52s
CI / publish-chart (push) Successful in 3m0s
CI / check-seshat (pull_request) Successful in 56m54s
CI / docker-seshd (pull_request) Successful in 1h2m0s
CI / docker-seshd (push) Successful in 19m14s
2071f0d31a
Anima implementation session.
toasterson force-pushed claude/wi-019fa83d-compile-feedback-lints-the-whole-workspa from 2071f0d31a
Some checks failed
CI / publish-chart (pull_request) Successful in 32m25s
CI / check-seshat (push) Failing after 31m52s
CI / publish-chart (push) Successful in 3m0s
CI / check-seshat (pull_request) Successful in 56m54s
CI / docker-seshd (pull_request) Successful in 1h2m0s
CI / docker-seshd (push) Successful in 19m14s
to 296ae33f7b
Some checks failed
CI / publish-chart (pull_request) Failing after 15m12s
CI / docker-seshd (pull_request) Failing after 15m14s
CI / check-seshat (pull_request) Failing after 15m15s
CI / publish-chart (push) Failing after 15m19s
CI / docker-seshd (push) Failing after 15m21s
CI / check-seshat (push) Failing after 15m21s
2026-08-06 20:46:53 +00:00
Compare
toasterson left a comment

Review verdict: BLOCK — the branch does not compile.

cargo check --features server at 296ae33f in a clean worktree fails with two hard errors in the code this PR adds:

  • src/agent/tools/compile_feedback.rs:172 — E0277: .unwrap_or_default() on Option<std::process::Output>, but std::process::Output does not implement Default.
  • src/agent/tools/compile_feedback.rs:409 — E0283: redundant .into() on a &'static str passed to ToolOutput::ok, which takes impl Into<String>.

Note that CI green is not a signal on this repo: .solstice/job.sh runs only cargo check -p seshat and never builds the root akh-medu crate where this file lives.

Beyond the build break, six substantive defects remain — silent fail-closed on git-diff failure, a blast-radius path check hardcoded to crates/<name> that misses benchmarks/harness-core (one of the two crates this work item exists to fix), a baseline dedup key that ignores file and line, no automatic baseline capture at all, and zero tests over ~200 lines of new logic. Full detail is in the work item description.

**Review verdict: BLOCK — the branch does not compile.** `cargo check --features server` at `296ae33f` in a clean worktree fails with two hard errors in the code this PR adds: - `src/agent/tools/compile_feedback.rs:172` — E0277: `.unwrap_or_default()` on `Option<std::process::Output>`, but `std::process::Output` does not implement `Default`. - `src/agent/tools/compile_feedback.rs:409` — E0283: redundant `.into()` on a `&'static str` passed to `ToolOutput::ok`, which takes `impl Into<String>`. Note that CI green is not a signal on this repo: `.solstice/job.sh` runs only `cargo check -p seshat` and never builds the root `akh-medu` crate where this file lives. Beyond the build break, six substantive defects remain — silent fail-closed on git-diff failure, a blast-radius path check hardcoded to `crates/<name>` that misses `benchmarks/harness-core` (one of the two crates this work item exists to fix), a baseline dedup key that ignores file and line, no automatic baseline capture at all, and zero tests over ~200 lines of new logic. Full detail is in the work item description.
toasterson force-pushed claude/wi-019fa83d-compile-feedback-lints-the-whole-workspa from 296ae33f7b
Some checks failed
CI / publish-chart (pull_request) Failing after 15m12s
CI / docker-seshd (pull_request) Failing after 15m14s
CI / check-seshat (pull_request) Failing after 15m15s
CI / publish-chart (push) Failing after 15m19s
CI / docker-seshd (push) Failing after 15m21s
CI / check-seshat (push) Failing after 15m21s
to b1c52a51f6
Some checks failed
CI / docker-seshd (pull_request) Failing after 42m8s
CI / docker-seshd (push) Failing after 51m6s
CI / publish-chart (pull_request) Failing after 38m37s
CI / check-seshat (pull_request) Failing after 42m26s
CI / check-seshat (push) Failing after 53m55s
CI / publish-chart (push) Failing after 47m35s
2026-08-07 18:45:25 +00:00
Compare
compile_feedback lints the whole workspace, so every session burns its turns cleaning crates the work item never touches
All checks were successful
CI / publish-chart (pull_request) Successful in 22m54s
CI / publish-chart (push) Successful in 29m25s
CI / check-seshat (pull_request) Successful in 30m54s
CI / check-seshat (push) Successful in 30m57s
CI / docker-seshd (push) Successful in 40m14s
CI / docker-seshd (pull_request) Successful in 40m13s
6d719f755e
Anima implementation session.
Make compile feedback work-item aware
Some checks failed
CI / docker-seshd (pull_request) Failing after 49m46s
CI / check-seshat (pull_request) Failing after 56m6s
CI / publish-chart (push) Failing after 56m48s
CI / docker-seshd (push) Failing after 58m1s
CI / publish-chart (pull_request) Successful in 8m32s
CI / check-seshat (push) Has been cancelled
1eba90408d
toasterson changed title from WIP: compile_feedback lints the whole workspace, so every session burns its turns cleaning crates the work item never touches to Make compile_feedback work-item aware: blast-radius scope + immutable-base baseline + lint budget 2026-08-08 13:20:38 +00:00
ci: re-trigger Solstice on 1eba904 (prior run died on archibald saturation)
Some checks failed
CI / publish-chart (push) Failing after 35s
CI / docker-seshd (pull_request) Failing after 18m32s
CI / publish-chart (pull_request) Failing after 22m37s
CI / check-seshat (pull_request) Successful in 43m31s
CI / check-seshat (push) Successful in 44m46s
CI / docker-seshd (push) Successful in 52m54s
91fa5a3a84
All six jobs on 1eba904 failed at ~50-58min, including publish-chart, which
only touches charts/ and was untouched by this branch and green on the parent
commit 6d719f7. archibald was carrying load average 52 on 16 cores with 11GB
swapped at the time. Infra, not code.

Verified locally on this tree: cargo check -p akh-medu clean,
cargo test --lib compile_feedback 20/20 passed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
toasterson/akh-medu!294
No description provided.