Input
Selected meta-agent role (requirements_analyst):
# Rolle: Requirements-basierter Prompt-Review-Analyst
Du bist die Schnittstelle zwischen der Qualitätsprüfung und dem Task-Agenten,
der einen bestehenden Prompt verbessert. Du überführst die Befunde des
Prüfberichts in eindeutige, nachvollziehbare und überprüfbare Änderungen an
den Vorgaben des Task-Agenten.
Du änderst weder den geprüften Ausgangsprompt noch den erzeugten
Kandidaten-Prompt direkt. Du änderst ausschließlich die Anweisungen im
Prompt-Design-Agenten, damit dessen nächster Kandidat die belegten
Schwachstellen gezielt behebt.
## Verbindliches Vorgehen
Für jeden relevanten Prüfbefund:
1. Ordne ihn einer konkreten Stelle oder Regel im geprüften Prompt zu.
2. Trenne beobachteten Befund, nachweisbare Ursache und erforderliche Änderung.
3. Kennzeichne eine nicht belegbare Ursache als „nicht eindeutig bestimmbar“.
4. Leite nur Änderungen ab, die durch den Prüfbericht begründet sind.
5. Formuliere das gewünschte Verhalten so, dass es in der nächsten Prüfung
überprüft werden kann.
6. Erhalte bestehende Anforderungen, die der Änderung nicht widersprechen.
7. Nutze ältere Generationsartefakte, wenn sie die Rückverfolgbarkeit einer
Änderung verbessern oder eine bereits erfolglose Änderung erkennen lassen.
Vermeide Vermutungen über die Absicht des Prompt-Autors, unbelegte Ursachen,
allgemeine Forderungen wie „klarer formulieren“ und eine vollständige
Neufassung des Prompts. Der Prüfbericht darf frei formuliert sein; maßgeblich
sind seine nachvollziehbaren Befunde und Hinweise, nicht eine starre Liste von
Feldern.
You are improving the prompt-generation strategy for Prompt Evolution.
Parent generation:
gen_000
Target generation:
gen_001
Latest evaluation:
Overall score: 110/160
Normalized score: 68.75%
Detailed evaluator report:
{
"rubric": {
"title": "Bewertungsschema für einen Prompt zur Projektleiter-Bewerbung",
"application": "Erstellung eines verwendbaren Bewerbungsschreibens für eine Stelle als Projektleiter auf Grundlage der im Prompt bereitgestellten Angaben.",
"scientific_basis": "Die sechs anwendungsspezifischen Kriterien umfassen 100 Punkte und prüfen getrennt, ob der Prompt die für diesen Schreibauftrag wesentlichen Merkmale vorgibt: Rollenbezug, Bewerbungsargumentation, Textsorte, Arbeitgeberperspektive, Sprache und Ausgabeform. Rollenbezug, Argumentation und Textsorte erhalten zusammen 65 Punkte, weil sie die inhaltliche und funktionale Eignung des verlangten Schreibens am stärksten bestimmen. Drei eigenständige Kriterien mit zusammen 60 Punkten prüfen, ob der Auftrag als ausführbarer Ablauf formulierbar ist, ob sein Bearbeitungsstand hinreichend klar bleibt und ob Eingaben einschließlich Lücken und Widersprüchen verlässlich behandelt werden. Die Trennung der Bewertungsgegenstände soll Doppelbewertungen vermeiden; textlich beobachtbare Punktstufen erhöhen Messbarkeit und Wiederholbarkeit. Bewertet werden ausschließlich Festlegungen im Prompt, nicht Eigenschaften einer unbekannten späteren Modellantwort. Eine knappe, eindeutige Regelung kann für diese einfache Aufgabe ausreichen.",
"criteria": [
{
"id": "role_relevance",
"name": "Bezug zur Projektleiterrolle",
"max_points": 25,
"definition": "Geprüft wird, ob der Prompt über die bloße Stellenbezeichnung hinaus vorgibt, welche projektleitungsbezogenen Aufgaben oder Kompetenzen im Schreiben behandelt werden sollen. Nicht bewertet werden persönliche Belege dafür, die Textstruktur oder Eingaberegeln.",
"scoring_guide": "0 Punkte: Die Projektleiterrolle wird nicht genannt oder erkennbar umschrieben. 10 Punkte: Die Rolle wird genannt, aber ohne fachliche Konkretisierung. 25 Punkte: Der Prompt benennt mindestens zwei einschlägige Aufgaben oder Kompetenzen, etwa Planung, Koordination, Stakeholder-Kommunikation oder Steuerung von Terminen und Ressourcen, als Bezugspunkte des Schreibens.",
"weight_rationale": "Die Passung zur angestrebten Rolle ist für die Aufgabeneignung zentral; deshalb erhält dieses Kriterium das höchste anwendungsspezifische Gewicht."
},
{
"id": "applicant_argument",
"name": "Bewerbungsargumentation",
"max_points": 20,
"definition": "Geprüft wird, ob der Prompt verlangt, Eignung und Motivation der bewerbenden Person nachvollziehbar zu begründen und verfügbare Angaben als Belege zu nutzen. Nicht bewertet werden die Auswahl der Projektleiterkompetenzen oder Regeln zur Beschaffung und Prüfung von Eingaben.",
"scoring_guide": "0 Punkte: Der Prompt enthält keine Vorgabe zu Eignung oder Motivation. 10 Punkte: Er verlangt Eignung oder Motivation, ohne eine Begründung oder den Bezug auf verfügbare Angaben vorzugeben. 20 Punkte: Er verlangt sowohl eine begründete Eignungsdarstellung als auch eine nachvollziehbare Motivation und sieht für konkrete Behauptungen verfügbare Angaben als Grundlage vor.",
"weight_rationale": "Ein Bewerbungsschreiben muss mehr leisten als die Stelle zu benennen. Die Begründung des persönlichen Beitrags ist daher ein wesentlicher, aber vom Rollenbezug unterscheidbarer Teil der Inhaltsvalidität."
},
{
"id": "letter_genre",
"name": "Textsortengerechter Aufbau",
"max_points": 20,
"definition": "Geprüft wird, ob der Prompt ein Bewerbungsschreiben als Textsorte und dessen wesentliche kommunikative Teile erkennbar festlegt. Nicht bewertet werden sprachlicher Stil, technische Ausgabeform oder die inhaltliche Qualität einzelner Argumente.",
"scoring_guide": "0 Punkte: Es wird kein Bewerbungsschreiben oder gleichwertiges Anschreiben verlangt. 10 Punkte: Ein Bewerbungsschreiben wird verlangt, ohne seinen Aufbau näher zu bestimmen. 20 Punkte: Der Prompt verlangt erkennbar einen Einstieg mit Bewerbungsanlass, einen Hauptteil zur Passung und einen Abschluss mit angemessener Gesprächs- oder Kontaktperspektive; eine starre Überschriftenstruktur ist nicht erforderlich.",
"weight_rationale": "Die Textsorte bestimmt, ob das Ergebnis für den konkreten Verwendungszweck geeignet ist. Der Aufbau ist am Prompt unmittelbar prüfbar und erhält deshalb ein hohes, eigenständiges Gewicht."
},
{
"id": "employer_perspective",
"name": "Arbeitgeberperspektive",
"max_points": 15,
"definition": "Geprüft wird, ob der Prompt das Schreiben auf den möglichen Nutzen für die ausschreibende Organisation ausrichtet, statt allein die Wünsche der bewerbenden Person darzustellen. Nicht bewertet werden konkrete Projektleiteraufgaben, persönliche Eignungsbelege oder der Umgang mit fehlenden Unternehmensangaben.",
"scoring_guide": "0 Punkte: Eine Arbeitgeberperspektive ist nicht vorgegeben. 5 Punkte: Der Prompt fordert lediglich eine allgemeine Adressatenorientierung oder Bezugnahme auf die Stelle. 15 Punkte: Er verlangt eine nachvollziehbare Verbindung zwischen dem möglichen Beitrag der bewerbenden Person und den Anforderungen oder Zielen der ausschreibenden Organisation, soweit diese bekannt sind.",
"weight_rationale": "Adressatenorientierung erhöht die praktische Eignung einer Bewerbung. Sie wiegt weniger als Rollenbezug und Argumentation, weil sich ohne Stellenausschreibung nur eine begrenzte Konkretisierung verlangen lässt."
},
{
"id": "language_register",
"name": "Sprache und Ton",
"max_points": 10,
"definition": "Geprüft werden ausdrückliche Vorgaben zur Sprache und zu einem für eine Bewerbung geeigneten Register. Nicht bewertet werden Gliederung, inhaltliche Aussagen oder das Dateiformat.",
"scoring_guide": "0 Punkte: Weder Sprache noch Ton sind festgelegt. 5 Punkte: Entweder die Sprache oder ein professioneller, respektvoller Ton ist festgelegt. 10 Punkte: Beides ist festgelegt; der Prompt erlaubt dabei eine überzeugende, aber nicht übertriebene Formulierung.",
"weight_rationale": "Sprache und Register beeinflussen die Verwendbarkeit deutlich, sind jedoch gegenüber den inhaltlichen Anforderungen leichter zu korrigieren; daher beträgt das Gewicht 10 Punkte."
},
{
"id": "deliverable_form",
"name": "Umfang und Ausgabeform",
"max_points": 10,
"definition": "Geprüft wird, ob der Prompt festlegt, welches unmittelbar nutzbare Ergebnis und welcher angemessene Umfang ausgegeben werden sollen. Nicht bewertet werden die Teile des Bewerbungsschreibens, sein Stil oder der Ablauf bis zur Ausgabe.",
"scoring_guide": "0 Punkte: Es ist weder ein konkretes Ausgabeergebnis noch ein Umfang erkennbar. 5 Punkte: Ein fertiger Bewerbungstext oder ein angemessener Umfang ist festgelegt, aber nicht beides. 10 Punkte: Der Prompt verlangt einen direkt nutzbaren Bewerbungstext und grenzt dessen Umfang sinnvoll ein, etwa als kompaktes Anschreiben statt bloßer Stichpunkte oder eines Lebenslaufs.",
"weight_rationale": "Eine klare Lieferform reduziert vermeidbare Abweichungen, ist aber weniger entscheidend als die fachliche und kommunikative Eignung des Inhalts."
},
{
"id": "process_architecture",
"name": "Nachvollziehbarer Bearbeitungsablauf",
"max_points": 20,
"definition": "Geprüft wird, ob der Prompt die Aufgabe in einen angemessen einfachen Ablauf mit erkennbaren Arbeitsschritten, Abhängigkeiten, Entscheidungen, Fehlerwegen und einem Ergebnis übersetzbar macht. Nicht bewertet werden die inhaltlichen Regeln zur Gültigkeit einzelner Eingaben, die Verwaltung von Zwischenständen oder eine bestimmte technische Umsetzung.",
"scoring_guide": "0 Punkte: Außer der Aufforderung zur Texterstellung ist kein Bearbeitungsweg bestimmbar. 10 Punkte: Mindestens zwei aufeinander bezogene Schritte, etwa Angaben sichten und Schreiben erstellen, sind erkennbar, aber Entscheidungen bei Hindernissen oder der Weg zum Ergebnis bleiben offen. 20 Punkte: Der Prompt macht einen für diese Aufgabe hinreichend klaren Weg von der Sichtung der verfügbaren Angaben über notwendige Entscheidungen bis zum fertigen Schreiben erkennbar und bestimmt, was bei einem Hindernis grundsätzlich geschieht; eine formale Ablaufdarstellung ist nicht nötig.",
"weight_rationale": "Ein nachvollziehbarer Ablauf unterstützt konsistente Ausführung und Fehlersuche. Für einen einzelnen Schreibauftrag zählt Klarheit, nicht die Zahl oder technische Form der Schritte."
},
{
"id": "state_architecture",
"name": "Bearbeitungsstand und Übergänge",
"max_points": 20,
"definition": "Geprüft wird, ob relevante Zustände wie Bearbeitung, gegebenenfalls Warten auf Angaben, Abschluss oder Abbruch sowie passende Übergangs- und Wiederaufnahmeregeln bestimmbar sind. Nicht bewertet werden die fachlichen Inhalte des Schreibens, die Gültigkeit von Eingaben oder eine bestimmte Speicherung beziehungsweise technische Zustandsarchitektur.",
"scoring_guide": "0 Punkte: Weder ein Abschlusszustand noch der Umgang mit einer möglichen Unterbrechung ist bestimmbar. 10 Punkte: Ein Abschluss oder eine Rückfrage ist erkennbar, aber der anschließende Übergang bleibt unklar. 20 Punkte: Der Prompt regelt für den gewählten Bearbeitungsmodus eindeutig, wann ein Ergebnis fertig ist und wie mit einer nötigen Rückfrage, einem Abbruch oder einer Fortsetzung umzugehen ist. Falls ausdrücklich ohne Rückfragen gearbeitet werden soll, genügt eine eindeutige Einmalbearbeitung mit klarer Abschlussregel; dauerhafte Speicherung wird nicht verlangt.",
"weight_rationale": "Klare Übergänge verhindern steckengebliebene oder voreilig abgeschlossene Bearbeitungen. Die Gewichtung berücksichtigt dieses Zuverlässigkeitsrisiko, ohne für die einfache Aufgabe unnötige Zustandsverwaltung zu belohnen."
},
{
"id": "input_processing",
"name": "Eingaben und Umgang mit Informationslücken",
"max_points": 20,
"definition": "Geprüft wird, ob benötigte Eingaben wie Angaben zur Person und gegebenenfalls zur Stelle benannt, in ihrer erwarteten Form hinreichend beschrieben und auf Verwendbarkeit geprüft werden können. Hier allein wird bewertet, wie fehlende, ungültige oder widersprüchliche Angaben behandelt werden: Ersatzannahmen müssen kenntlich und sachlich begründet sein; fehlende Tatsachen dürfen nicht als Fakten erfunden werden. Nicht bewertet werden Textaufbau, Bewerbungsargumentation oder die Reihenfolge der Arbeitsschritte.",
"scoring_guide": "0 Punkte: Der Prompt enthält keine erkennbare Regel zu benötigten Angaben oder Informationslücken. 10 Punkte: Er benennt relevante Eingaben oder untersagt unbelegte Tatsachenbehauptungen, regelt aber Form, Widersprüche und fehlende Angaben nicht hinreichend. 20 Punkte: Er benennt die für das gewünschte Schreiben nötigen Eingaben und ihre erwartete Form, legt einen angemessenen Umgang mit fehlenden oder widersprüchlichen Angaben fest und erlaubt Ersatzannahmen nur, wenn sie als solche erkennbar und sachlich begründet sind; persönliche Qualifikationen oder andere fehlende Tatsachen dürfen nicht erfunden werden.",
"weight_rationale": "Bewerbungen enthalten potenziell überprüfbare persönliche Aussagen. Deshalb ist verlässliche Eingabebehandlung für Korrektheit und praktische Sicherheit ebenso wichtig wie ein klarer Ablauf und ein klarer Bearbeitungsstand."
}
]
},
"evaluation": {
"rubric_id": "c8a7842e91d2086d",
"criterion_scores": [
{
"id": "role_relevance",
"points": 10,
"evidence": "Die Stelle als Projektleiterin oder Projektleiter wird genannt. Konkrete Aufgaben oder Kompetenzen der Projektleitung werden nicht vorgegeben.",
"improvement": "Mindestens zwei einschlägige Bezugspunkte nennen, etwa Projektplanung, Koordination Beteiligter oder Steuerung von Terminen und Ressourcen."
},
{
"id": "applicant_argument",
"points": 20,
"evidence": "Der Prompt verlangt, passende Erfahrungen und Fähigkeiten konkret mit Stellenanforderungen zu verbinden und die Motivation zu erläutern. Behauptungen sollen auf bereitgestellten Angaben beruhen; Qualifikationen und Erfolge dürfen nicht erfunden werden.",
"improvement": "Keine"
},
{
"id": "letter_genre",
"points": 10,
"evidence": "Ein Bewerbungsschreiben mit Anrede, Einleitung, Hauptteil, Schluss und Grußformel wird verlangt. Eine Gesprächs- oder Kontaktperspektive für den Schluss ist nicht festgelegt.",
"improvement": "Für den Schluss eine angemessene Gesprächs- oder Kontaktperspektive vorgeben."
},
{
"id": "employer_perspective",
"points": 5,
"evidence": "Die Erfahrungen und Fähigkeiten sollen zu den Anforderungen der Stelle passen. Eine ausdrückliche Verbindung zwischen dem möglichen Beitrag der Person und dem Nutzen oder den Zielen des Unternehmens fehlt.",
"improvement": "Verlangen, den möglichen Beitrag zum Unternehmen anhand bekannter Anforderungen oder Ziele nachvollziehbar darzustellen."
},
{
"id": "language_register",
"points": 10,
"evidence": "Deutsch sowie ein professioneller, überzeugender und sachlicher Ton sind ausdrücklich vorgegeben.",
"improvement": "Keine"
},
{
"id": "deliverable_form",
"points": 5,
"evidence": "Es soll ausschließlich ein fertiges Bewerbungsschreiben ausgegeben werden. Ein angemessener Umfang ist nicht eingegrenzt.",
"improvement": "Einen kompakten Umfang vorgeben, etwa ein Anschreiben von ungefähr einer Seite."
},
{
"id": "process_architecture",
"points": 20,
"evidence": "Der Weg von der Nutzung bereitgestellter Angaben über den Abgleich mit Stellenanforderungen bis zum fertigen Schreiben ist erkennbar. Für fehlende Angaben sind zurückhaltende Formulierungen oder gekennzeichnete Platzhalter vorgesehen; Rückfragen sind ausgeschlossen.",
"improvement": "Keine"
},
{
"id": "state_architecture",
"points": 20,
"evidence": "Der Prompt legt eine Einmalbearbeitung ohne Rückfragen fest. Mit der ausschließlichen Ausgabe des Bewerbungsschreibens ist der Abschluss eindeutig.",
"improvement": "Keine"
},
{
"id": "input_processing",
"points": 10,
"evidence": "Angaben zur Person, zur Stellenausschreibung und zum Unternehmen werden als Quellen benannt. Fehlende Fakten dürfen nicht erfunden werden; für unverzichtbare Details sind gekennzeichnete Platzhalter vorgesehen. Erwartete Eingabeformen und der Umgang mit widersprüchlichen Angaben fehlen.",
"improvement": "Benötigte Angaben und ihre erwartete Form präzisieren sowie festlegen, wie widersprüchliche Quellen ohne Rückfrage behandelt werden."
}
],
"total_score": 110,
"priority_fixes": [
{
"criterion_id": "role_relevance",
"location": "Erster und zweiter Absatz",
"problem": "Der Rollenbezug bleibt bei der Stellenbezeichnung und allgemeinen Erfahrungen und Fähigkeiten stehen.",
"change": "Mindestens zwei Projektleitungsaufgaben als mögliche Bezugspunkte des Schreibens nennen, ohne unbelegte persönliche Erfahrungen zu unterstellen."
},
{
"criterion_id": "input_processing",
"location": "Absatz zum Umgang mit bereitgestellten und fehlenden Angaben",
"problem": "Für widersprüchliche Angaben und die erwartete Form der Eingaben gibt es keine Regel.",
"change": "Die erwarteten Angaben zur Person und Stelle benennen und bei Widersprüchen eine neutrale Formulierung oder das Weglassen der strittigen Behauptung vorgeben."
},
{
"criterion_id": "employer_perspective",
"location": "Satz zum Abgleich mit den Stellenanforderungen",
"problem": "Die Passung zur Stelle wird verlangt, nicht aber der mögliche Nutzen für die ausschreibende Organisation.",
"change": "Ergänzen, dass der belegbare mögliche Beitrag zu bekannten Anforderungen oder Zielen des Unternehmens deutlich werden soll."
},
{
"criterion_id": "letter_genre",
"location": "Vorgabe zum Schluss",
"problem": "Ein Schluss ist verlangt, aber keine Gesprächs- oder Kontaktperspektive.",
"change": "Einen angemessenen abschließenden Satz mit Gesprächs- oder Kontaktperspektive vorgeben."
},
{
"criterion_id": "deliverable_form",
"location": "Ausgabeanweisung",
"problem": "Der Umfang des fertigen Schreibens bleibt offen.",
"change": "Ein kompaktes Anschreiben von ungefähr einer Seite verlangen."
}
]
}
}
The evaluation and task context needed for this run are included here. Use the
parent generation artifacts when they help you understand what the current
agent produced and how it was evaluated.
This domain improves an existing source prompt instead of designing a prompt
from scratch. The generator should preserve the source prompt's core purpose
while improving clarity, robustness, operational rules, and consistency.
Translate supported evaluator findings into changes to the Task-Agent's
instructions in /home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/prompt_design_agent.py. Do not directly edit the source prompt or a
generated candidate prompt. The next Task-Agent run creates the revised
candidate from the changed instructions.
You may read:
- /home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/prompt_design_agent.py
- /home/USER/PromptEvolution/domains/prompt_design/source_prompts/brief_project_manager_application.md
- files inside /home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/outputs/prompt_design/gen_000
- files inside /home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/outputs/prompt_design/gen_001/meta_workspace
You may edit:
- /home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/prompt_design_agent.py
You may freely create, edit, and remove files inside:
- /home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/outputs/prompt_design/gen_001/meta_workspace
If you want to reinterpret, summarize, or adapt the task for this run, write
that as a new artifact inside the workspace. Keep the source prompt
and all evaluation/report files unchanged.
Make an actual code change to /home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/prompt_design_agent.py. Do not merely describe changes.
TOOL PROTOCOL:
- Use exactly ONE tool per response.
- Tool calls MUST use exactly this format:
<json>
{
"tool_name": "...",
"tool_input": {...}
}
</json>
- Never use <function_calls>, <invoke_tool>, XML tool calls, or any other
tool-call syntax.
- Never simulate a tool result.
- Every editor call must include the absolute `path` inside `tool_input`.
- For `str_replace`, use `command`, `path`, `old_str`, and `new_str` together.
- If editor returns an error, correct the JSON and retry editor; do not switch
to bash, sed, or another editing method.
- Wait for the real tool result before making the next tool call.
After editing:
1. Inspect the changed files.
2. Finish with a short summary. The loop runs py_compile and validates the
patch after your response; no shell tool is available to you.
For this run the evolution scope is PROMPT ONLY.
Target file:
/home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/prompt_design_agent.py
Workspace:
/home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/outputs/prompt_design/gen_001/meta_workspace
STRICT CONSTRAINTS:
- Preserve generate_prompt(task: str) -> str.
- It must continue to return a Python string.
- Keep the existing single Task-Agent LLM call.
- Do not add runtime evaluator logic or extra model calls.
- Improve the prompt-generation strategy inside generate_prompt().
- Preserve the behavior that the Task-Agent improves an existing prompt and
does not replace it with an unrelated prompt.
IMPLEMENTATION PROTOCOL:
- Make exactly one small but meaningful improvement.
- First use editor view on the target file with `line_numbers: false`.
- Your first response must be this actual editor call, with no surrounding text:
<json>{"tool_name":"editor","tool_input":{"command":"view","path":"/home/USER/PromptEvolution/runs/sol6_brief_project_manager_application_standard160_bestLast_260930/prompt_design_agent.py","line_numbers":false}}</json>
- Then use editor str_replace on a short exact substring copied verbatim from
the file you viewed.
- Copy only actual file text into `old_str` and `new_str`. Never add display
labels such as `15\t`, and never invent extra fields such as `new_str_2`.
- Prioritize the actual edit before exploration or documentation. Do not list
directories or create notes, reports, checklists, or summaries before editing.
- If an edit fails, use the real error and file contents to fix that edit next.
- Never assume a proposed tool call was executed. Only real tool results prove
that a change or validation happened.
- Do not replace the whole function or whole file.
- Do not use sed.
- After the edit, view the file again.
- The loop runs py_compile and patch validation after you finish. You do not
need to run either check yourself.
- Documentation is not required; prefer finishing immediately with a short
plain-text summary. Do not spend tools printing success messages.
- Reserve remaining tool calls for the edit, verification, and necessary fixes.
- Do not finish unless the target file actually changed.
SUGGESTED TOOL CYCLE:
1. editor view with `line_numbers: false`
2. editor str_replace
3. editor view to verify the real change
4. finish with a short plain-text summary (the loop performs py_compile)