diff --git a/frontend/src/components/posts/PostCard.vue b/frontend/src/components/posts/PostCard.vue
index 2d7be9f..d8a7981 100644
--- a/frontend/src/components/posts/PostCard.vue
+++ b/frontend/src/components/posts/PostCard.vue
@@ -20,7 +20,7 @@
class="fc-post-card__synthetic" :title="synthesisTitle"
>
- grouped by FabledCurator
+ {{ synthesisChip }}
toPlainText(props.post.post_title))
// post dict by hand, must degrade to "not synthetic" rather than throw.
const synthesized = computed(() => Boolean(props.post.synthesized_by))
const messageCount = computed(() => props.post.synthesis?.message_count ?? 0)
+// A drop of one message stays a synthetic post (teaser matching only looks at
+// drops), but there is nothing grouped in it — #4390: "Grouped from 1 Discord
+// message" described a wrapper, not a grouping. Say what it is instead.
const synthesisTitle = computed(() => {
const n = messageCount.value
if (!n) return 'Grouped from Discord'
- return `Grouped from ${n} Discord message${n === 1 ? '' : 's'}`
+ if (n === 1) return 'Discord message'
+ return `Grouped from ${n} Discord messages`
})
+const synthesisChip = computed(() =>
+ messageCount.value === 1 ? 'from Discord' : 'grouped by FabledCurator'
+)
const hero = computed(() => images.value[0])
diff --git a/frontend/test/components/postCard.spec.js b/frontend/test/components/postCard.spec.js
index b96f779..5bb2224 100644
--- a/frontend/test/components/postCard.spec.js
+++ b/frontend/test/components/postCard.spec.js
@@ -149,13 +149,16 @@ describe('PostCard', () => {
expect(w.find('.fc-post-card__assoc').exists()).toBe(false)
})
- it('singularises a one-message drop', () => {
+ it('does not call a one-message drop a grouping (#4390)', () => {
const w = mountComponent(PostCard, {
props: { post: { ...SYNTH, synthesis: { message_count: 1 } } },
pinia: freshPinia(),
})
- expect(w.text()).toContain('Grouped from 1 Discord message')
- expect(w.text()).not.toContain('1 Discord messages')
+ expect(w.text()).toContain('Discord message')
+ expect(w.text()).not.toContain('Grouped from')
+ // The marker stays — FC still wrote this post — but names the source.
+ expect(w.find('.fc-post-card__synthetic').text()).toContain('from Discord')
+ expect(w.text()).not.toContain('grouped by FabledCurator')
})
})