diff --git a/src/server/signals/truth.test.ts b/src/server/signals/truth.test.ts
index 8087b7d..4c1c514 100644
--- a/src/server/signals/truth.test.ts
+++ b/src/server/signals/truth.test.ts
@@ -15,6 +15,14 @@ describe('parseTruthFeed', () => {
expect(posts[0].text).toContain('Bitcoin is going to the MOON');
expect(posts[0].text).not.toContain('
');
});
+ test('überspringt malformed Items, leerer Input → []', () => {
+ expect(parseTruthFeed('')).toEqual([]);
+ const bad = `
+- Fri, 12 Jun 2026 01:49:56 +0000ohne Link
+- https://trumpstruth.org/statuses/3kein Datumx
+`;
+ expect(parseTruthFeed(bad)).toEqual([]);
+ });
});
describe('matchCoins', () => {
diff --git a/src/server/signals/truth.ts b/src/server/signals/truth.ts
index a4f6bf8..48793cf 100644
--- a/src/server/signals/truth.ts
+++ b/src/server/signals/truth.ts
@@ -21,7 +21,7 @@ export function parseTruthFeed(xml: string): TruthPost[] {
const text = descRaw
.replace(/^$/g, '')
.replace(/<[^>]+>/g, ' ')
- .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, "'")
+ .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, "'").replace(/ /g, ' ')
.replace(/\s+/g, ' ')
.trim();
posts.push({ url, ts, text });