xint data directory persistence fix

xint Data Directory Persistence Fix

xint’s costs.ts and reliability.ts use join(import.meta.dir, "..", "data/") to resolve data paths — relative to the lib/ directory inside the versioned release, NOT respecting the XINT_DATA_DIR env var. This means runtime state (api-costs.json, reliability-metrics.json, oauth-tokens.json) gets written inside the release directory and would be LOST on version upgrade.

Fix: Symlink releases/<version>/data/opt/infra/xint/data/. Must be redone on every version upgrade.

Upgrade checklist addition:

  1. Download new release to releases/<tag>/
  2. bun install
  3. rm -rf releases/<tag>/data && ln -sfn /opt/infra/xint/data releases/<tag>/data
  4. Recreate lib/spinner.ts stub if upstream still missing
  5. Switch symlink: ln -sfn releases/<tag> current
  6. Verify: xint health