Verified September 21, 2026, after PR #196 merged (0cbf453). Historical
migrations remain out of scope. All records and workspaces used here were
synthetic; no personal Timekeeper database was opened.
R-4.41-202608281142, macOS Cocoa aarch64.
This was a pristine Platform installation, not the Tycho test application or
a preconfigured IDE package.buildproperties.json:
5a35d58899a1400c8b0447c0e3a34b8124637c7c0da78326c2a1dac212ff9d61e0e80b307b9dd0c2a4ae1ae2cc9dacf526d7639267f812759b043e534c9737a1.mvn -B -ntp clean verify -Dtycho.localArtifacts=ignore.
All six reactor projects passed: 63 database/report/packaging tests and
9 UI/integration tests passed; current-schema CSV export is active again.net.resheim.eclipse.timekeeper-site/target/net.resheim.eclipse.timekeeper-2.0.0.202609211009.zip.
This is a verification artifact, not a published release.Local evidence is under /private/tmp/timekeeper-installed.RaDTib (installation
and runtime logs, three SQL snapshots, isolated applications and data). The
clean source/build is /private/tmp/timekeeper-packaging.XhVDPr, with build log
/private/tmp/timekeeper-packaging-final.log. These temporary files are not
committed and may be removed by the operating system.
The first clean installation resolved bundles but omitted Mylyn’s Tasks
search/index contributions. Opening Task List logged:
No search provider was registered. Tasks search is not available.
Timekeeper now requires the complete org.eclipse.mylyn.tasks.feature, version
4.12.0 with compatible matching. Bugzilla remains an optional separate connector.
The same installation contained both the host’s slf4j.simple and Timekeeper’s
explicitly included org.eclipse.equinox.slf4j. Removing the latter from the
shipping feature avoids installing a second SLF4J provider. Timekeeper retains
the SLF4J API and uses the host’s logging provider. The test target’s logging
configuration is separate from the shipping feature.
Two metadata regression tests check these requirements. They do not replace actual p2 resolution or runtime testing.
2.0.0.202609210953) into a pristine runtime
using p2 director and the dated SimRel repository. Installation succeeded.Synthetic installed acceptance, activated it and deactivated it through
Workweek. Inspected Timekeeper’s database and label preferences without
changing settings. The database page has no historical recovery actions.2026-09-21 12:04:18.181108 to 2026-09-21 12:06:00.993865;
H2 DATEDIFF('SECOND', ...) returned 102. The minute-formatted Workweek total
was 0:01 on Monday September 21.2.0.0.202609211009 in one p2 uninstall/install transaction. Both succeeded.
Both installations contained Mylyn Tasks search/index bundles and only the
host’s SLF4J provider, not org.eclipse.equinox.slf4j.TASK_URL changing from NULL to an empty string when
the local Mylyn task was relinked. IDs, timestamps, current-activity state,
labels and other stored data were unchanged; this is not an exact SQL match.0:01 total without the original Mylyn task list. Closed the IDE and exported
SQL again: after-clean.sql exactly matched after-update.sql with cmp.Every GUI launch explicitly supplied a temporary workspace, temporary Java
user.home, Java 21 and
-Dnet.resheim.eclipse.timekeeper.db.url=jdbc:h2:/private/tmp/timekeeper-installed.RaDTib/data/timekeeper.
The database URL override acts before normal storage preference resolution;
these original checks therefore did not validate preference-selected storage modes.
A follow-up used the corrected installed feature build
2.0.0.202609211112 from PR #202 with the same Eclipse Platform 4.41 and
Java 21 runtime. The subsequent documentation-only PR #203 does not change the
installed bundles. A clean build of its merged main passed 63
database/report/packaging tests and 10 UI/integration tests before the installed
checks. No GUI launch in this follow-up supplied the database URL system
property, so the persisted preference was the only storage selector.
The installed Database preference page selected and saved each of these modes, with a normal Eclipse shutdown and restart between changes:
<workspace>/.timekeeper/h2db;~/.timekeeper/h2db with AUTO_SERVER=TRUE and the
configured fixed port;jdbc:h2:tcp://localhost:19092/timekeeper URL served by a
separate local-only H2 process.Workweek opened normally after every restart. Console output identified the
expected JDBC URL in each run. Each new database contained schema version 1 in
READY/NEW state and seven default labels. Switching storage left the other
database files intact; modification times changed only when their corresponding
mode was active. The TCP database was also queried through its server after
Eclipse shut down, then the temporary server was stopped cleanly.
This verifies the installed storage selector, embedded workspace storage,
shared mixed mode and a local TCP server. It does not certify an externally
managed remote server, authentication, encryption or network-failure behavior.
Evidence remains under /private/tmp/timekeeper-installed.RaDTib; it is
temporary and contains only synthetic databases.
A later follow-up ran two copies of the installed application with separate workspaces against one shared AUTO_SERVER database. Both read the same task; the second committed a new activity while the first remained connected, and the first client’s later shutdown did not overwrite it. The second client also saved successfully after the original server-owner process shut down.
The test exposed an important support boundary: a running client does not invalidate its EclipseLink or Workweek cache when another process commits, and the shared current activity has no client owner or lease. Restart reloads the new records. A deliberate port 9090 conflict produced a visible database- unavailable status and an unchanged before/after SQL export. See the concurrent installed-instance report for the full procedure, evidence and limitations.
The installed acceptance matrix now also covers abrupt termination and startup
reconciliation. A durable open activity retained the same ID and start time
across restart, SIGKILL and another restart while its Mylyn task remained
active. When the same durable database state was opened with that Mylyn task
inactive, startup closed the activity at its persisted last-active tick and
committed both the end time and cleared current reference.
This run found and fixed two recovery defects (an uncommitted update and a
30-minute probe end that could be in the future) plus a null idle-status race.
The corrected installed build was 2.0.0.202609211243; the full build passed
64 database/report/packaging and 10 UI/integration tests. See the
interrupted-activity report for exact identifiers,
timestamps, reproduction boundaries and the immediate post-activation durability
limitation.
Use disposable copies of the runtime and separate temporary workspace/home/data directories. Never point this procedure at an unsupported or personal database. Build from clean sources, then use the p2 director with these arguments, substituting absolute temporary paths:
<app>/Contents/MacOS/eclipse
-nosplash -consoleLog -vm <jdk21>/bin/java
-data <temporary-director-workspace>
-application org.eclipse.equinox.p2.director
-repository file:<absolute-built-repository>,https://download.eclipse.org/releases/2026-09/202609091000/
-installIU net.resheim.eclipse.timekeeper.feature.group/<built-version>
-vmargs -Duser.home=<temporary-home> -Declipse.p2.mirrors=false
-Dnet.resheim.eclipse.timekeeper.db.url=jdbc:h2:mem:provisioning
For the update transaction, additionally provide
-uninstallIU net.resheim.eclipse.timekeeper.feature.group/<installed-version>.
For the GUI launch omit the director application/repository/install arguments,
use a separate GUI workspace and replace the in-memory URL with an explicit
temporary file database URL. Close Eclipse before taking SQL snapshots using
H2’s org.h2.tools.Script, with IFEXISTS=TRUE;ACCESS_MODE_DATA=r on the URL and
NOPASSWORDS NOSETTINGS export options. Preserve the first snapshot for comparison.
org.eclipse.mylyn.commons.ui theme error:
NumberFormatException: For input string: "or" under radix 16, from
E4ThemeColor.getRGBFromCssString, through GradientColors and
TaskListToolTip. Inspection of the selected Mylyn source shows the parser
treats an unrecognized symbolic CSS color as hex. It logs the failure and
returns null. Workweek remains usable, but clean dependency-error acceptance
is not complete. No upstream fix has been included here.sa/empty-password configuration.The follow-up clean build re-enabled current-schema CSV export coverage and added a round-trip import assertion: all 10 UI/integration tests passed, including manual activity time-range editing on macOS aarch64. The editor test remains guarded on Linux because of its known SWTBot focus issue. The CSV format is not a database backup or migration mechanism.
The follow-up lifecycle test also found and fixed a timestamp defect in
Task.endActivity(LocalDateTime): the idle-time path supplied the last active
timestamp, but the method discarded it and used the current clock time. The
regression test now verifies that the supplied timestamp is persisted exactly.
The clean install/update portions of step 6 are verified. The upgrade is not ready for publication while the remaining runtime and platform checks are open.