53ebb68339
buildPrompt() only ever sent ContentItem.summary (a ~500-char RSS description) to the model, never .body (the full article text when the feed provides <content:encoded>) — even though publishDirect already preferred body over summary for the no-AI-merge path. A single-source cluster was effectively asking the model to "lightly rewrite" a one-paragraph blurb, which it did almost verbatim, producing a short repeated synopsis instead of an actual article. Now mirrors publishDirect's item.body || item.summary fallback. Body is already HTML-stripped at ingestion (ingestion/adapters/base.ts), so no new sanitization needed. The per-entry character budget added in the previous truncation fix now does real work here, since full bodies can be much longer than summaries.