SIGN IN SIGN UP

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