import <files…> (FR1/FR2) — detect+parse via adapters, append the batch atomically into the
vault, and save. Idempotency + ImportConflict detection are core’s job (append_import_batch);
the CLI surfaces the per-source FR2 counts (dropped/unclassified) and the append/dup/conflict tally.
init — create the encrypted vault (Vault::create), initialize the core event schema + CLI
config table (via Session::create), and FORCE the §8 key-backup step. The key-backup path is a
required argument: a vault with no backed-up key is unrecoverable, so init never skips it.
reconcile decision emitters (FR6/FR7/FR8, §7.2). Each fn builds exactly ONE EventPayload decision
variant and appends it via append_decision (monotonic decision_seq), then saves. Decisions are
append-only and re-projectable; the engine resolves precedence (latest-decision_seq, Void-first).
now is the injected decision creation-time / safe-harbor made-date (§6.2) — deterministic in tests.
what-if sell (task #43) — §43 READ-ONLY hypothetical-sale tax planning. Opens the vault, runs the
pure deterministic projection, and calls btctax_core::whatif::sell with the synthetic sale.
Appends NOTHING, writes NO side-table row, calls no session.save() (the vault is byte-identical
after — the whatif_never_persists KAT). Tax decision-support (consequences), NOT buy/sell advice.