52 lines
2.3 KiB
Markdown
52 lines
2.3 KiB
Markdown
# 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.
|