Files
VianoBugAnalysis/docs/joint-case-planning-v2.md

155 lines
9.8 KiB
Markdown

# Gemeinsame Planung v2: Quellen, Teilkorrekturen und Abhängigkeiten
Neue Revisionen mit `trial run --planning-mode joint` verwenden `case_plan_v2`.
Der Kontext speichert `joint_generation.version=2`. Bereits eingefrorene v1-Kontexte
und Requests bleiben unverändert und über den bisherigen Pfad wiederaufnehmbar.
Der getrennte Modus, Investigation-Loop, Tools, Budgets und Diagnose bleiben unverändert.
`docs/architecture.md` wurde nicht geändert. Syntaxreparaturen sind ein separater Ausbau.
## Quellenklassen und ausdrückliche Testerannahmen
Die dynamischen Interpretationsverträge beschränken source_ids je Aussagekategorie
auf tatsächlich vorhandene IDs der zulässigen Quellentypen. Dies gilt im Prompt und
in der fachlichen Annahme, nicht nur im Transport. Leere Quellmengen erlauben nur
leere entsprechende Aussagearrays. Testerannahmen sind in v2 ausschließlich aus
explizit typisierten tester_assumption-Quellen zugelassen. Kommentare/Beobachtungen
werden nicht allein durch ihre Verfügbarkeit zu Annahmen. Ohne solche Quellen bleibt
tester_assumptions leer. Die LLM darf eigene Schlussfolgerungen nicht dem Tester zuschreiben.
## Explizite Voraussetzungen
Jeder v2-Wire-Vorschlag enthält premises mit kind=grounded oder unverified, knappem
Text, source_ids und interpretation_paths. Grounded benötigt mindestens einen
Verweis und darf keine ungelesenen Referenzen als gelesenen Beleg ausgeben. Referenzen
müssen im Kontext und in den eigenen deklarierten Vorschlagsreferenzen existieren.
Hypothesen bleiben spekulativ; eine Voraussetzung ist keine Bestätigung des Mechanismus.
Die vollständigen Voraussetzungen und Reviews bleiben im unveränderlichen Originalcall.
Die kanonischen Vorschläge behalten den bisherigen Vertrag und erhalten nach Prüfung
nur deterministisch aufgelöste I-IDs. Übernahme/Replays prüfen den Original-Wire-Vertrag erneut.
## Lokale Beanstandungen und begrenzte Patches
Ablehnungen speichern validation_issues mit Aussage-/Feldpfad, Fehlerkategorien und
Quell-/Schemahinweisen. Korrigierbare Stellen werden aus der tatsächlichen Antwort
ermittelt: Quellenklassen, unbekannte Quellen, Schemafehler, Entity-Provenienz,
fehlende Erwartungs-Vollständigkeit und Lookup-Ungewissheit. Unbekannte/globale
Fehler und zu viele Stellen erhalten keinen frei geratenen Patchbereich.
case_plan_statement_repair_v2 verlangt nur Patches für genau die beanstandeten Stellen.
Ein Patch ersetzt eine ganze Aussage bzw. ein nötiges oberes Feld. Null darf eine
beanstandete Arrayaussage entfernen; Löschungen werden absteigend angewandt, damit
sich Indizes nicht während der Zusammensetzung verschieben. Andere Stellen können
nicht überschrieben werden. Ein fehlender oder zusätzlicher Pfad wird abgelehnt.
Es gibt keine stille Entfernung unzulässiger Quellen oder Testerbehauptungen.
Der Request enthält beanstandete Aussagen, nötige verfügbare Quellen, die vorhandenen
Hypothesen samt Voraussetzungen und deren deklarierten Interpretationsaussagen.
Er enthält keinen weiteren vollständigen Case. Kontextkomprimierung/Konsolidierung
bleiben aktiv. Source-Call und Hash binden die unveränderte Ausgangsantwort außerhalb
der Komprimierung. Danach wird die vollständig zusammengesetzte Interpretation geprüft.
Ist keine sichere Lokalisierung möglich, bleibt der bisherige begrenzte Ersatzpfad verfügbar.
## Individuelle Hypothesenprüfung
Der Korrekturaufruf muss jede Hypothese auf direkte UND implizite Abhängigkeit von
korrigierten Aussagen prüfen, auch ohne direkten Verweis auf diese Stellen. Er meldet:
- retain: begründet unabhängig, keine neue Vorschlagsfassung.
- replace: gezielt ein Ersatzvorschlag im vollständigen v2-Vertrag.
- uncertain: keine ungeprüfte Übernahme.
Der Controller lässt retain nur zu, wenn zusätzlich ALLE deklarierten Inputs exakt
unverändert sind. Bei Löschungen wird der Inhalt am Pointer verglichen, nicht nur
dessen Fortbestehen. Geänderte direkte Grundlagen erfordern Ersatz oder weitere Prüfung.
Der Controller kann versteckte Bedeutungsabhängigkeiten nicht beweisen; die semantische
Review bleibt eine fehlbare LLM-Bewertung. Fehlende Referenzen allein gelten niemals
als Nachweis von Unabhängigkeit. Alle zusammengesetzten Vorschläge durchlaufen erneut
Quellen-, Fokus-, Diversitäts-, Count- und Registry-Prüfungen.
Auch ein fehlender oder falsch geformter Review-Block verwirft einen gültigen Interpretationspatch nicht. Seine Hypothesen werden dann nicht ungeprüft übernommen.
Ist die Interpretation gültig, aber ein Kandidat noch unklar, bleibt die Interpretation
angenommen. Explizit geprüfte unabhängige Vorschläge werden in joint_retained des
kanonischen Hypothesenkontexts festgehalten. Folgeaufrufe dürfen nur die anderen Positionen
neu bearbeiten. Position/Anzahl und erhaltene Objekte sind durch Schema-const/prefixItems
UND phasenseitige Gleichheitsprüfung gesperrt. Die volle Registry wird erst nach gültigem
Gesamtergebnis veröffentlicht. Fehlt eine auswertbare Review, wird keine Unabhängigkeit
unterstellt; dann bleibt der konservative Ersatzpfad nötig.
## Persistenz und Grenzen
Original, Patch und Reviews bleiben getrennte echte Calls mit echten Usage-Werten.
Es gibt keine künstlichen LLM-Runden oder doppelte Kostenbuchung. Die Interpretation
wird deterministisch aus Original und zulässigen Patches rekonstruiert. Beim Wiederlesen
werden Quellenhash, Requesthash, Identität, Phase, Konfiguration, erlaubte Pfade und
Zusammensetzung geprüft. Die Kette ist begrenzt; direkte Selbstreferenzen und zu tiefe
Ketten werden abgelehnt. Gespeicherte Reparaturcalls werden nach einem Abbruch wiederbenutzt.
Der bestehende Korrekturversuchszähler begrenzt weiterhin Modellversuche. Transport-Retries
bleiben getrennt. Ein formaler Validierungserfolg beweist weiterhin nicht die Wahrheit
jedes Freitextsatzes. Die Begrenzung dieser Unsicherheit ist ausdrücklich Teil der Policy.
## Offline-Prüfung
Die Tests decken Quellen-Enums, fehlende Annahmenquellen, Voraussetzungscitations,
gezielte Patches, direkte Abhängigkeiten, explizite Ersatzvorschläge, unklare Reviews,
Sperren erhaltener Vorschläge, falsch geformte Modellfelder, Abbruch/Wiederaufnahme und
Import in einen neuen Workspace ab. Ein Fall des unveränderten kuratierten Fehlerkorpus
prüft die Lokalisierung der tatsächlich beobachteten Fehler. Kein bezahlter API-Test
wurde ausgeführt; Kosten und semantische Qualität sind im nächsten Realtest zu messen.
## Dependency recovery revision 1
New joint contexts freeze `joint_generation.recovery_version = 1`. Contexts without
this marker retain the earlier projection and request behavior for replay.
Valid explicit premise references are unioned into their proposal dependency lists
on a copied projection, never by editing the saved LLM answer. Only existing readable
source IDs and exact existing interpretation statement pointers are eligible. Unknown
references and grounded unread references still fail validation. No premise is promoted
from unverified to grounded, and no claim is deleted or rewritten.
Each candidate is checked independently before freezing `joint_retained` in the
hypothesis context. Initial candidates based on an already accepted interpretation
can be retained directly; after interpretation repair, explicit dependency review is
still required. Invalid candidates remain unlocked. Duplicate candidates are not locked
against a necessary diversity correction. A followup corrects only unlocked positions;
locked proposals are enforced with schema constants and local equality checks. Final
publication still validates the full set for count, grounding, primary focus and diversity.
The joint prompt repeats the required `described_behavior.verification` value. Missing
verification is not silently filled: the scoped statement correction must provide it.
The original 2026-10-20 replies and a bounded validation context are preserved in the
curated rejection corpus. Offline regression checks hashes, reference union, sibling
preservation and rejection of invented references. No paid API request was needed.
## Structural recovery revision 2
New contexts freeze `recovery_version = 2`; revision 1 and unmarked historical
contexts keep their original request/projection behavior. This revision includes
revision 1 dependency completion and sibling preservation.
One exact misplaced wrapper is recoverable: a sole top-level `hypotheses` object
containing exactly an `interpretation` object and a `hypotheses` array. These are
copied to the two intended blocks, without changing or dropping any content.
Competing top-level interpretations (even null), extra sibling keys and malformed
wrappers are never guessed away. Both recovered blocks still undergo all existing
schema, source, dependency and semantic contract checks. The original call stays
unchanged and remains the usage/provenance source during replay and import.
During a scoped entity correction, existing eligible identity/mention citations
are restored only when BOTH entity_id and reason are unchanged. Eligible references
come from the original statement and the frozen entity's matching capture/mention
provenance. New evidence is never invented. Changed claims receive no restoration;
unknown replacement sources remain present and invalid. Requests explicitly explain
which existing citations to preserve. When no reusable hypotheses exist, the request
explicitly requires an empty reviews array instead of asking to reconstruct them.
The curated `joint-nested-envelope` corpus preserves the actual rejected replies,
their hashes and bounded context. Offline tests confirm that the initial reply passes
full interpretation and hypothesis validation after lossless wrapper recovery and
existing dependency normalization. A separate regression confirms the later scoped
patch passes interpretation validation after preserving unchanged identity evidence.
No paid API request was executed to establish these results.