RSS Feed lastGuid Rotation Handling #584

Closed
opened 2026-09-18 14:47:14 +01:00 by Smithy-bot · 2 comments
Member

Epic: #528
Story Points:


Stop treating every item as new when the stored lastGuid has rotated off the feed (retention/expiry), so a poll cannot flood a channel.

Follow-up from the review on #579 / #530: GetNewItems currently returns the full feed when lastGuid is set but not present.

Acceptance Criteria

GIVEN a parsed feed with items ordered newest-first
AND lastGuid matches an item still in the feed
WHEN RssFeedHelper.GetNewItems is called
THEN only items newer than lastGuid are returned, oldest-first
AND existing behaviour is unchanged

GIVEN a parsed feed with items ordered newest-first
AND lastGuid is set but is not present on any item
WHEN RssFeedHelper.GetNewItems is called
THEN at most 10 items are returned, oldest-first
AND the newest items in the feed are the ones kept if the feed is larger than the cap

GIVEN a parsed feed
AND lastGuid is missing, null, or empty
WHEN RssFeedHelper.GetNewItems is called
THEN an empty array is still returned (first-poll behaviour is unchanged)

Subtasks

  • Update RssFeedHelper.GetNewItems to cap results when lastGuid is not found in the feed
  • Keep newest-first scan and oldest-first return order
  • Make the cap configurable (default 10) so the timer/commands can reuse it
  • Update tests for unknown lastGuid, cap overflow, and the existing match/empty cases

Notes

  • Raised in the #579 review: if lastGuid disappears from a feed (retention/rotation), all items are treated as new
  • Cap applies only when lastGuid is set but not found; do not flood on first poll (lastGuid absent still returns [])
  • Suggested default cap: 10 items per poll
Epic: #528 Story Points: --- Stop treating every item as new when the stored `lastGuid` has rotated off the feed (retention/expiry), so a poll cannot flood a channel. Follow-up from the review on #579 / #530: `GetNewItems` currently returns the full feed when `lastGuid` is set but not present. ## Acceptance Criteria GIVEN a parsed feed with items ordered newest-first AND `lastGuid` matches an item still in the feed WHEN `RssFeedHelper.GetNewItems` is called THEN only items newer than `lastGuid` are returned, oldest-first AND existing behaviour is unchanged GIVEN a parsed feed with items ordered newest-first AND `lastGuid` is set but is not present on any item WHEN `RssFeedHelper.GetNewItems` is called THEN at most 10 items are returned, oldest-first AND the newest items in the feed are the ones kept if the feed is larger than the cap GIVEN a parsed feed AND `lastGuid` is missing, null, or empty WHEN `RssFeedHelper.GetNewItems` is called THEN an empty array is still returned (first-poll behaviour is unchanged) ## Subtasks - [ ] Update `RssFeedHelper.GetNewItems` to cap results when `lastGuid` is not found in the feed - [ ] Keep newest-first scan and oldest-first return order - [ ] Make the cap configurable (default 10) so the timer/commands can reuse it - [ ] Update tests for unknown `lastGuid`, cap overflow, and the existing match/empty cases ## Notes - Raised in the #579 review: if `lastGuid` disappears from a feed (retention/rotation), all items are treated as new - Cap applies only when `lastGuid` is set but not found; do not flood on first poll (`lastGuid` absent still returns `[]`) - Suggested default cap: 10 items per poll
Smithy-bot added this to the 3.4.0 milestone 2026-09-18 14:47:14 +01:00
Vylpes added this to the 3.3 Sprint 9 project 2026-09-23 18:39:13 +01:00
Smithy-bot removed their assignment 2026-10-12 12:04:13 +01:00
Author
Member

Implemented lastGuid rotation handling on feature/epic-528-rss-feeds.

  • Branch: cursor/584-rss-feed-lastguid-rotation
  • PR: #590 (ready for review, not merged)
  • GetNewItems now caps at 10 newest items (configurable 3rd arg) when lastGuid is set but missing from the feed; match / first-poll behaviour unchanged
  • Local: yarn build + yarn test PASS (5 suites / 72 tests)

Moved to step/review and assigned to @Vylpes for approval.

Implemented lastGuid rotation handling on `feature/epic-528-rss-feeds`. - Branch: `cursor/584-rss-feed-lastguid-rotation` - PR: https://git.vylpes.xyz/RabbitLabs/vylbot-app/pulls/590 (ready for review, not merged) - `GetNewItems` now caps at 10 newest items (configurable 3rd arg) when `lastGuid` is set but missing from the feed; match / first-poll behaviour unchanged - Local: `yarn build` + `yarn test` PASS (5 suites / 72 tests) Moved to `step/review` and assigned to @Vylpes for approval.
Vylpes removed their assignment 2026-10-12 12:17:29 +01:00
Smithy-bot removed their assignment 2026-10-13 12:04:36 +01:00
Author
Member

QA results — PASS

Tested on feature/epic-528-rss-feeds @ ee47097 (PR #590 merged by Vylpes 2026-10-12).

Note: Code is on the epic feature branch, not yet on release/3.4.0.

Pipeline

  • yarn install --frozen-lockfile PASS
  • yarn build (tsc) PASS
  • yarn test PASS — 5 suites / 72 tests / 2 snapshots
  • lint N/A on this branch (no lint script)

Acceptance criteria

  • Match path: newer-than-lastGuid returned oldest-first — covered; RssFeedHelper suite PASS
  • Rotated/unknown lastGuid: default cap 10 newest items, oldest-first — covered
  • Custom rotatedLastGuidCap honoured — covered
  • Missing/null/empty lastGuid still returns [] (first poll) — covered

Moved step/testing → step/uat and assigned @Vylpes.
Live feed rotation smoke left for human UAT.

## QA results — PASS Tested on `feature/epic-528-rss-feeds` @ `ee47097` (PR #590 merged by Vylpes 2026-10-12). **Note:** Code is on the epic feature branch, not yet on `release/3.4.0`. ### Pipeline - `yarn install --frozen-lockfile` PASS - `yarn build` (tsc) PASS - `yarn test` PASS — 5 suites / 72 tests / 2 snapshots - lint N/A on this branch (no lint script) ### Acceptance criteria - Match path: newer-than-`lastGuid` returned oldest-first — covered; RssFeedHelper suite PASS - Rotated/`unknown` `lastGuid`: default cap 10 newest items, oldest-first — covered - Custom `rotatedLastGuidCap` honoured — covered - Missing/null/empty `lastGuid` still returns `[]` (first poll) — covered Moved `step/testing` → `step/uat` and assigned @Vylpes. Live feed rotation smoke left for human UAT.
Vylpes 2026-10-13 13:52:49 +01:00
  • closed this issue
  • removed the
    step
    uat
    label
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
RabbitLabs/vylbot-app#584
No description provided.