The only way that I can get all 3 nodes to go red is when the spec really goes invalid because it has something like SCHEMA.TABLE.COLUMN%TYPE in it somewhere. When I took those out, the spec never went invalid for me. You can check the status of both package and package body in dba_objects or all_objects to verify.
So far the only problem I’ve seen is that if the SB shows everything valid, but then I drop the table, and go back to SB and recompile body (without refreshing SB first), the “body” node will go red but the icon does not change to an X until I do a refresh.
I’ll fix that and keep looking though.