2.0 KiB
2.0 KiB
Journal Worklog Plugin Design
Purpose
Add the first official Journal plugin as a replaceable plugin, not a desktop
core feature. It must give users a visible worklog surface and consume Activity
worklog suggestions through the command runtime added in
verstak.activity.suggestWorklog.
Scope
This slice creates verstak.journal with workspace-scoped worklog storage,
manual entry creation, and one-click import from Activity suggestions.
It does not implement billing reports, invoice export, timers, sync-specific
conflict handling, or cross-workspace report aggregation.
Behavior
- Journal appears as both a sidebar view and a workspace item.
- In a workspace, entries are stored under a workspace settings key.
- In the global view, Journal aggregates entries from every workspace key.
- A manual entry contains:
entryId;workspaceRootPath;date;title;summary;minutes;billable;- optional
sourceSuggestionId.
- Importing Activity suggestions calls:
api.commands.executeFor(
'verstak.activity',
'verstak.activity.suggestWorklog',
{ workspaceRootPath }
)
- Imported suggestions become non-billable entries by default.
- Import is idempotent by
sourceSuggestionId: importing the same Activity suggestion twice does not create duplicates. - If Activity is unavailable, Journal stays usable for manual entries and shows a status message.
Storage
Workspace entries use settings keys:
worklog:workspace:<encoded workspace root>
Global aggregation reads all settings keys with the worklog:workspace:
prefix.
Testing
scripts/smoke-journal-plugin.js must verify:
- manifest identity, capabilities, optional Activity dependency, and UI contributions;
- the Journal view mounts;
- manual entry creation stores and renders an entry;
- Activity import calls the command runtime and stores suggestions as entries;
- importing the same suggestion twice does not duplicate entries;
- global Journal aggregates workspace entries.