fix: tighten VC-sync hint gate and extract testable helper
Addresses PR review on the migrate hint: 1. Gate now also requires `failed === 0`. The previous gate fired on partial-failure runs (migrated > 0 && failed > 0), where the command hard-exits with code 2 a few lines later. The "successfully migrated" wording followed by a failure exit code was a contradiction that nudged users to commit/push a tree the command itself reports as failed. 2. Extract `displayForwardResult` and `logVcSyncHint` as protected methods so the gate logic is unit-testable without spinning up the daemon transport. 3. Drop the inline `# review the conversion` / `# sync to cloud` column-aligned annotations — the fixed-width padding rendered raggedly on narrow terminals and the commands are self-describing. 4. Add unit tests (5 cases) covering the gate combinations: text+real+migrated>0+failed=0 (hint fires), text+dry-run (no hint), text+migrated=0 (no hint), text+real+migrated>0+failed>0 (no hint — exit-code guard), json+real+migrated>0 (envelope only on stdout, stderr empty).
N
Nguyễn Thuận Phát committed
be740ea02f964dbb6469885b07f36c6078c66ee5
Parent: 2b6607c