Prevent deleted list entries from appearing as active recent updates #352

Closed
opened 2026-06-03 11:18:29 -05:00 by Codex · 1 comment
Member

Deleting a game from a user's list should not create a misleading Recent Gamer Updates item that says the user is playing that game.

The Notion report says: "Deleting a game from the list shows as 'playing' on recent gamer updates." A follow-up comment also questions whether deleting a game is worth announcing at all. In the current Laravel checkout, GameListController::destroy() soft-deletes the list row and then calls logGamerUpdate($gameList, $gameList->game, 'deleted'). That logger stores the current list status and derives activity_type from the status/replay state, so a deleted row whose status was Playing can still enter the public feed as a playing activity. App\Support\RecentGamerUpdates also has no dedicated deleted message branch.

This issue should make the product behavior explicit and prevent deletion activity from being rendered as an active list status. The recommended behavior is to not announce game-list deletions in Recent Gamer Updates.

Related but separate:

  • #3 tracks long-term Recent Gamer Updates storage/indexing strategy.
  • #346 tracks adding comment activity to Recent Gamer Updates.

Source: https://app.notion.com/p/3742f7baaae480478f3cd80944091561

Scope

  • Authenticated game-list deletion flow at /list/remove/{gameList}.
  • GameListController::destroy() and logGamerUpdate() behavior for deleted list entries.
  • gamer_updates activity records created by game-list create/update/delete actions.
  • App\Support\RecentGamerUpdates rendering of list activity types.
  • Homepage/sidebar Recent Gamer Updates card and /recent-gamer-updates page.
  • Existing create/update feed items for Playing, Replaying, Continuously Playing, Completed, On Hold, Dropped, and Plan to Play should remain intact.

Acceptance Criteria

  • Deleting a game-list entry does not produce a Recent Gamer Updates item that says the user is playing, replaying, completed, dropped, or otherwise actively status-updating that game.
  • The implementation explicitly chooses one deletion behavior:
    • preferably, game-list deletion is not written to the public gamer_updates feed; or
    • if deletion is intentionally kept public, it uses a clear deleted/removed activity type and copy such as "removed X from their list."
  • Existing create/update list-status changes continue to create the correct feed item.
  • Existing list deletion still soft-deletes the user's list row and redirects back to the list with the success message.
  • Guest/public feed views do not expose deleted-list activity as a misleading active status.
  • Banned/deleted user and hide_public_feed_entries filtering continues to apply.
  • Feed copy remains readable in light and dark mode.

Test Coverage Required

  • Feature/regression test proving deleting a Playing list entry does not render as "is playing" in Recent Gamer Updates.
  • Feature/regression test proving deleting entries from each supported status does not render as that active status after deletion.
  • Test covering the chosen product behavior:
    • if deletions are suppressed, assert no public gamer_updates activity is created or rendered for delete events; or
    • if deletions are announced, assert the public copy says removed/deleted and does not use active status language.
  • Regression test confirming list deletion still soft-deletes the row and shows the existing success feedback.
  • Regression test confirming create/update status changes still produce the expected Recent Gamer Updates messages.
  • Regression test confirming RecentGamerUpdates still filters banned, deleted, soft-deleted, and feed-hidden users.
  • Run focused affected tests with php artisan test --compact.
  • Run vendor/bin/pint --dirty --format agent before closing the issue if PHP files are changed.

Progress Checklist

  • Game-list delete route exists
  • Game-list deletion soft-deletes the row
  • Game-list deletion currently calls logGamerUpdate()
  • logGamerUpdate() currently derives activity_type from status/replay state
  • RecentGamerUpdates renders active status activity types
  • Decide whether game-list deletions should be public feed events
  • Suppress delete activity or add a dedicated removed/deleted activity type
  • Ensure delete events cannot render as Playing or another active status
  • Preserve create/update feed activity
  • Add focused regression coverage for delete, create/update, and feed filtering
