The setup can be seen in the screenshot. When a sticky piston receives a quick pulse (2 or 3 gameticks) to retract an observer that is facing away from it (so the piston is facing the "observing" side) and then quickly repowered, it doesn't update properly and doesn't extend again.
It turns out that when a sticky piston retracts an active observer and is then immediately repowered, it will not re-extend even though it should. When the observer is replaced by any other block, the piston behaves as expected and does re-extend.
The video ActiveObserverPistonBug1.13.mp4 shows the bug in action. The video ActiveObserverPistonBug1.12.mp4 shows how the piston behaves in 1.12.
Thanks to RedCMD for providing these videos!
Code analysis
In the onPlace(BlockState, Level, BlockPos, BlockState, boolean) method in the ObserverBlock class, the setBlock(BlockPos, BlockState, int) method is called and given the integer value 18. This prevents neighboring blocks from being updated. If instead the value 3 is given, neighboring blocks are updated, fixing this bug along with MC-137127.
Linked issues
is duplicated by 2
Attachments
Comments 6

Does this happens in older versions of the game too?
Also MC-109799 explains your issue?
This does not occur in 1.11 or 1.12.
MC-109799 is not the same issue. My issue arises regardless of how the sticky piston is powered.
A possible fix to this bug is to revert the line
if (blockState3 == blockState) {}
in the Level.java class, method setBlock() back to how it was in 1.12.2 (before 1.13) by deleting it
This checks if the current block (Unpowered Observer) is the same as the block to be set (Powered Observer), then send out the correct block updates
But because Observer_Powered != Observer_Unpowered, the updates are suppressed and the piston does not extend
[media]Duplicate of MC-135834