The HS Replay deck tracker app on mobile for android reveals the card chosen by sightless watcher before it is played. Essentially tells you the next card your opponent is going to draw.
Checked it out. Cause seems to be that Sightless creates copies of the three cards it offers in the set aside zone. The choices are hidden from the opponent, but when one is picked, that option is sent to the graveyard where it becomes public information. It also contains LINKED_ENTITY and COPIED_FROM_ENTITY_ID tags which point back to the original card which gets moved to the top of the deck.
D 17:11:43.6897828 PowerTaskList.DebugDump() - ID=1077 ParentID=1076 PreviousID=0 TaskCount=4
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - BLOCK_START BlockType=POWER Entity=[entityName=Sightless Watcher id=46 zone=PLAY zonePos=1 cardId=BT_323 player=2] EffectCardId= EffectIndex=0 Target=0 SubOption=-1
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - META_DATA - Meta=TARGET Data=0 InfoCount=1
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - Info[0] = [entityName=Sightless Watcher id=46 zone=PLAY zonePos=1 cardId=BT_323 player=2]
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - FULL_ENTITY - Updating [entityName=UNKNOWN ENTITY [cardType=INVALID] id=177 zone=SETASIDE zonePos=0 cardId= player=2] CardID=
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - tag=ZONE value=SETASIDE
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - tag=CONTROLLER value=2
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - tag=ENTITY_ID value=177
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - FULL_ENTITY - Updating [entityName=UNKNOWN ENTITY [cardType=INVALID] id=178 zone=SETASIDE zonePos=0 cardId= player=2] CardID=
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - tag=ZONE value=SETASIDE
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - tag=CONTROLLER value=2
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - tag=ENTITY_ID value=178
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - FULL_ENTITY - Updating [entityName=UNKNOWN ENTITY [cardType=INVALID] id=179 zone=SETASIDE zonePos=0 cardId= player=2] CardID=
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - tag=ZONE value=SETASIDE
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - tag=CONTROLLER value=2
D 17:11:43.6897828 PowerTaskList.DebugPrintPower() - tag=ENTITY_ID value=179
D 17:11:43.6897828 PowerTaskList.DebugDump() - Block End=(null)
D 17:11:43.6897828 PowerProcessor.PrepareHistoryForCurrentTaskList() - m_currentTaskList=1077
D 17:11:43.9396013 PowerProcessor.EndCurrentTaskList() - m_currentTaskList=1077
D 17:11:43.9396013 ChoiceCardMgr.WaitThenShowChoices() - id=8 BEGIN
D 17:11:44.9732522 ChoiceCardMgr.DoesLocalChoiceMatchPacket(): Null list passed in! localChoices=, packetChoices=System.Collections.Generic.List`1[System.Int32].
D 17:11:44.9732522 ChoiceCardMgr.WaitThenHideChoicesFromPacket() - id=8 END WAIT
D 17:11:44.9895113 PowerTaskList.DebugDump() - ID=1078 ParentID=0 PreviousID=1077 TaskCount=2
D 17:11:44.9895113 PowerTaskList.DebugDump() - Block Start=(null)
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - SHOW_ENTITY - Updating Entity=[entityName=UNKNOWN ENTITY [cardType=INVALID] id=179 zone=SETASIDE zonePos=0 cardId= player=2] CardID=tt_004
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=CONTROLLER value=2
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=CARDTYPE value=MINION
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=TAG_LAST_KNOWN_COST_IN_HAND value=3
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=479 value=2
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=COST value=3
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=ATK value=2
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=HEALTH value=3
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=LAST_AFFECTED_BY value=46
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=TRIGGER_VISUAL value=1
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=ZONE value=GRAVEYARD
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=ENTITY_ID value=179
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=FACTION value=NEUTRAL
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=RARITY value=COMMON
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=LINKED_ENTITY value=52
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=CREATOR value=46
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=1037 value=2
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=1068 value=0
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=CREATOR_DBID value=56973
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=SPAWN_TIME_COUNT value=1
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - tag=COPIED_FROM_ENTITY_ID value=52
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - META_DATA - Meta=HISTORY_TARGET Data=0 InfoCount=1
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - Info[0] = [entityName=UNKNOWN ENTITY [cardType=INVALID] id=52 zone=DECK zonePos=0 cardId= player=2]
D 17:11:44.9895113 PowerTaskList.DebugPrintPower() - BLOCK_END
As expected, next turn the opponent drew tt_004, Flesheating Ghoul, card ID 52.
https://us.forums.blizzard.com/en/hearthstone/t/hs-replay-reveals-sightless-watcher-card/30506
Checked it out. Cause seems to be that Sightless creates copies of the three cards it offers in the set aside zone. The choices are hidden from the opponent, but when one is picked, that option is sent to the graveyard where it becomes public information. It also contains LINKED_ENTITY and COPIED_FROM_ENTITY_ID tags which point back to the original card which gets moved to the top of the deck.
As expected, next turn the opponent drew tt_004, Flesheating Ghoul, card ID 52.