Root cause: Admin server's DB_PATH defaulted to its own assets.db (local copy
with 7,560 assets) instead of the main app's DB (10,148 assets). Machine ID
68026 didn't exist in the stale copy.
Fix:
- Copied main app's assets.db over (now synced)
- Set CANTEEN_DB_PATH in run.sh to default to ../canteen-asset-tracker/assets.db
(env var can still override for custom setups)
- New cantaloupe_sync.py module with complete pipeline
- Heuristic Excel column mapping (20+ keyword patterns)
- Diff engine: detects new/changed/removed/unchanged assets
- 5 API endpoints: sync, list batches, view batch, approve, reject
- cantaloupe_sync_batches table with status workflow
- Admin server port changed to 8090
- openpyxl added to requirements.txt