Articles validated while a feed has no active route are permanently unroutable #157
Labels
No labels
bug
devops
duplicate
enhancement
good first issue
layout
next major release
next minor release
question
research
testing
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lvl0/fedi-feed-router#157
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
An article validated while its feed has no active route creates no
route_articlesrows, but is still stampedvalidated_at. Because validation runs only once per article, adding a route later cannot recover it — the article is permanently unroutable and invisible to the pipeline.The gap
CreateRouteArticlesAction::execute()loops over the feed's active routes:When
$activeRoutesis empty the loop body never runs and nothing is created. MeanwhileValidateArticleActionstampsarticles.validated_atregardless, andValidateArticleListenerearly-returns on a non-nullvalidated_at. There is no second chance — the article is never reconsidered.Note this is independent of keyword filtering. Keywords only decide pending vs rejected;
firstOrCreateruns unconditionally per active route. With zero active routes, no row is created at any status.Observed on PROD
v1.4.1, inspected 2026-08-16, feed 2 (Belga):
validated_atspread daily across 2026-08-02 → 08-16feed_id=2,platform_channel_id=4,is_active=1) was created 2026-08-15 09:55:00Everything else in the chain is healthy: the Belga API returns 50 URLs, articles save daily, and the one approved route article published successfully. The articles are simply stranded between validation and routing.
Why this matters
The failure is silent — no warning, no notification, nothing in the UI. The system reports success while producing nothing, the same family as #115 and #116.
It is not Belga-specific: any feed that exists before its route does will strand its entire backlog. Creating a feed and adding its route later is a natural user sequence, and discovery starts on the feed immediately.
Fix directions (not chosen — for discussion)
validated_atwhen$activeRoutesis empty, so validation retries once a route appears. Cheapest, but leaves articles repeatedly re-validated while a feed has no route.These differ in cost and in intent; worth deciding deliberately rather than defaulting.
Acceptance criteria
Related
Note on existing data
This fix will not retroactively rescue the 124 already-stranded articles on PROD unless the backfill direction is chosen. Recovering those is a separate data operation (clearing
validated_aton articles with no route article), deliberately out of scope here.