Root cause chain (evidence: 25+ failed traces on nproj/3022414):
straight quote in page text ends the guided-decoding JSON string
early -> grammar deadlock -> whitespace loop until context/token
limit -> chat_json fails 3x (~35 min) -> IMAP conn idles out ->
move_to_trash raises -> mail never trashed -> reprocessed forever.
- ingest/mailer: MailBox.ensure_alive() reconnect before finalize;
move_to_trash failure falls back to flag_checked, run continues
- stages: page_text() feeds only div.content minus skill-tag cloud
to the LLM and maps quote chars to apostrophes (the actual
degeneration trigger, live-verified: extract now OK in 21 s)
- llm: requirements maxItems 40; max_tokens 8192 caps degenerate
runs at ~100 s instead of ~10 min
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
With the vLLM qwen3 reasoning parser active, json_schema guided decoding
plus thinking degenerates: runs burn the whole 65k context
(finish_reason "length", ~63k completion tokens) and return empty or
truncated content. chat_template_kwargs {"enable_thinking": false} fixes
it (extract answers in ~35 s). Also: retry chat_json up to 3x on
non-JSON content, and two prompt calibrations verified against both
gate examples — Nice signal words bind only to their own line (following
unmarked lines stay Must), and compound requirements with clear evidence
for one part rate "unknown" instead of "no".
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Langflow 1.10's Component base class defines ctx as a @property returning
the flow-level graph.context store; a DataInput named ctx is silently
shadowed at attribute access, so the edge-delivered payload never reaches
build_out(). Renamed the field in the five downstream Flow-2 wrappers;
build_flows.py edges target ctx_in.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>