- document Entity Registry and Meeting Context V2 architecture - preserve meeting_context.yaml as the authoritative meeting-specific input - define immutable authoritative metadata across all pipeline stages - restrict Constraint Repair to deterministic structured-data operations - record BUG-003 root cause and deferred entity-verification resolution - document BUG-005 attendance-consistency design - add BUG-006 renderer faithfulness root-cause analysis - distinguish Engineering Readiness from Practical Usability - update the persistent regression bug tracker
427 lines
16 KiB
Markdown
427 lines
16 KiB
Markdown
# BUG-006 Root Cause Analysis
|
|
|
|
## Observed Behaviour
|
|
|
|
In benchmark `meeting_context_v1/e2e_current_20260803_151000`, the Working
|
|
Protocol Renderer output is not a faithful view of the matching consolidated
|
|
representation.
|
|
|
|
Compared files:
|
|
|
|
- Consolidated input:
|
|
`samples/benchmarks/meeting_context_v1/e2e_current_20260803_151000/semantic_consolidator/consolidated_extractions.json`
|
|
- Rendered output:
|
|
`samples/benchmarks/meeting_context_v1/e2e_current_20260803_151000/working_protocol/working_protocol.md`
|
|
- Raw renderer response:
|
|
`samples/benchmarks/meeting_context_v1/e2e_current_20260803_151000/working_protocol/raw_model_response.txt`
|
|
|
|
Observed problems:
|
|
|
|
- consolidated decisions are omitted from the rendered `Decisions` sections
|
|
- consolidated open questions are omitted from rendered `Open Questions`
|
|
sections
|
|
- consolidated facts are rendered as decisions
|
|
- some consolidated action items are omitted
|
|
- some action-item and decision meanings are merged into other rendered
|
|
sections
|
|
|
|
The raw renderer response and `working_protocol.md` are byte-identical
|
|
(`cmp` exit code `0`), so the mismatch is already present in the LLM renderer
|
|
response. It is not introduced by Markdown file writing.
|
|
|
|
## Renderer Input And Prompt Evidence
|
|
|
|
Renderer metadata records the exact input and prompt:
|
|
|
|
- `samples/benchmarks/meeting_context_v1/e2e_current_20260803_151000/working_protocol/metadata.json:2`
|
|
to `:4`
|
|
|
|
The renderer prompt explicitly says:
|
|
|
|
- use only the provided input:
|
|
`prompts/working_protocol.md:9` to `:10`
|
|
- preserve all decisions, action items and open questions:
|
|
`prompts/working_protocol.md:24` to `:26`
|
|
- remove presentation-level redundancy:
|
|
`prompts/working_protocol.md:23`
|
|
- do not repeat information merely because it appears in multiple categories:
|
|
`prompts/working_protocol.md:65`
|
|
- condense everything else:
|
|
`prompts/working_protocol.md:75`
|
|
|
|
The prompt is therefore present and relevant, but the direct observed failure
|
|
occurs in the model-generated renderer response.
|
|
|
|
## Faithfulness Analysis
|
|
|
|
### Rendered Section: Prozessrahmen und Projektideen-Eingang / Background
|
|
|
|
Status: modified.
|
|
|
|
Rendered lines:
|
|
|
|
- `working_protocol.md:7`
|
|
- `working_protocol.md:9`
|
|
|
|
The section condenses several consolidated facts and decisions into background
|
|
paragraphs. Examples:
|
|
|
|
- `decision_0001` is restated in background and again as a decision.
|
|
- `fact`: `Der Prozess ist ein F&E-Prozess gewesen, einfach historisch.`
|
|
- `fact`: `Die Bearbeitung der Projekte muss und kann nur in den
|
|
Fachabteilungen passieren.`
|
|
- `fact`: `Bevor F&E ein Projekt durchdenkt, müssen im Vorfeld Kriterien wie
|
|
Marktexistenz und Zulassungen geprüft werden.`
|
|
- `decision_0003` and `decision_0005` are partially restated as background.
|
|
|
|
This is a condensation, not a renderer-only invention.
|
|
|
|
### Rendered Section: Prozessrahmen und Projektideen-Eingang / Decisions
|
|
|
|
Status: partially faithful, partially omitted.
|
|
|
|
Faithfully or near-faithfully preserved:
|
|
|
|
- `decision_0001` -> `working_protocol.md:13`
|
|
- `decision_0002` -> `working_protocol.md:14`
|
|
- `decision_0003` -> `working_protocol.md:15`
|
|
- `decision_0005` -> `working_protocol.md:16`
|
|
- `decision_0006` -> `working_protocol.md:17`
|
|
- `decision_0009` -> `working_protocol.md:18`
|
|
- `decision_0011` -> `working_protocol.md:19`
|
|
|
|
Omitted as decisions:
|
|
|
|
- `decision_0004`: `Festlegung eines Reporting-Zyklus für abgelehnte
|
|
Projekte.`
|
|
- Consolidated evidence: `consolidated_extractions.json:1217` to `:1227`
|
|
- Rendered only as background: `working_protocol.md:72`
|
|
- `decision_0007`: `Zusammengetragen und beantwortete Fragen führen zur
|
|
Sitzung mit fünf Leuten...`
|
|
- Consolidated evidence: `consolidated_extractions.json:1329` to `:1339`
|
|
- No matching rendered decision.
|
|
- `decision_0008`: `Es wird vereinbart, den bestehenden Prozessrahmen zu
|
|
nutzen und auf die Bedürfnisse der F&E abzustimmen...`
|
|
- Consolidated evidence present in the input.
|
|
- No matching rendered decision.
|
|
- `decision_0010`: `Es wird vereinbart, dass betriebliche
|
|
Verbesserungsvorschläge... ausgeschleust werden.`
|
|
- Consolidated evidence present in the input.
|
|
- No matching rendered decision.
|
|
- `decision_0012`: `Die Diskussion wird beendet und die Änderungen werden
|
|
verschickt; Abwarten auf Rückmeldung von Johanna/Björn.`
|
|
- Consolidated evidence: `consolidated_extractions.json:1747` to `:1757`
|
|
- No matching rendered decision.
|
|
|
|
### Rendered Section: Prozessrahmen und Projektideen-Eingang / Action Items
|
|
|
|
Status: partially faithful, partially omitted, with upstream semantic problems
|
|
preserved.
|
|
|
|
Rendered lines:
|
|
|
|
- `working_protocol.md:23` to `:32`
|
|
|
|
Preserved action items include:
|
|
|
|
- `action_item_0001` -> `working_protocol.md:23`
|
|
- `action_item_0002` -> `working_protocol.md:24`
|
|
- `action_item_0003` -> `working_protocol.md:25`
|
|
- `action_item_0004` -> `working_protocol.md:26`
|
|
- `action_item_0005` -> `working_protocol.md:27`
|
|
- `action_item_0006` -> `working_protocol.md:28`
|
|
- `action_item_0007` -> `working_protocol.md:29`
|
|
- `action_item_0009` -> `working_protocol.md:30`
|
|
- `action_item_0011` -> `working_protocol.md:31`
|
|
- `action_item_0012` -> `working_protocol.md:32`
|
|
|
|
Omitted or merged action items:
|
|
|
|
- `action_item_0008`: `Diskussion über die Relevanz eines speziellen Marktes
|
|
(z.B. Turkmenistan) führen.`
|
|
- Present in consolidated input.
|
|
- No matching rendered action item.
|
|
- `action_item_0010`: `Filterkriterien für verschiedene Fälle... definieren.`
|
|
- Present in consolidated input.
|
|
- Its meaning overlaps with rendered decision `working_protocol.md:18` and
|
|
action item `working_protocol.md:30`, but it is not preserved as its own
|
|
action item.
|
|
|
|
Important boundary:
|
|
|
|
Items such as `Feedback zu den Kriterien...`, `Einbinden der Fachbereiche...`
|
|
and `Mail an Jovana und Björn...` are questionable todos, but they are already
|
|
`action_item` entries in the consolidated input:
|
|
|
|
- `consolidated_extractions.json:1007` to `:1019`
|
|
- `consolidated_extractions.json:1537` to `:1549`
|
|
- `consolidated_extractions.json:1651` to `:1663`
|
|
|
|
The renderer preserves those upstream action-item categories. It does not
|
|
create those todos from facts or prose.
|
|
|
|
### Rendered Section: Prozessrahmen und Projektideen-Eingang / Open Questions
|
|
|
|
Status: partially faithful, partially omitted.
|
|
|
|
Rendered lines:
|
|
|
|
- `working_protocol.md:36` to `:47`
|
|
|
|
Preserved open questions:
|
|
|
|
- `open_question_0001` -> `working_protocol.md:36`
|
|
- `open_question_0002` -> `working_protocol.md:37`
|
|
- `open_question_0003` -> `working_protocol.md:38`
|
|
- `open_question_0004` -> `working_protocol.md:39`
|
|
- `open_question_0005` -> `working_protocol.md:40`
|
|
- `open_question_0006` -> `working_protocol.md:41`
|
|
- `open_question_0007` -> `working_protocol.md:42`
|
|
- `open_question_0009` -> `working_protocol.md:43`
|
|
- `open_question_0010` -> `working_protocol.md:44`
|
|
- `open_question_0011` -> `working_protocol.md:45`
|
|
- `open_question_0012` -> `working_protocol.md:46`
|
|
- `open_question_0013` -> `working_protocol.md:47`
|
|
|
|
Omitted open questions:
|
|
|
|
- `open_question_0008`: `Wer soll die Rolle des Gatekeepers übernehmen und wie
|
|
wird der Prozess konkret implementiert?`
|
|
- Consolidated evidence: `consolidated_extractions.json:1387` to `:1397`
|
|
- No matching rendered open question.
|
|
- `open_question_0014`: `Welche Prüfsteine sind relevant für die
|
|
Fachabteilung?`
|
|
- Consolidated evidence: `consolidated_extractions.json:1765` to `:1775`
|
|
- No matching rendered open question.
|
|
|
|
### Rendered Section: Projektkategorisierung und Status / Background
|
|
|
|
Status: modified.
|
|
|
|
Rendered line:
|
|
|
|
- `working_protocol.md:53`
|
|
|
|
This condenses:
|
|
|
|
- fact: `Der Leiter F&E führt die Projektliste...`
|
|
- `technical_detail_0010`: project type definition
|
|
- fact: `Ein Projekt wandert direkt wieder in Business Development...`
|
|
|
|
No renderer-only invention was verified in this section.
|
|
|
|
### Rendered Section: Projektkategorisierung und Status / Decisions
|
|
|
|
Status: category-changed.
|
|
|
|
Rendered lines:
|
|
|
|
- `working_protocol.md:57`
|
|
- `working_protocol.md:58`
|
|
|
|
Both rendered decisions are facts in the consolidated input:
|
|
|
|
- fact: `Im Zweifel gehen Projekte durch.`
|
|
- Consolidated evidence: `consolidated_extractions.json:775` to `:784`
|
|
- Rendered as decision: `working_protocol.md:57`
|
|
- fact: `Ein Projekt kann abgelehnt werden, aber es muss sichergestellt sein,
|
|
dass relevante Projekte nicht weggeschmissen werden.`
|
|
- Consolidated evidence: `consolidated_extractions.json:755` to `:764`
|
|
- Rendered as decision: `working_protocol.md:58`
|
|
|
|
This is the clearest category change in the renderer output.
|
|
|
|
### Rendered Section: Projektkategorisierung und Status / Action Items
|
|
|
|
Status: omitted.
|
|
|
|
Rendered line:
|
|
|
|
- `working_protocol.md:62`: `*Keine.*`
|
|
|
|
The consolidated input contains at least one action item that belongs to this
|
|
topic area:
|
|
|
|
- `action_item_0008`: `Diskussion über die Relevanz eines speziellen Marktes
|
|
(z.B. Turkmenistan) führen.`
|
|
|
|
The renderer omitted it.
|
|
|
|
### Rendered Section: Projektkategorisierung und Status / Open Questions
|
|
|
|
Status: faithful to rendered grouping, but unfaithful to complete input.
|
|
|
|
Rendered line:
|
|
|
|
- `working_protocol.md:66`: `*Keine.*`
|
|
|
|
The complete consolidated input still contains project-process open questions,
|
|
including omitted `open_question_0008` and `open_question_0014`. They were not
|
|
rendered elsewhere.
|
|
|
|
### Rendered Section: Technische Details und Infrastruktur / Background
|
|
|
|
Status: modified.
|
|
|
|
Rendered line:
|
|
|
|
- `working_protocol.md:72`
|
|
|
|
This condenses facts and technical details:
|
|
|
|
- fact: `Das Netzwerk bei Gemeinden ist momentan langsam.`
|
|
- `technical_detail_0006`: `Das Netzwerk ist langsam (wie zu ISDN-Zeiten).`
|
|
- `technical_detail_0007`: `Der Rechner schmiert ab...`
|
|
- fact: `Das Dokument ist das aktuelle Projektdeckblatt...`
|
|
- fact: `Es gibt einen Reporting-Zyklus.`
|
|
- fact: `Sekretariate sind sehr abweisend...`
|
|
|
|
The problem is not invention; the problem is that `decision_0004`
|
|
(`Festlegung eines Reporting-Zyklus...`) is downgraded from decision to
|
|
background.
|
|
|
|
### Rendered Section: Technische Details und Infrastruktur / Decisions
|
|
|
|
Status: omitted.
|
|
|
|
Rendered line:
|
|
|
|
- `working_protocol.md:76`: `*Keine.*`
|
|
|
|
The consolidated input contains `decision_0004`, which is about a reporting
|
|
cycle and is rendered only as background.
|
|
|
|
### Rendered Section: Technische Details und Infrastruktur / Action Items
|
|
|
|
Status: faithful to rendered items.
|
|
|
|
Rendered lines:
|
|
|
|
- `working_protocol.md:80`
|
|
- `working_protocol.md:81`
|
|
|
|
These correspond to:
|
|
|
|
- `action_item_0013`
|
|
- `action_item_0014`
|
|
|
|
The semantic quality of `action_item_0014` is questionable, but that issue is
|
|
upstream because the consolidated input already categorizes it as an action
|
|
item.
|
|
|
|
### Rendered Section: Technische Details und Infrastruktur / Open Questions
|
|
|
|
Status: omitted relative to complete input.
|
|
|
|
Rendered line:
|
|
|
|
- `working_protocol.md:85`: `*Keine.*`
|
|
|
|
No technical open questions are clearly required here, but the overall rendered
|
|
protocol still omits consolidated open questions elsewhere.
|
|
|
|
## Exact Mismatches
|
|
|
|
| Consolidated item | Category before | Rendered text | Category after | Result |
|
|
| --- | --- | --- | --- | --- |
|
|
| `decision_0004`: `Festlegung eines Reporting-Zyklus...` | decision | `Es gibt einen Reporting-Zyklus...` | background | category weakened |
|
|
| `decision_0007`: `...Sitzung mit fünf Leuten...` | decision | none | omitted | omitted |
|
|
| `decision_0008`: `...Prozessrahmen nutzen...` | decision | none | omitted | omitted |
|
|
| `decision_0010`: `...Verbesserungsvorschläge... ausgeschleust...` | decision | none | omitted | omitted |
|
|
| `decision_0012`: `Die Diskussion wird beendet...` | decision | none | omitted | omitted |
|
|
| `open_question_0008`: `Wer soll die Rolle des Gatekeepers übernehmen...` | open_question | none | omitted | omitted |
|
|
| `open_question_0014`: `Welche Prüfsteine sind relevant...` | open_question | none | omitted | omitted |
|
|
| fact: `Im Zweifel gehen Projekte durch.` | fact | `Im Zweifel gehen Projekte durch.` | decision | promoted |
|
|
| fact: `Ein Projekt kann abgelehnt werden...` | fact | same meaning | decision | promoted |
|
|
| `action_item_0008`: `Diskussion über die Relevanz... Turkmenistan...` | action_item | none | omitted | omitted |
|
|
| `action_item_0010`: `Filterkriterien für verschiedene Fälle... definieren.` | action_item | overlapped by decision/action item text | merged / not preserved as action item | modified |
|
|
|
|
## Invented Content Check
|
|
|
|
No renderer-only invented people were verified in this comparison. `Guido` and
|
|
`Noah` appear in the rendered protocol, but they are already present in the
|
|
consolidated input. This belongs to BUG-003, not BUG-006.
|
|
|
|
No clear renderer-only invented responsibility was verified in this comparison.
|
|
Questionable todos in the rendered protocol are already categorized as action
|
|
items in the consolidated input.
|
|
|
|
## Merged And Split Items
|
|
|
|
Verified merges:
|
|
|
|
- Multiple facts and decisions are merged into background paragraphs in
|
|
`working_protocol.md:7`, `:9`, `:53` and `:72`.
|
|
- `action_item_0010` is not preserved as a separate action item and overlaps
|
|
with rendered filter-criteria decision/action-item wording.
|
|
|
|
Verified splits:
|
|
|
|
- No clear split from one consolidated item into multiple materially different
|
|
rendered items was identified.
|
|
|
|
## Earliest Point Where The Mismatch Occurs
|
|
|
|
The earliest point is the Working Protocol Renderer LLM response.
|
|
|
|
Evidence:
|
|
|
|
- `metadata.json` records renderer input as
|
|
`semantic_consolidator/consolidated_extractions.json` and prompt file
|
|
`prompts/working_protocol.md`.
|
|
- `raw_model_response.txt` already contains the omissions and category
|
|
changes.
|
|
- `raw_model_response.txt` and `working_protocol.md` are byte-identical.
|
|
|
|
Therefore the mismatch is not introduced by renderer post-processing, output
|
|
normalization or Markdown generation.
|
|
|
|
## Verified Root Cause
|
|
|
|
Verified cause:
|
|
|
|
The single-pass LLM Working Protocol Renderer does not reliably preserve the
|
|
category and coverage constraints of the consolidated input. It generates a
|
|
Markdown view that condenses and reorganizes the input, but the generated raw
|
|
response omits required items and changes some categories.
|
|
|
|
Cause classification:
|
|
|
|
- Renderer prompt: not proven as the sole root cause. The prompt includes
|
|
explicit preservation rules, but also includes condensation and redundancy
|
|
instructions. The evidence proves the model output violates the preservation
|
|
rules; it does not prove which prompt sentence caused the violation.
|
|
- Renderer post-processing: disproved. Raw response and final Markdown are
|
|
identical.
|
|
- Renderer output normalization: disproved. No separate normalization changed
|
|
the raw response.
|
|
- Markdown generation: disproved. The final file is the raw Markdown response.
|
|
- Another verified cause: single-pass LLM renderer generation violates
|
|
structural faithfulness requirements.
|
|
|
|
## Confidence
|
|
|
|
High for the location of the failure and for disproving post-processing,
|
|
normalization and Markdown generation as causes.
|
|
|
|
Medium for root-cause classification beyond that. The evidence identifies the
|
|
renderer LLM response as the failing point, but does not isolate one prompt
|
|
sentence as the cause.
|
|
|
|
## Conceptual Repair Strategy
|
|
|
|
Do not attempt to repair this with free-form post-processing.
|
|
|
|
Conceptually, renderer faithfulness needs a structural coverage contract:
|
|
|
|
- every consolidated decision must be accounted for as a decision
|
|
- every consolidated action item must be accounted for as an action item
|
|
- every consolidated open question must be accounted for as an open question
|
|
- facts may appear in background, but must not be promoted to decisions
|
|
- omissions and category changes should be validator-detectable before the
|
|
protocol is accepted
|
|
|
|
The renderer output should be validated against the consolidated input by item
|
|
ID or another stable structured reference, rather than relying on prose-only
|
|
Markdown to preserve category semantics implicitly.
|