generate_companion_project.rb had drifted far behind the
hand-maintained iTerm2Companion.xcodeproj. Re-running it (the
documented "re-run after adding source files" workflow) produced a
project that failed to build: it referenced a nonexistent single
iTerm2Companion.entitlements, and it recreated only the app target,
silently dropping the PushService notification-service extension, the
iTerm2CompanionTests bundle, the WhisperKit package dependency, and 9
of the 24 shared Mac sources.
Rewrite the generator to reproduce the current project faithfully:
the app plus the embedded PushService app-extension and the hosted
test bundle, the WhisperKit remote package, per-config Debug/Release
entitlements (development vs production APNs), the full shared-source
list, and a scheme wired for build/run/test. Verified by regenerating
from scratch: clean device build embeds and validates PushService,
and all 28 unit tests pass on an iOS 26 simulator.
Also document in CLAUDE.md that this project is generated and that
structural changes made in Xcode must be mirrored into the generator,
so it cannot drift like this again.