Scope budget assessments and recover valid research after recall

This commit is contained in:
Nico committed 2026-10-20 21:59:59 +02:00
1 parent 3eb0972395
commit cb61ac8cd6
8 files changed
+300 -1

No files matched your search

+56
View File
@@ -0,0 +1,56 @@
# Budgetbewertung nach erneutem Belegabruf
Bug17 wurde an Generation 103 blockiert, weil drei Antworten nach Recall eine
Bewertung enthielten, obwohl `previous_result` null war. Die nächste Source-Abfrage
war plausibel und vollständig. `assessment` betrifft ausschließlich die einmalige
Budgetabrechnung eines neuen Rechercheergebnisses, nicht eine erneute Bewertung
alten Inhalts. Recall selbst erzeugt keinen neuen abrechenbaren Auftrag.
## Kontextabhängiger Vertrag
Neue begrenzte Untersuchungskontexte enthalten `assessment_scope_version: 1`.
Damit erlaubt ihr Antwortschema bei null `previous_result` nur null `assessment`,
bei einem offenen Ergebnis dagegen nur ein vollständiges Bewertungsobjekt.
Das optionale Kontextfeld erhält bestehende gespeicherte Anfragen unverändert.
Bereits eingefrorene Kontexte werden nicht nachträglich umgeschrieben; die
Controllerprüfung und neue Rückmeldungen gelten trotzdem auch bei ihnen.
Fehlerhinweise nennen `/assessment` und erklären das erforderliche Verhalten.
## Eng begrenzte Übernahme
Bei aktivierter Antwortreparatur und begrenztem Fenster v2 kann ein normaler
`investigate_one_step` mit ausdrücklich null `previous_result` eine überflüssige
Budgetbewertung neutralisieren. Voraussetzung sind:
- Ausschließlich `assessment`, `observation`, `next` an der Antwortwurzel.
- Vollständige Bewertung mit Integer-Score 0–100 und nicht leerem Grund.
- Keine zusätzlichen Belegfelder und keine unbekannten E-Referenzen im Grund.
- Eindeutige Aktion `tool`/`project.query` mit einem bekannten lesenden Query-Kind.
- Die Antwort besteht nach Setzen von `assessment: null` das Antwortschema.
Beobachtung und Auftrag bleiben unverändert. Original und Regel
`non_applicable_budget_assessment:/assessment` werden im Aufruf gespeichert;
die entfernte Bewertung wird weder als Erkenntnis noch als Gutschrift übernommen.
Anschließend gelten weiterhin sämtliche Controller-, Beleg-, Projekt- und
Budgetprüfungen vor der Ausführung. Unbekannte Aktionen, fehlerhafte Scores,
zusätzliche Findings, unklare Belegangaben und ausstehende neue Ergebnisse fallen
nicht unter diese Reparatur. Fehlende Bewertungen werden nicht erfunden.
## Nachweis
`test-results/token-usage/bug17-assessment-recovery-offline-20261020.json`
protokolliert die Übernahme aller drei Originalantworten gegen die exakten
ursprünglichen Kontexte und die konfigurierte Source-Prüfung. Keine Ausführung,
keine Budgetänderung, keine neuen bezahlten API-Anfragen.
Tests prüfen kontextabhängige Schemas, historische Kontextkompatibilität,
Originalantworten, Idempotenz, Audit, Ausschluss mehrdeutiger Fälle und einen
Controllerdurchlauf nach Recall: Ein gültiger Rechercheauftrag kostet genau seine
regulären Einheiten, ohne zusätzliche Rückerstattung für den bereits bekannten
Beleg und ohne zusätzlichen LLM-Korrekturaufruf.
Prüfergebnis: 212 Tests der breiteren Prüfung bestanden (191,46 Sekunden).
Die gezielten Tests wurden nach der letzten Präzisierung erneut ausgeführt:
24 bestanden (6,48 Sekunden); die Mengen überlappen. `git diff --check` ohne Befund.
Der bestehende Fall ist ohne Budget-/Artefaktänderung von Generation 103 auf 104
manuell wieder freigegeben. Keine kostenpflichtigen API-Aufrufe.
@@ -0,0 +1,63 @@
{
"format": "viano-offline-recovery-regression",
"date": "2026-10-20",
"source_run": "bug17-bounded-full-20261020",
"source_generation": 103,
"cases": [
{
"call_ref": "llm/operations/8f58f73379896f4edda417f564668be151dea6f1dd75d1872c8aeb64d0cef5ce/round-0001.json",
"normalization_rules": [
"non_applicable_budget_assessment:/assessment"
],
"query_preserved": true,
"observation_preserved": true,
"full_controller_validation": "passed"
},
{
"call_ref": "llm/operations/6ccfd3edde468aa5c42f40ec7c75c2117ae13bf79c3eddd91eb4335ab02d4482/round-0001.json",
"normalization_rules": [
"non_applicable_budget_assessment:/assessment"
],
"query_preserved": true,
"observation_preserved": true,
"full_controller_validation": "passed"
},
{
"call_ref": "llm/operations/4115b3b2b3e209ed778e9ec0c51f6e5ce3a4249e00f87c89aeeedead0841f6a2/round-0001.json",
"normalization_rules": [
"non_applicable_budget_assessment:/assessment"
],
"query_preserved": true,
"observation_preserved": true,
"full_controller_validation": "passed"
}
],
"budgets_unchanged": true,
"paid_api_calls": 0,
"scope": "Exact saved request and context; recovery followed by full controller validation including configured project source validation. No action execution or result accounting.",
"tests": {
"broad_suite_passed": 212,
"broad_elapsed_seconds": 191.46,
"final_targeted_passed": 24,
"final_targeted_elapsed_seconds": 6.48,
"note": "Targeted suite rerun after tightening query-kind whitelist and pending-result feedback. Counts overlap; do not add."
},
"manual_resume": {
"from_generation": 103,
"to_generation": 104,
"state": "INVESTIGATING_HYPOTHESES",
"unchanged_artifact_sha256": {
"investigation_state": "1c71126a1460f71c51a1d2866aab07b37797aaf835f6891f1df46529d2bfc476",
"budget_ledger": "68e74e2f64e0d0b43f002a8c6bfe7ba4d765a72a568012e7dd19a939f55f80eb",
"case_interpretation": "0fd3c2a1efe0f229592b3038b66db26e704f2fb1a03b7321ceb76450e3f98cb4",
"hypotheses": "30494a06ce373f4c497b3964524cee21bdf5350eac515f7a0022619879d125c8"
},
"budgets_reset": false,
"invalid_responses_reset": false
},
"source_sha256": {
"src\\viano_bug_analysis\\analysis\\investigation_lean_v20.py": "f58df59fdd423f515dd439dc90479c815918a42856e9c1cb2ae96f1c572a04f2",
"src\\viano_bug_analysis\\analysis\\investigator.py": "ee3db3cb9bfa9a5f6eedf255283a620a77a7d29ee950d4d6adac263e05400d03",
"src\\viano_bug_analysis\\llm\\response_recovery.py": "faabf4e34542375f9d881303bf4c95ba1f0af10e3fab7236b5786a2d99eb222f"
}
}