Skip to content

[pull] main from TryGhost:main - #1430

Merged
pull[bot] merged 1 commit into
code:mainfrom
TryGhost:main
Aug 20, 2026
Merged

pull[bot] merged 1 commit into
code:mainfrom
TryGhost:main

Conversation

@pull

@pull pull Bot commented Aug 20, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

ref https://linear.app/ghost/issue/ONC-1945

The bulk "Add tag" action inserted a `posts_tags` row for every selected
post without checking whether the post already had the tag. `posts_tags`
has no unique constraint, so re-applying a tag to a selection that
already carried it silently created a redundant row per post

Those rows are invisible everywhere in the product, because the read
path deduplicates by tag `id` before anything renders them. The one
place they leak through is the tag post count, which counted join rows
rather than distinct posts and so reported roughly double

This PR fixes both halves. The bulk action now filters out post/tag
pairs that already exist, matching the guard already in place in the
users service, and also deduplicates the requested tags so passing the
same tag twice in one request no longer inserts twice. The count now
uses `countDistinct` so it reports posts rather than links

Counting distinct matters independently of the write-side fix: it makes
existing affected sites report correctly on upgrade, without a data
migration. Removing the redundant rows would change which tag is primary
on some posts, and therefore post URLs on sites using a `{primary_tag}`
permalink, so leaving them in place is the lower-risk option
@pull pull Bot locked and limited conversation to collaborators Aug 20, 2026
@pull pull Bot added the ⤵️ pull label Aug 20, 2026
@pull
pull Bot merged commit 1ab8b60 into code:main Aug 20, 2026
2 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant