element-hq / element-hq/hydrogen-web
App doesn't detect beginning of timeline and keeps trying to paginate back
- Dominant language
- TypeScript
- Stars
- 714
- Forks
- 131
- PR merge metrics
- No merged PRs in 30d
Description
When scrolling to the top of a room, I often see errors like this popping up, seemingly in a loop:
I have a feeling this might be happening more recently than it was in the past, so perhaps there was a change in synapse that helped provoke this behavior in Hydrogen,
```
room.fillGap(): Invalid end token in response:
writeFragmentFill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/matrix/room/timeline/persistence/GapWriter.js:167:19
fillGap/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/matrix/room/BaseRoom.js:314:45
async*run@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/logging/LogItem.ts:118:30
_run@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/logging/BaseLogger.ts:57:25
run@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/logging/BaseLogger.ts:34:17
wrapOrRun@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/logging/BaseLogger.ts:18:19
fillGap@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/matrix/room/BaseRoom.js:273:38
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:34:34
notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
restoreScrollPosition@http://localhost:3000/ui/session/room/TimelineView.ts:73:12
render/this.tilesView<@http://localhost:3000/ui/session/room/TimelineView.ts:26:61
onUpdate@http://localhost:3000/ui/session/room/TimelineView.ts:142:10
emitUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/observable/list/BaseObservableList.ts:30:9
_emitSpontanousUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TilesCollection.js:45:14
emitChange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/SimpleTile.js:82:18
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:44:22
async*notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
restoreScrollPosition@http://localhost:3000/ui/session/room/TimelineView.ts:73:12
render/this.tilesView<@http://localhost:3000/ui/session/room/TimelineView.ts:26:61
onUpdate@http://localhost:3000/ui/session/room/TimelineView.ts:142:10
emitUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/observable/list/BaseObservableList.ts:30:9
_emitSpontanousUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TilesCollection.js:45:14
emitChange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/SimpleTile.js:82:18
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:44:22
async*notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
restoreScrollPosition@http://localhost:3000/ui/session/room/TimelineView.ts:73:12
render/this.tilesView<@http://localhost:3000/ui/session/room/TimelineView.ts:26:61
onUpdate@http://localhost:3000/ui/session/room/TimelineView.ts:142:10
emitUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/observable/list/BaseObservableList.ts:30:9
_emitSpontanousUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TilesCollection.js:45:14
emitChange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/SimpleTile.js:82:18
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:44:22
async*notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
restoreScrollPosition@http://localhost:3000/ui/session/room/TimelineView.ts:73:12
render/this.tilesView<@http://localhost:3000/ui/session/room/TimelineView.ts:26:61
onUpdate@http://localhost:3000/ui/session/room/TimelineView.ts:142:10
emitUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/observable/list/BaseObservableList.ts:30:9
_emitSpontanousUpdate@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TilesCollection.js:45:14
emitChange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/SimpleTile.js:82:18
fill@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:44:22
async*notifyVisible@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js:58:38
_setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:76:22
setVisibleTileRange/<@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:60:22
promise callback*setVisibleTileRange@http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/TimelineViewModel.js:59:31
updateVisibleRange@http://localhost:3000/ui/session/room/TimelineView.ts:113:16
[GapTile.js:36:25](http://localhost:3000/@fs/home/bwindels/dev/hydrogen-web/src/domain/session/room/timeline/tiles/GapTile.js)
Contributor guide
Research direction
Reproduce the loop by scrolling to the top of a room, then trace the gap-loading flow from src/domain/session/room/timeline/tiles/GapTile.js through src/matrix/room/BaseRoom.js to src/matrix/room/timeline/persistence/GapWriter.js, especially the reported line 167. Check how the invalid end token is handled and how the beginning of the timeline is represented; done means reaching the start no longer triggers repeated pagination attempts.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, typescript
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100