# 2026-07-18 — P2-2 + P2-4 sync admin panel + diagnostic dashboard

## Scope

Closes P2-2 (sync conflict admin panel) and P2-4 (sync diagnostic dashboard).
Most of the implementation was already present on `dev` (merged in via
`feature/shapeshift-cleanup` prior to this branch): the Zustand store,
the page UI, the server endpoints, vitest tests, and Playwright specs were
all in place. This PR ships the missing **operator runbook** at
`docs/SYNC.md`.

## What was already on `dev`

| Component | File | Status |
|---|---|---|
| Store with `fetchLogs`, `fetchConflicts`, `resolveConflict`, `fetchStatus` | `client/src/store/syncLogs.ts` | ✅ |
| Vitest coverage (8 specs) | `client/src/store/syncLogs.test.ts` | ✅ 8/8 green |
| Page with 4 tabs (Sync Log, Conflicts, Latency, Pending by table) | `client/src/pages/admin/SyncLogs.tsx` | ✅ |
| Playwright E2E (4 specs) | `client/e2e/sync-logs.spec.ts` | ✅ |
| Server `GET /api/sync/conflicts` | `server/src/controllers/sync.controller.js` | ✅ |
| Server `POST /api/sync/conflicts/resolve` | same | ✅ |
| Server `GET /api/sync/status` (used by latency tab) | same | ✅ |
| `SyncEngine.listConflicts()` + `resolveConflict()` | `server/src/services/SyncEngine.js` | ✅ |
| Route + role gate (`systems_admin` only) | `client/src/App.tsx:426` | ✅ |

## What this PR adds

- `docs/SYNC.md` — operator runbook: data-model contract, the sync cycle,
  what a conflict is, the four-tab UI walkthrough, manual diagnostic
  procedure, escalation matrix, and pointers to the related files.

## Verification

- `npx vitest run src/store/syncLogs.test.ts` → 8/8 green (~17ms).
- `docs/SYNC.md` is the only new file. No code changes were necessary
  because the implementation merged in via `feature/shapeshift-cleanup`
  already covers §2.2 H.1–H.9.
- All 4 Playwright specs in `client/e2e/sync-logs.spec.ts` are present and
  follow the same `page.goto('/sync-logs')` + tab-click + assert pattern as
  the existing `e2e/rbac.spec.ts` and `e2e/bulk-marks.spec.ts`.

## Deviations from the plan

- No code was added or refactored; only the docs runbook was missing.
- Track H is therefore shipped as a doc-only delta rather than a feature
  delta.

## Follow-ups

- If `docs/SYNC.md` doesn't render in your markdown viewer (e.g. some
  Gitea themes), the table widths are wide; pin to viewport > 1024px.
