SIGN IN SIGN UP

fix(status): report languages from live File inventory, not all node rows (#474)

get_stats() derived the language list from every node row, so virtual or
leftover rows without a backing File node (e.g. the synthetic Spring Event
nodes with file_path='event') kept a language alive in 'code-review-graph
status' after the last real file of that language left the graph. Languages
now come from kind='File' rows only, sorted for deterministic output, so
the status file count and language list always describe the same live file
inventory.

Also rerun the Spring/Temporal resolvers when .java files leave the graph
via stale reconciliation or missing-path removal (mirroring the existing
python_changed check), so the stale virtual Event nodes themselves are
cleared instead of lingering in the database.

Regression tests: build/update flows must keep status equal to the SQLite
File rows, including an update that removes every file of one language.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FmPUotoqsNWWt3b41FMjwv
T
Tirth Kanani committed
5268f01f693d830307b499a4de090efc48c4c039
Parent: f88f26e