Follow-up to #922. The polling watcher now reports one removal and a later re-addition, but the actual home-tsc --watch loop in packages/ts_cli/src/tsc_main.zig explicitly skips every .removed change before Program.updateSource/recompileChanged. Program currently exposes updateSource but no corresponding source-removal operation. This means deleting an imported or root file can leave stale source, diagnostics and emit state until another event; #922 does not solve this CLI-level gap.
Acceptance: model source removal in Program and reverse dependency invalidation without substituting empty source or suppressing diagnostics; make the watch loop process removal and publish the complete current diagnostic/output set; cover delete, repeated absence, same-metadata recreate, imported-file deletion/recreation, and error/OOM paths with actual CLI or Program controls. Preserve existing file identities and unchanged-source incremental behavior. No filename-specific workaround or passing credit from watcher-only tests.