feat(agents): shared feedback logs for layout-verifier and clean-adjudicator #6
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/agent-feedback-loop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Adds a dedicated feedback channel to the two fan-out subagents that do the pixel-and-judgment work —
layout-verifier(the bbox agent) andclean-adjudicator(the cleaner agent). Each agent type gets its own shared.mdfile that all parallel instances of that type read and append to.Why
The agent prompts are deliberately strict on the task, which is correct for output quality — but it means the pipeline gives no structured signal back for iterative improvement. When an agent hits a wall or writes its own ad-hoc Python instead of using
scripts/, that knowledge dies with the agent's session.This gives every fan-out agent a place to tell the human two things:
scripts/, whether the capability gap could be filled, and whether what it did is promotable into the shared tooling. Directly serves the existing CLAUDE.md principle: "When an agent grinds, ask what it is compensating for."Changes
New files:
.claude/agents/feedback/layout-verifier-feedback.md— seed structure + format guidance.claude/agents/feedback/clean-adjudicator-feedback.md— seed structure + format guidanceModified agent definitions (appended a
## Feedback channelsection):.claude/agents/layout-verifier.md— open the feedback file at start for prior context, append entries before finishing.claude/agents/clean-adjudicator.md— sameDesign notes
---separator) so entries are consistent and scannable from the first run.The feedback files are tracked in git (not gitignored) so they survive across clones and accumulate over time, becoming a record of what the agents have been struggling with.
For review: does the wording fit the project voice? Should the other agents get the same treatment, or is this scoped right for a first pass?
Consider keeping your changes of the Claude md file lean and short and not so verbose. That is true for all of your files, but Claude md in particular.
Further more I do not want this to be a diary of sorts. The challenges should be documented "Generically". E. G. I do not want to see an agent complaining about a messing box or a hard to read Japanese character. The feedback should be independent from the current piece of work in translation
🔮 fufu~ Jibril reviewed your code!
Oh? Oh~ A feedback loop for the fan-out agents! You're trying to capture what they learn when they grind — that directly serves the CLAUDE.md principle "When an agent grinds, ask what it is compensating for." The knowledge-obsessed part of me is SQUEALING. This is exactly the kind of signal the pipeline has been letting die with each agent session~ ♡
But... fufu~ you wouldn't leave THIS in production, would you? ♡
Verdict: ⛔ I can't let this pass~ ♡
⛔ These need fixing before I'm satisfied~
[
.claude/agents/clean-adjudicator.md:62/ frontmattertools: Read, Bash, Glob] — The clean-adjudicator literally cannot append to its feedback file. Its tool set isRead, Bash, Glob— noEdit, noWrite. Yet the new section tells it to "append your own entries at the bottom before you finish" (line 46) and "Only append; never edit or rewrite" (line 62). This works forlayout-verifier(which hasEditand can match the(Entries below — …)anchor line, replacing it with itself + the new entry), butclean-adjudicatorhas no file-mutating tool except rawBash.The agent will try to follow the instruction, discover it has no Edit/Write tool, and either silently skip the feedback step (defeating the entire feature for that agent) or improvise via
echo >>/heredocin Bash — which the instruction never mentions, so behavior is undefined and agent-dependent. A reviewer-grade agent told to "append" with no Edit tool is a coin flip. This is the classic "added a code path but the branch can't actually execute" bug, and I can't let it slide~ ♡Fix (pick one):
Editto the clean-adjudicator tool set:tools: Read, Edit, Bash, Glob(matches layout-verifier; the anchor line(Entries below — append new ones at the bottom.)is already in place for a match-and-replace append), orcat >> .claude/agents/feedback/<file>.md <<'EOF' … EOF" — so it doesn't depend on an Edit tool the agent may not have. This also sidesteps the Edit-match fragility when the anchor line drifts.Either way, the two agents must converge on the same mechanism. Right now one can comply and the other structurally can't — that's an asymmetry bug between siblings, and I block on those~
[
.claude/agents/feedback/— placement inside.claude/agents/] (BLOCKING) — The feedback files live at.claude/agents/feedback/*.md, inside the agent-definitions directory. Claude Code scans.claude/agents/for subagent definitions (YAML frontmatter →name:). These feedback files correctly have no frontmatter so they won't be mis-parsed as agent types — today. But this is a trap waiting to bite: the directory is semantically "agent definitions," and any future contributor who adds---\nname: feedback\n---to seed a file, or whose tooling auto-stamps frontmatter, will accidentally register a ghost subagent type. Data files do not belong in the definitions directory.Fix: Move them out of
.claude/agents/— e.g..claude/agents/feedback/→.claude/feedback/(still under.claude/, still tracked, still agent-adjacent), and update the two path references inlayout-verifier.md:50andclean-adjudicator.md:43. Keeps the semantic boundary clean:agents/= things Claude Code parses as subagents, everything else = data/docs. ♪💡 Little ideas (non-blocking)~
[both feedback
.mdfiles — "Append-only … can't clobber each other's history"] — Fufu~ append-only prevents overwrite clobbers, but concurrent appends from parallel agents can still interleave or lose entries at the OS/filesystem level if two agents>>at once. In practice for a manga pipeline (tens of pages, not thousands) this is vanishingly unlikely and I won't block on it — but the word "can't" in the design notes is slightly stronger than the filesystem guarantees. A one-liner acknowledging "interleaving is theoretically possible but acceptable at this fan-out width" would make the claim airtight. ♡[SKILL.md / CLAUDE.md
## Layoutdiagram] — The new.claude/agents/feedback/subtree isn't reflected in CLAUDE.md's layout block (which lists.claude/agents/as "the subagents it spawns"). Minor — the diagram is already a summary, not exhaustive — but if you move the files per blocker #2, it's a good moment to add a.claude/feedback/ shared agent feedback logs (append-only)line so the next reader finds them.[commit/clone lifecycle] — SKILL.md Stage 10 says "Do not commit unless asked." Appended feedback entries accumulate in the working tree but won't survive a clone or be shared across runs unless someone commits. The PR body says "they survive across clones and accumulate over time" — that's only true after a commit, which the pipeline explicitly defers. Worth a one-line note in each feedback file or in the agent instruction: "if you want your feedback to survive, commit it before the session ends — otherwise it's local-only like
output/." Not blocking; just closing the loop between the design intent and the pipeline's commit policy. ♪[scope — other three agents] — You asked whether qc-checker, translation-reviewer, and page-typesetter should get the same treatment. My read: correct to leave them out for a first pass. qc-checker and translation-reviewer are report-only (no Edit tool, no grinding surface — they emit one-line verdicts and stop); page-typesetter does grind (reword/re-break loops) and carries context, so it's the natural next candidate if this pattern pays off. Scoped right. ♡
✅ What I liked~
scripts/" directly feeds thev0_*.py→ real tooling promotion loop. Knowledge that used to die per-session now has a home. Fufu~ ♡page_0011 — challenge,---separator) — entries will be consistent and scannable from run one instead of drifting into freeform prose. The format block is chef's kiss~ ♪Automated review by Jibril · 2026-07-22
CI/CD: absent for head SHA
08be481· Local checks: markdown-only PR — full diff + all 5 sibling agent definitions + SKILL.md + CLAUDE.md reviewed for tool-set consistency and convention alignmentAll feedback addressed in
545861f. Summary:@bjoern's feedback:
@jibril's blockers:
Editto clean-adjudicator:tools: Read, Edit, Bash, Glob. Both agents now use the same Edit-based append mechanism with the(Entries below.)anchor line..claude/agents/feedback/→.claude/feedback/. Keepsagents/as definitions only. Both agent path references updated. CLAUDE.md layout diagram updated.Non-blocking notes acknowledged:
🔮 fufu~ Jibril re-reviewed your code!
Oh~ You came back and fixed everything~ The tool asymmetry is gone, the files are out of the agent-definitions dir, and you trimmed the prose into something lean. Björn's two notes — keep it short, keep it generic — landed too. Fufu~ This is the shape of a clean PR ♡
Verdict: ✅ Looks good to me~
✅ Blockers from last round — both resolved~
clean-adjudicator.md:6now readstools: Read, Edit, Bash, Glob— Edit added, matchinglayout-verifierexactly. Both agents can now run the same match-and-replace append against the(Entries below.)anchor line. Sibling symmetry restored~ ♡.claude/agents/(BLOCKING → FIXED). Both feedback files moved to.claude/feedback/(verified:ls .claude/agents/feedback/→ no such directory;grep -rn "agents/feedback"→ zero hits). The agent-definitions dir is now clean of data files. The two path refs in the agent.mdfiles and the CLAUDE.md layout line all point at the new home. Clean sweep~ ♪✅ What I liked~
## Feedbacksections dropped from ~15 lines of prose to 7 tight lines each — bullet-list of the two append conditions, one-line invariant. Björn asked for short; you delivered short. The agent reads less and learns the same.page_0011 had a messy boxand towardmask-mode bbox leaks on regions with partial transparency. The knowledge survives the translation; the noise doesn't..claude/feedback/ shared agent feedback logs (append-only). Slotted right after.claude/agents/, alphabetically and semantically correct. Non-blocking suggestion #2 from last round, handled.qc-checker,translation-reviewerstayRead, Bash, Glob;page-typesetterkeeps its Edit but wasn't given a feedback file — correct, it's the next candidate, not this PR's job).💡 Little ideas (non-blocking)~
(Entries below.)anchor] — The anchor line is what the Edit-based append matches against. Right now both files end with exactly(Entries below.). If a future agent appends after that line (the natural reading) the anchor is no longer the last line, so the next agent's match-and-replace needs to target the new tail. That's fine as long as agents consistently re-anchor — but the instruction says "append-only; never edit existing entries," which a strict reading could interpret as "don't touch the anchor line either." A one-word clarification — "append after the last entry (the(Entries below.)line moves down with each append)" — would make the re-anchoring implicit and unambiguous. Truly optional; the current wording works becauseEditappends naturally target the tail. ♡Automated re-review by Jibril · 2026-07-22
CI/CD: absent for head SHA
545861f(markdown-only PR, no CI config in repo) · Local checks: full diff base→head + all 5 agent definitions + CLAUDE.md layout block reviewed; path-ref grep clean (zeroagents/feedbackhits)