geocrop-platform./apps/nextgen/.harness/changelogs/2026-07-18-p2-2-sync-ui.md

52 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.1H.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.