Deleting a game from a user's list should not create a misleading Recent Gamer Updates item that says the user is playing that game. The Notion report says: "Deleting a game from the list shows as 'playing' on recent gamer updates." A follow-up comment also questions whether deleting a game is worth announcing at all. In the current Laravel checkout, `GameListController::destroy()` soft-deletes the list row and then calls `logGamerUpdate($gameList, $gameList->game, 'deleted')`. That logger stores the current list status and derives `activity_type` from the status/replay state, so a deleted row whose status was Playing can still enter the public feed as a `playing` activity. `App\Support\RecentGamerUpdates` also has no dedicated `deleted` message branch. This issue should make the product behavior explicit and prevent deletion activity from being rendered as an active list status. The recommended behavior is to not announce game-list deletions in Recent Gamer Updates. Related but separate: - #3 tracks long-term Recent Gamer Updates storage/indexing strategy. - #346 tracks adding comment activity to Recent Gamer Updates. Source: https://app.notion.com/p/3742f7baaae480478f3cd80944091561 ## Scope - Authenticated game-list deletion flow at `/list/remove/{gameList}`. - `GameListController::destroy()` and `logGamerUpdate()` behavior for deleted list entries. - `gamer_updates` activity records created by game-list create/update/delete actions. - `App\Support\RecentGamerUpdates` rendering of list activity types. - Homepage/sidebar Recent Gamer Updates card and `/recent-gamer-updates` page. - Existing create/update feed items for Playing, Replaying, Continuously Playing, Completed, On Hold, Dropped, and Plan to Play should remain intact. ## Acceptance Criteria - Deleting a game-list entry does not produce a Recent Gamer Updates item that says the user is playing, replaying, completed, dropped, or otherwise actively status-updating that game. - The implementation explicitly chooses one deletion behavior: - preferably, game-list deletion is not written to the public `gamer_updates` feed; or - if deletion is intentionally kept public, it uses a clear `deleted`/`removed` activity type and copy such as "removed X from their list." - Existing create/update list-status changes continue to create the correct feed item. - Existing list deletion still soft-deletes the user's list row and redirects back to the list with the success message. - Guest/public feed views do not expose deleted-list activity as a misleading active status. - Banned/deleted user and `hide_public_feed_entries` filtering continues to apply. - Feed copy remains readable in light and dark mode. ## Test Coverage Required - Feature/regression test proving deleting a Playing list entry does not render as "is playing" in Recent Gamer Updates. - Feature/regression test proving deleting entries from each supported status does not render as that active status after deletion. - Test covering the chosen product behavior: - if deletions are suppressed, assert no public `gamer_updates` activity is created or rendered for delete events; or - if deletions are announced, assert the public copy says removed/deleted and does not use active status language. - Regression test confirming list deletion still soft-deletes the row and shows the existing success feedback. - Regression test confirming create/update status changes still produce the expected Recent Gamer Updates messages. - Regression test confirming `RecentGamerUpdates` still filters banned, deleted, soft-deleted, and feed-hidden users. - Run focused affected tests with `php artisan test --compact`. - Run `vendor/bin/pint --dirty --format agent` before closing the issue if PHP files are changed. ## Progress Checklist - [x] Game-list delete route exists - [x] Game-list deletion soft-deletes the row - [x] Game-list deletion currently calls `logGamerUpdate()` - [x] `logGamerUpdate()` currently derives `activity_type` from status/replay state - [x] `RecentGamerUpdates` renders active status activity types - [x] Decide whether game-list deletions should be public feed events - [x] Suppress delete activity or add a dedicated removed/deleted activity type - [x] Ensure delete events cannot render as Playing or another active status - [x] Preserve create/update feed activity - [x] Add focused regression coverage for delete, create/update, and feed filtering
jimmyb self-assigned this 2026-06-03 18:54:45 -05:00
Author
Member

Implemented and pushed in e5120db.

Summary:

  • Chose the suppression behavior recommended in the issue: deleting a game-list entry no longer writes a public gamer_updates activity.
  • GameListController::destroy() still authorizes, soft-deletes the row, redirects to the list, and keeps the existing "was removed from your list" success feedback.
  • Added regression coverage for deleting Playing, Replaying, Continuously Playing, Completed, On Hold, Dropped, and Plan to Play entries without creating or rendering Recent Gamer Updates items.
  • Existing create/update status activity was left unchanged; the status mapping regression still passes.

Verification:

  • vendor/bin/pint --dirty --format agent
  • php artisan test --compact tests/Feature/GameListPageTest.php --filter='deleting list entries does not create recent gamer updates for active statuses'
  • php artisan test --compact tests/Feature/GameListPageTest.php --filter='owner can update and delete their list entry'
  • php artisan test --compact tests/Feature/GameListStatusMappingTest.php

Note: the broader affected command surfaced pre-existing/unrelated local failures in two Alternative Titles assertions in GameListPageTest and one user_site_settings.id insert/schema failure in RecentGamerUpdatesPageTest; those were not caused by this change.

Implemented and pushed in `e5120db`. Summary: - Chose the suppression behavior recommended in the issue: deleting a game-list entry no longer writes a public `gamer_updates` activity. - `GameListController::destroy()` still authorizes, soft-deletes the row, redirects to the list, and keeps the existing "was removed from your list" success feedback. - Added regression coverage for deleting Playing, Replaying, Continuously Playing, Completed, On Hold, Dropped, and Plan to Play entries without creating or rendering Recent Gamer Updates items. - Existing create/update status activity was left unchanged; the status mapping regression still passes. Verification: - `vendor/bin/pint --dirty --format agent` - `php artisan test --compact tests/Feature/GameListPageTest.php --filter='deleting list entries does not create recent gamer updates for active statuses'` - `php artisan test --compact tests/Feature/GameListPageTest.php --filter='owner can update and delete their list entry'` - `php artisan test --compact tests/Feature/GameListStatusMappingTest.php` Note: the broader affected command surfaced pre-existing/unrelated local failures in two `Alternative Titles` assertions in `GameListPageTest` and one `user_site_settings.id` insert/schema failure in `RecentGamerUpdatesPageTest`; those were not caused by this change.
Codex closed this issue 2026-06-03 19:16:09 -05:00
Sign in to join this conversation.
No milestone
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
MyVideoGameList/myvideogamelist.com#352
No description provided.