Worker login device limit verification

Changed branch/fields:
- worker_sessions device_type bucket: pc and mobile each allow at most 3 active devices
- tablet input and historical tablet rows normalize to mobile
- SQL guard rejects modifications to tracked historical migration files
- worker device APIs expose maxDevicesByType and deviceCounts
- worker login/device-management UI states separate PC and phone quotas

Artifacts:
- MODIFIED_FILE: /Users/yml/codes/order_site/device-limit-artifacts/MODIFIED_FILE.ts
- DIFF_FILE: /Users/yml/codes/order_site/device-limit-artifacts/DIFF_FILE.patch
- VERIFICATION.txt: /Users/yml/codes/order_site/device-limit-artifacts/VERIFICATION.txt
- ROLLBACK.sh: /Users/yml/codes/order_site/device-limit-artifacts/ROLLBACK.sh

Source paths changed:
- /Users/yml/codes/order_site/apps/backend/src/repositories/worker-platform/worker-session-repo.ts
- /Users/yml/codes/order_site/apps/backend/src/services/worker-platform/worker-auth-policy.ts
- /Users/yml/codes/order_site/apps/backend/src/services/worker-platform/worker-login-service.ts
- /Users/yml/codes/order_site/apps/backend/src/services/worker-platform/worker-session-auth-service.ts
- /Users/yml/codes/order_site/apps/backend/src/db/migrations/069_worker_session_device_type.sql
- /Users/yml/codes/order_site/apps/backend/scripts/check-sql-guard.ts
- /Users/yml/codes/order_site/apps/backend/src/services/worker-platform/worker-auth-policy.test.ts
- /Users/yml/codes/order_site/apps/frontend/src/services/worker.ts
- /Users/yml/codes/order_site/apps/frontend/src/pages/worker/WorkerLoginPage.tsx
- /Users/yml/codes/order_site/apps/frontend/src/pages/worker/WorkerProfileAccountModals.tsx
- /Users/yml/codes/order_site/apps/frontend/src/pages/worker/WorkerProfilePage.tsx

BASELINE
Command: npm test
Working directory: /tmp/order_site_device_baseline_0830/apps/backend
Input: detached HEAD ffb71f22 source before device-limit changes
Literal result: tests 378; pass 376; fail 0; skipped 2; exit status 0

Command: npm test
Working directory: /tmp/order_site_device_baseline_0830/apps/frontend
Input: detached HEAD ffb71f22 source before device-limit changes
Literal result: tests 15; pass 15; fail 0; skipped 0; exit status 0

Baseline worker-session-repo SHA-256: 9136d67c8f5cb3641979f8e5b577d9f4bd44f0b399862d2feaa69f2002d19ef1

MODIFIED
Command: npm run check:sql
Working directory: /Users/yml/codes/order_site/apps/backend
Input: current tree with immutable historical migration guard enabled
Literal result: [sql-guard] SQL 约束检查通过; exit status 0

Command: npm run format:check && npm run lint:check && npm run typecheck && npm test && npm run build
Working directory: /Users/yml/codes/order_site/apps/backend
Input: modified per-device session quota implementation and migration
Literal result: format passed; lint passed; typecheck passed; tests 379; pass 377; fail 0; skipped 2; build completed; exit status 0

Command: npm run format:check && npm run lint:check && npm run typecheck && npm test && npm run build
Working directory: /Users/yml/codes/order_site/apps/frontend
Input: modified per-device quota API types and management UI
Literal result: format passed; lint passed; typecheck passed; tests 15; pass 15; fail 0; skipped 0; build completed; exit status 0

Modified MODIFIED_FILE SHA-256: 33147b25bce759bc1af079f495d347196fda003e74f280dd41e1a194c75ff443

ROLLBACK
Command: device-limit-artifacts/ROLLBACK.sh device-limit-artifacts/rollback-copy-0830
Input: independent copy containing modified backend/frontend files, migration, and regression test
Literal result: restored device-limit baseline in device-limit-artifacts/rollback-copy-0830; worker-session-repo SHA-256 restored to 9136d67c8f5cb3641979f8e5b577d9f4bd44f0b399862d2feaa69f2002d19ef1; new migration and regression test removed; exit status 0
Restored behavior/status: rollback copy uses the original aggregate device-limit query and UI wording; working source and MODIFIED_FILE.ts remain changed.
