/**
 * One-time migration to the current device-config + pins layout:
 *
 *   (a) central `fleet.devices.<name>.config` (the short-lived #2458 store)
 *       folds into each per-device doc's `config:` block — central wins
 *       (newest intent) — and is stripped from central;
 *   (b) legacy `.history/devices/auto-launch.json` flags fold into the doc
 *       `config:` too (oldest store — only fills keys not already set);
 *   (c) a top-level `defaultBrowserProfile:` in a device doc folds into that
 *       doc's `config:`;
 *   (d) agent pins (`agents:` / `isolatedAgents:`) leave the TRACKED
 *       per-device docs: THIS machine's pins move to the untracked
 *       `.history/devices/pins-<host>.json` (pins file wins on conflict — it
 *       is the destination); peers' pins are simply dropped from the tracked
 *       file (each peer owns/rewrites its own pins locally).
 *   (e) legacy `.history/devices/ignored.json` (per-machine, UNTRACKED — a
 *       dismissal never reached the rest of the fleet) folds into the central
 *       TRACKED `fleet.ignored` list (RUSH-3062). Entries keep the legacy
 *       file's `updatedAt` as `ignoredAt` and take THIS machine's id as
 *       `ignoredOn` — the legacy store recorded neither, so the folding box
 *       is the only attribution available. The legacy file is removed only
 *       AFTER the central write lands.
 *
 * What stays put: a device doc's existing `config:` (already the right home)
 * and its `routines:` list (operator-owned, read cross-device by
 * routine-activation.ts).
 *
 * Order is crash-safe: destination writes (pins file, device doc) land BEFORE
 * the source strip (central), so a crash mid-fold re-folds on the next run and
 * the destination-wins merges make that a no-op. Idempotent — after a
 * successful run none of the legacy locations hold data, so re-running is a
 * cheap existence check. A doc that fails to parse is LOUDLY skipped (left
 * untouched) so the next run retries — never silently emptied, same corruption
 * contract the device registry keeps.
 *
 * Invoked from three places so every install converges regardless of entry
 * point: `runMigration()` (fresh / sentinel-less installs), daemon boot, and
 * the first `lib/device-config.ts` read/write in a process.
 */
/**
 * Fold every legacy device-config/pins location into the current layout. Safe
 * to call on every boot / config access: cheap no-op once folded.
 */
export declare function migrateDeviceConfigStores(): void;
