eclipse-timekeeper

Eclipse change synchronization acceptance

Issue: #219. This implements the Eclipse portion; web-client synchronization depends on #221 and remains required before the 2.0 release.

Behavior

The remote backend watches the existing owner-scoped /api/v1/changes endpoint in a cancellable system Job, using five-second long polls. The watcher does not hold the scheduling rule used by saves and reads. Refresh jobs share that rule, coalesce pending notifications and reload immutable metadata plus already loaded activity reports. The next poll starts from the revision of that complete metadata snapshot, so an incomplete read cannot advance the notification cursor. If a report’s selected task or project has disappeared from the owned snapshot, that report becomes empty; a now-invalid report filter cannot block updates to the other records and views.

Refresh preserves open editor drafts and their original expected versions. Inline Workweek editing already defers view refresh until editing ends. Failed authorization or transport marks the remote connection unavailable while keeping local storage closed. Reconnection retries full reads with a bounded exponential delay of one to thirty seconds and never replays an acknowledged command.

RESYNC_REQUIRED, or an empty change page indicating unavailable history, requests full resynchronization. That serialized refresh discards old opaque ETags before loading the current server snapshot. A reset arriving during an existing refresh schedules another reset instead of being lost. Closing the backend interrupts polling and cancels queued work. Embedded mode has no watcher.

Validation, 2026-10-12

Host: macOS aarch64, Temurin 21.0.12.1. All Eclipse runtimes use private workspaces; the installed fixtures use their own encrypted keyring and packaged server.

The final selected reactor passed 112 main tests, two restart tests and one account/synchronization test, with no failures, errors or skips. The five installed phases and all four new synchronization receipt markers passed. Server ZIP SHA-256: 739e932b5196620eaa9175243593564b03edf109b37d63970b6e77de1f33b9eb, from the verified Server artifact in run 38299034375, head 8e803fa.

The selected installed reactor is run with:

./mvnw -B -ntp -s /private/tmp/timekeeper-clean-settings.xml clean verify \
  -Premote-client-tests \
  -pl .,common/timekeeper-domain,common/timekeeper-service-api,common/timekeeper-http-client,eclipse/net.resheim.eclipse.timekeeper.db,eclipse/net.resheim.eclipse.timekeeper.ui,eclipse/net.resheim.eclipse.timekeeper-feature,eclipse/net.resheim.eclipse.timekeeper.mylyn,eclipse/net.resheim.eclipse.timekeeper.mylyn-feature,eclipse/net.resheim.eclipse.timekeeper.native-test,eclipse/net.resheim.eclipse.timekeeper.remote-test,eclipse/net.resheim.eclipse.timekeeper.remote-mylyn-test \
  '-Dui.test.include=**/*JobTest.java' \
  -Dtimekeeper.remote.distribution=/absolute/path/timekeeper-server.zip \
  -Dtycho.localArtifacts=ignore

The separate targeted Mylyn command selected **/Mylyn*Test.java and passed all six adapter/scope tests, including project/task renaming and competing-edit protection. The four Eclipse Job tests also passed separately. Shared domain, HTTP and database tests run in each reactor and are not unique additional tests.

A broader local Mylyn UI run failed while waiting for native dialogs to become active and eventually hit its 180-second process timeout. Its completed adapter/scope/Jira classes passed, but that run is not acceptance evidence for the full suite. Full Linux/Xvfb regression and all installed phases must pass in CI on the synchronization commit. All seven Build jobs for f3fbf3c subsequently passed in run 38313548997, including the complete Linux/Xvfb regression and all installed phases. Server containers verification also passed in run 38313549045. Downloaded installed reports confirm the five phases and four synchronization markers; secrets are excluded from the artifact. The base remote-client commit 5707be6 already passed all seven Build jobs in run 38300177616.

Remaining release work

Backend-switch acceptance continues in REMOTE-BACKEND-SWITCH.md. The new code does not clear the remaining #220 native preference-flow and uncertain-operation acceptance. Web workflows and web synchronization are still missing in #221/#219. Mylyn Error Log issue #243 is a separate gate; these functional tests do not certify a clean Error Log.