commands/push.ts already resolves the full plan up front via resolveMarkdownInputs (files, missing, skipped) before pushFiles creates records, and sync recently gained --dry-run (src/index.ts reportDryRunPlan). A bulk import across globs/directories has no way to confirm the glob matched the right notes before it hammers POST /api/records once per file; a --dry-run that prints the resolved file list and the missing/skipped inputs, then exits without calling createRecord, catches a wrong glob cheaply and is symmetric with sync --dry-run.
Acceptance criteria
- Give push the same preview affordance sync just got, listing the resolved files (and missing/skipped inputs) without creating any server records.
- Includes tests covering the change.
- Lint, tests, and CI green.
Promoted from improvement digest #132
commands/push.ts already resolves the full plan up front via resolveMarkdownInputs (files, missing, skipped) before pushFiles creates records, and sync recently gained --dry-run (src/index.ts reportDryRunPlan). A bulk import across globs/directories has no way to confirm the glob matched the right notes before it hammers POST /api/records once per file; a --dry-run that prints the resolved file list and the missing/skipped inputs, then exits without calling createRecord, catches a wrong glob cheaply and is symmetric with sync --dry-run.
Acceptance criteria
Promoted from improvement digest #132